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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26