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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12847 - (hide annotations)
Thu Sep 15 19:43:25 2022 UTC (2 years, 4 months ago) by softime
File size: 189111 byte(s)
* Fusion de la branche d'intégration 5.13.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26