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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 14064 - (hide annotations)
Thu Feb 16 22:52:47 2023 UTC (23 months, 2 weeks ago) by softime
File size: 194809 byte(s)
chore(branch): fusion de la branche d'intégration 5.16.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     if (isset($execute[0]) && is_array($execute[0])) {
879     $adresse_ws = $execute[0];
880     }
881     //Récupération du nom de la collectivité
882 softime 10573 if ($this->f->is_option_dossier_commune_enabled() === true
883     && $this->f->get_submitted_post_value("commune") != null) {
884     //
885 softime 13137 $qres = $this->f->get_one_result_from_db_query(
886     sprintf(
887     'SELECT
888     ncc
889     FROM
890     %1$scommune
891     WHERE
892 softime 14064 commune = %2$d',
893 softime 13137 DB_PREFIXE,
894     intval($this->f->get_submitted_post_value("commune"))
895     ),
896     array(
897     "origin" => __METHOD__,
898     "force_return" => true,
899     )
900 softime 10573 );
901 softime 13137 if ($qres["code"] !== "OK") {
902     $this->f->addToLog(
903     __METHOD__."() : ERROR - ".__("Impossible de récupérer le nom de la commune."),
904     DEBUG_MODE
905     );
906 softime 10573 return;
907     }
908     } else {
909 softime 14064 $qres = $this->f->get_one_result_from_db_query(
910     sprintf(
911     'SELECT
912     UPPER(valeur)
913     FROM
914     %1$som_parametre
915     WHERE
916     libelle = \'ville\'
917     AND om_collectivite = %2$d',
918     DB_PREFIXE,
919     intval($collectivite_idx)
920     ),
921     array(
922     "origin" => __METHOD__,
923     )
924     );
925 softime 10573 }
926    
927 softime 14064 $response["return_addr"]["localite"] = $qres["result"];
928 mbroquet 3730
929     // Formate le code postal
930     $code_postal = '';
931     // On vérifie que l'arrondissement retourné est bien une valeur
932     // cohérente avant d'essayer de récupérer son code postal en base de
933     // données
934     if (isset($adresse_ws["adresse"]['arrondissement']) === true
935     && $adresse_ws["adresse"]['arrondissement'] != ""
936     && is_numeric($adresse_ws["adresse"]['arrondissement']) === true) {
937 softime 14064 // Récupération de l'instance de l'arrondissement afin d'accéder au code postal
938     $inst_arrondissement = $this->f->get_inst__om_dbform(array(
939     "obj" => "arrondissement",
940     "idx" => intval($adresse_ws["adresse"]['arrondissement']),
941     ));
942     $code_postal = $inst_arrondissement->getVal('code_postal');
943 mbroquet 3730 } else {
944 softime 10573 if ($this->f->is_option_dossier_commune_enabled() === true
945     && $this->f->get_submitted_post_value("commune") != null) {
946     //
947     $code_postal = '';
948     } else {
949     //Récupération du code postal
950 softime 14064 $qres = $this->f->get_one_result_from_db_query(
951     sprintf(
952     'SELECT
953     valeur
954     FROM
955     %1$som_parametre
956     WHERE
957     libelle = \'cp\'
958     AND om_collectivite = %2$d',
959     DB_PREFIXE,
960     intval($collectivite_idx)
961     ),
962     array(
963     "origin" => __METHOD__,
964     )
965     );
966     $code_postal = $qres["result"];
967 softime 10573 }
968 mbroquet 3730 }
969    
970     $response['return_addr']['code_postal'] = $code_postal;
971    
972     // On coupe les chaînes retournées afin que leurs tailles
973     // correspondent aux tailles des champs en base de données
974     if ($adresse_ws["adresse"]['numero_voie'] !== '') {
975     $response['return_addr']['numero_voie'] = substr($adresse_ws["adresse"]['numero_voie'], 0, 20);
976     }
977 softime 7685 // cas où le type de voie n'est pas fourni par le SIG
978     if ($adresse_ws["adresse"]['nom_voie'] !== '') {
979 mbroquet 3730 $response['return_addr']['nom_voie'] = substr(
980 softime 7685 $adresse_ws["adresse"]['nom_voie'],
981     0,
982     30
983     );
984     }
985     // cas où le type de voie est fourni
986     if (isset($adresse_ws["adresse"]['type_voie'])
987     AND $adresse_ws["adresse"]['type_voie'] !== ''
988     AND $adresse_ws["adresse"]['nom_voie'] !== '') {
989     $response['return_addr']['nom_voie'] = substr(
990 mbroquet 3730 $adresse_ws["adresse"]['type_voie']." ".$adresse_ws["adresse"]['nom_voie'],
991     0,
992     30
993     );
994     }
995     //
996     printf(json_encode($response));
997     return;
998     }
999    
1000 softime 10573 function setValF($val = array()) {
1001 mbroquet 3730
1002 softime 10573 if (! $this->f->is_option_dossier_commune_enabled()) {
1003     // ajoute une "fausse" clé 'commune' dans le tableau des données envoyées
1004     // car la fonction 'setValF()' dans 'gen/obj/demande.class.php'
1005     // déclenche une erreur 'Undefined index: commune' sinon
1006     $val['commune'] = null;
1007     // idem pour cette valeur qui est passée au dossier d'instruction
1008     $this->valF['commune'] = null;
1009     }
1010    
1011 mbroquet 3730 parent::setValF($val);
1012 softime 10573
1013 mbroquet 3730 // Récupération des id demandeurs postés
1014     $this->getPostedValues();
1015     //$this->valIdDemandeur=$this->postedIdDemandeur;
1016 softime 10573
1017 softime 10976 //
1018     $this->valF['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
1019    
1020 softime 6565 // On retraite le texte saisie pour jointure en BDD.
1021     // Traitement identique à celui effectué en JavaScript
1022     // dans la fonction lookingForAutorisationContestee().
1023     if ($this->valF['autorisation_contestee'] !== NULL) {
1024     $val = trim($this->valF['autorisation_contestee']);
1025     $this->valF['autorisation_contestee'] = preg_replace(
1026     '/\s+/',
1027     '',
1028     $val
1029     );
1030     }
1031 mbroquet 3730 }
1032    
1033 softime 8989 /**
1034     *
1035     * @return string
1036     */
1037     function get_var_sql_forminc__sql_infos_dossier() {
1038     return "SELECT
1039     dossier_autorisation.dossier_autorisation,
1040     dossier_autorisation.dossier_autorisation_type_detaille,
1041     dossier_autorisation.depot_initial,
1042     dossier_autorisation.terrain_references_cadastrales,
1043     dossier_autorisation.terrain_adresse_voie_numero,
1044     dossier_autorisation.terrain_adresse_voie,
1045     dossier_autorisation.terrain_adresse_lieu_dit,
1046     dossier_autorisation.terrain_adresse_localite,
1047     dossier_autorisation.terrain_adresse_code_postal,
1048     dossier_autorisation.terrain_adresse_bp,
1049     dossier_autorisation.terrain_adresse_cedex,
1050     dossier_autorisation.terrain_superficie,
1051 softime 13528 etat.libelle as etat,
1052     dossier_autorisation.commune
1053 softime 8989 FROM ".DB_PREFIXE."dossier_autorisation
1054     INNER JOIN ".DB_PREFIXE."dossier
1055     ON dossier_autorisation.dossier_autorisation=dossier.dossier_autorisation
1056     LEFT JOIN ".DB_PREFIXE."etat
1057     ON dossier.etat = etat.etat
1058     WHERE dossier = '<idx>'";
1059     }
1060 mbroquet 3730
1061     /**
1062     * Méthode permettant de récupérer les valeurs du dossier d'autorisation
1063     * correspondant à la nouvelle demande
1064     */
1065     function getValFromDossier($dossier_autorisation) {
1066 softime 8989 $sql = str_replace(
1067     "<idx>",
1068     $this->getParameter("idx_dossier"),
1069     $this->get_var_sql_forminc__sql("infos_dossier")
1070     );
1071     $res = $this->f->db->query($sql);
1072 mbroquet 3730 $this->f->addToLog("getValFromDossier(): db->query(\"".$sql."\")", VERBOSE_MODE);
1073     $this->f->isDatabaseError($res);
1074 softime 8989 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
1075 mbroquet 3730 return $row;
1076     }
1077 softime 8989
1078     /**
1079     * SETTER_FORM - setVal (setVal).
1080     *
1081     * @return void
1082     */
1083     function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
1084     parent::setVal($form, $maj, $validation);
1085 softime 8329 // Sur le formulaire de modification, depot_electronique
1086     // n'est pas modifiable et affiche Oui/Non.
1087 softime 8989 if ($maj == 1) {
1088     if ($this->getVal('depot_electronique') === 't'
1089     || $this->getVal('depot_electronique') === true
1090     || $this->getVal('depot_electronique') === 1) {
1091     //
1092     $form->setVal('depot_electronique', "Oui");
1093     } else {
1094     $form->setVal('depot_electronique', "Non");
1095     }
1096 softime 8329 }
1097 softime 8989 //
1098     if ($maj == 0) {
1099 mbroquet 3730 // Définition de la date de dépôt par défaut
1100 softime 8989 // La date du jour par défaut dans le champs date_demande
1101     if ($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
1102 mbroquet 3730 $form->setVal("date_demande", date('d/m/Y'));
1103     }
1104 softime 10573
1105     $form->setVal("etat_transmission_platau", "non_transmissible");
1106    
1107 mbroquet 3730 // Récupération des valeurs du dossier d'autorisation correspondant
1108 softime 8989 if ($this->getParameter("idx_dossier") != "") {
1109     $val_autorisation = $this->getValFromDossier($this->getParameter("idx_dossier"));
1110     foreach ($val_autorisation as $champ => $value) {
1111     $form->setVal($champ, $value);
1112 mbroquet 3730 }
1113     }
1114     }
1115     }
1116 softime 8989
1117 mbroquet 3730 function getDataSubmit() {
1118    
1119     $datasubmit = parent::getDataSubmit();
1120     if($this->getParameter("idx_dossier") != "") {
1121     $datasubmit .= "&idx_dossier=".$this->getParameter("idx_dossier");
1122     }
1123     return $datasubmit;
1124     }
1125    
1126     /**
1127 softime 7067 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
1128 softime 6565 *
1129     * @return, string Type de formulaire.
1130     */
1131     function get_type_affichage_formulaire() {
1132 softime 14064 $qres = $this->f->get_one_result_from_db_query(
1133     sprintf(
1134     'SELECT
1135     dossier_autorisation_type.affichage_form
1136     FROM
1137     %1$sdemande_type
1138     INNER JOIN %1$sdossier_autorisation_type_detaille
1139     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1140     INNER JOIN %1$sdossier_autorisation_type
1141     ON dossier_autorisation_type.dossier_autorisation_type = dossier_autorisation_type_detaille.dossier_autorisation_type
1142     WHERE
1143     demande_type.demande_type = %2$d',
1144     DB_PREFIXE,
1145     intval($this->valF["demande_type"])
1146     ),
1147     array(
1148     "origin" => __METHOD__,
1149     "force_return" => true,
1150     )
1151     );
1152     if ($qres["code"] !== "OK") {
1153 softime 6565 return false;
1154     }
1155 softime 14064
1156     return $qres["result"];
1157 softime 6565 }
1158 softime 8989
1159 softime 6565 /**
1160 softime 12847 * (Surcharge) Effectue des vérifications avant mise à jour des données
1161     * issues d'un formulaire d'ajout ou de modification.
1162     *
1163     * Les vérifications réalisées dans cette méthode sont :
1164     * 1 - Vérifie si la date de demande est supérieure à la date du jour.
1165     * Si elle est supérieure à la date du jour, empêche la validation du formulaire et
1166     * averti l'utilisateur que son paramétrage n'est pas correct
1167     *
1168     * 2 - Selon le type de formulaire affiché vérifie si un pétitionnaire, un contrevenant
1169     * ou un bailleur principal a bien été saisie.
1170     * Si ce n'est pas le cas empêche la validation du formulaire et averti l'utilisateur
1171     * que la saisie d'un pétitionnaire ou autre principal est obligatoire.
1172     *
1173 softime 8989 * @return void
1174 mbroquet 3730 */
1175 softime 8989 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
1176     parent::verifier($val);
1177 mbroquet 3730
1178 softime 12847 // Vérification 1
1179 softime 11876 // Vérifie si la date de demande existe avant de la tester
1180     if (isset($val["date_demande"]) && $val["date_demande"] != null && $val["date_demande"] != '') {
1181     //
1182     $date_demande = $val["date_demande"];
1183     if (preg_match('/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/', $val["date_demande"], $d_match)) {
1184     $date_demande = $d_match[3].'-'.$d_match[2].'-'.$d_match[1];
1185     }
1186     $date_demande = DateTime::createFromFormat('Y-m-d', $date_demande);
1187     $aujourdhui = new DateTime();
1188     // Renvoie une exception si la date de date de demande n'est pas un DateTime
1189     try {
1190     if (! $date_demande instanceof DateTime) {
1191     throw new RuntimeException("Not a DateTime");
1192     }
1193     // Si la date issus du formulaire n'a pas pu être converti, date_demande vaudra
1194     // false. Avant de comparer on vérifie donc que la date a bien été récupérée
1195     if ($date_demande > $aujourdhui) {
1196     $this->addToMessage(_("La date de demande ne peut pas être superieure à la date du jour."));
1197 softime 12124 $this->correct = false;
1198 softime 11876 }
1199     } catch (RuntimeException $e) {
1200     $this->correct = false;
1201     $this->addToLog($e.' : '._("Le format de la date de demande n'est pas valide."));
1202     $this->addToMessage(_("Erreur : le format de la date de demande n'est pas correct. Contactez votre administrateur."));
1203     }
1204     }
1205    
1206 softime 12847 // Vérification 2
1207     // Récupère le type de formulaire affiché. A partir de cette information vérifie
1208     // selon le type de formulaire si les infos voulues sont bien saisies.
1209 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1210     if ($type_aff_form ===false) {
1211 mbroquet 3730 $this->correct = false;
1212 softime 6565 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
1213 mbroquet 3730 }
1214 softime 6565 switch ($type_aff_form) {
1215     case 'ADS':
1216     case 'CTX RE':
1217 softime 10573 case 'CONSULTATION ENTRANTE':
1218 softime 6565 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1219 softime 12847 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1220     !is_null($this->form)) {
1221 softime 6565 $this->correct = false;
1222     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1223     }
1224     break;
1225     case 'CTX IN':
1226     if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
1227 softime 12847 empty($this->postedIdDemandeur["contrevenant_principal"]) AND
1228     !is_null($this->form)) {
1229 softime 6565 $this->correct = false;
1230     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
1231     }
1232     break;
1233 softime 7067 case 'DPC':
1234     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1235 softime 12847 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1236     !is_null($this->form)) {
1237 softime 7067 $this->correct = false;
1238     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1239     }
1240     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
1241 softime 12847 empty($this->postedIdDemandeur["bailleur_principal"]) AND
1242     !is_null($this->form)) {
1243 softime 7067 $this->correct = false;
1244     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
1245     }
1246     break;
1247 softime 6565 }
1248 mbroquet 3730 }
1249    
1250     /**
1251 softime 8989 *
1252     * @return string
1253 mbroquet 3730 */
1254 softime 8989 function get_var_sql_forminc__sql_demande_type_details_by_id() {
1255     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>";
1256     }
1257 mbroquet 3730
1258 softime 8989 /**
1259     *
1260     * @return string
1261     */
1262     function get_var_sql_forminc__sql_lien_demande_demandeur() {
1263     return "SELECT petitionnaire_principal, demandeur, demande FROM ".DB_PREFIXE."lien_demande_demandeur WHERE demande = <demande>";
1264     }
1265    
1266     /**
1267     *
1268     * @return string
1269     */
1270     function get_var_sql_forminc__sql_arrondissement() {
1271     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY NULLIF(arrondissement.libelle,'')::int ASC NULLS LAST";
1272     }
1273    
1274     /**
1275     *
1276     * @return string
1277     */
1278     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
1279     return "SELECT
1280     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille,
1281     dossier_autorisation_type_detaille.libelle
1282     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1283     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1284     ON dossier_autorisation_type_detaille.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
1285     LEFT JOIN ".DB_PREFIXE."groupe
1286     ON dossier_autorisation_type.groupe=groupe.groupe
1287     LEFT JOIN ".DB_PREFIXE."cerfa ON dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1288     WHERE ((now()<=om_validite_fin AND now()>=om_validite_debut) OR
1289     dossier_autorisation_type_detaille.cerfa IS NULL OR
1290     (om_validite_fin IS NULL and om_validite_debut IS NULL) OR
1291     (now()<=om_validite_fin and om_validite_debut IS NULL) OR
1292     (om_validite_fin IS NULL AND now()>=om_validite_debut))
1293     <ajout_condition_requete>
1294     ORDER BY dossier_autorisation_type_detaille.libelle ASC";
1295     }
1296    
1297     /**
1298     * SETTER_FORM - setSelect.
1299     *
1300     * @return void
1301     */
1302     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
1303     //parent::setSelect($form, $maj);
1304 mbroquet 3730 // Méthode de récupération des valeurs du select "demande_type"
1305     if ($maj < 2
1306     && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
1307     OR ($this->f->get_submitted_get_value('obj') === null))) {
1308     // demande_type
1309 softime 8989 $form->setSelect(
1310     'demande_type',
1311     $this->loadSelectDemandeType($form, $maj, "dossier_autorisation_type_detaille")
1312     );
1313 mbroquet 3730 } else {
1314     // demande_type
1315 softime 8989 $this->init_select(
1316     $form,
1317     $this->f->db,
1318     $maj,
1319     null,
1320     "demande_type",
1321     $this->get_var_sql_forminc__sql("demande_type"),
1322     $this->get_var_sql_forminc__sql("demande_type_by_id"),
1323     false
1324     );
1325 mbroquet 3730 }
1326     // arrondissement
1327 softime 8989 $this->init_select(
1328     $form,
1329     $this->f->db,
1330     $maj,
1331     null,
1332     "arrondissement",
1333     $this->get_var_sql_forminc__sql("arrondissement"),
1334     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
1335     false
1336     );
1337 softime 6565 // Filtre des demandes par groupes
1338     $group_clause = array();
1339     $ajout_condition_requete = "";
1340     foreach ($_SESSION["groupe"] as $key => $value) {
1341     if($value["enregistrement_demande"] !== true) {
1342     continue;
1343     }
1344     $group_clause[$key] = "(groupe.code = '".$key."'";
1345     if($value["confidentiel"] !== true) {
1346     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
1347     }
1348     $group_clause[$key] .= ")";
1349     }
1350     // Mise en chaîne des clauses
1351     $conditions = implode(" OR ", $group_clause);
1352     if($conditions !== "") {
1353     $ajout_condition_requete .= " AND (".$conditions.")";
1354     }
1355     // Les clauses sont une white list. Cela qui signifie que l'on
1356     // rajoute une condition irréalisable si absence de clause.
1357     if ($ajout_condition_requete === '') {
1358     $ajout_condition_requete = 'AND false';
1359     }
1360 softime 8989 $sql_dossier_autorisation_type_detaille = str_replace(
1361     '<ajout_condition_requete>',
1362     $ajout_condition_requete,
1363     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille")
1364     );
1365     $this->init_select(
1366     $form,
1367     $this->f->db,
1368     $maj,
1369     null,
1370     "dossier_autorisation_type_detaille",
1371     $sql_dossier_autorisation_type_detaille,
1372     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
1373     false
1374     );
1375 mbroquet 3730 // om_collectivite
1376 softime 8989 $this->init_select(
1377     $form,
1378     $this->f->db,
1379     $maj,
1380     null,
1381     "om_collectivite",
1382     $this->get_var_sql_forminc__sql("om_collectivite"),
1383     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
1384     false
1385     );
1386 softime 10573 // commune
1387     $this->init_select(
1388     $form,
1389     $this->f->db,
1390     $maj,
1391     null,
1392     "commune",
1393     $this->get_var_sql_forminc__sql("commune"),
1394     $this->get_var_sql_forminc__sql("commune_by_id"),
1395     false
1396     );
1397 softime 10869
1398    
1399     $contenu = array();
1400     foreach(self::SOURCE_DEPOT as $key) {
1401     $const_name = $key;
1402     $const_value = $key;
1403     $contenu[0][] = $const_value;
1404     $contenu[1][] = __($const_value);
1405     }
1406    
1407     $form->setSelect("source_depot", $contenu);
1408 mbroquet 3730 }
1409    
1410     /**
1411     * Charge le select du champ type de demande
1412     * @param object $form Formulaire
1413     * @param int $maj Mode d'insertion
1414     * @param string $champ champ activant le filtre
1415     * @return array Contenu du select
1416     */
1417 softime 8989 function loadSelectDemandeType(&$form, $maj, $champ) {
1418 mbroquet 3730
1419     // Contenu de la liste à choix
1420     $contenu=array();
1421     $contenu[0][0]='';
1422     $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
1423    
1424     //Récupère l'id du type de dossier d'autorisation détaillé
1425     $id_dossier_autorisation_type_detaille = "";
1426     if ($this->f->get_submitted_post_value($champ) !== null) {
1427     $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
1428     } elseif($this->getParameter($champ) != "") {
1429     $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
1430     } elseif(isset($form->val[$champ])) {
1431     $id_dossier_autorisation_type_detaille = $form->val[$champ];
1432     }
1433 softime 8640 //
1434     if ($id_dossier_autorisation_type_detaille === '') {
1435     return $contenu;
1436     }
1437 mbroquet 3730
1438     // Récupération de paramètre pour le rechargement ajax du select
1439     $idx_dossier = $this->getParameter("idx_dossier");
1440    
1441     // Récupère l'id de la nature de la demande
1442     $id_demande_nature = "1";
1443     if (isset($idx_dossier) AND $idx_dossier != "") {
1444     $id_demande_nature = '2';
1445     }
1446    
1447 softime 8640 // Requête récupération type demande pour les nouveaux DA
1448     $sql = sprintf('
1449     SELECT demande_type.demande_type, demande_type.libelle as lib
1450     FROM %1$sdemande_type
1451     INNER JOIN %1$sdossier_autorisation_type_detaille
1452     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1453     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = %2$s
1454 softime 10573 WHERE (demande_type.demande_nature = %3$s %4$s)
1455     AND demande_type.dossier_instruction_type IS NOT NULL
1456 softime 8640 ORDER BY demande_type.libelle, demande_type.demande_type
1457     ',
1458     DB_PREFIXE,
1459     $id_dossier_autorisation_type_detaille,
1460 softime 10573 intval($id_demande_nature),
1461     // Affiche à la fois les types de demande NOUV et EXIST si option numéro complet activée
1462     $this->f->is_option_dossier_saisie_numero_complet_enabled() === true ? sprintf(' OR demande_type.demande_nature = %s ', 2) : ''
1463 softime 8640 );
1464     // Requêtes de récupération des types de demande pour les DA existants
1465 mbroquet 3730 if ($id_demande_nature == '2') {
1466 softime 10808 // Récupère la liste des types de demande possibles
1467     $sql = $this->get_query_demande_type_by_dossier($idx_dossier, $id_demande_nature);
1468 mbroquet 3730 }
1469    
1470     //
1471 softime 8989 $res = $this->f->db->query($sql);
1472 softime 8640 $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
1473     $this->f->isDatabaseError($res);
1474     //Les résultats de la requête sont stocké dans le tableau contenu
1475     $k=1;
1476     while ($row=& $res->fetchRow()){
1477     $contenu[0][$k]=$row[0];
1478     $contenu[1][$k]=$row[1];
1479     $k++;
1480 mbroquet 3730 }
1481    
1482     // Retourne le contenu de la liste
1483     return $contenu;
1484     }
1485    
1486 softime 10808 /**
1487     * [get_query_demande_type_by_dossier description]
1488     * @param [type] $idx_dossier [description]
1489     * @param [type] $id_demande_nature [description]
1490     * @param integer $etat_da_accord [description]
1491     * @param integer $etat_da_encours [description]
1492     * @param integer $autorite_competente_sitadel_com [description]
1493     * @return [type] [description]
1494     */
1495     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) {
1496     // Unification de trois résultats de réquête pour récupèrer les
1497     // types de demande possibles :
1498     // - les types de demande qui ne créé pas de nouveau DI et dont
1499     // l'état du DI ciblé fait partie des états autorisés,
1500     // - les types de demande qui créé de nouveau DI, dont l'état du DI
1501     // ciblé fait partie des états autorisés et dont le DA du DI ciblé
1502     // est accordé,
1503     // - les types de demande qui créé de nouveau DI, dont les types
1504     // de(s) DI en cours sur le DA ciblé accordé, sont identique(s) à
1505     // la liste des types de DI compatibles,
1506     // - les types de demande qui créé de nouveau DI, dont les types
1507     // de(s) DI en cours sur le DA ciblé en cours d'instruction sont
1508     // identique(s) à la liste des types de DI compatibles et dont le
1509     // DI initial n'est pas de compétence SITADEL "au nom de la commune".
1510     return sprintf('
1511     SELECT DISTINCT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1512     FROM %1$sdemande_type
1513     INNER JOIN %1$sdossier_autorisation_type_detaille
1514     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1515     INNER JOIN %1$slien_demande_type_etat
1516     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1517     INNER JOIN %1$setat
1518     ON lien_demande_type_etat.etat = etat.etat
1519     INNER JOIN %1$sdossier
1520     ON dossier.dossier = \'%2$s\'
1521     AND etat.etat = dossier.etat
1522     INNER JOIN %1$sdossier_autorisation
1523     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1524     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1525     WHERE demande_type.dossier_instruction_type IS NULL
1526     AND demande_type.demande_nature = %3$s
1527     UNION
1528     SELECT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1529     FROM %1$sdemande_type
1530 softime 12847 INNER JOIN %1$sdossier_instruction_type
1531     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1532 softime 10808 INNER JOIN %1$sdossier_autorisation_type_detaille
1533     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1534     INNER JOIN %1$slien_demande_type_etat
1535     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1536     INNER JOIN %1$setat
1537     ON lien_demande_type_etat.etat = etat.etat
1538     INNER JOIN %1$sdossier
1539     ON dossier.dossier = \'%2$s\'
1540     AND etat.etat = dossier.etat
1541     INNER JOIN %1$sdossier_autorisation as da
1542     ON da.dossier_autorisation = dossier.dossier_autorisation
1543     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = da.dossier_autorisation_type_detaille
1544     WHERE demande_type.dossier_instruction_type IS NOT NULL
1545 softime 12847 AND dossier_instruction_type.sous_dossier IS NOT TRUE
1546 softime 10808 AND demande_type.demande_nature = %3$s
1547     AND da.etat_dossier_autorisation = %4$s
1548     AND (
1549     SELECT count(dossier)
1550     FROM %1$sdossier
1551     INNER JOIN %1$sdossier_autorisation
1552     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1553     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1554     INNER JOIN %1$setat
1555     ON dossier.etat = etat.etat
1556     AND etat.statut = \'encours\'
1557     ) = 0
1558     UNION
1559     SELECT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1560     FROM %1$sdemande_type
1561 softime 12847 INNER JOIN %1$sdossier_instruction_type
1562     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1563 softime 10808 INNER JOIN %1$sdossier
1564     ON dossier.dossier = \'%2$s\'
1565     INNER JOIN %1$sdossier_autorisation as da
1566     ON da.dossier_autorisation = dossier.dossier_autorisation
1567     INNER JOIN %1$sautorite_competente
1568     ON autorite_competente.autorite_competente = dossier.autorite_competente
1569     WHERE demande_type.dossier_instruction_type IS NOT NULL
1570 softime 12847 AND dossier_instruction_type.sous_dossier IS NOT TRUE
1571 softime 10808 AND (
1572     SELECT array_agg(DISTINCT(dossier_instruction_type))
1573     FROM %1$sdossier
1574     INNER JOIN %1$sdossier_autorisation
1575     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1576     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1577     INNER JOIN %1$setat
1578     ON dossier.etat = etat.etat
1579     AND etat.statut = \'encours\'
1580     ) <@ (
1581     SELECT array_agg(DISTINCT(dossier_instruction_type))
1582     FROM %1$slien_demande_type_dossier_instruction_type
1583     WHERE lien_demande_type_dossier_instruction_type.demande_type = demande_type.demande_type
1584     )
1585     AND demande_type.demande_nature = %3$s
1586     AND (
1587     da.etat_dossier_autorisation = %4$s
1588     OR (
1589     da.etat_dossier_autorisation = %5$s
1590     AND autorite_competente.autorite_competente_sitadel != %6$s
1591     ))
1592     ORDER BY lib, dt
1593     ',
1594     DB_PREFIXE,
1595     $idx_dossier,
1596     intval($id_demande_nature),
1597     $etat_da_accord, // Identifiant de l'état de dossier d'autorisation : Accordé
1598     $etat_da_encours, // Identifiant de l'état de dossier d'autorisation : En cours
1599     $autorite_competente_sitadel_com // Identifiant de l'autorité compétente SITADEL : 1 - au nom de la commune
1600     );
1601     }
1602    
1603 mbroquet 3730 /*
1604     * Ajout du fielset
1605     * Add fieldset
1606     */
1607     function setLayout(&$form, $maj){
1608 softime 6565 if ( $maj < 2) {
1609 mbroquet 3730
1610 softime 6565 // Type de dossier/demande
1611     $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1612     $form->setFieldset('om_collectivite','D'
1613 mbroquet 3730 ,_('Type de dossier/demande'));
1614 softime 6565 $form->setFieldset('etat','F','');
1615     $form->setBloc('etat','F');
1616    
1617     // Autorisation contestée
1618     $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1619     $form->setFieldset('autorisation_contestee','D'
1620     ,_('Autorisation contestée'));
1621     $form->setFieldset('autorisation_contestee','F','');
1622     $form->setBloc('autorisation_contestee','F');
1623    
1624     // Date de la demande
1625 softime 10573 $form->setBloc('date_depot_mairie','D',"","col_4 demande_hidden_bloc");
1626     $form->setFieldset('date_depot_mairie','D',_('Date de la demande'));
1627 softime 6565 $form->setFieldset('date_demande','F','');
1628     $form->setBloc('date_demande','F');
1629    
1630 softime 8989 // En mode ajout et si l'option de saisie manuelle est activée
1631     if ($maj == 0
1632     && $this->f->is_option_dossier_saisie_numero_enabled() === true) {
1633    
1634     // Numéro de dossier
1635     $form->setBloc('num_doss_manuel','D',"","col_8 demande_hidden_bloc bloc_numero_dossier");
1636     $form->setBloc('num_doss_manuel','DF','', 'col_3 bloc_activ_num_manu saisie_manuelle');
1637     $form->setBloc('num_doss_type_da','D',"","col_8 bloc_num_manu");
1638     $form->setFieldset('num_doss_type_da','D',__("Numéro de dossier"));
1639     $form->setBloc('num_doss_type_da','DF','','type-da');
1640     $form->setBloc('num_doss_code_depcom','DF','','depcom');
1641     $form->setBloc('num_doss_annee','DF','','annee');
1642     $form->setBloc('num_doss_division','DF','','division');
1643     $form->setBloc('num_doss_sequence','DF','','sequence');
1644     $form->setFieldset('num_doss_sequence','F');
1645     $form->setBloc('num_doss_sequence','F');
1646     $form->setBloc('num_doss_sequence','F');
1647     }
1648    
1649 softime 10573 // En mode ajout et si l'option de saisie manuelle est activée
1650     if ($maj == 0
1651     && $this->f->is_option_dossier_saisie_numero_complet_enabled() === true) {
1652    
1653     // Numéro de dossier
1654     $form->setBloc('num_doss_manuel','D',"","col_8 demande_hidden_bloc bloc_numero_complet_dossier");
1655     $form->setBloc('num_doss_manuel','DF','', 'col_3 bloc_activ_num_manu saisie_manuelle');
1656     $form->setBloc('num_doss_complet','D',"","col_8 bloc_num_manu");
1657     $form->setFieldset('num_doss_complet','D',__("Numéro de dossier"));
1658     $form->setBloc('num_doss_complet','DF','','complet');
1659     $form->setFieldset('num_doss_complet','F');
1660     $form->setBloc('num_doss_complet','F');
1661     $form->setBloc('num_doss_complet','F');
1662     }
1663    
1664 softime 7067 // Localisation
1665 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1666 softime 6565 "col_12 localisation demande_hidden_bloc");
1667 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1668 softime 6565 $form->setFieldset('terrain_superficie','F','');
1669     $form->setBloc('terrain_superficie','F');
1670    
1671     // Demandeurs
1672     // → cf. formSpecificContent()
1673     }
1674     if ( $maj == 3 ) {
1675     $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1676     $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1677     $form->setFieldset('om_collectivite','D'
1678     ,_('Type de dossier/demande'));
1679     $form->setFieldset('dossier_autorisation','F','');
1680     $form->setBloc('dossier_autorisation','F');
1681 mbroquet 3730 /*Fin bloc 1*/
1682    
1683     // Affichage de l'état du dossier d'instruction
1684     $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1685     $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1686     $form->setFieldset('etat','F','');
1687     $form->setBloc('etat','F');
1688     $form->setBloc('etat','F');
1689    
1690 softime 6565 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1691    
1692 mbroquet 3730 /*Champ sur lequel s'ouvre le bloc 2 */
1693     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1694     $form->setFieldset('date_demande','D',_('Date de la demande'));
1695     $form->setFieldset('date_demande','F','');
1696     $form->setBloc('date_demande','F');
1697     /*Fin bloc 2*/
1698    
1699     /*Champ sur lequel s'ouvre le bloc 3 */
1700 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1701 mbroquet 3730 "localisation col_12 demande_hidden_bloc");
1702 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1703 mbroquet 3730 $form->setFieldset('terrain_superficie','F','');
1704     $form->setBloc('terrain_superficie','F');
1705     /*Fin bloc 4*/
1706     }
1707     }
1708    
1709     /*
1710     * Ajoute des actions sur les deux premiers select
1711     * Add actions on the two first select
1712     */
1713     function setOnchange(&$form,$maj){
1714     parent::setOnchange($form,$maj);
1715    
1716     $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1717 softime 6565 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1718 mbroquet 3730 }
1719    
1720     function setLib(&$form,$maj) {
1721     parent::setLib($form,$maj);
1722     //libelle des champs
1723 softime 10573 $form->setLib('date_depot_mairie', __('Date de dépôt en mairie'));
1724 mbroquet 3730 $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1725 softime 6565 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1726 mbroquet 3730 }
1727 softime 6565
1728 mbroquet 3730 /*
1729     * Cache le champ terrain_references_cadastrales
1730     * Hide the fiels terrain_references_cadastrales
1731     */
1732     function setType(&$form,$maj) {
1733     parent::setType($form,$maj);
1734    
1735     $form->setType('dossier_instruction', 'hidden');
1736 softime 10573 $form->setType('source_depot', 'hidden');
1737 mbroquet 3730 $form->setType('dossier_autorisation', 'hidden');
1738 softime 6565 $form->setType('autorisation_contestee', 'autorisation_contestee');
1739 mbroquet 3730
1740     $form->setType('instruction_recepisse', 'hidden');
1741     $form->setType('arrondissement', 'hidden');
1742 softime 10573 $form->setType('etat_transmission_platau', 'hidden');
1743 mbroquet 3730
1744     $form->setType('etat', 'hidden');
1745 softime 10573
1746     if ($this->f->is_option_date_depot_mairie_enabled() === true){
1747     $form->setType('date_depot_mairie', "date");
1748     } else {
1749     $form->setType('date_depot_mairie', "hidden");
1750     }
1751    
1752 softime 8329 //Le paramètre "dépôt électronique" n'est pas modifiable manuellement
1753     if ($maj == 0) {
1754     $form->setType('depot_electronique', 'hidden');
1755     }
1756 mbroquet 3730
1757 softime 10573 $form->setType("commune", "hidden");
1758    
1759 mbroquet 3730 // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1760     // sauf demande_type
1761     if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1762     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1763     $form->setType('etat', 'hiddenstatic');
1764     $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1765     $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1766     $form->setType('terrain_adresse_voie', 'hiddenstatic');
1767     $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1768     $form->setType('terrain_adresse_localite', 'hiddenstatic');
1769     $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1770     $form->setType('terrain_adresse_bp', 'hiddenstatic');
1771     $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1772     $form->setType('terrain_superficie', 'hiddenstatic');
1773     }
1774     if($maj == 1) {
1775 softime 8329 $form->setType('depot_electronique', 'hiddenstatic');
1776 mbroquet 3730 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1777     $form->setType('demande_type', 'selecthiddenstatic');
1778     }
1779     if($maj == 3) {
1780     $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1781     }
1782 softime 11418
1783     if($maj == 1 || $maj == 3) {
1784     // Numéro de dossier
1785     // Cache les champs inutiles lors de la consultation et de l'affichage du récépissé
1786     $form->setType('num_doss_manuel', 'hidden');
1787     $form->setType('num_doss_type_da', 'hidden');
1788     $form->setType('num_doss_code_depcom', 'hidden');
1789     $form->setType('num_doss_annee', 'hidden');
1790     $form->setType('num_doss_division', 'hidden');
1791     $form->setType('num_doss_sequence', 'hidden');
1792     $form->setType('num_doss_complet', 'hidden');
1793     }
1794    
1795 mbroquet 3730 }
1796    
1797 softime 10573
1798 mbroquet 3730 /**
1799     * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1800     * par l'utilisateur.
1801     *
1802     * @return integer identifiant du cerfa
1803     */
1804     function getIdCerfa() {
1805     if($this->cerfa != null) {
1806     return $this->cerfa;
1807     }
1808     // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1809 softime 14064 $qres = $this->f->get_one_result_from_db_query(
1810     sprintf(
1811     'SELECT
1812     dossier_autorisation_type_detaille.cerfa
1813     FROM
1814     %1$sdossier_autorisation_type_detaille
1815     JOIN %1$scerfa
1816     ON dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1817     WHERE
1818     NOW() <= om_validite_fin
1819     AND NOW() >= om_validite_debut
1820     AND dossier_autorisation_type_detaille = %2$d',
1821     DB_PREFIXE,
1822     intval($this->valF['dossier_autorisation_type_detaille'])
1823     ),
1824     array(
1825     "origin" => __METHOD__,
1826     )
1827 mbroquet 3730 );
1828 softime 14064 $this->cerfa = $qres["result"];
1829    
1830 mbroquet 3730 return $this->cerfa;
1831     }
1832    
1833    
1834     /**
1835     * Méthode permettant d'ajouter un dossier d'autorisation.
1836     *
1837     * @param integer $id identifiant de la demande
1838     * @param array $val tableau de valeurs postées via le formulaire
1839     *
1840     * @return boolean false si erreur
1841     */
1842 softime 8989 function ajoutDossierAutorisation($id, $val) {
1843 softime 7996 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1844     "obj" => "dossier_autorisation",
1845     "idx" => "]",
1846     ));
1847 mbroquet 3730 $id_etat_initial_da =
1848     $this->f->getParameter('id_etat_initial_dossier_autorisation');
1849    
1850     // Vérification de l'existance d'un état initial des DA dans la table
1851     // om_parametre afin d'éviter d'eventuelle erreur de base de données
1852     if(isset($id_etat_initial_da)) {
1853 softime 14064 $qres = $this->f->get_one_result_from_db_query(
1854     sprintf(
1855     'SELECT
1856     count(*)
1857     FROM
1858     %1$setat_dossier_autorisation
1859     WHERE
1860     etat_dossier_autorisation = %2$d',
1861     DB_PREFIXE,
1862     intval($id_etat_initial_da)
1863     ),
1864     array(
1865     "origin" => __METHOD__,
1866     "force_return" => true,
1867     )
1868 mbroquet 3730 );
1869 softime 14064 if ($qres["code"] !== "OK") {
1870 mbroquet 3730 return false;
1871     }
1872 softime 14064
1873     if($qres["result"] != 1) {
1874 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1875 softime 6565
1876 mbroquet 3730 return false;
1877 softime 6565 }
1878 mbroquet 3730
1879 softime 6565 // La méthode ajouter prend en paramètre un tableau associatif
1880     // contenant toutes les champs de la classe instanciée,
1881     // d'où l'initialisation du tableau en bouclant sur la liste des
1882     // champs du DA
1883     foreach($dossier_autorisation->champs as $value) {
1884     $valAuto[$value] = null;
1885 mbroquet 3730 }
1886 softime 6565
1887 softime 10573
1888     // si l'option 'commune' n'est pas activée
1889     $insee = null;
1890     if ($this->f->is_option_dossier_commune_enabled($this->valF['om_collectivite']) === false) {
1891    
1892     // On récupère les paramètres de la collectivité concernée
1893     // par la demande.
1894     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1895    
1896     // Le paramètre 'insee' est obligatoire si il n'est pas présent
1897     // dans le tableau des paramètres alors on stoppe le traitement.
1898     if (!isset($collectivite_parameters['insee'])) {
1899     $this->f->addToLog(
1900     __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1901     DEBUG_MODE
1902     );
1903     return false;
1904     }
1905    
1906     // enregistre le code insee
1907     $insee = $collectivite_parameters['insee'];
1908     }
1909    
1910     // si l'option 'commune' est activée
1911     else {
1912    
1913     // si la commune est définie
1914     if (! empty($this->valF['commune'])) {
1915    
1916     // récupère l'objet 'commune'
1917     $commune = $this->f->findObjectById("commune", $this->valF['commune']);
1918    
1919     // s'il est trouvé
1920     if (! empty($commune)) {
1921    
1922     // enregistre le code insee
1923     $insee = $commune->getVal('com');
1924     }
1925    
1926     // commune non-trouvée
1927     else {
1928     $this->f->addToLog(
1929     __METHOD__."(): ERROR commune '".$this->valF['commune']."' non-trouvée.",
1930     DEBUG_MODE
1931     );
1932     return false;
1933     }
1934     }
1935    
1936     // commune non-définie
1937     else {
1938     $this->f->addToLog(
1939     __METHOD__."(): ERROR champ 'commune' obligatoire.",
1940     DEBUG_MODE
1941     );
1942     return false;
1943     }
1944    
1945     // enregistre la commune
1946     $valAuto['commune'] = $this->valF['commune'];
1947     }
1948    
1949 softime 6565 // Définition des valeurs à insérer
1950 softime 10573 $valAuto['om_collectivite'] = $this->valF['om_collectivite'];
1951 softime 6565 $valAuto['dossier_autorisation']="";
1952     $valAuto['exercice']=null;
1953 softime 10573 $valAuto['insee'] = $insee;
1954 softime 6565 $valAuto['arrondissement']=
1955     $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1956     $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1957     $valAuto['erp_numero_batiment']=null;
1958     $valAuto['erp_ouvert']=null;
1959     $valAuto['erp_arrete_decision']=null;
1960     $valAuto['dossier_autorisation_type_detaille']=
1961     $this->valF['dossier_autorisation_type_detaille'];
1962 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true && $val['date_depot_mairie'] != null) {
1963     $valAuto['depot_initial']= $val['date_depot_mairie'];
1964     } else {
1965     $valAuto['depot_initial']=
1966     $this->dateDBToForm($this->valF['date_demande']);
1967     }
1968 softime 6565 $valAuto['terrain_references_cadastrales']=
1969     $this->valF['terrain_references_cadastrales'];
1970     $valAuto['terrain_adresse_voie_numero']=
1971     $this->valF['terrain_adresse_voie_numero'];
1972     $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1973     $valAuto['terrain_adresse_lieu_dit']=
1974     $this->valF['terrain_adresse_lieu_dit'];
1975     $valAuto['terrain_adresse_localite']=
1976     $this->valF['terrain_adresse_localite'];
1977     $valAuto['terrain_adresse_code_postal']=
1978     $this->valF['terrain_adresse_code_postal'];
1979     $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1980     $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1981     $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1982     $valAuto['numero_version']=-1;
1983 softime 10573 // Pour vérifier dans le dossier d'autorisation si déposé électroniquement
1984     $valAuto['depot_electronique']=$this->valF['depot_electronique'];
1985 softime 8989
1986     // saisie manuelle du numéro de dossier et division instructeur
1987     if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1988     isset($val['num_doss_sequence']) && !empty($val['num_doss_sequence'])) {
1989    
1990     $valAuto['numero_dossier_seq'] = $val['num_doss_sequence'];
1991    
1992     if (isset($val['num_doss_division'])) {
1993     $valAuto['division_instructeur'] = $val['num_doss_division'];
1994     }
1995     }
1996    
1997 softime 10573 $this->da_already_exists = false;
1998     // saisie manuelle du numéro de dossier complet
1999     if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
2000     isset($val['num_doss_complet']) && !empty($val['num_doss_complet'])) {
2001     //
2002     $valAuto['numero_dossier_complet'] = $val['num_doss_complet'];
2003     $dossier_autorisation_id = $val['num_doss_complet'];
2004 softime 14064
2005     // donnée utilisée pour le numéro de dossier complet
2006     $ref_num_dossier = $val['num_doss_complet'];
2007    
2008     // si l'option 'code_entité' est activée pour la collectivité
2009     if ($this->f->is_option_om_collectivite_entity_enabled($this->valF['om_collectivite'])) {
2010    
2011     // si le code entité n'est pas défini ou vide
2012     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
2013     if (! isset ($collectivite_parameters['code_entite'])
2014     || empty($collectivite_parameters['code_entite'])) {
2015    
2016     // affiche un message d'alerte
2017     $err_msg = sprintf(__("Paramètre '%s' manquant ou vide pour la collectivité '%s'"),
2018     'code_entite',
2019     $this->valF['om_collectivite']);
2020     $this->f->addToLog(__METHOD__."() : $err_msg", DEBUG_MODE);
2021     $this->addToMessage($err_msg.'<br/>');
2022     }
2023     // si le code entité est défini et non-vide
2024     else {
2025    
2026     // supprime le code entité du numéro de dossier
2027     $code_entite = $collectivite_parameters['code_entite'];
2028     $ref_num_dossier = preg_replace('/'.$code_entite.'[0-9]+$/', '', $ref_num_dossier);
2029     $this->f->addToLog(
2030     __METHOD__."(): suppression (temporaire) du code entité '$code_entite' ".
2031     "du dossier $ref_num_dossier (complet: ".$val['num_doss_complet'].")", DEBUG_MODE);
2032     }
2033     }
2034    
2035     $num_urba = $this->f->numerotation_urbanisme($ref_num_dossier);
2036 softime 10573 if (isset($num_urba['da'][0]) === true) {
2037     $dossier_autorisation_id = $num_urba['da'][0];
2038 softime 8989 }
2039 softime 10573 if ($this->f->findObjectById('dossier_autorisation', $dossier_autorisation_id) !== null) {
2040     $this->da_already_exists = true;
2041     }
2042 softime 6565 }
2043 softime 8989
2044 softime 10968 $valAuto['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
2045 softime 10573
2046     if ($this->da_already_exists === false) {
2047     // Ajout du dossier dans la base
2048     if($dossier_autorisation->ajouter($valAuto) === false) {
2049     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
2050     if (!empty($dossier_autorisation->msg)) {
2051     $this->f->addToLog(__METHOD__."() : ERROR - ".$dossier_autorisation->msg, DEBUG_MODE);
2052     $this->addToMessage($dossier_autorisation->msg.'<br/>');
2053     }
2054     return false;
2055     }
2056     $dossier_autorisation_id = $dossier_autorisation->valF['dossier_autorisation'];
2057     $this->f->addToLog(__METHOD__."() : DA ajouté : ".$dossier_autorisation_id, VERBOSE_MODE);
2058     }
2059    
2060 softime 6565 // Liaison du dossier ajouter à la demande
2061 softime 10573 $this->valF['dossier_autorisation'] = $dossier_autorisation_id;
2062 softime 6565
2063     return true;
2064 mbroquet 3730 }
2065    
2066 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
2067    
2068     return false;
2069 mbroquet 3730 }
2070    
2071     /**
2072     * Méthode permettant d'ajouter un dossier d'instruction.
2073     *
2074     * @param integer $id identifiant de la demande
2075     * @param array $val tableau de valeurs postées via
2076     * le formulaire
2077     * @param integer $dossier_instruction_type identifiant du DI type
2078     *
2079     * @return boolean false si erreur
2080     */
2081 softime 8989 function ajoutDossierInstruction($id, $val, $dossier_instruction_type) {
2082 softime 12847 // Le traitement de la création des dossiers et des sous-dossiers est
2083     // différent. Instancie la classe voulue pour permettre d'effectuer le
2084     // bon traitement d'ajout des dossiers
2085     if (! empty($val['sous_dossier']) && $val['sous_dossier'] == 't') {
2086     $dossier = $this->f->get_inst__om_dbform(array(
2087     "obj" => "sous_dossier",
2088     "idx" => "]",
2089     ));
2090     } else {
2091     $dossier = $this->f->get_inst__om_dbform(array(
2092     "obj" => "dossier",
2093     "idx" => "]",
2094     ));
2095     }
2096     // Initialisation du tableau contenant les valeurs qui serviront à créer le dossier
2097     $valInstr = array();
2098 mbroquet 3730 foreach($dossier->champs as $value) {
2099     $valInstr[$value] = null;
2100     }
2101 softime 10573 // TODO: remove because unused
2102 softime 7996 $datd = $this->f->get_inst__om_dbform(array(
2103     "obj" => "dossier_autorisation_type_detaille",
2104     "idx" => $this->valF['dossier_autorisation_type_detaille'],
2105     ));
2106 mbroquet 3730
2107     /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
2108     * versionning
2109     */
2110     $dossier->setDossierInstructionType($dossier_instruction_type);
2111    
2112     // Définition des valeurs à entrée dans la table
2113     $valInstr['om_collectivite']=$this->valF['om_collectivite'];
2114     $valInstr['dossier_instruction_type']=$dossier_instruction_type;
2115     $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
2116 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true){
2117     $valInstr['date_depot_mairie'] = $val['date_depot_mairie'];
2118     }
2119 mbroquet 3730 $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
2120     $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
2121     $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
2122     $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
2123     $valInstr['annee']=$annee->format("y");
2124 softime 8329 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
2125     $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
2126 mbroquet 3730 $valInstr['terrain_references_cadastrales']=
2127     $this->valF['terrain_references_cadastrales'];
2128     $valInstr['terrain_adresse_voie_numero']=
2129     $this->valF['terrain_adresse_voie_numero'];
2130     $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
2131     $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
2132     $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
2133     $valInstr['terrain_adresse_code_postal']=
2134     $this->valF['terrain_adresse_code_postal'];
2135     $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
2136     $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
2137     $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
2138     $valInstr['description']="";
2139     $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
2140 softime 6565 if ($this->valF["autorisation_contestee"] != "") {
2141     $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
2142     }
2143 softime 10573 $valInstr['demande_type'] = $this->valF['demande_type'];
2144     $valInstr['etat_transmission_platau'] = $val['etat_transmission_platau'];
2145 mbroquet 3730
2146     /*
2147     * Gestion de la qualification
2148     * */
2149     // Initialise le champ à false
2150     $valInstr['a_qualifier'] = false;
2151    
2152     // Récupère l'information depuis le type de la demande
2153 softime 14064 $inst_demande_type = $this->f->get_inst__om_dbform(array(
2154     "obj" => "demande_type",
2155     "idx" => intval($valInstr['demande_type']),
2156     ));
2157     $qualification = $inst_demande_type->getVal('qualification');
2158 mbroquet 3730
2159     // Si le dossier doit être à qualifier
2160     if ($qualification === 't') {
2161     // Met le champ à true
2162     $valInstr['a_qualifier'] = true;
2163     }
2164    
2165 softime 6929 /*
2166     * Gestion de la simulation des taxes
2167     */
2168     // Récupère l'instance du cerfa lié au type détaillé du DA
2169 softime 12847 // TODO : à vérifier mais cette variable n'est pas utilisée et doit être supprimée
2170 softime 6929 $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
2171    
2172 softime 10573 // Récupère le paramétrage des taxes
2173     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
2174     // Si un paramétrage des taxes est récupéré pour la collectivité
2175     if ($inst_taxe_amenagement !== null) {
2176     // Si la taxe d'aménagement à un seul secteur
2177     if ($inst_taxe_amenagement->has_one_secteur() == true) {
2178     // Sélectionne l'unique secteur automatiquement
2179     $valInstr['tax_secteur'] = 1;
2180     }
2181     }
2182 softime 6929
2183 softime 10573 // saisie de la commune
2184     if (array_key_exists('commune', $this->valF)) {
2185     $valInstr['commune'] = $this->valF['commune'];
2186     }
2187 softime 6929
2188 softime 10573 // saisie de l'affectation automatique
2189     if (isset($this->valF['affectation_automatique'])) {
2190     $valInstr['affectation_automatique'] = $this->valF['affectation_automatique'];
2191 mbroquet 3730 }
2192    
2193 softime 10573 // saisie manuelle du numéro de dossier complet
2194     if (isset($val['num_doss_manuel']) === true && $val['num_doss_manuel'] == 'Oui' &&
2195     isset($val['num_doss_complet']) === true && empty($val['num_doss_complet']) === false) {
2196     //
2197     $valInstr['numero_dossier_complet'] = $val['num_doss_complet'];
2198     }
2199    
2200 softime 10968 $valInstr['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
2201 softime 10573
2202 softime 12847 // Récupération du numéro du dossier parent pour les sous-dossier
2203     if (! empty($val['sous_dossier'])
2204     && $val['sous_dossier'] == true
2205     && ! empty($val['dossier_parent'])) {
2206     $valInstr['dossier_parent'] = $val['dossier_parent'];
2207     }
2208    
2209 mbroquet 3730 //
2210 softime 10573 $this->f->addToLog(__METHOD__."() : ajout du dossier", EXTRA_VERBOSE_MODE);
2211 softime 12847
2212 softime 8989 if($dossier->ajouter($valInstr) === false) {
2213 softime 10573 $this->f->addToLog($dossier->msg, DEBUG_MODE);
2214 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
2215 softime 10573 // Affiche l'erreur empêchant a création du dossier d'instruction
2216     $this->addToMessage($dossier->msg);
2217 mbroquet 3730 return false;
2218     }
2219 softime 10573 else {
2220     $this->f->addToLog(__METHOD__."() : dossier ajouté", VERBOSE_MODE);
2221     }
2222    
2223 softime 10207
2224     // Si le dossier n'est pas un initial, que le type de dossier d'autorisation détaillé
2225     // est dans la liste du paramètre erp__dossier__nature__at
2226     // ou (que le type de dossier d'autorisation détaillé est dans la liste du paramètre erp__dossier__nature_pc
2227     // et que le type de dossier d'instruction est dans la liste du paramètre erp__dossier__type_di__pc)
2228     // alors la valeur de la case ERP du dossier initial est appliquée au nouveau dossier
2229     if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2230 softime 14064 if (($dossier->get_di_numero_suffixe($dossier->valF['dossier']) != ''
2231     || $dossier->get_di_numero_suffixe($dossier->valF['dossier']) != '0')) {
2232 softime 10207
2233     if ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
2234     || ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2235     && in_array($dossier->valF['dossier_instruction_type'], explode(";", $this->f->getParameter('erp__dossier__type_di__pc'))) === true)) {
2236    
2237     // On récupère la valeur de la case erp du dossier d'instruction initial
2238 softime 13137 $qres = $this->f->get_one_result_from_db_query(
2239     sprintf(
2240     'SELECT
2241     erp
2242     FROM
2243     %1$sdossier
2244 softime 14064 LEFT JOIN %1$sdossier_instruction_type
2245     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2246 softime 13137 WHERE
2247     dossier.dossier_autorisation = (
2248     SELECT
2249     dossier_autorisation.dossier_autorisation
2250     FROM
2251     %1$sdossier_autorisation
2252 softime 14064 LEFT JOIN %1$sdossier
2253     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2254 softime 13137 WHERE
2255     dossier = \'%2$s\'
2256     )
2257     AND dossier_instruction_type.code = \'P\'',
2258     DB_PREFIXE,
2259     $this->f->db->escapeSimple($dossier->valF['dossier'])
2260     ),
2261     array(
2262     "origin" => __METHOD__,
2263     "force_return" => true,
2264     )
2265 softime 10207 );
2266 softime 13137 if ($qres["code"] !== "OK") {
2267     $this->f->addToLog(
2268     __METHOD__."() : ERROR - Impossible de récupérer la valeur de la case ERP du DI initial",
2269     DEBUG_MODE
2270     );
2271 softime 10207 return false;
2272     }
2273    
2274     // On met à jour la case erp en fonction du DI initial
2275     $valF = array();
2276 softime 13137 $valF['erp'] = isset($qres["result"]) === true && $qres["result"] === 't' ? true : false;
2277 softime 10207
2278     $res = $this->f->db->autoExecute(
2279 softime 10573 DB_PREFIXE."dossier",
2280 softime 10207 $valF,
2281     DB_AUTOQUERY_UPDATE,
2282     $dossier->clePrimaire."='".$dossier->valF['dossier']."'"
2283     );
2284    
2285     if ($this->f->isDatabaseError($res, true)) {
2286     // Appel de la methode de recuperation des erreurs
2287     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2288     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'appliquer la case ERP sur le dossier d'instruction.", DEBUG_MODE);
2289     $this->correct = false;
2290     return false;
2291     }
2292     }
2293     }
2294     }
2295    
2296 mbroquet 3730 //Affichage de message à l'utilisateur concernant un problème lors de
2297     //l'affectation de l'instructeur au dossier d'instruction
2298     if ($dossier->valF['dossier_autorisation'] === '' &&
2299     $dossier->valF['instructeur'] === null){
2300     $this->addToMessage(
2301     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2302     );
2303     }
2304     elseif ( $dossier->valF['instructeur'] === null ){
2305     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2306     $this->addToMessage("<br/> ".
2307     _("Pensez a assigner un instructeur a ce dossier.")
2308     );
2309     } else {
2310     $this->addToMessage(
2311     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2312     );
2313     }
2314     }
2315    
2316     // Liaison du dossier ajouter à la demande
2317     $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
2318    
2319     //
2320     return true;
2321     }
2322    
2323     /**
2324     * Méthode permettant d'ajouter les données techniques d'un DA.
2325     *
2326     * @param integer $id identifiant de la demande
2327     * @param array $val tableau de valeurs postées via le formulaire
2328     *
2329     * @return boolean false si erreur
2330     */
2331 softime 8989 function ajoutDonneesTechniquesDA($id, $val) {
2332 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
2333     "obj" => "donnees_techniques",
2334     "idx" => "]",
2335     ));
2336 mbroquet 3730
2337     // Champs tous à NULL car seul le champ concernant le dossier
2338     // d'autorisation sera rempli
2339     foreach($this->DTDA->champs as $value) {
2340     $valF[$value] = null;
2341     }
2342     // Ajout du numéro de dossier d'instruction
2343     $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
2344     // Identifiant du cerfa
2345     $valF['cerfa'] = $this->getIdCerfa();
2346     //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
2347     if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
2348     // Ajout des données techniques
2349 softime 8989 if($this->DTDA->ajouter($valF) === false) {
2350 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
2351     return false;
2352     }
2353 softime 10573 $this->f->addToLog(__METHOD__."() : DTDA ajoutées", VERBOSE_MODE);
2354 mbroquet 3730 }
2355     else {
2356     //On indique que le dossier d'autorisation n'a pas de données techniques
2357     $this->DTDA = null;
2358     //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
2359     $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
2360     return -1;
2361     }
2362    
2363     //
2364     return true;
2365     }
2366    
2367     /**
2368     * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
2369     **/
2370 softime 8989 function ajoutLiensDossierAutorisation($id, $val) {
2371 softime 9864 // Vérifie que le dossier d'instruction possède déjà un petitionnaire principal
2372 softime 13137 $qres = $this->f->get_one_result_from_db_query(
2373     sprintf(
2374     'SELECT
2375     COUNT(lien_dossier_autorisation_demandeur)
2376     FROM
2377     %1$slien_dossier_autorisation_demandeur
2378     WHERE
2379     dossier_autorisation = \'%2$s\'
2380     AND petitionnaire_principal IS TRUE',
2381     DB_PREFIXE,
2382     $this->f->db->escapeSimple($this->valF['dossier_autorisation'])
2383     ),
2384     array(
2385     "origin" => __METHOD__,
2386     "force_return" => true,
2387     )
2388 softime 9864 );
2389 softime 13137 if ($qres["code"] !== "OK") {
2390 softime 9864 return false;
2391     }
2392     $already_principal = false;
2393 softime 13137 if ($qres["result"] > 0) {
2394 softime 9864 $already_principal = true;
2395     }
2396    
2397 mbroquet 3730 // Création des liens entre le dossier autorisation et les demandeurs
2398 softime 7996 $ldad = $this->f->get_inst__om_dbform(array(
2399     "obj" => "lien_dossier_autorisation_demandeur",
2400     "idx" => "]",
2401     ));
2402 mbroquet 3730 // Recupération des demandeurs liés à la demande
2403 softime 8989 $sql = str_replace(
2404     "<demande>",
2405     $this->valF['demande'],
2406     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2407     );
2408     $sql .= " AND lien_demande_demandeur.demandeur NOT IN (
2409 mbroquet 3730 SELECT lien_dossier_autorisation_demandeur.demandeur
2410     FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
2411     WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
2412 softime 8989 '".$this->valF['dossier_autorisation']."')";
2413     $res = $this->f->db->query($sql);
2414     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2415 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2416     return false;
2417     }
2418     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2419 softime 9864 $can_add = true;
2420 mbroquet 3730 $row['lien_dossier_autorisation_demandeur'] = NULL;
2421     $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
2422 softime 9864 // La liaison n'est pas ajoutée si celle-ci concerne un pétitionnaire principal
2423     // alors que le DA possède est déjà lié à un petitionnaire principal
2424     if ($row['petitionnaire_principal'] === 't'
2425     && $already_principal === true) {
2426     //
2427     $can_add = false;
2428 mbroquet 3730 }
2429 softime 9864 if ($can_add === true) {
2430     $add = $ldad->ajouter($row);
2431     if ($add === false) {
2432     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
2433     return false;
2434     }
2435     }
2436 mbroquet 3730 }
2437 softime 10573 $this->f->addToLog(__METHOD__."() : liens demandeurs DA ajoutés", VERBOSE_MODE);
2438 mbroquet 3730
2439     //
2440     return true;
2441     }
2442    
2443     /**
2444     * Ajout des liens demandeurs / dossier d'autorisation
2445     **/
2446 softime 8989 function ajoutLiensDossierInstruction($id, $val) {
2447 mbroquet 3730 // Création des liens entre le dossier instruction et les demandeurs
2448 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
2449     "obj" => "lien_dossier_demandeur",
2450     "idx" => "]",
2451     ));
2452 mbroquet 3730 // Recupération des demandeurs liés à la demande
2453 softime 8989 $sql = str_replace(
2454     "<demande>",
2455     $this->valF['demande'],
2456     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2457     );
2458     $res = $this->f->db->query($sql);
2459     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2460 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2461     return false;
2462     }
2463     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2464     $row['lien_dossier_demandeur'] = NULL;
2465     $row['dossier'] = $this->valF['dossier_instruction'];
2466 softime 8989 if ($ldd->ajouter($row) === false) {
2467 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
2468     return false;
2469     }
2470     }
2471 softime 10573 $this->f->addToLog(__METHOD__."() : liens demandeurs DI ajoutés", VERBOSE_MODE);
2472 mbroquet 3730
2473     //
2474     return true;
2475     }
2476    
2477     /*
2478     * Récupère l'identifiant d'un arrondissement à partir d'un code postal
2479     */
2480     function getArrondissement($terrain_adresse_code_postal){
2481    
2482     $arrondissement = NULL;
2483    
2484     $sql = "SELECT
2485     arrondissement
2486     FROM
2487     ".DB_PREFIXE."arrondissement
2488     WHERE
2489     code_postal = '$terrain_adresse_code_postal' ";
2490     $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
2491    
2492 softime 8989 $res = $this->f->db->query($sql);
2493 mbroquet 3730 $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2494     $this->f->isDatabaseError($res);
2495    
2496     if( $res->numrows() > 0 ) {
2497    
2498     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2499     $arrondissement = $row['arrondissement'];
2500     }
2501    
2502     return $arrondissement;
2503     }
2504    
2505     /*
2506     * Récupère l'évènement lié à un type de demande
2507     */
2508     function getEvenement($demande_type){
2509    
2510     $evenement = null;
2511    
2512     $sql =
2513     "SELECT
2514     evenement
2515     FROM
2516     ".DB_PREFIXE."demande_type
2517     WHERE
2518     demande_type = $demande_type";
2519    
2520 softime 8989 $res = $this->f->db->query($sql);
2521 mbroquet 3730 $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2522     $this->f->isDatabaseError($res);
2523    
2524     if ( $res->numrows() > 0 ){
2525    
2526     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2527     $evenement = $row['evenement'];
2528     }
2529    
2530     return $evenement;
2531     }
2532    
2533     /**
2534 softime 8989 * TRIGGER - triggerajouter.
2535     *
2536     * - Ajout des dossiers
2537     *
2538     * @return boolean
2539     */
2540     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2541     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2542     //
2543 softime 10573 // Le mode MC nécessite des paramètres spécifiques
2544     if ($this->f->is_option_om_collectivite_entity_enabled($this->valF['om_collectivite']) === true) {
2545     $parameters = $this->f->getCollectivite(intval($this->valF['om_collectivite']));
2546     if ($parameters['code_entite'] === null) {
2547     $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     $valInstr['commentaire'] = NULL;
2906 softime 11418 $valInstr['envoye_cl_platau'] = "f";
2907 softime 10573
2908 mbroquet 3730 // Récupération des champs archive si cette demande a créée un dossier
2909     // d'instruction mais pas un P0
2910 softime 14064 if (!is_null($this->valF['dossier_instruction'])
2911     && $this->valF['dossier_instruction'] !== "" ) {
2912 mbroquet 3730 // Requête
2913 softime 14064 $qres = $this->f->get_one_result_from_db_query(
2914     sprintf(
2915     'SELECT
2916     dossier_instruction_type.code
2917     FROM
2918     %1$sdemande_type
2919     LEFT JOIN %1$sdossier_instruction_type
2920     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2921     WHERE
2922     demande_type.demande_type = %2$d',
2923     DB_PREFIXE,
2924     intval($this->valF['demande_type'])
2925     ),
2926     array(
2927     "origin" => __METHOD__,
2928     "force_return" => true,
2929     )
2930     );
2931     if ($qres["code"] !== "OK") {
2932 mbroquet 3730 return false;
2933     }
2934 softime 14064 $res = $qres["result"];
2935 softime 10573
2936     // On vérifie qu'il ne s'agit pas d'une nouvelle demande
2937     if (get_called_class() !== 'demande_nouveau_dossier') {
2938 mbroquet 3730 $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
2939    
2940     if ($res == false) {
2941 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);
2942 mbroquet 3730 return false;
2943     }
2944    
2945     if (isset($res['archive_delai'])) {
2946     $valInstr['archive_delai']=$res["archive_delai"];
2947     }
2948     if (isset($res['archive_date_complet'])) {
2949     $valInstr['archive_date_complet']=$res["archive_date_complet"];
2950     }
2951     if (isset($res['archive_date_dernier_depot'])) {
2952     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
2953     }
2954     if (isset($res['archive_date_rejet'])) {
2955     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
2956     }
2957     if (isset($res['archive_date_limite'])) {
2958     $valInstr['archive_date_limite']=$res["archive_date_limite"];
2959     }
2960     if (isset($res['archive_date_notification_delai'])) {
2961     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
2962     }
2963     if (isset($res['archive_accord_tacite'])) {
2964     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
2965     }
2966     if (isset($res['archive_etat'])) {
2967     $valInstr['archive_etat']=$res["archive_etat"];
2968     }
2969     if (isset($res['archive_date_decision'])) {
2970     $valInstr['archive_date_decision']=$res["archive_date_decision"];
2971     }
2972     if (isset($res['archive_avis'])) {
2973     $valInstr['archive_avis']=$res["archive_avis"];
2974     }
2975     if (isset($res['archive_date_validite'])) {
2976     $valInstr['archive_date_validite']=$res["archive_date_validite"];
2977     }
2978     if (isset($res['archive_date_achevement'])) {
2979     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2980     }
2981     if (isset($res['archive_date_chantier'])) {
2982     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2983     }
2984     if (isset($res['archive_date_conformite'])) {
2985     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2986     }
2987     if (isset($res['archive_incompletude'])) {
2988     $valInstr['archive_incompletude']=$res["archive_incompletude"];
2989     }
2990     if (isset($res['archive_incomplet_notifie'])) {
2991     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2992     }
2993     if (isset($res['archive_evenement_suivant_tacite'])) {
2994     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2995     }
2996     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2997     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2998     }
2999     if (isset($res['archive_etat_pendant_incompletude'])) {
3000     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
3001     }
3002     if (isset($res['archive_date_limite_incompletude'])) {
3003     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
3004     }
3005     if (isset($res['archive_delai_incompletude'])) {
3006     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
3007     }
3008     if (isset($res['archive_autorite_competente'])) {
3009     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
3010     }
3011 softime 6565 if (isset($res['archive_date_cloture_instruction'])) {
3012     $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
3013     }
3014     if (isset($res['archive_date_premiere_visite'])) {
3015     $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
3016     }
3017     if (isset($res['archive_date_derniere_visite'])) {
3018     $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
3019     }
3020     if (isset($res['archive_date_contradictoire'])) {
3021     $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
3022     }
3023     if (isset($res['archive_date_retour_contradictoire'])) {
3024     $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
3025     }
3026     if (isset($res['archive_date_ait'])) {
3027     $valInstr['archive_date_ait'] = $res['archive_date_ait'];
3028     }
3029     if (isset($res['archive_date_transmission_parquet'])) {
3030     $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
3031     }
3032 softime 8989 if (isset($res['archive_date_affichage'])) {
3033     $valInstr['archive_date_affichage'] = $res['archive_date_affichage'];
3034     }
3035 softime 10573 if (isset($res['archive_pec_metier'])) {
3036     $valInstr['archive_pec_metier'] = $res['archive_pec_metier'];
3037     }
3038     if (isset($res['archive_a_qualifier'])) {
3039     $valInstr['archive_a_qualifier'] = $res['archive_a_qualifier'];
3040     }
3041 mbroquet 3730 }
3042     }
3043    
3044     // Création d'un nouveau dossier
3045 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3046     "obj" => "instruction",
3047     "idx" => "]",
3048     ));
3049 softime 9245 $instruction->valF = array();
3050 softime 8989 if ($instruction->ajouter($valInstr) === false) {
3051 nmeucci 3876 // Suppression des messages valides puisque erreur
3052     $this->msg = '';
3053     $this -> addToMessage($instruction->msg);
3054 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
3055     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
3056     return false;
3057     }
3058 softime 10573 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) ajoutée", VERBOSE_MODE);
3059 mbroquet 3730
3060     // Finalisation du document
3061     $_GET['obj']='instruction';
3062     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
3063 softime 7996 $instruction_final = $this->f->get_inst__om_dbform(array(
3064     "obj" => "instruction",
3065     "idx" => $_GET['idx'],
3066     ));
3067    
3068     // Si l'instruction a une lettre type associée
3069     // ET si elle n'est pas déjà finalisée
3070     if($instruction_final->getVal('lettretype') != ""
3071     && $instruction_final->getVal('om_final_instruction') !== 't') {
3072 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
3073     $instruction_final->setParameter('maj',100);
3074     // On finalise l'événement d'instruction
3075 softime 10573 $this->f->addToLog(__METHOD__."() : finalisation de l'instruction '$evenement' ($lettretype) ...", VERBOSE_MODE);
3076 mbroquet 3730 $res = $instruction_final->finalize();
3077 softime 10573 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) finalisée", VERBOSE_MODE);
3078 softime 5024 // Si échec cela ne stoppe pas la création du dossier
3079     // et l'utilisateur n'en est pas informé dans l'IHM
3080     // mais l'erreur est loguée
3081 mbroquet 3730 if ($res === false) {
3082     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
3083     }
3084     }
3085    
3086     // Mise à jour de la demande
3087     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
3088     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
3089 softime 7996 $demande_instance = $this->f->get_inst__om_dbform(array(
3090     "obj" => "demande",
3091     "idx" => $this->valF['demande'],
3092     ));
3093 softime 8989 if ($demande_instance->modifier($this->valF) === false) {
3094 mbroquet 3730 $this -> addToMessage($demande_instance->msg);
3095     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
3096     return false;
3097     }
3098 softime 10573 $this->f->addToLog(__METHOD__."() : demande mise à jour", VERBOSE_MODE);
3099 mbroquet 3730
3100 softime 8329 // Instance du dossier d'autorisation
3101 softime 6565 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
3102    
3103 softime 8329 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
3104 softime 7366 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
3105 softime 8329 && $inst_da->is_dossier_autorisation_visible() === true) {
3106    
3107     // Permet de forcer la regénération de la clé citoyen
3108     $force = false;
3109    
3110     // Regénération de la clé citoyen si le type de demande le demande
3111     $regeneration_cle_citoyen = $this->get_demande_type_regeneration_cle_citoyen($val['demande_type']);
3112     if ($regeneration_cle_citoyen === true) {
3113     $force = true;
3114     }
3115    
3116 mbroquet 3730 // Met à jour la clé d'accès au portail citoyen dans le dossier
3117     // d'autorisation
3118 softime 8329 $update = $inst_da->update_citizen_access_key($force);
3119 mbroquet 3730 //
3120     if ($update !== true) {
3121     //
3122     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
3123     return false;
3124     }
3125     }
3126    
3127 jymadier 4441 // Si l'instruction initiale a une lettre type liée
3128     if ($instruction->valF['lettretype'] !== ''
3129     && $instruction->valF['lettretype'] !== null) {
3130    
3131     // Affichage du récépissé de la demande
3132     $this -> addToMessage("<a
3133     class='lien' id='link_demande_recepisse'
3134     title=\""._("Telecharger le recepisse de la demande")."\"
3135 softime 7996 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
3136 jymadier 4441 $this->valF[$this->clePrimaire]."' target='_blank'>
3137     <span
3138     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
3139     title=\""._("Telecharger le recepisse de la demande")."\">".
3140     _("Telecharger le recepisse de la demande").
3141     "</span>".
3142     _("Telecharger le recepisse de la demande")."
3143     </a><br/>");
3144     }
3145     }
3146    
3147 fmichon 4708 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
3148     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
3149    
3150     /**
3151     * Option de numérisation.
3152     */
3153     // Si l'option est activée
3154     if ($this->f->is_option_digitalization_folder_enabled() === true) {
3155 mbroquet 3730 // Création du répertoire de numérisation pour le dossier en
3156     // question.
3157     $ret = $inst_di->create_or_touch_digitalization_folder();
3158     // Si la création a échouée
3159     if ($ret !== true) {
3160     //
3161     $this->msg = "";
3162     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
3163     return false;
3164     }
3165     }
3166    
3167 fmichon 4708 /**
3168     * Interface avec le référentiel ERP.
3169     *
3170     * (WS->ERP)[109] Retrait de la demande -> AT
3171     * Déclencheur :
3172     * - L'option ERP est activée
3173     * - Le dossier est de type AT
3174     * - Le dossier est marqué comme "connecté au référentiel ERP"
3175     * - Le formulaire d'ajout de demande est validé avec un type de
3176     * demande correspondant à une demande de retrait
3177     */
3178 mbroquet 3730 //
3179 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3180 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3181     && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3182     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
3183     //
3184     $infos = array(
3185     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3186     );
3187     //
3188     $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
3189     if ($ret !== true) {
3190     $this->cleanMessage();
3191     $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
3192     return false;
3193     }
3194     $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
3195     }
3196    
3197     /**
3198     * Interface avec le référentiel ERP.
3199     *
3200     * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
3201     * Déclencheur :
3202     * - L'option ERP est activée
3203     * - Le dossier est de type AT
3204     * - Le dossier est marqué comme "connecté au référentiel ERP"
3205     * - Le formulaire d'ajout de demande est validé avec un type de
3206     * demande correspondant à un dépôt de pièces
3207     */
3208     //
3209 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3210 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3211     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3212     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
3213 softime 6391 // Définit le type de pièce par l'état du dossier
3214     $type_piece = "supplementaire";
3215     if ($etat_di_before_instr === 'incomplet') {
3216     $type_piece = "complementaire";
3217     }
3218 fmichon 4708 //
3219     $infos = array(
3220     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3221 softime 6391 "type_piece" => $type_piece,
3222 fmichon 4708 );
3223     //
3224     $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
3225     if ($ret !== true) {
3226     $this->cleanMessage();
3227     $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
3228     return false;
3229     }
3230     $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
3231     }
3232    
3233     /**
3234     * Interface avec le référentiel ERP.
3235     *
3236     * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
3237     * Déclencheur :
3238     * - L'option ERP est activée
3239     * - Le dossier est de type AT
3240     * - Le dossier est marqué comme "connecté au référentiel ERP"
3241     * - Le formulaire d'ajout de demande est validé avec un type de
3242     * demande correspondant à une demande de visite d'ouverture ERP
3243     */
3244     //
3245 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3246 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3247     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3248     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
3249     //
3250     $infos = array(
3251     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3252     );
3253     //
3254     $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
3255     if ($ret !== true) {
3256     $this->cleanMessage();
3257     $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
3258     return false;
3259     }
3260     $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
3261     }
3262    
3263     /**
3264     * Interface avec le référentiel ERP.
3265     *
3266     * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
3267     * Déclencheur :
3268     * - L'option ERP est activée
3269     * - Le dossier est de type PC
3270     * - Le dossier est marqué comme "connecté au référentiel ERP"
3271     * - Le formulaire d'ajout de demande est validé avec un type de
3272     * demande correspondant à une demande de visite d'ouverture ERP
3273     */
3274     //
3275 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3276 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3277     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
3278     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
3279     //
3280     $infos = array(
3281     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3282     );
3283     //
3284     $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
3285     if ($ret !== true) {
3286     $this->cleanMessage();
3287     $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
3288     return false;
3289     }
3290     $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
3291     }
3292    
3293 softime 13137 // À ce niveau le dossier d'instruction a été ajouté, si il est sur existant il faut qu'on lance la méthode
3294     // permettant de mettre à jour l'état de transmission et les tâches
3295     if ($inst_di->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
3296     $trigger_platau_required_fields = $inst_di->trigger_platau_required_fields($inst_di->getVal($inst_di->clePrimaire));
3297    
3298     // Gestion de l'erreur
3299     if (! $trigger_platau_required_fields) {
3300     $this->addToMessage(sprintf('%s %s',
3301     __("Une erreur s'est produite lors de la mise à jour de l'état de transmission du dossier."),
3302     __("Veuillez contacter votre administrateur.")
3303     ));
3304     $this->correct = false;
3305     return false;
3306     }
3307     }
3308    
3309 fmichon 4708 //
3310 mbroquet 3730 return true;
3311     }
3312 fmichon 4708
3313     /**
3314 softime 8989 * TRIGGER - triggermodifierapres.
3315     *
3316     * - Ajout du lien demande / demandeur(s)
3317     *
3318     * @return boolean
3319     */
3320     function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3321     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3322     //
3323     $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3324     if ($this->insertLinkDemandeDemandeur() == false) {
3325 mbroquet 3730 return false;
3326     }
3327     $this->valIdDemandeur=$this->postedIdDemandeur;
3328    
3329     //
3330     return true;
3331     }
3332    
3333 softime 6565
3334 mbroquet 3730 /**
3335 softime 6565 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
3336     * dossier de recours.
3337     *
3338     * @return, [type] [description]
3339     */
3340     function ajoutLienDossierConteste() {
3341     // Création des liens entre le dossier instruction créé et le dossier
3342     // contesté
3343 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
3344     "obj" => "lien_dossier_dossier",
3345     "idx" => "]",
3346     ));
3347 softime 6565 // Préparation des valeurs à mettre en base
3348     $val['lien_dossier_dossier'] = "";
3349     $val['dossier_src'] = $this->valF['dossier_instruction'];
3350     $val['dossier_cible'] = $this->valF["autorisation_contestee"];
3351     $val['type_lien'] = 'auto_recours';
3352    
3353 softime 8989 return $ldd->ajouter($val);
3354 softime 6565 }
3355    
3356    
3357     /**
3358 mbroquet 3730 * Gestion des liens entre les lots du DA et le nouveau dossier
3359     **/
3360 softime 8989 function lienLotDossierInstruction($id, $val) {
3361 softime 7996 $lot = $this->f->get_inst__om_dbform(array(
3362     "obj" => "lot",
3363     "idx" => "]",
3364     ));
3365     $lld = $this->f->get_inst__om_dbform(array(
3366     "obj" => "lien_lot_demandeur",
3367     "idx" => "]",
3368     ));
3369 mbroquet 3730
3370    
3371     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
3372     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
3373 softime 8989 $resLot = $this->f->db->query($sqlLots);
3374 mbroquet 3730 $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
3375     $this->f->isDatabaseError($resLot);
3376     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
3377     // Insertion du nouveau lot
3378     $valLot['lot'] = "";
3379     $valLot['libelle'] = $rowLot['libelle'];
3380     $valLot['dossier_autorisation'] = null;
3381     $valLot['dossier'] = $this->valF['dossier_instruction'];
3382 softime 8989 $lot->ajouter($valLot);
3383 mbroquet 3730
3384     //Insertion des liens entre dossier et les lots
3385     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
3386     WHERE lot = ".$rowLot['lot'];
3387 softime 8989 $res = $this->f->db->query($sqlDemandeurs);
3388 mbroquet 3730 $this->f->addToLog(
3389 softime 8989 __METHOD__."(): db->query(\"".$sqlDemandeurs."\");",
3390 mbroquet 3730 VERBOSE_MODE
3391     );
3392     if ($this->f->isDatabaseError($res, true)) {
3393     return false;
3394     }
3395    
3396     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3397     $valLld["lien_lot_demandeur"] = "";
3398     $valLld["lot"]=$lot->valF['lot'];
3399     $valLld["demandeur"] = $row['demandeur'];
3400     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
3401 softime 8989 if ($lld->ajouter($valLld) === false) {
3402 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
3403     return false;
3404     }
3405     }
3406    
3407     // Récupération des données techniques du nouveau lots
3408 softime 8989 if ($this->ajoutDonneesTechniquesLots($id, $val, $rowLot['lot'], $lot->valF['lot']) === false) {
3409     $this->addToMessage(
3410 mbroquet 3730 _("Erreur lors de l'enregistrement de la demande.")." ".
3411     _("Contactez votre administrateur.")
3412     );
3413     $this->correct = false;
3414     $this->f->addToLog(
3415 softime 8989 __METHOD__."(): ERROR ajoutDonneesTechniquesLots",
3416 mbroquet 3730 DEBUG_MODE
3417 softime 8989 );
3418 mbroquet 3730 return false;
3419     }
3420    
3421     }
3422    
3423     //
3424     return true;
3425     }
3426    
3427    
3428     /**
3429     * Méthode permettant d'ajouter les données techniques d'un lot.
3430     *
3431     * @param integer $id identifiant de la demande
3432     * @param array $val tableau de valeurs postées via le formulaire
3433     * @param integer $lotInit identifiant de lot initial
3434     * @param integer $lotDest identifiant du lot qui va recevoir les données
3435     *
3436     * @return boolean false si erreur
3437     */
3438 softime 8989 function ajoutDonneesTechniquesLots($id, $val, $lotInit, $lotDest) {
3439 mbroquet 3730 // Requete permettant de recupérer les données techniques du lot passé
3440     // en paramètre ($lotInit)
3441 softime 14064 $qres = $this->f->get_one_result_from_db_query(
3442     sprintf(
3443     'SELECT
3444     donnees_techniques
3445     FROM
3446     %1$sdonnees_techniques
3447     WHERE
3448     lot = %2$d',
3449     DB_PREFIXE,
3450     intval($lotInit)
3451     ),
3452     array(
3453     "origin" => __METHOD__,
3454     "force_return" => true,
3455     )
3456     );
3457     if ($qres["code"] !== "OK") {
3458     return false;
3459     }
3460     $id_dt = $qres["result"];
3461 mbroquet 3730 // Si des données techniques sont liées au lots on les "copie" et
3462     // on les lies au lot passé en paramètre (lotDest)
3463     if(isset($id_dt) and !empty($id_dt)) {
3464 softime 7996 $donnees_techniques = $this->f->get_inst__om_dbform(array(
3465     "obj" => "donnees_techniques",
3466     "idx" => $id_dt,
3467     ));
3468 mbroquet 3730
3469     // Récupération des données dans le tableau des valeurs à insérer
3470     foreach($donnees_techniques->champs as $value) {
3471     $val[$value] = $donnees_techniques->getVal($value);
3472     }
3473     // Modification du lien vers le nouveau lot
3474     $val["lot"] = $lotDest;
3475     // Identifiant du cerfa
3476     $val['cerfa'] = $this->getIdCerfa();
3477     // Ajout des données techniques
3478 softime 8989 if($donnees_techniques->ajouter($val) === false) {
3479 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
3480     return false;
3481     }
3482     }
3483    
3484     //
3485     return true;
3486     }
3487    
3488     /**
3489     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
3490     **/
3491 softime 8989 function insertLinkDemandeDemandeur() {
3492 mbroquet 3730
3493 softime 10573 foreach ($this->types_demandeur as $type) {
3494 softime 6565 // Comparaison des autres demandeurs
3495     if(isset($this->postedIdDemandeur[$type]) === true) {
3496     // Suppression des liens non valides
3497     foreach ($this->valIdDemandeur[$type] as $demandeur) {
3498     // Demandeur
3499     if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
3500 softime 8989 if ($this->deleteLinkDemandeDemandeur($demandeur) == false) {
3501 softime 6565 //
3502     return false;
3503     }
3504 mbroquet 3730 }
3505 softime 6565
3506 mbroquet 3730 }
3507 softime 6565 // Ajout des nouveaux liens
3508     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
3509     if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
3510     $principal = false;
3511     if(strpos($type, '_principal') !== false) {
3512     $principal = true;
3513     }
3514 softime 8989 if ($this->addLinkDemandeDemandeur($demandeur, $principal) == false) {
3515 softime 6565 //
3516     return false;
3517     }
3518 mbroquet 3730 }
3519     }
3520     }
3521     }
3522    
3523     //
3524     return true;
3525     }
3526    
3527    
3528     /**
3529     * Fonction permettant d'ajouter un lien
3530     * entre la table demande et demandeur
3531     **/
3532 softime 8989 function addLinkDemandeDemandeur($id, $principal) {
3533 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
3534     "obj" => "lien_demande_demandeur",
3535     "idx" => "]",
3536     ));
3537 mbroquet 3730 $lien = array('lien_demande_demandeur' => "",
3538     'petitionnaire_principal' => (($principal)?"t":"f"),
3539     'demande' => $this->valF['demande'],
3540     'demandeur' => $id);
3541 softime 8989 if ($lienAjout->ajouter($lien) === false) {
3542 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
3543     return false;
3544     }
3545    
3546     //
3547     return true;
3548     }
3549    
3550     /**
3551     * Fonction permettant de supprimer un lien
3552     * entre la table demande et demandeur
3553     **/
3554 softime 8989 function deleteLinkDemandeDemandeur($id) {
3555 mbroquet 3730 // Suppression
3556     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
3557     "WHERE demande=".$this->valF['demande'].
3558     " AND demandeur=".$id;
3559     // Execution de la requete de suppression de l'objet
3560 softime 8989 $res = $this->f->db->query($sql);
3561 mbroquet 3730 // Logger
3562 softime 8989 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
3563 mbroquet 3730 if ($this->f->isDatabaseError($res, true)){
3564     return false;
3565     }
3566    
3567     //
3568     return true;
3569     }
3570    
3571 softime 14064 /**
3572     * Teste, avec une requête sql, si le lien entre la demande et
3573     * le demandeur passé en paramètre existe.
3574     *
3575     * @param integer identifiant du demandeur
3576     * @return boolean
3577     */
3578 mbroquet 3730 function isLinkDemandeDemandeurExist($idDemandeur) {
3579 softime 14064 $qres = $this->f->get_one_result_from_db_query(
3580     sprintf(
3581     'SELECT
3582     count(*)
3583     FROM
3584     %1$slien_demande_demandeur
3585     WHERE
3586     demande = %2$d
3587     AND demandeur = %3$d',
3588     DB_PREFIXE,
3589     intval($this->valF['demande']),
3590     intval($idDemandeur)
3591     ),
3592     array(
3593     "origin" => __METHOD__,
3594     )
3595     );
3596    
3597     if ($qres["result"] === 0) {
3598     $this->f->addToLog(__METHOD__."(): the query as returned 0 values", VERBOSE_MODE);
3599 mbroquet 3730 return false;
3600     }
3601    
3602 softime 14064 return true;
3603 mbroquet 3730 }
3604    
3605     /**
3606     * Methode de recupération des valeurs postées
3607     **/
3608     function getPostedValues() {
3609     // Récupération des demandeurs dans POST
3610 softime 10573 foreach ($this->types_demandeur as $type) {
3611 softime 6565 if($this->f->get_submitted_post_value($type) !== null AND
3612     $this->f->get_submitted_post_value($type) != '') {
3613     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
3614 mbroquet 3730 }
3615     }
3616     }
3617    
3618     /**
3619     * Méthode permettant de récupérer les id des demandeurs liés à la table
3620     * liée passée en paramètre
3621     *
3622     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
3623     * @param string $id Identifiant (clé primaire de la table liée en question)
3624     */
3625     function listeDemandeur($from, $id) {
3626     // Récupération des demandeurs de la base
3627     $sql = "SELECT demandeur.demandeur,
3628     demandeur.type_demandeur,
3629     lien_".$from."_demandeur.petitionnaire_principal
3630     FROM ".DB_PREFIXE."lien_".$from."_demandeur
3631     INNER JOIN ".DB_PREFIXE."demandeur
3632     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
3633     WHERE ".$from." = '".$id."'";
3634     $res = $this->f->db->query($sql);
3635     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
3636     $this->f->isDatabaseError($res);
3637     // Stockage du résultat dans un tableau
3638     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3639 softime 6565 $demandeur_type = $row['type_demandeur'];
3640     if ($row['petitionnaire_principal'] == 't'){
3641     $demandeur_type .= "_principal";
3642 mbroquet 3730 }
3643 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
3644 mbroquet 3730 }
3645     }
3646    
3647    
3648     /**
3649     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3650     * d'instruction existant
3651     */
3652     function retour($premier = 0, $recherche = "", $tricol = "") {
3653    
3654     echo "\n<a class=\"retour\" ";
3655     echo "href=\"";
3656     //
3657     if($this->getParameter("idx_dossier") != "") {
3658 softime 7996 echo OM_ROUTE_TAB;
3659     echo "&obj=recherche_dossier";
3660 mbroquet 3730
3661     } else {
3662     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3663 softime 7996 echo OM_ROUTE_FORM;
3664 mbroquet 3730 } else {
3665 softime 7996 echo OM_ROUTE_TAB;
3666 mbroquet 3730 }
3667 softime 7996 echo "&obj=".$this->get_absolute_class_name();
3668 mbroquet 3730 if($this->getParameter("retour")=="form") {
3669     echo "&amp;idx=".$this->getParameter("idx");
3670     echo "&amp;action=3";
3671     }
3672     }
3673     echo "&amp;premier=".$this->getParameter("premier");
3674     echo "&amp;tricol=".$this->getParameter("tricol");
3675     echo "&amp;advs_id=".$this->getParameter("advs_id");
3676     echo "&amp;valide=".$this->getParameter("valide");
3677     //
3678     echo "\"";
3679     echo ">";
3680     //
3681     echo _("Retour");
3682     //
3683     echo "</a>\n";
3684    
3685     }
3686    
3687    
3688     /**
3689     * Cette méthode permet d'afficher des informations spécifiques dans le
3690     * formulaire de l'objet
3691     *
3692     * @param integer $maj Mode de mise à jour
3693     */
3694     function formSpecificContent($maj) {
3695 softime 14064 $this->display_form_specific_content($maj);
3696     }
3697    
3698     /**
3699     * Affiche le contenu souhaité dans la méthode formSpecificContent.
3700     *
3701     * @param integer $maj Action du formulaire
3702     * @param string $contraintes Contrainte de récupération des demandeurs
3703     *
3704     * @return void
3705     */
3706     public function display_form_specific_content($maj, $contraintes = null) {
3707 softime 6565 // Tableau des demandeurs selon le contexte
3708     $listeDemandeur = $this->valIdDemandeur;
3709 mbroquet 3730 /**
3710     * Gestion du bloc des demandeurs
3711     */
3712     // Si le mode est (modification ou suppression ou consultation) ET que
3713     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
3714     // actif)
3715 softime 6565 if ($this->correct !== true AND
3716 softime 7996 $this->getParameter('validation') == 0 AND
3717     $this->getParameter("maj") != 0) {
3718 mbroquet 3730 // Alors on récupère les demandeurs dans la table lien pour
3719 softime 6565 // affectation des résultats dans $this->valIdDemandeur
3720 mbroquet 3730 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3721 softime 6565 $listeDemandeur = $this->valIdDemandeur;
3722 mbroquet 3730 }
3723    
3724 softime 6565 // Récupération des valeurs postées
3725 softime 7996 if ($this->getParameter('validation') != 0) {
3726 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
3727     }
3728    
3729 softime 14064 // Par défaut les demandeurs récupérés ne sont pas modifiables (linkable)
3730     // et l'ajout de nouveau est possible (addable)
3731     $linkable = false;
3732     $addable = true;
3733 mbroquet 3730 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3734     // correct (c'est-à-dire que le formulaire est actif)
3735 softime 14064 if ($this->getParameter("maj") < 2
3736     && $this->correct !== true) {
3737     // En fonction de la contrainte de récupération des demandeurs, les
3738     // possibilités sur le formulaire sont différentes
3739     switch ($contraintes) {
3740     case 'sans_recup':
3741     case 'avec_recup':
3742     $linkable = true;
3743     break;
3744     case 'avec_r_sm_aa':
3745     $linkable = false;
3746     break;
3747     case 'avec_r_sma':
3748     $linkable = false;
3749     $addable = false;
3750     break;
3751     default:
3752     $linkable = null;
3753     break;
3754     }
3755 mbroquet 3730 }
3756    
3757     // Affichage des demandeurs et des actions
3758     // Conteneur de la listes des demandeurs
3759     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3760     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
3761     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3762 softime 6565 ._("Demandeurs")."</legend>";
3763    
3764 mbroquet 3730 // Affichage du bloc pétitionnaire principal / délégataire
3765     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3766     echo "<div id=\"petitionnaire_principal_delegataire\">";
3767 softime 6565 // Affichage de la synthèse du pétitionnaire principal
3768 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal", $linkable, $addable);
3769 mbroquet 3730 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3770     echo "<div id=\"delegataire\">";
3771 softime 6565 // Affichage de la synthèse du délégataire
3772 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "delegataire", $linkable, $addable);
3773 mbroquet 3730 echo "</div>";
3774 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3775     echo "<div id=\"proprietaire\">";
3776     // Affichage de la synthèse du délégataire
3777 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire", $linkable, $addable);
3778 softime 10573 echo "</div>";
3779     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3780     echo "<div id=\"architecte_lc\">";
3781     // Affichage de la synthèse du délégataire
3782 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc", $linkable, $addable);
3783 softime 10573 echo "</div>";
3784     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3785     echo "<div id=\"paysagiste\">";
3786     // Affichage de la synthèse du délégataire
3787 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste", $linkable, $addable);
3788 softime 10573 echo "</div>";
3789 mbroquet 3730 echo "<div class=\"both\"></div>";
3790     echo "</div>";
3791     // Bloc des pétitionnaires secondaires
3792     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3793     echo "<div id=\"listePetitionnaires\">";
3794 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire", $linkable, $addable);
3795 mbroquet 3730 echo "</div>";
3796 softime 7067
3797     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
3798     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3799     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
3800     // Doit être utilisé avec la div petitionnaire_principal_delegataire
3801     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
3802     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3803     echo "<div id=\"bailleur_principal\">";
3804     // Affichage de la synthèse
3805 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal", $linkable, $addable);
3806 softime 7067 echo "</div>";
3807     echo "<div id=\"listeAutresBailleurs\">";
3808 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur", $linkable, $addable);
3809 softime 7067 echo "</div>";
3810     echo "</div>";
3811     echo "</div>";
3812 softime 6565
3813     echo "<div id=\"plaignant_contrevenant\">";
3814     // Affichage du bloc contrevenant
3815     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3816     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
3817     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3818     echo "<div id=\"contrevenant_principal\">";
3819     // Affichage de la synthèse
3820 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal", $linkable, $addable);
3821 softime 6565 echo "</div>";
3822     echo "<div id=\"listeAutresContrevenants\">";
3823     // Affichage de la synthèse
3824 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant", $linkable, $addable);
3825 softime 6565 echo "</div>";
3826     echo "</div>";
3827     // Affichage du bloc plaignant
3828     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3829     echo "<div id=\"listePlaignants\" class=\"col_12\">";
3830     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3831     echo "<div id=\"plaignant_principal\">";
3832     // Affichage de la synthèse
3833 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal", $linkable, $addable);
3834 softime 6565 echo "</div>";
3835     echo "<div id=\"listeAutresPlaignants\">";
3836 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant", $linkable, $addable);
3837 softime 6565 echo "</div>";
3838     echo "</div>";
3839     echo "</div>";
3840     echo "<div id=\"requerant_avocat\">";
3841     // Affichage du bloc requérant
3842     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3843     echo "<div id=\"listeRequerants\" class=\"col_12\">";
3844     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3845     echo "<div id=\"requerant_principal\">";
3846     // Affichage de la synthèse
3847 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal", $linkable, $addable);
3848 softime 6565 echo "</div>";
3849     echo "<div id=\"listeAutresRequerants\">";
3850 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "requerant", $linkable, $addable);
3851 softime 6565 echo "</div>";
3852     echo "</div>";
3853     // Affichage du bloc avocat
3854     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3855     echo "<div id=\"listeAvocat\" class=\"col_12\">";
3856     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3857     echo "<div id=\"avocat_principal\">";
3858 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal", $linkable, $addable);
3859 softime 6565 echo "</div>";
3860     echo "<div id=\"listeAutresAvocats\">";
3861 softime 14064 $this->displaySyntheseDemandeur($listeDemandeur, "avocat", $linkable, $addable);
3862 softime 6565 echo "</div>";
3863     echo "</div>";
3864     echo "</div>";
3865 mbroquet 3730 echo "</fieldset>";
3866     // Champ flag permettant de récupérer la valeur de l'option sig pour
3867     // l'utiliser en javascript, notamment lors du chargement de l'interface
3868     // pour les références cadastrales
3869     // XXX Si un widget pour les références cadastrales existait, il n'y
3870     // aurait pas besoin de faire cela
3871     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
3872     echo "</div>";
3873     }
3874 softime 14064
3875     /**
3876     * Affiche le formulaire spécifique des demandeurs.
3877     *
3878     * @param array $listeDemandeur Tableau des demandeurs
3879     * @param string $type Type des demandeurs
3880     * @param boolean $linkable Défini si les demandeurs sont modifiable
3881     * @param boolean $addable Défini si des demandeurs peuvent être ajoutés
3882     *
3883     * @return void Affiche le formulaire
3884     */
3885     function displaySyntheseDemandeur($listeDemandeur, $type, $linkable = null, $addable = true) {
3886     // Si la modification des demandeurs récupérés n'est pas précisé
3887     if ($linkable === null) {
3888     // Par défaut la modification des demandeurs récupérés n'est pas possible
3889 softime 6565 $linkable = false;
3890 softime 14064 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3891     // correct (c'est-à-dire que le formulaire est actif)
3892     if ($this->getParameter("maj") < 2
3893     && $this->correct !== true) {
3894     // La modification des demandeurs récupérés est possible
3895     $linkable = true;
3896     }
3897 softime 6565 }
3898     // Récupération du type de demandeur pour l'affichage
3899     switch ($type) {
3900     case 'petitionnaire_principal':
3901     $legend = _("Petitionnaire principal");
3902     break;
3903 mbroquet 3730
3904 softime 6565 case 'delegataire':
3905     $legend = _("Autre correspondant");
3906     break;
3907    
3908     case 'petitionnaire':
3909     $legend = _("Petitionnaire");
3910     break;
3911    
3912     case 'contrevenant_principal':
3913     $legend = _("Contrevenant principal");
3914     break;
3915    
3916     case 'contrevenant':
3917     $legend = _("Autre contrevenant");
3918     break;
3919    
3920     case 'plaignant_principal':
3921     $legend = _("Plaignant principal");
3922     break;
3923    
3924     case 'plaignant':
3925     $legend = _("Autre plaignant");
3926     break;
3927    
3928     case 'requerant_principal':
3929     $legend = _("Requérant principal");
3930     break;
3931    
3932     case 'requerant':
3933     $legend = _("Autre requérant");
3934     break;
3935    
3936     case 'avocat_principal':
3937     $legend = _("Avocat principal");
3938     break;
3939    
3940     case 'avocat':
3941     $legend = _("Autre avocat");
3942     break;
3943 softime 7067
3944     case 'bailleur_principal':
3945     $legend = _("Bailleur principal");
3946     break;
3947    
3948     case 'bailleur':
3949     $legend = _("Autre bailleur");
3950     break;
3951 softime 10573
3952     case 'proprietaire':
3953     $legend = __('Propriétaire');
3954     break;
3955    
3956     case 'architecte_lc':
3957     $legend = __('Architecte législation connexe');
3958     break;
3959    
3960     case 'paysagiste':
3961     $legend = __('Concepteur-Paysagiste');
3962     break;
3963 softime 6565 }
3964     foreach ($listeDemandeur[$type] as $demandeur_id) {
3965     $obj = str_replace('_principal', '', $type);
3966 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
3967     "obj" => $obj,
3968     "idx" => $demandeur_id,
3969     ));
3970 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
3971     $demandeur -> __destruct();
3972     }
3973     // Si en édition de formulaire
3974 softime 14064 // et qu'il est possible d'ajouter de nouveau demandeur pour ce type
3975     if ($addable === true
3976     && $this->getParameter("maj") < 2
3977     && $this->correct !== true) {
3978 softime 6565 // Bouton d'ajout du avocat
3979     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3980     echo "<span id=\"add_".$type."\"
3981     class=\"om-form-button add-16\">".
3982     $legend.
3983     "</span>";
3984     }
3985     }
3986    
3987 mbroquet 3730 // {{{
3988    
3989     // getter
3990     function getValIdDemandeur() {
3991     return $this->valIdDemandeur;
3992     }
3993     // setter
3994     function setValIdDemandeur($valIdDemandeur) {
3995     $this->valIdDemandeur = $valIdDemandeur;
3996     }
3997 softime 8989
3998     /**
3999     * TRIGGER - triggersupprimer.
4000     *
4001     * - Supression du lien entre la demandeur et le(s) demandeur(s)
4002     *
4003     * @return boolean
4004     */
4005     function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
4006     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
4007 mbroquet 3730 //Création de la requête
4008     $sql = "DELETE FROM
4009     ".DB_PREFIXE."lien_demande_demandeur
4010     WHERE
4011     demande = $id";
4012    
4013     $res = $this->f->db->query($sql);
4014 softime 8989 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")", VERBOSE_MODE);
4015 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
4016     return false;
4017     }
4018    
4019     //
4020     return true;
4021     }
4022 softime 8989
4023 mbroquet 3730
4024     /**
4025 softime 8329 * Récupère le champ "regeneration_cle_citoyen" du type de la demande.
4026     *
4027     * @param integer $demande_type Identifiant du type de la demande.
4028     *
4029     * @return boolean
4030     */
4031     function get_demande_type_regeneration_cle_citoyen($demande_type) {
4032     // Initialise le résultat
4033     $regeneration_cle_citoyen = false;
4034    
4035     // Récupère le champ depuis la demande type
4036     $inst_demande_type = $this->f->get_inst__om_dbform(array(
4037     "obj" => "demande_type",
4038     "idx" => $demande_type,
4039     ));
4040     if ($inst_demande_type->getVal('regeneration_cle_citoyen') === 't') {
4041     $regeneration_cle_citoyen = true;
4042     }
4043    
4044     // Retourne le résultat
4045     return $regeneration_cle_citoyen;
4046 softime 14064 }
4047 softime 8329
4048 mbroquet 3730 /**
4049     * Récupère les champs archive_* d'une instruction
4050     * @param string $dossier L'identifiant du dossier d'instruction
4051     */
4052     public function getArchiveInstruction($dossierID){
4053    
4054     //On récupère les données du dernier DI accordé
4055     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
4056     dossier.avis_decision,
4057     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
4058 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
4059 softime 10573 to_char(dossier.date_depot_mairie, 'DD/MM/YYYY') as date_depot_mairie,
4060 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
4061     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
4062     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
4063     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
4064     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
4065     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
4066     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
4067     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
4068     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
4069     dossier.incompletude,
4070     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
4071     dossier.etat_pendant_incompletude,
4072     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
4073     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
4074 softime 6565 ,dossier.dossier, dossier.incomplet_notifie,
4075     to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
4076     to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
4077     to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
4078     to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
4079     to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
4080     to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
4081 softime 8593 to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet,
4082 softime 8989 dossier.dossier_instruction_type as dossier_instruction_type,
4083     to_char(dossier.date_affichage, 'DD/MM/YYYY') as date_affichage
4084 mbroquet 3730 FROM ".DB_PREFIXE."dossier
4085     LEFT JOIN ".DB_PREFIXE."avis_decision
4086     ON dossier.avis_decision = avis_decision.avis_decision
4087     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
4088     AND dossier.dossier_autorisation = (
4089     SELECT dossier_autorisation.dossier_autorisation
4090     FROM ".DB_PREFIXE."dossier_autorisation
4091     LEFT JOIN ".DB_PREFIXE."dossier
4092     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
4093     WHERE dossier = '".$dossierID."')
4094     ORDER BY dossier.version DESC";
4095    
4096 softime 8989 $res = $this->f->db->query($sql);
4097 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
4098     if ($this->f->isDatabaseError($res, true)) {
4099     return false;
4100     }
4101    
4102     //Un des dosssiers d'instruction a été accordé, on récupère ses données
4103     if ( $res->numrows() != 0 ){
4104    
4105     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
4106 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
4107     "obj" => "instruction",
4108     "idx" => "]",
4109     ));
4110 mbroquet 3730
4111     $instruction->setParameter("maj", 1);
4112     $instruction->updateArchiveData($row);
4113     return $instruction->valF;
4114     }
4115     //Sinon, on prend les données du P0, si ce n'est pas un P0
4116     else {
4117     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
4118     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
4119     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
4120     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
4121     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
4122     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
4123     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
4124     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
4125 softime 10573 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot, dossier.date_depot_mairie,
4126 softime 6565 dossier.date_cloture_instruction, dossier.date_premiere_visite,
4127     dossier.date_derniere_visite, dossier.date_contradictoire,
4128     dossier.date_retour_contradictoire, dossier.date_ait,
4129 softime 8989 dossier.date_transmission_parquet, dossier.dossier_instruction_type,
4130     dossier.date_affichage
4131 mbroquet 3730 FROM ".DB_PREFIXE."dossier
4132     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
4133     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
4134     WHERE dossier.dossier_autorisation = (
4135     SELECT dossier_autorisation.dossier_autorisation
4136     FROM ".DB_PREFIXE."dossier_autorisation
4137     LEFT JOIN ".DB_PREFIXE."dossier
4138     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
4139     WHERE dossier = '".$dossierID."')
4140     AND dossier_instruction_type.code = 'P'
4141     ORDER BY dossier.version DESC";
4142 softime 8989 $res = $this->f->db->query($sql);
4143 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
4144     if ($this->f->isDatabaseError($res, true)) {
4145     return false;
4146     }
4147    
4148     //On est pas dans le cas d'un dépôt d'un P0
4149     if ( $res->numrows() != 0 ){
4150     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
4151 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
4152     "obj" => "instruction",
4153     "idx" => "]",
4154     ));
4155 mbroquet 3730 $instruction->setParameter("maj", 1);
4156     $instruction->updateArchiveData($row);
4157     return $instruction->valF;
4158     }
4159     }
4160     }
4161    
4162     /**
4163     * Cette methode permet d'afficher le bouton de validation du formulaire
4164     *
4165     * @param integer $maj Mode de mise a jour
4166     * @return void
4167     */
4168     function bouton($maj) {
4169    
4170     if (!$this->correct
4171     && $this->checkActionAvailability() == true) {
4172     //
4173     switch($maj) {
4174     case 0 :
4175     $bouton = _("Ajouter");
4176     break;
4177     case 1 :
4178     $bouton = _("Modifier");
4179     break;
4180     case 2 :
4181     $bouton = _("Supprimer");
4182     break;
4183     default :
4184     // Actions specifiques
4185     if ($this->get_action_param($maj, "button") != null) {
4186     //
4187     $bouton = $this->get_action_param($maj, "button");
4188     } else {
4189     //
4190     $bouton = _("Valider");
4191     }
4192     break;
4193     }
4194     //
4195     $params = array(
4196     "value" => $bouton,
4197     "name" => "submit",
4198     "onclick"=>"return getDataFieldReferenceCadastrale();",
4199     );
4200     //
4201     $this->f->layout->display_form_button($params);
4202     }
4203    
4204     }
4205    
4206     /**
4207     * Récupère l'instance de la classe taxe_amenagement.
4208     *
4209     * @param integer $om_collectivite La collectivité
4210     *
4211     * @return object
4212     */
4213     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
4214     //
4215 softime 6929 if ($this->inst_taxe_amenagement === null) {
4216 mbroquet 3730 //
4217     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
4218 softime 6929
4219     // Si aucun paramétrage de taxe trouvé et que la collectivité
4220     // est mono
4221     if ($taxe_amenagement === null
4222     && $this->f->isCollectiviteMono($om_collectivite) === true) {
4223     // Récupère la collectivité multi
4224     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
4225     //
4226     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
4227     }
4228    
4229 mbroquet 3730 //
4230 softime 6929 if ($taxe_amenagement === null) {
4231     //
4232     return null;
4233     }
4234    
4235     //
4236 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
4237     "obj" => "taxe_amenagement",
4238     "idx" => $taxe_amenagement,
4239     ));
4240 mbroquet 3730 }
4241     //
4242     return $this->inst_taxe_amenagement;
4243     }
4244    
4245     /**
4246     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
4247     *
4248     * @param integer $om_collectivite La collectivité
4249     *
4250     * @return integer
4251     */
4252     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
4253 softime 6929 $taxe_amenagement = null;
4254 mbroquet 3730
4255 softime 6929 // Si la collectivité n'est pas renseigné
4256     if ($om_collectivite !== '' && $om_collectivite !== null) {
4257    
4258     // SQL
4259 softime 14064 $qres = $this->f->get_one_result_from_db_query(
4260     sprintf(
4261     'SELECT
4262     taxe_amenagement
4263     FROM
4264     %1$staxe_amenagement
4265     WHERE
4266     om_collectivite = %2$d',
4267     DB_PREFIXE,
4268     intval($om_collectivite)
4269     ),
4270     array(
4271     "origin" => __METHOD__,
4272     )
4273     );
4274     $taxe_amenagement = $qres["result"];
4275 softime 6929 }
4276    
4277     return $taxe_amenagement;
4278 mbroquet 3730 }
4279    
4280    
4281     /**
4282 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
4283     *
4284 softime 6929 * Récupère l'instance du cerfa par le type détaillé du DA.
4285     *
4286     * @param integer $datd Identifiant du type détaillé du DA.
4287     *
4288     * @return object
4289     */
4290     protected function get_inst_cerfa_by_datd($datd = null) {
4291     //
4292     if ($this->inst_cerfa === null) {
4293     //
4294     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
4295     //
4296     $cerfa = $inst_datd->getVal('cerfa');
4297     //
4298     if ($cerfa !== '' && $cerfa !== null) {
4299     //
4300 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
4301     "obj" => "cerfa",
4302     "idx" => $cerfa,
4303     ));
4304 softime 6929 }
4305     }
4306    
4307     //
4308     return $this->inst_cerfa;
4309     }
4310    
4311    
4312     /**
4313 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
4314     *
4315 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
4316     *
4317     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
4318     *
4319     * @return object
4320     */
4321 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
4322 mbroquet 3730 //
4323     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
4324     }
4325    
4326 softime 10573 /**
4327     * Vérifie si un dossier d'autorisation avec cette numérotation existe déjà.
4328     *
4329     * @return boolean
4330     */
4331     function existsDAWithNumeroDossierSeq($idDAdt, $date_demande, $collectivite_id, $num_doss_seq, $commune_id = null, $code_depcom = null) {
4332    
4333     if (empty($idDAdt) || empty($date_demande) || empty($collectivite_id) || empty($num_doss_seq)) {
4334     return false;
4335     }
4336    
4337     if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === true
4338     && empty($commune_id) === true) {
4339     //
4340     return false;
4341     }
4342    
4343     // code du type de DA
4344 softime 14064 $qres = $this->f->get_one_result_from_db_query(
4345     sprintf(
4346     'SELECT
4347     da_t.code
4348     FROM
4349     %1$sdossier_autorisation_type as da_t
4350     INNER JOIN %1$sdossier_autorisation_type_detaille as da_t_d
4351     ON da_t.dossier_autorisation_type = da_t_d.dossier_autorisation_type
4352     WHERE
4353     da_t_d.dossier_autorisation_type_detaille = %2$d',
4354     DB_PREFIXE,
4355     intval($idDAdt)
4356     ),
4357     array(
4358     "origin" => __METHOD__,
4359     "force_return" => true,
4360     )
4361     );
4362     if ($qres["code"] !== "OK") {
4363 softime 10573 return false;
4364     }
4365 softime 14064 $code_type_da = $qres["result"];
4366 softime 10573
4367     // annee date demande
4368     $annee = date('y', strtotime($date_demande));
4369    
4370     // code département et commune
4371     if (empty($code_depcom) === true) {
4372     if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === false) {
4373     $collectivite_parameters = $this->f->getCollectivite($collectivite_id);
4374     if (!isset($collectivite_parameters['departement'])) {
4375     $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'departement' inexistant.",
4376     DEBUG_MODE);
4377     return false;
4378     }
4379     if (!isset($collectivite_parameters['commune'])) {
4380     $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'commune' inexistant.",
4381     DEBUG_MODE);
4382     return false;
4383     }
4384 softime 11228 $departement = strtoupper($collectivite_parameters['departement']);
4385 softime 10573 $commune = $collectivite_parameters['commune'];
4386     $code_depcom = $departement.$commune;
4387     } else {
4388     //
4389     $getCodeDepartementCommuneFromCommune = $this->getCodeDepartementCommuneFromCommune($commune_id);
4390     $code_depcom = $getCodeDepartementCommuneFromCommune[0];
4391     }
4392     }
4393    
4394     // construction de la requête
4395 softime 13137 $qres = $this->f->get_one_result_from_db_query(
4396     sprintf(
4397     'SELECT
4398     dossier_autorisation
4399     FROM
4400     %1$sdossier_autorisation
4401     WHERE
4402     dossier_autorisation LIKE \'%2$s%3$s%4$s%%%5$s\'',
4403     DB_PREFIXE,
4404     $code_type_da,
4405     $code_depcom,
4406     $annee,
4407     str_pad($num_doss_seq, 4, '0', STR_PAD_LEFT)
4408     ),
4409     array(
4410     "origin" => __METHOD__,
4411     "force_return" => true,
4412     )
4413 softime 10573 );
4414 softime 13137 if ($qres["code"] === "OK"
4415     && $qres["result"] !== ""
4416     && $qres["result"] !== null) {
4417 softime 10573 return true;
4418     }
4419     return false;
4420     }
4421    
4422     /**
4423     * Concatenation du code département et du code commune
4424     * obtenus à partir de la collectivité (collectivité par défaut si aucun id fourni).
4425     * Renvoie un tuple (code_depcom, error_msg).
4426     */
4427     protected function getCodeDepartementCommuneFromCommune(int $commune_id) : array {
4428     $code_depcom = null;
4429     $error_msg = null;
4430     if (!empty($commune_id)) {
4431     $commune = $this->f->findObjectById("commune", $commune_id);
4432     if (!empty($commune)) {
4433 softime 11228 $code_departement = strtoupper($commune->getVal('dep'));
4434 softime 12654
4435     if(strpos(strtoupper($commune->getVal('com')), $code_departement) !== 0){
4436     $error_msg = sprintf(__("code département (%s) différent du début du code commune (%s)."),
4437     $code_departement, strtoupper($commune->getVal('com')));
4438     return array(null, $error_msg);
4439     }
4440    
4441 softime 11228 $code_commune = preg_replace('/^'.$code_departement.'/', '', strtoupper($commune->getVal('com')));
4442     if(!is_numeric($code_departement) && ! in_array($code_departement, array('2A', '2B'))) {
4443     $error_msg = sprintf(__("code département invalide (%s). Doit être numérique ou 2A|2B."),
4444 softime 10573 $code_departement);
4445     }
4446     else if (!is_numeric($code_commune)) {
4447     $error_msg = sprintf(__("code commune invalide (%s). Doit être numérique."),
4448     $code_commune);
4449     }
4450     else {
4451     $code_depcom = str_pad($code_departement, 3, '0', STR_PAD_LEFT)
4452     .str_pad($code_commune, 3, '0', STR_PAD_LEFT);
4453     }
4454     }
4455     else {
4456     $error_msg = sprintf(__("commune ID '%d' inexistante"), $commune_id);
4457     }
4458     }
4459     if (!empty($error_msg)) {
4460     $this->f->addToLog(__METHOD__."(): ERROR $error_msg", DEBUG_MODE);
4461     }
4462     return array($code_depcom, $error_msg);
4463     }
4464    
4465 nhaye 5254 }
4466 mbroquet 3730
4467 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26