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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11418 - (hide annotations)
Mon Feb 7 14:59:54 2022 UTC (2 years, 11 months ago) by softime
File size: 184669 byte(s)
* Fusion de la branche d'intégration 5.7.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26