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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9864 - (hide annotations)
Wed Jan 20 12:03:29 2021 UTC (4 years ago) by softime
File size: 159904 byte(s)
* Fusion de la branche d'intégration 4.13.1-develop dans trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26