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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26