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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26