/[openfoncier]/branches/3.34.2/obj/dossier_instruction.class.php
ViewVC logotype

Annotation of /branches/3.34.2/obj/dossier_instruction.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4633 - (hide annotations)
Tue Jun 28 10:35:05 2016 UTC (8 years, 7 months ago) by softime
Original Path: trunk/obj/dossier_instruction.class.php
File size: 77051 byte(s)
* Correction - Lorsqu'il y avait plus d'un événement d'instruction dans un DI
  alors on le qualifiait d'instruit. Dorénavant on vérifie que les événements
  créés ne sont pas de type affichage, considérés comme non instruisant le DI.
  Ticket #8378.
1 mbroquet 3730 <?php
2    
3     //
4     require_once "dossier.class.php";
5     require_once "../obj/geoads.class.php";
6    
7     //
8     class dossier_instruction extends dossier {
9    
10     /**
11     * Instance de la classe demande
12     *
13     * @var mixed
14     */
15     var $inst_demande = null;
16    
17     function dossier_instruction($id, &$db, $DEBUG) {
18     //
19     //$this->constructeur($id, $db, $DEBUG);
20     $this->dossier($id, $db, $DEBUG);
21     }
22    
23     /**
24     * Définition des actions disponibles sur la classe.
25     *
26     * @return void
27     */
28     function init_class_actions() {
29     //
30     parent::init_class_actions();
31    
32     // ACTION - 001 - modifier
33     //
34     $this->class_actions[1]["portlet"]["libelle"] = _("Modifier");
35     $this->class_actions[1]["condition"] = array(
36     "is_user_from_allowed_collectivite",
37     "is_editable",
38     );
39    
40     // ACTION - 002 - supprimer
41     //
42     $this->class_actions[2]["portlet"]["libelle"] = _("Supprimer");
43     $this->class_actions[2]["portlet"]["order"] = 125;
44     $this->class_actions[2]["condition"] = array(
45     "is_user_from_allowed_collectivite",
46     );
47    
48     // ACTION - 100 - donnees_techniques
49     // Affiche dans un overlay les données techniques
50     $this->class_actions[100] = array(
51     "identifier" => "donnees_techniques",
52     "portlet" => array(
53     "type" => "action-self",
54     "libelle" => _("Données techniques"),
55     "order" => 100,
56     "class" => "rediger-16",
57     ),
58     "view" => "view_donnees_techniques",
59     "permission_suffix" => "donnees_techniques_consulter",
60     "condition" => array(
61     "is_user_from_allowed_collectivite",
62     "can_open_donnees_techniques",
63     ),
64     );
65    
66     // ACTION - 110 - rapport_instruction
67     // Affiche dans un overlay le rapport d'instruction
68     $this->class_actions[110] = array(
69     "identifier" => "rapport_instruction",
70     "portlet" => array(
71     "type" => "action-self",
72     "libelle" => _("Rapport d'instruction"),
73     "order" => 110,
74     "class" => "rediger-16",
75     ),
76     "view" => "view_rapport_instruction",
77     "permission_suffix" => "rapport_instruction_rediger",
78     "condition" => array(
79     "is_user_from_allowed_collectivite",
80     "can_open_rapport_instruction",
81     ),
82     );
83    
84     // ACTION - 111 - recepisse
85     // Affiche l'édition
86     $this->class_actions[111] = array(
87     "identifier" => "recepisse",
88     "portlet" => array(
89     "type" => "action-direct",
90     "libelle" => _("Regenerer le recepisse"),
91     "order" => 111,
92     "class" => "pdf-16",
93     ),
94     "view" => "formulaire",
95     "method" => "regenerate_recepisse",
96     "permission_suffix" => "regenerate_recepisse",
97     "button" => "valider",
98     "condition" => array(
99     "is_user_from_allowed_collectivite",
100     "can_regenerate_recepisse",
101     ),
102     );
103    
104     // ACTION - 120 - geolocalisation
105     // Affiche dans un overlay la géolocalisation
106     $this->class_actions[120] = array(
107     "identifier" => "geolocalisation",
108     "portlet" => array(
109     "type" => "action-self",
110     "libelle" => _("Geolocalisation"),
111     "order" => 120,
112     "class" => "rediger-16",
113     ),
114     "view" => "view_geolocalisation",
115     "permission_suffix" => "geolocalisation_consulter",
116     "condition" => array(
117     "is_user_from_allowed_collectivite",
118     "can_open_geolocalisation",
119     ),
120     );
121    
122     // ACTION - 121 - geolocalisation verif parcelles
123     // action de l'overlay de géolocalisation verif_parcelle
124     $this->class_actions[121] = array(
125     "identifier" => "geolocalisation_verif_parcelle",
126     "view" => "view_geolocalisation_verif_parcelle",
127     "permission_suffix" => "geolocalisation_consulter",
128     "condition" => array(
129     "is_user_from_allowed_collectivite",
130     "can_open_geolocalisation",
131     ),
132     );
133    
134     // ACTION - 122 - geolocalisation calcul_emprise
135     // action de l'overlay de géolocalisation calcul_emprise
136     $this->class_actions[122] = array(
137     "identifier" => "geolocalisation_calcul_emprise",
138     "view" => "view_geolocalisation_calcul_emprise",
139     "permission_suffix" => "geolocalisation_consulter",
140     "condition" => array(
141     "is_user_from_allowed_collectivite",
142     "can_open_geolocalisation",
143     ),
144     );
145    
146     // ACTION - 123 - geolocalisation dessin_emprise
147     // action de l'overlay de géolocalisation dessin_emprise
148     $this->class_actions[123] = array(
149     "identifier" => "geolocalisation_dessin_emprise",
150     "view" => "view_geolocalisation_dessin_emprise",
151     "permission_suffix" => "geolocalisation_consulter",
152     "condition" => array(
153     "is_user_from_allowed_collectivite",
154     "can_open_geolocalisation",
155     ),
156     );
157    
158     // ACTION - 124 - geolocalisation calcul_centroide
159     // action de l'overlay de géolocalisation calcul_centroide
160     $this->class_actions[124] = array(
161     "identifier" => "geolocalisation_calcul_centroide",
162     "view" => "view_geolocalisation_calcul_centroide",
163     "permission_suffix" => "geolocalisation_consulter",
164     "condition" => array(
165     "is_user_from_allowed_collectivite",
166     "can_open_geolocalisation",
167     ),
168     );
169    
170     // ACTION - 125 - geolocalisation recup_contrainte
171     // action de l'overlay de géolocalisation recup_contrainte
172     $this->class_actions[125] = array(
173     "identifier" => "geolocalisation_recup_contrainte",
174     "view" => "view_geolocalisation_recup_contrainte",
175     "permission_suffix" => "geolocalisation_consulter",
176     "condition" => array(
177     "is_user_from_allowed_collectivite",
178     "can_open_geolocalisation",
179     ),
180     );
181    
182     // ACTION - 130 - edition
183     // Affiche l'édition
184     $this->class_actions[130] = array(
185     "identifier" => "edition",
186     "portlet" => array(
187     "type" => "action-blank",
188     "libelle" => _("Recapitulatif"),
189     "order" => 130,
190     "class" => "pdf-16",
191     ),
192     "view" => "view_edition",
193     "permission_suffix" => "consulter",
194     "condition" => array(
195     "is_user_from_allowed_collectivite",
196     ),
197     );
198    
199     // ACTION - 140 - Redirection vers le SIG
200     $this->class_actions[140] = array(
201     "identifier" => "localiser",
202     "view" => "view_localiser",
203     "permission_suffix" => "localiser-sig-externe",
204     );
205    
206     // ACTION - 150 - Générer la clé accès citoyen
207     // Ce bouton est affiché seulement si le DA lié n'a pas de clé associée
208     $this->class_actions[150] = array(
209     "identifier" => "generate_citizen_access_key",
210     "portlet" => array(
211     "type" => "action-direct",
212     "libelle" => _("Generer la cle d'acces au portail citoyen"),
213     "class" => "citizen_access_key-16"
214     ),
215     "method" => "generate_citizen_access_key",
216     "permission_suffix" => "generer_cle_acces_citoyen",
217     "view" => "formulaire",
218     "condition" => array(
219     "is_option_citizen_access_portal_enabled",
220     "can_generate_citizen_access_key",
221     "is_user_from_allowed_collectivite",
222     ),
223     );
224    
225     // ACTION - 151 - Regénérer la clé accès citoyen
226     // Ce bouton est affiché seulement si le DA lié a déjà une clé d'accès
227     $this->class_actions[151] = array(
228     "identifier" => "regenerate_citizen_access_key",
229     "portlet" => array(
230     "type" => "action-direct-with-confirmation",
231     "libelle" => _("Regenerer la cle d'acces au portail citoyen"),
232     "class" => "citizen_access_key-16"
233     ),
234     "method" => "regenerate_citizen_access_key",
235     "permission_suffix" => "regenerer_cle_acces_citoyen",
236     "view" => "formulaire",
237     "condition" => array(
238     "is_option_citizen_access_portal_enabled",
239     "can_regenerate_citizen_access_key",
240     "is_user_from_allowed_collectivite",
241     ),
242     );
243    
244 nmeucci 3902 // ACTION - 200 - Afficher les logs des événements d'instruction
245     //
246     $this->class_actions[200] = array(
247     "identifier" => "get_log_di",
248     "permission_suffix" => "log_instructions",
249     "view" => "view_get_log_di",
250     "condition" => array(
251     "is_user_from_allowed_collectivite",
252     ),
253     );
254 mbroquet 3730 }
255    
256    
257     function setType(&$form,$maj) {
258     parent::setType($form,$maj);
259     // On définit le type des champs pour les actions direct
260     // utilisant la vue formulaire
261 jymadier 4559 if ($maj == 111 || $maj == 150 || $maj == 151) {
262 mbroquet 3730 foreach ($this->champs as $key => $value) {
263     $form->setType($value, 'hidden');
264     }
265     }
266     }
267    
268    
269     /**
270     * Vérifie la division de l'instructeur et l'état du dossier.
271     *
272     * @return boolean
273     */
274     function check_instructeur_division_and_di_state() {
275    
276     // Si l'utilisateur est un intructeur qui ne correspond pas à la
277     // division du dossier
278     // et qu'il y a plusieurs instructions
279     if ($this->f->isUserInstructeur() == true
280     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
281     && $this->has_only_recepisse() == false) {
282    
283     //
284     return false;
285     }
286    
287     // Si le dossier est cloturé
288     if ($this->getStatut() == "cloture") {
289    
290     //
291     return false;
292     }
293    
294     //
295     return true;
296     }
297    
298     /**
299     * CONDITION - is_editable.
300     *
301     * Condition pour la modification.
302     *
303     * @return boolean
304     */
305     function is_editable() {
306    
307     // Contrôle si l'utilisateur possède un bypass
308     $bypass = $this->f->isAccredited(get_class()."_modifier_bypass");
309     //
310     if ($bypass == true) {
311    
312     //
313     return true;
314     }
315    
316     // S'il y a plusieurs événements d'instruction sur le dossier
317     // et qu'il ne s'agit pas d'un instructeur
318     if ($this->f->isUserInstructeur() == false
319     && $this->has_only_recepisse() == false) {
320     //
321     return false;
322     }
323    
324     // Contrôle le droit de l'instruction (retoune true si ce n'est pas un
325     // instructeur)
326     if ($this->check_instructeur_division_and_di_state() == false) {
327    
328     //
329     return false;
330     }
331    
332     //
333     return true;
334     }
335    
336     /**
337     * CONDITION - can_open_donnees_techniques.
338     *
339     * Condition pour afficher les données techniques.
340     *
341     * @return boolean
342     */
343     function can_open_donnees_techniques() {
344    
345     // Contrôle si l'utilisateur possède un bypass
346     $bypass = $this->f->isAccredited(get_class()."_donnees_techniques_consulter_bypass");
347     //
348     if ($bypass == true) {
349    
350     //
351     return true;
352     }
353    
354     //
355     return true;
356     }
357    
358     /**
359     * CONDITION - can_open_rapport_instruction.
360     *
361     * Condition pour afficher le rapport d'instruction en overlay.
362     *
363     * @return boolean
364     */
365     function can_open_rapport_instruction() {
366    
367     // Contrôle si l'utilisateur possède un bypass
368     $bypass = $this->f->isAccredited(get_class()."_rapport_instruction_rediger_bypass");
369     //
370     if ($bypass == true) {
371     //
372     return true;
373     }
374     // S'il n'y a aucun rapport d'instruction lié
375     if ($this->getRapportInstruction() == '') {
376     // Vérification de la division de l'instructeur et de l'état du dossier.
377     if ($this->check_instructeur_division_and_di_state() == false) {
378     return false;
379     }
380     // Si l'utilisateur n'a pas le droit d'ajouter
381     if ($this->f->isAccredited(array(
382     "rapport_instruction",
383     "rapport_instruction_ajouter"), "OR") == false) {
384     return false;
385     }
386     }
387     //
388     return true;
389     }
390    
391     /**
392     * CONDITION - can_open_geolocalisation.
393     *
394     * Condition pour afficher la géolocalisation en overlay.
395     *
396     * @return boolean
397     */
398     function can_open_geolocalisation() {
399     // On récupère les informations de la collectivité du dossier
400     $collectivite_param = $this->f->getCollectivite($this->getVal('om_collectivite'));
401     // Si l'option sig n'est pas réglé sur 'sig_externe',
402     // l'action géolocalisation n'est pas affiché
403     if ($collectivite_param['option_sig'] != 'sig_externe') {
404    
405     //
406     return false;
407     }
408    
409     // Contrôle si l'utilisateur possède un bypass
410     $bypass = $this->f->isAccredited(get_class()."_geolocalisation_consulter_bypass");
411     //
412     if ($bypass == true) {
413    
414     //
415     return true;
416     }
417    
418     // Contrôle le droit de l'instruction
419     if ($this->check_instructeur_division_and_di_state() == false) {
420    
421     //
422     return false;
423     }
424    
425     //
426     return true;
427     }
428    
429     /**
430     * CONDITION - can_regenerate_recepisse.
431     *
432     * Condition pour regénérer le récépissé.
433     *
434     * @return boolean
435     */
436     function can_regenerate_recepisse() {
437    
438 jymadier 4441 // Instanciation de l'instruction initiale
439     $inst_instruction = $this->get_inst_instruction($this->get_demande_instruction_recepisse());
440     // On récupère la lettre type de l'instruction initiale
441     $lettretype = $inst_instruction->getVal('lettretype');
442    
443     // Vérifie que l'instruction initiale possède une lettre type
444     if ($lettretype === null
445     || $lettretype === '') {
446     //
447     return false;
448     }
449    
450 mbroquet 3730 // S'il y a plusieurs événements d'instruction sur le dossier
451     // et qu'il ne s'agit pas d'un administrateur technique ni fonctionnel
452     if ($this->f->isUserAdministrateur() == false
453     && $this->has_only_recepisse() == false) {
454     //
455     return false;
456     }
457    
458     //
459     return true;
460     }
461    
462    
463     /**
464     * CONDITION - can_generate_citizen_access_key
465     *
466     * Vérifie que le DA lié au DI courant n'a pas de clé déjà générée.
467     *
468     * @return boolean true si on peut générer la clé, false sinon
469     */
470     protected function can_generate_citizen_access_key() {
471    
472     // Si la clé existe, on ne peut pas générer la clé
473     if ($this->get_citizen_access_key() !== false) {
474     return false;
475     }
476     //
477     return true;
478     }
479    
480    
481     /**
482     * CONDITION - can_regenerate_citizen_access_key
483     *
484     * Vérifie que le DA lié au DI courant possède déjà une clé d'accès.
485     *
486     * @return boolean true si on peut regénérer la clé, false sinon
487     */
488     protected function can_regenerate_citizen_access_key() {
489    
490     // Si la clé existe, on retourne true car on peut la regénérer
491     if ($this->get_citizen_access_key() !== false) {
492     return true;
493     }
494     //
495     return false;
496     }
497    
498    
499     /**
500     * CONDITION - is_option_citizen_access_portal_enabled
501     *
502     * Permet de savoir si le om_parametre acces_portail_citoyen est activé.
503     *
504     * @return boolean true si l'option acces_portail_citoyen vaut 'true', false sinon
505     */
506     protected function is_option_citizen_access_portal_enabled() {
507    
508     return $this->f->is_option_citizen_access_portal_enabled();
509     }
510    
511    
512     /**
513     * VIEW - view_edition.
514     *
515     * Affiche le récapitulatif du dossier d'instruction.
516     *
517     * @return void
518     */
519     function view_edition() {
520    
521     // Vérification de l'accessibilité sur l'élément
522     $this->checkAccessibility();
523    
524     // Identifiant du dossier
525     $idx = $this->getVal($this->clePrimaire);
526    
527     //
528     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
529    
530     // Génération du PDF
531     $result = $this->compute_pdf_output('etat', $this->table, $collectivite, $idx);
532     // Affichage du PDF
533     $this->expose_pdf_output(
534     $result['pdf_output'],
535     $result['filename']
536     );
537     }
538    
539     /**
540     * VIEW - view_donnees_techniques.
541     *
542     * Ouvre le sous-formulaire en ajaxIt dans un overlay.
543     * Cette action est bindée pour utiliser la fonction popUpIt.
544     *
545     * @return void
546     */
547     function view_donnees_techniques() {
548    
549     // Vérification de l'accessibilité sur l'élément
550     $this->checkAccessibility();
551     //
552     $this->display_overlay(
553     $this->getVal($this->clePrimaire),
554     "donnees_techniques"
555     );
556     }
557    
558     /**
559     * VIEW - view_rapport_instruction.
560     *
561     * Ouvre le sous-formulaire en ajaxIt dans un overlay.
562     * Cette action est bindée pour utiliser la fonction popUpIt.
563     *
564     * @return void
565     */
566     function view_rapport_instruction() {
567    
568     // Vérification de l'accessibilité sur l'élément
569     $this->checkAccessibility();
570     //
571     $this->display_overlay(
572     $this->getVal($this->clePrimaire),
573     "rapport_instruction"
574     );
575     }
576    
577     /**
578     * Ouvre le sous-formulaire passé en paramètre en overlay
579     * en mode ajout si aucun n'existe sinon en mode modifier.
580     *
581     * @return void
582     */
583     function display_overlay($idx = "", $obj = "") {
584    
585     // Seulement si le numéro de dossier est fourni
586     if (isset($idx) && !empty($idx)
587     && isset($obj) && !empty($obj)){
588    
589     // Vérifie que l'objet n'existe pas
590     $sql = "SELECT
591     ".$obj."
592     FROM
593     ".DB_PREFIXE.$obj."
594     where
595     dossier_instruction = '$idx'";
596     // Ajout au log
597     $this->f->addToLog($obj.".php: db->query(\"".$sql."\");", VERBOSE_MODE);
598     // Exécution de la requête
599     $res = $this->f->db->query($sql);
600     $this->f->isDatabaseError($res);
601    
602     // S'il n'y en a pas, afficher le formulaire d'ajout
603     if ( $res->numrows() == 0 ){
604     //
605     echo '
606     <script type="text/javascript" >
607     overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&obj='.$obj.'&action=0&retourformulaire=dossier_instruction&idxformulaire='.$idx.'\', 1);
608     </script>
609     ';
610     }
611     // Sinon afficher l'objet en consultation
612     else {
613     //
614     $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
615     //
616     echo '
617     <script type="text/javascript" >
618     overlayIt(\''.$obj.'\',\'../scr/sousform.php?objsf='.$obj.'&idxformulaire='.$idx.'&retourformulaire='.$obj.'&obj='.$obj.'&action=3&idx='.$row[$obj].'\', 1);
619     </script>
620     ';
621     }
622     }
623     }
624    
625    
626     /**
627     * TREATMENT - generate_citizen_access_key.
628     *
629     * Génère la clé d'accès au portail citoyen sur un dossier qui n'en a pas.
630     *
631     * @return boolean
632     */
633     protected function generate_citizen_access_key() {
634    
635     // Récupération de l'instance du dossier d'autorisation lié au DI courant
636     $inst_da = $this->get_inst_dossier_autorisation($this->getVal("dossier_autorisation"));
637     $generation = $inst_da->update_citizen_access_key();
638     if ($generation == true) {
639     $this->correct = true;
640     $this->addToMessage(_("La cle d'acces au portail citoyen a ete generee."));
641     return true;
642     }
643     $this->addToMessage(sprintf("%s %s", _("La cle d'acces au portail citoyen n'a pas pu etre generee."), _("Veuillez contacter votre administrateur.")));
644     //
645     return false;
646     }
647    
648    
649     /**
650     * TREATMENT - regenerate_citizen_access_key.
651     *
652     * Régénère la clé d'accès au portail citoyen en écrasant la clé présente.
653     *
654     * @return boolean
655     */
656     protected function regenerate_citizen_access_key() {
657    
658     // Récupération de l'instance du dossier d'autorisation lié au DI courant
659     $inst_da = $this->get_inst_dossier_autorisation();
660     // L'appel à update_citizen_access_key avec la valeur true force la regénération
661     $generation = $inst_da->update_citizen_access_key(true);
662     if ($generation == true) {
663     $this->correct = true;
664     $this->addToMessage(_("La cle d'acces au portail citoyen a ete regeneree."));
665     return true;
666     }
667     $this->addToMessage(sprintf("%s %s", _("La cle d'acces au portail citoyen n'a pas pu etre regeneree."), _("Veuillez contacter votre administrateur.")));
668     //
669     return false;
670     }
671    
672    
673     /**
674     * TREATMENT - regenerate_recepisse.
675     *
676     * Finalisation d'un événement d'instruction
677     * et affichage du lien de téléchargement.
678     *
679     * @return void
680     */
681     function regenerate_recepisse() {
682     // Récupère l'identifiant du document
683     $idx_instruction = $this->get_demande_instruction_recepisse();
684    
685     // Instanciation de l'événement d'instruction
686     require_once "../obj/instruction.class.php";
687     $instruction = new instruction($idx_instruction, $this->f->db, 0);
688     $instruction->setParameter('maj', 1);
689    
690     // Met l'autoCommit à false
691     $this->f->db->autoCommit(false);
692    
693     // Vérifie si l'instruction est déjà finalisée
694     $finalize = $instruction->is_unfinalizable_without_bypass();
695    
696     // S'il faut définaliser
697     $unfinalization = true;
698     if ($finalize == true) {
699     // Définalise l'instruction
700     $unfinalization = $instruction->unfinalize($instruction->valF);
701     }
702    
703     // Si la définalisation est OK ou qu'il n'y avait pas besoin de définaliser
704     if ($unfinalization != false) {
705    
706     // Finalise l'instruction
707     $finalization = $instruction->finalize($instruction->valF);
708     $url_fichier = '../spg/file.php?obj=instruction&'.
709     'champ=om_fichier_instruction&id='.$idx_instruction;
710     // Si la finalisation est ok
711     if ($finalization != false) {
712     $this->correct = true;
713     //
714     $this->f->db->commit();
715     // Lien PDF
716     $lien_pdf = "<br/><br/>
717     <a id='telecharger_recepisse' title=\""._("Telecharger le recepisse de la demande")."\" class='lien' href='".$url_fichier."' target='_blank'>
718     <span class=\"om-icon om-icon-16 om-icon-fix pdf-16\">".
719     _("Telecharger le recepisse de la demande").
720     "</span>&nbsp;".
721     _("Telecharger le recepisse de la demande")."
722     </a>";
723     $this->msg="";
724     $this->addToMessage(
725     _("Le recepisse de la demande a ete regenere.").$lien_pdf
726     );
727     // Return
728     return $this->end_treatment(__METHOD__, true);
729     }
730     }
731     // Si une erreur s'est produite
732     $this->correct = false;
733     //
734     $this->addToMessage(
735     _("Une erreur s'est produite lors de la regeneration du recepisse de la demande.")
736     ."<br/>"._("Veuillez contacter votre administrateur.")
737     );
738     // Return
739     return $this->end_treatment(__METHOD__, false);
740     }
741    
742    
743     /**
744     * Met à jour les informations (log) d'actions de localisation sur un dossier.
745     *
746     * @param string $action Nom de l'action.
747     * @param string $date Date de l'action.
748     * @param boolean $etat Etat de l'action.
749     * @param string $message Message de retour de l'action.
750     *
751     * @return boolean false si erreur de traitement, true sinon.
752     */
753     private function update_dossier_geolocalisation($action, $date, $etat, $message) {
754     require_once "../obj/dossier_geolocalisation.class.php";
755     $dossier_geolocalisation = new dossier_geolocalisation(
756     null,
757     null,
758     null,
759     $this->getVal('dossier')
760     );
761    
762     return $dossier_geolocalisation->set_geolocalisation_state(
763     $action,
764     $date,
765     $etat,
766     $message
767     );
768     }
769    
770    
771     /**
772     * Traitement des erreurs retournées par l'abstracteur geoads.
773     *
774     * @param geoads_exception $exception Exception retournée par l'abstracteur.
775     *
776     * @return void
777     */
778     private function handle_geoads_exception(geoads_exception $exception) {
779     // log le message d'erreur retourné par le webservice
780     $this->f->addToLog(
781     "geolocalisation : Traitement webservice SIG: id dossier = ".
782     $this->getVal("dossier")." : ".$exception->getMessage(), DEBUG_MODE
783     );
784     $return['log'] = array(
785     "date" => date('d/m/Y H:i:s'),
786     "etat" => false,
787     "message" => $exception->getMessage(),
788     );
789     if ($this->f->isAjaxRequest()) {
790     echo json_encode($return);
791     die();
792     } else {
793     $this->f->displayMessage('error', $return["log"]["message"]);
794     }
795     }
796    
797    
798     /**
799     * Retourne une instance du connecteur geoads, et la créer si elle n'existe pas.
800     *
801     * @param array $collectivite Informations de la collectivité.
802     *
803     * @return geoads Instance du connecteur.
804     */
805     private function get_geoads_instance(array $collectivite) {
806     if(isset($this->geoads_instance)) {
807     return $this->geoads_instance;
808     }
809     // Instanciation de l'abstracteur geoads
810     try {
811     $this->geoads_instance = new geoads($collectivite);
812     } catch (geoads_exception $e) {
813     $this->handle_geoads_exception($e);
814     return false;
815     }
816     return $this->geoads_instance;
817     }
818    
819    
820     /**
821     * VIEW - view_geolocalisation_verif_parcelle.
822     *
823     * 1ere action de géolocalisation, permet de vérifier l'existence des
824     * parcelles sur le sig.
825     *
826     * @return void
827     */
828     public function view_geolocalisation_verif_parcelle() {
829     // Format de la date pour l'affichage
830     $date = date('d/m/Y H:i:s');
831     $correct = true;
832     $message = "";
833     // Récupération des infos de la collectivité du dossier.
834     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
835     // Récupération des informations (log) d'actions de localisation sur le dossier.
836     require_once "../obj/dossier_geolocalisation.class.php";
837     $dossier_geolocalisation = new dossier_geolocalisation(null, null, null, $this->getVal('dossier'));
838    
839     // Définition des références cadastrales dans la table dossier_geolocalisation
840     // si elle n'existe pas encore afin de pouvoir les comparer par la suite.
841     if($dossier_geolocalisation->get_terrain_references_cadastrales_archive() == "") {
842     $dossier_geolocalisation->set_terrain_references_cadastrales_archive($this->getVal('terrain_references_cadastrales'));
843     }
844    
845     // Instanciation de l'abstracteur geoads
846     $geoads = $this->get_geoads_instance($collectivite);
847    
848     // Formatage des parcelles pour l'envoi au webservice
849     $liste_parcelles = $this->f->parseParcelles(
850     $this->getVal('terrain_references_cadastrales'),
851     $this->getVal('om_collectivite')
852     );
853    
854     // Intérogation du web service du SIG
855     try {
856     $execute = $geoads->verif_parcelle($liste_parcelles);
857     } catch (geoads_exception $e) {
858     $this->handle_geoads_exception($e);
859     return;
860     }
861     // Initialisation des messages
862     $message_diff_parcelle = _("Les parcelles ont ete modifiees.");
863     $message = _("Les parcelles existent.");
864     // Initialise le tableau qui contiendra les parcelles qui n'existent pas
865     $list_error_parcelle = array();
866     $date_db = $this->f->formatTimestamp($date, false);
867     // Vérifie l'existence des parcelles
868     foreach ($execute as $parcelle) {
869     // Si la parcelle n'existe pas on la consigne dans un tableau
870     if ($parcelle['existe'] != true) {
871     $list_error_parcelle[] = $parcelle['parcelle'];
872     }
873     }
874     // Si des parcelles n'existent pas alors on les affichent à l'utilisateur
875     if (count($list_error_parcelle) != 0) {
876     //
877     $correct = false;
878     //
879     $string_error_parcelle = implode(", ", $list_error_parcelle);
880     //
881     $message = _("Les parcelles n'existent pas.");
882     } else {
883    
884     if($dossier_geolocalisation->get_terrain_references_cadastrales_archive() !=
885     $this->getVal('terrain_references_cadastrales')) {
886     // Message affiché à l'utilisateur
887     $message_diff_parcelle = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message_diff_parcelle;
888     // Met à jour du message des autres boutons
889     $this->update_dossier_geolocalisation('calcul_emprise', $date_db, $correct, $message_diff_parcelle);
890     $this->update_dossier_geolocalisation('calcul_centroide', $date_db, $correct, $message_diff_parcelle);
891     $this->update_dossier_geolocalisation('recup_contrainte', $date_db, $correct, $message_diff_parcelle);
892    
893     // Message affiché à l'utilisateur
894     $message_diff_parcelle = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message_diff_parcelle;
895     }
896     // Mise à jour du champ terrain_references_cadastrales_archive dans
897     // les informations de localisation du dossier.
898     $dossier_geolocalisation->set_terrain_references_cadastrales_archive(
899     $this->getVal('terrain_references_cadastrales')
900     );
901     }
902    
903     // Message affiché à l'utilisateur
904     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
905     $this->update_dossier_geolocalisation('verif_parcelle', $date_db, $correct, $message);
906     // Tableau contenant l'adresse à retourner
907     $return = $execute;
908     // Ajoute les informations sur le traitement dans le tableau retourné
909     $return['log'] = array(
910     "date" => $date,
911     "etat" => $correct,
912     "message" => $message,
913     "message_diff_parcelle" => $message_diff_parcelle
914    
915     );
916     // Retourne le résultat dans un tableau json
917     echo json_encode($return);
918     return;
919     }
920    
921    
922     /**
923     * Vérification de la cohérence des parcelles actuelles :
924     * si parcelles différentes de l'archive affichage d'une erreur.
925     *
926     * @return boolean false si identique, tableau json avec état d'erreur sinon
927     */
928     private function is_different_parcelle_from_dossier_geolocalisation() {
929     $date = date('d/m/Y H:i:s');
930     require_once "../obj/dossier_geolocalisation.class.php";
931     $dossier_geolocalisation = new dossier_geolocalisation(null, null, null, $this->getVal('dossier'));
932     if($dossier_geolocalisation->get_terrain_references_cadastrales_archive() !=
933     $this->getVal('terrain_references_cadastrales')) {
934     $return['log'] = array(
935     "date" => $date,
936     "etat" => false,
937     "message" => sprintf(_("Les parcelles n'ont pas ete verifiees ou ont ete modifiees, veuillez (re)lancer leur verification.")." "._("Dernier traitement effectue le %s."), $date),
938     );
939     return json_encode($return);
940     }
941     return false;
942     }
943    
944    
945     /**
946     * VIEW - view_geolocalisation_calcul_emprise.
947     *
948     * Permet de calculer l'emprise du dossier sur le sig.
949     *
950     * @return void
951     */
952     public function view_geolocalisation_calcul_emprise() {
953     // Format de la date pour l'affichage
954     $date = date('d/m/Y H:i:s');
955     $correct = true;
956     $message = "";
957     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
958    
959     // Vérification de la cohérence des parcelles actuelles.
960     if(($different_parcelle = $this->is_different_parcelle_from_dossier_geolocalisation()) !== false) {
961     echo $different_parcelle;
962     return;
963     }
964     // Instance geoads
965     $geoads = $this->get_geoads_instance($collectivite);
966    
967     // Formatage des parcelles pour l'envoi au webservice
968     $liste_parcelles = $this->f->parseParcelles(
969     $this->getVal('terrain_references_cadastrales'),
970     $this->getVal('om_collectivite')
971     );
972    
973     // Intérogation du web service du SIG
974     try {
975     $execute = $geoads->calcul_emprise($liste_parcelles, $this->getVal('dossier'));
976     } catch (geoads_exception $e) {
977     $this->handle_geoads_exception($e);
978     return;
979     }
980    
981     // Traitement du message
982     $message = _("L'emprise a ete calculee.");
983     if($execute != true) {
984     $message = _("L'emprise n'a pas pu etre calculee.");
985     $correct = false;
986     }
987     // Message affiché à l'utilisateur
988     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
989     $date_db = $this->f->formatTimestamp($date, false);
990     // Mise à jour de la table dossier_géolocalisation
991     $this->update_dossier_geolocalisation('calcul_emprise', $date_db, $correct, $message);
992    
993     // Ajoute les informations sur le traitement dans le tableau retourné
994     $return['log'] = array(
995     "date" => $date,
996     "etat" => $correct,
997     "message" => $message,
998     );
999    
1000     // Retourne le résultat dans un tableau json
1001     echo json_encode($return);
1002     return;
1003     }
1004    
1005    
1006     /**
1007     * VIEW - view_geolocalisation_dessin_emprise.
1008     * Permet de rediriger l'utilisateur vers le sig afin qu'il dessine l'emprise
1009     * du dossier.
1010     *
1011     * @return void
1012     */
1013     public function view_geolocalisation_dessin_emprise() {
1014     // Format de la date pour l'affichage
1015     $date = date('d/m/Y H:i:s');
1016     $correct = true;
1017     $message = "";
1018     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
1019     // Vérification de la cohérence des parcelles actuelles.
1020     if(($different_parcelle = $this->is_different_parcelle_from_dossier_geolocalisation()) !== false) {
1021     echo $different_parcelle;
1022     return;
1023     }
1024     // Instance geoads
1025     $geoads = $this->get_geoads_instance($collectivite);
1026    
1027     // Formatage des parcelles pour l'envoi au webservice
1028     $liste_parcelles = $this->f->parseParcelles(
1029     $this->getVal('terrain_references_cadastrales'),
1030     $this->getVal('om_collectivite')
1031     );
1032    
1033     // Intérogation du web service du SIG
1034     try {
1035     $execute = $geoads->redirection_web_emprise($liste_parcelles, $this->getVal('dossier'));
1036     } catch (geoads_exception $e) {
1037     $this->handle_geoads_exception($e);
1038     return;
1039     }
1040    
1041     // Traitement du message
1042     $message = _("Redirection vers le SIG.");
1043    
1044     // Message affiché à l'utilisateur
1045     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
1046     $date_db = $this->f->formatTimestamp($date, false);
1047     // Mise à jour de la table dossier_géolocalisation
1048     $this->update_dossier_geolocalisation('dessin_emprise', $date_db, $correct, $message);
1049     // Tableau à retourner
1050     $return['return'] = $execute;
1051     // Ajoute les informations sur les traitements dans le tableau retourné
1052     $return['log'] = array(
1053     "date" => $date,
1054     "etat" => $correct,
1055     "message" => $message,
1056     );
1057    
1058     // Retourne le résultat dans un tableau json
1059     echo json_encode($return);
1060     }
1061    
1062    
1063     /**
1064     * VIEW - view_geolocalisation_calcul_centroide.
1065     * Calcul du centroid qui sert à ajouter le geom sur le dossier.
1066     *
1067     * @return void
1068     */
1069     public function view_geolocalisation_calcul_centroide() {
1070     // Format de la date pour l'affichage
1071     $date = date('d/m/Y H:i:s');
1072     $correct = true;
1073     $message = "";
1074     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
1075     // Vérification de la cohérence des parcelles actuelles.
1076     if(($different_parcelle = $this->is_different_parcelle_from_dossier_geolocalisation()) !== false) {
1077     echo $different_parcelle;
1078     return;
1079     }
1080     // Instance geoads
1081     $geoads = $this->get_geoads_instance($collectivite);
1082    
1083     // Intérogation du web service du SIG
1084     try {
1085     $execute = $geoads->calcul_centroide($this->getVal('dossier'));
1086     } catch (geoads_exception $e) {
1087     $this->handle_geoads_exception($e);
1088     return;
1089     }
1090    
1091     // Récupération du code de référentiel sig
1092     if($collectivite["sig"]["sig_referentiel"] == "" or
1093     $collectivite["sig"]["sig_referentiel"] == null) {
1094     $correct = false;
1095     $message = _("Erreur de configuration (aucun referentiel). Contactez votre administrateur.");
1096     } else {
1097     $coord = $execute['x']." ".$execute['y'];
1098    
1099     // Traitement du message
1100     $message = _("Le centroide a ete calcule")." : ".
1101     $execute['x'].", ".
1102     $execute['y'].".";
1103    
1104     // Met à jour le centroide dans le dossier
1105     $res = $this->f->db->query("UPDATE ".DB_PREFIXE."dossier ".
1106     "SET geom = public.ST_GeomFromText('POINT(".$coord.")',".
1107     $collectivite["sig"]["sig_referentiel"].") ".
1108     "WHERE dossier = '".$this->getVal('dossier')."'");
1109     $this->f->addToLog(__FILE__.": db->query(\"UPDATE ".
1110     DB_PREFIXE."dossier SET geom = public.ST_GeomFromText('POINT(".
1111     $coord.")',".$collectivite["sig"]["sig_referentiel"].") WHERE dossier = '".$this->getVal('dossier')."'", VERBOSE_MODE);
1112     $this->f->isDatabaseError($res);
1113     }
1114    
1115     // Message affiché à l'utilisateur
1116     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
1117     $date_db = $this->f->formatTimestamp($date, false);
1118     // Mise à jour de la table dossier_géolocalisation
1119     $this->update_dossier_geolocalisation('calcul_centroide', $date_db, $correct, $message);
1120     // Tableau à retourner
1121     $return = $execute;
1122     // Ajoute les informations sur le traitements dans le tableau retourné
1123     $return['log'] = array(
1124     "date" => $date,
1125     "etat" => $correct,
1126     "message" => $message,
1127     );
1128    
1129     // Retourne le résultat dans un tableau json
1130     echo json_encode($return);
1131     return;
1132     }
1133    
1134    
1135     /**
1136     * VIEW - view_geolocalisation_recup_contrainte.
1137     *
1138     * Permet de récupérer les contraintes et les affecter au dossier.
1139     *
1140     * @return void
1141     */
1142     public function view_geolocalisation_recup_contrainte() {
1143     // Format de la date pour l'affichage
1144     $date = date('d/m/Y H:i:s');
1145     $correct = true;
1146     $message = "";
1147     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
1148     // Vérification de la cohérence des parcelles actuelles.
1149     if(($different_parcelle = $this->is_different_parcelle_from_dossier_geolocalisation()) !== false) {
1150     echo $different_parcelle;
1151     return;
1152     }
1153     // Instance geoads
1154     $geoads = $this->get_geoads_instance($collectivite);
1155    
1156     // Intérogation du web service du SIG
1157     try {
1158     $execute = $geoads->recup_contrainte_dossier($this->getVal('dossier'));
1159     } catch (geoads_exception $e) {
1160     $this->handle_geoads_exception($e);
1161     return;
1162     }
1163    
1164     // Traitement du message
1165     $message = _("Les contraintes ont ete recuperees.");
1166     // Initialisation des variables de comparaison
1167     $synchro = true;
1168     $ajouter = true;
1169     $supprimer = true;
1170    
1171     // Récupère toutes les contraintes du dossier avant traitement
1172     $listeDossierContrainteSIG = $this->get_dossier_contrainte_SIG();
1173     // Pour chaque contrainte;
1174     foreach ($execute as $key => $value) {
1175     // Vérifie que la contrainte est dans l'application
1176     $contrainte = $this->getContrainteByNumero($value['contrainte']);
1177     // Si la contrainte est vide
1178     if ($contrainte == "") {
1179     // Nécessite une synchronisation
1180     $synchro = false;
1181     break;
1182     }
1183     // S'il y a une contrainte
1184     // Instancie la classe dossier_contrainte
1185     require_once "../obj/dossier_contrainte.class.php";
1186     $dossier_contrainte_add = new dossier_contrainte("]", $f->db, DEBUG);
1187     // Définit les valeurs
1188     $val = array(
1189     'dossier_contrainte' => ']',
1190     'dossier' => $this->getVal('dossier'),
1191     'contrainte' => $contrainte,
1192     'texte_complete' => $value['libelle'],
1193     'reference' => true,
1194     );
1195     // Ajoute l'enregistrement
1196     $ajouter = $dossier_contrainte_add->ajouter($val, $f->db, DEBUG);
1197     // Si erreur lors de l'ajout on sort de la boucle.
1198     if($ajouter != true) {
1199     break;
1200     }
1201     }
1202    
1203    
1204     // Si les contraintes ne sont pas synchronisées
1205     if ($synchro == false) {
1206     // Traitement du message
1207     $message = _("Les contraintes doivent etre synchronisees.");
1208     // État à false
1209     $correct = false;
1210     }
1211    
1212     //
1213     if ($ajouter == false && $synchro == true) {
1214     // Traitement du message
1215     $message = _("Les contraintes n'ont pas ete ajoutees au dossier.");
1216     // État à false
1217     $correct = false;
1218     }
1219    
1220     // Si les contraintes ne sont pas synchronisées
1221     if ($supprimer == false && $ajouter == true && $synchro == true) {
1222     // Traitement du message
1223     $message = _("Les anciennes contraintes n'ont pas ete supprimees.");
1224     // État à false
1225     $correct = false;
1226     }
1227    
1228     // S'il il y a une erreur
1229     if ($synchro == false || $ajouter == false || $supprimer == false) {
1230     // Ajoute au message d'erreur
1231     $message .= " "._("Contactez votre administrateur.");
1232     }
1233    
1234     // On supprime les contraintes SIG déjà affectées au dossier
1235     if ($ajouter == true && $synchro == true) {
1236     // Si la liste des contraintes SIG déjà affectées au dossier
1237     if (count($listeDossierContrainteSIG) > 0) {
1238     // Pour chaque contrainte déjà affectées au dossier
1239     foreach ($listeDossierContrainteSIG as $dossier_contrainte_id) {
1240     // Instancie la classe dossier_contrainte
1241     require_once "../obj/dossier_contrainte.class.php";
1242     $dossier_contrainte_del = new dossier_contrainte($dossier_contrainte_id, $this->f->db, DEBUG);
1243     // Valeurs de l'enregistrement
1244     $value = array();
1245     foreach($dossier_contrainte_del->champs as $key => $champ) {
1246     // Terme à chercher
1247     $search_field = 'contrainte_';
1248     // Si dans le champ le terme est trouvé
1249     if (strpos($champ, $search_field) !== false) {
1250     // Supprime le champ
1251     unset($dossier_contrainte_del->champs[$key]);
1252     } else {
1253     // Récupère la valeur du champ
1254     $value[$champ] = $dossier_contrainte_del->val[$key];
1255     }
1256     }
1257     // Supprime l'enregistrement
1258     $supprimer = $dossier_contrainte_del->supprimer($value, $f->db, DEBUG);
1259     }
1260     }
1261     }
1262    
1263     // Récupère toutes les contraintes du dossier après traitement
1264     $listeDossierContrainteSIGAfter = $this->get_dossier_contrainte_SIG();
1265     $date_db = $this->f->formatTimestamp($date, false);
1266     // Message affiché à l'utilisateur
1267     $message = sprintf(_("Dernier traitement effectue le %s."), $date)." ".$message;
1268     // Mise à jour de la table dossier_géolocalisation
1269     $this->update_dossier_geolocalisation('recup_contrainte', $date_db, $correct, $message);
1270     // Ajoute les informations sur les traitements dans le tableau retourné
1271     $return['log'] = array(
1272     "date" => $date,
1273     "etat" => $correct,
1274     "message" => $message
1275     );
1276     // Ajoute les informations concernant les contraintes récupérées
1277     $return['dossier_contrainte'] = array(
1278     "nb_contrainte_sig" => count($listeDossierContrainteSIGAfter),
1279     "msg_contrainte_sig_empty" => _("Aucune contrainte ajoutee depuis le SIG"),
1280     "msg_contrainte_sig" => _("contrainte(s) ajoutee(s) depuis le SIG"),
1281     );
1282     // Retourne le résultat dans un tableau json
1283     echo json_encode($return);
1284     return;
1285     }
1286    
1287    
1288     /**
1289     * Récupérer la contrainte par le numéro de référence SIG.
1290     *
1291     * @param string $numero Identifiant de la contrainte du SIG.
1292     *
1293     * @return array Tableau des résultats
1294     */
1295     public function getContrainteByNumero($numero) {
1296    
1297     // Initialisation du résultat
1298     $contrainte = "";
1299    
1300     // Requête sql
1301     $sqlContrainte = "SELECT contrainte
1302     FROM ".DB_PREFIXE."contrainte
1303     WHERE reference = 't'
1304 softime 4333 AND numero = '".$numero."'
1305     AND (om_collectivite = ".$this->getVal('om_collectivite')." OR
1306     om_collectivite = ".$this->f->get_idx_collectivite_multi().")";
1307 mbroquet 3730 $contrainte = $this->f->db->getOne($sqlContrainte);
1308     $this->f->addToLog(__FILE__." : db->getOne(\"".$sqlContrainte."\")", VERBOSE_MODE);
1309     $this->f->isDatabaseError($contrainte);
1310    
1311     // Tableau de résultat retourné
1312     return $contrainte;
1313     }
1314    
1315    
1316     /**
1317     * Récupération des contraintes récupérées depuis le SIG liées au dossier
1318     *
1319     * @return array Tableau des résultats
1320     */
1321     public function get_dossier_contrainte_SIG() {
1322    
1323     // Initialisation du tableau des résultats
1324     $listeDossierContrainteSIG = array();
1325    
1326     // Requête SQL
1327     $sqlDossierContrainte = "SELECT dossier_contrainte
1328     FROM ".DB_PREFIXE."dossier_contrainte
1329     WHERE dossier = '".$this->getVal("dossier")."'
1330     AND reference IS TRUE";
1331     $resDossierContrainte = $this->f->db->query($sqlDossierContrainte);
1332     $this->f->addToLog(
1333     __FILE__." : db->query(\"".
1334     $sqlDossierContrainte."\")",
1335     VERBOSE_MODE
1336     );
1337    
1338     $this->f->isDatabaseError($resDossierContrainte);
1339     // Pour chaque résultat
1340     while (
1341     $rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)
1342     ) {
1343     // Ajoute l'identifiant du lien dans le tableau des résultats
1344     $listeDossierContrainteSIG[] = $rowDossierContrainte['dossier_contrainte'];
1345     }
1346    
1347     // Tableau de résultat retourné
1348     return $listeDossierContrainteSIG;
1349     }
1350    
1351    
1352     /**
1353     * VIEW - view_geolocalisation.
1354     *
1355     * Redirige pour ouvrir le formulaire en ajaxIt dans un overlay.
1356     * Cette action est bindée pour utiliser la fonction popUpIt.
1357     *
1358     * @return void
1359     */
1360     public function view_geolocalisation() {
1361    
1362     // Vérification de l'accessibilité sur l'élément
1363     $this->checkAccessibility();
1364    
1365     //
1366     $idx = $this->getVal($this->clePrimaire);
1367    
1368     require_once "../obj/dossier_geolocalisation.class.php";
1369     $dossier_geolocalisation = new dossier_geolocalisation(null, null, null, $this->getVal('dossier'));
1370    
1371     // Récupération des contraintes liées au DI
1372     $sqlDossierContrainte = "SELECT dossier_contrainte, reference
1373     FROM ".DB_PREFIXE." dossier_contrainte
1374     WHERE dossier = '".$idx."'";
1375     $resDossierContrainte = $this->f->db->query($sqlDossierContrainte);
1376     $this->f->addToLog(__METHOD__."() : db->query(\"".$sqlDossierContrainte."\")", VERBOSE_MODE);
1377     $this->f->isDatabaseError($resDossierContrainte);
1378    
1379     //
1380     $geom = "";
1381     //
1382     if ($this->getVal('geom') != '') {
1383     //
1384     $sqlGEOM = "SELECT public.ST_AsText('".$this->getVal('geom')."'::geometry)";
1385     $geom = $this->f->db->getOne($sqlGEOM);
1386     $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sqlGEOM."\")", VERBOSE_MODE);
1387     }
1388    
1389     // Compteurs de contrainte manuelle et automatique
1390     $nb_contrainte_man = 0;
1391     $nb_contrainte_sig = 0;
1392     // Nombre de contrainte du DI
1393     while ($rowDossierContrainte = &$resDossierContrainte->fetchRow(DB_FETCHMODE_ASSOC)) {
1394     //
1395     if ($rowDossierContrainte['reference'] == 'f') {
1396     $nb_contrainte_man++;
1397     } else {
1398     $nb_contrainte_sig++;
1399     }
1400     }
1401     // Modifie les messages en fonction du nombre de contrainte
1402     if ($nb_contrainte_man == 0) {
1403     $msg_contrainte_man = _("Aucune contraintes ajoutees depuis l'application");
1404     } else {
1405     $msg_contrainte_man = $nb_contrainte_man." "._("contrainte(s) ajoutee(s) depuis l'application");
1406     }
1407     if ($nb_contrainte_sig == 0) {
1408     $msg_contrainte_sig = _("Aucune contraintes ajoutees depuis le SIG");
1409     } else {
1410     $msg_contrainte_sig = $nb_contrainte_sig." "._("contrainte(s) ajoutee(s) depuis le SIG");
1411     }
1412     $contrainte_val = "<span id='msg_contrainte_man'>".$msg_contrainte_man."</span>"."<br />".
1413     "<span id='msg_contrainte_sig'>".$msg_contrainte_sig."</span>";
1414    
1415     // Affichage du fil d'Ariane
1416     $this->f->displaySubTitle(_("Geolocalisation") . "->" . $this->getVal('dossier_libelle'));
1417     $this->f->display();
1418    
1419     // Message affiché
1420     $message_field = '<div class="message ui-widget ui-corner-all ui-state-highlight ui-state-%s" id="%s">
1421     <p>
1422     <span class="ui-icon ui-icon-info"></span>
1423     <span class="text">%s<br></span>
1424     </p>
1425     </div>';
1426    
1427     // Message d'erreur si les références cadastrales ont été modifiées
1428     // dans le dossier d'instruction
1429     if ($dossier_geolocalisation->get_terrain_references_cadastrales_archive() != "" &&
1430     $dossier_geolocalisation->get_terrain_references_cadastrales_archive() != $this->getVal('terrain_references_cadastrales')) {
1431    
1432     if($this->getVal('terrain_references_cadastrales') != "") {
1433    
1434     $messageRefCadUtilisees = _("Les references cadastrales utilisees par le SIG")." : ".
1435     $dossier_geolocalisation->get_terrain_references_cadastrales_archive();
1436     } else {
1437     $messageRefCadUtilisees = _("Aucune reference cadastrale n'est renseignee pour le SIG");
1438     }
1439    
1440     printf($message_field, "error", "geolocalisation-message",
1441     "<p>"._("Les references cadastrales ont ete modifiees dans le dossier d'instruction.")."</p>".
1442     "<p>".$messageRefCadUtilisees."</p>");
1443     }
1444    
1445     // Bouton retour
1446     $button_return = '<div class="formControls">
1447     <a id="retour-button" onclick="redirectPortletAction(1,\'main\'); refresh_page_return();" href="#" class="retour">Retour</a>
1448     </div>';
1449    
1450     // Affiche le bouton de retour
1451     printf($button_return);
1452    
1453     // Début du formulaire
1454     printf("\n<!-- ########## START FORMULAIRE ########## -->\n");
1455     printf("<div class=\"formEntete ui-corner-all\">\n");
1456    
1457     // Champ pour le bouton
1458     $button_field = '<div class="field field-type-static">
1459     <div class="form-libelle">
1460     <label id="lib-%1$s" class="libelle-%1$s" for="%1$s">
1461     %2$s
1462     </label>
1463     </div>
1464     <div class="form-content">
1465     <span id="%1$s" class="field_value">
1466     %3$s
1467     </span>
1468     </div>
1469     </div>';
1470    
1471     // Boutons d'action sur la géolocalisation
1472     $button = '<input type="submit" class="om-button ui-button ui-widget ui-state-default ui-corner-all" id="%s-button" value="%s" onclick="%s" role="button" aria-disabled="false">';
1473    
1474     // Affiche le bouton permettant de lancer tous les traitements
1475     printf('<div class="alignBtnCenter">');
1476     printf($button, "chance", "J'ai de la chance", "all_geolocalisation_treatments('$idx', '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')");
1477     printf('</div>');
1478    
1479     // Tableau pour afficher l'interface sur deux colonnes
1480     printf("<div class='sousform-geolocalisation'><div class='list-buttons-geolocalisation'>");
1481    
1482     //Affichage des boutons
1483     $rowDonneesSIG = $dossier_geolocalisation->get_geolocalisation_state('verif_parcelle');
1484     printf($button_field, 'verif_parcelle', sprintf($button, 'verif_parcelle', "Vérifier les parcelles", "geolocalisation_treatment('$idx', 'verif_parcelle', set_geolocalisation_message)"), $this->build_message('verif_parcelle', $message_field, $rowDonneesSIG));
1485     $rowDonneesSIG = $dossier_geolocalisation->get_geolocalisation_state('calcul_emprise');
1486     printf($button_field, 'calcul_emprise', sprintf($button, 'calcul_emprise', "Calculer l'emprise", "geolocalisation_treatment('$idx', 'calcul_emprise', '')"), $this->build_message('calcul_emprise', $message_field, $rowDonneesSIG));
1487     $rowDonneesSIG = $dossier_geolocalisation->get_geolocalisation_state('dessin_emprise');
1488     printf($button_field, 'dessin_emprise', sprintf($button, 'dessin_emprise', "Dessiner l'emprise", "geolocalisation_treatment('$idx', 'dessin_emprise', redirection_web_sig)"), $this->build_message('dessin_emprise', $message_field, $rowDonneesSIG));
1489     $rowDonneesSIG = $dossier_geolocalisation->get_geolocalisation_state('calcul_centroide');
1490     printf($button_field, 'calcul_centroide', sprintf($button, 'calcul_centroide', "Calculer le centroïde", "geolocalisation_treatment('$idx', 'calcul_centroide', set_geolocalisation_centroide)"), $this->build_message('calcul_centroide', $message_field, $rowDonneesSIG));
1491     $rowDonneesSIG = $dossier_geolocalisation->get_geolocalisation_state('recup_contrainte');
1492     printf($button_field, 'recup_contrainte', sprintf($button, 'recup_contrainte', "Récupérer les contraintes", "geolocalisation_treatment('$idx', 'recup_contrainte', set_geolocalisation_contrainte, '"._("Etes vous sur de vouloir recuperer les contraintes ?")."')"), $this->build_message('recup_contrainte', $message_field, $rowDonneesSIG));
1493    
1494     //
1495     printf("</div>");
1496    
1497     // Le formulaire n'a pas été validé
1498     $validation = 1;
1499     // Le formulaire est en mode consultation
1500     $maj = 3;
1501    
1502     // Champs du formulaire
1503     $champs = array("centroide", "contrainte", "adresse", "references_cadastrales");
1504    
1505     // Création d'un nouvel objet de type formulaire
1506     $form = new formulaire(null, $validation, $maj, $champs);
1507    
1508     // Configuration des types de champs
1509     foreach ($champs as $key) {
1510     $form->setType($key, 'static');
1511     }
1512     $form->setType("references_cadastrales", "referencescadastralesstatic");
1513    
1514     // Configuration des libellés
1515     $form->setLib("references_cadastrales", _("terrain_references_cadastrales"));
1516     $form->setLib("adresse", _("adresse"));
1517     $form->setLib("centroide", _("centroide"));
1518     $form->setLib("contrainte", _("contrainte"));
1519    
1520     // Configuration des données
1521     $form->setVal("references_cadastrales", $this->getVal("terrain_references_cadastrales"));
1522     $form->setVal("adresse", $this->getVal("terrain_adresse_voie_numero")." ".$this->getVal("terrain_adresse_voie")." ".$this->getVal("terrain_adresse_lieu_dit")." ".$this->getVal("terrain_adresse_code_postal")." ".$this->getVal("terrain_adresse_localite")." ".$this->getVal("terrain_adresse_bp")." ".$this->getVal("terrain_adresse_cedex"));
1523     if($geom != "") {
1524     $form->setVal('centroide', $this->getGeolocalisationLink());
1525     } else {
1526     $form->setVal('centroide', $geom);
1527     }
1528     $form->setVal("contrainte", $contrainte_val);
1529    
1530     // Affichage des champs
1531     $form->setBloc("centroide", "D", _("Donnees du dossier d'instruction"), "alignForm col_12");
1532     $form->setBloc("centroide", "DF", "", "geoloc_form alignForm col_12");
1533     $form->setBloc("contrainte", "DF", "", "geoloc_form alignForm col_12");
1534     $form->setBloc("adresse", "DF", "", "geoloc_form alignForm col_12");
1535     $form->setBloc("references_cadastrales", "DF", "", "geoloc_form alignForm col_12");
1536     $form->setBloc("references_cadastrales", "F");
1537    
1538     $form->afficher($champs, $validation, false, false);
1539     // Ferme le tableau pour l'affichage sur deux colonnes
1540     printf("</div></div>");
1541    
1542     //Ajout d'un div vide pour éviter les superspositions des div
1543     printf("<div class=\"both\"></div>");
1544    
1545     // Fin du formulaire
1546     printf("</div></div>");
1547    
1548     // Affiche le bouton de retour
1549     printf($button_return);
1550     }
1551    
1552    
1553     /**
1554     * Compose le message affiché à l'utilisateur.
1555     *
1556     * @param string $field_name Nom du champ.
1557     * @param string $message_field Code html du message.
1558     * @param mixed $rowDonneesSIG Tableau des données.
1559     *
1560     * @return string Message.
1561     */
1562     private function build_message($field_name, $message_field, $rowDonneesSIG) {
1563    
1564     // Récupération des infos
1565     $date = "";
1566     if (isset($rowDonneesSIG["date"])) {
1567     $date = $this->f->formatTimestamp($rowDonneesSIG["date"]);
1568     }
1569     $etat = "";
1570     if (isset($rowDonneesSIG["etat"])) {
1571     $etat = $rowDonneesSIG["etat"];
1572     }
1573     $text = "";
1574     if (isset($rowDonneesSIG["message"])) {
1575     $text = $rowDonneesSIG["message"];
1576     }
1577    
1578     // id du message
1579     $id_message = $field_name."-message";
1580    
1581     // Définit le type du message "empty", "valid" ou "error"
1582     // empty : message grisé
1583     // valid : message de validation
1584     // error : message d'erreur
1585     $type_message = "empty";
1586     if ($etat != "") {
1587     //
1588     $type_message = "valid";
1589     if ($etat == 'f') {
1590     $type_message = "error";
1591     }
1592     }
1593    
1594     // Si il y a une date, un message est ajouté en debut
1595     if ($date != "") {
1596     //
1597     $date = sprintf(_("Dernier traitement effectue le %s."), $date);
1598     }
1599    
1600     // Si aucun message alors l'action n'a jamais été effectuée
1601     if ($text == "") {
1602     //
1603     $text = _("Action non effectuee.");
1604     //
1605     $type_message = "empty";
1606     }
1607    
1608     // Compose le message
1609     $message = sprintf($message_field, $type_message, $id_message, $date." ".$text);
1610    
1611     // retour
1612     return $message;
1613     }
1614    
1615    
1616     /**
1617     *
1618     */
1619     function view_widget_dossiers_evenement_retour_finalise() {
1620    
1621     // Création de la requête de récupération des dossiers
1622     //
1623     // On recherche les dossiers dont le dernier événement d'instruction (hors événement retour)
1624     // est de type arrêté finalisé ou changement de décision
1625     // et que les dates de retour de signature, envoi RAR, retour RAR et
1626     // contrôle de légalité de cet événement d'instruction ne sont pas remplies
1627     // que le dossier est en cours, qu'il est instruit par la communauté
1628     // et que l'utilisateur connecté est un instructeur de la même commune que le dossier
1629     $sql =
1630     "SELECT
1631     dossier.dossier,
1632     dossier.dossier_libelle,
1633     CASE WHEN dossier.instructeur IS NOT NULL THEN
1634     CONCAT(instructeur.nom, ' (', division.libelle, ')')
1635     END as nom_instructeur,
1636     CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
1637     dossier.date_limite_incompletude ELSE
1638     dossier.date_limite END as date_limite_na,
1639     COALESCE(demandeur.particulier_nom, demandeur.personne_morale_denomination)
1640     AS nom_petitionnaire
1641     FROM
1642     ".DB_PREFIXE."dossier
1643 nmeucci 4376 JOIN ".DB_PREFIXE."etat ON dossier.etat = etat.etat AND etat.statut = 'encours'
1644     JOIN ".DB_PREFIXE."lien_dossier_demandeur ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
1645     JOIN ".DB_PREFIXE."dossier_instruction_type ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type AND dossier_instruction_type.code IN ('P', 'T', 'M')
1646 mbroquet 3730 JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (
1647     SELECT instruction
1648     FROM ".DB_PREFIXE."instruction
1649 nmeucci 4376 JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement AND evenement.retour IS FALSE
1650 mbroquet 3730 WHERE instruction.dossier = dossier.dossier
1651     ORDER BY date_evenement DESC, instruction DESC
1652     LIMIT 1
1653 nmeucci 4376 )
1654     AND instruction.date_retour_signature IS NULL
1655     AND instruction.date_envoi_rar IS NULL
1656     AND instruction.date_retour_rar IS NULL
1657     AND instruction.date_envoi_controle_legalite IS NULL
1658     AND instruction.date_retour_controle_legalite IS NULL
1659     JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement AND evenement.retour IS FALSE
1660 mbroquet 3730 JOIN ".DB_PREFIXE."demandeur ON lien_dossier_demandeur.demandeur = demandeur.demandeur
1661     JOIN ".DB_PREFIXE."instructeur ON dossier.instructeur=instructeur.instructeur
1662 nmeucci 4376 JOIN ".DB_PREFIXE."om_utilisateur ON om_utilisateur.om_utilisateur=instructeur.om_utilisateur
1663     AND om_utilisateur.login != '".$_SESSION['login']."'
1664 mbroquet 3730 JOIN ".DB_PREFIXE."division ON instructeur.division=division.division
1665     JOIN ".DB_PREFIXE."om_collectivite ON om_utilisateur.om_collectivite=om_collectivite.om_collectivite
1666     WHERE
1667     ((evenement.type = 'arrete' AND instruction.om_final_instruction IS TRUE) OR evenement.type = 'changement_decision')
1668     AND om_collectivite.niveau = '2'
1669     ";
1670    
1671     // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
1672     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1673     $sql .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
1674     }
1675    
1676     $sql .= " ORDER BY date_evenement DESC LIMIT 5";
1677    
1678     // Exécution de la requête
1679     $res = $this->f->db->query($sql);
1680     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
1681     $this->f->isDatabaseError($res);
1682     $nb_result = $res->numrows();
1683     // Ouverture conteneur
1684     echo '<div id="view_widget_dossiers_evenement_retour_finalise">';
1685     // Affiche des données résultats
1686     if ($nb_result > 0) {
1687     echo '<table class="tab-tab">';
1688     // Entête de tableau
1689     echo '<thead>';
1690     echo '<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">';
1691     echo '<th class="title col-0 firstcol">';
1692     echo '<span class="name">';
1693     echo _('dossier');
1694     echo '</span>';
1695     echo '</th>';
1696     echo '<th class="title col-0 firstcol">';
1697     echo '<span class="name">';
1698     echo _('petitionnaire');
1699     echo '</span>';
1700     echo '</th>';
1701     echo '<th class="title col-0 firstcol">';
1702     echo '<span class="name">';
1703     echo _('instructeur');
1704     echo '</span>';
1705     echo '</th>';
1706     echo '</tr>';
1707     echo '</thead>';
1708    
1709     echo '<tbody>';
1710    
1711     // Données dans le tableau
1712     while ( $row =& $res->fetchRow(DB_FETCHMODE_ASSOC) ) {
1713    
1714     echo '<tr class="tab-data odd">';
1715     // Numéro de dossier
1716     echo '<td class="col-1 firstcol">';
1717     echo '<a class="lienTable"
1718     href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
1719     .$row["dossier_libelle"]
1720     .'</a>';
1721     echo '</td>';
1722    
1723     // Nom du pétitionnaire
1724     echo '<td class="col-1">';
1725     echo '<a class="lienTable"
1726     href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
1727     .$row["nom_petitionnaire"]
1728     .'</a>';
1729     echo '</td>';
1730    
1731     // Instructeur
1732     echo '<td class="col-2 lastcol">';
1733     echo '<a class="lienTable"
1734     href="form.php?obj=dossier_instruction&amp;action=3&amp;idx='.$row["dossier"].'&amp;idz='.$row["dossier_libelle"].'&amp;premier=0&amp;advs_id=&amp;recherche=&amp;tricol=&amp;selectioncol=&amp;valide=&amp;retour=tab">'
1735     .$row["nom_instructeur"]
1736     .'</a>';
1737     echo '</td>';
1738    
1739     echo "</tr>";
1740     }
1741    
1742     echo '</tbody>';
1743    
1744     echo '</table>';
1745     if ($nb_result > 5 && $this->f->isAccredited("dossier_instruction_tab")) {
1746     $link = '../scr/tab.php?obj=dossier_instruction&decision=true';
1747     $title = _("Voir tous les dossiers");
1748     printf('<br/><a href="%s">%s</a>', $link, $title);
1749     }
1750     }
1751     else{
1752     echo _("Vous n'avez pas de dossier pour lequel on peut proposer une autre decision.");
1753     echo '</div>';
1754     return true;
1755     }
1756     // Fermeture conteneur
1757     echo '</div>';
1758     return false;
1759     }
1760    
1761 softime 3976
1762 mbroquet 3730 /**
1763 softime 3976 * VIEW - view_get_log_di
1764 nmeucci 3902 *
1765 softime 3976 * Affiche le tableau des logs des événements d'instruction du DI.
1766     *
1767     * @return Faux
1768 nmeucci 3902 */
1769 softime 3976 public function view_get_log_di() {
1770 nmeucci 3980 // Colonnes
1771     $headers = array(
1772     _('date'),
1773     _('id'),
1774     _('contexte'),
1775     _('login'),
1776     _('date_evenement'),
1777     _('retour RAR'),
1778     _('retour signature'),
1779     _('evenement'),
1780     _('action'),
1781     _('etat'),
1782     );
1783     // Lignes
1784     $logs = $this->get_log_instructions();
1785     $rows = array();
1786     foreach ($logs as $log) {
1787     $cells = array();
1788     $cells[] = $log["date"];
1789 nmeucci 3981 $cells[] = $log["values"]["instruction"];
1790 nmeucci 3980 $cells[] = $log["action"];
1791     $cells[] = $log["user"];
1792     $cells[] = $log["values"]["date_evenement"];
1793     $cells[] = $log["values"]["date_retour_rar"];
1794     $cells[] = $log["values"]["date_retour_signature"];
1795     $cells[] = $log["values"]["evenement"];
1796     $cells[] = $log["values"]["action"];
1797     $cells[] = $log["values"]["etat"];
1798     $rows[] = $cells;
1799     }
1800     // Affichage
1801     echo $this->f->compose_generate_table('view_get_log_di', $headers, $rows);
1802 nmeucci 3902 return false;
1803     }
1804    
1805 softime 3976
1806 nmeucci 3902 /**
1807 mbroquet 3730 * Retourne vrai quand le dossier n'a qu'un événement d'instruction, sinon
1808     * faux.
1809     *
1810     * @return boolean
1811     */
1812     function has_only_recepisse() {
1813     // Récupère la liste des instruction du dossier
1814 softime 4633 $list_instructions = $this->get_list_instructions(true);
1815 mbroquet 3730
1816     // Si la liste à plus d'un élément
1817     if (count($list_instructions) != 1) {
1818     //
1819     return false;
1820     }
1821    
1822     // Si l'instruction retournée n'est pas l'instruction de récépissé de la
1823     // demande
1824     if ($list_instructions[0] != $this->get_demande_instruction_recepisse()) {
1825     //
1826     return false;
1827     }
1828    
1829     //
1830     return true;
1831     }
1832    
1833     /**
1834 softime 4633 * Récupère la liste des événements d'instruction du dossier
1835     *
1836     * @param boolean $no_display si vrai alors on exclut ceux de type affichage
1837     * @return array tableau indexé des clés primaires des instructions
1838 mbroquet 3730 */
1839 softime 4633 function get_list_instructions($no_display = false) {
1840 mbroquet 3730 // Initialisation de la variable de retour
1841     $result = array();
1842    
1843 softime 4633 // Gestion des événements d'instruction de type affichage
1844     $clause_display = '';
1845     if ($no_display === true) {
1846     // on n'accepte que les événements sans type ou de type différent qu'affichage
1847     $clause_display = " AND (evenement.type != 'affichage' OR evenement.type IS NULL)";
1848     }
1849    
1850 mbroquet 3730 // SQL
1851 softime 4633 $sql = "SELECT instruction.instruction as id_instruction
1852 mbroquet 3730 FROM ".DB_PREFIXE."instruction
1853 softime 4633 JOIN ".DB_PREFIXE."evenement
1854     ON instruction.evenement = evenement.evenement
1855     WHERE instruction.dossier = '".$this->getVal($this->clePrimaire)."'";
1856     $sql .= $clause_display;
1857     $sql .= " ORDER BY instruction ASC";
1858 mbroquet 3730 $res = $this->f->db->query($sql);
1859     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
1860     $this->f->isDatabaseError($res);
1861    
1862     // Récupère les résultats dans un tableau
1863     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1864     //
1865 softime 4633 $result[] = $row['id_instruction'];
1866 mbroquet 3730 }
1867    
1868     // Retourne le tableau de résultat
1869     return $result;
1870     }
1871    
1872     /**
1873     * Récupère le numéro d'instruction du récépissé de demande.
1874     *
1875     * @return integer
1876     */
1877     function get_demande_instruction_recepisse() {
1878     // Instance de demande
1879     $demande = $this->get_inst_demande();
1880    
1881     // Récupère la valeur du champ instruction_recepisse
1882     $instruction_recepisse = $demande->getVal('instruction_recepisse');
1883    
1884     //
1885     return $instruction_recepisse;
1886     }
1887    
1888     /**
1889     * Récupère l'instance de la demande du dossier
1890     *
1891     * @param mixed Identifiant de la demande
1892     *
1893     * @return object
1894     */
1895     function get_inst_demande($demande = null) {
1896     //
1897     if (is_null($this->inst_demande)) {
1898     //
1899     if (is_null($demande)) {
1900     $demande = $this->get_demande_by_dossier_instruction();
1901     }
1902     //
1903     require_once "../obj/demande.class.php";
1904     $this->inst_demande = new demande($demande, $this->f->db, 0);
1905     }
1906     //
1907     return $this->inst_demande;
1908     }
1909    
1910 jymadier 4441
1911 mbroquet 3730 /**
1912 jymadier 4441 * Récupère l'instance de l'instruction.
1913     *
1914     * @param integer $instruction Identifiant de l'instruction obligatoire.
1915     *
1916     * @return object
1917     */
1918     public function get_inst_instruction($instruction) {
1919     //
1920     return $this->get_inst_common("instruction", $instruction);
1921     }
1922    
1923    
1924     /**
1925 mbroquet 3730 * Récupère l'identifiant de la demande par le dossier d'instruction.
1926     *
1927     * @return integer
1928     */
1929     function get_demande_by_dossier_instruction() {
1930     // Initialisation de la variable de retour
1931     $res = null;
1932    
1933     // SQL
1934     $sql = "SELECT demande
1935     FROM ".DB_PREFIXE."demande
1936     WHERE dossier_instruction = '".$this->getVal($this->clePrimaire)."'";
1937     $res = $this->f->db->getOne($sql);
1938     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1939     $this->f->isDatabaseError($res);
1940    
1941     //
1942     return $res;
1943     }
1944    
1945    
1946     /**
1947     * VIEW - view_localiser
1948     * Redirige l'utilisateur vers le SIG externe.
1949     *
1950     * @return void
1951     */
1952     public function view_localiser() {
1953     if($this->can_open_geolocalisation() === false) {
1954     // On affiche un message d'erreur
1955 jymadier 4559 $this->f->displayMessage('error', _("La localisation SIG n'est pas activée pour cette commune."));
1956 mbroquet 3730 // On redirige l'utilisateur vers la fiche du dossier en consultation
1957     $this->setParameter("maj", 3);
1958     $this->formulaire();
1959     return false;
1960     }
1961    
1962     // On récupère les informations de la collectivité du dossier
1963     $collectivite = $this->f->getCollectivite($this->getVal('om_collectivite'));
1964     // identifiant du dossier
1965     $idx = $this->getVal($this->clePrimaire);
1966    
1967     // Instance geoads
1968     $geoads = $this->get_geoads_instance($collectivite);
1969     if($geoads === false) {
1970     // L'erreur geoads est affichée dans la méthode handle_geoads_exception
1971     // On redirige l'utilisateur vers la fiche du dossier en consultation
1972     $this->setParameter("maj", 3);
1973     $this->formulaire();
1974     return false;
1975     }
1976    
1977    
1978     // Si le geom existe : le centroid a été calculé donc le sig connait
1979     // le dossier donc redirection par numéro de dossier
1980     if ($this->getVal('geom') != "") {
1981     //
1982     $url = $geoads->redirection_web(null, $idx);
1983     }
1984     // Sinon on décompose les references cadastrales en parcelles :
1985     // redirection references cadastrales
1986     elseif ($this->getVal('terrain_references_cadastrales') != "") {
1987     //
1988     $tabParcelles = $this->f->parseParcelles(
1989     $this->getVal('terrain_references_cadastrales'),
1990     $this->getVal('om_collectivite')
1991     );
1992     $url = $geoads->redirection_web($tabParcelles);
1993     }
1994     // Sinon redirection vers le sig sans argument
1995     else {
1996     //
1997     $url = $geoads->redirection_web();
1998     }
1999     // Redirection
2000     header("Location: ".$url);
2001    
2002     }
2003    
2004    
2005     }
2006    
2007     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26