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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 19592 - (hide annotations)
Wed Jan 22 18:04:27 2025 UTC (5 days, 1 hour ago) by softime
File size: 218175 byte(s)
merge: fusion de la branche d'intégration v6.10.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26