/[openfoncier]/trunk/obj/demande.class.php
ViewVC logotype

Annotation of /trunk/obj/demande.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7996 - (hide annotations)
Fri Jul 20 17:12:33 2018 UTC (6 years, 6 months ago) by softime
File size: 141934 byte(s)
* Merge de la branche d'intégration 4.7.0 vers le trunk

1 mbroquet 3730 <?php
2     /**
3     * DBFORM - 'demande' - Surcharge gen.
4     *
5     * Ce script permet de définir la classe 'demande'.
6     *
7     * @package openads
8 nhaye 5254 * @version SVN : $Id$
9 mbroquet 3730 */
10    
11     require_once "../gen/obj/demande.class.php";
12 nhaye 5254
13 mbroquet 3730 require_once "../obj/geoads.class.php";
14    
15     /**
16     * Définition de la classe 'demande'.
17     *
18     * Cette classe permet d'interfacer la demande, c'est-à-dire l'enregistrement
19     * représentant une demande faite par un pétitionnaire pour un nouveau dossier
20     * ou pour un dossier existant.
21     */
22     class demande extends demande_gen {
23    
24 softime 6565 var $valIdDemandeur = array("petitionnaire_principal" => array(),
25     "delegataire" => array(),
26     "petitionnaire" => array(),
27     "plaignant_principal" => array(),
28     "plaignant" => array(),
29     "contrevenant_principal" => array(),
30     "contrevenant" => array(),
31     "requerant_principal" => array(),
32     "requerant" => array(),
33     "avocat_principal" => array(),
34     "avocat" => array(),
35 softime 7067 "bailleur_principal" => array(),
36     "bailleur" => array(),
37 softime 6565 );
38     var $postedIdDemandeur = array("petitionnaire_principal" => array(),
39     "delegataire" => array(),
40     "petitionnaire" => array(),
41     "plaignant_principal" => array(),
42     "plaignant" => array(),
43     "contrevenant_principal" => array(),
44     "contrevenant" => array(),
45     "requerant_principal" => array(),
46     "requerant" => array(),
47     "avocat_principal" => array(),
48     "avocat" => array(),
49 softime 7067 "bailleur_principal" => array(),
50     "bailleur" => array(),
51 softime 6565 );
52 mbroquet 3730
53     var $autreDossierEnCour;
54    
55     var $cerfa = null;
56    
57     /**
58     * Instance du paramétrage de la taxe d'aménagement
59     *
60     * @var null
61     */
62     var $inst_taxe_amenagement = null;
63    
64     /**
65     * Instance de la classe dossier_autorisation.
66     *
67     * @var mixed (resource | null)
68     */
69     var $inst_dossier_autorisation = null;
70    
71     /**
72 softime 6929 * Instance de la classe cerfa.
73     *
74     * @var mixed (resource | null)
75     */
76     var $inst_cerfa = null;
77    
78     /**
79 softime 7996 *
80     * @return string
81     */
82     function get_default_libelle() {
83     return $this->get_dossier_libelle($this->getVal('dossier_instruction'));
84     }
85    
86     /**
87 mbroquet 3730 * Définition des actions disponibles sur la classe.
88     *
89     * @return void
90     */
91     function init_class_actions() {
92    
93     // On récupère les actions génériques définies dans la méthode
94     // d'initialisation de la classe parente
95     parent::init_class_actions();
96    
97 softime 6929 // ACTION - 003 - consulter
98     //
99     $this->class_actions[3]["condition"] = "is_user_from_allowed_collectivite";
100    
101 mbroquet 3730 // ACTION - 100 - pdfetat
102     // Permet de visualiser le récépissé de la demande
103     $this->class_actions[100] = array(
104     "identifier" => "pdfetat",
105     "portlet" => array(
106     "type" => "action-blank",
107     "libelle" => _("Editer le recepisse PDF"),
108     "order" => 100,
109     "class" => "pdf-16",
110     ),
111     "view" => "view_pdfetat",
112     "permission_suffix" => "consulter",
113     );
114    
115     // ACTION - 110 - affichage_reglementaire_registre
116     // Affiche un formulaire pour visualiser le registre réglementaire
117     $this->class_actions[110] = array(
118     "identifier" => "affichage_reglementaire_registre",
119     "view" => "view_reglementaire_registre",
120     "permission_suffix" => "consulter",
121     );
122    
123 jymadier 4588 // ACTION - 111 - generate_affichage_reglementaire_registre
124     // Génère et affiche le PDF registre d'affichage réglementaire
125     $this->class_actions[111] = array(
126     "identifier" => "generate_affichage_reglementaire_registre",
127     "view" => "view_generate_affichage_reglementaire_registre",
128     "permission_suffix" => "consulter",
129     );
130    
131 mbroquet 3730 // ACTION - 120 - affichage_reglementaire_attestation
132     // Affiche un formulaire pour visualiser l'attestation réglementaire
133     $this->class_actions[120] = array(
134     "identifier" => "affichage_reglementaire_attestation",
135     "view" => "view_reglementaire_attestation",
136     "permission_suffix" => "consulter",
137     );
138    
139     // ACTION - 130 - Récupération de l'adresse
140     $this->class_actions[130] = array(
141     "identifier" => "get_adresse",
142     "view" => "view_get_adresse_by_cadastre",
143     "permission_suffix" => "recuperer_adresse",
144     );
145     }
146    
147 softime 6929
148 mbroquet 3730 /**
149 softime 6929 * CONDITION - is_user_from_allowed_collectivite.
150 mbroquet 3730 *
151 softime 6929 * Cette condition permet de vérifier si l'utilisateur connecté appartient
152     * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
153     * la collectivité de l'enregistrement sur lequel on se trouve.
154     *
155     * @return boolean
156 mbroquet 3730 */
157 softime 6929 public function is_user_from_allowed_collectivite() {
158    
159     // Si l'utilisateur est de niveau 2
160     if ($this->f->isCollectiviteMono() === false) {
161     // Alors l'utilisateur fait partie d'une collectivité autorisée
162     return true;
163     }
164    
165     // L'utilisateur est donc de niveau 1
166     // On vérifie donc si la collectivité de l'utilisateur est la même
167     // que la collectivité de l'élément sur lequel on se trouve
168     if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
169     // Alors l'utilisateur fait partie d'une collectivité autorisée
170     return true;
171     }
172    
173     // L'utilisateur ne fait pas partie d'une collectivité autorisée
174     return false;
175     }
176    
177    
178     /**
179     *
180     */
181 mbroquet 3730 function get_inst_dossier_instruction($dossier_instruction = null) {
182     //
183     return $this->get_inst_common(
184     "dossier_instruction",
185     $dossier_instruction,
186     "dossier"
187     );
188     }
189    
190     /**
191     * VIEW - view_pdfetat
192     *
193     * Génère un récépissé PDF de la demande.
194     *
195     * @return void
196     */
197     function view_pdfetat() {
198     // Identifiant de la demande
199     $idx = $this->getVal($this->clePrimaire);
200    
201     // Requête qui récupère le type de lettre type
202     $sql = " SELECT instruction.instruction, instruction.lettretype,";
203     $sql .= " demande.om_collectivite, demande.dossier_instruction";
204     $sql .= " FROM ".DB_PREFIXE."demande ";
205     $sql .= " LEFT JOIN ".DB_PREFIXE."instruction ";
206     $sql .= " ON demande.instruction_recepisse=instruction.instruction ";
207     $sql .= " WHERE demande.demande=".intval($idx);
208     $res = $this->f->db->query($sql);
209     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
210     $this->f->isDatabaseError($res);
211     $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
212    
213     // Si la requête nous retourne un résultat
214     if (isset($row["instruction"])
215     && !empty($row["instruction"])
216     && isset($row["lettretype"])
217     && !empty($row["lettretype"])) {
218    
219     // récupération des paramètres de la collectivité
220     $coll_param = $this->f->getCollectivite($row["om_collectivite"]);
221    
222     // Génération du récépissé
223     $pdf_output = $this->compute_pdf_output(
224     "lettretype",
225     $row["lettretype"],
226     $coll_param,
227     $row["instruction"]
228     );
229     // Mise à disposition du récépissé
230     $this->expose_pdf_output(
231     $pdf_output['pdf_output'],
232     "recepisse_depot_".$row["dossier_instruction"].".pdf"
233     );
234     } else {
235     // On indique à l'utilisateur que le récépissé n'existe pas
236     $this->f->displayMessage("error", _("Le recepisse demande n'existe pas."));
237     }
238     }
239    
240     /**
241     * VIEW - view_reglementaire_registre
242     *
243     * Affiche un formulaire pour génèrer le registre d'affichage réglementaire.
244     *
245     * @return void
246     */
247     function view_reglementaire_registre() {
248    
249     // Vérification de l'accessibilité sur l'élément
250     $this->checkAccessibility();
251    
252     /**
253     * Gestion des erreurs : vérification du paramétrage
254     */
255     $erreur = false;
256     // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
257     $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
258     // Si le paramétrage est vide ou pas numérique
259     if ($aff_obli == "" or !is_numeric($aff_obli)) {
260     $erreur = true;
261     } else {
262     // Vérification de l'existance de l'événement
263     $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
264     $res_verif = $this->f->db->getOne($sql_verif);
265     $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
266     $this->f->isDatabaseError($res_verif);
267     // Si pas de correspondance d'événement dans la base
268     if ($res_verif === '0') {
269     $erreur = true;
270     }
271     }
272     // Affichage d'un message si en erreur
273     if ($erreur == true) {
274     // Affichage de l'erreur et sortie de la vue
275     $this->f->displayMessage("error", _("Erreur de parametrage. Contactez votre administrateur."));
276     return;
277     }
278    
279     // Si un affichage réglementaire des dossiers est demandé (appel en ajax)
280     if ($this->f->get_submitted_get_value('update') !== null) {
281     // Désactivation des logs car appel en ajax
282     $this->f->disableLog();
283     // Récupère la collectivité de l'utilisateur
284     $this->f->getCollectivite();
285     // Récupération de la liste des dossiers d'instruction dont l'état est
286     // "encours" et le groupe est 'ADS'. Une jointure avec la table instruction
287     // permet de savoir si le dossier a déjà été affiché ou non en récupérant
288     // l'id de l'événement qui représente l'attestion de l'affichage
289     // réglementaire dans le paramétrage.
290     $sql = "SELECT dossier.dossier, instruction.instruction, dossier.om_collectivite
291     FROM
292     ".DB_PREFIXE."dossier
293     LEFT JOIN ".DB_PREFIXE."instruction
294     ON dossier.dossier=instruction.dossier
295     AND instruction.evenement=".$aff_obli."
296     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
297     ON dossier.dossier_autorisation =
298     dossier_autorisation.dossier_autorisation
299     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
300     ON dossier_autorisation.dossier_autorisation_type_detaille =
301     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
302     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
303     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
304     dossier_autorisation_type.dossier_autorisation_type
305     LEFT JOIN ".DB_PREFIXE."groupe
306     ON dossier_autorisation_type.groupe = groupe.groupe
307     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
308     ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
309     WHERE
310     (select
311     e.statut
312     from
313     ".DB_PREFIXE."etat e
314     where
315     e.etat = dossier.etat
316     ) = 'encours'
317     AND groupe.code = 'ADS'
318     AND LOWER(dossier_instruction_type.code) IN ('p','m','t')
319     AND dossier.om_collectivite = ".$this->f->getParameter('om_collectivite_idx');
320     $res = $this->f->db->query($sql);
321     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
322     $this->f->isDatabaseError($res);
323     // Boucle sur les dossiers
324     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
325     // Si aucune instruction n'a d'événement de type "affichage_obligatoire"
326     // on créé une nouvelle instruction avec cet événement.
327     if ($row["instruction"] == "") {
328     // Instanciation d'instruction pour ajout
329 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
330     "obj" => "instruction",
331     "idx" => "]",
332     ));
333 mbroquet 3730 // Création d'un tableau avec la liste des champs de l'instruction
334     foreach($instr->champs as $champ) {
335     $valF[$champ] = "";
336     }
337     $valF["destinataire"] = $row['dossier'];
338     $valF["date_evenement"] = date("d/m/Y");
339     $valF["evenement"] = $aff_obli;
340     $valF["dossier"] = $row['dossier'];
341    
342     // Définition des valeurs de la nouvelle instruction
343     $instr->valF = array();
344     // Insertion dans la base
345     $res_ajout = $instr->ajouter($valF, $this->f->db, DEBUG);
346     $this->f->addToLog(__METHOD__.": db->autoexecute(\"".DB_PREFIXE."instruction\", ".print_r($valF, true).", DB_AUTOQUERY_INSERT);", VERBOSE_MODE);
347     $this->f->isDatabaseError($res_ajout);
348    
349     //Finalisation du document
350     $_GET['obj']='instruction';
351     $_GET['idx']=$instr->valF[$instr->clePrimaire];
352 softime 7996 $instr = $this->f->get_inst__om_dbform(array(
353     "obj" => "instruction",
354     "idx" => $_GET['idx'],
355     ));
356 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
357     $instr->setParameter('maj',100);
358     $instr->finalize();
359     }
360     }
361     } else { // Sinon affichage standard
362     // Affichage de la description de l'écran
363     $this->f->displayDescription(_("Cet ecran permet d'imprimer le registre d'affichage ".
364     "reglementaire des dossiers d'instruction en cours. ".
365     "La validation de ce traitement ajoute sur chacun des ".
366     "dossiers d'instruction concernes la possibilite ".
367     "d'imprimer une attestation d'affichage."));
368     // Ouverture du formulaire
369     echo "\t<form";
370     echo " method=\"post\"";
371     echo " id=\"affichage_reglementaire_registre_form\"";
372     echo " action=\"#\"";
373     echo ">\n";
374     //
375     echo "<div id=\"msg\"></div>";
376     // Affichage du bouton
377     echo "\t<div class=\"formControls\">\n";
378     $this->f->layout->display_form_button(array("value" => _("Valider"), "onclick" => "affichage_reglementaire_registre(this); return false;", ));
379     echo "\t</div>\n";
380     // Fermeture du fomulaire
381     echo "\t</form>\n";
382     }
383     }
384    
385     /**
386 jymadier 4588 * VIEW - view_generate_affichage_reglementaire_registre
387     *
388     * Génère et affiche l'édition PDF registre d'affichage
389     * réglementaire.
390     *
391     * @return void
392     */
393     function view_generate_affichage_reglementaire_registre() {
394    
395     // Vérification de l'accessibilité sur l'élément
396     $this->checkAccessibility();
397     // Génération du PDF
398     $result = $this->compute_pdf_output('etat', 'registre_dossiers_affichage_reglementaire', null, $this->getVal($this->clePrimaire));
399     // Affichage du PDF
400     $this->expose_pdf_output(
401     $result['pdf_output'],
402     $result['filename']
403     );
404     }
405    
406     /**
407 mbroquet 3730 * VIEW - view_reglementaire_attestation
408     *
409     * Affiche un formulaire pour génèrer l'attestation d'affichage
410     * réglementaire.
411     *
412     * @return void
413     */
414     function view_reglementaire_attestation() {
415    
416     // Vérification de l'accessibilité sur l'élément
417     $this->checkAccessibility();
418    
419     /**
420     * Gestion des erreurs : vérification du paramétrage
421     */
422     $erreur = false;
423     // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
424     $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
425     // Si le paramétrage est vide ou pas numérique
426     if ($aff_obli == "" or !is_numeric($aff_obli)) {
427     $erreur = true;
428     } else {
429     // Vérification de l'existance de l'événement
430     $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
431     $res_verif = $this->f->db->getOne($sql_verif);
432     $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
433     $this->f->isDatabaseError($res_verif);
434     // Si pas de correspondance d'événement dans la base
435     if ($res_verif === '0') {
436     $erreur = true;
437     }
438     }
439     // Affichage d'un message si en erreur
440     if ($erreur == true) {
441     // Affichage de l'erreur et sortie de la vue
442     $this->f->displayMessage("error", _("Erreur de parametrage. Contactez votre administrateur."));
443     return;
444     }
445    
446     /**
447     * Validation du formulaire
448     */
449     // Si le formulaire a été validé
450     if ($this->f->get_submitted_post_value("dossier") !== null) {
451     // Si une valeur a été saisie dans le champs dossier
452     if ($this->f->get_submitted_post_value("dossier") != "") {
453 jymadier 4102 // On récupère la valeur postée :
454     // - on l'échappe pour la base de données
455     // - on supprime les espaces pour faciliter la saisie
456     // - on le positionne en minuscule pour être sûr de la correspondance
457     $posted_dossier = $this->f->db->escapesimple(strtolower(str_replace(' ', '', $this->f->get_submitted_post_value("dossier"))));
458 mbroquet 3730 // Récupération des informations sur le dossier et l'étape d'instruction
459     $sql = "SELECT
460     dossier.dossier, instruction.instruction, instruction.lettretype,
461     instruction.om_final_instruction, instruction.om_fichier_instruction
462     FROM
463     ".DB_PREFIXE."dossier
464     LEFT JOIN ".DB_PREFIXE."instruction
465     ON dossier.dossier=instruction.dossier
466     AND instruction.evenement=".$this->f->getParameter('id_affichage_obligatoire')."
467     WHERE
468 jymadier 4102 LOWER(dossier.dossier)='".$posted_dossier."' ";
469 mbroquet 3730 $res = $this->f->db->query($sql);
470     $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
471     $this->f->isDatabaseError($res);
472     $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
473     // Si il y a un dossier et une étape d'instrcution correspondante à
474 jymadier 4588 // l'événement affichage obligatoire et que l'instruction est bien finalisée
475     if ($res->numrows() != 0
476     && $row["instruction"] != ""
477     && isset($row['om_fichier_instruction'])
478     && isset($row['om_final_instruction'])
479     && $row['om_fichier_instruction'] != ''
480     && $row['om_final_instruction'] == 't') {
481     //
482 mbroquet 3730 $message_class = "valid";
483     $message = _("Cliquez sur le lien ci-dessous pour telecharger votre attestation d'affichage");
484     $message .= " : <br/><br/>";
485     $message .= "<a class='om-prev-icon pdf-16'";
486     $message .= " title=\""._("Attestation d'affichage")."\"";
487 softime 7996 $message .= " href='../app/index.php?module=form&snippet=file&obj=instruction&amp;"
488 mbroquet 3730 ."champ=om_fichier_instruction&amp;id=".$row['instruction']."'";
489     $message .= " target='_blank'>";
490     $message .= _("Attestation d'affichage");
491     $message .= "</a>";
492 jymadier 4588 } elseif ($res->numrows() != 0
493     && $row["instruction"] != ""
494     && isset($row['om_fichier_instruction'])
495     && isset($row['om_final_instruction'])
496     && $row['om_fichier_instruction'] != ''
497     && $row['om_final_instruction'] == 'f') {
498     // Si l'instruction n'est pas finalisée on indique à l'utilisateur que l'édition n'est pas possible
499     $message_class = "error";
500     $message = _("L'attestation de ce dossier existe mais n'est pas finalisée.");
501 mbroquet 3730 } elseif ($res->numrows() != 0 && $row["instruction"] == "") {
502     // Si aucune instruction avec l'événement affichage obligatoire n'a
503     // été trouvée
504     $message_class = "error";
505     $message = _("Ce dossier n'a jamais ete affiche.");
506     } else {
507     // Si aucun dossier n'est trouvé
508     $message_class = "error";
509     $message = _("Ce dossier n'existe pas.");
510     }
511     } else {
512     // Si aucune valeur n'a été saisie dans le champs dossier
513     $message_class = "error";
514     $message = _("Veuiller saisir un No de dossier.");
515     }
516     }
517    
518     /**
519     * Affichage des messages et du formulaire
520     */
521     // Affichage de la description de l'écran
522     $this->f->displayDescription(_("Cet ecran permet d'imprimer l'attestation d'affichage ".
523     "reglementaire d'un dossier d'instruction. Il suffit de ".
524     "saisir le numero du dossier d'instruction puis de ".
525     "valider pour obtenir le lien de telechargement de ".
526     "l'attestation permettant de l'imprimer."));
527     // Affichage du message de validation ou d'erreur
528     if (isset($message) && isset($message_class) && $message != "") {
529     $this->f->displayMessage($message_class, $message);
530     }
531     // Ouverture du formulaire
532     echo "\t<form";
533     echo " method=\"post\"";
534     echo " id=\"affichage_reglementaire_attestation_form\"";
535     echo " action=\"\"";
536     echo ">\n";
537     // Paramétrage des champs du formulaire
538     $champs = array("dossier");
539     // Création d'un nouvel objet de type formulaire
540 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
541     "validation" => 0,
542     "maj" => 0,
543     "champs" => $champs,
544     ));
545 mbroquet 3730 // Paramétrage des champs du formulaire
546     $form->setLib("dossier", _("No de dossier"));
547     $form->setType("dossier", "text");
548     $form->setTaille("dossier", 25);
549     $form->setMax("dossier", 25);
550     // Affichage du formulaire
551     $form->entete();
552     $form->afficher($champs, 0, false, false);
553     $form->enpied();
554     // Affichage du bouton
555     echo "\t<div class=\"formControls\">\n";
556     $this->f->layout->display_form_button(array("value" => _("Valider")));
557     echo "\t</div>\n";
558     // Fermeture du fomulaire
559     echo "\t</form>\n";
560     }
561    
562    
563     /**
564     * VIEW - view_get_adresse_by_cadastre
565     *
566     * Permet de récupérer l'adresse de la première référence cadastrale via le sig.
567     *
568     * @return void
569     */
570     public function view_get_adresse_by_cadastre() {
571     //
572     $this->f->disableLog();
573     $refcads = "";
574     // Récupération des références cadastrales passées en paramètre
575     if ($this->f->get_submitted_post_value("refcad") != null) {
576     $refcads = $this->f->get_submitted_post_value("refcad");
577     }
578     // Si ce n'est pas un tableau de références
579     if (is_array($refcads) === false){
580     printf(json_encode(_("Aucune reference cadastrale fournie")));
581     return;
582     }
583     // TODO : Ajouter les tests
584     // XXX
585     // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
586     // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
587     // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
588     $collectivite_idx = $_SESSION["collectivite"];
589     if ($this->f->get_submitted_post_value("om_collectivite") != null) {
590     $collectivite_idx = $this->f->get_submitted_post_value("om_collectivite");
591     }
592     $collectivite_param = $this->f->getCollectivite($collectivite_idx);
593     // Si le paramètre option_sig de la commune n'a pas la valeur 'sig_externe', on
594     // affiche une erreur.
595     if ($collectivite_param['option_sig'] != 'sig_externe') {
596     printf(json_encode(_("La localisation SIG n'est pas activee pour cette commune.")));
597     return;
598     }
599    
600     $wParcelle = "";
601     //Formatage des références cadastrales pour l'envoi
602     foreach ($refcads as $refcad) {
603     //Pour chaque ligne
604     foreach ($refcad as $value) {
605     //On ajoute les données dans le tableau que si quartier + section + parcelle
606     //a été fourni
607     if ($value["quartier"] !== "" && $value["section"] !== "" &&
608     $value["parcelle"] !== "") {
609     //
610     $wParcelle .= $value["quartier"].$value["section"].$value["parcelle"];
611     //Si on a des délimiteurs
612     if (isset($value["delimit"][0])) {
613    
614     //Pour chaque délimiteur
615     for($i = 0; $i < count($value["delimit"][0]); $i++) {
616     //
617     $wParcelle .= $value["delimit"][0][$i];
618     }
619     }
620     // Séparateur
621     $wParcelle .= ";";
622     }
623     }
624     }
625    
626     try {
627     $geoads = new geoads($collectivite_param);
628     } catch (geoads_exception $e) {
629     printf(json_encode($e->getMessage()));
630     return;
631     }
632     // XXX
633     // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
634     // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
635     // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
636     // Formatage des parcelles pour l'envoi au webservice
637     $liste_parcelles = $this->f->parseParcelles($wParcelle, $collectivite_idx);
638     try {
639     //On lance la requête SOAP
640     $execute = $geoads->verif_parcelle($liste_parcelles);
641     } catch (geoads_exception $e) {
642     printf(json_encode($e->getMessage()));
643     return;
644     }
645    
646     // Vérifie l'existence de la 1ere parcelles
647     if (!isset($execute[0]) or $execute[0]['existe'] != true) {
648     printf(json_encode(_("Aucune adresse ne correspond a la reference cadastrale fournie")));
649     return;
650     }
651    
652     $response['return_addr'] = array();
653     // Si plusieurs parcelles sont retournées on n'utilise que la première pour
654     // récupérer l'adresse
655     if (isset($execute[0]) && is_array($execute[0])) {
656     $adresse_ws = $execute[0];
657     }
658     //Récupération du nom de la collectivité
659     $sql = "SELECT UPPER(
660     valeur)
661     FROM
662     ".DB_PREFIXE."om_parametre
663     WHERE
664     libelle = 'ville' and om_collectivite = ".$collectivite_idx;
665     $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
666    
667     $ville = $this->f->db->getOne($sql);
668     $this->f->isDatabaseError($ville);
669    
670     $response["return_addr"]["localite"] = $ville;
671    
672     // Formate le code postal
673     $code_postal = '';
674     // On vérifie que l'arrondissement retourné est bien une valeur
675     // cohérente avant d'essayer de récupérer son code postal en base de
676     // données
677     if (isset($adresse_ws["adresse"]['arrondissement']) === true
678     && $adresse_ws["adresse"]['arrondissement'] != ""
679     && is_numeric($adresse_ws["adresse"]['arrondissement']) === true) {
680     // Requête sql
681     $sqlDonneesArrdt = "SELECT code_postal
682     FROM ".DB_PREFIXE."arrondissement
683     WHERE arrondissement = ".$adresse_ws["adresse"]['arrondissement'];
684     $code_postal = $this->f->db->getOne($sqlDonneesArrdt);
685     $this->f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesArrdt."\")", VERBOSE_MODE);
686     $this->f->isDatabaseError($code_postal);
687     } else {
688     //Récupération du code postal
689     $sql = "SELECT
690     valeur
691     FROM
692     ".DB_PREFIXE."om_parametre
693     WHERE
694     libelle = 'cp' and om_collectivite = ".$collectivite_idx;
695     $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
696    
697     $code_postal = $this->f->db->getOne($sql);
698     $this->f->isDatabaseError($code_postal);
699     }
700    
701     $response['return_addr']['code_postal'] = $code_postal;
702    
703     // On coupe les chaînes retournées afin que leurs tailles
704     // correspondent aux tailles des champs en base de données
705     if ($adresse_ws["adresse"]['numero_voie'] !== '') {
706     $response['return_addr']['numero_voie'] = substr($adresse_ws["adresse"]['numero_voie'], 0, 20);
707     }
708 softime 7685 // cas où le type de voie n'est pas fourni par le SIG
709     if ($adresse_ws["adresse"]['nom_voie'] !== '') {
710 mbroquet 3730 $response['return_addr']['nom_voie'] = substr(
711 softime 7685 $adresse_ws["adresse"]['nom_voie'],
712     0,
713     30
714     );
715     }
716     // cas où le type de voie est fourni
717     if (isset($adresse_ws["adresse"]['type_voie'])
718     AND $adresse_ws["adresse"]['type_voie'] !== ''
719     AND $adresse_ws["adresse"]['nom_voie'] !== '') {
720     $response['return_addr']['nom_voie'] = substr(
721 mbroquet 3730 $adresse_ws["adresse"]['type_voie']." ".$adresse_ws["adresse"]['nom_voie'],
722     0,
723     30
724     );
725     }
726     //
727     printf(json_encode($response));
728     return;
729     }
730    
731    
732 softime 6929 function setValF($val = array()) {
733 mbroquet 3730 parent::setValF($val);
734     // Récupération des id demandeurs postés
735     $this->getPostedValues();
736     //$this->valIdDemandeur=$this->postedIdDemandeur;
737 softime 6565
738     // On retraite le texte saisie pour jointure en BDD.
739     // Traitement identique à celui effectué en JavaScript
740     // dans la fonction lookingForAutorisationContestee().
741     if ($this->valF['autorisation_contestee'] !== NULL) {
742     $val = trim($this->valF['autorisation_contestee']);
743     $this->valF['autorisation_contestee'] = preg_replace(
744     '/\s+/',
745     '',
746     $val
747     );
748     }
749    
750 mbroquet 3730 }
751    
752    
753     /**
754     * Méthode permettant de récupérer les valeurs du dossier d'autorisation
755     * correspondant à la nouvelle demande
756     */
757     function getValFromDossier($dossier_autorisation) {
758     include "../sql/pgsql/demande.form.inc.php";
759     $sql=str_replace("<idx>",$this->getParameter("idx_dossier"),
760     $sql_infos_dossier);
761     $res = $this->db->query($sql);
762     $this->f->addToLog("getValFromDossier(): db->query(\"".$sql."\")", VERBOSE_MODE);
763     $this->f->isDatabaseError($res);
764     $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
765     return $row;
766     }
767    
768     /*
769     * La date du jour par défaut dans le champs date_demande
770     * Put the date of the day by default into the field date_demande
771     */
772 softime 6929 function setVal(&$form, $maj, $validation, &$db = null, $DEBUG = null) {
773     parent::setVal($form, $maj, $validation, $db, $DEBUG);
774 mbroquet 3730 if($maj == 0) {
775    
776     // Définition de la date de dépôt par défaut
777     if($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
778     $form->setVal("date_demande", date('d/m/Y'));
779     }
780    
781     // Récupération des valeurs du dossier d'autorisation correspondant
782     if($this->getParameter("idx_dossier") != "") {
783     $val_autorisation = $this->getValFromDossier(
784     $this->getParameter("idx_dossier"));
785     foreach($val_autorisation as $champ => $value) {
786     $form->setVal($champ,$value);
787     }
788     }
789     }
790     }
791     function getDataSubmit() {
792    
793     $datasubmit = parent::getDataSubmit();
794     if($this->getParameter("idx_dossier") != "") {
795     $datasubmit .= "&idx_dossier=".$this->getParameter("idx_dossier");
796     }
797     return $datasubmit;
798     }
799    
800     /**
801 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
802 softime 6565 *
803     * @return, string Type de formulaire.
804     */
805     function get_type_affichage_formulaire() {
806    
807     $sql = "SELECT dossier_autorisation_type.affichage_form
808     FROM ".DB_PREFIXE."demande_type
809     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
810     ON demande_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
811     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
812     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
813     WHERE demande_type.demande_type=".$this->valF["demande_type"];
814     $type_aff_form = $this->db->getOne($sql);
815     $this->f->addToLog(__METHOD__ . " : db->getOne(\"".$sql."\")", VERBOSE_MODE);
816     if($this->f->isDatabaseError($type_aff_form, true) === true) {
817     return false;
818     }
819     return $type_aff_form;
820     }
821    
822     /**
823 mbroquet 3730 * Méthode de verification du contenu
824     */
825 softime 6929 function verifier($val = array(), &$db = null, $DEBUG = null) {
826 mbroquet 3730 parent::verifier($val, $db, $DEBUG);
827    
828 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
829     if ($type_aff_form ===false) {
830 mbroquet 3730 $this->correct = false;
831 softime 6565 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
832 mbroquet 3730 }
833 softime 6565 switch ($type_aff_form) {
834     case 'ADS':
835     case 'CTX RE':
836     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
837     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
838     !is_null($this->form)) {
839     $this->correct = false;
840     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
841     }
842     break;
843     case 'CTX IN':
844     if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
845     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
846     !is_null($this->form)) {
847     $this->correct = false;
848     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
849     }
850     break;
851 softime 7067 case 'DPC':
852     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
853     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
854     !is_null($this->form)) {
855     $this->correct = false;
856     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
857     }
858     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
859     empty($this->postedIdDemandeur["bailleur_principal"]) AND
860     !is_null($this->form)) {
861     $this->correct = false;
862     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
863     }
864     break;
865 softime 6565
866     }
867    
868 mbroquet 3730 }
869    
870     /**
871     * Configuration des select
872     */
873 softime 6929 function setSelect(&$form, $maj, &$db = null, $debug = null) {
874 mbroquet 3730
875     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
876     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
877     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
878     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
879    
880     // Méthode de récupération des valeurs du select "demande_type"
881     if ($maj < 2
882     && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
883     OR ($this->f->get_submitted_get_value('obj') === null))) {
884     // demande_type
885     $form->setSelect('demande_type', $this->loadSelectDemandeType($form, $maj, $db, $debug, "dossier_autorisation_type_detaille"));
886     } else {
887     // demande_type
888     $this->init_select($form, $db, $maj, $debug, "demande_type",
889     $sql_demande_type, $sql_demande_type_by_id, false);
890     }
891     // arrondissement
892     $this->init_select($form, $db, $maj, $debug, "arrondissement",
893     $sql_arrondissement, $sql_arrondissement_by_id, false);
894    
895 softime 6565 // Filtre des demandes par groupes
896     $group_clause = array();
897     $ajout_condition_requete = "";
898     foreach ($_SESSION["groupe"] as $key => $value) {
899     if($value["enregistrement_demande"] !== true) {
900     continue;
901     }
902     $group_clause[$key] = "(groupe.code = '".$key."'";
903     if($value["confidentiel"] !== true) {
904     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
905     }
906     $group_clause[$key] .= ")";
907     }
908     // Mise en chaîne des clauses
909     $conditions = implode(" OR ", $group_clause);
910     if($conditions !== "") {
911     $ajout_condition_requete .= " AND (".$conditions.")";
912     }
913     // Les clauses sont une white list. Cela qui signifie que l'on
914     // rajoute une condition irréalisable si absence de clause.
915     if ($ajout_condition_requete === '') {
916     $ajout_condition_requete = 'AND false';
917     }
918     $sql_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requete>', $ajout_condition_requete, $sql_dossier_autorisation_type_detaille);
919 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
920     $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
921    
922     // om_collectivite
923     $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
924     }
925    
926     /**
927     * Charge le select du champ type de demande
928     * @param object $form Formulaire
929     * @param int $maj Mode d'insertion
930     * @param object $db Database
931     * @param bool $debug Debug active ou pas
932     * @param string $champ champ activant le filtre
933     * @return array Contenu du select
934     */
935     function loadSelectDemandeType(&$form, $maj, &$db, $debug, $champ) {
936    
937     //
938     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
939     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
940     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
941     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
942    
943     // Contenu de la liste à choix
944     $contenu=array();
945     $contenu[0][0]='';
946     $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
947    
948     //Récupère l'id du type de dossier d'autorisation détaillé
949     $id_dossier_autorisation_type_detaille = "";
950     if ($this->f->get_submitted_post_value($champ) !== null) {
951     $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
952     } elseif($this->getParameter($champ) != "") {
953     $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
954     } elseif(isset($form->val[$champ])) {
955     $id_dossier_autorisation_type_detaille = $form->val[$champ];
956     }
957    
958     // Récupération de paramètre pour le rechargement ajax du select
959     $idx_dossier = $this->getParameter("idx_dossier");
960    
961     // Récupère l'id de la nature de la demande
962     $id_demande_nature = "1";
963     if (isset($idx_dossier) AND $idx_dossier != "") {
964     $id_demande_nature = '2';
965     }
966    
967     // Ajout de condition pour la requête
968     $ajout_condition_requête = "";
969     if ($id_demande_nature == '2') {
970    
971     //On récupère le dossier d'autorisation
972     $sql = "SELECT dossier_autorisation
973     FROM ".DB_PREFIXE."dossier
974     WHERE dossier = '".$idx_dossier."'";
975     $dossier_autorisation = $this->db->getOne($sql);
976    
977     $this->f->addToLog(
978     "loadSelectDemandeType() : db->getone(\"".$sql."\");",
979     VERBOSE_MODE
980     );
981     $this->f->isDatabaseError($dossier_autorisation);
982    
983     //On récupère l'état du dernier dossier d'instruction
984     $sql = "SELECT etat
985     FROM ".DB_PREFIXE."dossier
986     WHERE dossier_autorisation = '".$dossier_autorisation."' AND
987     version = (SELECT max(version) FROM ".DB_PREFIXE."dossier
988     WHERE dossier_autorisation = '".$dossier_autorisation."' )";
989     $etatDernierDi = $this->db->getOne($sql);
990     $this->f->addToLog(
991     "loadSelectDemandeType() : db->getone(\"".$sql."\");",
992     VERBOSE_MODE
993     );
994     $this->f->isDatabaseError($etatDernierDi);
995    
996 softime 6565 $ajout_condition_requête = " AND etat.etat = '".$etatDernierDi."'
997     ";
998 mbroquet 3730 }
999    
1000     //
1001     if ($id_dossier_autorisation_type_detaille != "") {
1002     //Si l'id du type de dossier d'autorisation détaillé est renseigné
1003     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_dossier_autorisation_type_detaille>', $id_dossier_autorisation_type_detaille, $sql_demande_type_by_dossier_autorisation_type_detaille);
1004     // Ajoute une condition sur la nature de la demande
1005     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_demande_nature>', $id_demande_nature, $sql_demande_type_by_dossier_autorisation_type_detaille);
1006     // Permet d'ajouter une condition
1007     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requête>', $ajout_condition_requête, $sql_demande_type_by_dossier_autorisation_type_detaille);
1008     $res = $this->db->query($sql_demande_type_by_dossier_autorisation_type_detaille);
1009     $this->addToLog("db->query(\"".$sql_demande_type_by_dossier_autorisation_type_detaille."\");", VERBOSE_MODE);
1010     $this->f->isDatabaseError($res);
1011     //Les résultats de la requête sont stocké dans le tableau contenu
1012     $k=1;
1013     while ($row=& $res->fetchRow()){
1014     $contenu[0][$k]=$row[0];
1015     $contenu[1][$k]=$row[1];
1016     $k++;
1017     }
1018     }
1019    
1020     // Retourne le contenu de la liste
1021     return $contenu;
1022     }
1023    
1024     /*
1025     * Ajout du fielset
1026     * Add fieldset
1027     */
1028     function setLayout(&$form, $maj){
1029 softime 6565 if ( $maj < 2) {
1030 mbroquet 3730
1031 softime 6565 // Type de dossier/demande
1032     $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1033     $form->setFieldset('om_collectivite','D'
1034 mbroquet 3730 ,_('Type de dossier/demande'));
1035 softime 6565 $form->setFieldset('etat','F','');
1036     $form->setBloc('etat','F');
1037    
1038     // Autorisation contestée
1039     $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1040     $form->setFieldset('autorisation_contestee','D'
1041     ,_('Autorisation contestée'));
1042     $form->setFieldset('autorisation_contestee','F','');
1043     $form->setBloc('autorisation_contestee','F');
1044    
1045     // Date de la demande
1046     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1047     $form->setFieldset('date_demande','D',_('Date de la demande'));
1048     $form->setFieldset('date_demande','F','');
1049     $form->setBloc('date_demande','F');
1050    
1051 softime 7067 // Localisation
1052 softime 6565 $form->setBloc('terrain_references_cadastrales','D',"",
1053     "col_12 localisation demande_hidden_bloc");
1054 softime 7067 $form->setFieldset('terrain_references_cadastrales','D',_('Localisation'));
1055 softime 6565 $form->setFieldset('terrain_superficie','F','');
1056     $form->setBloc('terrain_superficie','F');
1057    
1058     // Demandeurs
1059     // → cf. formSpecificContent()
1060     }
1061     if ( $maj == 3 ) {
1062     $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1063     $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1064     $form->setFieldset('om_collectivite','D'
1065     ,_('Type de dossier/demande'));
1066     $form->setFieldset('dossier_autorisation','F','');
1067     $form->setBloc('dossier_autorisation','F');
1068 mbroquet 3730 /*Fin bloc 1*/
1069    
1070     // Affichage de l'état du dossier d'instruction
1071     $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1072     $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1073     $form->setFieldset('etat','F','');
1074     $form->setBloc('etat','F');
1075     $form->setBloc('etat','F');
1076    
1077 softime 6565 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1078    
1079 mbroquet 3730 /*Champ sur lequel s'ouvre le bloc 2 */
1080     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1081     $form->setFieldset('date_demande','D',_('Date de la demande'));
1082     $form->setFieldset('date_demande','F','');
1083     $form->setBloc('date_demande','F');
1084     /*Fin bloc 2*/
1085    
1086     /*Champ sur lequel s'ouvre le bloc 3 */
1087     $form->setBloc('terrain_references_cadastrales','D',"",
1088     "localisation col_12 demande_hidden_bloc");
1089 softime 7067 $form->setFieldset('terrain_references_cadastrales','D',_('Localisation'));
1090 mbroquet 3730 $form->setFieldset('terrain_superficie','F','');
1091     $form->setBloc('terrain_superficie','F');
1092     /*Fin bloc 4*/
1093     }
1094     }
1095    
1096     /*
1097     * Ajoute des actions sur les deux premiers select
1098     * Add actions on the two first select
1099     */
1100     function setOnchange(&$form,$maj){
1101     parent::setOnchange($form,$maj);
1102    
1103     $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1104 softime 6565 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1105 mbroquet 3730 }
1106    
1107     function setLib(&$form,$maj) {
1108     parent::setLib($form,$maj);
1109     //libelle des champs
1110    
1111     $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1112 softime 6565 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1113 mbroquet 3730 }
1114 softime 6565
1115 mbroquet 3730 /*
1116     * Cache le champ terrain_references_cadastrales
1117     * Hide the fiels terrain_references_cadastrales
1118     */
1119     function setType(&$form,$maj) {
1120     parent::setType($form,$maj);
1121    
1122     $form->setType('dossier_instruction', 'hidden');
1123     $form->setType('dossier_autorisation', 'hidden');
1124 softime 6565 $form->setType('autorisation_contestee', 'autorisation_contestee');
1125 mbroquet 3730
1126     $form->setType('instruction_recepisse', 'hidden');
1127     $form->setType('arrondissement', 'hidden');
1128    
1129     $form->setType('etat', 'hidden');
1130    
1131     // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1132     // sauf demande_type
1133     if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1134     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1135     $form->setType('etat', 'hiddenstatic');
1136     $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1137     $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1138     $form->setType('terrain_adresse_voie', 'hiddenstatic');
1139     $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1140     $form->setType('terrain_adresse_localite', 'hiddenstatic');
1141     $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1142     $form->setType('terrain_adresse_bp', 'hiddenstatic');
1143     $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1144     $form->setType('terrain_superficie', 'hiddenstatic');
1145     }
1146     if($maj == 1) {
1147     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1148     $form->setType('demande_type', 'selecthiddenstatic');
1149     }
1150     if($maj == 3) {
1151     $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1152     }
1153    
1154     }
1155    
1156     /**
1157     * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1158     * par l'utilisateur.
1159     *
1160     * @return integer identifiant du cerfa
1161     */
1162     function getIdCerfa() {
1163     if($this->cerfa != null) {
1164     return $this->cerfa;
1165     }
1166     // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1167     $sql = "SELECT
1168     dossier_autorisation_type_detaille.cerfa
1169     FROM
1170     ".DB_PREFIXE."dossier_autorisation_type_detaille
1171     JOIN
1172     ".DB_PREFIXE."cerfa
1173     ON
1174     dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1175     WHERE
1176     now()<=om_validite_fin
1177     AND now()>=om_validite_debut
1178     AND dossier_autorisation_type_detaille=".
1179     $this->valF['dossier_autorisation_type_detaille'];
1180     $this->cerfa = $this->db->getOne($sql);
1181     $this->f->addToLog(
1182     "ajoutDossierInstruction() : db->getone(\"".$sql."\");",
1183     VERBOSE_MODE
1184     );
1185     $this->f->isDatabaseError($this->cerfa);
1186     return $this->cerfa;
1187     }
1188    
1189    
1190     /**
1191     * Méthode permettant d'ajouter un dossier d'autorisation.
1192     *
1193     * @param integer $id identifiant de la demande
1194     * @param database &$db handler de la base de donnée
1195     * @param array $val tableau de valeurs postées via le formulaire
1196     * @param boolean $DEBUG debug
1197     *
1198     * @return boolean false si erreur
1199     */
1200     function ajoutDossierAutorisation($id, &$db, $val, $DEBUG) {
1201 softime 7996 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1202     "obj" => "dossier_autorisation",
1203     "idx" => "]",
1204     ));
1205 mbroquet 3730 $id_etat_initial_da =
1206     $this->f->getParameter('id_etat_initial_dossier_autorisation');
1207    
1208     // Vérification de l'existance d'un état initial des DA dans la table
1209     // om_parametre afin d'éviter d'eventuelle erreur de base de données
1210     if(isset($id_etat_initial_da)) {
1211     $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1212     WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1213     $count = $this->db->getOne($sql);
1214     $this->f->addToLog(
1215     "ajoutDossierAutorisation() : db->getOne(\"".$sql."\")",
1216     VERBOSE_MODE
1217     );
1218     if ($this->f->isDatabaseError($count, true)){
1219     $this->f->addToLog(
1220     "ajoutDossierAutorisation() : ERROR db->getOne(\"".$sql."\")",
1221     DEBUG_MODE
1222     );
1223 softime 6565
1224 mbroquet 3730 return false;
1225     }
1226     if($count != 1) {
1227     $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1228 softime 6565
1229 mbroquet 3730 return false;
1230 softime 6565 }
1231 mbroquet 3730
1232 softime 6565 // On récupère les paramètres de la collectivité concernée
1233     // par la demande.
1234     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1235     // Le paramètre 'insee' est obligatoire si il n'est pas présent
1236     // dans le tableau des paramètres alors on stoppe le traitement.
1237     if (!isset($collectivite_parameters['insee'])) {
1238     $this->f->addToLog(
1239     __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1240     DEBUG_MODE
1241     );
1242 mbroquet 3730
1243 softime 6565 return false;
1244     }
1245 mbroquet 3730
1246 softime 6565 // La méthode ajouter prend en paramètre un tableau associatif
1247     // contenant toutes les champs de la classe instanciée,
1248     // d'où l'initialisation du tableau en bouclant sur la liste des
1249     // champs du DA
1250     foreach($dossier_autorisation->champs as $value) {
1251     $valAuto[$value] = null;
1252 mbroquet 3730 }
1253 softime 6565
1254     // Définition des valeurs à insérer
1255     $valAuto['om_collectivite']=
1256     $this->valF['om_collectivite'];
1257     $valAuto['dossier_autorisation']="";
1258     $valAuto['exercice']=null;
1259     $valAuto['insee']= $collectivite_parameters['insee'];
1260     $valAuto['arrondissement']=
1261     $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1262     $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1263     $valAuto['erp_numero_batiment']=null;
1264     $valAuto['erp_ouvert']=null;
1265     $valAuto['erp_arrete_decision']=null;
1266     $valAuto['dossier_autorisation_type_detaille']=
1267     $this->valF['dossier_autorisation_type_detaille'];
1268     $valAuto['depot_initial']=
1269     $this->dateDBToForm($this->valF['date_demande']);
1270     $valAuto['terrain_references_cadastrales']=
1271     $this->valF['terrain_references_cadastrales'];
1272     $valAuto['terrain_adresse_voie_numero']=
1273     $this->valF['terrain_adresse_voie_numero'];
1274     $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1275     $valAuto['terrain_adresse_lieu_dit']=
1276     $this->valF['terrain_adresse_lieu_dit'];
1277     $valAuto['terrain_adresse_localite']=
1278     $this->valF['terrain_adresse_localite'];
1279     $valAuto['terrain_adresse_code_postal']=
1280     $this->valF['terrain_adresse_code_postal'];
1281     $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1282     $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1283     $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1284     $valAuto['numero_version']=-1;
1285     // Ajout du dossier dans la base
1286     if($dossier_autorisation->ajouter($valAuto, $db, $DEBUG) === false) {
1287     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1288    
1289     return false;
1290     }
1291     // Liaison du dossier ajouter à la demande
1292     $this->valF['dossier_autorisation'] =
1293     $dossier_autorisation->valF['dossier_autorisation'];
1294    
1295     return true;
1296 mbroquet 3730 }
1297    
1298 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1299    
1300     return false;
1301 mbroquet 3730 }
1302    
1303     /**
1304     * Méthode permettant d'ajouter un dossier d'instruction.
1305     *
1306     * @param integer $id identifiant de la demande
1307     * @param database &$db handler de la base de donnée
1308     * @param array $val tableau de valeurs postées via
1309     * le formulaire
1310     * @param boolean $DEBUG debug
1311     * @param integer $dossier_instruction_type identifiant du DI type
1312     *
1313     * @return boolean false si erreur
1314     */
1315     function ajoutDossierInstruction($id, &$db, $val, $DEBUG, $dossier_instruction_type) {
1316 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
1317     "obj" => "dossier",
1318     "idx" => "]",
1319     ));
1320 mbroquet 3730 foreach($dossier->champs as $value) {
1321     $valInstr[$value] = null;
1322     }
1323 softime 7996 $datd = $this->f->get_inst__om_dbform(array(
1324     "obj" => "dossier_autorisation_type_detaille",
1325     "idx" => $this->valF['dossier_autorisation_type_detaille'],
1326     ));
1327 mbroquet 3730
1328     /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1329     * versionning
1330     */
1331     $dossier->setDossierInstructionType($dossier_instruction_type);
1332    
1333     // Définition des valeurs à entrée dans la table
1334     $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1335     $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1336     $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1337     $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1338     $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1339     $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1340     $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1341     $valInstr['annee']=$annee->format("y");
1342     $valInstr['terrain_references_cadastrales']=
1343     $this->valF['terrain_references_cadastrales'];
1344     $valInstr['terrain_adresse_voie_numero']=
1345     $this->valF['terrain_adresse_voie_numero'];
1346     $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1347     $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1348     $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1349     $valInstr['terrain_adresse_code_postal']=
1350     $this->valF['terrain_adresse_code_postal'];
1351     $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1352     $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1353     $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
1354     $valInstr['description']="";
1355     $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
1356 softime 6565 if ($this->valF["autorisation_contestee"] != "") {
1357     $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
1358     }
1359 mbroquet 3730
1360     /*
1361     * Gestion de la qualification
1362     * */
1363     // Initialise le champ à false
1364     $valInstr['a_qualifier'] = false;
1365    
1366     // Récupère l'information depuis le type de la demande
1367     $qualification = $this->get_qualification($val['demande_type']);
1368    
1369     // Si le dossier doit être à qualifier
1370     if ($qualification === 't') {
1371     // Met le champ à true
1372     $valInstr['a_qualifier'] = true;
1373     }
1374    
1375 softime 6929 /*
1376     * Gestion de la simulation des taxes
1377     */
1378     // Récupère l'instance du cerfa lié au type détaillé du DA
1379     $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
1380    
1381     // Si l'option de simulation est activée pour la collectivité du dossier
1382     // et que le cerfa du dossier à les champs requis
1383     if ($this->f->is_option_simulation_taxes_enabled($val['om_collectivite']) === true
1384     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
1385    
1386     // Récupère le paramétrage des taxes
1387     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
1388     // Si un paramétrage des taxes est récupéré pour la collectivité
1389     if ($inst_taxe_amenagement !== null) {
1390    
1391     // Si la taxe d'aménagement à un seul secteur
1392     if ($inst_taxe_amenagement->has_one_secteur() == true) {
1393     // Sélectionne l'unique secteur automatiquement
1394     $valInstr['tax_secteur'] = 1;
1395     }
1396 mbroquet 3730 }
1397     }
1398    
1399     //
1400     if($dossier->ajouter($valInstr, $db, $DEBUG) === false) {
1401     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
1402     return false;
1403     }
1404    
1405     //Affichage de message à l'utilisateur concernant un problème lors de
1406     //l'affectation de l'instructeur au dossier d'instruction
1407     if ($dossier->valF['dossier_autorisation'] === '' &&
1408     $dossier->valF['instructeur'] === null){
1409     $this->addToMessage(
1410     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1411     );
1412     }
1413     elseif ( $dossier->valF['instructeur'] === null ){
1414     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
1415     $this->addToMessage("<br/> ".
1416     _("Pensez a assigner un instructeur a ce dossier.")
1417     );
1418     } else {
1419     $this->addToMessage(
1420     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1421     );
1422     }
1423     }
1424    
1425     // Liaison du dossier ajouter à la demande
1426     $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
1427    
1428     //
1429     return true;
1430     }
1431    
1432     /**
1433     * Méthode permettant d'ajouter les données techniques d'un DA.
1434     *
1435     * @param integer $id identifiant de la demande
1436     * @param database &$db handler de la base de donnée
1437     * @param array $val tableau de valeurs postées via le formulaire
1438     * @param boolean $DEBUG debug
1439     *
1440     * @return boolean false si erreur
1441     */
1442     function ajoutDonneesTechniquesDA($id, &$db, $val, $DEBUG) {
1443 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
1444     "obj" => "donnees_techniques",
1445     "idx" => "]",
1446     ));
1447 mbroquet 3730
1448     // Champs tous à NULL car seul le champ concernant le dossier
1449     // d'autorisation sera rempli
1450     foreach($this->DTDA->champs as $value) {
1451     $valF[$value] = null;
1452     }
1453     // Ajout du numéro de dossier d'instruction
1454     $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
1455     // Identifiant du cerfa
1456     $valF['cerfa'] = $this->getIdCerfa();
1457     //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
1458     if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
1459     // Ajout des données techniques
1460     if($this->DTDA->ajouter($valF, $db, $DEBUG) === false) {
1461     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
1462     return false;
1463     }
1464     }
1465     else {
1466     //On indique que le dossier d'autorisation n'a pas de données techniques
1467     $this->DTDA = null;
1468     //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
1469     $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
1470     return -1;
1471     }
1472    
1473     //
1474     return true;
1475     }
1476    
1477     /**
1478     * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
1479     **/
1480     function ajoutLiensDossierAutorisation($id, &$db, $val, $DEBUG) {
1481     // Création des liens entre le dossier autorisation et les demandeurs
1482     include '../sql/pgsql/demande.form.inc.php';
1483 softime 7996 $ldad = $this->f->get_inst__om_dbform(array(
1484     "obj" => "lien_dossier_autorisation_demandeur",
1485     "idx" => "]",
1486     ));
1487 mbroquet 3730 // Recupération des demandeurs liés à la demande
1488     $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur.
1489     " AND lien_demande_demandeur.demandeur NOT IN (
1490     SELECT lien_dossier_autorisation_demandeur.demandeur
1491     FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
1492     WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
1493     '".$this->valF['dossier_autorisation']."'
1494     )");
1495     $res = $db->query($sql);
1496     $this->f->addToLog("ajoutLiensDossierAutorisation() : db->query(\"".$sql."\");", VERBOSE_MODE);
1497     if ($this->f->isDatabaseError($res, true)) {
1498     return false;
1499     }
1500     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1501     $row['lien_dossier_autorisation_demandeur'] = NULL;
1502     $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
1503     if ($ldad->ajouter($row, $db, $DEBUG) === false) {
1504     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
1505     return false;
1506     }
1507     }
1508    
1509     //
1510     return true;
1511     }
1512    
1513     /**
1514     * Ajout des liens demandeurs / dossier d'autorisation
1515     **/
1516     function ajoutLiensDossierInstruction($id, &$db, $val, $DEBUG) {
1517     // Création des liens entre le dossier instruction et les demandeurs
1518     include '../sql/pgsql/demande.form.inc.php';
1519 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
1520     "obj" => "lien_dossier_demandeur",
1521     "idx" => "]",
1522     ));
1523 mbroquet 3730 // Recupération des demandeurs liés à la demande
1524     $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur);
1525     $res = $db->query($sql);
1526     $this->f->addToLog("ajoutLiensDossierInstruction() : db->query(\"".$sql."\");", VERBOSE_MODE);
1527     if ($this->f->isDatabaseError($res, true)) {
1528     return false;
1529     }
1530     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1531     $row['lien_dossier_demandeur'] = NULL;
1532     $row['dossier'] = $this->valF['dossier_instruction'];
1533     if ($ldd->ajouter($row, $db, $DEBUG) === false) {
1534     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
1535     return false;
1536     }
1537     }
1538    
1539     //
1540     return true;
1541     }
1542    
1543     /*
1544     * Récupère l'identifiant d'un arrondissement à partir d'un code postal
1545     */
1546     function getArrondissement($terrain_adresse_code_postal){
1547    
1548     $arrondissement = NULL;
1549    
1550     $sql = "SELECT
1551     arrondissement
1552     FROM
1553     ".DB_PREFIXE."arrondissement
1554     WHERE
1555     code_postal = '$terrain_adresse_code_postal' ";
1556     $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
1557    
1558     $res = $this->db->query($sql);
1559     $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1560     $this->f->isDatabaseError($res);
1561    
1562     if( $res->numrows() > 0 ) {
1563    
1564     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1565     $arrondissement = $row['arrondissement'];
1566     }
1567    
1568     return $arrondissement;
1569     }
1570    
1571     /*
1572     * Récupère l'évènement lié à un type de demande
1573     */
1574     function getEvenement($demande_type){
1575    
1576     $evenement = null;
1577    
1578     $sql =
1579     "SELECT
1580     evenement
1581     FROM
1582     ".DB_PREFIXE."demande_type
1583     WHERE
1584     demande_type = $demande_type";
1585    
1586     $res = $this->db->query($sql);
1587     $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1588     $this->f->isDatabaseError($res);
1589    
1590     if ( $res->numrows() > 0 ){
1591    
1592     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1593     $evenement = $row['evenement'];
1594     }
1595    
1596     return $evenement;
1597     }
1598    
1599    
1600    
1601     /**
1602     * Retourne le libellé du dossier d'autorisation
1603     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1604     * @return string Libellé dossier d'autorisation
1605     */
1606     function get_dossier_autorisation_libelle($dossier_autorisation) {
1607    
1608     $dossier_autorisation_libelle = "";
1609    
1610     // Requête SQL
1611     $sql = "SELECT
1612     dossier_autorisation_libelle
1613     FROM
1614     ".DB_PREFIXE."dossier_autorisation
1615     WHERE
1616     dossier_autorisation = '$dossier_autorisation'";
1617    
1618     $dossier_autorisation_libelle = $this->db->getOne($sql);
1619     $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1620     $this->f->isDatabaseError($dossier_autorisation_libelle);
1621    
1622     // Retourne le résultat
1623     return $dossier_autorisation_libelle;
1624     }
1625    
1626     /**
1627     * Retourne le libellé du dossier d'autorisation.
1628     * @param string $dossier Identifiant du dossier d'autorisation
1629     *
1630     * @return string Libellé dossier d'autorisation
1631     */
1632     function get_dossier_libelle($dossier) {
1633    
1634     $dossier_libelle = "";
1635    
1636     // Requête SQL
1637     $sql = "SELECT
1638     dossier_libelle
1639     FROM
1640     ".DB_PREFIXE."dossier
1641     WHERE
1642     dossier = '$dossier'";
1643    
1644     $dossier_libelle = $this->db->getOne($sql);
1645     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1646     $this->f->isDatabaseError($dossier_libelle);
1647    
1648     // Retourne le résultat
1649     return $dossier_libelle;
1650     }
1651    
1652     /**
1653     * Ajout des dossiers
1654     **/
1655 softime 6929 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
1656 mbroquet 3730
1657     include '../sql/pgsql/demande.form.inc.php';
1658    
1659     if($this->valF["demande_type"] != null) {
1660     $res = $db->query(
1661     str_replace(
1662     '<idx>',
1663     $this->valF['demande_type'],
1664     $sql_demande_type_details_by_id
1665     )
1666     );
1667     $this->f->addToLog(
1668     "triggerAjouter() : db->query(\"".
1669     str_replace(
1670     '<idx>',
1671     $this->valF['demande_type'],
1672     $sql_demande_type_details_by_id
1673     )."\")",
1674     VERBOSE_MODE
1675     );
1676     if ($this->f->isDatabaseError($res, true)) {
1677     return false;
1678     }
1679     // Attribut permettant de définir si un dossier a été créé
1680     $this->ajoutDI = false;
1681     $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
1682     // Création du dossier_autorisation
1683     if($this->valF['dossier_autorisation'] == "") {
1684 softime 6565 //
1685 mbroquet 3730 if($this->ajoutDossierAutorisation($id, $db, $val, $DEBUG) === false) {
1686     $this -> addToMessage(
1687     _("Erreur lors de l'enregistrement de la demande.")." ".
1688     _("Contactez votre administrateur.")
1689     );
1690     $this->correct = false;
1691     return false;
1692     }
1693 softime 6565 //
1694     $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
1695     if ($inst_da->is_dossier_autorisation_visible()) {
1696     $this -> addToMessage(
1697     _("Creation du dossier d'autorisation no").
1698     '<span id="new_da">'.
1699     $this->get_dossier_autorisation_libelle(
1700     $this->valF['dossier_autorisation']
1701     ).'</span>'
1702     );
1703     }
1704     // Ajout des données techniques au dossier d'autorisation
1705 mbroquet 3730 if($this->ajoutDonneesTechniquesDA($id, $db, $val, $DEBUG) === false) {
1706     $this -> addToMessage(
1707     _("Erreur lors de l'enregistrement de la demande.")." ".
1708     _("Contactez votre administrateur.")
1709     );
1710     $this->correct = false;
1711     return false;
1712     }
1713     } else {
1714     $sqlIdDTDA = "SELECT donnees_techniques
1715     FROM ".DB_PREFIXE."donnees_techniques
1716     WHERE dossier_autorisation='".
1717     $this->valF['dossier_autorisation']."'";
1718     $idDTDA = $this->db->getOne($sqlIdDTDA);
1719     $this->addToLog(
1720     "triggerAjouter(): db->getOne(\"".$sqlIdDTDA."\")",
1721     VERBOSE_MODE
1722     );
1723     if ($this->f->isDatabaseError($idDTDA, true)) {
1724     return false;
1725     }
1726    
1727     $this->DTDA = null;
1728     if ($idDTDA!=="" && is_numeric($idDTDA)){
1729 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
1730     "obj" => "donnees_techniques",
1731     "idx" => $idDTDA,
1732     ));
1733 mbroquet 3730 $this->DTDA->setValFFromVal();
1734     }
1735     }
1736     // Enregistrement du numéro dossier existant
1737     // (il sera écrasé si un DI est créé)
1738     if ($this->getParameter("idx_dossier") != "") {
1739     $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
1740     }
1741     // Création du dossier d'instruction
1742     if($dossier_type['dossier_instruction_type'] != null) {
1743     if($this->ajoutDossierInstruction(
1744     $id,
1745     $db,
1746     $val,
1747     $DEBUG,
1748     $dossier_type['dossier_instruction_type']
1749     ) === false ) {
1750     $this -> addToMessage(
1751     _("Erreur lors de l'enregistrement de la demande.")." ".
1752     _("Contactez votre administrateur.")
1753     );
1754     $this->correct = false;
1755     return false;
1756     }
1757     // Libellé du dossier
1758     $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
1759     // Message de validation
1760     $this -> addToMessage(
1761 softime 4631 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
1762 mbroquet 3730 );
1763 softime 4631
1764 mbroquet 3730 // Attribut permettant de définir si un dossier a été créé.
1765     $this->ajoutDI = true;
1766     }
1767    
1768 softime 6565 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
1769     $code_datd = $inst_datd->getVal('code');
1770    
1771     $obj = "dossier_instruction";
1772     if ($code_datd === 'REC' OR $code_datd === 'REG') {
1773     $obj = "dossier_contentieux_tous_recours";
1774     }
1775     if ($code_datd === 'IN') {
1776     $obj = "dossier_contentieux_toutes_infractions";
1777     }
1778    
1779 softime 4631 // Template du lien vers le DI
1780 softime 7996 $template_link_di = "<a id='link_demande_dossier_instruction' title=\"%s\" class='lien' href='".OM_ROUTE_FORM."&obj=" . $obj . "&action=3&idx=%s'><span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s</a>";
1781 softime 4631
1782     // Lien vers le DI
1783     $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
1784    
1785     // Message affiché à l'utilisateur
1786     $this->addToMessage($link_di."<br/>");
1787    
1788 mbroquet 3730 /*Ajout de l'arrondissement à partir du code postal*/
1789     if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
1790    
1791     $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
1792     }
1793     }
1794    
1795     //
1796     return true;
1797     }
1798    
1799     /**
1800 fmichon 4708 * TRIGGER - triggerajouterapres.
1801     *
1802     * - Ajout des délégataires et pétitionnaires
1803     * - ...
1804     * - Option de numérisation
1805     * - Interface avec le référentiel ERP [109]
1806     * - Interface avec le référentiel ERP [112]
1807     * - Interface avec le référentiel ERP [110]
1808     * - Interface avec le référentiel ERP [107]
1809     *
1810     * @return boolean
1811     */
1812 softime 6929 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
1813 mbroquet 3730
1814 softime 6391 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
1815 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
1816 softime 6391 // Instanciation du dossier d'instruction concerné par la demande en
1817     // cours d'ajout avant modification éventuelle par l'instruction
1818     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
1819     // Récupère l'état du dossier avant l'exécution d'une éventuelle action
1820     // associée à l'événement d'instruction : utile pour le message 112 vers
1821     // le référentiel ERP
1822     $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
1823     }
1824    
1825 fmichon 4708 /**
1826     *
1827     */
1828 mbroquet 3730 if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
1829     return false;
1830     }
1831    
1832     // Ajout des lliens entre dossier_autorisation et demandeur
1833     if(!empty($this->valF['dossier_autorisation'])) {
1834     if ($this->ajoutLiensDossierAutorisation($id, $db, $val, $DEBUG) == false) {
1835     return false;
1836     }
1837     }
1838 softime 6565 // Ajout des liens entre dossier et demandeur
1839 mbroquet 3730 if($this->ajoutDI === TRUE) {
1840     if ($this->ajoutLiensDossierInstruction($id, $db, $val, $DEBUG) == false) {
1841     return false;
1842     }
1843     }
1844 softime 6565
1845     // Création d'un lien entre le nouveau DI et le dossier contesté
1846     if ($this->valF["autorisation_contestee"] != "") {
1847     if ($this->ajoutLienDossierConteste() === false) {
1848     return false;
1849     }
1850     }
1851 mbroquet 3730
1852     // Duplication des lots (et leurs données techniques) et
1853     // liaison au nouveau dossier_d'instruction
1854     if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
1855     $this->lienLotDossierInstruction($id, $db, $val, $DEBUG);
1856     }
1857    
1858     /*Création du lien de téléchargement de récépissé de demande*/
1859     if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
1860     && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
1861    
1862     /*Récupérer l'événement lié à ce type de demande*/
1863     $evenement = $this->getEvenement($this->valF['demande_type']);
1864    
1865     /*Récupération de la lettre type de l'événement*/
1866     $lettretype = $this->f->getLettreType($evenement);
1867    
1868     /*Création d'une nouvelle instruction avec cet événement*/
1869     /*Données*/
1870     $valInstr['instruction']=NULL;
1871    
1872     $valInstr['destinataire']=$this->valF['dossier_instruction'];
1873     $valInstr['dossier']=$this->valF['dossier_instruction'];
1874     // Récupère la date de la demande
1875     $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
1876     $valInstr['evenement']=$evenement;
1877     $valInstr['lettretype']=$lettretype;
1878     $valInstr['complement_om_html']="";
1879     $valInstr['complement2_om_html']="";
1880    
1881     $valInstr['action']="initialisation";
1882     $valInstr['delai']="2";
1883     $valInstr['etat']="notifier";
1884     $valInstr['accord_tacite']="Oui";
1885     $valInstr['delai_notification']="1";
1886     $valInstr['archive_delai']="0";
1887     $valInstr['archive_date_complet']=NULL;
1888     $valInstr['archive_date_dernier_depot']=NULL;
1889     $valInstr['archive_date_rejet']=NULL;
1890     $valInstr['archive_date_limite']=NULL;
1891     $valInstr['archive_date_notification_delai']=NULL;
1892     $valInstr['archive_accord_tacite']="Non";
1893     $valInstr['archive_etat']="initialiser";
1894     $valInstr['archive_date_decision']=NULL;
1895     $valInstr['archive_avis']="";
1896     $valInstr['archive_date_validite']=NULL;
1897     $valInstr['archive_date_achevement']=NULL;
1898     $valInstr['archive_date_chantier']=NULL;
1899     $valInstr['archive_date_conformite']=NULL;
1900     $valInstr['archive_incompletude']=NULL;
1901     $valInstr['archive_incomplet_notifie']=NULL;
1902     $valInstr['archive_evenement_suivant_tacite']="";
1903     $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
1904     $valInstr['archive_etat_pendant_incompletude']=NULL;
1905     $valInstr['archive_date_limite_incompletude']=NULL;
1906     $valInstr['archive_delai_incompletude']=NULL;
1907     $valInstr['archive_autorite_competente']=NULL;
1908     $valInstr['complement3_om_html']="";
1909     $valInstr['complement4_om_html']="";
1910     $valInstr['complement5_om_html']="";
1911     $valInstr['complement6_om_html']="";
1912     $valInstr['complement7_om_html']="";
1913     $valInstr['complement8_om_html']="";
1914     $valInstr['complement9_om_html']="";
1915     $valInstr['complement10_om_html']="";
1916     $valInstr['complement11_om_html']="";
1917     $valInstr['complement12_om_html']="";
1918     $valInstr['complement13_om_html']="";
1919     $valInstr['complement14_om_html']="";
1920     $valInstr['complement15_om_html']="";
1921     $valInstr['avis_decision']=NULL;
1922     $valInstr['date_finalisation_courrier']=NULL;
1923     $valInstr['date_envoi_signature']=NULL;
1924     $valInstr['date_retour_signature']=NULL;
1925     $valInstr['date_envoi_rar']=NULL;
1926     $valInstr['date_retour_rar']=NULL;
1927     $valInstr['date_envoi_controle_legalite']=NULL;
1928     $valInstr['date_retour_controle_legalite']=NULL;
1929     $valInstr['signataire_arrete']=NULL;
1930     $valInstr['numero_arrete']=NULL;
1931     $valInstr['code_barres']=NULL;
1932     $valInstr['om_fichier_instruction']=NULL;
1933     $valInstr['om_final_instruction']=NULL;
1934     $valInstr['document_numerise']=NULL;
1935     $valInstr['autorite_competente']=NULL;
1936     $valInstr['duree_validite_parametrage']="0";
1937     $valInstr['duree_validite']="0";
1938 nmeucci 3873 $valInstr['date_depot']=NULL;
1939 mbroquet 3730 $valInstr['om_final_instruction_utilisateur']= "f";
1940     $valInstr['created_by_commune']= "f";
1941 softime 6565 $valInstr['archive_date_cloture_instruction'] = null;
1942     $valInstr['archive_date_premiere_visite'] = null;
1943     $valInstr['archive_date_derniere_visite'] = null;
1944     $valInstr['archive_date_contradictoire'] = null;
1945     $valInstr['archive_date_retour_contradictoire'] = null;
1946     $valInstr['archive_date_ait'] = null;
1947     $valInstr['archive_date_transmission_parquet'] = null;
1948 mbroquet 3730
1949     // Récupération des champs archive si cette demande a créée un dossier
1950     // d'instruction mais pas un P0
1951     if (!is_null($this->valF['dossier_instruction']) &&
1952     $this->valF['dossier_instruction'] !== "" ){
1953    
1954     // Requête
1955     $sql = "SELECT dossier_instruction_type.code
1956     FROM ".DB_PREFIXE."demande_type
1957     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1958     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1959     WHERE demande_type.demande_type = ".$this->valF['demande_type'];
1960     $res = $db->getOne($sql);
1961     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1962     if ($this->f->isDatabaseError($res, true)) {
1963     return false;
1964     }
1965    
1966     // On vérifie que ce n'est pas un P0
1967     if ( strcmp($res, "P") !== 0 ){
1968    
1969     $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
1970    
1971     if ($res == false) {
1972     return false;
1973     }
1974    
1975     if (isset($res['archive_delai'])) {
1976     $valInstr['archive_delai']=$res["archive_delai"];
1977     }
1978     if (isset($res['archive_date_complet'])) {
1979     $valInstr['archive_date_complet']=$res["archive_date_complet"];
1980     }
1981     if (isset($res['archive_date_dernier_depot'])) {
1982     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
1983     }
1984     if (isset($res['archive_date_rejet'])) {
1985     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
1986     }
1987     if (isset($res['archive_date_limite'])) {
1988     $valInstr['archive_date_limite']=$res["archive_date_limite"];
1989     }
1990     if (isset($res['archive_date_notification_delai'])) {
1991     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
1992     }
1993     if (isset($res['archive_accord_tacite'])) {
1994     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
1995     }
1996     if (isset($res['archive_etat'])) {
1997     $valInstr['archive_etat']=$res["archive_etat"];
1998     }
1999     if (isset($res['archive_date_decision'])) {
2000     $valInstr['archive_date_decision']=$res["archive_date_decision"];
2001     }
2002     if (isset($res['archive_avis'])) {
2003     $valInstr['archive_avis']=$res["archive_avis"];
2004     }
2005     if (isset($res['archive_date_validite'])) {
2006     $valInstr['archive_date_validite']=$res["archive_date_validite"];
2007     }
2008     if (isset($res['archive_date_achevement'])) {
2009     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2010     }
2011     if (isset($res['archive_date_chantier'])) {
2012     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2013     }
2014     if (isset($res['archive_date_conformite'])) {
2015     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2016     }
2017     if (isset($res['archive_incompletude'])) {
2018     $valInstr['archive_incompletude']=$res["archive_incompletude"];
2019     }
2020     if (isset($res['archive_incomplet_notifie'])) {
2021     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2022     }
2023     if (isset($res['archive_evenement_suivant_tacite'])) {
2024     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2025     }
2026     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2027     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2028     }
2029     if (isset($res['archive_etat_pendant_incompletude'])) {
2030     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2031     }
2032     if (isset($res['archive_date_limite_incompletude'])) {
2033     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2034     }
2035     if (isset($res['archive_delai_incompletude'])) {
2036     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2037     }
2038     if (isset($res['archive_autorite_competente'])) {
2039     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2040     }
2041 softime 6565 if (isset($res['archive_date_cloture_instruction'])) {
2042     $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2043     }
2044     if (isset($res['archive_date_premiere_visite'])) {
2045     $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2046     }
2047     if (isset($res['archive_date_derniere_visite'])) {
2048     $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2049     }
2050     if (isset($res['archive_date_contradictoire'])) {
2051     $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2052     }
2053     if (isset($res['archive_date_retour_contradictoire'])) {
2054     $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2055     }
2056     if (isset($res['archive_date_ait'])) {
2057     $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2058     }
2059     if (isset($res['archive_date_transmission_parquet'])) {
2060     $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2061     }
2062 mbroquet 3730 }
2063     }
2064    
2065     // Création d'un nouveau dossier
2066 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
2067     "obj" => "instruction",
2068     "idx" => "]",
2069     ));
2070 mbroquet 3730 $instruction->valF = "";
2071     if ($instruction->ajouter($valInstr, $db, $DEBUG) === false) {
2072 nmeucci 3876 // Suppression des messages valides puisque erreur
2073     $this->msg = '';
2074     $this -> addToMessage($instruction->msg);
2075 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2076     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2077     return false;
2078     }
2079    
2080     // Finalisation du document
2081     $_GET['obj']='instruction';
2082     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2083 softime 7996 $instruction_final = $this->f->get_inst__om_dbform(array(
2084     "obj" => "instruction",
2085     "idx" => $_GET['idx'],
2086     ));
2087    
2088     // Si l'instruction a une lettre type associée
2089     // ET si elle n'est pas déjà finalisée
2090     if($instruction_final->getVal('lettretype') != ""
2091     && $instruction_final->getVal('om_final_instruction') !== 't') {
2092 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
2093     $instruction_final->setParameter('maj',100);
2094     // On finalise l'événement d'instruction
2095     $res = $instruction_final->finalize();
2096 softime 5024 // Si échec cela ne stoppe pas la création du dossier
2097     // et l'utilisateur n'en est pas informé dans l'IHM
2098     // mais l'erreur est loguée
2099 mbroquet 3730 if ($res === false) {
2100     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2101     }
2102     }
2103    
2104     // Mise à jour de la demande
2105     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2106     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2107 softime 7996 $demande_instance = $this->f->get_inst__om_dbform(array(
2108     "obj" => "demande",
2109     "idx" => $this->valF['demande'],
2110     ));
2111 mbroquet 3730 if ($demande_instance->modifier($this->valF, $db, $DEBUG) === false) {
2112     $this -> addToMessage($demande_instance->msg);
2113     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2114     return false;
2115     }
2116    
2117 softime 6565 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2118    
2119 mbroquet 3730 // Si l'option d'accès au portail citoyen est activée
2120 softime 7366 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2121 softime 6565 AND $inst_da->is_dossier_autorisation_visible() === true) {
2122 mbroquet 3730 // Met à jour la clé d'accès au portail citoyen dans le dossier
2123     // d'autorisation
2124     $update = $inst_da->update_citizen_access_key();
2125     //
2126     if ($update !== true) {
2127     //
2128     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2129     return false;
2130     }
2131     }
2132    
2133    
2134 jymadier 4441 // Si l'instruction initiale a une lettre type liée
2135     if ($instruction->valF['lettretype'] !== ''
2136     && $instruction->valF['lettretype'] !== null) {
2137    
2138     // Affichage du récépissé de la demande
2139     $this -> addToMessage("<a
2140     class='lien' id='link_demande_recepisse'
2141     title=\""._("Telecharger le recepisse de la demande")."\"
2142 softime 7996 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
2143 jymadier 4441 $this->valF[$this->clePrimaire]."' target='_blank'>
2144     <span
2145     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2146     title=\""._("Telecharger le recepisse de la demande")."\">".
2147     _("Telecharger le recepisse de la demande").
2148     "</span>".
2149     _("Telecharger le recepisse de la demande")."
2150     </a><br/>");
2151     }
2152     }
2153    
2154 fmichon 4708 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2155     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2156    
2157     /**
2158     * Option de numérisation.
2159     */
2160     // Si l'option est activée
2161     if ($this->f->is_option_digitalization_folder_enabled() === true) {
2162 mbroquet 3730 // Création du répertoire de numérisation pour le dossier en
2163     // question.
2164     $ret = $inst_di->create_or_touch_digitalization_folder();
2165     // Si la création a échouée
2166     if ($ret !== true) {
2167     //
2168     $this->msg = "";
2169     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
2170     return false;
2171     }
2172     }
2173    
2174 fmichon 4708 /**
2175     * Interface avec le référentiel ERP.
2176     *
2177     * (WS->ERP)[109] Retrait de la demande -> AT
2178     * Déclencheur :
2179     * - L'option ERP est activée
2180     * - Le dossier est de type AT
2181     * - Le dossier est marqué comme "connecté au référentiel ERP"
2182     * - Le formulaire d'ajout de demande est validé avec un type de
2183     * demande correspondant à une demande de retrait
2184     */
2185 mbroquet 3730 //
2186 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2187 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2188     && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2189     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
2190     //
2191     $infos = array(
2192     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2193     );
2194     //
2195     $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
2196     if ($ret !== true) {
2197     $this->cleanMessage();
2198     $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
2199     return false;
2200     }
2201     $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
2202     }
2203    
2204     /**
2205     * Interface avec le référentiel ERP.
2206     *
2207     * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
2208     * Déclencheur :
2209     * - L'option ERP est activée
2210     * - Le dossier est de type AT
2211     * - Le dossier est marqué comme "connecté au référentiel ERP"
2212     * - Le formulaire d'ajout de demande est validé avec un type de
2213     * demande correspondant à un dépôt de pièces
2214     */
2215     //
2216 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2217 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2218     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2219     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
2220 softime 6391 // Définit le type de pièce par l'état du dossier
2221     $type_piece = "supplementaire";
2222     if ($etat_di_before_instr === 'incomplet') {
2223     $type_piece = "complementaire";
2224     }
2225 fmichon 4708 //
2226     $infos = array(
2227     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2228 softime 6391 "type_piece" => $type_piece,
2229 fmichon 4708 );
2230     //
2231     $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
2232     if ($ret !== true) {
2233     $this->cleanMessage();
2234     $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
2235     return false;
2236     }
2237     $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
2238     }
2239    
2240     /**
2241     * Interface avec le référentiel ERP.
2242     *
2243     * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
2244     * Déclencheur :
2245     * - L'option ERP est activée
2246     * - Le dossier est de type AT
2247     * - Le dossier est marqué comme "connecté au référentiel ERP"
2248     * - Le formulaire d'ajout de demande est validé avec un type de
2249     * demande correspondant à une demande de visite d'ouverture ERP
2250     */
2251     //
2252 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2253 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2254     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2255     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
2256     //
2257     $infos = array(
2258     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2259     );
2260     //
2261     $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
2262     if ($ret !== true) {
2263     $this->cleanMessage();
2264     $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
2265     return false;
2266     }
2267     $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
2268     }
2269    
2270     /**
2271     * Interface avec le référentiel ERP.
2272     *
2273     * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
2274     * Déclencheur :
2275     * - L'option ERP est activée
2276     * - Le dossier est de type PC
2277     * - Le dossier est marqué comme "connecté au référentiel ERP"
2278     * - Le formulaire d'ajout de demande est validé avec un type de
2279     * demande correspondant à une demande de visite d'ouverture ERP
2280     */
2281     //
2282 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2283 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2284     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2285     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
2286     //
2287     $infos = array(
2288     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2289     );
2290     //
2291     $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
2292     if ($ret !== true) {
2293     $this->cleanMessage();
2294     $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
2295     return false;
2296     }
2297     $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
2298     }
2299    
2300     //
2301 mbroquet 3730 return true;
2302     }
2303 fmichon 4708
2304     /**
2305     * Récupère l'état d'un dossier d'instruction
2306     * @param $idxDossier L'identifiant du dossier d'instruction
2307     * @return L'état du dossier d'instruction
2308     */
2309     function getEtatDossier($idxDossier){
2310    
2311     $etat = "";
2312    
2313     $sql = "SELECT etat.etat
2314     FROM ".DB_PREFIXE."etat
2315     LEFT JOIN
2316     ".DB_PREFIXE."dossier
2317     ON
2318     dossier.etat = etat.etat
2319     WHERE dossier.dossier = '".$idxDossier."'";
2320     $etat = $this->db->getOne($sql);
2321     $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2322     // Si une erreur survient on die
2323     if (database::isError($etat, true)) {
2324     // Appel de la methode de recuperation des erreurs
2325     $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
2326     }
2327    
2328     return $etat;
2329     }
2330    
2331 mbroquet 3730 /*Ajout du lien demande / demandeur(s)*/
2332 softime 6929 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2333 mbroquet 3730 $this->listeDemandeur("demande",$this->val[array_search('demande', $this->champs)]);
2334     if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
2335     return false;
2336     }
2337     $this->valIdDemandeur=$this->postedIdDemandeur;
2338    
2339     //
2340     return true;
2341     }
2342    
2343 softime 6565
2344 mbroquet 3730 /**
2345 softime 6565 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
2346     * dossier de recours.
2347     *
2348     * @return, [type] [description]
2349     */
2350     function ajoutLienDossierConteste() {
2351     // Création des liens entre le dossier instruction créé et le dossier
2352     // contesté
2353 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
2354     "obj" => "lien_dossier_dossier",
2355     "idx" => "]",
2356     ));
2357 softime 6565 // Préparation des valeurs à mettre en base
2358     $val['lien_dossier_dossier'] = "";
2359     $val['dossier_src'] = $this->valF['dossier_instruction'];
2360     $val['dossier_cible'] = $this->valF["autorisation_contestee"];
2361     $val['type_lien'] = 'auto_recours';
2362    
2363     return $ldd->ajouter($val, $this->f->db, NULL);
2364     }
2365    
2366    
2367     /**
2368 mbroquet 3730 * Gestion des liens entre les lots du DA et le nouveau dossier
2369     **/
2370     function lienLotDossierInstruction($id, $db, $val, $DEBUG) {
2371 softime 7996 $lot = $this->f->get_inst__om_dbform(array(
2372     "obj" => "lot",
2373     "idx" => "]",
2374     ));
2375     $lld = $this->f->get_inst__om_dbform(array(
2376     "obj" => "lien_lot_demandeur",
2377     "idx" => "]",
2378     ));
2379 mbroquet 3730
2380    
2381     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
2382     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
2383     $resLot = $db -> query($sqlLots);
2384     $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
2385     $this->f->isDatabaseError($resLot);
2386     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
2387     // Insertion du nouveau lot
2388     $valLot['lot'] = "";
2389     $valLot['libelle'] = $rowLot['libelle'];
2390     $valLot['dossier_autorisation'] = null;
2391     $valLot['dossier'] = $this->valF['dossier_instruction'];
2392     $lot -> ajouter($valLot, $db, $DEBUG);
2393    
2394     //Insertion des liens entre dossier et les lots
2395     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
2396     WHERE lot = ".$rowLot['lot'];
2397     $res = $db -> query($sqlDemandeurs);
2398     $this->f->addToLog(
2399     "lienLotDossierInstruction() : db->query(\"".$sqlDemandeurs."\");",
2400     VERBOSE_MODE
2401     );
2402     if ($this->f->isDatabaseError($res, true)) {
2403     return false;
2404     }
2405    
2406     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2407     $valLld["lien_lot_demandeur"] = "";
2408     $valLld["lot"]=$lot->valF['lot'];
2409     $valLld["demandeur"] = $row['demandeur'];
2410     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
2411     if ($lld->ajouter($valLld, $db, $DEBUG) === false) {
2412     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
2413     return false;
2414     }
2415     }
2416    
2417     // Récupération des données techniques du nouveau lots
2418     if($this->ajoutDonneesTechniquesLots(
2419     $id,
2420     $db,
2421     $val,
2422     $DEBUG,
2423     $rowLot['lot'],
2424     $lot->valF['lot']) === false) {
2425     $this -> addToMessage(
2426     _("Erreur lors de l'enregistrement de la demande.")." ".
2427     _("Contactez votre administrateur.")
2428     );
2429     $this->correct = false;
2430     $this->f->addToLog(
2431     "lienLotDossierInstruction() : ERROR ajoutDonneesTechniquesLots",
2432     DEBUG_MODE
2433     );
2434     return false;
2435     }
2436    
2437     }
2438    
2439     //
2440     return true;
2441     }
2442    
2443    
2444     /**
2445     * Méthode permettant d'ajouter les données techniques d'un lot.
2446     *
2447     * @param integer $id identifiant de la demande
2448     * @param database &$db handler de la base de donnée
2449     * @param array $val tableau de valeurs postées via le formulaire
2450     * @param boolean $DEBUG debug
2451     * @param integer $lotInit identifiant de lot initial
2452     * @param integer $lotDest identifiant du lot qui va recevoir les données
2453     *
2454     * @return boolean false si erreur
2455     */
2456     function ajoutDonneesTechniquesLots($id, &$db, $val, $DEBUG, $lotInit, $lotDest) {
2457     // Requete permettant de recupérer les données techniques du lot passé
2458     // en paramètre ($lotInit)
2459     $sql_get_dt = "
2460     SELECT donnees_techniques
2461     FROM ".DB_PREFIXE."donnees_techniques
2462     WHERE lot=".$lotInit;
2463     $id_dt = $this->f->db->getOne($sql_get_dt);
2464     // Si des données techniques sont liées au lots on les "copie" et
2465     // on les lies au lot passé en paramètre (lotDest)
2466     if(isset($id_dt) and !empty($id_dt)) {
2467     $this->f->addToLog(
2468     "ajoutDonneesTechniquesLots() : db->getone(\"".$sql_get_dt."\");",
2469     VERBOSE_MODE
2470     );
2471     if ($this->f->isDatabaseError($id_dt, true)){
2472     $this->f->addToLog(
2473     "ajoutDonneesTechniquesLots() : ERROR",
2474     DEBUG_MODE
2475     );
2476     return false;
2477     }
2478 softime 7996 $donnees_techniques = $this->f->get_inst__om_dbform(array(
2479     "obj" => "donnees_techniques",
2480     "idx" => $id_dt,
2481     ));
2482 mbroquet 3730
2483     // Récupération des données dans le tableau des valeurs à insérer
2484     foreach($donnees_techniques->champs as $value) {
2485     $val[$value] = $donnees_techniques->getVal($value);
2486     }
2487     // Modification du lien vers le nouveau lot
2488     $val["lot"] = $lotDest;
2489     // Identifiant du cerfa
2490     $val['cerfa'] = $this->getIdCerfa();
2491     // Ajout des données techniques
2492     if($donnees_techniques->ajouter($val, $db, $DEBUG) === false) {
2493     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
2494     return false;
2495     }
2496     }
2497    
2498     //
2499     return true;
2500     }
2501    
2502     /**
2503     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2504     **/
2505     function insertLinkDemandeDemandeur($db, $DEBUG) {
2506    
2507     //
2508 softime 6565 $types_demandeur = array(
2509     "petitionnaire_principal",
2510     "delegataire",
2511     "petitionnaire",
2512     "plaignant_principal",
2513     "plaignant",
2514     "contrevenant_principal",
2515     "contrevenant",
2516     "requerant_principal",
2517     "requerant",
2518     "avocat_principal",
2519     "avocat",
2520 softime 7067 "bailleur_principal",
2521     "bailleur",
2522 softime 6565 );
2523     foreach ($types_demandeur as $type) {
2524     // Comparaison des autres demandeurs
2525     if(isset($this->postedIdDemandeur[$type]) === true) {
2526     // Suppression des liens non valides
2527     foreach ($this->valIdDemandeur[$type] as $demandeur) {
2528     // Demandeur
2529     if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
2530     if ($this->deleteLinkDemandeDemandeur($demandeur, $db, $DEBUG) == false) {
2531     //
2532     return false;
2533     }
2534 mbroquet 3730 }
2535 softime 6565
2536 mbroquet 3730 }
2537 softime 6565 // Ajout des nouveaux liens
2538     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
2539     if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
2540     $principal = false;
2541     if(strpos($type, '_principal') !== false) {
2542     $principal = true;
2543     }
2544     if ($this->addLinkDemandeDemandeur($demandeur, $principal, $db, $DEBUG) == false) {
2545     //
2546     return false;
2547     }
2548 mbroquet 3730 }
2549     }
2550     }
2551     }
2552    
2553     //
2554     return true;
2555     }
2556    
2557    
2558     /**
2559     * Fonction permettant d'ajouter un lien
2560     * entre la table demande et demandeur
2561     **/
2562     function addLinkDemandeDemandeur($id, $principal, $db, $DEBUG) {
2563 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
2564     "obj" => "lien_demande_demandeur",
2565     "idx" => "]",
2566     ));
2567 mbroquet 3730 $lien = array('lien_demande_demandeur' => "",
2568     'petitionnaire_principal' => (($principal)?"t":"f"),
2569     'demande' => $this->valF['demande'],
2570     'demandeur' => $id);
2571     if ($lienAjout->ajouter($lien, $db, $DEBUG) === false) {
2572     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
2573     return false;
2574     }
2575    
2576     //
2577     return true;
2578     }
2579    
2580     /**
2581     * Fonction permettant de supprimer un lien
2582     * entre la table demande et demandeur
2583     **/
2584     function deleteLinkDemandeDemandeur($id, $db, $DEBUG) {
2585     // Suppression
2586     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
2587     "WHERE demande=".$this->valF['demande'].
2588     " AND demandeur=".$id;
2589     // Execution de la requete de suppression de l'objet
2590     $res = $db->query($sql);
2591     // Logger
2592     $this->f->addToLog("deleteLinkDemandeDemandeur(): db->query(\"".$sql."\");", VERBOSE_MODE);
2593     if ($this->f->isDatabaseError($res, true)){
2594     return false;
2595     }
2596    
2597     //
2598     return true;
2599     }
2600    
2601     /*
2602     * Teste si le lien entre une demande et un demandeur existe
2603     * */
2604     function isLinkDemandeDemandeurExist($idDemandeur) {
2605     $sql = "SELECT count(*)
2606     FROM ".DB_PREFIXE."lien_demande_demandeur
2607     WHERE demande = ".$this->valF['demande'].
2608     "AND demandeur = ".$idDemandeur;
2609     $count = $this->f->db->getOne($sql);
2610     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\");", VERBOSE_MODE);
2611     $this->f->isDatabaseError($count);
2612     if ($count === 0) {
2613     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
2614     return false;
2615     } else {
2616     return true;
2617     }
2618    
2619     }
2620    
2621     /**
2622     * Methode de recupération des valeurs postées
2623     **/
2624     function getPostedValues() {
2625     // Récupération des demandeurs dans POST
2626 softime 6565 $types_demandeur = array(
2627     "petitionnaire_principal",
2628     "delegataire",
2629     "petitionnaire",
2630     "plaignant_principal",
2631     "plaignant",
2632     "contrevenant_principal",
2633     "contrevenant",
2634     "requerant_principal",
2635     "requerant",
2636     "avocat_principal",
2637     "avocat",
2638 softime 7067 "bailleur_principal",
2639     "bailleur",
2640 softime 6565 );
2641     foreach ($types_demandeur as $type) {
2642     if($this->f->get_submitted_post_value($type) !== null AND
2643     $this->f->get_submitted_post_value($type) != '') {
2644     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
2645 mbroquet 3730 }
2646     }
2647     }
2648    
2649     /**
2650     * Méthode permettant de récupérer les id des demandeurs liés à la table
2651     * liée passée en paramètre
2652     *
2653     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2654     * @param string $id Identifiant (clé primaire de la table liée en question)
2655     */
2656     function listeDemandeur($from, $id) {
2657     // Récupération des demandeurs de la base
2658     $sql = "SELECT demandeur.demandeur,
2659     demandeur.type_demandeur,
2660     lien_".$from."_demandeur.petitionnaire_principal
2661     FROM ".DB_PREFIXE."lien_".$from."_demandeur
2662     INNER JOIN ".DB_PREFIXE."demandeur
2663     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2664     WHERE ".$from." = '".$id."'";
2665     $res = $this->f->db->query($sql);
2666     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2667     $this->f->isDatabaseError($res);
2668     // Stockage du résultat dans un tableau
2669     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2670 softime 6565 $demandeur_type = $row['type_demandeur'];
2671     if ($row['petitionnaire_principal'] == 't'){
2672     $demandeur_type .= "_principal";
2673 mbroquet 3730 }
2674 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
2675 mbroquet 3730 }
2676     }
2677    
2678    
2679     /**
2680     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
2681     * d'instruction existant
2682     */
2683     function retour($premier = 0, $recherche = "", $tricol = "") {
2684    
2685     echo "\n<a class=\"retour\" ";
2686     echo "href=\"";
2687     //
2688     if($this->getParameter("idx_dossier") != "") {
2689 softime 7996 echo OM_ROUTE_TAB;
2690     echo "&obj=recherche_dossier";
2691 mbroquet 3730
2692     } else {
2693     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2694 softime 7996 echo OM_ROUTE_FORM;
2695 mbroquet 3730 } else {
2696 softime 7996 echo OM_ROUTE_TAB;
2697 mbroquet 3730 }
2698 softime 7996 echo "&obj=".$this->get_absolute_class_name();
2699 mbroquet 3730 if($this->getParameter("retour")=="form") {
2700     echo "&amp;idx=".$this->getParameter("idx");
2701     echo "&amp;action=3";
2702     }
2703     }
2704     echo "&amp;premier=".$this->getParameter("premier");
2705     echo "&amp;tricol=".$this->getParameter("tricol");
2706     echo "&amp;advs_id=".$this->getParameter("advs_id");
2707     echo "&amp;valide=".$this->getParameter("valide");
2708     //
2709     echo "\"";
2710     echo ">";
2711     //
2712     echo _("Retour");
2713     //
2714     echo "</a>\n";
2715    
2716     }
2717    
2718    
2719     /**
2720     * Cette méthode permet d'afficher des informations spécifiques dans le
2721     * formulaire de l'objet
2722     *
2723     * @param integer $maj Mode de mise à jour
2724     */
2725     function formSpecificContent($maj) {
2726 softime 6565 // Tableau des demandeurs selon le contexte
2727     $listeDemandeur = $this->valIdDemandeur;
2728 mbroquet 3730 /**
2729     * Gestion du bloc des demandeurs
2730     */
2731     // Si le mode est (modification ou suppression ou consultation) ET que
2732     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
2733     // actif)
2734 softime 6565 if ($this->correct !== true AND
2735 softime 7996 $this->getParameter('validation') == 0 AND
2736     $this->getParameter("maj") != 0) {
2737 mbroquet 3730 // Alors on récupère les demandeurs dans la table lien pour
2738 softime 6565 // affectation des résultats dans $this->valIdDemandeur
2739 mbroquet 3730 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
2740 softime 6565 $listeDemandeur = $this->valIdDemandeur;
2741 mbroquet 3730 }
2742    
2743 softime 6565 // Récupération des valeurs postées
2744 softime 7996 if ($this->getParameter('validation') != 0) {
2745 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
2746     }
2747    
2748 mbroquet 3730 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2749     // correct (c'est-à-dire que le formulaire est actif)
2750 softime 6565 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2751 mbroquet 3730 // Alors on positionne le marqueur linkable a true qui permet
2752     // d'afficher ou non les actions de gestion des demandeurs
2753     $linkable = true;
2754     } else {
2755     // Sinon on positionne le marqueur linkable a false qui permet
2756     // d'afficher ou non les actions de gestion des demandeurs
2757     $linkable = false;
2758     }
2759    
2760     // Affichage des demandeurs et des actions
2761     // Conteneur de la listes des demandeurs
2762     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
2763     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
2764     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
2765 softime 6565 ._("Demandeurs")."</legend>";
2766    
2767 mbroquet 3730 // Affichage du bloc pétitionnaire principal / délégataire
2768     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2769     echo "<div id=\"petitionnaire_principal_delegataire\">";
2770 softime 6565 // Affichage de la synthèse du pétitionnaire principal
2771     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
2772 mbroquet 3730 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2773     echo "<div id=\"delegataire\">";
2774 softime 6565 // Affichage de la synthèse du délégataire
2775     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
2776 mbroquet 3730 echo "</div>";
2777     echo "<div class=\"both\"></div>";
2778     echo "</div>";
2779     // Bloc des pétitionnaires secondaires
2780     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2781     echo "<div id=\"listePetitionnaires\">";
2782 softime 6565 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
2783 mbroquet 3730 echo "</div>";
2784 softime 7067
2785     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
2786     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2787     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
2788     // Doit être utilisé avec la div petitionnaire_principal_delegataire
2789     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
2790     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2791     echo "<div id=\"bailleur_principal\">";
2792     // Affichage de la synthèse
2793     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
2794     echo "</div>";
2795     echo "<div id=\"listeAutresBailleurs\">";
2796     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
2797     echo "</div>";
2798     echo "</div>";
2799     echo "</div>";
2800 softime 6565
2801     echo "<div id=\"plaignant_contrevenant\">";
2802     // Affichage du bloc contrevenant
2803     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2804     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
2805     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2806     echo "<div id=\"contrevenant_principal\">";
2807     // Affichage de la synthèse
2808     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
2809     echo "</div>";
2810     echo "<div id=\"listeAutresContrevenants\">";
2811     // Affichage de la synthèse
2812     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
2813     echo "</div>";
2814     echo "</div>";
2815     // Affichage du bloc plaignant
2816     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2817     echo "<div id=\"listePlaignants\" class=\"col_12\">";
2818     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2819     echo "<div id=\"plaignant_principal\">";
2820     // Affichage de la synthèse
2821     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
2822     echo "</div>";
2823     echo "<div id=\"listeAutresPlaignants\">";
2824     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
2825     echo "</div>";
2826     echo "</div>";
2827     echo "</div>";
2828     echo "<div id=\"requerant_avocat\">";
2829     // Affichage du bloc requérant
2830     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2831     echo "<div id=\"listeRequerants\" class=\"col_12\">";
2832     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2833     echo "<div id=\"requerant_principal\">";
2834     // Affichage de la synthèse
2835     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
2836     echo "</div>";
2837     echo "<div id=\"listeAutresRequerants\">";
2838     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
2839     echo "</div>";
2840     echo "</div>";
2841     // Affichage du bloc avocat
2842     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2843     echo "<div id=\"listeAvocat\" class=\"col_12\">";
2844     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2845     echo "<div id=\"avocat_principal\">";
2846     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
2847     echo "</div>";
2848     echo "<div id=\"listeAutresAvocats\">";
2849     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
2850     echo "</div>";
2851     echo "</div>";
2852     echo "</div>";
2853 mbroquet 3730 echo "</fieldset>";
2854     // Champ flag permettant de récupérer la valeur de l'option sig pour
2855     // l'utiliser en javascript, notamment lors du chargement de l'interface
2856     // pour les références cadastrales
2857     // XXX Si un widget pour les références cadastrales existait, il n'y
2858     // aurait pas besoin de faire cela
2859     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
2860     echo "</div>";
2861     }
2862 softime 6565
2863     function displaySyntheseDemandeur($listeDemandeur, $type) {
2864     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2865     // correct (c'est-à-dire que le formulaire est actif)
2866 softime 7366 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2867 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
2868     // d'afficher ou non les actions de gestion des demandeurs
2869     $linkable = true;
2870     } else {
2871     // Sinon on positionne le marqueur linkable a false qui permet
2872     // d'afficher ou non les actions de gestion des demandeurs
2873     $linkable = false;
2874     }
2875     // Récupération du type de demandeur pour l'affichage
2876     switch ($type) {
2877     case 'petitionnaire_principal':
2878     $legend = _("Petitionnaire principal");
2879     break;
2880 mbroquet 3730
2881 softime 6565 case 'delegataire':
2882     $legend = _("Autre correspondant");
2883     break;
2884    
2885     case 'petitionnaire':
2886     $legend = _("Petitionnaire");
2887     break;
2888    
2889     case 'contrevenant_principal':
2890     $legend = _("Contrevenant principal");
2891     break;
2892    
2893     case 'contrevenant':
2894     $legend = _("Autre contrevenant");
2895     break;
2896    
2897     case 'plaignant_principal':
2898     $legend = _("Plaignant principal");
2899     break;
2900    
2901     case 'plaignant':
2902     $legend = _("Autre plaignant");
2903     break;
2904    
2905     case 'requerant_principal':
2906     $legend = _("Requérant principal");
2907     break;
2908    
2909     case 'requerant':
2910     $legend = _("Autre requérant");
2911     break;
2912    
2913     case 'avocat_principal':
2914     $legend = _("Avocat principal");
2915     break;
2916    
2917     case 'avocat':
2918     $legend = _("Autre avocat");
2919     break;
2920 softime 7067
2921     case 'bailleur_principal':
2922     $legend = _("Bailleur principal");
2923     break;
2924    
2925     case 'bailleur':
2926     $legend = _("Autre bailleur");
2927     break;
2928 softime 6565 }
2929     foreach ($listeDemandeur[$type] as $demandeur_id) {
2930     $obj = str_replace('_principal', '', $type);
2931 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
2932     "obj" => $obj,
2933     "idx" => $demandeur_id,
2934     ));
2935 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
2936     $demandeur -> __destruct();
2937     }
2938     // Si en édition de formulaire
2939     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2940     // Bouton d'ajout du avocat
2941     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2942     echo "<span id=\"add_".$type."\"
2943     class=\"om-form-button add-16\">".
2944     $legend.
2945     "</span>";
2946     }
2947     }
2948    
2949 mbroquet 3730 // {{{
2950    
2951     // getter
2952     function getValIdDemandeur() {
2953     return $this->valIdDemandeur;
2954     }
2955     // setter
2956     function setValIdDemandeur($valIdDemandeur) {
2957     $this->valIdDemandeur = $valIdDemandeur;
2958     }
2959    
2960     //Supression du lien entre la demandeur et le(s) demandeur(s)
2961 softime 6929 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2962 mbroquet 3730
2963     //Création de la requête
2964     $sql = "DELETE FROM
2965     ".DB_PREFIXE."lien_demande_demandeur
2966     WHERE
2967     demande = $id";
2968    
2969     $res = $this->f->db->query($sql);
2970     $this->f->addToLog("triggerSupprimer() : db->query(\"".$sql."\")");
2971     if ($this->f->isDatabaseError($res, true)) {
2972     return false;
2973     }
2974    
2975     //
2976     return true;
2977     }
2978    
2979     // }}}
2980    
2981     /**
2982     * Récupère le champ "qualification" du type de la demande
2983     * @param integer $demande_type Identifiant du type de la demande
2984     * @return boolean
2985     */
2986     function get_qualification($demande_type) {
2987    
2988     // Initialise le résultat
2989     $qualification = "";
2990    
2991     // Si la condition existe
2992     if (is_numeric($demande_type)) {
2993    
2994     // Requête SQL
2995     $sql = "SELECT qualification
2996     FROM ".DB_PREFIXE."demande_type
2997     WHERE demande_type = $demande_type";
2998     $qualification = $this->db->getOne($sql);
2999     $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
3000     VERBOSE_MODE);
3001     $this->f->isDatabaseError($qualification);
3002     }
3003    
3004     // Retourne le résultat
3005     return $qualification;
3006     }
3007    
3008     /**
3009     * Récupère les champs archive_* d'une instruction
3010     * @param string $dossier L'identifiant du dossier d'instruction
3011     */
3012     public function getArchiveInstruction($dossierID){
3013    
3014     //On récupère les données du dernier DI accordé
3015     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3016     dossier.avis_decision,
3017     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
3018 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
3019 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3020     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3021     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3022     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3023     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3024     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3025     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3026     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3027     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3028     dossier.incompletude,
3029     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3030     dossier.etat_pendant_incompletude,
3031     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3032     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3033 softime 6565 ,dossier.dossier, dossier.incomplet_notifie,
3034     to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3035     to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3036     to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3037     to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3038     to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3039     to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3040     to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet
3041 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3042     LEFT JOIN ".DB_PREFIXE."avis_decision
3043     ON dossier.avis_decision = avis_decision.avis_decision
3044     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3045     AND dossier.dossier_autorisation = (
3046     SELECT dossier_autorisation.dossier_autorisation
3047     FROM ".DB_PREFIXE."dossier_autorisation
3048     LEFT JOIN ".DB_PREFIXE."dossier
3049     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3050     WHERE dossier = '".$dossierID."')
3051     ORDER BY dossier.version DESC";
3052    
3053     $res = $this->db->query($sql);
3054     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3055     if ($this->f->isDatabaseError($res, true)) {
3056     return false;
3057     }
3058    
3059     //Un des dosssiers d'instruction a été accordé, on récupère ses données
3060     if ( $res->numrows() != 0 ){
3061    
3062     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3063 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3064     "obj" => "instruction",
3065     "idx" => "]",
3066     ));
3067 mbroquet 3730
3068     $instruction->setParameter("maj", 1);
3069     $instruction->updateArchiveData($row);
3070     return $instruction->valF;
3071     }
3072     //Sinon, on prend les données du P0, si ce n'est pas un P0
3073     else {
3074     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3075     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3076     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3077     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3078     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3079     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3080     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3081     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3082 softime 6565 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot,
3083     dossier.date_cloture_instruction, dossier.date_premiere_visite,
3084     dossier.date_derniere_visite, dossier.date_contradictoire,
3085     dossier.date_retour_contradictoire, dossier.date_ait,
3086     dossier.date_transmission_parquet
3087 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3088     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3089     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3090     WHERE dossier.dossier_autorisation = (
3091     SELECT dossier_autorisation.dossier_autorisation
3092     FROM ".DB_PREFIXE."dossier_autorisation
3093     LEFT JOIN ".DB_PREFIXE."dossier
3094     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3095     WHERE dossier = '".$dossierID."')
3096     AND dossier_instruction_type.code = 'P'
3097     ORDER BY dossier.version DESC";
3098     $res = $this->db->query($sql);
3099     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3100     if ($this->f->isDatabaseError($res, true)) {
3101     return false;
3102     }
3103    
3104     //On est pas dans le cas d'un dépôt d'un P0
3105     if ( $res->numrows() != 0 ){
3106     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3107 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3108     "obj" => "instruction",
3109     "idx" => "]",
3110     ));
3111 mbroquet 3730 $instruction->setParameter("maj", 1);
3112     $instruction->updateArchiveData($row);
3113     return $instruction->valF;
3114     }
3115     }
3116     }
3117    
3118     /**
3119     * Cette methode permet d'afficher le bouton de validation du formulaire
3120     *
3121     * @param integer $maj Mode de mise a jour
3122     * @return void
3123     */
3124     function bouton($maj) {
3125    
3126     if (!$this->correct
3127     && $this->checkActionAvailability() == true) {
3128     //
3129     switch($maj) {
3130     case 0 :
3131     $bouton = _("Ajouter");
3132     break;
3133     case 1 :
3134     $bouton = _("Modifier");
3135     break;
3136     case 2 :
3137     $bouton = _("Supprimer");
3138     break;
3139     default :
3140     // Actions specifiques
3141     if ($this->get_action_param($maj, "button") != null) {
3142     //
3143     $bouton = $this->get_action_param($maj, "button");
3144     } else {
3145     //
3146     $bouton = _("Valider");
3147     }
3148     break;
3149     }
3150     //
3151     $params = array(
3152     "value" => $bouton,
3153     "name" => "submit",
3154     "onclick"=>"return getDataFieldReferenceCadastrale();",
3155     );
3156     //
3157     $this->f->layout->display_form_button($params);
3158     }
3159    
3160     }
3161    
3162     /**
3163     * Récupère l'instance de la classe taxe_amenagement.
3164     *
3165     * @param integer $om_collectivite La collectivité
3166     *
3167     * @return object
3168     */
3169     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
3170     //
3171 softime 6929 if ($this->inst_taxe_amenagement === null) {
3172 mbroquet 3730 //
3173     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
3174 softime 6929
3175     // Si aucun paramétrage de taxe trouvé et que la collectivité
3176     // est mono
3177     if ($taxe_amenagement === null
3178     && $this->f->isCollectiviteMono($om_collectivite) === true) {
3179     // Récupère la collectivité multi
3180     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
3181     //
3182     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
3183     }
3184    
3185 mbroquet 3730 //
3186 softime 6929 if ($taxe_amenagement === null) {
3187     //
3188     return null;
3189     }
3190    
3191     //
3192 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
3193     "obj" => "taxe_amenagement",
3194     "idx" => $taxe_amenagement,
3195     ));
3196 mbroquet 3730 }
3197     //
3198     return $this->inst_taxe_amenagement;
3199     }
3200    
3201     /**
3202     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3203     *
3204     * @param integer $om_collectivite La collectivité
3205     *
3206     * @return integer
3207     */
3208     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3209     //
3210 softime 6929 $taxe_amenagement = null;
3211 mbroquet 3730
3212 softime 6929 // Si la collectivité n'est pas renseigné
3213     if ($om_collectivite !== '' && $om_collectivite !== null) {
3214    
3215     // SQL
3216     $sql = "SELECT taxe_amenagement
3217     FROM ".DB_PREFIXE."taxe_amenagement
3218     WHERE om_collectivite = ".intval($om_collectivite);
3219     $taxe_amenagement = $this->f->db->getOne($sql);
3220     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3221     $this->f->isDatabaseError($taxe_amenagement);
3222     }
3223    
3224 mbroquet 3730 //
3225 softime 6929 return $taxe_amenagement;
3226 mbroquet 3730 }
3227    
3228    
3229     /**
3230 softime 6929 * Récupère l'instance du cerfa par le type détaillé du DA.
3231     *
3232     * @param integer $datd Identifiant du type détaillé du DA.
3233     *
3234     * @return object
3235     */
3236     protected function get_inst_cerfa_by_datd($datd = null) {
3237     //
3238     if ($this->inst_cerfa === null) {
3239     //
3240     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
3241     //
3242     $cerfa = $inst_datd->getVal('cerfa');
3243     //
3244     if ($cerfa !== '' && $cerfa !== null) {
3245     //
3246 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
3247     "obj" => "cerfa",
3248     "idx" => $cerfa,
3249     ));
3250 softime 6929 }
3251     }
3252    
3253     //
3254     return $this->inst_cerfa;
3255     }
3256    
3257    
3258     /**
3259 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
3260     *
3261     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3262     *
3263     * @return object
3264     */
3265 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3266 mbroquet 3730 //
3267     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3268     }
3269    
3270 nhaye 5254 }
3271 mbroquet 3730
3272 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26