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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7685 - (hide annotations)
Thu Jan 11 15:26:41 2018 UTC (7 years ago) by softime
File size: 141786 byte(s)
* Merge de la version 4.6.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 softime 7685 // cas où le type de voie n'est pas fourni par le SIG
709     if ($adresse_ws["adresse"]['nom_voie'] !== '') {
710 mbroquet 3730 $response['return_addr']['nom_voie'] = substr(
711 softime 7685 $adresse_ws["adresse"]['nom_voie'],
712     0,
713     30
714     );
715     }
716     // cas où le type de voie est fourni
717     if (isset($adresse_ws["adresse"]['type_voie'])
718     AND $adresse_ws["adresse"]['type_voie'] !== ''
719     AND $adresse_ws["adresse"]['nom_voie'] !== '') {
720     $response['return_addr']['nom_voie'] = substr(
721 mbroquet 3730 $adresse_ws["adresse"]['type_voie']." ".$adresse_ws["adresse"]['nom_voie'],
722     0,
723     30
724     );
725     }
726     //
727     printf(json_encode($response));
728     return;
729     }
730    
731    
732 softime 6929 function setValF($val = array()) {
733 mbroquet 3730 parent::setValF($val);
734     // Récupération des id demandeurs postés
735     $this->getPostedValues();
736     //$this->valIdDemandeur=$this->postedIdDemandeur;
737 softime 6565
738     // On retraite le texte saisie pour jointure en BDD.
739     // Traitement identique à celui effectué en JavaScript
740     // dans la fonction lookingForAutorisationContestee().
741     if ($this->valF['autorisation_contestee'] !== NULL) {
742     $val = trim($this->valF['autorisation_contestee']);
743     $this->valF['autorisation_contestee'] = preg_replace(
744     '/\s+/',
745     '',
746     $val
747     );
748     }
749    
750 mbroquet 3730 }
751    
752    
753     /**
754     * Méthode permettant de récupérer les valeurs du dossier d'autorisation
755     * correspondant à la nouvelle demande
756     */
757     function getValFromDossier($dossier_autorisation) {
758     include "../sql/pgsql/demande.form.inc.php";
759     $sql=str_replace("<idx>",$this->getParameter("idx_dossier"),
760     $sql_infos_dossier);
761     $res = $this->db->query($sql);
762     $this->f->addToLog("getValFromDossier(): db->query(\"".$sql."\")", VERBOSE_MODE);
763     $this->f->isDatabaseError($res);
764     $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
765     return $row;
766     }
767    
768     /*
769     * La date du jour par défaut dans le champs date_demande
770     * Put the date of the day by default into the field date_demande
771     */
772 softime 6929 function setVal(&$form, $maj, $validation, &$db = null, $DEBUG = null) {
773     parent::setVal($form, $maj, $validation, $db, $DEBUG);
774 mbroquet 3730 if($maj == 0) {
775    
776     // Définition de la date de dépôt par défaut
777     if($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
778     $form->setVal("date_demande", date('d/m/Y'));
779     }
780    
781     // Récupération des valeurs du dossier d'autorisation correspondant
782     if($this->getParameter("idx_dossier") != "") {
783     $val_autorisation = $this->getValFromDossier(
784     $this->getParameter("idx_dossier"));
785     foreach($val_autorisation as $champ => $value) {
786     $form->setVal($champ,$value);
787     }
788     }
789     }
790     }
791     function getDataSubmit() {
792    
793     $datasubmit = parent::getDataSubmit();
794     if($this->getParameter("idx_dossier") != "") {
795     $datasubmit .= "&idx_dossier=".$this->getParameter("idx_dossier");
796     }
797     return $datasubmit;
798     }
799    
800     /**
801 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
802 softime 6565 *
803     * @return, string Type de formulaire.
804     */
805     function get_type_affichage_formulaire() {
806    
807     $sql = "SELECT dossier_autorisation_type.affichage_form
808     FROM ".DB_PREFIXE."demande_type
809     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
810     ON demande_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
811     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
812     ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
813     WHERE demande_type.demande_type=".$this->valF["demande_type"];
814     $type_aff_form = $this->db->getOne($sql);
815     $this->f->addToLog(__METHOD__ . " : db->getOne(\"".$sql."\")", VERBOSE_MODE);
816     if($this->f->isDatabaseError($type_aff_form, true) === true) {
817     return false;
818     }
819     return $type_aff_form;
820     }
821    
822     /**
823 mbroquet 3730 * Méthode de verification du contenu
824     */
825 softime 6929 function verifier($val = array(), &$db = null, $DEBUG = null) {
826 mbroquet 3730 parent::verifier($val, $db, $DEBUG);
827    
828 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
829     if ($type_aff_form ===false) {
830 mbroquet 3730 $this->correct = false;
831 softime 6565 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
832 mbroquet 3730 }
833 softime 6565 switch ($type_aff_form) {
834     case 'ADS':
835     case 'CTX RE':
836     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
837     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
838     !is_null($this->form)) {
839     $this->correct = false;
840     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
841     }
842     break;
843     case 'CTX IN':
844     if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
845     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
846     !is_null($this->form)) {
847     $this->correct = false;
848     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
849     }
850     break;
851 softime 7067 case 'DPC':
852     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
853     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
854     !is_null($this->form)) {
855     $this->correct = false;
856     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
857     }
858     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
859     empty($this->postedIdDemandeur["bailleur_principal"]) AND
860     !is_null($this->form)) {
861     $this->correct = false;
862     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
863     }
864     break;
865 softime 6565
866     }
867    
868 mbroquet 3730 }
869    
870     /**
871     * Configuration des select
872     */
873 softime 6929 function setSelect(&$form, $maj, &$db = null, $debug = null) {
874 mbroquet 3730
875     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
876     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
877     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
878     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
879    
880     // Méthode de récupération des valeurs du select "demande_type"
881     if ($maj < 2
882     && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
883     OR ($this->f->get_submitted_get_value('obj') === null))) {
884     // demande_type
885     $form->setSelect('demande_type', $this->loadSelectDemandeType($form, $maj, $db, $debug, "dossier_autorisation_type_detaille"));
886     } else {
887     // demande_type
888     $this->init_select($form, $db, $maj, $debug, "demande_type",
889     $sql_demande_type, $sql_demande_type_by_id, false);
890     }
891     // arrondissement
892     $this->init_select($form, $db, $maj, $debug, "arrondissement",
893     $sql_arrondissement, $sql_arrondissement_by_id, false);
894    
895 softime 6565 // Filtre des demandes par groupes
896     $group_clause = array();
897     $ajout_condition_requete = "";
898     foreach ($_SESSION["groupe"] as $key => $value) {
899     if($value["enregistrement_demande"] !== true) {
900     continue;
901     }
902     $group_clause[$key] = "(groupe.code = '".$key."'";
903     if($value["confidentiel"] !== true) {
904     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
905     }
906     $group_clause[$key] .= ")";
907     }
908     // Mise en chaîne des clauses
909     $conditions = implode(" OR ", $group_clause);
910     if($conditions !== "") {
911     $ajout_condition_requete .= " AND (".$conditions.")";
912     }
913     // Les clauses sont une white list. Cela qui signifie que l'on
914     // rajoute une condition irréalisable si absence de clause.
915     if ($ajout_condition_requete === '') {
916     $ajout_condition_requete = 'AND false';
917     }
918     $sql_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requete>', $ajout_condition_requete, $sql_dossier_autorisation_type_detaille);
919 mbroquet 3730 $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
920     $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
921    
922     // om_collectivite
923     $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
924     }
925    
926     /**
927     * Charge le select du champ type de demande
928     * @param object $form Formulaire
929     * @param int $maj Mode d'insertion
930     * @param object $db Database
931     * @param bool $debug Debug active ou pas
932     * @param string $champ champ activant le filtre
933     * @return array Contenu du select
934     */
935     function loadSelectDemandeType(&$form, $maj, &$db, $debug, $champ) {
936    
937     //
938     if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
939     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
940     elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
941     include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
942    
943     // Contenu de la liste à choix
944     $contenu=array();
945     $contenu[0][0]='';
946     $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
947    
948     //Récupère l'id du type de dossier d'autorisation détaillé
949     $id_dossier_autorisation_type_detaille = "";
950     if ($this->f->get_submitted_post_value($champ) !== null) {
951     $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
952     } elseif($this->getParameter($champ) != "") {
953     $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
954     } elseif(isset($form->val[$champ])) {
955     $id_dossier_autorisation_type_detaille = $form->val[$champ];
956     }
957    
958     // Récupération de paramètre pour le rechargement ajax du select
959     $idx_dossier = $this->getParameter("idx_dossier");
960    
961     // Récupère l'id de la nature de la demande
962     $id_demande_nature = "1";
963     if (isset($idx_dossier) AND $idx_dossier != "") {
964     $id_demande_nature = '2';
965     }
966    
967     // Ajout de condition pour la requête
968     $ajout_condition_requête = "";
969     if ($id_demande_nature == '2') {
970    
971     //On récupère le dossier d'autorisation
972     $sql = "SELECT dossier_autorisation
973     FROM ".DB_PREFIXE."dossier
974     WHERE dossier = '".$idx_dossier."'";
975     $dossier_autorisation = $this->db->getOne($sql);
976    
977     $this->f->addToLog(
978     "loadSelectDemandeType() : db->getone(\"".$sql."\");",
979     VERBOSE_MODE
980     );
981     $this->f->isDatabaseError($dossier_autorisation);
982    
983     //On récupère l'état du dernier dossier d'instruction
984     $sql = "SELECT etat
985     FROM ".DB_PREFIXE."dossier
986     WHERE dossier_autorisation = '".$dossier_autorisation."' AND
987     version = (SELECT max(version) FROM ".DB_PREFIXE."dossier
988     WHERE dossier_autorisation = '".$dossier_autorisation."' )";
989     $etatDernierDi = $this->db->getOne($sql);
990     $this->f->addToLog(
991     "loadSelectDemandeType() : db->getone(\"".$sql."\");",
992     VERBOSE_MODE
993     );
994     $this->f->isDatabaseError($etatDernierDi);
995    
996 softime 6565 $ajout_condition_requête = " AND etat.etat = '".$etatDernierDi."'
997     ";
998 mbroquet 3730 }
999    
1000     //
1001     if ($id_dossier_autorisation_type_detaille != "") {
1002     //Si l'id du type de dossier d'autorisation détaillé est renseigné
1003     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_dossier_autorisation_type_detaille>', $id_dossier_autorisation_type_detaille, $sql_demande_type_by_dossier_autorisation_type_detaille);
1004     // Ajoute une condition sur la nature de la demande
1005     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_demande_nature>', $id_demande_nature, $sql_demande_type_by_dossier_autorisation_type_detaille);
1006     // Permet d'ajouter une condition
1007     $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requête>', $ajout_condition_requête, $sql_demande_type_by_dossier_autorisation_type_detaille);
1008     $res = $this->db->query($sql_demande_type_by_dossier_autorisation_type_detaille);
1009     $this->addToLog("db->query(\"".$sql_demande_type_by_dossier_autorisation_type_detaille."\");", VERBOSE_MODE);
1010     $this->f->isDatabaseError($res);
1011     //Les résultats de la requête sont stocké dans le tableau contenu
1012     $k=1;
1013     while ($row=& $res->fetchRow()){
1014     $contenu[0][$k]=$row[0];
1015     $contenu[1][$k]=$row[1];
1016     $k++;
1017     }
1018     }
1019    
1020     // Retourne le contenu de la liste
1021     return $contenu;
1022     }
1023    
1024     /*
1025     * Ajout du fielset
1026     * Add fieldset
1027     */
1028     function setLayout(&$form, $maj){
1029 softime 6565 if ( $maj < 2) {
1030 mbroquet 3730
1031 softime 6565 // Type de dossier/demande
1032     $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1033     $form->setFieldset('om_collectivite','D'
1034 mbroquet 3730 ,_('Type de dossier/demande'));
1035 softime 6565 $form->setFieldset('etat','F','');
1036     $form->setBloc('etat','F');
1037    
1038     // Autorisation contestée
1039     $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1040     $form->setFieldset('autorisation_contestee','D'
1041     ,_('Autorisation contestée'));
1042     $form->setFieldset('autorisation_contestee','F','');
1043     $form->setBloc('autorisation_contestee','F');
1044    
1045     // Date de la demande
1046     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1047     $form->setFieldset('date_demande','D',_('Date de la demande'));
1048     $form->setFieldset('date_demande','F','');
1049     $form->setBloc('date_demande','F');
1050    
1051 softime 7067 // Localisation
1052 softime 6565 $form->setBloc('terrain_references_cadastrales','D',"",
1053     "col_12 localisation demande_hidden_bloc");
1054 softime 7067 $form->setFieldset('terrain_references_cadastrales','D',_('Localisation'));
1055 softime 6565 $form->setFieldset('terrain_superficie','F','');
1056     $form->setBloc('terrain_superficie','F');
1057    
1058     // Demandeurs
1059     // → cf. formSpecificContent()
1060     }
1061     if ( $maj == 3 ) {
1062     $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1063     $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1064     $form->setFieldset('om_collectivite','D'
1065     ,_('Type de dossier/demande'));
1066     $form->setFieldset('dossier_autorisation','F','');
1067     $form->setBloc('dossier_autorisation','F');
1068 mbroquet 3730 /*Fin bloc 1*/
1069    
1070     // Affichage de l'état du dossier d'instruction
1071     $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1072     $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1073     $form->setFieldset('etat','F','');
1074     $form->setBloc('etat','F');
1075     $form->setBloc('etat','F');
1076    
1077 softime 6565 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1078    
1079 mbroquet 3730 /*Champ sur lequel s'ouvre le bloc 2 */
1080     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1081     $form->setFieldset('date_demande','D',_('Date de la demande'));
1082     $form->setFieldset('date_demande','F','');
1083     $form->setBloc('date_demande','F');
1084     /*Fin bloc 2*/
1085    
1086     /*Champ sur lequel s'ouvre le bloc 3 */
1087     $form->setBloc('terrain_references_cadastrales','D',"",
1088     "localisation col_12 demande_hidden_bloc");
1089 softime 7067 $form->setFieldset('terrain_references_cadastrales','D',_('Localisation'));
1090 mbroquet 3730 $form->setFieldset('terrain_superficie','F','');
1091     $form->setBloc('terrain_superficie','F');
1092     /*Fin bloc 4*/
1093     }
1094     }
1095    
1096     /*
1097     * Ajoute des actions sur les deux premiers select
1098     * Add actions on the two first select
1099     */
1100     function setOnchange(&$form,$maj){
1101     parent::setOnchange($form,$maj);
1102    
1103     $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1104 softime 6565 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1105 mbroquet 3730 }
1106    
1107     function setLib(&$form,$maj) {
1108     parent::setLib($form,$maj);
1109     //libelle des champs
1110    
1111     $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1112 softime 6565 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1113 mbroquet 3730 }
1114 softime 6565
1115 mbroquet 3730 /*
1116     * Cache le champ terrain_references_cadastrales
1117     * Hide the fiels terrain_references_cadastrales
1118     */
1119     function setType(&$form,$maj) {
1120     parent::setType($form,$maj);
1121    
1122     $form->setType('dossier_instruction', 'hidden');
1123     $form->setType('dossier_autorisation', 'hidden');
1124 softime 6565 $form->setType('autorisation_contestee', 'autorisation_contestee');
1125 mbroquet 3730
1126     $form->setType('instruction_recepisse', 'hidden');
1127     $form->setType('arrondissement', 'hidden');
1128    
1129     $form->setType('etat', 'hidden');
1130    
1131     // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1132     // sauf demande_type
1133     if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1134     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1135     $form->setType('etat', 'hiddenstatic');
1136     $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1137     $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1138     $form->setType('terrain_adresse_voie', 'hiddenstatic');
1139     $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1140     $form->setType('terrain_adresse_localite', 'hiddenstatic');
1141     $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1142     $form->setType('terrain_adresse_bp', 'hiddenstatic');
1143     $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1144     $form->setType('terrain_superficie', 'hiddenstatic');
1145     }
1146     if($maj == 1) {
1147     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1148     $form->setType('demande_type', 'selecthiddenstatic');
1149     }
1150     if($maj == 3) {
1151     $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1152     }
1153    
1154     }
1155    
1156     /**
1157     * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1158     * par l'utilisateur.
1159     *
1160     * @return integer identifiant du cerfa
1161     */
1162     function getIdCerfa() {
1163     if($this->cerfa != null) {
1164     return $this->cerfa;
1165     }
1166     // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1167     $sql = "SELECT
1168     dossier_autorisation_type_detaille.cerfa
1169     FROM
1170     ".DB_PREFIXE."dossier_autorisation_type_detaille
1171     JOIN
1172     ".DB_PREFIXE."cerfa
1173     ON
1174     dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1175     WHERE
1176     now()<=om_validite_fin
1177     AND now()>=om_validite_debut
1178     AND dossier_autorisation_type_detaille=".
1179     $this->valF['dossier_autorisation_type_detaille'];
1180     $this->cerfa = $this->db->getOne($sql);
1181     $this->f->addToLog(
1182     "ajoutDossierInstruction() : db->getone(\"".$sql."\");",
1183     VERBOSE_MODE
1184     );
1185     $this->f->isDatabaseError($this->cerfa);
1186     return $this->cerfa;
1187     }
1188    
1189    
1190     /**
1191     * Méthode permettant d'ajouter un dossier d'autorisation.
1192     *
1193     * @param integer $id identifiant de la demande
1194     * @param database &$db handler de la base de donnée
1195     * @param array $val tableau de valeurs postées via le formulaire
1196     * @param boolean $DEBUG debug
1197     *
1198     * @return boolean false si erreur
1199     */
1200     function ajoutDossierAutorisation($id, &$db, $val, $DEBUG) {
1201     require_once '../obj/dossier_autorisation.class.php';
1202     $dossier_autorisation = new dossier_autorisation("]", $db, $DEBUG);
1203     $id_etat_initial_da =
1204     $this->f->getParameter('id_etat_initial_dossier_autorisation');
1205    
1206     // Vérification de l'existance d'un état initial des DA dans la table
1207     // om_parametre afin d'éviter d'eventuelle erreur de base de données
1208     if(isset($id_etat_initial_da)) {
1209     $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1210     WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1211     $count = $this->db->getOne($sql);
1212     $this->f->addToLog(
1213     "ajoutDossierAutorisation() : db->getOne(\"".$sql."\")",
1214     VERBOSE_MODE
1215     );
1216     if ($this->f->isDatabaseError($count, true)){
1217     $this->f->addToLog(
1218     "ajoutDossierAutorisation() : ERROR db->getOne(\"".$sql."\")",
1219     DEBUG_MODE
1220     );
1221 softime 6565
1222 mbroquet 3730 return false;
1223     }
1224     if($count != 1) {
1225     $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1226 softime 6565
1227 mbroquet 3730 return false;
1228 softime 6565 }
1229 mbroquet 3730
1230 softime 6565 // On récupère les paramètres de la collectivité concernée
1231     // par la demande.
1232     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1233     // Le paramètre 'insee' est obligatoire si il n'est pas présent
1234     // dans le tableau des paramètres alors on stoppe le traitement.
1235     if (!isset($collectivite_parameters['insee'])) {
1236     $this->f->addToLog(
1237     __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1238     DEBUG_MODE
1239     );
1240 mbroquet 3730
1241 softime 6565 return false;
1242     }
1243 mbroquet 3730
1244 softime 6565 // La méthode ajouter prend en paramètre un tableau associatif
1245     // contenant toutes les champs de la classe instanciée,
1246     // d'où l'initialisation du tableau en bouclant sur la liste des
1247     // champs du DA
1248     foreach($dossier_autorisation->champs as $value) {
1249     $valAuto[$value] = null;
1250 mbroquet 3730 }
1251 softime 6565
1252     // Définition des valeurs à insérer
1253     $valAuto['om_collectivite']=
1254     $this->valF['om_collectivite'];
1255     $valAuto['dossier_autorisation']="";
1256     $valAuto['exercice']=null;
1257     $valAuto['insee']= $collectivite_parameters['insee'];
1258     $valAuto['arrondissement']=
1259     $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1260     $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1261     $valAuto['erp_numero_batiment']=null;
1262     $valAuto['erp_ouvert']=null;
1263     $valAuto['erp_arrete_decision']=null;
1264     $valAuto['dossier_autorisation_type_detaille']=
1265     $this->valF['dossier_autorisation_type_detaille'];
1266     $valAuto['depot_initial']=
1267     $this->dateDBToForm($this->valF['date_demande']);
1268     $valAuto['terrain_references_cadastrales']=
1269     $this->valF['terrain_references_cadastrales'];
1270     $valAuto['terrain_adresse_voie_numero']=
1271     $this->valF['terrain_adresse_voie_numero'];
1272     $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1273     $valAuto['terrain_adresse_lieu_dit']=
1274     $this->valF['terrain_adresse_lieu_dit'];
1275     $valAuto['terrain_adresse_localite']=
1276     $this->valF['terrain_adresse_localite'];
1277     $valAuto['terrain_adresse_code_postal']=
1278     $this->valF['terrain_adresse_code_postal'];
1279     $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1280     $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1281     $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1282     $valAuto['numero_version']=-1;
1283     // Ajout du dossier dans la base
1284     if($dossier_autorisation->ajouter($valAuto, $db, $DEBUG) === false) {
1285     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1286    
1287     return false;
1288     }
1289     // Liaison du dossier ajouter à la demande
1290     $this->valF['dossier_autorisation'] =
1291     $dossier_autorisation->valF['dossier_autorisation'];
1292    
1293     return true;
1294 mbroquet 3730 }
1295    
1296 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1297    
1298     return false;
1299 mbroquet 3730 }
1300    
1301     /**
1302     * Méthode permettant d'ajouter un dossier d'instruction.
1303     *
1304     * @param integer $id identifiant de la demande
1305     * @param database &$db handler de la base de donnée
1306     * @param array $val tableau de valeurs postées via
1307     * le formulaire
1308     * @param boolean $DEBUG debug
1309     * @param integer $dossier_instruction_type identifiant du DI type
1310     *
1311     * @return boolean false si erreur
1312     */
1313     function ajoutDossierInstruction($id, &$db, $val, $DEBUG, $dossier_instruction_type) {
1314     require_once '../obj/dossier.class.php';
1315     $dossier = new dossier("]", $db, $DEBUG);
1316     foreach($dossier->champs as $value) {
1317     $valInstr[$value] = null;
1318     }
1319     require_once '../obj/dossier_autorisation_type_detaille.class.php';
1320     $datd = new dossier_autorisation_type_detaille(
1321     $this->valF['dossier_autorisation_type_detaille'],
1322     $db,
1323     $DEBUG
1324     );
1325    
1326     /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1327     * versionning
1328     */
1329     $dossier->setDossierInstructionType($dossier_instruction_type);
1330    
1331     // Définition des valeurs à entrée dans la table
1332     $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1333     $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1334     $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1335     $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1336     $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1337     $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1338     $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1339     $valInstr['annee']=$annee->format("y");
1340     $valInstr['terrain_references_cadastrales']=
1341     $this->valF['terrain_references_cadastrales'];
1342     $valInstr['terrain_adresse_voie_numero']=
1343     $this->valF['terrain_adresse_voie_numero'];
1344     $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1345     $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1346     $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1347     $valInstr['terrain_adresse_code_postal']=
1348     $this->valF['terrain_adresse_code_postal'];
1349     $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1350     $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1351     $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
1352     $valInstr['description']="";
1353     $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
1354 softime 6565 if ($this->valF["autorisation_contestee"] != "") {
1355     $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
1356     }
1357 mbroquet 3730
1358     /*
1359     * Gestion de la qualification
1360     * */
1361     // Initialise le champ à false
1362     $valInstr['a_qualifier'] = false;
1363    
1364     // Récupère l'information depuis le type de la demande
1365     $qualification = $this->get_qualification($val['demande_type']);
1366    
1367     // Si le dossier doit être à qualifier
1368     if ($qualification === 't') {
1369     // Met le champ à true
1370     $valInstr['a_qualifier'] = true;
1371     }
1372    
1373 softime 6929 /*
1374     * Gestion de la simulation des taxes
1375     */
1376     // Récupère l'instance du cerfa lié au type détaillé du DA
1377     $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
1378    
1379     // Si l'option de simulation est activée pour la collectivité du dossier
1380     // et que le cerfa du dossier à les champs requis
1381     if ($this->f->is_option_simulation_taxes_enabled($val['om_collectivite']) === true
1382     && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
1383    
1384     // Récupère le paramétrage des taxes
1385     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
1386     // Si un paramétrage des taxes est récupéré pour la collectivité
1387     if ($inst_taxe_amenagement !== null) {
1388    
1389     // Si la taxe d'aménagement à un seul secteur
1390     if ($inst_taxe_amenagement->has_one_secteur() == true) {
1391     // Sélectionne l'unique secteur automatiquement
1392     $valInstr['tax_secteur'] = 1;
1393     }
1394 mbroquet 3730 }
1395     }
1396    
1397     //
1398     if($dossier->ajouter($valInstr, $db, $DEBUG) === false) {
1399     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
1400     return false;
1401     }
1402    
1403     //Affichage de message à l'utilisateur concernant un problème lors de
1404     //l'affectation de l'instructeur au dossier d'instruction
1405     if ($dossier->valF['dossier_autorisation'] === '' &&
1406     $dossier->valF['instructeur'] === null){
1407     $this->addToMessage(
1408     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1409     );
1410     }
1411     elseif ( $dossier->valF['instructeur'] === null ){
1412     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
1413     $this->addToMessage("<br/> ".
1414     _("Pensez a assigner un instructeur a ce dossier.")
1415     );
1416     } else {
1417     $this->addToMessage(
1418     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1419     );
1420     }
1421     }
1422    
1423     // Liaison du dossier ajouter à la demande
1424     $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
1425    
1426     //
1427     return true;
1428     }
1429    
1430     /**
1431     * Méthode permettant d'ajouter les données techniques d'un DA.
1432     *
1433     * @param integer $id identifiant de la demande
1434     * @param database &$db handler de la base de donnée
1435     * @param array $val tableau de valeurs postées via le formulaire
1436     * @param boolean $DEBUG debug
1437     *
1438     * @return boolean false si erreur
1439     */
1440     function ajoutDonneesTechniquesDA($id, &$db, $val, $DEBUG) {
1441    
1442     require_once '../obj/donnees_techniques.class.php';
1443     $this->DTDA = new donnees_techniques("]", $db, $DEBUG);
1444    
1445     // Champs tous à NULL car seul le champ concernant le dossier
1446     // d'autorisation sera rempli
1447     foreach($this->DTDA->champs as $value) {
1448     $valF[$value] = null;
1449     }
1450     // Ajout du numéro de dossier d'instruction
1451     $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
1452     // Identifiant du cerfa
1453     $valF['cerfa'] = $this->getIdCerfa();
1454     //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
1455     if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
1456     // Ajout des données techniques
1457     if($this->DTDA->ajouter($valF, $db, $DEBUG) === false) {
1458     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
1459     return false;
1460     }
1461     }
1462     else {
1463     //On indique que le dossier d'autorisation n'a pas de données techniques
1464     $this->DTDA = null;
1465     //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
1466     $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
1467     return -1;
1468     }
1469    
1470     //
1471     return true;
1472     }
1473    
1474     /**
1475     * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
1476     **/
1477     function ajoutLiensDossierAutorisation($id, &$db, $val, $DEBUG) {
1478     // Création des liens entre le dossier autorisation et les demandeurs
1479     include '../sql/pgsql/demande.form.inc.php';
1480     require_once '../obj/lien_dossier_autorisation_demandeur.class.php';
1481     $ldad = new lien_dossier_autorisation_demandeur("]",$db,$DEBUG);
1482     // Recupération des demandeurs liés à la demande
1483     $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur.
1484     " AND lien_demande_demandeur.demandeur NOT IN (
1485     SELECT lien_dossier_autorisation_demandeur.demandeur
1486     FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
1487     WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
1488     '".$this->valF['dossier_autorisation']."'
1489     )");
1490     $res = $db->query($sql);
1491     $this->f->addToLog("ajoutLiensDossierAutorisation() : db->query(\"".$sql."\");", VERBOSE_MODE);
1492     if ($this->f->isDatabaseError($res, true)) {
1493     return false;
1494     }
1495     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1496     $row['lien_dossier_autorisation_demandeur'] = NULL;
1497     $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
1498     if ($ldad->ajouter($row, $db, $DEBUG) === false) {
1499     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
1500     return false;
1501     }
1502     }
1503    
1504     //
1505     return true;
1506     }
1507    
1508     /**
1509     * Ajout des liens demandeurs / dossier d'autorisation
1510     **/
1511     function ajoutLiensDossierInstruction($id, &$db, $val, $DEBUG) {
1512     // Création des liens entre le dossier instruction et les demandeurs
1513     include '../sql/pgsql/demande.form.inc.php';
1514     require_once '../obj/lien_dossier_demandeur.class.php';
1515     $ldd = new lien_dossier_demandeur("]",$db,$DEBUG);
1516     // Recupération des demandeurs liés à la demande
1517     $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur);
1518     $res = $db->query($sql);
1519     $this->f->addToLog("ajoutLiensDossierInstruction() : db->query(\"".$sql."\");", VERBOSE_MODE);
1520     if ($this->f->isDatabaseError($res, true)) {
1521     return false;
1522     }
1523     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1524     $row['lien_dossier_demandeur'] = NULL;
1525     $row['dossier'] = $this->valF['dossier_instruction'];
1526     if ($ldd->ajouter($row, $db, $DEBUG) === false) {
1527     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
1528     return false;
1529     }
1530     }
1531    
1532     //
1533     return true;
1534     }
1535    
1536     /*
1537     * Récupère l'identifiant d'un arrondissement à partir d'un code postal
1538     */
1539     function getArrondissement($terrain_adresse_code_postal){
1540    
1541     $arrondissement = NULL;
1542    
1543     $sql = "SELECT
1544     arrondissement
1545     FROM
1546     ".DB_PREFIXE."arrondissement
1547     WHERE
1548     code_postal = '$terrain_adresse_code_postal' ";
1549     $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
1550    
1551     $res = $this->db->query($sql);
1552     $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1553     $this->f->isDatabaseError($res);
1554    
1555     if( $res->numrows() > 0 ) {
1556    
1557     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1558     $arrondissement = $row['arrondissement'];
1559     }
1560    
1561     return $arrondissement;
1562     }
1563    
1564     /*
1565     * Récupère l'évènement lié à un type de demande
1566     */
1567     function getEvenement($demande_type){
1568    
1569     $evenement = null;
1570    
1571     $sql =
1572     "SELECT
1573     evenement
1574     FROM
1575     ".DB_PREFIXE."demande_type
1576     WHERE
1577     demande_type = $demande_type";
1578    
1579     $res = $this->db->query($sql);
1580     $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1581     $this->f->isDatabaseError($res);
1582    
1583     if ( $res->numrows() > 0 ){
1584    
1585     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1586     $evenement = $row['evenement'];
1587     }
1588    
1589     return $evenement;
1590     }
1591    
1592    
1593    
1594     /**
1595     * Retourne le libellé du dossier d'autorisation
1596     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1597     * @return string Libellé dossier d'autorisation
1598     */
1599     function get_dossier_autorisation_libelle($dossier_autorisation) {
1600    
1601     $dossier_autorisation_libelle = "";
1602    
1603     // Requête SQL
1604     $sql = "SELECT
1605     dossier_autorisation_libelle
1606     FROM
1607     ".DB_PREFIXE."dossier_autorisation
1608     WHERE
1609     dossier_autorisation = '$dossier_autorisation'";
1610    
1611     $dossier_autorisation_libelle = $this->db->getOne($sql);
1612     $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1613     $this->f->isDatabaseError($dossier_autorisation_libelle);
1614    
1615     // Retourne le résultat
1616     return $dossier_autorisation_libelle;
1617     }
1618    
1619     /**
1620     * Retourne le libellé du dossier d'autorisation.
1621     * @param string $dossier Identifiant du dossier d'autorisation
1622     *
1623     * @return string Libellé dossier d'autorisation
1624     */
1625     function get_dossier_libelle($dossier) {
1626    
1627     $dossier_libelle = "";
1628    
1629     // Requête SQL
1630     $sql = "SELECT
1631     dossier_libelle
1632     FROM
1633     ".DB_PREFIXE."dossier
1634     WHERE
1635     dossier = '$dossier'";
1636    
1637     $dossier_libelle = $this->db->getOne($sql);
1638     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1639     $this->f->isDatabaseError($dossier_libelle);
1640    
1641     // Retourne le résultat
1642     return $dossier_libelle;
1643     }
1644    
1645     /**
1646     * Ajout des dossiers
1647     **/
1648 softime 6929 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
1649 mbroquet 3730
1650     include '../sql/pgsql/demande.form.inc.php';
1651    
1652     if($this->valF["demande_type"] != null) {
1653     $res = $db->query(
1654     str_replace(
1655     '<idx>',
1656     $this->valF['demande_type'],
1657     $sql_demande_type_details_by_id
1658     )
1659     );
1660     $this->f->addToLog(
1661     "triggerAjouter() : db->query(\"".
1662     str_replace(
1663     '<idx>',
1664     $this->valF['demande_type'],
1665     $sql_demande_type_details_by_id
1666     )."\")",
1667     VERBOSE_MODE
1668     );
1669     if ($this->f->isDatabaseError($res, true)) {
1670     return false;
1671     }
1672     // Attribut permettant de définir si un dossier a été créé
1673     $this->ajoutDI = false;
1674     $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
1675     // Création du dossier_autorisation
1676     if($this->valF['dossier_autorisation'] == "") {
1677 softime 6565 //
1678 mbroquet 3730 if($this->ajoutDossierAutorisation($id, $db, $val, $DEBUG) === false) {
1679     $this -> addToMessage(
1680     _("Erreur lors de l'enregistrement de la demande.")." ".
1681     _("Contactez votre administrateur.")
1682     );
1683     $this->correct = false;
1684     return false;
1685     }
1686 softime 6565 //
1687     $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
1688     if ($inst_da->is_dossier_autorisation_visible()) {
1689     $this -> addToMessage(
1690     _("Creation du dossier d'autorisation no").
1691     '<span id="new_da">'.
1692     $this->get_dossier_autorisation_libelle(
1693     $this->valF['dossier_autorisation']
1694     ).'</span>'
1695     );
1696     }
1697     // Ajout des données techniques au dossier d'autorisation
1698 mbroquet 3730 if($this->ajoutDonneesTechniquesDA($id, $db, $val, $DEBUG) === false) {
1699     $this -> addToMessage(
1700     _("Erreur lors de l'enregistrement de la demande.")." ".
1701     _("Contactez votre administrateur.")
1702     );
1703     $this->correct = false;
1704     return false;
1705     }
1706     } else {
1707     $sqlIdDTDA = "SELECT donnees_techniques
1708     FROM ".DB_PREFIXE."donnees_techniques
1709     WHERE dossier_autorisation='".
1710     $this->valF['dossier_autorisation']."'";
1711     $idDTDA = $this->db->getOne($sqlIdDTDA);
1712     $this->addToLog(
1713     "triggerAjouter(): db->getOne(\"".$sqlIdDTDA."\")",
1714     VERBOSE_MODE
1715     );
1716     if ($this->f->isDatabaseError($idDTDA, true)) {
1717     return false;
1718     }
1719    
1720     $this->DTDA = null;
1721     if ($idDTDA!=="" && is_numeric($idDTDA)){
1722     require_once '../obj/donnees_techniques.class.php';
1723     $this->DTDA = new donnees_techniques(
1724     $idDTDA,
1725     $db,
1726     $DEBUG
1727     );
1728     $this->DTDA->setValFFromVal();
1729     }
1730     }
1731     // Enregistrement du numéro dossier existant
1732     // (il sera écrasé si un DI est créé)
1733     if ($this->getParameter("idx_dossier") != "") {
1734     $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
1735     }
1736     // Création du dossier d'instruction
1737     if($dossier_type['dossier_instruction_type'] != null) {
1738     if($this->ajoutDossierInstruction(
1739     $id,
1740     $db,
1741     $val,
1742     $DEBUG,
1743     $dossier_type['dossier_instruction_type']
1744     ) === false ) {
1745     $this -> addToMessage(
1746     _("Erreur lors de l'enregistrement de la demande.")." ".
1747     _("Contactez votre administrateur.")
1748     );
1749     $this->correct = false;
1750     return false;
1751     }
1752     // Libellé du dossier
1753     $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
1754     // Message de validation
1755     $this -> addToMessage(
1756 softime 4631 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
1757 mbroquet 3730 );
1758 softime 4631
1759 mbroquet 3730 // Attribut permettant de définir si un dossier a été créé.
1760     $this->ajoutDI = true;
1761     }
1762    
1763 softime 6565 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
1764     $code_datd = $inst_datd->getVal('code');
1765    
1766     $obj = "dossier_instruction";
1767     if ($code_datd === 'REC' OR $code_datd === 'REG') {
1768     $obj = "dossier_contentieux_tous_recours";
1769     }
1770     if ($code_datd === 'IN') {
1771     $obj = "dossier_contentieux_toutes_infractions";
1772     }
1773    
1774 softime 4631 // Template du lien vers le DI
1775 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>";
1776 softime 4631
1777     // Lien vers le DI
1778     $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
1779    
1780     // Message affiché à l'utilisateur
1781     $this->addToMessage($link_di."<br/>");
1782    
1783 mbroquet 3730 /*Ajout de l'arrondissement à partir du code postal*/
1784     if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
1785    
1786     $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
1787     }
1788     }
1789    
1790     //
1791     return true;
1792     }
1793    
1794     /**
1795 fmichon 4708 * TRIGGER - triggerajouterapres.
1796     *
1797     * - Ajout des délégataires et pétitionnaires
1798     * - ...
1799     * - Option de numérisation
1800     * - Interface avec le référentiel ERP [109]
1801     * - Interface avec le référentiel ERP [112]
1802     * - Interface avec le référentiel ERP [110]
1803     * - Interface avec le référentiel ERP [107]
1804     *
1805     * @return boolean
1806     */
1807 softime 6929 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
1808 mbroquet 3730
1809 softime 6391 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
1810 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
1811 softime 6391 // Instanciation du dossier d'instruction concerné par la demande en
1812     // cours d'ajout avant modification éventuelle par l'instruction
1813     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
1814     // Récupère l'état du dossier avant l'exécution d'une éventuelle action
1815     // associée à l'événement d'instruction : utile pour le message 112 vers
1816     // le référentiel ERP
1817     $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
1818     }
1819    
1820 fmichon 4708 /**
1821     *
1822     */
1823 mbroquet 3730 if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
1824     return false;
1825     }
1826    
1827     // Ajout des lliens entre dossier_autorisation et demandeur
1828     if(!empty($this->valF['dossier_autorisation'])) {
1829     if ($this->ajoutLiensDossierAutorisation($id, $db, $val, $DEBUG) == false) {
1830     return false;
1831     }
1832     }
1833 softime 6565 // Ajout des liens entre dossier et demandeur
1834 mbroquet 3730 if($this->ajoutDI === TRUE) {
1835     if ($this->ajoutLiensDossierInstruction($id, $db, $val, $DEBUG) == false) {
1836     return false;
1837     }
1838     }
1839 softime 6565
1840     // Création d'un lien entre le nouveau DI et le dossier contesté
1841     if ($this->valF["autorisation_contestee"] != "") {
1842     if ($this->ajoutLienDossierConteste() === false) {
1843     return false;
1844     }
1845     }
1846 mbroquet 3730
1847     // Duplication des lots (et leurs données techniques) et
1848     // liaison au nouveau dossier_d'instruction
1849     if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
1850     $this->lienLotDossierInstruction($id, $db, $val, $DEBUG);
1851     }
1852    
1853     /*Création du lien de téléchargement de récépissé de demande*/
1854     if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
1855     && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
1856    
1857     /*Récupérer l'événement lié à ce type de demande*/
1858     $evenement = $this->getEvenement($this->valF['demande_type']);
1859    
1860     /*Récupération de la lettre type de l'événement*/
1861     $lettretype = $this->f->getLettreType($evenement);
1862    
1863     /*Création d'une nouvelle instruction avec cet événement*/
1864     /*Données*/
1865     $valInstr['instruction']=NULL;
1866    
1867     $valInstr['destinataire']=$this->valF['dossier_instruction'];
1868     $valInstr['dossier']=$this->valF['dossier_instruction'];
1869     // Récupère la date de la demande
1870     $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
1871     $valInstr['evenement']=$evenement;
1872     $valInstr['lettretype']=$lettretype;
1873     $valInstr['complement_om_html']="";
1874     $valInstr['complement2_om_html']="";
1875    
1876     $valInstr['action']="initialisation";
1877     $valInstr['delai']="2";
1878     $valInstr['etat']="notifier";
1879     $valInstr['accord_tacite']="Oui";
1880     $valInstr['delai_notification']="1";
1881     $valInstr['archive_delai']="0";
1882     $valInstr['archive_date_complet']=NULL;
1883     $valInstr['archive_date_dernier_depot']=NULL;
1884     $valInstr['archive_date_rejet']=NULL;
1885     $valInstr['archive_date_limite']=NULL;
1886     $valInstr['archive_date_notification_delai']=NULL;
1887     $valInstr['archive_accord_tacite']="Non";
1888     $valInstr['archive_etat']="initialiser";
1889     $valInstr['archive_date_decision']=NULL;
1890     $valInstr['archive_avis']="";
1891     $valInstr['archive_date_validite']=NULL;
1892     $valInstr['archive_date_achevement']=NULL;
1893     $valInstr['archive_date_chantier']=NULL;
1894     $valInstr['archive_date_conformite']=NULL;
1895     $valInstr['archive_incompletude']=NULL;
1896     $valInstr['archive_incomplet_notifie']=NULL;
1897     $valInstr['archive_evenement_suivant_tacite']="";
1898     $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
1899     $valInstr['archive_etat_pendant_incompletude']=NULL;
1900     $valInstr['archive_date_limite_incompletude']=NULL;
1901     $valInstr['archive_delai_incompletude']=NULL;
1902     $valInstr['archive_autorite_competente']=NULL;
1903     $valInstr['complement3_om_html']="";
1904     $valInstr['complement4_om_html']="";
1905     $valInstr['complement5_om_html']="";
1906     $valInstr['complement6_om_html']="";
1907     $valInstr['complement7_om_html']="";
1908     $valInstr['complement8_om_html']="";
1909     $valInstr['complement9_om_html']="";
1910     $valInstr['complement10_om_html']="";
1911     $valInstr['complement11_om_html']="";
1912     $valInstr['complement12_om_html']="";
1913     $valInstr['complement13_om_html']="";
1914     $valInstr['complement14_om_html']="";
1915     $valInstr['complement15_om_html']="";
1916     $valInstr['avis_decision']=NULL;
1917     $valInstr['date_finalisation_courrier']=NULL;
1918     $valInstr['date_envoi_signature']=NULL;
1919     $valInstr['date_retour_signature']=NULL;
1920     $valInstr['date_envoi_rar']=NULL;
1921     $valInstr['date_retour_rar']=NULL;
1922     $valInstr['date_envoi_controle_legalite']=NULL;
1923     $valInstr['date_retour_controle_legalite']=NULL;
1924     $valInstr['signataire_arrete']=NULL;
1925     $valInstr['numero_arrete']=NULL;
1926     $valInstr['code_barres']=NULL;
1927     $valInstr['om_fichier_instruction']=NULL;
1928     $valInstr['om_final_instruction']=NULL;
1929     $valInstr['document_numerise']=NULL;
1930     $valInstr['autorite_competente']=NULL;
1931     $valInstr['duree_validite_parametrage']="0";
1932     $valInstr['duree_validite']="0";
1933 nmeucci 3873 $valInstr['date_depot']=NULL;
1934 mbroquet 3730 $valInstr['om_final_instruction_utilisateur']= "f";
1935     $valInstr['created_by_commune']= "f";
1936 softime 6565 $valInstr['archive_date_cloture_instruction'] = null;
1937     $valInstr['archive_date_premiere_visite'] = null;
1938     $valInstr['archive_date_derniere_visite'] = null;
1939     $valInstr['archive_date_contradictoire'] = null;
1940     $valInstr['archive_date_retour_contradictoire'] = null;
1941     $valInstr['archive_date_ait'] = null;
1942     $valInstr['archive_date_transmission_parquet'] = null;
1943 mbroquet 3730
1944     // Récupération des champs archive si cette demande a créée un dossier
1945     // d'instruction mais pas un P0
1946     if (!is_null($this->valF['dossier_instruction']) &&
1947     $this->valF['dossier_instruction'] !== "" ){
1948    
1949     // Requête
1950     $sql = "SELECT dossier_instruction_type.code
1951     FROM ".DB_PREFIXE."demande_type
1952     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1953     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1954     WHERE demande_type.demande_type = ".$this->valF['demande_type'];
1955     $res = $db->getOne($sql);
1956     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1957     if ($this->f->isDatabaseError($res, true)) {
1958     return false;
1959     }
1960    
1961     // On vérifie que ce n'est pas un P0
1962     if ( strcmp($res, "P") !== 0 ){
1963    
1964     $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
1965    
1966     if ($res == false) {
1967     return false;
1968     }
1969    
1970     if (isset($res['archive_delai'])) {
1971     $valInstr['archive_delai']=$res["archive_delai"];
1972     }
1973     if (isset($res['archive_date_complet'])) {
1974     $valInstr['archive_date_complet']=$res["archive_date_complet"];
1975     }
1976     if (isset($res['archive_date_dernier_depot'])) {
1977     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
1978     }
1979     if (isset($res['archive_date_rejet'])) {
1980     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
1981     }
1982     if (isset($res['archive_date_limite'])) {
1983     $valInstr['archive_date_limite']=$res["archive_date_limite"];
1984     }
1985     if (isset($res['archive_date_notification_delai'])) {
1986     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
1987     }
1988     if (isset($res['archive_accord_tacite'])) {
1989     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
1990     }
1991     if (isset($res['archive_etat'])) {
1992     $valInstr['archive_etat']=$res["archive_etat"];
1993     }
1994     if (isset($res['archive_date_decision'])) {
1995     $valInstr['archive_date_decision']=$res["archive_date_decision"];
1996     }
1997     if (isset($res['archive_avis'])) {
1998     $valInstr['archive_avis']=$res["archive_avis"];
1999     }
2000     if (isset($res['archive_date_validite'])) {
2001     $valInstr['archive_date_validite']=$res["archive_date_validite"];
2002     }
2003     if (isset($res['archive_date_achevement'])) {
2004     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2005     }
2006     if (isset($res['archive_date_chantier'])) {
2007     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2008     }
2009     if (isset($res['archive_date_conformite'])) {
2010     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2011     }
2012     if (isset($res['archive_incompletude'])) {
2013     $valInstr['archive_incompletude']=$res["archive_incompletude"];
2014     }
2015     if (isset($res['archive_incomplet_notifie'])) {
2016     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2017     }
2018     if (isset($res['archive_evenement_suivant_tacite'])) {
2019     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2020     }
2021     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2022     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2023     }
2024     if (isset($res['archive_etat_pendant_incompletude'])) {
2025     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2026     }
2027     if (isset($res['archive_date_limite_incompletude'])) {
2028     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2029     }
2030     if (isset($res['archive_delai_incompletude'])) {
2031     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2032     }
2033     if (isset($res['archive_autorite_competente'])) {
2034     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2035     }
2036 softime 6565 if (isset($res['archive_date_cloture_instruction'])) {
2037     $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2038     }
2039     if (isset($res['archive_date_premiere_visite'])) {
2040     $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2041     }
2042     if (isset($res['archive_date_derniere_visite'])) {
2043     $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2044     }
2045     if (isset($res['archive_date_contradictoire'])) {
2046     $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2047     }
2048     if (isset($res['archive_date_retour_contradictoire'])) {
2049     $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2050     }
2051     if (isset($res['archive_date_ait'])) {
2052     $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2053     }
2054     if (isset($res['archive_date_transmission_parquet'])) {
2055     $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2056     }
2057 mbroquet 3730 }
2058     }
2059    
2060     // Fichier requis
2061     require_once '../obj/instruction.class.php';
2062    
2063     // Création d'un nouveau dossier
2064     $instruction = new instruction("]",$db,$DEBUG);
2065     $instruction->valF = "";
2066     if ($instruction->ajouter($valInstr, $db, $DEBUG) === false) {
2067 nmeucci 3876 // Suppression des messages valides puisque erreur
2068     $this->msg = '';
2069     $this -> addToMessage($instruction->msg);
2070 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2071     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2072     return false;
2073     }
2074    
2075     // Finalisation du document
2076     $_GET['obj']='instruction';
2077     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2078     $instruction_final = new instruction($_GET['idx'],$db,$DEBUG);
2079     if($instruction_final->getVal('lettretype') != "") {
2080     // On se met en contexte de l'action 100 finaliser
2081     $instruction_final->setParameter('maj',100);
2082     // On finalise l'événement d'instruction
2083     $res = $instruction_final->finalize();
2084 softime 5024 // Si échec cela ne stoppe pas la création du dossier
2085     // et l'utilisateur n'en est pas informé dans l'IHM
2086     // mais l'erreur est loguée
2087 mbroquet 3730 if ($res === false) {
2088     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2089     }
2090     }
2091    
2092     // Mise à jour de la demande
2093     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2094     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2095     $demande_instance = new demande($this->valF['demande'], $db, $DEBUG);
2096     if ($demande_instance->modifier($this->valF, $db, $DEBUG) === false) {
2097     $this -> addToMessage($demande_instance->msg);
2098     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2099     return false;
2100     }
2101    
2102 softime 6565 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2103    
2104 mbroquet 3730 // Si l'option d'accès au portail citoyen est activée
2105 softime 7366 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2106 softime 6565 AND $inst_da->is_dossier_autorisation_visible() === true) {
2107 mbroquet 3730 // Met à jour la clé d'accès au portail citoyen dans le dossier
2108     // d'autorisation
2109     $update = $inst_da->update_citizen_access_key();
2110     //
2111     if ($update !== true) {
2112     //
2113     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2114     return false;
2115     }
2116     }
2117    
2118    
2119 jymadier 4441 // Si l'instruction initiale a une lettre type liée
2120     if ($instruction->valF['lettretype'] !== ''
2121     && $instruction->valF['lettretype'] !== null) {
2122    
2123     // Affichage du récépissé de la demande
2124     $this -> addToMessage("<a
2125     class='lien' id='link_demande_recepisse'
2126     title=\""._("Telecharger le recepisse de la demande")."\"
2127     href='../scr/form.php?obj=demande&amp;action=100&amp;idx=".
2128     $this->valF[$this->clePrimaire]."' target='_blank'>
2129     <span
2130     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2131     title=\""._("Telecharger le recepisse de la demande")."\">".
2132     _("Telecharger le recepisse de la demande").
2133     "</span>".
2134     _("Telecharger le recepisse de la demande")."
2135     </a><br/>");
2136     }
2137     }
2138    
2139 fmichon 4708 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2140     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2141    
2142     /**
2143     * Option de numérisation.
2144     */
2145     // Si l'option est activée
2146     if ($this->f->is_option_digitalization_folder_enabled() === true) {
2147 mbroquet 3730 // Création du répertoire de numérisation pour le dossier en
2148     // question.
2149     $ret = $inst_di->create_or_touch_digitalization_folder();
2150     // Si la création a échouée
2151     if ($ret !== true) {
2152     //
2153     $this->msg = "";
2154     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
2155     return false;
2156     }
2157     }
2158    
2159 fmichon 4708 /**
2160     * Interface avec le référentiel ERP.
2161     *
2162     * (WS->ERP)[109] Retrait de la demande -> AT
2163     * Déclencheur :
2164     * - L'option ERP est activée
2165     * - Le dossier est de type AT
2166     * - Le dossier est marqué comme "connecté au référentiel ERP"
2167     * - Le formulaire d'ajout de demande est validé avec un type de
2168     * demande correspondant à une demande de retrait
2169     */
2170 mbroquet 3730 //
2171 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2172 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2173     && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2174     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
2175     //
2176     $infos = array(
2177     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2178     );
2179     //
2180     $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
2181     if ($ret !== true) {
2182     $this->cleanMessage();
2183     $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
2184     return false;
2185     }
2186     $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
2187     }
2188    
2189     /**
2190     * Interface avec le référentiel ERP.
2191     *
2192     * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
2193     * Déclencheur :
2194     * - L'option ERP est activée
2195     * - Le dossier est de type AT
2196     * - Le dossier est marqué comme "connecté au référentiel ERP"
2197     * - Le formulaire d'ajout de demande est validé avec un type de
2198     * demande correspondant à un dépôt de pièces
2199     */
2200     //
2201 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2202 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2203     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2204     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
2205 softime 6391 // Définit le type de pièce par l'état du dossier
2206     $type_piece = "supplementaire";
2207     if ($etat_di_before_instr === 'incomplet') {
2208     $type_piece = "complementaire";
2209     }
2210 fmichon 4708 //
2211     $infos = array(
2212     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2213 softime 6391 "type_piece" => $type_piece,
2214 fmichon 4708 );
2215     //
2216     $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
2217     if ($ret !== true) {
2218     $this->cleanMessage();
2219     $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
2220     return false;
2221     }
2222     $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
2223     }
2224    
2225     /**
2226     * Interface avec le référentiel ERP.
2227     *
2228     * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
2229     * Déclencheur :
2230     * - L'option ERP est activée
2231     * - Le dossier est de type AT
2232     * - Le dossier est marqué comme "connecté au référentiel ERP"
2233     * - Le formulaire d'ajout de demande est validé avec un type de
2234     * demande correspondant à une demande de visite d'ouverture ERP
2235     */
2236     //
2237 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2238 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2239     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2240     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
2241     //
2242     $infos = array(
2243     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2244     );
2245     //
2246     $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
2247     if ($ret !== true) {
2248     $this->cleanMessage();
2249     $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
2250     return false;
2251     }
2252     $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
2253     }
2254    
2255     /**
2256     * Interface avec le référentiel ERP.
2257     *
2258     * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
2259     * Déclencheur :
2260     * - L'option ERP est activée
2261     * - Le dossier est de type PC
2262     * - Le dossier est marqué comme "connecté au référentiel ERP"
2263     * - Le formulaire d'ajout de demande est validé avec un type de
2264     * demande correspondant à une demande de visite d'ouverture ERP
2265     */
2266     //
2267 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2268 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
2269     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2270     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
2271     //
2272     $infos = array(
2273     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2274     );
2275     //
2276     $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
2277     if ($ret !== true) {
2278     $this->cleanMessage();
2279     $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
2280     return false;
2281     }
2282     $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
2283     }
2284    
2285     //
2286 mbroquet 3730 return true;
2287     }
2288 fmichon 4708
2289     /**
2290     * Récupère l'état d'un dossier d'instruction
2291     * @param $idxDossier L'identifiant du dossier d'instruction
2292     * @return L'état du dossier d'instruction
2293     */
2294     function getEtatDossier($idxDossier){
2295    
2296     $etat = "";
2297    
2298     $sql = "SELECT etat.etat
2299     FROM ".DB_PREFIXE."etat
2300     LEFT JOIN
2301     ".DB_PREFIXE."dossier
2302     ON
2303     dossier.etat = etat.etat
2304     WHERE dossier.dossier = '".$idxDossier."'";
2305     $etat = $this->db->getOne($sql);
2306     $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2307     // Si une erreur survient on die
2308     if (database::isError($etat, true)) {
2309     // Appel de la methode de recuperation des erreurs
2310     $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
2311     }
2312    
2313     return $etat;
2314     }
2315    
2316 mbroquet 3730 /*Ajout du lien demande / demandeur(s)*/
2317 softime 6929 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2318 mbroquet 3730 $this->listeDemandeur("demande",$this->val[array_search('demande', $this->champs)]);
2319     if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
2320     return false;
2321     }
2322     $this->valIdDemandeur=$this->postedIdDemandeur;
2323    
2324     //
2325     return true;
2326     }
2327    
2328 softime 6565
2329 mbroquet 3730 /**
2330 softime 6565 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
2331     * dossier de recours.
2332     *
2333     * @return, [type] [description]
2334     */
2335     function ajoutLienDossierConteste() {
2336     // Création des liens entre le dossier instruction créé et le dossier
2337     // contesté
2338     require_once '../obj/lien_dossier_dossier.class.php';
2339     $ldd = new lien_dossier_dossier("]");
2340     // Préparation des valeurs à mettre en base
2341     $val['lien_dossier_dossier'] = "";
2342     $val['dossier_src'] = $this->valF['dossier_instruction'];
2343     $val['dossier_cible'] = $this->valF["autorisation_contestee"];
2344     $val['type_lien'] = 'auto_recours';
2345    
2346     return $ldd->ajouter($val, $this->f->db, NULL);
2347     }
2348    
2349    
2350     /**
2351 mbroquet 3730 * Gestion des liens entre les lots du DA et le nouveau dossier
2352     **/
2353     function lienLotDossierInstruction($id, $db, $val, $DEBUG) {
2354     require_once ("../obj/lot.class.php");
2355     $lot = new lot("]", $db, $DEBUG);
2356     require_once ("../obj/lien_lot_demandeur.class.php");
2357     $lld = new lien_lot_demandeur("]", $db, $DEBUG);
2358    
2359    
2360     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
2361     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
2362     $resLot = $db -> query($sqlLots);
2363     $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
2364     $this->f->isDatabaseError($resLot);
2365     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
2366     // Insertion du nouveau lot
2367     $valLot['lot'] = "";
2368     $valLot['libelle'] = $rowLot['libelle'];
2369     $valLot['dossier_autorisation'] = null;
2370     $valLot['dossier'] = $this->valF['dossier_instruction'];
2371     $lot -> ajouter($valLot, $db, $DEBUG);
2372    
2373     //Insertion des liens entre dossier et les lots
2374     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
2375     WHERE lot = ".$rowLot['lot'];
2376     $res = $db -> query($sqlDemandeurs);
2377     $this->f->addToLog(
2378     "lienLotDossierInstruction() : db->query(\"".$sqlDemandeurs."\");",
2379     VERBOSE_MODE
2380     );
2381     if ($this->f->isDatabaseError($res, true)) {
2382     return false;
2383     }
2384    
2385     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2386     $valLld["lien_lot_demandeur"] = "";
2387     $valLld["lot"]=$lot->valF['lot'];
2388     $valLld["demandeur"] = $row['demandeur'];
2389     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
2390     if ($lld->ajouter($valLld, $db, $DEBUG) === false) {
2391     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
2392     return false;
2393     }
2394     }
2395    
2396     // Récupération des données techniques du nouveau lots
2397     if($this->ajoutDonneesTechniquesLots(
2398     $id,
2399     $db,
2400     $val,
2401     $DEBUG,
2402     $rowLot['lot'],
2403     $lot->valF['lot']) === false) {
2404     $this -> addToMessage(
2405     _("Erreur lors de l'enregistrement de la demande.")." ".
2406     _("Contactez votre administrateur.")
2407     );
2408     $this->correct = false;
2409     $this->f->addToLog(
2410     "lienLotDossierInstruction() : ERROR ajoutDonneesTechniquesLots",
2411     DEBUG_MODE
2412     );
2413     return false;
2414     }
2415    
2416     }
2417    
2418     //
2419     return true;
2420     }
2421    
2422    
2423     /**
2424     * Méthode permettant d'ajouter les données techniques d'un lot.
2425     *
2426     * @param integer $id identifiant de la demande
2427     * @param database &$db handler de la base de donnée
2428     * @param array $val tableau de valeurs postées via le formulaire
2429     * @param boolean $DEBUG debug
2430     * @param integer $lotInit identifiant de lot initial
2431     * @param integer $lotDest identifiant du lot qui va recevoir les données
2432     *
2433     * @return boolean false si erreur
2434     */
2435     function ajoutDonneesTechniquesLots($id, &$db, $val, $DEBUG, $lotInit, $lotDest) {
2436     // Requete permettant de recupérer les données techniques du lot passé
2437     // en paramètre ($lotInit)
2438     $sql_get_dt = "
2439     SELECT donnees_techniques
2440     FROM ".DB_PREFIXE."donnees_techniques
2441     WHERE lot=".$lotInit;
2442     $id_dt = $this->f->db->getOne($sql_get_dt);
2443     // Si des données techniques sont liées au lots on les "copie" et
2444     // on les lies au lot passé en paramètre (lotDest)
2445     if(isset($id_dt) and !empty($id_dt)) {
2446     $this->f->addToLog(
2447     "ajoutDonneesTechniquesLots() : db->getone(\"".$sql_get_dt."\");",
2448     VERBOSE_MODE
2449     );
2450     if ($this->f->isDatabaseError($id_dt, true)){
2451     $this->f->addToLog(
2452     "ajoutDonneesTechniquesLots() : ERROR",
2453     DEBUG_MODE
2454     );
2455     return false;
2456     }
2457     require_once '../obj/donnees_techniques.class.php';
2458     $donnees_techniques = new donnees_techniques($id_dt, $db, $DEBUG);
2459    
2460     // Récupération des données dans le tableau des valeurs à insérer
2461     foreach($donnees_techniques->champs as $value) {
2462     $val[$value] = $donnees_techniques->getVal($value);
2463     }
2464     // Modification du lien vers le nouveau lot
2465     $val["lot"] = $lotDest;
2466     // Identifiant du cerfa
2467     $val['cerfa'] = $this->getIdCerfa();
2468     // Ajout des données techniques
2469     if($donnees_techniques->ajouter($val, $db, $DEBUG) === false) {
2470     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
2471     return false;
2472     }
2473     }
2474    
2475     //
2476     return true;
2477     }
2478    
2479     /**
2480     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2481     **/
2482     function insertLinkDemandeDemandeur($db, $DEBUG) {
2483    
2484     //
2485     require_once "../obj/lien_demande_demandeur.class.php";
2486 softime 6565 $types_demandeur = array(
2487     "petitionnaire_principal",
2488     "delegataire",
2489     "petitionnaire",
2490     "plaignant_principal",
2491     "plaignant",
2492     "contrevenant_principal",
2493     "contrevenant",
2494     "requerant_principal",
2495     "requerant",
2496     "avocat_principal",
2497     "avocat",
2498 softime 7067 "bailleur_principal",
2499     "bailleur",
2500 softime 6565 );
2501     foreach ($types_demandeur as $type) {
2502     // Comparaison des autres demandeurs
2503     if(isset($this->postedIdDemandeur[$type]) === true) {
2504     // Suppression des liens non valides
2505     foreach ($this->valIdDemandeur[$type] as $demandeur) {
2506     // Demandeur
2507     if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
2508     if ($this->deleteLinkDemandeDemandeur($demandeur, $db, $DEBUG) == false) {
2509     //
2510     return false;
2511     }
2512 mbroquet 3730 }
2513 softime 6565
2514 mbroquet 3730 }
2515 softime 6565 // Ajout des nouveaux liens
2516     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
2517     if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
2518     $principal = false;
2519     if(strpos($type, '_principal') !== false) {
2520     $principal = true;
2521     }
2522     if ($this->addLinkDemandeDemandeur($demandeur, $principal, $db, $DEBUG) == false) {
2523     //
2524     return false;
2525     }
2526 mbroquet 3730 }
2527     }
2528     }
2529     }
2530    
2531     //
2532     return true;
2533     }
2534    
2535    
2536     /**
2537     * Fonction permettant d'ajouter un lien
2538     * entre la table demande et demandeur
2539     **/
2540     function addLinkDemandeDemandeur($id, $principal, $db, $DEBUG) {
2541     $lienAjout = new lien_demande_demandeur(
2542     "]",
2543     $db,
2544     $DEBUG);
2545     $lien = array('lien_demande_demandeur' => "",
2546     'petitionnaire_principal' => (($principal)?"t":"f"),
2547     'demande' => $this->valF['demande'],
2548     'demandeur' => $id);
2549     if ($lienAjout->ajouter($lien, $db, $DEBUG) === false) {
2550     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
2551     return false;
2552     }
2553    
2554     //
2555     return true;
2556     }
2557    
2558     /**
2559     * Fonction permettant de supprimer un lien
2560     * entre la table demande et demandeur
2561     **/
2562     function deleteLinkDemandeDemandeur($id, $db, $DEBUG) {
2563     // Suppression
2564     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
2565     "WHERE demande=".$this->valF['demande'].
2566     " AND demandeur=".$id;
2567     // Execution de la requete de suppression de l'objet
2568     $res = $db->query($sql);
2569     // Logger
2570     $this->f->addToLog("deleteLinkDemandeDemandeur(): db->query(\"".$sql."\");", VERBOSE_MODE);
2571     if ($this->f->isDatabaseError($res, true)){
2572     return false;
2573     }
2574    
2575     //
2576     return true;
2577     }
2578    
2579     /*
2580     * Teste si le lien entre une demande et un demandeur existe
2581     * */
2582     function isLinkDemandeDemandeurExist($idDemandeur) {
2583     $sql = "SELECT count(*)
2584     FROM ".DB_PREFIXE."lien_demande_demandeur
2585     WHERE demande = ".$this->valF['demande'].
2586     "AND demandeur = ".$idDemandeur;
2587     $count = $this->f->db->getOne($sql);
2588     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\");", VERBOSE_MODE);
2589     $this->f->isDatabaseError($count);
2590     if ($count === 0) {
2591     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
2592     return false;
2593     } else {
2594     return true;
2595     }
2596    
2597     }
2598    
2599     /**
2600     * Methode de recupération des valeurs postées
2601     **/
2602     function getPostedValues() {
2603     // Récupération des demandeurs dans POST
2604 softime 6565 $types_demandeur = array(
2605     "petitionnaire_principal",
2606     "delegataire",
2607     "petitionnaire",
2608     "plaignant_principal",
2609     "plaignant",
2610     "contrevenant_principal",
2611     "contrevenant",
2612     "requerant_principal",
2613     "requerant",
2614     "avocat_principal",
2615     "avocat",
2616 softime 7067 "bailleur_principal",
2617     "bailleur",
2618 softime 6565 );
2619     foreach ($types_demandeur as $type) {
2620     if($this->f->get_submitted_post_value($type) !== null AND
2621     $this->f->get_submitted_post_value($type) != '') {
2622     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
2623 mbroquet 3730 }
2624     }
2625     }
2626    
2627     /**
2628     * Méthode permettant de récupérer les id des demandeurs liés à la table
2629     * liée passée en paramètre
2630     *
2631     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2632     * @param string $id Identifiant (clé primaire de la table liée en question)
2633     */
2634     function listeDemandeur($from, $id) {
2635     // Récupération des demandeurs de la base
2636     $sql = "SELECT demandeur.demandeur,
2637     demandeur.type_demandeur,
2638     lien_".$from."_demandeur.petitionnaire_principal
2639     FROM ".DB_PREFIXE."lien_".$from."_demandeur
2640     INNER JOIN ".DB_PREFIXE."demandeur
2641     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2642     WHERE ".$from." = '".$id."'";
2643     $res = $this->f->db->query($sql);
2644     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2645     $this->f->isDatabaseError($res);
2646     // Stockage du résultat dans un tableau
2647     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2648 softime 6565 $demandeur_type = $row['type_demandeur'];
2649     if ($row['petitionnaire_principal'] == 't'){
2650     $demandeur_type .= "_principal";
2651 mbroquet 3730 }
2652 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
2653 mbroquet 3730 }
2654     }
2655    
2656    
2657     /**
2658     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
2659     * d'instruction existant
2660     */
2661     function retour($premier = 0, $recherche = "", $tricol = "") {
2662    
2663     echo "\n<a class=\"retour\" ";
2664     echo "href=\"";
2665     //
2666     if($this->getParameter("idx_dossier") != "") {
2667     echo "tab.php?";
2668     echo "obj=recherche_dossier";
2669    
2670     } else {
2671     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2672     echo "form.php?";
2673     } else {
2674     echo "tab.php?";
2675     }
2676     echo "obj=".get_class($this);
2677     if($this->getParameter("retour")=="form") {
2678     echo "&amp;idx=".$this->getParameter("idx");
2679     echo "&amp;idz=".$this->getParameter("idz");
2680     echo "&amp;action=3";
2681     }
2682     }
2683     echo "&amp;premier=".$this->getParameter("premier");
2684     echo "&amp;tricol=".$this->getParameter("tricol");
2685     echo "&amp;recherche=".$this->getParameter("recherche");
2686     echo "&amp;selectioncol=".$this->getParameter("selectioncol");
2687     echo "&amp;advs_id=".$this->getParameter("advs_id");
2688     echo "&amp;valide=".$this->getParameter("valide");
2689     //
2690     echo "\"";
2691     echo ">";
2692     //
2693     echo _("Retour");
2694     //
2695     echo "</a>\n";
2696    
2697     }
2698    
2699    
2700     /**
2701     * Cette méthode permet d'afficher des informations spécifiques dans le
2702     * formulaire de l'objet
2703     *
2704     * @param integer $maj Mode de mise à jour
2705     */
2706     function formSpecificContent($maj) {
2707 softime 6565 // Tableau des demandeurs selon le contexte
2708     $listeDemandeur = $this->valIdDemandeur;
2709 mbroquet 3730 /**
2710     * Gestion du bloc des demandeurs
2711     */
2712     // Si le mode est (modification ou suppression ou consultation) ET que
2713     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
2714     // actif)
2715 softime 6565 if ($this->correct !== true AND
2716     $this->getParameter('validation') === 0 AND
2717     $this->getParameter("maj") > 0) {
2718 mbroquet 3730 // Alors on récupère les demandeurs dans la table lien pour
2719 softime 6565 // affectation des résultats dans $this->valIdDemandeur
2720 mbroquet 3730 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
2721 softime 6565 $listeDemandeur = $this->valIdDemandeur;
2722 mbroquet 3730 }
2723    
2724 softime 6565 // Récupération des valeurs postées
2725     if ($this->getParameter('validation') > 0) {
2726     $listeDemandeur = $this->postedIdDemandeur;
2727     }
2728    
2729 mbroquet 3730 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2730     // correct (c'est-à-dire que le formulaire est actif)
2731 softime 6565 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2732 mbroquet 3730 // Alors on positionne le marqueur linkable a true qui permet
2733     // d'afficher ou non les actions de gestion des demandeurs
2734     $linkable = true;
2735     } else {
2736     // Sinon on positionne le marqueur linkable a false qui permet
2737     // d'afficher ou non les actions de gestion des demandeurs
2738     $linkable = false;
2739     }
2740    
2741     // Affichage des demandeurs et des actions
2742     // Conteneur de la listes des demandeurs
2743     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
2744     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
2745     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
2746 softime 6565 ._("Demandeurs")."</legend>";
2747    
2748 mbroquet 3730 // Affichage du bloc pétitionnaire principal / délégataire
2749     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2750     echo "<div id=\"petitionnaire_principal_delegataire\">";
2751 softime 6565 // Affichage de la synthèse du pétitionnaire principal
2752     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
2753 mbroquet 3730 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2754     echo "<div id=\"delegataire\">";
2755 softime 6565 // Affichage de la synthèse du délégataire
2756     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
2757 mbroquet 3730 echo "</div>";
2758     echo "<div class=\"both\"></div>";
2759     echo "</div>";
2760     // Bloc des pétitionnaires secondaires
2761     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2762     echo "<div id=\"listePetitionnaires\">";
2763 softime 6565 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
2764 mbroquet 3730 echo "</div>";
2765 softime 7067
2766     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
2767     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2768     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
2769     // Doit être utilisé avec la div petitionnaire_principal_delegataire
2770     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
2771     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2772     echo "<div id=\"bailleur_principal\">";
2773     // Affichage de la synthèse
2774     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
2775     echo "</div>";
2776     echo "<div id=\"listeAutresBailleurs\">";
2777     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
2778     echo "</div>";
2779     echo "</div>";
2780     echo "</div>";
2781 softime 6565
2782     echo "<div id=\"plaignant_contrevenant\">";
2783     // Affichage du bloc contrevenant
2784     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2785     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
2786     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2787     echo "<div id=\"contrevenant_principal\">";
2788     // Affichage de la synthèse
2789     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
2790     echo "</div>";
2791     echo "<div id=\"listeAutresContrevenants\">";
2792     // Affichage de la synthèse
2793     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
2794     echo "</div>";
2795     echo "</div>";
2796     // Affichage du bloc plaignant
2797     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2798     echo "<div id=\"listePlaignants\" class=\"col_12\">";
2799     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2800     echo "<div id=\"plaignant_principal\">";
2801     // Affichage de la synthèse
2802     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
2803     echo "</div>";
2804     echo "<div id=\"listeAutresPlaignants\">";
2805     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
2806     echo "</div>";
2807     echo "</div>";
2808     echo "</div>";
2809     echo "<div id=\"requerant_avocat\">";
2810     // Affichage du bloc requérant
2811     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2812     echo "<div id=\"listeRequerants\" class=\"col_12\">";
2813     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2814     echo "<div id=\"requerant_principal\">";
2815     // Affichage de la synthèse
2816     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
2817     echo "</div>";
2818     echo "<div id=\"listeAutresRequerants\">";
2819     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
2820     echo "</div>";
2821     echo "</div>";
2822     // Affichage du bloc avocat
2823     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2824     echo "<div id=\"listeAvocat\" class=\"col_12\">";
2825     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2826     echo "<div id=\"avocat_principal\">";
2827     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
2828     echo "</div>";
2829     echo "<div id=\"listeAutresAvocats\">";
2830     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
2831     echo "</div>";
2832     echo "</div>";
2833     echo "</div>";
2834 mbroquet 3730 echo "</fieldset>";
2835     // Champ flag permettant de récupérer la valeur de l'option sig pour
2836     // l'utiliser en javascript, notamment lors du chargement de l'interface
2837     // pour les références cadastrales
2838     // XXX Si un widget pour les références cadastrales existait, il n'y
2839     // aurait pas besoin de faire cela
2840     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
2841     echo "</div>";
2842     }
2843 softime 6565
2844     function displaySyntheseDemandeur($listeDemandeur, $type) {
2845     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2846     // correct (c'est-à-dire que le formulaire est actif)
2847 softime 7366 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2848 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
2849     // d'afficher ou non les actions de gestion des demandeurs
2850     $linkable = true;
2851     } else {
2852     // Sinon on positionne le marqueur linkable a false qui permet
2853     // d'afficher ou non les actions de gestion des demandeurs
2854     $linkable = false;
2855     }
2856     // Récupération du type de demandeur pour l'affichage
2857     switch ($type) {
2858     case 'petitionnaire_principal':
2859     $legend = _("Petitionnaire principal");
2860     break;
2861 mbroquet 3730
2862 softime 6565 case 'delegataire':
2863     $legend = _("Autre correspondant");
2864     break;
2865    
2866     case 'petitionnaire':
2867     $legend = _("Petitionnaire");
2868     break;
2869    
2870     case 'contrevenant_principal':
2871     $legend = _("Contrevenant principal");
2872     break;
2873    
2874     case 'contrevenant':
2875     $legend = _("Autre contrevenant");
2876     break;
2877    
2878     case 'plaignant_principal':
2879     $legend = _("Plaignant principal");
2880     break;
2881    
2882     case 'plaignant':
2883     $legend = _("Autre plaignant");
2884     break;
2885    
2886     case 'requerant_principal':
2887     $legend = _("Requérant principal");
2888     break;
2889    
2890     case 'requerant':
2891     $legend = _("Autre requérant");
2892     break;
2893    
2894     case 'avocat_principal':
2895     $legend = _("Avocat principal");
2896     break;
2897    
2898     case 'avocat':
2899     $legend = _("Autre avocat");
2900     break;
2901 softime 7067
2902     case 'bailleur_principal':
2903     $legend = _("Bailleur principal");
2904     break;
2905    
2906     case 'bailleur':
2907     $legend = _("Autre bailleur");
2908     break;
2909 softime 6565 }
2910     foreach ($listeDemandeur[$type] as $demandeur_id) {
2911     $obj = str_replace('_principal', '', $type);
2912     $demandeur = new $obj(
2913     $demandeur_id,
2914     $this->f->db,false);
2915     $demandeur -> afficherSynthese($type, $linkable);
2916     $demandeur -> __destruct();
2917     }
2918     // Si en édition de formulaire
2919     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2920     // Bouton d'ajout du avocat
2921     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2922     echo "<span id=\"add_".$type."\"
2923     class=\"om-form-button add-16\">".
2924     $legend.
2925     "</span>";
2926     }
2927     }
2928    
2929 mbroquet 3730 // {{{
2930    
2931     // getter
2932     function getValIdDemandeur() {
2933     return $this->valIdDemandeur;
2934     }
2935     // setter
2936     function setValIdDemandeur($valIdDemandeur) {
2937     $this->valIdDemandeur = $valIdDemandeur;
2938     }
2939    
2940     //Supression du lien entre la demandeur et le(s) demandeur(s)
2941 softime 6929 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2942 mbroquet 3730
2943     //Création de la requête
2944     $sql = "DELETE FROM
2945     ".DB_PREFIXE."lien_demande_demandeur
2946     WHERE
2947     demande = $id";
2948    
2949     $res = $this->f->db->query($sql);
2950     $this->f->addToLog("triggerSupprimer() : db->query(\"".$sql."\")");
2951     if ($this->f->isDatabaseError($res, true)) {
2952     return false;
2953     }
2954    
2955     //
2956     return true;
2957     }
2958    
2959     // }}}
2960    
2961     /**
2962     * Récupère le champ "qualification" du type de la demande
2963     * @param integer $demande_type Identifiant du type de la demande
2964     * @return boolean
2965     */
2966     function get_qualification($demande_type) {
2967    
2968     // Initialise le résultat
2969     $qualification = "";
2970    
2971     // Si la condition existe
2972     if (is_numeric($demande_type)) {
2973    
2974     // Requête SQL
2975     $sql = "SELECT qualification
2976     FROM ".DB_PREFIXE."demande_type
2977     WHERE demande_type = $demande_type";
2978     $qualification = $this->db->getOne($sql);
2979     $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
2980     VERBOSE_MODE);
2981     $this->f->isDatabaseError($qualification);
2982     }
2983    
2984     // Retourne le résultat
2985     return $qualification;
2986     }
2987    
2988     /**
2989     * Récupère les champs archive_* d'une instruction
2990     * @param string $dossier L'identifiant du dossier d'instruction
2991     */
2992     public function getArchiveInstruction($dossierID){
2993    
2994     //On récupère les données du dernier DI accordé
2995     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
2996     dossier.avis_decision,
2997     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
2998 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
2999 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3000     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3001     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3002     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3003     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3004     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3005     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3006     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3007     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3008     dossier.incompletude,
3009     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3010     dossier.etat_pendant_incompletude,
3011     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3012     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3013 softime 6565 ,dossier.dossier, dossier.incomplet_notifie,
3014     to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3015     to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3016     to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3017     to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3018     to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3019     to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3020     to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet
3021 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3022     LEFT JOIN ".DB_PREFIXE."avis_decision
3023     ON dossier.avis_decision = avis_decision.avis_decision
3024     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3025     AND dossier.dossier_autorisation = (
3026     SELECT dossier_autorisation.dossier_autorisation
3027     FROM ".DB_PREFIXE."dossier_autorisation
3028     LEFT JOIN ".DB_PREFIXE."dossier
3029     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3030     WHERE dossier = '".$dossierID."')
3031     ORDER BY dossier.version DESC";
3032    
3033     $res = $this->db->query($sql);
3034     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3035     if ($this->f->isDatabaseError($res, true)) {
3036     return false;
3037     }
3038    
3039     //Un des dosssiers d'instruction a été accordé, on récupère ses données
3040     if ( $res->numrows() != 0 ){
3041    
3042     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3043     require_once "../obj/instruction.class.php";
3044     $instruction = new instruction("]",$this->db,DEBUG);
3045    
3046     $instruction->setParameter("maj", 1);
3047     $instruction->updateArchiveData($row);
3048     return $instruction->valF;
3049     }
3050     //Sinon, on prend les données du P0, si ce n'est pas un P0
3051     else {
3052     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3053     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3054     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3055     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3056     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3057     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3058     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3059     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3060 softime 6565 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot,
3061     dossier.date_cloture_instruction, dossier.date_premiere_visite,
3062     dossier.date_derniere_visite, dossier.date_contradictoire,
3063     dossier.date_retour_contradictoire, dossier.date_ait,
3064     dossier.date_transmission_parquet
3065 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3066     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3067     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3068     WHERE dossier.dossier_autorisation = (
3069     SELECT dossier_autorisation.dossier_autorisation
3070     FROM ".DB_PREFIXE."dossier_autorisation
3071     LEFT JOIN ".DB_PREFIXE."dossier
3072     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3073     WHERE dossier = '".$dossierID."')
3074     AND dossier_instruction_type.code = 'P'
3075     ORDER BY dossier.version DESC";
3076     $res = $this->db->query($sql);
3077     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3078     if ($this->f->isDatabaseError($res, true)) {
3079     return false;
3080     }
3081    
3082     //On est pas dans le cas d'un dépôt d'un P0
3083     if ( $res->numrows() != 0 ){
3084     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3085     require_once "../obj/instruction.class.php";
3086     $instruction = new instruction("]",$this->db,DEBUG);
3087     $instruction->setParameter("maj", 1);
3088     $instruction->updateArchiveData($row);
3089     return $instruction->valF;
3090     }
3091     }
3092     }
3093    
3094     /**
3095     * Cette methode permet d'afficher le bouton de validation du formulaire
3096     *
3097     * @param integer $maj Mode de mise a jour
3098     * @return void
3099     */
3100     function bouton($maj) {
3101    
3102     if (!$this->correct
3103     && $this->checkActionAvailability() == true) {
3104     //
3105     switch($maj) {
3106     case 0 :
3107     $bouton = _("Ajouter");
3108     break;
3109     case 1 :
3110     $bouton = _("Modifier");
3111     break;
3112     case 2 :
3113     $bouton = _("Supprimer");
3114     break;
3115     default :
3116     // Actions specifiques
3117     if ($this->get_action_param($maj, "button") != null) {
3118     //
3119     $bouton = $this->get_action_param($maj, "button");
3120     } else {
3121     //
3122     $bouton = _("Valider");
3123     }
3124     break;
3125     }
3126     //
3127     $params = array(
3128     "value" => $bouton,
3129     "name" => "submit",
3130     "onclick"=>"return getDataFieldReferenceCadastrale();",
3131     );
3132     //
3133     $this->f->layout->display_form_button($params);
3134     }
3135    
3136     }
3137    
3138     /**
3139     * Récupère l'instance de la classe taxe_amenagement.
3140     *
3141     * @param integer $om_collectivite La collectivité
3142     *
3143     * @return object
3144     */
3145     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
3146     //
3147 softime 6929 if ($this->inst_taxe_amenagement === null) {
3148 mbroquet 3730 //
3149     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
3150 softime 6929
3151     // Si aucun paramétrage de taxe trouvé et que la collectivité
3152     // est mono
3153     if ($taxe_amenagement === null
3154     && $this->f->isCollectiviteMono($om_collectivite) === true) {
3155     // Récupère la collectivité multi
3156     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
3157     //
3158     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
3159     }
3160    
3161 mbroquet 3730 //
3162 softime 6929 if ($taxe_amenagement === null) {
3163     //
3164     return null;
3165     }
3166    
3167     //
3168 mbroquet 3730 require_once "../obj/taxe_amenagement.class.php";
3169     $this->inst_taxe_amenagement = new taxe_amenagement($taxe_amenagement);
3170     }
3171     //
3172     return $this->inst_taxe_amenagement;
3173     }
3174    
3175     /**
3176     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3177     *
3178     * @param integer $om_collectivite La collectivité
3179     *
3180     * @return integer
3181     */
3182     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3183     //
3184 softime 6929 $taxe_amenagement = null;
3185 mbroquet 3730
3186 softime 6929 // Si la collectivité n'est pas renseigné
3187     if ($om_collectivite !== '' && $om_collectivite !== null) {
3188    
3189     // SQL
3190     $sql = "SELECT taxe_amenagement
3191     FROM ".DB_PREFIXE."taxe_amenagement
3192     WHERE om_collectivite = ".intval($om_collectivite);
3193     $taxe_amenagement = $this->f->db->getOne($sql);
3194     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3195     $this->f->isDatabaseError($taxe_amenagement);
3196     }
3197    
3198 mbroquet 3730 //
3199 softime 6929 return $taxe_amenagement;
3200 mbroquet 3730 }
3201    
3202    
3203     /**
3204 softime 6929 * Récupère l'instance du cerfa par le type détaillé du DA.
3205     *
3206     * @param integer $datd Identifiant du type détaillé du DA.
3207     *
3208     * @return object
3209     */
3210     protected function get_inst_cerfa_by_datd($datd = null) {
3211     //
3212     if ($this->inst_cerfa === null) {
3213     //
3214     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
3215     //
3216     $cerfa = $inst_datd->getVal('cerfa');
3217     //
3218     if ($cerfa !== '' && $cerfa !== null) {
3219     //
3220     require_once "../obj/cerfa.class.php";
3221     $this->inst_cerfa = new cerfa($cerfa);
3222     }
3223     }
3224    
3225     //
3226     return $this->inst_cerfa;
3227     }
3228    
3229    
3230     /**
3231 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
3232     *
3233     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3234     *
3235     * @return object
3236     */
3237 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3238 mbroquet 3730 //
3239     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3240     }
3241    
3242 nhaye 5254 }
3243 mbroquet 3730
3244     ?>

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26