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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11876 - (hide annotations)
Thu Apr 7 20:47:38 2022 UTC (2 years, 9 months ago) by softime
File size: 186196 byte(s)
* Fusion de la branche d'intégration 5.9.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26