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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 12654 - (hide annotations)
Mon Aug 1 16:58:31 2022 UTC (2 years, 6 months ago) by softime
File size: 186631 byte(s)
* Fusion de la branche d'intégration 5.12.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 softime 12124 $this->correct = false;
1121 softime 11876 }
1122     } catch (RuntimeException $e) {
1123     $this->correct = false;
1124     $this->addToLog($e.' : '._("Le format de la date de demande n'est pas valide."));
1125     $this->addToMessage(_("Erreur : le format de la date de demande n'est pas correct. Contactez votre administrateur."));
1126     }
1127     }
1128    
1129 softime 6565 $type_aff_form = $this->get_type_affichage_formulaire();
1130     if ($type_aff_form ===false) {
1131 mbroquet 3730 $this->correct = false;
1132 softime 6565 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
1133 mbroquet 3730 }
1134 softime 6565 switch ($type_aff_form) {
1135     case 'ADS':
1136     case 'CTX RE':
1137 softime 10573 case 'CONSULTATION ENTRANTE':
1138 softime 6565 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1139     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1140     !is_null($this->form)) {
1141     $this->correct = false;
1142     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1143     }
1144     break;
1145     case 'CTX IN':
1146     if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
1147     empty($this->postedIdDemandeur["contrevenant_principal"]) AND
1148     !is_null($this->form)) {
1149     $this->correct = false;
1150     $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
1151     }
1152     break;
1153 softime 7067 case 'DPC':
1154     if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
1155     empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
1156     !is_null($this->form)) {
1157     $this->correct = false;
1158     $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
1159     }
1160     if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
1161     empty($this->postedIdDemandeur["bailleur_principal"]) AND
1162     !is_null($this->form)) {
1163     $this->correct = false;
1164     $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
1165     }
1166     break;
1167 softime 6565 }
1168 mbroquet 3730 }
1169    
1170     /**
1171 softime 8989 *
1172     * @return string
1173 mbroquet 3730 */
1174 softime 8989 function get_var_sql_forminc__sql_demande_type_details_by_id() {
1175     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>";
1176     }
1177 mbroquet 3730
1178 softime 8989 /**
1179     *
1180     * @return string
1181     */
1182     function get_var_sql_forminc__sql_lien_demande_demandeur() {
1183     return "SELECT petitionnaire_principal, demandeur, demande FROM ".DB_PREFIXE."lien_demande_demandeur WHERE demande = <demande>";
1184     }
1185    
1186     /**
1187     *
1188     * @return string
1189     */
1190     function get_var_sql_forminc__sql_arrondissement() {
1191     return "SELECT arrondissement.arrondissement, arrondissement.libelle FROM ".DB_PREFIXE."arrondissement ORDER BY NULLIF(arrondissement.libelle,'')::int ASC NULLS LAST";
1192     }
1193    
1194     /**
1195     *
1196     * @return string
1197     */
1198     function get_var_sql_forminc__sql_dossier_autorisation_type_detaille() {
1199     return "SELECT
1200     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille,
1201     dossier_autorisation_type_detaille.libelle
1202     FROM ".DB_PREFIXE."dossier_autorisation_type_detaille
1203     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1204     ON dossier_autorisation_type_detaille.dossier_autorisation_type=dossier_autorisation_type.dossier_autorisation_type
1205     LEFT JOIN ".DB_PREFIXE."groupe
1206     ON dossier_autorisation_type.groupe=groupe.groupe
1207     LEFT JOIN ".DB_PREFIXE."cerfa ON dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1208     WHERE ((now()<=om_validite_fin AND now()>=om_validite_debut) OR
1209     dossier_autorisation_type_detaille.cerfa IS NULL OR
1210     (om_validite_fin IS NULL and om_validite_debut IS NULL) OR
1211     (now()<=om_validite_fin and om_validite_debut IS NULL) OR
1212     (om_validite_fin IS NULL AND now()>=om_validite_debut))
1213     <ajout_condition_requete>
1214     ORDER BY dossier_autorisation_type_detaille.libelle ASC";
1215     }
1216    
1217     /**
1218     * SETTER_FORM - setSelect.
1219     *
1220     * @return void
1221     */
1222     function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
1223     //parent::setSelect($form, $maj);
1224 mbroquet 3730 // Méthode de récupération des valeurs du select "demande_type"
1225     if ($maj < 2
1226     && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
1227     OR ($this->f->get_submitted_get_value('obj') === null))) {
1228     // demande_type
1229 softime 8989 $form->setSelect(
1230     'demande_type',
1231     $this->loadSelectDemandeType($form, $maj, "dossier_autorisation_type_detaille")
1232     );
1233 mbroquet 3730 } else {
1234     // demande_type
1235 softime 8989 $this->init_select(
1236     $form,
1237     $this->f->db,
1238     $maj,
1239     null,
1240     "demande_type",
1241     $this->get_var_sql_forminc__sql("demande_type"),
1242     $this->get_var_sql_forminc__sql("demande_type_by_id"),
1243     false
1244     );
1245 mbroquet 3730 }
1246     // arrondissement
1247 softime 8989 $this->init_select(
1248     $form,
1249     $this->f->db,
1250     $maj,
1251     null,
1252     "arrondissement",
1253     $this->get_var_sql_forminc__sql("arrondissement"),
1254     $this->get_var_sql_forminc__sql("arrondissement_by_id"),
1255     false
1256     );
1257 softime 6565 // Filtre des demandes par groupes
1258     $group_clause = array();
1259     $ajout_condition_requete = "";
1260     foreach ($_SESSION["groupe"] as $key => $value) {
1261     if($value["enregistrement_demande"] !== true) {
1262     continue;
1263     }
1264     $group_clause[$key] = "(groupe.code = '".$key."'";
1265     if($value["confidentiel"] !== true) {
1266     $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
1267     }
1268     $group_clause[$key] .= ")";
1269     }
1270     // Mise en chaîne des clauses
1271     $conditions = implode(" OR ", $group_clause);
1272     if($conditions !== "") {
1273     $ajout_condition_requete .= " AND (".$conditions.")";
1274     }
1275     // Les clauses sont une white list. Cela qui signifie que l'on
1276     // rajoute une condition irréalisable si absence de clause.
1277     if ($ajout_condition_requete === '') {
1278     $ajout_condition_requete = 'AND false';
1279     }
1280 softime 8989 $sql_dossier_autorisation_type_detaille = str_replace(
1281     '<ajout_condition_requete>',
1282     $ajout_condition_requete,
1283     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille")
1284     );
1285     $this->init_select(
1286     $form,
1287     $this->f->db,
1288     $maj,
1289     null,
1290     "dossier_autorisation_type_detaille",
1291     $sql_dossier_autorisation_type_detaille,
1292     $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
1293     false
1294     );
1295 mbroquet 3730 // om_collectivite
1296 softime 8989 $this->init_select(
1297     $form,
1298     $this->f->db,
1299     $maj,
1300     null,
1301     "om_collectivite",
1302     $this->get_var_sql_forminc__sql("om_collectivite"),
1303     $this->get_var_sql_forminc__sql("om_collectivite_by_id"),
1304     false
1305     );
1306 softime 10573 // commune
1307     $this->init_select(
1308     $form,
1309     $this->f->db,
1310     $maj,
1311     null,
1312     "commune",
1313     $this->get_var_sql_forminc__sql("commune"),
1314     $this->get_var_sql_forminc__sql("commune_by_id"),
1315     false
1316     );
1317 softime 10869
1318    
1319     $contenu = array();
1320     foreach(self::SOURCE_DEPOT as $key) {
1321     $const_name = $key;
1322     $const_value = $key;
1323     $contenu[0][] = $const_value;
1324     $contenu[1][] = __($const_value);
1325     }
1326    
1327     $form->setSelect("source_depot", $contenu);
1328 mbroquet 3730 }
1329    
1330     /**
1331     * Charge le select du champ type de demande
1332     * @param object $form Formulaire
1333     * @param int $maj Mode d'insertion
1334     * @param string $champ champ activant le filtre
1335     * @return array Contenu du select
1336     */
1337 softime 8989 function loadSelectDemandeType(&$form, $maj, $champ) {
1338 mbroquet 3730
1339     // Contenu de la liste à choix
1340     $contenu=array();
1341     $contenu[0][0]='';
1342     $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
1343    
1344     //Récupère l'id du type de dossier d'autorisation détaillé
1345     $id_dossier_autorisation_type_detaille = "";
1346     if ($this->f->get_submitted_post_value($champ) !== null) {
1347     $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
1348     } elseif($this->getParameter($champ) != "") {
1349     $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
1350     } elseif(isset($form->val[$champ])) {
1351     $id_dossier_autorisation_type_detaille = $form->val[$champ];
1352     }
1353 softime 8640 //
1354     if ($id_dossier_autorisation_type_detaille === '') {
1355     return $contenu;
1356     }
1357 mbroquet 3730
1358     // Récupération de paramètre pour le rechargement ajax du select
1359     $idx_dossier = $this->getParameter("idx_dossier");
1360    
1361     // Récupère l'id de la nature de la demande
1362     $id_demande_nature = "1";
1363     if (isset($idx_dossier) AND $idx_dossier != "") {
1364     $id_demande_nature = '2';
1365     }
1366    
1367 softime 8640 // Requête récupération type demande pour les nouveaux DA
1368     $sql = sprintf('
1369     SELECT demande_type.demande_type, demande_type.libelle as lib
1370     FROM %1$sdemande_type
1371     INNER JOIN %1$sdossier_autorisation_type_detaille
1372     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1373     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = %2$s
1374 softime 10573 WHERE (demande_type.demande_nature = %3$s %4$s)
1375     AND demande_type.dossier_instruction_type IS NOT NULL
1376 softime 8640 ORDER BY demande_type.libelle, demande_type.demande_type
1377     ',
1378     DB_PREFIXE,
1379     $id_dossier_autorisation_type_detaille,
1380 softime 10573 intval($id_demande_nature),
1381     // Affiche à la fois les types de demande NOUV et EXIST si option numéro complet activée
1382     $this->f->is_option_dossier_saisie_numero_complet_enabled() === true ? sprintf(' OR demande_type.demande_nature = %s ', 2) : ''
1383 softime 8640 );
1384     // Requêtes de récupération des types de demande pour les DA existants
1385 mbroquet 3730 if ($id_demande_nature == '2') {
1386 softime 10808 // Récupère la liste des types de demande possibles
1387     $sql = $this->get_query_demande_type_by_dossier($idx_dossier, $id_demande_nature);
1388 mbroquet 3730 }
1389    
1390     //
1391 softime 8989 $res = $this->f->db->query($sql);
1392 softime 8640 $this->addToLog("db->query(\"".$sql."\");", VERBOSE_MODE);
1393     $this->f->isDatabaseError($res);
1394     //Les résultats de la requête sont stocké dans le tableau contenu
1395     $k=1;
1396     while ($row=& $res->fetchRow()){
1397     $contenu[0][$k]=$row[0];
1398     $contenu[1][$k]=$row[1];
1399     $k++;
1400 mbroquet 3730 }
1401    
1402     // Retourne le contenu de la liste
1403     return $contenu;
1404     }
1405    
1406 softime 10808 /**
1407     * [get_query_demande_type_by_dossier description]
1408     * @param [type] $idx_dossier [description]
1409     * @param [type] $id_demande_nature [description]
1410     * @param integer $etat_da_accord [description]
1411     * @param integer $etat_da_encours [description]
1412     * @param integer $autorite_competente_sitadel_com [description]
1413     * @return [type] [description]
1414     */
1415     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) {
1416     // Unification de trois résultats de réquête pour récupèrer les
1417     // types de demande possibles :
1418     // - les types de demande qui ne créé pas de nouveau DI et dont
1419     // l'état du DI ciblé fait partie des états autorisés,
1420     // - les types de demande qui créé de nouveau DI, dont l'état du DI
1421     // ciblé fait partie des états autorisés et dont le DA du DI ciblé
1422     // est accordé,
1423     // - les types de demande qui créé de nouveau DI, dont les types
1424     // de(s) DI en cours sur le DA ciblé accordé, sont identique(s) à
1425     // la liste des types de DI compatibles,
1426     // - les types de demande qui créé de nouveau DI, dont les types
1427     // de(s) DI en cours sur le DA ciblé en cours d'instruction sont
1428     // identique(s) à la liste des types de DI compatibles et dont le
1429     // DI initial n'est pas de compétence SITADEL "au nom de la commune".
1430     return sprintf('
1431     SELECT DISTINCT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1432     FROM %1$sdemande_type
1433     INNER JOIN %1$sdossier_autorisation_type_detaille
1434     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1435     INNER JOIN %1$slien_demande_type_etat
1436     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1437     INNER JOIN %1$setat
1438     ON lien_demande_type_etat.etat = etat.etat
1439     INNER JOIN %1$sdossier
1440     ON dossier.dossier = \'%2$s\'
1441     AND etat.etat = dossier.etat
1442     INNER JOIN %1$sdossier_autorisation
1443     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1444     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1445     WHERE demande_type.dossier_instruction_type IS NULL
1446     AND demande_type.demande_nature = %3$s
1447     UNION
1448     SELECT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1449     FROM %1$sdemande_type
1450     INNER JOIN %1$sdossier_autorisation_type_detaille
1451     ON demande_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1452     INNER JOIN %1$slien_demande_type_etat
1453     ON lien_demande_type_etat.demande_type = demande_type.demande_type
1454     INNER JOIN %1$setat
1455     ON lien_demande_type_etat.etat = etat.etat
1456     INNER JOIN %1$sdossier
1457     ON dossier.dossier = \'%2$s\'
1458     AND etat.etat = dossier.etat
1459     INNER JOIN %1$sdossier_autorisation as da
1460     ON da.dossier_autorisation = dossier.dossier_autorisation
1461     AND dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = da.dossier_autorisation_type_detaille
1462     WHERE demande_type.dossier_instruction_type IS NOT NULL
1463     AND demande_type.demande_nature = %3$s
1464     AND da.etat_dossier_autorisation = %4$s
1465     AND (
1466     SELECT count(dossier)
1467     FROM %1$sdossier
1468     INNER JOIN %1$sdossier_autorisation
1469     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1470     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1471     INNER JOIN %1$setat
1472     ON dossier.etat = etat.etat
1473     AND etat.statut = \'encours\'
1474     ) = 0
1475     UNION
1476     SELECT demande_type.demande_type as dt, demande_type.libelle as lib, demande_type.code as code
1477     FROM %1$sdemande_type
1478     INNER JOIN %1$sdossier
1479     ON dossier.dossier = \'%2$s\'
1480     INNER JOIN %1$sdossier_autorisation as da
1481     ON da.dossier_autorisation = dossier.dossier_autorisation
1482     INNER JOIN %1$sautorite_competente
1483     ON autorite_competente.autorite_competente = dossier.autorite_competente
1484     WHERE demande_type.dossier_instruction_type IS NOT NULL
1485     AND (
1486     SELECT array_agg(DISTINCT(dossier_instruction_type))
1487     FROM %1$sdossier
1488     INNER JOIN %1$sdossier_autorisation
1489     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1490     AND dossier_autorisation.dossier_autorisation = da.dossier_autorisation
1491     INNER JOIN %1$setat
1492     ON dossier.etat = etat.etat
1493     AND etat.statut = \'encours\'
1494     ) <@ (
1495     SELECT array_agg(DISTINCT(dossier_instruction_type))
1496     FROM %1$slien_demande_type_dossier_instruction_type
1497     WHERE lien_demande_type_dossier_instruction_type.demande_type = demande_type.demande_type
1498     )
1499     AND demande_type.demande_nature = %3$s
1500     AND (
1501     da.etat_dossier_autorisation = %4$s
1502     OR (
1503     da.etat_dossier_autorisation = %5$s
1504     AND autorite_competente.autorite_competente_sitadel != %6$s
1505     ))
1506     ORDER BY lib, dt
1507     ',
1508     DB_PREFIXE,
1509     $idx_dossier,
1510     intval($id_demande_nature),
1511     $etat_da_accord, // Identifiant de l'état de dossier d'autorisation : Accordé
1512     $etat_da_encours, // Identifiant de l'état de dossier d'autorisation : En cours
1513     $autorite_competente_sitadel_com // Identifiant de l'autorité compétente SITADEL : 1 - au nom de la commune
1514     );
1515     }
1516    
1517 mbroquet 3730 /*
1518     * Ajout du fielset
1519     * Add fieldset
1520     */
1521     function setLayout(&$form, $maj){
1522 softime 6565 if ( $maj < 2) {
1523 mbroquet 3730
1524 softime 6565 // Type de dossier/demande
1525     $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1526     $form->setFieldset('om_collectivite','D'
1527 mbroquet 3730 ,_('Type de dossier/demande'));
1528 softime 6565 $form->setFieldset('etat','F','');
1529     $form->setBloc('etat','F');
1530    
1531     // Autorisation contestée
1532     $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1533     $form->setFieldset('autorisation_contestee','D'
1534     ,_('Autorisation contestée'));
1535     $form->setFieldset('autorisation_contestee','F','');
1536     $form->setBloc('autorisation_contestee','F');
1537    
1538     // Date de la demande
1539 softime 10573 $form->setBloc('date_depot_mairie','D',"","col_4 demande_hidden_bloc");
1540     $form->setFieldset('date_depot_mairie','D',_('Date de la demande'));
1541 softime 6565 $form->setFieldset('date_demande','F','');
1542     $form->setBloc('date_demande','F');
1543    
1544 softime 8989 // En mode ajout et si l'option de saisie manuelle est activée
1545     if ($maj == 0
1546     && $this->f->is_option_dossier_saisie_numero_enabled() === true) {
1547    
1548     // Numéro de dossier
1549     $form->setBloc('num_doss_manuel','D',"","col_8 demande_hidden_bloc bloc_numero_dossier");
1550     $form->setBloc('num_doss_manuel','DF','', 'col_3 bloc_activ_num_manu saisie_manuelle');
1551     $form->setBloc('num_doss_type_da','D',"","col_8 bloc_num_manu");
1552     $form->setFieldset('num_doss_type_da','D',__("Numéro de dossier"));
1553     $form->setBloc('num_doss_type_da','DF','','type-da');
1554     $form->setBloc('num_doss_code_depcom','DF','','depcom');
1555     $form->setBloc('num_doss_annee','DF','','annee');
1556     $form->setBloc('num_doss_division','DF','','division');
1557     $form->setBloc('num_doss_sequence','DF','','sequence');
1558     $form->setFieldset('num_doss_sequence','F');
1559     $form->setBloc('num_doss_sequence','F');
1560     $form->setBloc('num_doss_sequence','F');
1561     }
1562    
1563 softime 10573 // En mode ajout et si l'option de saisie manuelle est activée
1564     if ($maj == 0
1565     && $this->f->is_option_dossier_saisie_numero_complet_enabled() === true) {
1566    
1567     // Numéro de dossier
1568     $form->setBloc('num_doss_manuel','D',"","col_8 demande_hidden_bloc bloc_numero_complet_dossier");
1569     $form->setBloc('num_doss_manuel','DF','', 'col_3 bloc_activ_num_manu saisie_manuelle');
1570     $form->setBloc('num_doss_complet','D',"","col_8 bloc_num_manu");
1571     $form->setFieldset('num_doss_complet','D',__("Numéro de dossier"));
1572     $form->setBloc('num_doss_complet','DF','','complet');
1573     $form->setFieldset('num_doss_complet','F');
1574     $form->setBloc('num_doss_complet','F');
1575     $form->setBloc('num_doss_complet','F');
1576     }
1577    
1578 softime 7067 // Localisation
1579 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1580 softime 6565 "col_12 localisation demande_hidden_bloc");
1581 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1582 softime 6565 $form->setFieldset('terrain_superficie','F','');
1583     $form->setBloc('terrain_superficie','F');
1584    
1585     // Demandeurs
1586     // → cf. formSpecificContent()
1587     }
1588     if ( $maj == 3 ) {
1589     $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1590     $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1591     $form->setFieldset('om_collectivite','D'
1592     ,_('Type de dossier/demande'));
1593     $form->setFieldset('dossier_autorisation','F','');
1594     $form->setBloc('dossier_autorisation','F');
1595 mbroquet 3730 /*Fin bloc 1*/
1596    
1597     // Affichage de l'état du dossier d'instruction
1598     $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1599     $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1600     $form->setFieldset('etat','F','');
1601     $form->setBloc('etat','F');
1602     $form->setBloc('etat','F');
1603    
1604 softime 6565 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1605    
1606 mbroquet 3730 /*Champ sur lequel s'ouvre le bloc 2 */
1607     $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1608     $form->setFieldset('date_demande','D',_('Date de la demande'));
1609     $form->setFieldset('date_demande','F','');
1610     $form->setBloc('date_demande','F');
1611     /*Fin bloc 2*/
1612    
1613     /*Champ sur lequel s'ouvre le bloc 3 */
1614 softime 8329 $form->setBloc('parcelle_temporaire','D',"",
1615 mbroquet 3730 "localisation col_12 demande_hidden_bloc");
1616 softime 8329 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1617 mbroquet 3730 $form->setFieldset('terrain_superficie','F','');
1618     $form->setBloc('terrain_superficie','F');
1619     /*Fin bloc 4*/
1620     }
1621     }
1622    
1623     /*
1624     * Ajoute des actions sur les deux premiers select
1625     * Add actions on the two first select
1626     */
1627     function setOnchange(&$form,$maj){
1628     parent::setOnchange($form,$maj);
1629    
1630     $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1631 softime 6565 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1632 mbroquet 3730 }
1633    
1634     function setLib(&$form,$maj) {
1635     parent::setLib($form,$maj);
1636     //libelle des champs
1637 softime 10573 $form->setLib('date_depot_mairie', __('Date de dépôt en mairie'));
1638 mbroquet 3730 $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1639 softime 6565 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1640 mbroquet 3730 }
1641 softime 6565
1642 mbroquet 3730 /*
1643     * Cache le champ terrain_references_cadastrales
1644     * Hide the fiels terrain_references_cadastrales
1645     */
1646     function setType(&$form,$maj) {
1647     parent::setType($form,$maj);
1648    
1649     $form->setType('dossier_instruction', 'hidden');
1650 softime 10573 $form->setType('source_depot', 'hidden');
1651 mbroquet 3730 $form->setType('dossier_autorisation', 'hidden');
1652 softime 6565 $form->setType('autorisation_contestee', 'autorisation_contestee');
1653 mbroquet 3730
1654     $form->setType('instruction_recepisse', 'hidden');
1655     $form->setType('arrondissement', 'hidden');
1656 softime 10573 $form->setType('etat_transmission_platau', 'hidden');
1657 mbroquet 3730
1658     $form->setType('etat', 'hidden');
1659 softime 10573
1660     if ($this->f->is_option_date_depot_mairie_enabled() === true){
1661     $form->setType('date_depot_mairie', "date");
1662     } else {
1663     $form->setType('date_depot_mairie', "hidden");
1664     }
1665    
1666 softime 8329 //Le paramètre "dépôt électronique" n'est pas modifiable manuellement
1667     if ($maj == 0) {
1668     $form->setType('depot_electronique', 'hidden');
1669     }
1670 mbroquet 3730
1671 softime 10573 $form->setType("commune", "hidden");
1672    
1673 mbroquet 3730 // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1674     // sauf demande_type
1675     if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1676     $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1677     $form->setType('etat', 'hiddenstatic');
1678     $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1679     $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1680     $form->setType('terrain_adresse_voie', 'hiddenstatic');
1681     $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1682     $form->setType('terrain_adresse_localite', 'hiddenstatic');
1683     $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1684     $form->setType('terrain_adresse_bp', 'hiddenstatic');
1685     $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1686     $form->setType('terrain_superficie', 'hiddenstatic');
1687     }
1688     if($maj == 1) {
1689 softime 8329 $form->setType('depot_electronique', 'hiddenstatic');
1690 mbroquet 3730 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1691     $form->setType('demande_type', 'selecthiddenstatic');
1692     }
1693     if($maj == 3) {
1694     $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1695     }
1696 softime 11418
1697     if($maj == 1 || $maj == 3) {
1698     // Numéro de dossier
1699     // Cache les champs inutiles lors de la consultation et de l'affichage du récépissé
1700     $form->setType('num_doss_manuel', 'hidden');
1701     $form->setType('num_doss_type_da', 'hidden');
1702     $form->setType('num_doss_code_depcom', 'hidden');
1703     $form->setType('num_doss_annee', 'hidden');
1704     $form->setType('num_doss_division', 'hidden');
1705     $form->setType('num_doss_sequence', 'hidden');
1706     $form->setType('num_doss_complet', 'hidden');
1707     }
1708    
1709 mbroquet 3730 }
1710    
1711 softime 10573
1712 mbroquet 3730 /**
1713     * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1714     * par l'utilisateur.
1715     *
1716     * @return integer identifiant du cerfa
1717     */
1718     function getIdCerfa() {
1719     if($this->cerfa != null) {
1720     return $this->cerfa;
1721     }
1722     // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1723     $sql = "SELECT
1724     dossier_autorisation_type_detaille.cerfa
1725     FROM
1726     ".DB_PREFIXE."dossier_autorisation_type_detaille
1727     JOIN
1728     ".DB_PREFIXE."cerfa
1729     ON
1730     dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1731     WHERE
1732     now()<=om_validite_fin
1733     AND now()>=om_validite_debut
1734     AND dossier_autorisation_type_detaille=".
1735     $this->valF['dossier_autorisation_type_detaille'];
1736 softime 8989 $this->cerfa = $this->f->db->getOne($sql);
1737 mbroquet 3730 $this->f->addToLog(
1738 softime 8989 __METHOD__."(): db->getone(\"".$sql."\");",
1739 mbroquet 3730 VERBOSE_MODE
1740     );
1741     $this->f->isDatabaseError($this->cerfa);
1742     return $this->cerfa;
1743     }
1744    
1745    
1746     /**
1747     * Méthode permettant d'ajouter un dossier d'autorisation.
1748     *
1749     * @param integer $id identifiant de la demande
1750     * @param array $val tableau de valeurs postées via le formulaire
1751     *
1752     * @return boolean false si erreur
1753     */
1754 softime 8989 function ajoutDossierAutorisation($id, $val) {
1755 softime 7996 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1756     "obj" => "dossier_autorisation",
1757     "idx" => "]",
1758     ));
1759 mbroquet 3730 $id_etat_initial_da =
1760     $this->f->getParameter('id_etat_initial_dossier_autorisation');
1761    
1762     // Vérification de l'existance d'un état initial des DA dans la table
1763     // om_parametre afin d'éviter d'eventuelle erreur de base de données
1764     if(isset($id_etat_initial_da)) {
1765     $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1766     WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1767 softime 8989 $count = $this->f->db->getOne($sql);
1768 mbroquet 3730 $this->f->addToLog(
1769 softime 8989 __METHOD__."(): db->getOne(\"".$sql."\")",
1770 mbroquet 3730 VERBOSE_MODE
1771     );
1772     if ($this->f->isDatabaseError($count, true)){
1773     $this->f->addToLog(
1774 softime 8989 __METHOD__."(): ERROR db->getOne(\"".$sql."\")",
1775 mbroquet 3730 DEBUG_MODE
1776     );
1777 softime 6565
1778 mbroquet 3730 return false;
1779     }
1780     if($count != 1) {
1781     $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1782 softime 6565
1783 mbroquet 3730 return false;
1784 softime 6565 }
1785 mbroquet 3730
1786 softime 6565 // La méthode ajouter prend en paramètre un tableau associatif
1787     // contenant toutes les champs de la classe instanciée,
1788     // d'où l'initialisation du tableau en bouclant sur la liste des
1789     // champs du DA
1790     foreach($dossier_autorisation->champs as $value) {
1791     $valAuto[$value] = null;
1792 mbroquet 3730 }
1793 softime 6565
1794 softime 10573
1795     // si l'option 'commune' n'est pas activée
1796     $insee = null;
1797     if ($this->f->is_option_dossier_commune_enabled($this->valF['om_collectivite']) === false) {
1798    
1799     // On récupère les paramètres de la collectivité concernée
1800     // par la demande.
1801     $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1802    
1803     // Le paramètre 'insee' est obligatoire si il n'est pas présent
1804     // dans le tableau des paramètres alors on stoppe le traitement.
1805     if (!isset($collectivite_parameters['insee'])) {
1806     $this->f->addToLog(
1807     __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1808     DEBUG_MODE
1809     );
1810     return false;
1811     }
1812    
1813     // enregistre le code insee
1814     $insee = $collectivite_parameters['insee'];
1815     }
1816    
1817     // si l'option 'commune' est activée
1818     else {
1819    
1820     // si la commune est définie
1821     if (! empty($this->valF['commune'])) {
1822    
1823     // récupère l'objet 'commune'
1824     $commune = $this->f->findObjectById("commune", $this->valF['commune']);
1825    
1826     // s'il est trouvé
1827     if (! empty($commune)) {
1828    
1829     // enregistre le code insee
1830     $insee = $commune->getVal('com');
1831     }
1832    
1833     // commune non-trouvée
1834     else {
1835     $this->f->addToLog(
1836     __METHOD__."(): ERROR commune '".$this->valF['commune']."' non-trouvée.",
1837     DEBUG_MODE
1838     );
1839     return false;
1840     }
1841     }
1842    
1843     // commune non-définie
1844     else {
1845     $this->f->addToLog(
1846     __METHOD__."(): ERROR champ 'commune' obligatoire.",
1847     DEBUG_MODE
1848     );
1849     return false;
1850     }
1851    
1852     // enregistre la commune
1853     $valAuto['commune'] = $this->valF['commune'];
1854     }
1855    
1856 softime 6565 // Définition des valeurs à insérer
1857 softime 10573 $valAuto['om_collectivite'] = $this->valF['om_collectivite'];
1858 softime 6565 $valAuto['dossier_autorisation']="";
1859     $valAuto['exercice']=null;
1860 softime 10573 $valAuto['insee'] = $insee;
1861 softime 6565 $valAuto['arrondissement']=
1862     $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1863     $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1864     $valAuto['erp_numero_batiment']=null;
1865     $valAuto['erp_ouvert']=null;
1866     $valAuto['erp_arrete_decision']=null;
1867     $valAuto['dossier_autorisation_type_detaille']=
1868     $this->valF['dossier_autorisation_type_detaille'];
1869 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true && $val['date_depot_mairie'] != null) {
1870     $valAuto['depot_initial']= $val['date_depot_mairie'];
1871     } else {
1872     $valAuto['depot_initial']=
1873     $this->dateDBToForm($this->valF['date_demande']);
1874     }
1875 softime 6565 $valAuto['terrain_references_cadastrales']=
1876     $this->valF['terrain_references_cadastrales'];
1877     $valAuto['terrain_adresse_voie_numero']=
1878     $this->valF['terrain_adresse_voie_numero'];
1879     $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1880     $valAuto['terrain_adresse_lieu_dit']=
1881     $this->valF['terrain_adresse_lieu_dit'];
1882     $valAuto['terrain_adresse_localite']=
1883     $this->valF['terrain_adresse_localite'];
1884     $valAuto['terrain_adresse_code_postal']=
1885     $this->valF['terrain_adresse_code_postal'];
1886     $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1887     $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1888     $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1889     $valAuto['numero_version']=-1;
1890 softime 10573 // Pour vérifier dans le dossier d'autorisation si déposé électroniquement
1891     $valAuto['depot_electronique']=$this->valF['depot_electronique'];
1892 softime 8989
1893     // saisie manuelle du numéro de dossier et division instructeur
1894     if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1895     isset($val['num_doss_sequence']) && !empty($val['num_doss_sequence'])) {
1896    
1897     $valAuto['numero_dossier_seq'] = $val['num_doss_sequence'];
1898    
1899     if (isset($val['num_doss_division'])) {
1900     $valAuto['division_instructeur'] = $val['num_doss_division'];
1901     }
1902     }
1903    
1904 softime 10573 $this->da_already_exists = false;
1905     // saisie manuelle du numéro de dossier complet
1906     if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1907     isset($val['num_doss_complet']) && !empty($val['num_doss_complet'])) {
1908     //
1909     $valAuto['numero_dossier_complet'] = $val['num_doss_complet'];
1910     $dossier_autorisation_id = $val['num_doss_complet'];
1911     $num_urba = $this->f->numerotation_urbanisme($val['num_doss_complet']);
1912     if (isset($num_urba['da'][0]) === true) {
1913     $dossier_autorisation_id = $num_urba['da'][0];
1914 softime 8989 }
1915 softime 10573 if ($this->f->findObjectById('dossier_autorisation', $dossier_autorisation_id) !== null) {
1916     $this->da_already_exists = true;
1917     }
1918 softime 6565 }
1919 softime 8989
1920 softime 10968 $valAuto['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
1921 softime 10573
1922     if ($this->da_already_exists === false) {
1923     // Ajout du dossier dans la base
1924     if($dossier_autorisation->ajouter($valAuto) === false) {
1925     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1926     if (!empty($dossier_autorisation->msg)) {
1927     $this->f->addToLog(__METHOD__."() : ERROR - ".$dossier_autorisation->msg, DEBUG_MODE);
1928     $this->addToMessage($dossier_autorisation->msg.'<br/>');
1929     }
1930     return false;
1931     }
1932     $dossier_autorisation_id = $dossier_autorisation->valF['dossier_autorisation'];
1933     $this->f->addToLog(__METHOD__."() : DA ajouté : ".$dossier_autorisation_id, VERBOSE_MODE);
1934     }
1935    
1936 softime 6565 // Liaison du dossier ajouter à la demande
1937 softime 10573 $this->valF['dossier_autorisation'] = $dossier_autorisation_id;
1938 softime 6565
1939     return true;
1940 mbroquet 3730 }
1941    
1942 softime 6565 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1943    
1944     return false;
1945 mbroquet 3730 }
1946    
1947     /**
1948     * Méthode permettant d'ajouter un dossier d'instruction.
1949     *
1950     * @param integer $id identifiant de la demande
1951     * @param array $val tableau de valeurs postées via
1952     * le formulaire
1953     * @param integer $dossier_instruction_type identifiant du DI type
1954     *
1955     * @return boolean false si erreur
1956     */
1957 softime 8989 function ajoutDossierInstruction($id, $val, $dossier_instruction_type) {
1958 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
1959     "obj" => "dossier",
1960     "idx" => "]",
1961     ));
1962 mbroquet 3730 foreach($dossier->champs as $value) {
1963     $valInstr[$value] = null;
1964     }
1965 softime 10573 // TODO: remove because unused
1966 softime 7996 $datd = $this->f->get_inst__om_dbform(array(
1967     "obj" => "dossier_autorisation_type_detaille",
1968     "idx" => $this->valF['dossier_autorisation_type_detaille'],
1969     ));
1970 mbroquet 3730
1971     /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1972     * versionning
1973     */
1974     $dossier->setDossierInstructionType($dossier_instruction_type);
1975    
1976     // Définition des valeurs à entrée dans la table
1977     $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1978     $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1979     $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1980 softime 10573 if ($this->f->is_option_date_depot_mairie_enabled() === true){
1981     $valInstr['date_depot_mairie'] = $val['date_depot_mairie'];
1982     }
1983 mbroquet 3730 $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1984     $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1985     $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1986     $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1987     $valInstr['annee']=$annee->format("y");
1988 softime 8329 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
1989     $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
1990 mbroquet 3730 $valInstr['terrain_references_cadastrales']=
1991     $this->valF['terrain_references_cadastrales'];
1992     $valInstr['terrain_adresse_voie_numero']=
1993     $this->valF['terrain_adresse_voie_numero'];
1994     $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1995     $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1996     $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1997     $valInstr['terrain_adresse_code_postal']=
1998     $this->valF['terrain_adresse_code_postal'];
1999     $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
2000     $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
2001     $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
2002     $valInstr['description']="";
2003     $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
2004 softime 6565 if ($this->valF["autorisation_contestee"] != "") {
2005     $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
2006     }
2007 softime 10573 $valInstr['demande_type'] = $this->valF['demande_type'];
2008     $valInstr['etat_transmission_platau'] = $val['etat_transmission_platau'];
2009 mbroquet 3730
2010     /*
2011     * Gestion de la qualification
2012     * */
2013     // Initialise le champ à false
2014     $valInstr['a_qualifier'] = false;
2015    
2016     // Récupère l'information depuis le type de la demande
2017     $qualification = $this->get_qualification($val['demande_type']);
2018    
2019     // Si le dossier doit être à qualifier
2020     if ($qualification === 't') {
2021     // Met le champ à true
2022     $valInstr['a_qualifier'] = true;
2023     }
2024    
2025 softime 6929 /*
2026     * Gestion de la simulation des taxes
2027     */
2028     // Récupère l'instance du cerfa lié au type détaillé du DA
2029     $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
2030    
2031 softime 10573 // Récupère le paramétrage des taxes
2032     $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
2033     // Si un paramétrage des taxes est récupéré pour la collectivité
2034     if ($inst_taxe_amenagement !== null) {
2035     // Si la taxe d'aménagement à un seul secteur
2036     if ($inst_taxe_amenagement->has_one_secteur() == true) {
2037     // Sélectionne l'unique secteur automatiquement
2038     $valInstr['tax_secteur'] = 1;
2039     }
2040     }
2041 softime 6929
2042 softime 10573 // saisie de la commune
2043     if (array_key_exists('commune', $this->valF)) {
2044     $valInstr['commune'] = $this->valF['commune'];
2045     }
2046 softime 6929
2047 softime 10573 // saisie de l'affectation automatique
2048     if (isset($this->valF['affectation_automatique'])) {
2049     $valInstr['affectation_automatique'] = $this->valF['affectation_automatique'];
2050 mbroquet 3730 }
2051    
2052 softime 10573 // saisie manuelle du numéro de dossier complet
2053     if (isset($val['num_doss_manuel']) === true && $val['num_doss_manuel'] == 'Oui' &&
2054     isset($val['num_doss_complet']) === true && empty($val['num_doss_complet']) === false) {
2055     //
2056     $valInstr['numero_dossier_complet'] = $val['num_doss_complet'];
2057     }
2058    
2059 softime 10968 $valInstr['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
2060 softime 10573
2061 mbroquet 3730 //
2062 softime 10573 $this->f->addToLog(__METHOD__."() : ajout du dossier", EXTRA_VERBOSE_MODE);
2063 softime 8989 if($dossier->ajouter($valInstr) === false) {
2064 softime 10573 $this->f->addToLog($dossier->msg, DEBUG_MODE);
2065 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
2066 softime 10573 // Affiche l'erreur empêchant a création du dossier d'instruction
2067     $this->addToMessage($dossier->msg);
2068 mbroquet 3730 return false;
2069     }
2070 softime 10573 else {
2071     $this->f->addToLog(__METHOD__."() : dossier ajouté", VERBOSE_MODE);
2072     }
2073    
2074 softime 10207
2075     // Si le dossier n'est pas un initial, que le type de dossier d'autorisation détaillé
2076     // est dans la liste du paramètre erp__dossier__nature__at
2077     // ou (que le type de dossier d'autorisation détaillé est dans la liste du paramètre erp__dossier__nature_pc
2078     // et que le type de dossier d'instruction est dans la liste du paramètre erp__dossier__type_di__pc)
2079     // alors la valeur de la case ERP du dossier initial est appliquée au nouveau dossier
2080     if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2081     if (($dossier->get_dossier_instruction_version($dossier->valF['dossier']) != ''
2082     || $dossier->get_dossier_instruction_version($dossier->valF['dossier']) != '0')) {
2083    
2084     if ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
2085     || ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2086     && in_array($dossier->valF['dossier_instruction_type'], explode(";", $this->f->getParameter('erp__dossier__type_di__pc'))) === true)) {
2087    
2088     // On récupère la valeur de la case erp du dossier d'instruction initial
2089     $sql = sprintf('
2090     SELECT erp FROM %1$sdossier
2091     LEFT JOIN %1$sdossier_instruction_type
2092     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2093     WHERE dossier.dossier_autorisation = (
2094     SELECT dossier_autorisation.dossier_autorisation
2095     FROM %1$sdossier_autorisation
2096     LEFT JOIN %1$sdossier
2097     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2098     WHERE dossier = \'%2$s\')
2099     AND dossier_instruction_type.code = \'P\'
2100     ',
2101     DB_PREFIXE,
2102     $dossier->valF['dossier']
2103     );
2104     $res = $this->f->get_one_result_from_db_query($sql, true);
2105     if ($res['code'] === 'KO') {
2106     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de récupérer la valeur de la case ERP du DI initial", DEBUG_MODE);
2107     return false;
2108     }
2109    
2110     // On met à jour la case erp en fonction du DI initial
2111     $valF = array();
2112 softime 10968 $valF['erp'] = isset($res['result']) === true && $res['result'] === 't' ? true : false;
2113 softime 10207
2114     $res = $this->f->db->autoExecute(
2115 softime 10573 DB_PREFIXE."dossier",
2116 softime 10207 $valF,
2117     DB_AUTOQUERY_UPDATE,
2118     $dossier->clePrimaire."='".$dossier->valF['dossier']."'"
2119     );
2120    
2121     if ($this->f->isDatabaseError($res, true)) {
2122     // Appel de la methode de recuperation des erreurs
2123     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2124     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'appliquer la case ERP sur le dossier d'instruction.", DEBUG_MODE);
2125     $this->correct = false;
2126     return false;
2127     }
2128     }
2129     }
2130     }
2131    
2132 mbroquet 3730 //Affichage de message à l'utilisateur concernant un problème lors de
2133     //l'affectation de l'instructeur au dossier d'instruction
2134     if ($dossier->valF['dossier_autorisation'] === '' &&
2135     $dossier->valF['instructeur'] === null){
2136     $this->addToMessage(
2137     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2138     );
2139     }
2140     elseif ( $dossier->valF['instructeur'] === null ){
2141     if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2142     $this->addToMessage("<br/> ".
2143     _("Pensez a assigner un instructeur a ce dossier.")
2144     );
2145     } else {
2146     $this->addToMessage(
2147     _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2148     );
2149     }
2150     }
2151    
2152     // Liaison du dossier ajouter à la demande
2153     $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
2154    
2155     //
2156     return true;
2157     }
2158    
2159     /**
2160     * Méthode permettant d'ajouter les données techniques d'un DA.
2161     *
2162     * @param integer $id identifiant de la demande
2163     * @param array $val tableau de valeurs postées via le formulaire
2164     *
2165     * @return boolean false si erreur
2166     */
2167 softime 8989 function ajoutDonneesTechniquesDA($id, $val) {
2168 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
2169     "obj" => "donnees_techniques",
2170     "idx" => "]",
2171     ));
2172 mbroquet 3730
2173     // Champs tous à NULL car seul le champ concernant le dossier
2174     // d'autorisation sera rempli
2175     foreach($this->DTDA->champs as $value) {
2176     $valF[$value] = null;
2177     }
2178     // Ajout du numéro de dossier d'instruction
2179     $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
2180     // Identifiant du cerfa
2181     $valF['cerfa'] = $this->getIdCerfa();
2182     //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
2183     if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
2184     // Ajout des données techniques
2185 softime 8989 if($this->DTDA->ajouter($valF) === false) {
2186 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
2187     return false;
2188     }
2189 softime 10573 $this->f->addToLog(__METHOD__."() : DTDA ajoutées", VERBOSE_MODE);
2190 mbroquet 3730 }
2191     else {
2192     //On indique que le dossier d'autorisation n'a pas de données techniques
2193     $this->DTDA = null;
2194     //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
2195     $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
2196     return -1;
2197     }
2198    
2199     //
2200     return true;
2201     }
2202    
2203     /**
2204     * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
2205     **/
2206 softime 8989 function ajoutLiensDossierAutorisation($id, $val) {
2207 softime 9864 // Vérifie que le dossier d'instruction possède déjà un petitionnaire principal
2208     $query = sprintf('
2209     SELECT COUNT(lien_dossier_autorisation_demandeur)
2210     FROM %1$slien_dossier_autorisation_demandeur
2211     WHERE dossier_autorisation = \'%2$s\'
2212     AND petitionnaire_principal IS TRUE
2213     ',
2214     DB_PREFIXE,
2215     $this->valF['dossier_autorisation']
2216     );
2217     $res = $this->f->get_one_result_from_db_query($query, true);
2218     if ($res['code'] === 'KO') {
2219     return false;
2220     }
2221     $already_principal = false;
2222     if ($res['result'] > 0) {
2223     $already_principal = true;
2224     }
2225    
2226 mbroquet 3730 // Création des liens entre le dossier autorisation et les demandeurs
2227 softime 7996 $ldad = $this->f->get_inst__om_dbform(array(
2228     "obj" => "lien_dossier_autorisation_demandeur",
2229     "idx" => "]",
2230     ));
2231 mbroquet 3730 // Recupération des demandeurs liés à la demande
2232 softime 8989 $sql = str_replace(
2233     "<demande>",
2234     $this->valF['demande'],
2235     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2236     );
2237     $sql .= " AND lien_demande_demandeur.demandeur NOT IN (
2238 mbroquet 3730 SELECT lien_dossier_autorisation_demandeur.demandeur
2239     FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
2240     WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
2241 softime 8989 '".$this->valF['dossier_autorisation']."')";
2242     $res = $this->f->db->query($sql);
2243     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2244 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2245     return false;
2246     }
2247     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2248 softime 9864 $can_add = true;
2249 mbroquet 3730 $row['lien_dossier_autorisation_demandeur'] = NULL;
2250     $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
2251 softime 9864 // La liaison n'est pas ajoutée si celle-ci concerne un pétitionnaire principal
2252     // alors que le DA possède est déjà lié à un petitionnaire principal
2253     if ($row['petitionnaire_principal'] === 't'
2254     && $already_principal === true) {
2255     //
2256     $can_add = false;
2257 mbroquet 3730 }
2258 softime 9864 if ($can_add === true) {
2259     $add = $ldad->ajouter($row);
2260     if ($add === false) {
2261     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
2262     return false;
2263     }
2264     }
2265 mbroquet 3730 }
2266 softime 10573 $this->f->addToLog(__METHOD__."() : liens demandeurs DA ajoutés", VERBOSE_MODE);
2267 mbroquet 3730
2268     //
2269     return true;
2270     }
2271    
2272     /**
2273     * Ajout des liens demandeurs / dossier d'autorisation
2274     **/
2275 softime 8989 function ajoutLiensDossierInstruction($id, $val) {
2276 mbroquet 3730 // Création des liens entre le dossier instruction et les demandeurs
2277 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
2278     "obj" => "lien_dossier_demandeur",
2279     "idx" => "]",
2280     ));
2281 mbroquet 3730 // Recupération des demandeurs liés à la demande
2282 softime 8989 $sql = str_replace(
2283     "<demande>",
2284     $this->valF['demande'],
2285     $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2286     );
2287     $res = $this->f->db->query($sql);
2288     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2289 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2290     return false;
2291     }
2292     while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2293     $row['lien_dossier_demandeur'] = NULL;
2294     $row['dossier'] = $this->valF['dossier_instruction'];
2295 softime 8989 if ($ldd->ajouter($row) === false) {
2296 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
2297     return false;
2298     }
2299     }
2300 softime 10573 $this->f->addToLog(__METHOD__."() : liens demandeurs DI ajoutés", VERBOSE_MODE);
2301 mbroquet 3730
2302     //
2303     return true;
2304     }
2305    
2306     /*
2307     * Récupère l'identifiant d'un arrondissement à partir d'un code postal
2308     */
2309     function getArrondissement($terrain_adresse_code_postal){
2310    
2311     $arrondissement = NULL;
2312    
2313     $sql = "SELECT
2314     arrondissement
2315     FROM
2316     ".DB_PREFIXE."arrondissement
2317     WHERE
2318     code_postal = '$terrain_adresse_code_postal' ";
2319     $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
2320    
2321 softime 8989 $res = $this->f->db->query($sql);
2322 mbroquet 3730 $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2323     $this->f->isDatabaseError($res);
2324    
2325     if( $res->numrows() > 0 ) {
2326    
2327     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2328     $arrondissement = $row['arrondissement'];
2329     }
2330    
2331     return $arrondissement;
2332     }
2333    
2334     /*
2335     * Récupère l'évènement lié à un type de demande
2336     */
2337     function getEvenement($demande_type){
2338    
2339     $evenement = null;
2340    
2341     $sql =
2342     "SELECT
2343     evenement
2344     FROM
2345     ".DB_PREFIXE."demande_type
2346     WHERE
2347     demande_type = $demande_type";
2348    
2349 softime 8989 $res = $this->f->db->query($sql);
2350 mbroquet 3730 $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2351     $this->f->isDatabaseError($res);
2352    
2353     if ( $res->numrows() > 0 ){
2354    
2355     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2356     $evenement = $row['evenement'];
2357     }
2358    
2359     return $evenement;
2360     }
2361    
2362    
2363    
2364     /**
2365     * Retourne le libellé du dossier d'autorisation
2366     * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2367     * @return string Libellé dossier d'autorisation
2368     */
2369     function get_dossier_autorisation_libelle($dossier_autorisation) {
2370    
2371     $dossier_autorisation_libelle = "";
2372    
2373     // Requête SQL
2374     $sql = "SELECT
2375     dossier_autorisation_libelle
2376     FROM
2377     ".DB_PREFIXE."dossier_autorisation
2378     WHERE
2379     dossier_autorisation = '$dossier_autorisation'";
2380    
2381 softime 8989 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
2382 mbroquet 3730 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2383     $this->f->isDatabaseError($dossier_autorisation_libelle);
2384    
2385     // Retourne le résultat
2386     return $dossier_autorisation_libelle;
2387     }
2388    
2389     /**
2390     * Retourne le libellé du dossier d'autorisation.
2391     * @param string $dossier Identifiant du dossier d'autorisation
2392     *
2393     * @return string Libellé dossier d'autorisation
2394     */
2395     function get_dossier_libelle($dossier) {
2396    
2397     $dossier_libelle = "";
2398    
2399     // Requête SQL
2400     $sql = "SELECT
2401     dossier_libelle
2402     FROM
2403     ".DB_PREFIXE."dossier
2404     WHERE
2405     dossier = '$dossier'";
2406    
2407 softime 8989 $dossier_libelle = $this->f->db->getOne($sql);
2408 mbroquet 3730 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2409     $this->f->isDatabaseError($dossier_libelle);
2410    
2411     // Retourne le résultat
2412     return $dossier_libelle;
2413     }
2414 softime 8989
2415 mbroquet 3730 /**
2416 softime 8989 * TRIGGER - triggerajouter.
2417     *
2418     * - Ajout des dossiers
2419     *
2420     * @return boolean
2421     */
2422     function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2423     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2424     //
2425 softime 10573 // Le mode MC nécessite des paramètres spécifiques
2426     if ($this->f->is_option_om_collectivite_entity_enabled($this->valF['om_collectivite']) === true) {
2427     $parameters = $this->f->getCollectivite(intval($this->valF['om_collectivite']));
2428     if ($parameters['code_entite'] === null) {
2429     $this->addToMessage(sprintf(
2430     __("Veuillez renseigner le paramètre %s"),
2431     sprintf('<span class="bold">%s</span>', 'code_entite')
2432     ));
2433     $this->correct = false;
2434     return false;
2435     }
2436     }
2437     //
2438 mbroquet 3730 if($this->valF["demande_type"] != null) {
2439 softime 8989 $res = $this->f->db->query(
2440 mbroquet 3730 str_replace(
2441     '<idx>',
2442     $this->valF['demande_type'],
2443 softime 8989 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2444 mbroquet 3730 )
2445     );
2446     $this->f->addToLog(
2447 softime 8989 __METHOD__."(): db->query(\"".
2448 mbroquet 3730 str_replace(
2449     '<idx>',
2450     $this->valF['demande_type'],
2451 softime 8989 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2452 mbroquet 3730 )."\")",
2453     VERBOSE_MODE
2454     );
2455     if ($this->f->isDatabaseError($res, true)) {
2456     return false;
2457     }
2458     // Attribut permettant de définir si un dossier a été créé
2459     $this->ajoutDI = false;
2460     $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
2461 softime 10808
2462     // Par défaut on considère que le dossier d'instruction ne doit pas
2463     // être transmissible à Plat'AU
2464     $etat_transmission_platau = 'jamais_transmissible';
2465    
2466 mbroquet 3730 // Création du dossier_autorisation
2467     if($this->valF['dossier_autorisation'] == "") {
2468 softime 6565 //
2469 softime 8989 if($this->ajoutDossierAutorisation($id, $val) === false) {
2470     if(empty($this->msg)) {
2471     $this -> addToMessage(
2472     _("Erreur lors de l'enregistrement de la demande.")." ".
2473     _("Contactez votre administrateur.")
2474     );
2475     }
2476 mbroquet 3730 $this->correct = false;
2477     return false;
2478     }
2479 softime 10808
2480     // Seulement dans le cas d'un dossier d'instruction initial, dont le type serait
2481     // prise en charge par Plat'AU, alors il serait transmissible
2482     if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true) {
2483     $etat_transmission_platau = 'non_transmissible';
2484     if (isset($val['etat_transmission_platau']) === true) {
2485     $etat_transmission_platau = $val['etat_transmission_platau'];
2486     }
2487     }
2488    
2489 softime 10573 if ($this->da_already_exists === false) {
2490     //
2491     $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2492     if ($inst_da->is_dossier_autorisation_visible()) {
2493     $this -> addToMessage(
2494     _("Creation du dossier d'autorisation no").
2495     '<span id="new_da">'.
2496     $this->get_dossier_autorisation_libelle(
2497     $this->valF['dossier_autorisation']
2498     ).'</span>'
2499     );
2500     }
2501     // Ajout des données techniques au dossier d'autorisation
2502     if($this->ajoutDonneesTechniquesDA($id, $val) === false) {
2503     $this -> addToMessage(
2504     _("Erreur lors de l'enregistrement de la demande.")." ".
2505     _("Contactez votre administrateur.")
2506     );
2507     $this->correct = false;
2508     return false;
2509     }
2510 softime 6565 }
2511 mbroquet 3730 } else {
2512     $sqlIdDTDA = "SELECT donnees_techniques
2513     FROM ".DB_PREFIXE."donnees_techniques
2514     WHERE dossier_autorisation='".
2515     $this->valF['dossier_autorisation']."'";
2516 softime 8989 $idDTDA = $this->f->db->getOne($sqlIdDTDA);
2517 mbroquet 3730 $this->addToLog(
2518 softime 8989 __METHOD__."(): db->getOne(\"".$sqlIdDTDA."\")",
2519 mbroquet 3730 VERBOSE_MODE
2520     );
2521     if ($this->f->isDatabaseError($idDTDA, true)) {
2522     return false;
2523     }
2524    
2525     $this->DTDA = null;
2526     if ($idDTDA!=="" && is_numeric($idDTDA)){
2527 softime 7996 $this->DTDA = $this->f->get_inst__om_dbform(array(
2528     "obj" => "donnees_techniques",
2529     "idx" => $idDTDA,
2530     ));
2531 mbroquet 3730 $this->DTDA->setValFFromVal();
2532     }
2533     }
2534 softime 8329
2535 mbroquet 3730 // Enregistrement du numéro dossier existant
2536     // (il sera écrasé si un DI est créé)
2537     if ($this->getParameter("idx_dossier") != "") {
2538     $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
2539     }
2540 softime 10808
2541     // Affecte la valeur de l'état de transmission avant la création du
2542     // dossier d'instruction
2543     $val['etat_transmission_platau'] = $etat_transmission_platau;
2544    
2545 mbroquet 3730 // Création du dossier d'instruction
2546     if($dossier_type['dossier_instruction_type'] != null) {
2547 softime 8989 if($this->ajoutDossierInstruction($id, $val, $dossier_type['dossier_instruction_type']) === false ) {
2548     $this->addToMessage(
2549 mbroquet 3730 _("Erreur lors de l'enregistrement de la demande.")." ".
2550     _("Contactez votre administrateur.")
2551     );
2552     $this->correct = false;
2553     return false;
2554     }
2555     // Libellé du dossier
2556     $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
2557     // Message de validation
2558 softime 8989 $this->addToMessage(
2559 softime 4631 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
2560 mbroquet 3730 );
2561 softime 4631
2562 mbroquet 3730 // Attribut permettant de définir si un dossier a été créé.
2563     $this->ajoutDI = true;
2564     }
2565    
2566 softime 6565 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
2567     $code_datd = $inst_datd->getVal('code');
2568    
2569     $obj = "dossier_instruction";
2570     if ($code_datd === 'REC' OR $code_datd === 'REG') {
2571     $obj = "dossier_contentieux_tous_recours";
2572     }
2573     if ($code_datd === 'IN') {
2574     $obj = "dossier_contentieux_toutes_infractions";
2575     }
2576    
2577 softime 4631 // Template du lien vers le DI
2578 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>";
2579 softime 4631
2580     // Lien vers le DI
2581     $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
2582    
2583     // Message affiché à l'utilisateur
2584     $this->addToMessage($link_di."<br/>");
2585    
2586 mbroquet 3730 /*Ajout de l'arrondissement à partir du code postal*/
2587     if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
2588    
2589     $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
2590     }
2591     }
2592    
2593     //
2594     return true;
2595     }
2596    
2597     /**
2598 fmichon 4708 * TRIGGER - triggerajouterapres.
2599     *
2600     * - Ajout des délégataires et pétitionnaires
2601     * - ...
2602     * - Option de numérisation
2603     * - Interface avec le référentiel ERP [109]
2604     * - Interface avec le référentiel ERP [112]
2605     * - Interface avec le référentiel ERP [110]
2606     * - Interface avec le référentiel ERP [107]
2607     *
2608     * @return boolean
2609     */
2610 softime 8989 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2611     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2612 softime 6391 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
2613 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2614 softime 6391 // Instanciation du dossier d'instruction concerné par la demande en
2615     // cours d'ajout avant modification éventuelle par l'instruction
2616     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2617     // Récupère l'état du dossier avant l'exécution d'une éventuelle action
2618     // associée à l'événement d'instruction : utile pour le message 112 vers
2619     // le référentiel ERP
2620     $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
2621     }
2622    
2623 fmichon 4708 /**
2624     *
2625     */
2626 softime 8989 if ($this->insertLinkDemandeDemandeur() == false) {
2627 mbroquet 3730 return false;
2628     }
2629    
2630     // Ajout des lliens entre dossier_autorisation et demandeur
2631     if(!empty($this->valF['dossier_autorisation'])) {
2632 softime 8989 if ($this->ajoutLiensDossierAutorisation($id, $val) == false) {
2633 mbroquet 3730 return false;
2634     }
2635     }
2636 softime 6565 // Ajout des liens entre dossier et demandeur
2637 mbroquet 3730 if($this->ajoutDI === TRUE) {
2638 softime 8989 if ($this->ajoutLiensDossierInstruction($id, $val) == false) {
2639 mbroquet 3730 return false;
2640     }
2641     }
2642 softime 6565
2643     // Création d'un lien entre le nouveau DI et le dossier contesté
2644     if ($this->valF["autorisation_contestee"] != "") {
2645     if ($this->ajoutLienDossierConteste() === false) {
2646     return false;
2647     }
2648     }
2649 mbroquet 3730
2650     // Duplication des lots (et leurs données techniques) et
2651     // liaison au nouveau dossier_d'instruction
2652     if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
2653 softime 8989 $this->lienLotDossierInstruction($id, $val);
2654 mbroquet 3730 }
2655    
2656     /*Création du lien de téléchargement de récépissé de demande*/
2657     if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
2658     && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
2659    
2660     /*Récupérer l'événement lié à ce type de demande*/
2661     $evenement = $this->getEvenement($this->valF['demande_type']);
2662    
2663     /*Récupération de la lettre type de l'événement*/
2664     $lettretype = $this->f->getLettreType($evenement);
2665    
2666     /*Création d'une nouvelle instruction avec cet événement*/
2667     /*Données*/
2668     $valInstr['instruction']=NULL;
2669    
2670     $valInstr['destinataire']=$this->valF['dossier_instruction'];
2671     $valInstr['dossier']=$this->valF['dossier_instruction'];
2672     // Récupère la date de la demande
2673     $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
2674     $valInstr['evenement']=$evenement;
2675     $valInstr['lettretype']=$lettretype;
2676     $valInstr['complement_om_html']="";
2677     $valInstr['complement2_om_html']="";
2678    
2679     $valInstr['action']="initialisation";
2680     $valInstr['delai']="2";
2681     $valInstr['etat']="notifier";
2682     $valInstr['accord_tacite']="Oui";
2683     $valInstr['delai_notification']="1";
2684     $valInstr['archive_delai']="0";
2685     $valInstr['archive_date_complet']=NULL;
2686     $valInstr['archive_date_dernier_depot']=NULL;
2687     $valInstr['archive_date_rejet']=NULL;
2688     $valInstr['archive_date_limite']=NULL;
2689     $valInstr['archive_date_notification_delai']=NULL;
2690     $valInstr['archive_accord_tacite']="Non";
2691     $valInstr['archive_etat']="initialiser";
2692     $valInstr['archive_date_decision']=NULL;
2693     $valInstr['archive_avis']="";
2694     $valInstr['archive_date_validite']=NULL;
2695     $valInstr['archive_date_achevement']=NULL;
2696     $valInstr['archive_date_chantier']=NULL;
2697     $valInstr['archive_date_conformite']=NULL;
2698     $valInstr['archive_incompletude']=NULL;
2699     $valInstr['archive_incomplet_notifie']=NULL;
2700     $valInstr['archive_evenement_suivant_tacite']="";
2701     $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
2702     $valInstr['archive_etat_pendant_incompletude']=NULL;
2703     $valInstr['archive_date_limite_incompletude']=NULL;
2704     $valInstr['archive_delai_incompletude']=NULL;
2705     $valInstr['archive_autorite_competente']=NULL;
2706     $valInstr['complement3_om_html']="";
2707     $valInstr['complement4_om_html']="";
2708     $valInstr['complement5_om_html']="";
2709     $valInstr['complement6_om_html']="";
2710     $valInstr['complement7_om_html']="";
2711     $valInstr['complement8_om_html']="";
2712     $valInstr['complement9_om_html']="";
2713     $valInstr['complement10_om_html']="";
2714     $valInstr['complement11_om_html']="";
2715     $valInstr['complement12_om_html']="";
2716     $valInstr['complement13_om_html']="";
2717     $valInstr['complement14_om_html']="";
2718     $valInstr['complement15_om_html']="";
2719     $valInstr['avis_decision']=NULL;
2720     $valInstr['date_finalisation_courrier']=NULL;
2721     $valInstr['date_envoi_signature']=NULL;
2722     $valInstr['date_retour_signature']=NULL;
2723     $valInstr['date_envoi_rar']=NULL;
2724     $valInstr['date_retour_rar']=NULL;
2725     $valInstr['date_envoi_controle_legalite']=NULL;
2726     $valInstr['date_retour_controle_legalite']=NULL;
2727     $valInstr['signataire_arrete']=NULL;
2728     $valInstr['numero_arrete']=NULL;
2729     $valInstr['code_barres']=NULL;
2730     $valInstr['om_fichier_instruction']=NULL;
2731     $valInstr['om_final_instruction']=NULL;
2732     $valInstr['document_numerise']=NULL;
2733     $valInstr['autorite_competente']=NULL;
2734     $valInstr['duree_validite_parametrage']="0";
2735     $valInstr['duree_validite']="0";
2736 nmeucci 3873 $valInstr['date_depot']=NULL;
2737 softime 10573 $valInstr['date_depot_mairie']=NULL;
2738 mbroquet 3730 $valInstr['om_final_instruction_utilisateur']= "f";
2739 softime 8329 $valInstr['om_fichier_instruction_dossier_final']= "f";
2740 mbroquet 3730 $valInstr['created_by_commune']= "f";
2741 softime 6565 $valInstr['archive_date_cloture_instruction'] = null;
2742     $valInstr['archive_date_premiere_visite'] = null;
2743     $valInstr['archive_date_derniere_visite'] = null;
2744     $valInstr['archive_date_contradictoire'] = null;
2745     $valInstr['archive_date_retour_contradictoire'] = null;
2746     $valInstr['archive_date_ait'] = null;
2747     $valInstr['archive_date_transmission_parquet'] = null;
2748 softime 8593 $valInstr['flag_edition_integrale'] = 'f';
2749     $valInstr['titre_om_htmletat'] = null;
2750     $valInstr['corps_om_htmletatex'] = null;
2751     $valInstr['archive_dossier_instruction_type'] = null;
2752 softime 8989 $valInstr['archive_date_affichage'] = null;
2753 softime 10573 $valInstr['pec_metier'] = null;
2754     $valInstr['archive_pec_metier'] = null;
2755     $valInstr['archive_a_qualifier'] = null;
2756     $valInstr['id_parapheur_signature'] = NULL;
2757     $valInstr['statut_signature'] = NULL;
2758     $valInstr['commentaire_signature'] = NULL;
2759     $valInstr['historique_signature'] = NULL;
2760     $valInstr['commentaire'] = NULL;
2761 softime 11418 $valInstr['envoye_cl_platau'] = "f";
2762 softime 10573
2763 mbroquet 3730 // Récupération des champs archive si cette demande a créée un dossier
2764     // d'instruction mais pas un P0
2765     if (!is_null($this->valF['dossier_instruction']) &&
2766     $this->valF['dossier_instruction'] !== "" ){
2767    
2768     // Requête
2769     $sql = "SELECT dossier_instruction_type.code
2770     FROM ".DB_PREFIXE."demande_type
2771     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2772     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2773     WHERE demande_type.demande_type = ".$this->valF['demande_type'];
2774 softime 8989 $res = $this->f->db->getOne($sql);
2775     $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2776 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
2777     return false;
2778     }
2779 softime 10573
2780     // On vérifie qu'il ne s'agit pas d'une nouvelle demande
2781     if (get_called_class() !== 'demande_nouveau_dossier') {
2782 mbroquet 3730 $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
2783    
2784     if ($res == false) {
2785 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);
2786 mbroquet 3730 return false;
2787     }
2788    
2789     if (isset($res['archive_delai'])) {
2790     $valInstr['archive_delai']=$res["archive_delai"];
2791     }
2792     if (isset($res['archive_date_complet'])) {
2793     $valInstr['archive_date_complet']=$res["archive_date_complet"];
2794     }
2795     if (isset($res['archive_date_dernier_depot'])) {
2796     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
2797     }
2798     if (isset($res['archive_date_rejet'])) {
2799     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
2800     }
2801     if (isset($res['archive_date_limite'])) {
2802     $valInstr['archive_date_limite']=$res["archive_date_limite"];
2803     }
2804     if (isset($res['archive_date_notification_delai'])) {
2805     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
2806     }
2807     if (isset($res['archive_accord_tacite'])) {
2808     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
2809     }
2810     if (isset($res['archive_etat'])) {
2811     $valInstr['archive_etat']=$res["archive_etat"];
2812     }
2813     if (isset($res['archive_date_decision'])) {
2814     $valInstr['archive_date_decision']=$res["archive_date_decision"];
2815     }
2816     if (isset($res['archive_avis'])) {
2817     $valInstr['archive_avis']=$res["archive_avis"];
2818     }
2819     if (isset($res['archive_date_validite'])) {
2820     $valInstr['archive_date_validite']=$res["archive_date_validite"];
2821     }
2822     if (isset($res['archive_date_achevement'])) {
2823     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2824     }
2825     if (isset($res['archive_date_chantier'])) {
2826     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2827     }
2828     if (isset($res['archive_date_conformite'])) {
2829     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2830     }
2831     if (isset($res['archive_incompletude'])) {
2832     $valInstr['archive_incompletude']=$res["archive_incompletude"];
2833     }
2834     if (isset($res['archive_incomplet_notifie'])) {
2835     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2836     }
2837     if (isset($res['archive_evenement_suivant_tacite'])) {
2838     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2839     }
2840     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2841     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2842     }
2843     if (isset($res['archive_etat_pendant_incompletude'])) {
2844     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2845     }
2846     if (isset($res['archive_date_limite_incompletude'])) {
2847     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2848     }
2849     if (isset($res['archive_delai_incompletude'])) {
2850     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2851     }
2852     if (isset($res['archive_autorite_competente'])) {
2853     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2854     }
2855 softime 6565 if (isset($res['archive_date_cloture_instruction'])) {
2856     $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2857     }
2858     if (isset($res['archive_date_premiere_visite'])) {
2859     $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2860     }
2861     if (isset($res['archive_date_derniere_visite'])) {
2862     $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2863     }
2864     if (isset($res['archive_date_contradictoire'])) {
2865     $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2866     }
2867     if (isset($res['archive_date_retour_contradictoire'])) {
2868     $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2869     }
2870     if (isset($res['archive_date_ait'])) {
2871     $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2872     }
2873     if (isset($res['archive_date_transmission_parquet'])) {
2874     $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2875     }
2876 softime 8989 if (isset($res['archive_date_affichage'])) {
2877     $valInstr['archive_date_affichage'] = $res['archive_date_affichage'];
2878     }
2879 softime 10573 if (isset($res['archive_pec_metier'])) {
2880     $valInstr['archive_pec_metier'] = $res['archive_pec_metier'];
2881     }
2882     if (isset($res['archive_a_qualifier'])) {
2883     $valInstr['archive_a_qualifier'] = $res['archive_a_qualifier'];
2884     }
2885 mbroquet 3730 }
2886     }
2887    
2888     // Création d'un nouveau dossier
2889 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
2890     "obj" => "instruction",
2891     "idx" => "]",
2892     ));
2893 softime 9245 $instruction->valF = array();
2894 softime 8989 if ($instruction->ajouter($valInstr) === false) {
2895 nmeucci 3876 // Suppression des messages valides puisque erreur
2896     $this->msg = '';
2897     $this -> addToMessage($instruction->msg);
2898 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2899     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2900     return false;
2901     }
2902 softime 10573 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) ajoutée", VERBOSE_MODE);
2903 mbroquet 3730
2904     // Finalisation du document
2905     $_GET['obj']='instruction';
2906     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2907 softime 7996 $instruction_final = $this->f->get_inst__om_dbform(array(
2908     "obj" => "instruction",
2909     "idx" => $_GET['idx'],
2910     ));
2911    
2912     // Si l'instruction a une lettre type associée
2913     // ET si elle n'est pas déjà finalisée
2914     if($instruction_final->getVal('lettretype') != ""
2915     && $instruction_final->getVal('om_final_instruction') !== 't') {
2916 mbroquet 3730 // On se met en contexte de l'action 100 finaliser
2917     $instruction_final->setParameter('maj',100);
2918     // On finalise l'événement d'instruction
2919 softime 10573 $this->f->addToLog(__METHOD__."() : finalisation de l'instruction '$evenement' ($lettretype) ...", VERBOSE_MODE);
2920 mbroquet 3730 $res = $instruction_final->finalize();
2921 softime 10573 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) finalisée", VERBOSE_MODE);
2922 softime 5024 // Si échec cela ne stoppe pas la création du dossier
2923     // et l'utilisateur n'en est pas informé dans l'IHM
2924     // mais l'erreur est loguée
2925 mbroquet 3730 if ($res === false) {
2926     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2927     }
2928     }
2929    
2930     // Mise à jour de la demande
2931     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2932     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2933 softime 7996 $demande_instance = $this->f->get_inst__om_dbform(array(
2934     "obj" => "demande",
2935     "idx" => $this->valF['demande'],
2936     ));
2937 softime 8989 if ($demande_instance->modifier($this->valF) === false) {
2938 mbroquet 3730 $this -> addToMessage($demande_instance->msg);
2939     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2940     return false;
2941     }
2942 softime 10573 $this->f->addToLog(__METHOD__."() : demande mise à jour", VERBOSE_MODE);
2943 mbroquet 3730
2944 softime 8329 // Instance du dossier d'autorisation
2945 softime 6565 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2946    
2947 softime 8329 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
2948 softime 7366 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2949 softime 8329 && $inst_da->is_dossier_autorisation_visible() === true) {
2950    
2951     // Permet de forcer la regénération de la clé citoyen
2952     $force = false;
2953    
2954     // Regénération de la clé citoyen si le type de demande le demande
2955     $regeneration_cle_citoyen = $this->get_demande_type_regeneration_cle_citoyen($val['demande_type']);
2956     if ($regeneration_cle_citoyen === true) {
2957     $force = true;
2958     }
2959    
2960 mbroquet 3730 // Met à jour la clé d'accès au portail citoyen dans le dossier
2961     // d'autorisation
2962 softime 8329 $update = $inst_da->update_citizen_access_key($force);
2963 mbroquet 3730 //
2964     if ($update !== true) {
2965     //
2966     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2967     return false;
2968     }
2969     }
2970    
2971 jymadier 4441 // Si l'instruction initiale a une lettre type liée
2972     if ($instruction->valF['lettretype'] !== ''
2973     && $instruction->valF['lettretype'] !== null) {
2974    
2975     // Affichage du récépissé de la demande
2976     $this -> addToMessage("<a
2977     class='lien' id='link_demande_recepisse'
2978     title=\""._("Telecharger le recepisse de la demande")."\"
2979 softime 7996 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
2980 jymadier 4441 $this->valF[$this->clePrimaire]."' target='_blank'>
2981     <span
2982     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2983     title=\""._("Telecharger le recepisse de la demande")."\">".
2984     _("Telecharger le recepisse de la demande").
2985     "</span>".
2986     _("Telecharger le recepisse de la demande")."
2987     </a><br/>");
2988     }
2989     }
2990    
2991 fmichon 4708 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2992     $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2993    
2994     /**
2995     * Option de numérisation.
2996     */
2997     // Si l'option est activée
2998     if ($this->f->is_option_digitalization_folder_enabled() === true) {
2999 mbroquet 3730 // Création du répertoire de numérisation pour le dossier en
3000     // question.
3001     $ret = $inst_di->create_or_touch_digitalization_folder();
3002     // Si la création a échouée
3003     if ($ret !== true) {
3004     //
3005     $this->msg = "";
3006     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
3007     return false;
3008     }
3009     }
3010    
3011 fmichon 4708 /**
3012     * Interface avec le référentiel ERP.
3013     *
3014     * (WS->ERP)[109] Retrait de la demande -> AT
3015     * Déclencheur :
3016     * - L'option ERP est activée
3017     * - Le dossier est de type AT
3018     * - Le dossier est marqué comme "connecté au référentiel ERP"
3019     * - Le formulaire d'ajout de demande est validé avec un type de
3020     * demande correspondant à une demande de retrait
3021     */
3022 mbroquet 3730 //
3023 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3024 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3025     && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3026     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
3027     //
3028     $infos = array(
3029     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3030     );
3031     //
3032     $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
3033     if ($ret !== true) {
3034     $this->cleanMessage();
3035     $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
3036     return false;
3037     }
3038     $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
3039     }
3040    
3041     /**
3042     * Interface avec le référentiel ERP.
3043     *
3044     * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
3045     * Déclencheur :
3046     * - L'option ERP est activée
3047     * - Le dossier est de type AT
3048     * - Le dossier est marqué comme "connecté au référentiel ERP"
3049     * - Le formulaire d'ajout de demande est validé avec un type de
3050     * demande correspondant à un dépôt de pièces
3051     */
3052     //
3053 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3054 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3055     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3056     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
3057 softime 6391 // Définit le type de pièce par l'état du dossier
3058     $type_piece = "supplementaire";
3059     if ($etat_di_before_instr === 'incomplet') {
3060     $type_piece = "complementaire";
3061     }
3062 fmichon 4708 //
3063     $infos = array(
3064     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3065 softime 6391 "type_piece" => $type_piece,
3066 fmichon 4708 );
3067     //
3068     $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
3069     if ($ret !== true) {
3070     $this->cleanMessage();
3071     $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
3072     return false;
3073     }
3074     $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
3075     }
3076    
3077     /**
3078     * Interface avec le référentiel ERP.
3079     *
3080     * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
3081     * Déclencheur :
3082     * - L'option ERP est activée
3083     * - Le dossier est de type AT
3084     * - Le dossier est marqué comme "connecté au référentiel ERP"
3085     * - Le formulaire d'ajout de demande est validé avec un type de
3086     * demande correspondant à une demande de visite d'ouverture ERP
3087     */
3088     //
3089 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3090 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3091     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3092     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
3093     //
3094     $infos = array(
3095     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3096     );
3097     //
3098     $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
3099     if ($ret !== true) {
3100     $this->cleanMessage();
3101     $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
3102     return false;
3103     }
3104     $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
3105     }
3106    
3107     /**
3108     * Interface avec le référentiel ERP.
3109     *
3110     * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
3111     * Déclencheur :
3112     * - L'option ERP est activée
3113     * - Le dossier est de type PC
3114     * - Le dossier est marqué comme "connecté au référentiel ERP"
3115     * - Le formulaire d'ajout de demande est validé avec un type de
3116     * demande correspondant à une demande de visite d'ouverture ERP
3117     */
3118     //
3119 softime 7366 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3120 fmichon 4708 && $inst_di->is_connected_to_referentiel_erp() === true
3121     && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
3122     && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
3123     //
3124     $infos = array(
3125     "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3126     );
3127     //
3128     $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
3129     if ($ret !== true) {
3130     $this->cleanMessage();
3131     $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
3132     return false;
3133     }
3134     $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
3135     }
3136    
3137     //
3138 mbroquet 3730 return true;
3139     }
3140 fmichon 4708
3141     /**
3142     * Récupère l'état d'un dossier d'instruction
3143     * @param $idxDossier L'identifiant du dossier d'instruction
3144     * @return L'état du dossier d'instruction
3145     */
3146     function getEtatDossier($idxDossier){
3147    
3148     $etat = "";
3149    
3150     $sql = "SELECT etat.etat
3151     FROM ".DB_PREFIXE."etat
3152     LEFT JOIN
3153     ".DB_PREFIXE."dossier
3154     ON
3155     dossier.etat = etat.etat
3156     WHERE dossier.dossier = '".$idxDossier."'";
3157 softime 8989 $etat = $this->f->db->getOne($sql);
3158 fmichon 4708 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3159     // Si une erreur survient on die
3160     if (database::isError($etat, true)) {
3161     // Appel de la methode de recuperation des erreurs
3162     $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
3163     }
3164    
3165     return $etat;
3166     }
3167    
3168 softime 8989 /**
3169     * TRIGGER - triggermodifierapres.
3170     *
3171     * - Ajout du lien demande / demandeur(s)
3172     *
3173     * @return boolean
3174     */
3175     function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3176     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3177     //
3178     $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3179     if ($this->insertLinkDemandeDemandeur() == false) {
3180 mbroquet 3730 return false;
3181     }
3182     $this->valIdDemandeur=$this->postedIdDemandeur;
3183    
3184     //
3185     return true;
3186     }
3187    
3188 softime 6565
3189 mbroquet 3730 /**
3190 softime 6565 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
3191     * dossier de recours.
3192     *
3193     * @return, [type] [description]
3194     */
3195     function ajoutLienDossierConteste() {
3196     // Création des liens entre le dossier instruction créé et le dossier
3197     // contesté
3198 softime 7996 $ldd = $this->f->get_inst__om_dbform(array(
3199     "obj" => "lien_dossier_dossier",
3200     "idx" => "]",
3201     ));
3202 softime 6565 // Préparation des valeurs à mettre en base
3203     $val['lien_dossier_dossier'] = "";
3204     $val['dossier_src'] = $this->valF['dossier_instruction'];
3205     $val['dossier_cible'] = $this->valF["autorisation_contestee"];
3206     $val['type_lien'] = 'auto_recours';
3207    
3208 softime 8989 return $ldd->ajouter($val);
3209 softime 6565 }
3210    
3211    
3212     /**
3213 mbroquet 3730 * Gestion des liens entre les lots du DA et le nouveau dossier
3214     **/
3215 softime 8989 function lienLotDossierInstruction($id, $val) {
3216 softime 7996 $lot = $this->f->get_inst__om_dbform(array(
3217     "obj" => "lot",
3218     "idx" => "]",
3219     ));
3220     $lld = $this->f->get_inst__om_dbform(array(
3221     "obj" => "lien_lot_demandeur",
3222     "idx" => "]",
3223     ));
3224 mbroquet 3730
3225    
3226     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
3227     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
3228 softime 8989 $resLot = $this->f->db->query($sqlLots);
3229 mbroquet 3730 $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
3230     $this->f->isDatabaseError($resLot);
3231     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
3232     // Insertion du nouveau lot
3233     $valLot['lot'] = "";
3234     $valLot['libelle'] = $rowLot['libelle'];
3235     $valLot['dossier_autorisation'] = null;
3236     $valLot['dossier'] = $this->valF['dossier_instruction'];
3237 softime 8989 $lot->ajouter($valLot);
3238 mbroquet 3730
3239     //Insertion des liens entre dossier et les lots
3240     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
3241     WHERE lot = ".$rowLot['lot'];
3242 softime 8989 $res = $this->f->db->query($sqlDemandeurs);
3243 mbroquet 3730 $this->f->addToLog(
3244 softime 8989 __METHOD__."(): db->query(\"".$sqlDemandeurs."\");",
3245 mbroquet 3730 VERBOSE_MODE
3246     );
3247     if ($this->f->isDatabaseError($res, true)) {
3248     return false;
3249     }
3250    
3251     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3252     $valLld["lien_lot_demandeur"] = "";
3253     $valLld["lot"]=$lot->valF['lot'];
3254     $valLld["demandeur"] = $row['demandeur'];
3255     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
3256 softime 8989 if ($lld->ajouter($valLld) === false) {
3257 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
3258     return false;
3259     }
3260     }
3261    
3262     // Récupération des données techniques du nouveau lots
3263 softime 8989 if ($this->ajoutDonneesTechniquesLots($id, $val, $rowLot['lot'], $lot->valF['lot']) === false) {
3264     $this->addToMessage(
3265 mbroquet 3730 _("Erreur lors de l'enregistrement de la demande.")." ".
3266     _("Contactez votre administrateur.")
3267     );
3268     $this->correct = false;
3269     $this->f->addToLog(
3270 softime 8989 __METHOD__."(): ERROR ajoutDonneesTechniquesLots",
3271 mbroquet 3730 DEBUG_MODE
3272 softime 8989 );
3273 mbroquet 3730 return false;
3274     }
3275    
3276     }
3277    
3278     //
3279     return true;
3280     }
3281    
3282    
3283     /**
3284     * Méthode permettant d'ajouter les données techniques d'un lot.
3285     *
3286     * @param integer $id identifiant de la demande
3287     * @param array $val tableau de valeurs postées via le formulaire
3288     * @param integer $lotInit identifiant de lot initial
3289     * @param integer $lotDest identifiant du lot qui va recevoir les données
3290     *
3291     * @return boolean false si erreur
3292     */
3293 softime 8989 function ajoutDonneesTechniquesLots($id, $val, $lotInit, $lotDest) {
3294 mbroquet 3730 // Requete permettant de recupérer les données techniques du lot passé
3295     // en paramètre ($lotInit)
3296     $sql_get_dt = "
3297     SELECT donnees_techniques
3298     FROM ".DB_PREFIXE."donnees_techniques
3299     WHERE lot=".$lotInit;
3300     $id_dt = $this->f->db->getOne($sql_get_dt);
3301     // Si des données techniques sont liées au lots on les "copie" et
3302     // on les lies au lot passé en paramètre (lotDest)
3303     if(isset($id_dt) and !empty($id_dt)) {
3304     $this->f->addToLog(
3305 softime 8989 __METHOD__."(): db->getone(\"".$sql_get_dt."\");",
3306 mbroquet 3730 VERBOSE_MODE
3307     );
3308     if ($this->f->isDatabaseError($id_dt, true)){
3309     $this->f->addToLog(
3310 softime 8989 __METHOD__."(): ERROR",
3311 mbroquet 3730 DEBUG_MODE
3312 softime 8989 );
3313 mbroquet 3730 return false;
3314     }
3315 softime 7996 $donnees_techniques = $this->f->get_inst__om_dbform(array(
3316     "obj" => "donnees_techniques",
3317     "idx" => $id_dt,
3318     ));
3319 mbroquet 3730
3320     // Récupération des données dans le tableau des valeurs à insérer
3321     foreach($donnees_techniques->champs as $value) {
3322     $val[$value] = $donnees_techniques->getVal($value);
3323     }
3324     // Modification du lien vers le nouveau lot
3325     $val["lot"] = $lotDest;
3326     // Identifiant du cerfa
3327     $val['cerfa'] = $this->getIdCerfa();
3328     // Ajout des données techniques
3329 softime 8989 if($donnees_techniques->ajouter($val) === false) {
3330 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
3331     return false;
3332     }
3333     }
3334    
3335     //
3336     return true;
3337     }
3338    
3339     /**
3340     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
3341     **/
3342 softime 8989 function insertLinkDemandeDemandeur() {
3343 mbroquet 3730
3344 softime 10573 foreach ($this->types_demandeur as $type) {
3345 softime 6565 // Comparaison des autres demandeurs
3346     if(isset($this->postedIdDemandeur[$type]) === true) {
3347     // Suppression des liens non valides
3348     foreach ($this->valIdDemandeur[$type] as $demandeur) {
3349     // Demandeur
3350     if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
3351 softime 8989 if ($this->deleteLinkDemandeDemandeur($demandeur) == false) {
3352 softime 6565 //
3353     return false;
3354     }
3355 mbroquet 3730 }
3356 softime 6565
3357 mbroquet 3730 }
3358 softime 6565 // Ajout des nouveaux liens
3359     foreach ($this->postedIdDemandeur[$type] as $demandeur) {
3360     if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
3361     $principal = false;
3362     if(strpos($type, '_principal') !== false) {
3363     $principal = true;
3364     }
3365 softime 8989 if ($this->addLinkDemandeDemandeur($demandeur, $principal) == false) {
3366 softime 6565 //
3367     return false;
3368     }
3369 mbroquet 3730 }
3370     }
3371     }
3372     }
3373    
3374     //
3375     return true;
3376     }
3377    
3378    
3379     /**
3380     * Fonction permettant d'ajouter un lien
3381     * entre la table demande et demandeur
3382     **/
3383 softime 8989 function addLinkDemandeDemandeur($id, $principal) {
3384 softime 7996 $lienAjout = $this->f->get_inst__om_dbform(array(
3385     "obj" => "lien_demande_demandeur",
3386     "idx" => "]",
3387     ));
3388 mbroquet 3730 $lien = array('lien_demande_demandeur' => "",
3389     'petitionnaire_principal' => (($principal)?"t":"f"),
3390     'demande' => $this->valF['demande'],
3391     'demandeur' => $id);
3392 softime 8989 if ($lienAjout->ajouter($lien) === false) {
3393 mbroquet 3730 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
3394     return false;
3395     }
3396    
3397     //
3398     return true;
3399     }
3400    
3401     /**
3402     * Fonction permettant de supprimer un lien
3403     * entre la table demande et demandeur
3404     **/
3405 softime 8989 function deleteLinkDemandeDemandeur($id) {
3406 mbroquet 3730 // Suppression
3407     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
3408     "WHERE demande=".$this->valF['demande'].
3409     " AND demandeur=".$id;
3410     // Execution de la requete de suppression de l'objet
3411 softime 8989 $res = $this->f->db->query($sql);
3412 mbroquet 3730 // Logger
3413 softime 8989 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
3414 mbroquet 3730 if ($this->f->isDatabaseError($res, true)){
3415     return false;
3416     }
3417    
3418     //
3419     return true;
3420     }
3421    
3422     /*
3423     * Teste si le lien entre une demande et un demandeur existe
3424     * */
3425     function isLinkDemandeDemandeurExist($idDemandeur) {
3426     $sql = "SELECT count(*)
3427     FROM ".DB_PREFIXE."lien_demande_demandeur
3428     WHERE demande = ".$this->valF['demande'].
3429     "AND demandeur = ".$idDemandeur;
3430     $count = $this->f->db->getOne($sql);
3431 softime 8989 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
3432 mbroquet 3730 $this->f->isDatabaseError($count);
3433     if ($count === 0) {
3434 softime 8989 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
3435 mbroquet 3730 return false;
3436     } else {
3437     return true;
3438     }
3439    
3440     }
3441    
3442     /**
3443     * Methode de recupération des valeurs postées
3444     **/
3445     function getPostedValues() {
3446     // Récupération des demandeurs dans POST
3447 softime 10573 foreach ($this->types_demandeur as $type) {
3448 softime 6565 if($this->f->get_submitted_post_value($type) !== null AND
3449     $this->f->get_submitted_post_value($type) != '') {
3450     $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
3451 mbroquet 3730 }
3452     }
3453     }
3454    
3455     /**
3456     * Méthode permettant de récupérer les id des demandeurs liés à la table
3457     * liée passée en paramètre
3458     *
3459     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
3460     * @param string $id Identifiant (clé primaire de la table liée en question)
3461     */
3462     function listeDemandeur($from, $id) {
3463     // Récupération des demandeurs de la base
3464     $sql = "SELECT demandeur.demandeur,
3465     demandeur.type_demandeur,
3466     lien_".$from."_demandeur.petitionnaire_principal
3467     FROM ".DB_PREFIXE."lien_".$from."_demandeur
3468     INNER JOIN ".DB_PREFIXE."demandeur
3469     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
3470     WHERE ".$from." = '".$id."'";
3471     $res = $this->f->db->query($sql);
3472     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
3473     $this->f->isDatabaseError($res);
3474     // Stockage du résultat dans un tableau
3475     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3476 softime 6565 $demandeur_type = $row['type_demandeur'];
3477     if ($row['petitionnaire_principal'] == 't'){
3478     $demandeur_type .= "_principal";
3479 mbroquet 3730 }
3480 softime 6565 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
3481 mbroquet 3730 }
3482     }
3483    
3484    
3485     /**
3486     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3487     * d'instruction existant
3488     */
3489     function retour($premier = 0, $recherche = "", $tricol = "") {
3490    
3491     echo "\n<a class=\"retour\" ";
3492     echo "href=\"";
3493     //
3494     if($this->getParameter("idx_dossier") != "") {
3495 softime 7996 echo OM_ROUTE_TAB;
3496     echo "&obj=recherche_dossier";
3497 mbroquet 3730
3498     } else {
3499     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3500 softime 7996 echo OM_ROUTE_FORM;
3501 mbroquet 3730 } else {
3502 softime 7996 echo OM_ROUTE_TAB;
3503 mbroquet 3730 }
3504 softime 7996 echo "&obj=".$this->get_absolute_class_name();
3505 mbroquet 3730 if($this->getParameter("retour")=="form") {
3506     echo "&amp;idx=".$this->getParameter("idx");
3507     echo "&amp;action=3";
3508     }
3509     }
3510     echo "&amp;premier=".$this->getParameter("premier");
3511     echo "&amp;tricol=".$this->getParameter("tricol");
3512     echo "&amp;advs_id=".$this->getParameter("advs_id");
3513     echo "&amp;valide=".$this->getParameter("valide");
3514     //
3515     echo "\"";
3516     echo ">";
3517     //
3518     echo _("Retour");
3519     //
3520     echo "</a>\n";
3521    
3522     }
3523    
3524    
3525     /**
3526     * Cette méthode permet d'afficher des informations spécifiques dans le
3527     * formulaire de l'objet
3528     *
3529     * @param integer $maj Mode de mise à jour
3530     */
3531     function formSpecificContent($maj) {
3532 softime 6565 // Tableau des demandeurs selon le contexte
3533     $listeDemandeur = $this->valIdDemandeur;
3534 mbroquet 3730 /**
3535     * Gestion du bloc des demandeurs
3536     */
3537     // Si le mode est (modification ou suppression ou consultation) ET que
3538     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
3539     // actif)
3540 softime 6565 if ($this->correct !== true AND
3541 softime 7996 $this->getParameter('validation') == 0 AND
3542     $this->getParameter("maj") != 0) {
3543 mbroquet 3730 // Alors on récupère les demandeurs dans la table lien pour
3544 softime 6565 // affectation des résultats dans $this->valIdDemandeur
3545 mbroquet 3730 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3546 softime 6565 $listeDemandeur = $this->valIdDemandeur;
3547 mbroquet 3730 }
3548    
3549 softime 6565 // Récupération des valeurs postées
3550 softime 7996 if ($this->getParameter('validation') != 0) {
3551 softime 6565 $listeDemandeur = $this->postedIdDemandeur;
3552     }
3553    
3554 mbroquet 3730 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3555     // correct (c'est-à-dire que le formulaire est actif)
3556 softime 6565 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3557 mbroquet 3730 // Alors on positionne le marqueur linkable a true qui permet
3558     // d'afficher ou non les actions de gestion des demandeurs
3559     $linkable = true;
3560     } else {
3561     // Sinon on positionne le marqueur linkable a false qui permet
3562     // d'afficher ou non les actions de gestion des demandeurs
3563     $linkable = false;
3564     }
3565    
3566     // Affichage des demandeurs et des actions
3567     // Conteneur de la listes des demandeurs
3568     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3569     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
3570     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3571 softime 6565 ._("Demandeurs")."</legend>";
3572    
3573 mbroquet 3730 // Affichage du bloc pétitionnaire principal / délégataire
3574     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3575     echo "<div id=\"petitionnaire_principal_delegataire\">";
3576 softime 6565 // Affichage de la synthèse du pétitionnaire principal
3577     $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
3578 mbroquet 3730 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3579     echo "<div id=\"delegataire\">";
3580 softime 6565 // Affichage de la synthèse du délégataire
3581     $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
3582 mbroquet 3730 echo "</div>";
3583 softime 10573 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3584     echo "<div id=\"proprietaire\">";
3585     // Affichage de la synthèse du délégataire
3586     $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
3587     echo "</div>";
3588     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3589     echo "<div id=\"architecte_lc\">";
3590     // Affichage de la synthèse du délégataire
3591     $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
3592     echo "</div>";
3593     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3594     echo "<div id=\"paysagiste\">";
3595     // Affichage de la synthèse du délégataire
3596     $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
3597     echo "</div>";
3598 mbroquet 3730 echo "<div class=\"both\"></div>";
3599     echo "</div>";
3600     // Bloc des pétitionnaires secondaires
3601     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3602     echo "<div id=\"listePetitionnaires\">";
3603 softime 6565 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
3604 mbroquet 3730 echo "</div>";
3605 softime 7067
3606     // Affichage du bloc pétitionnaire principal / délégataire / bailleur
3607     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3608     echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
3609     // Doit être utilisé avec la div petitionnaire_principal_delegataire
3610     echo "<div id=\"listeBailleurs\" class=\"col_12\">";
3611     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3612     echo "<div id=\"bailleur_principal\">";
3613     // Affichage de la synthèse
3614     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
3615     echo "</div>";
3616     echo "<div id=\"listeAutresBailleurs\">";
3617     $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
3618     echo "</div>";
3619     echo "</div>";
3620     echo "</div>";
3621 softime 6565
3622     echo "<div id=\"plaignant_contrevenant\">";
3623     // Affichage du bloc contrevenant
3624     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3625     echo "<div id=\"listeContrevenants\" class=\"col_12\">";
3626     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3627     echo "<div id=\"contrevenant_principal\">";
3628     // Affichage de la synthèse
3629     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
3630     echo "</div>";
3631     echo "<div id=\"listeAutresContrevenants\">";
3632     // Affichage de la synthèse
3633     $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
3634     echo "</div>";
3635     echo "</div>";
3636     // Affichage du bloc plaignant
3637     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3638     echo "<div id=\"listePlaignants\" class=\"col_12\">";
3639     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3640     echo "<div id=\"plaignant_principal\">";
3641     // Affichage de la synthèse
3642     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
3643     echo "</div>";
3644     echo "<div id=\"listeAutresPlaignants\">";
3645     $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
3646     echo "</div>";
3647     echo "</div>";
3648     echo "</div>";
3649     echo "<div id=\"requerant_avocat\">";
3650     // Affichage du bloc requérant
3651     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3652     echo "<div id=\"listeRequerants\" class=\"col_12\">";
3653     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3654     echo "<div id=\"requerant_principal\">";
3655     // Affichage de la synthèse
3656     $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
3657     echo "</div>";
3658     echo "<div id=\"listeAutresRequerants\">";
3659     $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
3660     echo "</div>";
3661     echo "</div>";
3662     // Affichage du bloc avocat
3663     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3664     echo "<div id=\"listeAvocat\" class=\"col_12\">";
3665     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3666     echo "<div id=\"avocat_principal\">";
3667     $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
3668     echo "</div>";
3669     echo "<div id=\"listeAutresAvocats\">";
3670     $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
3671     echo "</div>";
3672     echo "</div>";
3673     echo "</div>";
3674 mbroquet 3730 echo "</fieldset>";
3675     // Champ flag permettant de récupérer la valeur de l'option sig pour
3676     // l'utiliser en javascript, notamment lors du chargement de l'interface
3677     // pour les références cadastrales
3678     // XXX Si un widget pour les références cadastrales existait, il n'y
3679     // aurait pas besoin de faire cela
3680     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
3681     echo "</div>";
3682     }
3683 softime 6565
3684     function displaySyntheseDemandeur($listeDemandeur, $type) {
3685     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3686     // correct (c'est-à-dire que le formulaire est actif)
3687 softime 7366 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3688 softime 6565 // Alors on positionne le marqueur linkable a true qui permet
3689     // d'afficher ou non les actions de gestion des demandeurs
3690     $linkable = true;
3691     } else {
3692     // Sinon on positionne le marqueur linkable a false qui permet
3693     // d'afficher ou non les actions de gestion des demandeurs
3694     $linkable = false;
3695     }
3696     // Récupération du type de demandeur pour l'affichage
3697     switch ($type) {
3698     case 'petitionnaire_principal':
3699     $legend = _("Petitionnaire principal");
3700     break;
3701 mbroquet 3730
3702 softime 6565 case 'delegataire':
3703     $legend = _("Autre correspondant");
3704     break;
3705    
3706     case 'petitionnaire':
3707     $legend = _("Petitionnaire");
3708     break;
3709    
3710     case 'contrevenant_principal':
3711     $legend = _("Contrevenant principal");
3712     break;
3713    
3714     case 'contrevenant':
3715     $legend = _("Autre contrevenant");
3716     break;
3717    
3718     case 'plaignant_principal':
3719     $legend = _("Plaignant principal");
3720     break;
3721    
3722     case 'plaignant':
3723     $legend = _("Autre plaignant");
3724     break;
3725    
3726     case 'requerant_principal':
3727     $legend = _("Requérant principal");
3728     break;
3729    
3730     case 'requerant':
3731     $legend = _("Autre requérant");
3732     break;
3733    
3734     case 'avocat_principal':
3735     $legend = _("Avocat principal");
3736     break;
3737    
3738     case 'avocat':
3739     $legend = _("Autre avocat");
3740     break;
3741 softime 7067
3742     case 'bailleur_principal':
3743     $legend = _("Bailleur principal");
3744     break;
3745    
3746     case 'bailleur':
3747     $legend = _("Autre bailleur");
3748     break;
3749 softime 10573
3750     case 'proprietaire':
3751     $legend = __('Propriétaire');
3752     break;
3753    
3754     case 'architecte_lc':
3755     $legend = __('Architecte législation connexe');
3756     break;
3757    
3758     case 'paysagiste':
3759     $legend = __('Concepteur-Paysagiste');
3760     break;
3761 softime 6565 }
3762     foreach ($listeDemandeur[$type] as $demandeur_id) {
3763     $obj = str_replace('_principal', '', $type);
3764 softime 7996 $demandeur = $this->f->get_inst__om_dbform(array(
3765     "obj" => $obj,
3766     "idx" => $demandeur_id,
3767     ));
3768 softime 6565 $demandeur -> afficherSynthese($type, $linkable);
3769     $demandeur -> __destruct();
3770     }
3771     // Si en édition de formulaire
3772     if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3773     // Bouton d'ajout du avocat
3774     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3775     echo "<span id=\"add_".$type."\"
3776     class=\"om-form-button add-16\">".
3777     $legend.
3778     "</span>";
3779     }
3780     }
3781    
3782 mbroquet 3730 // {{{
3783    
3784     // getter
3785     function getValIdDemandeur() {
3786     return $this->valIdDemandeur;
3787     }
3788     // setter
3789     function setValIdDemandeur($valIdDemandeur) {
3790     $this->valIdDemandeur = $valIdDemandeur;
3791     }
3792 softime 8989
3793     /**
3794     * TRIGGER - triggersupprimer.
3795     *
3796     * - Supression du lien entre la demandeur et le(s) demandeur(s)
3797     *
3798     * @return boolean
3799     */
3800     function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3801     $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3802 mbroquet 3730 //Création de la requête
3803     $sql = "DELETE FROM
3804     ".DB_PREFIXE."lien_demande_demandeur
3805     WHERE
3806     demande = $id";
3807    
3808     $res = $this->f->db->query($sql);
3809 softime 8989 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")", VERBOSE_MODE);
3810 mbroquet 3730 if ($this->f->isDatabaseError($res, true)) {
3811     return false;
3812     }
3813    
3814     //
3815     return true;
3816     }
3817 softime 8989
3818 mbroquet 3730 // }}}
3819    
3820     /**
3821     * Récupère le champ "qualification" du type de la demande
3822     * @param integer $demande_type Identifiant du type de la demande
3823     * @return boolean
3824     */
3825     function get_qualification($demande_type) {
3826    
3827     // Initialise le résultat
3828     $qualification = "";
3829    
3830     // Si la condition existe
3831     if (is_numeric($demande_type)) {
3832    
3833     // Requête SQL
3834     $sql = "SELECT qualification
3835     FROM ".DB_PREFIXE."demande_type
3836     WHERE demande_type = $demande_type";
3837 softime 8989 $qualification = $this->f->db->getOne($sql);
3838 mbroquet 3730 $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
3839     VERBOSE_MODE);
3840     $this->f->isDatabaseError($qualification);
3841     }
3842    
3843     // Retourne le résultat
3844     return $qualification;
3845     }
3846    
3847 softime 8329 /**
3848     * Récupère le champ "regeneration_cle_citoyen" du type de la demande.
3849     *
3850     * @param integer $demande_type Identifiant du type de la demande.
3851     *
3852     * @return boolean
3853     */
3854     function get_demande_type_regeneration_cle_citoyen($demande_type) {
3855     // Initialise le résultat
3856     $regeneration_cle_citoyen = false;
3857    
3858     // Récupère le champ depuis la demande type
3859     $inst_demande_type = $this->f->get_inst__om_dbform(array(
3860     "obj" => "demande_type",
3861     "idx" => $demande_type,
3862     ));
3863     if ($inst_demande_type->getVal('regeneration_cle_citoyen') === 't') {
3864     $regeneration_cle_citoyen = true;
3865     }
3866    
3867     // Retourne le résultat
3868     return $regeneration_cle_citoyen;
3869     }
3870    
3871 mbroquet 3730 /**
3872     * Récupère les champs archive_* d'une instruction
3873     * @param string $dossier L'identifiant du dossier d'instruction
3874     */
3875     public function getArchiveInstruction($dossierID){
3876    
3877     //On récupère les données du dernier DI accordé
3878     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3879     dossier.avis_decision,
3880     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
3881 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
3882 softime 10573 to_char(dossier.date_depot_mairie, 'DD/MM/YYYY') as date_depot_mairie,
3883 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3884     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3885     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3886     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3887     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3888     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3889     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3890     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3891     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3892     dossier.incompletude,
3893     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3894     dossier.etat_pendant_incompletude,
3895     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3896     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3897 softime 6565 ,dossier.dossier, dossier.incomplet_notifie,
3898     to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3899     to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3900     to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3901     to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3902     to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3903     to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3904 softime 8593 to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet,
3905 softime 8989 dossier.dossier_instruction_type as dossier_instruction_type,
3906     to_char(dossier.date_affichage, 'DD/MM/YYYY') as date_affichage
3907 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3908     LEFT JOIN ".DB_PREFIXE."avis_decision
3909     ON dossier.avis_decision = avis_decision.avis_decision
3910     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3911     AND dossier.dossier_autorisation = (
3912     SELECT dossier_autorisation.dossier_autorisation
3913     FROM ".DB_PREFIXE."dossier_autorisation
3914     LEFT JOIN ".DB_PREFIXE."dossier
3915     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3916     WHERE dossier = '".$dossierID."')
3917     ORDER BY dossier.version DESC";
3918    
3919 softime 8989 $res = $this->f->db->query($sql);
3920 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3921     if ($this->f->isDatabaseError($res, true)) {
3922     return false;
3923     }
3924    
3925     //Un des dosssiers d'instruction a été accordé, on récupère ses données
3926     if ( $res->numrows() != 0 ){
3927    
3928     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3929 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3930     "obj" => "instruction",
3931     "idx" => "]",
3932     ));
3933 mbroquet 3730
3934     $instruction->setParameter("maj", 1);
3935     $instruction->updateArchiveData($row);
3936     return $instruction->valF;
3937     }
3938     //Sinon, on prend les données du P0, si ce n'est pas un P0
3939     else {
3940     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3941     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3942     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3943     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3944     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3945     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3946     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3947     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3948 softime 10573 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot, dossier.date_depot_mairie,
3949 softime 6565 dossier.date_cloture_instruction, dossier.date_premiere_visite,
3950     dossier.date_derniere_visite, dossier.date_contradictoire,
3951     dossier.date_retour_contradictoire, dossier.date_ait,
3952 softime 8989 dossier.date_transmission_parquet, dossier.dossier_instruction_type,
3953     dossier.date_affichage
3954 mbroquet 3730 FROM ".DB_PREFIXE."dossier
3955     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3956     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3957     WHERE dossier.dossier_autorisation = (
3958     SELECT dossier_autorisation.dossier_autorisation
3959     FROM ".DB_PREFIXE."dossier_autorisation
3960     LEFT JOIN ".DB_PREFIXE."dossier
3961     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3962     WHERE dossier = '".$dossierID."')
3963     AND dossier_instruction_type.code = 'P'
3964     ORDER BY dossier.version DESC";
3965 softime 8989 $res = $this->f->db->query($sql);
3966 mbroquet 3730 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3967     if ($this->f->isDatabaseError($res, true)) {
3968     return false;
3969     }
3970    
3971     //On est pas dans le cas d'un dépôt d'un P0
3972     if ( $res->numrows() != 0 ){
3973     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3974 softime 7996 $instruction = $this->f->get_inst__om_dbform(array(
3975     "obj" => "instruction",
3976     "idx" => "]",
3977     ));
3978 mbroquet 3730 $instruction->setParameter("maj", 1);
3979     $instruction->updateArchiveData($row);
3980     return $instruction->valF;
3981     }
3982     }
3983     }
3984    
3985     /**
3986     * Cette methode permet d'afficher le bouton de validation du formulaire
3987     *
3988     * @param integer $maj Mode de mise a jour
3989     * @return void
3990     */
3991     function bouton($maj) {
3992    
3993     if (!$this->correct
3994     && $this->checkActionAvailability() == true) {
3995     //
3996     switch($maj) {
3997     case 0 :
3998     $bouton = _("Ajouter");
3999     break;
4000     case 1 :
4001     $bouton = _("Modifier");
4002     break;
4003     case 2 :
4004     $bouton = _("Supprimer");
4005     break;
4006     default :
4007     // Actions specifiques
4008     if ($this->get_action_param($maj, "button") != null) {
4009     //
4010     $bouton = $this->get_action_param($maj, "button");
4011     } else {
4012     //
4013     $bouton = _("Valider");
4014     }
4015     break;
4016     }
4017     //
4018     $params = array(
4019     "value" => $bouton,
4020     "name" => "submit",
4021     "onclick"=>"return getDataFieldReferenceCadastrale();",
4022     );
4023     //
4024     $this->f->layout->display_form_button($params);
4025     }
4026    
4027     }
4028    
4029     /**
4030     * Récupère l'instance de la classe taxe_amenagement.
4031     *
4032     * @param integer $om_collectivite La collectivité
4033     *
4034     * @return object
4035     */
4036     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
4037     //
4038 softime 6929 if ($this->inst_taxe_amenagement === null) {
4039 mbroquet 3730 //
4040     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
4041 softime 6929
4042     // Si aucun paramétrage de taxe trouvé et que la collectivité
4043     // est mono
4044     if ($taxe_amenagement === null
4045     && $this->f->isCollectiviteMono($om_collectivite) === true) {
4046     // Récupère la collectivité multi
4047     $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
4048     //
4049     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
4050     }
4051    
4052 mbroquet 3730 //
4053 softime 6929 if ($taxe_amenagement === null) {
4054     //
4055     return null;
4056     }
4057    
4058     //
4059 softime 7996 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
4060     "obj" => "taxe_amenagement",
4061     "idx" => $taxe_amenagement,
4062     ));
4063 mbroquet 3730 }
4064     //
4065     return $this->inst_taxe_amenagement;
4066     }
4067    
4068     /**
4069     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
4070     *
4071     * @param integer $om_collectivite La collectivité
4072     *
4073     * @return integer
4074     */
4075     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
4076     //
4077 softime 6929 $taxe_amenagement = null;
4078 mbroquet 3730
4079 softime 6929 // Si la collectivité n'est pas renseigné
4080     if ($om_collectivite !== '' && $om_collectivite !== null) {
4081    
4082     // SQL
4083     $sql = "SELECT taxe_amenagement
4084     FROM ".DB_PREFIXE."taxe_amenagement
4085     WHERE om_collectivite = ".intval($om_collectivite);
4086     $taxe_amenagement = $this->f->db->getOne($sql);
4087     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
4088     $this->f->isDatabaseError($taxe_amenagement);
4089     }
4090    
4091 mbroquet 3730 //
4092 softime 6929 return $taxe_amenagement;
4093 mbroquet 3730 }
4094    
4095    
4096     /**
4097 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
4098     *
4099 softime 6929 * Récupère l'instance du cerfa par le type détaillé du DA.
4100     *
4101     * @param integer $datd Identifiant du type détaillé du DA.
4102     *
4103     * @return object
4104     */
4105     protected function get_inst_cerfa_by_datd($datd = null) {
4106     //
4107     if ($this->inst_cerfa === null) {
4108     //
4109     $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
4110     //
4111     $cerfa = $inst_datd->getVal('cerfa');
4112     //
4113     if ($cerfa !== '' && $cerfa !== null) {
4114     //
4115 softime 7996 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
4116     "obj" => "cerfa",
4117     "idx" => $cerfa,
4118     ));
4119 softime 6929 }
4120     }
4121    
4122     //
4123     return $this->inst_cerfa;
4124     }
4125    
4126    
4127     /**
4128 softime 10573 * TODO: replace with '$this->f->findObjectById' ?
4129     *
4130 mbroquet 3730 * Récupère l'instance du dossier d'autorisation.
4131     *
4132     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
4133     *
4134     * @return object
4135     */
4136 fmichon 4708 function get_inst_dossier_autorisation($dossier_autorisation = null) {
4137 mbroquet 3730 //
4138     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
4139     }
4140    
4141 softime 10573 /**
4142     * Vérifie si un dossier d'autorisation avec cette numérotation existe déjà.
4143     *
4144     * @return boolean
4145     */
4146     function existsDAWithNumeroDossierSeq($idDAdt, $date_demande, $collectivite_id, $num_doss_seq, $commune_id = null, $code_depcom = null) {
4147    
4148     if (empty($idDAdt) || empty($date_demande) || empty($collectivite_id) || empty($num_doss_seq)) {
4149     return false;
4150     }
4151    
4152     if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === true
4153     && empty($commune_id) === true) {
4154     //
4155     return false;
4156     }
4157    
4158     // code du type de DA
4159     $sql = "SELECT da_t.code
4160     FROM ".DB_PREFIXE."dossier_autorisation_type as da_t
4161     INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d
4162     ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type
4163     WHERE da_t_d.dossier_autorisation_type_detaille=".$idDAdt.";";
4164     $code_type_da = $this->f->db->getone($sql);
4165     $this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE);
4166     if ($this->f->isDatabaseError($code_type_da, true) === true) {
4167     return false;
4168     }
4169    
4170     // annee date demande
4171     $annee = date('y', strtotime($date_demande));
4172    
4173     // code département et commune
4174     if (empty($code_depcom) === true) {
4175     if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === false) {
4176     $collectivite_parameters = $this->f->getCollectivite($collectivite_id);
4177     if (!isset($collectivite_parameters['departement'])) {
4178     $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'departement' inexistant.",
4179     DEBUG_MODE);
4180     return false;
4181     }
4182     if (!isset($collectivite_parameters['commune'])) {
4183     $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'commune' inexistant.",
4184     DEBUG_MODE);
4185     return false;
4186     }
4187 softime 11228 $departement = strtoupper($collectivite_parameters['departement']);
4188 softime 10573 $commune = $collectivite_parameters['commune'];
4189     $code_depcom = $departement.$commune;
4190     } else {
4191     //
4192     $getCodeDepartementCommuneFromCommune = $this->getCodeDepartementCommuneFromCommune($commune_id);
4193     $code_depcom = $getCodeDepartementCommuneFromCommune[0];
4194     }
4195     }
4196    
4197     // construction de la requête
4198     $num_dossier = str_pad($num_doss_seq, 4, '0', STR_PAD_LEFT);
4199     $clePrimaire = $code_type_da.$code_depcom.$annee.'%'.$num_dossier;
4200     $query = sprintf("
4201     SELECT dossier_autorisation
4202     FROM %sdossier_autorisation
4203     WHERE dossier_autorisation LIKE '%s'
4204     ",
4205     DB_PREFIXE,
4206     $clePrimaire
4207     );
4208     $res = $this->f->get_one_result_from_db_query($query, true);
4209     if ($res['code'] === 'OK'
4210     && $res['result'] !== ''
4211     && $res['result'] !== null) {
4212     //
4213     return true;
4214     }
4215     return false;
4216     }
4217    
4218     /**
4219     * Concatenation du code département et du code commune
4220     * obtenus à partir de la collectivité (collectivité par défaut si aucun id fourni).
4221     * Renvoie un tuple (code_depcom, error_msg).
4222     */
4223     protected function getCodeDepartementCommuneFromCommune(int $commune_id) : array {
4224     $code_depcom = null;
4225     $error_msg = null;
4226     if (!empty($commune_id)) {
4227     $commune = $this->f->findObjectById("commune", $commune_id);
4228     if (!empty($commune)) {
4229 softime 11228 $code_departement = strtoupper($commune->getVal('dep'));
4230 softime 12654
4231     if(strpos(strtoupper($commune->getVal('com')), $code_departement) !== 0){
4232     $error_msg = sprintf(__("code département (%s) différent du début du code commune (%s)."),
4233     $code_departement, strtoupper($commune->getVal('com')));
4234     return array(null, $error_msg);
4235     }
4236    
4237 softime 11228 $code_commune = preg_replace('/^'.$code_departement.'/', '', strtoupper($commune->getVal('com')));
4238     if(!is_numeric($code_departement) && ! in_array($code_departement, array('2A', '2B'))) {
4239     $error_msg = sprintf(__("code département invalide (%s). Doit être numérique ou 2A|2B."),
4240 softime 10573 $code_departement);
4241     }
4242     else if (!is_numeric($code_commune)) {
4243     $error_msg = sprintf(__("code commune invalide (%s). Doit être numérique."),
4244     $code_commune);
4245     }
4246     else {
4247     $code_depcom = str_pad($code_departement, 3, '0', STR_PAD_LEFT)
4248     .str_pad($code_commune, 3, '0', STR_PAD_LEFT);
4249     }
4250     }
4251     else {
4252     $error_msg = sprintf(__("commune ID '%d' inexistante"), $commune_id);
4253     }
4254     }
4255     if (!empty($error_msg)) {
4256     $this->f->addToLog(__METHOD__."(): ERROR $error_msg", DEBUG_MODE);
4257     }
4258     return array($code_depcom, $error_msg);
4259     }
4260    
4261 nhaye 5254 }
4262 mbroquet 3730
4263 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26