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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 6929 - (hide annotations)
Thu Jun 15 16:57:15 2017 UTC (7 years, 7 months ago) by softime
File size: 139193 byte(s)
* Merge de la 4.2.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26