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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 15650 - (hide annotations)
Thu Aug 31 17:29:39 2023 UTC (17 months ago) by softime
File size: 194610 byte(s)
chore(branch): fusion de la branche d'intégration 6.0.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26