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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26