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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 <?php
2 /**
3 * DBFORM - 'demande' - Surcharge gen.
4 *
5 * Ce script permet de définir la classe 'demande'.
6 *
7 * @package openads
8 * @version SVN : $Id$
9 */
10
11 require_once "../gen/obj/demande.class.php";
12
13 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 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 "bailleur_principal" => array(),
36 "bailleur" => array(),
37 "proprietaire" => array(),
38 "architecte_lc" => array(),
39 "paysagiste" => array(),
40 );
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 "bailleur_principal" => array(),
53 "bailleur" => array(),
54 "proprietaire" => array(),
55 "architecte_lc" => array(),
56 "paysagiste" => array(),
57 );
58
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 * Instance de la classe cerfa.
79 *
80 * @var mixed (resource | null)
81 */
82 var $inst_cerfa = null;
83
84 /**
85 * 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 * Liste des sources du dépôt
109 */
110 const SOURCE_DEPOT = array(
111 'app',
112 PLATAU,
113 PORTAL
114 );
115
116 /**
117 *
118 * @return string
119 */
120 function get_default_libelle() {
121 // 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 }
127
128 /**
129 * 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 // 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 // ACTION - 003 - consulter
148 //
149 $this->class_actions[3]["condition"] = "is_user_from_allowed_collectivite";
150
151 // 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 "libelle" => __("Editer le recepisse PDF"),
158 "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 // 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 // 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 /**
198 * 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 * 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 $champs = array(
248 "demande",
249 "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 );
256 if ($this->f->is_option_dossier_commune_enabled()) {
257 $champs[] = "demande.commune";
258 }
259 array_push($champs,
260 "dossier.date_depot_mairie",
261 "demande.date_demande",
262 "'' 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 "'' 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 "demande.parcelle_temporaire",
275 "demande.terrain_references_cadastrales",
276 "demande.terrain_superficie",
277 "demande.terrain_adresse_voie_numero",
278 "demande.terrain_adresse_voie",
279 "demande.terrain_adresse_code_postal",
280 "demande.terrain_adresse_localite",
281 "demande.terrain_adresse_lieu_dit",
282 "demande.terrain_adresse_bp",
283 "demande.terrain_adresse_cedex",
284 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 "instruction_recepisse",
291 "arrondissement",
292 "source_depot",
293 "dossier.etat_transmission_platau"
294 );
295 return $champs;
296 }
297
298
299 /**
300 * 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 ON demande.dossier_instruction = dossier.dossier
309 LEFT JOIN %1$slien_dossier_nature_travaux
310 ON lien_dossier_nature_travaux.dossier = dossier.dossier',
311 DB_PREFIXE,
312 $this->table
313 );
314 }
315
316 /**
317 *
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 (commune.om_validite_debut IS NULL OR commune.om_validite_debut < NOW())
329 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 *
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 * CONDITION - is_user_from_allowed_collectivite.
380 *
381 * 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 */
387 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 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 $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
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
471 $instr = $this->f->get_inst__om_dbform(array(
472 "obj" => "instruction",
473 "idx" => $row["instruction"],
474 ));
475
476 // Mise à disposition du récépissé
477 $this->expose_pdf_output(
478 $pdf_output['pdf_output'],
479 "recepisse_depot_".$instr->determinate_name_doc_pdf().'.pdf'
480 );
481 } else {
482 // On indique à l'utilisateur que le récépissé n'existe pas
483 $this->f->displayMessage("error", __("Le recepisse demande n'existe pas."));
484 }
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 $error = false;
503 // 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 if ($aff_obli == "" || !is_numeric($aff_obli)) {
507 $error = true;
508 } else {
509 // Si pas de correspondance d'événement dans la base
510 if ($this->evenement_exist($aff_obli) != true) {
511 $error = true;
512 }
513 }
514 // Affichage d'un message si en erreur
515 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 return;
526 }
527
528 // Si un affichage réglementaire des dossiers est demandé (appel en ajax)
529 if ($this->f->get_submitted_post_value('submit') !== null) {
530 // 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 $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 ON dossier.dossier=instruction.dossier
549 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 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
556 LEFT JOIN %1$sdossier_autorisation_type
557 ON dossier_autorisation_type_detaille.dossier_autorisation_type =
558 dossier_autorisation_type.dossier_autorisation_type
559 LEFT JOIN %1$sgroupe
560 ON dossier_autorisation_type.groupe = groupe.groupe
561 LEFT JOIN %1$sdossier_instruction_type
562 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
563 WHERE
564 (select
565 e.statut
566 from
567 %1$setat e
568 where
569 e.etat = dossier.etat
570 ) = \'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 $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 // Boucle sur les dossiers
594 foreach ($qres['result'] as $row) {
595 // 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 $instr = $this->f->get_inst__om_dbform(array(
600 "obj" => "instruction",
601 "idx" => "]",
602 ));
603 // 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 $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 //Finalisation du document
628 $_GET['obj']='instruction';
629 $_GET['idx']=$instr->valF[$instr->clePrimaire];
630 $instr = $this->f->get_inst__om_dbform(array(
631 "obj" => "instruction",
632 "idx" => $_GET['idx'],
633 ));
634 // On se met en contexte de l'action 100 finaliser
635 $instr->setParameter('maj',100);
636 $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 }
648 }
649 //
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 } else { // Sinon affichage standard
663 // Affichage de la description de l'écran
664 $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 // 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 printf(
687 "<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 __("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 echo "\t</div>\n";
697 // Fermeture du fomulaire
698 echo "\t</form>\n";
699 }
700 }
701
702 /**
703 * 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 * 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 * 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 if ($aff_obli == "" || !is_numeric($aff_obli)) {
780 $erreur = true;
781 } else {
782 // Si pas de correspondance d'événement dans la base
783 if ($this->evenement_exist($aff_obli) != true) {
784 $error = true;
785 }
786 }
787 // Affichage d'un message si en erreur
788 if ($erreur == true) {
789 // Affichage de l'erreur et sortie de la vue
790 $this->f->displayMessage("error", __("Erreur de parametrage. Contactez votre administrateur."));
791 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 // 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 // Récupération des informations sur le dossier et l'étape d'instruction
807 $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 FROM
816 %1$sdossier
817 LEFT JOIN %1$sinstruction
818 ON dossier.dossier = instruction.dossier
819 AND instruction.evenement = %2$d
820 WHERE
821 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 // Si il y a un dossier et une étape d'instrcution correspondante à
832 // l'événement affichage obligatoire et que l'instruction est bien finalisée
833 if ($qres['row_count'] !== 0
834 && $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 $message_class = "valid";
841 $message = __("Cliquez sur le lien ci-dessous pour telecharger votre attestation d'affichage");
842 $message .= " : <br/><br/>";
843 $message .= "<a class='om-prev-icon pdf-16'";
844 $message .= " title=\"".__("Attestation d'affichage")."\"";
845 $message .= " href='../app/index.php?module=form&snippet=file&obj=instruction&amp;"
846 ."champ=om_fichier_instruction&amp;id=".$row['instruction']."'";
847 $message .= " target='_blank'>";
848 $message .= __("Attestation d'affichage");
849 $message .= "</a>";
850 } elseif ($qres['row_count'] != 0
851 && $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 $message = __("L'attestation de ce dossier existe mais n'est pas finalisée.");
859 } elseif ($qres['row_count'] != 0 && $row["instruction"] == "") {
860 // Si aucune instruction avec l'événement affichage obligatoire n'a
861 // été trouvée
862 $message_class = "error";
863 $message = __("Ce dossier n'a jamais ete affiche.");
864 } else {
865 // Si aucun dossier n'est trouvé
866 $message_class = "error";
867 $message = __("Ce dossier n'existe pas.");
868 }
869 } else {
870 // Si aucune valeur n'a été saisie dans le champs dossier
871 $message_class = "error";
872 $message = __("Veuiller saisir un No de dossier.");
873 }
874 }
875
876 /**
877 * Affichage des messages et du formulaire
878 */
879 // Affichage de la description de l'écran
880 $this->f->displayDescription(__("Cet ecran permet d'imprimer l'attestation d'affichage ".
881 "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 $form = $this->f->get_inst__om_formulaire(array(
899 "validation" => 0,
900 "maj" => 0,
901 "champs" => $champs,
902 ));
903 // Paramétrage des champs du formulaire
904 $form->setLib("dossier", __("No de dossier"));
905 $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 $this->f->layout->display_form_button(array("value" => __("Valider")));
915 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 printf(json_encode(__("Aucune reference cadastrale fournie")));
939 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 printf(json_encode(__("La localisation SIG n'est pas activee pour cette commune.")));
955 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 //
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 try {
995 $geoads = new geoads($collectivite_param, $extra_params);
996 } 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 if (!isset($execute[0]) || $execute[0]['existe'] != true) {
1016 printf(json_encode(__("Aucune adresse ne correspond a la reference cadastrale fournie")));
1017 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 $adresse_ws = '';
1024 if (isset($execute[0]) && is_array($execute[0])) {
1025 $adresse_ws = $execute[0];
1026 }
1027 //Récupération du nom de la collectivité
1028 if ($this->f->is_option_dossier_commune_enabled() === true
1029 && $this->f->get_submitted_post_value("commune") != null) {
1030 //
1031 $qres = $this->f->get_one_result_from_db_query(
1032 sprintf(
1033 'SELECT
1034 ncc
1035 FROM
1036 %1$scommune
1037 WHERE
1038 commune = %2$d',
1039 DB_PREFIXE,
1040 intval($this->f->get_submitted_post_value("commune"))
1041 ),
1042 array(
1043 "origin" => __METHOD__,
1044 "force_return" => true,
1045 )
1046 );
1047 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 return;
1053 }
1054 } else {
1055 $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 }
1072
1073 $response["return_addr"]["localite"] = $qres["result"];
1074
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 // 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 } else {
1090 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 $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 }
1114 }
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 if (isset($adresse_ws["adresse"]['numero_voie']) === true
1121 && $adresse_ws["adresse"]['numero_voie'] !== '') {
1122 $response['return_addr']['numero_voie'] = substr($adresse_ws["adresse"]['numero_voie'], 0, 20);
1123 }
1124 // cas où le type de voie n'est pas fourni par le SIG
1125 if (isset($adresse_ws["adresse"]['nom_voie']) === true
1126 && $adresse_ws["adresse"]['nom_voie'] !== '') {
1127 $response['return_addr']['nom_voie'] = substr(
1128 $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 && $adresse_ws["adresse"]['type_voie'] !== ''
1136 && $adresse_ws["adresse"]['nom_voie'] !== '') {
1137 $response['return_addr']['nom_voie'] = substr(
1138 $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 function setValF($val = array()) {
1149
1150 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 parent::setValF($val);
1160
1161 // Récupération des id demandeurs postés
1162 $this->getPostedValues();
1163
1164 //
1165 $this->valF['source_depot'] = $this->calcul_source_depot($val);
1166
1167 // 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 }
1179
1180 /**
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 etat.libelle as etat,
1199 dossier_autorisation.commune
1200 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
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 $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 );
1226 $row = array_shift($qres['result']);
1227 return $row;
1228 }
1229
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 // Sur le formulaire de modification, depot_electronique
1238 // n'est pas modifiable et affiche Oui/Non.
1239 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 }
1249 //
1250 if ($maj == 0) {
1251 // Définition de la date de dépôt par défaut
1252 // La date du jour par défaut dans le champs date_demande
1253 if ($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
1254 $form->setVal("date_demande", date('d/m/Y'));
1255 }
1256
1257 $form->setVal("etat_transmission_platau", "non_transmissible");
1258
1259 // Récupération des valeurs du dossier d'autorisation correspondant
1260 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 }
1265 }
1266 }
1267
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 }
1274
1275 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 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
1286 *
1287 * @return, string Type de formulaire.
1288 */
1289 function get_type_affichage_formulaire() {
1290 $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 return false;
1312 }
1313
1314 return $qres["result"];
1315 }
1316
1317 /**
1318 * (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 * 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 * @return void
1336 */
1337 function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
1338 parent::verifier($val);
1339
1340 // Vérification 1
1341 // Vérifie si la date de demande existe avant de la tester
1342 if (! empty($val["date_demande"]) ) {
1343 //
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 if (! $date_demande instanceof DateTime) {
1352 $this->correct = false;
1353 $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 }
1356 // 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 }
1363
1364 // 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 $type_aff_form = $this->get_type_affichage_formulaire();
1368 if ($type_aff_form ===false) {
1369 $this->correct = false;
1370 $this->addToMessage(__("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
1371 }
1372 switch ($type_aff_form) {
1373 case 'ADS':
1374 case 'CTX RE':
1375 case 'CONSULTATION ENTRANTE':
1376 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) ||
1377 empty($this->postedIdDemandeur["petitionnaire_principal"]) &&
1378 !is_null($this->form)) {
1379 $this->correct = false;
1380 $this->addToMessage(__("La saisie d'un petitionnaire principal est obligatoire."));
1381 }
1382 break;
1383 case 'CTX IN':
1384 if(!isset($this->postedIdDemandeur["contrevenant_principal"]) ||
1385 empty($this->postedIdDemandeur["contrevenant_principal"]) &&
1386 !is_null($this->form)) {
1387 $this->correct = false;
1388 $this->addToMessage(__("La saisie d'un contrevenant principal est obligatoire."));
1389 }
1390 break;
1391 case 'DPC':
1392 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) ||
1393 empty($this->postedIdDemandeur["petitionnaire_principal"]) &&
1394 !is_null($this->form)) {
1395 $this->correct = false;
1396 $this->addToMessage(__("La saisie d'un petitionnaire principal est obligatoire."));
1397 }
1398 if(!isset($this->postedIdDemandeur["bailleur_principal"]) ||
1399 empty($this->postedIdDemandeur["bailleur_principal"]) &&
1400 !is_null($this->form)) {
1401 $this->correct = false;
1402 $this->addToMessage(__("La saisie d'un bailleur principal est obligatoire."));
1403 }
1404 break;
1405 }
1406
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 }
1419
1420 /**
1421 *
1422 * @return string
1423 */
1424 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
1428 /**
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
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 CONCAT(dossier_autorisation_type_detaille.code, \' - \', dossier_autorisation_type_detaille.libelle)
1478 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 }
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 // 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 || ($this->f->get_submitted_get_value('obj') === null))) {
1510 // demande_type
1511 $form->setSelect(
1512 'demande_type',
1513 $this->loadSelectDemandeType($form, $maj, "dossier_autorisation_type_detaille")
1514 );
1515 } else {
1516 // demande_type
1517 $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 }
1528 // arrondissement
1529 $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
1540 $this->init_select(
1541 $form,
1542 $this->f->db,
1543 $maj,
1544 null,
1545 "dossier_autorisation_type_detaille",
1546 $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille"),
1547 $this->get_var_sql_forminc__sql("dossier_autorisation_type_detaille_by_id"),
1548 false
1549 );
1550 // om_collectivite
1551 $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 // 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
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 // 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 $form->setSelect("source_depot", $contenu);
1605 }
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 function loadSelectDemandeType(&$form, $maj, $champ) {
1615
1616 // Contenu de la liste à choix
1617 $contenu=array();
1618 $contenu[0][0]='';
1619 $contenu[1][0]= sprintf('%s %s', __('choisir'), __("demande_type"));
1620
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 //
1631 if ($id_dossier_autorisation_type_detaille === '') {
1632 return $contenu;
1633 }
1634
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 if (isset($idx_dossier) && $idx_dossier != "") {
1641 $id_demande_nature = '2';
1642 }
1643
1644 // Requête récupération type demande pour les nouveaux DA
1645 $sql = sprintf('
1646 SELECT
1647 demande_type.demande_type,
1648 demande_type.libelle as lib
1649 FROM
1650 %1$sdemande_type
1651 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 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 AND demande_type.dossier_instruction_type IS NOT NULL
1659 AND dossier_instruction_type.sous_dossier IS NOT TRUE
1660 ORDER BY
1661 demande_type.libelle, demande_type.demande_type
1662 ',
1663 DB_PREFIXE,
1664 intval($id_dossier_autorisation_type_detaille),
1665 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 );
1669 // Requêtes de récupération des types de demande pour les DA existants
1670 if ($id_demande_nature == '2') {
1671 // 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 }
1674 $qres = $this->f->get_all_results_from_db_query(
1675 $sql,
1676 array(
1677 'origin' => __METHOD__,
1678 'mode' => DB_FETCHMODE_ORDERED
1679 )
1680 );
1681 //Les résultats de la requête sont stocké dans le tableau contenu
1682 $k=1;
1683 foreach ($qres['result'] as $row) {
1684 $contenu[0][$k] = $row[0];
1685 $contenu[1][$k] = $row[1];
1686 $k++;
1687 }
1688
1689 // Retourne le contenu de la liste
1690 return $contenu;
1691 }
1692
1693 /**
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 INNER JOIN %1$sdossier_instruction_type
1738 ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1739 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 AND dossier_instruction_type.sous_dossier IS NOT TRUE
1753 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 INNER JOIN %1$sdossier_instruction_type
1769 ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1770 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 AND dossier_instruction_type.sous_dossier IS NOT TRUE
1778 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 /*
1811 * Ajout du fielset
1812 * Add fieldset
1813 */
1814 function setLayout(&$form, $maj){
1815 if ( $maj < 2) {
1816
1817 // Type de dossier/demande
1818 $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1819 $form->setFieldset('om_collectivite','D'
1820 ,_('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
1837 // 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 $form->setBloc('commune','DF','','commune---loader');
1854
1855 $form->setBloc('date_depot_mairie','D','','inline_block demande---dates');
1856 $form->setBloc('date_demande','F');
1857
1858 // 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 // Demandeur
1866 // → cf. formSpecificContent()
1867 $form->setBloc('view_demandeurs','DF','', "col_12 demande__demandeurs demande_hidden_bloc");
1868
1869 // Localisation
1870 $form->setFieldset('parcelle_temporaire','D',_('Localisation'), "col_12 demande__localisation demande_hidden_bloc");
1871 // Bloc références cadastrales
1872 $form->setBloc('parcelle_temporaire', 'D', __('Références cadastrales'), 'demande__localisation--refcadastrales');
1873 $form->setBloc('terrain_references_cadastrales', 'DF', '', 'no-label');
1874 $form->setBloc('terrain_superficie', 'F');
1875 // Bloc adresse
1876 $form->setBloc('terrain_adresse_voie_numero', 'D', __('Adresse'), 'demande__localisation--adresse');
1877 // 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
1886 // Fieldset Projet
1887 $form->setFieldset('nature_travaux', 'DF', __('Projet'), 'demande__projet demande_hidden_bloc');
1888
1889 }
1890 }
1891
1892 /*
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
1898 $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 $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 if ($maj === '0' && intval($this->f->get_submitted_get_value('validation')) > 0) {
1910 $form->setPlaceholders('nature_travaux', __('Aucune valeur sélectionnée'));
1911 }
1912 }
1913
1914 /*
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
1924 $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 }
1929
1930
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 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1940 }
1941
1942 function setLib(&$form,$maj) {
1943 parent::setLib($form,$maj);
1944 //libelle des champs
1945 $form->setLib('date_depot_mairie', __('Dépôt en mairie'));
1946 $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1947 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1948 $form->setLib('nature_travaux', __('Nature des travaux'));
1949 $form->setLib('terrain_superficie', __("Superficie totale de la parcelle cadastrale (en m2)"));
1950 }
1951
1952 /*
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 $form->setType('nature_travaux', 'select_multiple_static');
1960 $form->setType('dossier_instruction', 'hidden');
1961 $form->setType('source_depot', 'hidden');
1962 $form->setType('dossier_autorisation', 'hidden');
1963 $form->setType('autorisation_contestee', 'autorisation_contestee');
1964
1965 $form->setType('instruction_recepisse', 'hidden');
1966 $form->setType('arrondissement', 'hidden');
1967 $form->setType('etat_transmission_platau', 'hidden');
1968
1969 $form->setType('etat', 'hidden');
1970
1971 $form->setType('view_demandeurs', 'htmlstaticnolabel');
1972
1973 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 //Le paramètre "dépôt électronique" n'est pas modifiable manuellement
1980 if ($maj == 0) {
1981 $form->setType('depot_electronique', 'hidden');
1982 }
1983
1984 $form->setType("commune", "hidden");
1985
1986 // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1987 // sauf demande_type
1988 if(($maj == 0 && $this-> getParameter("idx_dossier"))) {
1989 $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 $form->setType('depot_electronique', 'hiddenstatic');
2003 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
2004 $form->setType('demande_type', 'selecthiddenstatic');
2005 $form->setType('terrain_references_cadastrales', 'hiddenstatic');
2006 }
2007 if($maj == 3) {
2008 // 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 }
2015
2016 // 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
2027 // Par défaut l'affectation automatique est caché
2028 $form->setType('affectation_automatique', 'hidden');
2029
2030 }
2031
2032
2033 /**
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 $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 );
2063 $this->cerfa = $qres["result"];
2064
2065 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 function ajoutDossierAutorisation($id, $val) {
2078 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
2079 "obj" => "dossier_autorisation",
2080 "idx" => "]",
2081 ));
2082 $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 $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 );
2104 if ($qres["code"] !== "OK") {
2105 return false;
2106 }
2107
2108 if($qres["result"] != 1) {
2109 $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
2110
2111 return false;
2112 }
2113
2114 // 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 }
2121
2122
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 // Définition des valeurs à insérer
2185 $valAuto['om_collectivite'] = $this->valF['om_collectivite'];
2186 $valAuto['dossier_autorisation']="";
2187 $valAuto['exercice']=null;
2188 $valAuto['insee'] = $insee;
2189 $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 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 $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 // Pour vérifier dans le dossier d'autorisation si déposé électroniquement
2219 $valAuto['depot_electronique']=$this->valF['depot_electronique'];
2220
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 $this->da_already_exists = false;
2233 // saisie manuelle du numéro de dossier complet
2234 if (isset($val['num_doss_complet']) && !empty($val['num_doss_complet'])) {
2235 //
2236 $valAuto['numero_dossier_complet'] = $val['num_doss_complet'];
2237 $dossier_autorisation_id = $val['num_doss_complet'];
2238
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 if ($this->f->get_collectivite_code_entite($this->valF['om_collectivite']) === null) {
2247
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 $code_entite = $this->f->get_collectivite_code_entite($this->valF['om_collectivite']);
2260 $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 if (isset($num_urba['da'][0]) === true) {
2266 $dossier_autorisation_id = $num_urba['da'][0];
2267 }
2268 if ($this->f->findObjectById('dossier_autorisation', $dossier_autorisation_id) !== null) {
2269 $this->da_already_exists = true;
2270 }
2271 }
2272
2273 $valAuto['source_depot'] = $this->calcul_source_depot($val);
2274
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 // Liaison du dossier ajouter à la demande
2290 $this->valF['dossier_autorisation'] = $dossier_autorisation_id;
2291
2292 return true;
2293 }
2294
2295 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
2296
2297 return false;
2298 }
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 function ajoutDossierInstruction($id, $val, $dossier_instruction_type) {
2311 // 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 foreach($dossier->champs as $value) {
2328 $valInstr[$value] = null;
2329 }
2330 // TODO: remove because unused
2331 $datd = $this->f->get_inst__om_dbform(array(
2332 "obj" => "dossier_autorisation_type_detaille",
2333 "idx" => $this->valF['dossier_autorisation_type_detaille'],
2334 ));
2335
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 // 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 $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 if ($this->f->is_option_date_depot_mairie_enabled() === true){
2349 $valInstr['date_depot_mairie'] = $val['date_depot_mairie'];
2350 }
2351 $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 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
2357 $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
2358 $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 if ($this->valF["autorisation_contestee"] != "") {
2373 $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
2374 }
2375 $valInstr['demande_type'] = $this->valF['demande_type'];
2376 $valInstr['etat_transmission_platau'] = $val['etat_transmission_platau'];
2377 $valInstr['nature_travaux'] = ! empty($val['nature_travaux']) ?
2378 $val['nature_travaux'] :
2379 '';
2380
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 $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
2394 // Si le dossier doit être à qualifier
2395 if ($qualification === 't') {
2396 // Met le champ à true
2397 $valInstr['a_qualifier'] = true;
2398 }
2399
2400 /*
2401 * Gestion de la simulation des taxes
2402 */
2403 // Récupère l'instance du cerfa lié au type détaillé du DA
2404 // TODO : à vérifier mais cette variable n'est pas utilisée et doit être supprimée
2405 $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
2406
2407 // 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
2418 // saisie de la commune
2419 if (array_key_exists('commune', $this->valF)) {
2420 $valInstr['commune'] = $this->valF['commune'];
2421 }
2422
2423 // saisie de l'affectation automatique
2424 if (isset($this->valF['affectation_automatique'])) {
2425 $valInstr['affectation_automatique'] = $this->valF['affectation_automatique'];
2426 }
2427
2428 // saisie manuelle du numéro de dossier complet
2429 if (isset($val['num_doss_complet']) === true && empty($val['num_doss_complet']) === false) {
2430 //
2431 $valInstr['numero_dossier_complet'] = $val['num_doss_complet'];
2432 }
2433
2434 $valInstr['source_depot'] = $this->calcul_source_depot($val);
2435
2436 // 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 //
2444 $this->f->addToLog(__METHOD__."() : ajout du dossier", EXTRA_VERBOSE_MODE);
2445
2446 if($dossier->ajouter($valInstr) === false) {
2447 $this->f->addToLog($dossier->msg, DEBUG_MODE);
2448 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
2449 // Affiche l'erreur empêchant a création du dossier d'instruction
2450 $this->addToMessage($dossier->msg);
2451 return false;
2452 }
2453 else {
2454 $this->f->addToLog(__METHOD__."() : dossier ajouté", VERBOSE_MODE);
2455 }
2456
2457
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 if (($dossier->get_di_numero_suffixe($dossier->valF['dossier']) != ''
2465 || $dossier->get_di_numero_suffixe($dossier->valF['dossier']) != '0')) {
2466
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 $qres = $this->f->get_one_result_from_db_query(
2473 sprintf(
2474 'SELECT
2475 erp
2476 FROM
2477 %1$sdossier
2478 LEFT JOIN %1$sdossier_instruction_type
2479 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2480 WHERE
2481 dossier.dossier_autorisation = (
2482 SELECT
2483 dossier_autorisation.dossier_autorisation
2484 FROM
2485 %1$sdossier_autorisation
2486 LEFT JOIN %1$sdossier
2487 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2488 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 );
2500 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 return false;
2506 }
2507
2508 // On met à jour la case erp en fonction du DI initial
2509 $valF = array();
2510 $valF['erp'] = isset($qres["result"]) === true && $qres["result"] === 't' ? true : false;
2511
2512 $res = $this->f->db->autoExecute(
2513 DB_PREFIXE."dossier",
2514 $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 //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 __("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2536 );
2537 }
2538 elseif ( $dossier->valF['instructeur'] === null ){
2539 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2540 $this->addToMessage("<br/> ".
2541 __("Pensez a assigner un instructeur a ce dossier.")
2542 );
2543 } else {
2544 $this->addToMessage(
2545 __("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2546 );
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 function ajoutDonneesTechniquesDA($id, $val) {
2566 $this->DTDA = $this->f->get_inst__om_dbform(array(
2567 "obj" => "donnees_techniques",
2568 "idx" => "]",
2569 ));
2570
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 if($this->DTDA->ajouter($valF) === false) {
2584 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
2585 return false;
2586 }
2587 $this->f->addToLog(__METHOD__."() : DTDA ajoutées", VERBOSE_MODE);
2588 }
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 function ajoutLiensDossierAutorisation($id, $val) {
2605 // Vérifie que le dossier d'instruction possède déjà un petitionnaire principal
2606 $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 );
2623 if ($qres["code"] !== "OK") {
2624 return false;
2625 }
2626 $already_principal = false;
2627 if ($qres["result"] > 0) {
2628 $already_principal = true;
2629 }
2630
2631 // Création des liens entre le dossier autorisation et les demandeurs
2632 $ldad = $this->f->get_inst__om_dbform(array(
2633 "obj" => "lien_dossier_autorisation_demandeur",
2634 "idx" => "]",
2635 ));
2636 // Recupération des demandeurs liés à la demande
2637 $sql = str_replace(
2638 "<demande>",
2639 intval($this->valF['demande']),
2640 $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2641 );
2642 $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 return false;
2666 }
2667 foreach ($qres['result'] as $row) {
2668 $can_add = true;
2669 $row['lien_dossier_autorisation_demandeur'] = NULL;
2670 $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
2671 // 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 }
2678 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 }
2686 $this->f->addToLog(__METHOD__."() : liens demandeurs DA ajoutés", VERBOSE_MODE);
2687
2688 //
2689 return true;
2690 }
2691
2692 /**
2693 * Ajout des liens demandeurs / dossier d'autorisation
2694 **/
2695 function ajoutLiensDossierInstruction($id, $val) {
2696 // Création des liens entre le dossier instruction et les demandeurs
2697 $ldd = $this->f->get_inst__om_dbform(array(
2698 "obj" => "lien_dossier_demandeur",
2699 "idx" => "]",
2700 ));
2701 // Recupération des demandeurs liés à la demande
2702 $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 );
2713 if ($qres['code'] !== 'OK') {
2714 return false;
2715 }
2716 foreach ($qres['result'] as $row) {
2717 $row['lien_dossier_demandeur'] = NULL;
2718 $row['dossier'] = $this->valF['dossier_instruction'];
2719 if ($ldd->ajouter($row) === false) {
2720 $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 $this->f->addToLog(__METHOD__."() : liens demandeurs DI ajoutés", VERBOSE_MODE);
2725
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 $qres = $this->f->get_all_results_from_db_query(
2738 sprintf(
2739 'SELECT
2740 arrondissement
2741 FROM
2742 %1$sarrondissement
2743 WHERE
2744 code_postal = \'%2$d\'',
2745 DB_PREFIXE,
2746 intval($terrain_adresse_code_postal)
2747 ),
2748 array(
2749 'origin' => __METHOD__
2750 )
2751 );
2752
2753 if ($qres['row_count'] > 0) {
2754
2755 $row = array_shift($qres['result']);
2756 $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 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
2783 if ($qres['row_count'] > 0) {
2784 $row = array_shift($qres['result']);
2785 $evenement = $row['evenement'];
2786 }
2787
2788 return $evenement;
2789 }
2790
2791 /**
2792 * 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 $parent_res = parent::triggerajouter($id, $dnu1, $val);
2801 if ($parent_res === false) return $parent_res;
2802 //
2803 // 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 if ($this->f->get_collectivite_code_entite(intval($this->valF['om_collectivite'])) === null) {
2806 $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 if($this->valF["demande_type"] != null) {
2816 $qres = $this->f->get_all_results_from_db_query(
2817 sprintf(
2818 str_replace(
2819 '<idx>',
2820 intval($this->valF['demande_type']),
2821 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2822 )
2823 ),
2824 array(
2825 'origin' => __METHOD__,
2826 'force_result' => true
2827 )
2828 );
2829 if ($qres['code'] !== 'OK') {
2830 return false;
2831 }
2832 // Attribut permettant de définir si un dossier a été créé
2833 $this->ajoutDI = false;
2834 $dossier_type = array_shift($qres['result']);
2835 $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 //
2842 $dossier_parent = empty($this->valF['dossier_instruction']) === false ? $this->valF['dossier_instruction'] : null;
2843
2844
2845 // 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 // Si on est sur un ajout dossier sur existant
2850 // Vérifie que le type de DA est transmissible et que le type de DI est également
2851 // considéré comme transmissible
2852 if ($this->valF['dossier_autorisation'] !== ""
2853 && $this->f->is_type_dossier_platau($dossier_parent, $dossier_instruction_type) === true
2854 && $this->f->is_dit_transmitted_platau($dossier_instruction_type, intval($this->valF['om_collectivite'])) === true) {
2855 //
2856 $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 // Création du dossier_autorisation
2863 if($this->valF['dossier_autorisation'] == "") {
2864 //
2865 if($this->ajoutDossierAutorisation($id, $val) === false) {
2866 if(empty($this->msg)) {
2867 $this -> addToMessage(
2868 __("Erreur lors de l'enregistrement de la demande.")." ".
2869 __("Contactez votre administrateur.")
2870 );
2871 }
2872 $this->correct = false;
2873 return false;
2874 }
2875
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 if ($this->f->is_type_dossier_platau($dossier_parent, $dossier_instruction_type) === true) {
2879 $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 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 $this->addToMessage(
2890 __("Creation du dossier d'autorisation no").
2891 '<span id="new_da">'.
2892 $inst_da->getVal('dossier_autorisation_libelle').
2893 '</span>'
2894 );
2895 }
2896 // Ajout des données techniques au dossier d'autorisation
2897 if($this->ajoutDonneesTechniquesDA($id, $val) === false) {
2898 $this -> addToMessage(
2899 __("Erreur lors de l'enregistrement de la demande.")." ".
2900 __("Contactez votre administrateur.")
2901 );
2902 $this->correct = false;
2903 return false;
2904 }
2905 }
2906 } else {
2907
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 );
2924 if ($qres["code"] !== "OK") {
2925 return false;
2926 }
2927
2928 $this->DTDA = null;
2929 if ($qres["result"] !=="" && is_numeric($qres["result"])){
2930 $this->DTDA = $this->f->get_inst__om_dbform(array(
2931 "obj" => "donnees_techniques",
2932 "idx" => $qres["result"],
2933 ));
2934 $this->DTDA->setValFFromVal();
2935 }
2936 }
2937
2938 // 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
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 // Création du dossier d'instruction
2949 if($dossier_instruction_type != null) {
2950 if($this->ajoutDossierInstruction($id, $val, $dossier_instruction_type) === false ) {
2951 $this->addToMessage(
2952 __("Erreur lors de l'enregistrement de la demande.")." ".
2953 __("Contactez votre administrateur.")
2954 );
2955 $this->correct = false;
2956 return false;
2957 }
2958 // Libellé du dossier
2959 $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2960 $dossier_libelle = $inst_di->getVal('dossier_libelle');
2961 // Message de validation
2962 $this->addToMessage(
2963 __("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
2964 );
2965
2966 // Attribut permettant de définir si un dossier a été créé.
2967 $this->ajoutDI = true;
2968 }
2969
2970 $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 if ($code_datd === 'REC' || $code_datd === 'REG') {
2975 $obj = "dossier_contentieux_tous_recours";
2976 }
2977 if ($code_datd === 'IN') {
2978 $obj = "dossier_contentieux_toutes_infractions";
2979 }
2980
2981 // Template du lien vers le DI
2982 $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
2984 // Lien vers le DI
2985 $link_di = sprintf($template_link_di, __("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], __("Acceder au dossier d'instruction"));
2986
2987 // Message affiché à l'utilisateur
2988 $this->addToMessage($link_di."<br/>");
2989
2990 /*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 * 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 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3015 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3016 parent::triggerajouterapres($id, $dnu1, $val);
3017 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
3018 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
3019 // 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 $etat_di_before_instr = $inst_di->getVal('etat');
3026 }
3027
3028 /**
3029 *
3030 */
3031 if ($this->insertLinkDemandeDemandeur() == false) {
3032 return false;
3033 }
3034
3035 // Ajout des lliens entre dossier_autorisation et demandeur
3036 if(!empty($this->valF['dossier_autorisation'])) {
3037 if ($this->ajoutLiensDossierAutorisation($id, $val) == false) {
3038 return false;
3039 }
3040 }
3041 // Ajout des liens entre dossier et demandeur
3042 if($this->ajoutDI === TRUE) {
3043 if ($this->ajoutLiensDossierInstruction($id, $val) == false) {
3044 return false;
3045 }
3046 }
3047
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
3055 // Duplication des lots (et leurs données techniques) et
3056 // liaison au nouveau dossier_d'instruction
3057 if(!empty($this->valF['dossier_autorisation']) && $val['dossier_autorisation'] != "" ) {
3058 $this->lienLotDossierInstruction($id, $val);
3059 }
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
3071 /*Récupération de la lettre type de l'événement*/
3072 $document_type = $this->f->get_document_type($evenement);
3073
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 $valInstr['document_type_instruction']=$document_type;
3084 $valInstr['fichier_instruction_name']=NULL;
3085 $valInstr['lettretype']=$lettretype;
3086 $valInstr['complement_om_html']="";
3087 $valInstr['complement2_om_html']="";
3088
3089 $valInstr['action']="initialisation";
3090 $valInstr['delai']="2 mois";
3091 $valInstr['etat']="notifier";
3092 $valInstr['accord_tacite']="Oui";
3093 $valInstr['delai_notification']="1 mois";
3094 $valInstr['archive_delai']="";
3095 $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 $valInstr['tiers_destinataire']=NULL;
3139 $valInstr['tiers_destinataire_parametre']=NULL;
3140 $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 $valInstr['date_depot']=NULL;
3149 $valInstr['date_depot_mairie']=NULL;
3150 $valInstr['om_final_instruction_utilisateur']= "f";
3151 $valInstr['om_fichier_instruction_dossier_final']= "f";
3152 $valInstr['created_by_commune']= "f";
3153 $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 $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 $valInstr['archive_date_affichage'] = null;
3165 $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 $valInstr['parapheur_lien_page_signature'] = NULL;
3173 $valInstr['commentaire'] = NULL;
3174 $valInstr['envoye_cl_platau'] = "f";
3175
3176 // Récupération des champs archive si cette demande a créée un dossier
3177 // d'instruction mais pas un P0
3178 if (!is_null($this->valF['dossier_instruction'])
3179 && $this->valF['dossier_instruction'] !== "" ) {
3180 // Requête
3181 $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 return false;
3201 }
3202 $res = $qres["result"];
3203
3204 // On vérifie qu'il ne s'agit pas d'une nouvelle demande
3205 if (get_called_class() !== 'demande_nouveau_dossier') {
3206 $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
3207
3208 if ($res == false) {
3209 $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 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 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 if (isset($res['archive_date_affichage'])) {
3301 $valInstr['archive_date_affichage'] = $res['archive_date_affichage'];
3302 }
3303 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 }
3310 }
3311
3312 // Création d'un nouveau dossier
3313 $instruction = $this->f->get_inst__om_dbform(array(
3314 "obj" => "instruction",
3315 "idx" => "]",
3316 ));
3317 $instruction->valF = array();
3318 if ($instruction->ajouter($valInstr) === false) {
3319 // Suppression des messages valides puisque erreur
3320 $this->msg = '';
3321 $this -> addToMessage($instruction->msg);
3322 $this -> addToMessage(__("Une erreur s'est produite lors de la creation du recepisse"));
3323 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
3324 return false;
3325 }
3326 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) ajoutée", VERBOSE_MODE);
3327
3328 // Finalisation du document
3329 $_GET['obj']='instruction';
3330 $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
3331 $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 // 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 $this->f->addToLog(__METHOD__."() : finalisation de l'instruction '$evenement' ($lettretype) ...", VERBOSE_MODE);
3344 $res = $instruction_final->finalize();
3345 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) finalisée", VERBOSE_MODE);
3346 // 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 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 $demande_instance = $this->f->get_inst__om_dbform(array(
3358 "obj" => "demande",
3359 "idx" => $this->valF['demande'],
3360 ));
3361 if ($demande_instance->modifier($this->valF) === false) {
3362 $this -> addToMessage($demande_instance->msg);
3363 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
3364 return false;
3365 }
3366 $this->f->addToLog(__METHOD__."() : demande mise à jour", VERBOSE_MODE);
3367
3368 // Instance du dossier d'autorisation
3369 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
3370
3371 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
3372 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
3373 && $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 // Met à jour la clé d'accès au portail citoyen dans le dossier
3385 // d'autorisation
3386 $update = $inst_da->update_citizen_access_key($force);
3387 //
3388 if ($update !== true) {
3389 //
3390 $this->addToMessage(__("La cle d'acces au portail citoyen n'a pas pu etre generee."));
3391 return false;
3392 }
3393 }
3394
3395 // 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 title=\"".__("Telecharger le recepisse de la demande")."\"
3403 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
3404 $this->valF[$this->clePrimaire]."' target='_blank'>
3405 <span
3406 class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
3407 title=\"".__("Telecharger le recepisse de la demande")."\">".
3408 __("Telecharger le recepisse de la demande").
3409 "</span>".
3410 __("Telecharger le recepisse de la demande")."
3411 </a><br/>");
3412 }
3413 }
3414
3415 // 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 // 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 $this->addToMessage(__("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
3431 return false;
3432 }
3433 }
3434
3435 /**
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 //
3447 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3448 && $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 $this->addToMessage(__("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
3460 return false;
3461 }
3462 $this->addToMessage(__("Notification (109) du référentiel ERP OK."));
3463 }
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 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3478 && $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 // 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 //
3487 $infos = array(
3488 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3489 "type_piece" => $type_piece,
3490 );
3491 //
3492 $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
3493 if ($ret !== true) {
3494 $this->cleanMessage();
3495 $this->addToMessage(__("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
3496 return false;
3497 }
3498 $this->addToMessage(__("Notification (112) du référentiel ERP OK."));
3499 }
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 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3514 && $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 $this->addToMessage(__("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
3526 return false;
3527 }
3528 $this->addToMessage(__("Notification (110) du référentiel ERP OK."));
3529 }
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 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3544 && $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 $this->addToMessage(__("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
3556 return false;
3557 }
3558 $this->addToMessage(__("Notification (107) du référentiel ERP OK."));
3559 }
3560
3561 // À 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 if ($this->f->is_option_mode_service_consulte_enabled() === false
3564 && $this->f->is_type_dossier_platau($inst_di->getVal($inst_di->clePrimaire)) === true
3565 && $inst_di->getVal('etat_transmission_platau') !== 'jamais_transmissible') {
3566 $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 //
3580 return true;
3581 }
3582
3583 /**
3584 * 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 return false;
3596 }
3597 $this->valIdDemandeur=$this->postedIdDemandeur;
3598
3599 //
3600 return true;
3601 }
3602
3603
3604 /**
3605 * 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 $ldd = $this->f->get_inst__om_dbform(array(
3614 "obj" => "lien_dossier_dossier",
3615 "idx" => "]",
3616 ));
3617 // 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 return $ldd->ajouter($val);
3624 }
3625
3626
3627 /**
3628 * Gestion des liens entre les lots du DA et le nouveau dossier
3629 **/
3630 function lienLotDossierInstruction($id, $val) {
3631 $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
3640 $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 // 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 $lot->ajouter($valLot);
3662
3663 //Insertion des liens entre dossier et les lots
3664 $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 );
3680 if ($qres['code'] !== 'OK') {
3681 return false;
3682 }
3683
3684 foreach ($qres['result'] as $row) {
3685 $valLld["lien_lot_demandeur"] = "";
3686 $valLld["lot"]=$lot->valF['lot'];
3687 $valLld["demandeur"] = $row['demandeur'];
3688 $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
3689 if ($lld->ajouter($valLld) === false) {
3690 $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 if ($this->ajoutDonneesTechniquesLots($id, $val, $rowLot['lot'], $lot->valF['lot']) === false) {
3697 $this->addToMessage(
3698 __("Erreur lors de l'enregistrement de la demande.")." ".
3699 __("Contactez votre administrateur.")
3700 );
3701 $this->correct = false;
3702 $this->f->addToLog(
3703 __METHOD__."(): ERROR ajoutDonneesTechniquesLots",
3704 DEBUG_MODE
3705 );
3706 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 function ajoutDonneesTechniquesLots($id, $val, $lotInit, $lotDest) {
3727 // Requete permettant de recupérer les données techniques du lot passé
3728 // en paramètre ($lotInit)
3729 $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 // 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 if(isset($id_dt) && !empty($id_dt)) {
3752 $donnees_techniques = $this->f->get_inst__om_dbform(array(
3753 "obj" => "donnees_techniques",
3754 "idx" => $id_dt,
3755 ));
3756
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 if($donnees_techniques->ajouter($val) === false) {
3767 $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 function insertLinkDemandeDemandeur() {
3780
3781 foreach ($this->types_demandeur as $type) {
3782 // 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 if ($this->deleteLinkDemandeDemandeur($demandeur) == false) {
3789 //
3790 return false;
3791 }
3792 }
3793
3794 }
3795 // 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 if ($this->addLinkDemandeDemandeur($demandeur, $principal) == false) {
3803 //
3804 return false;
3805 }
3806 }
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 function addLinkDemandeDemandeur($id, $principal) {
3821 $lienAjout = $this->f->get_inst__om_dbform(array(
3822 "obj" => "lien_demande_demandeur",
3823 "idx" => "]",
3824 ));
3825 $lien = array('lien_demande_demandeur' => "",
3826 'petitionnaire_principal' => (($principal)?"t":"f"),
3827 'demande' => $this->valF['demande'],
3828 'demandeur' => $id);
3829 if ($lienAjout->ajouter($lien) === false) {
3830 $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 function deleteLinkDemandeDemandeur($id) {
3843 // 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 $res = $this->f->db->query($sql);
3849 // Logger
3850 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
3851 if ($this->f->isDatabaseError($res, true)){
3852 return false;
3853 }
3854
3855 //
3856 return true;
3857 }
3858
3859 /**
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 function isLinkDemandeDemandeurExist($idDemandeur) {
3867 $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 return false;
3888 }
3889
3890 return true;
3891 }
3892
3893 /**
3894 * Methode de recupération des valeurs postées
3895 **/
3896 function getPostedValues() {
3897 // Récupération des demandeurs dans POST
3898 foreach ($this->types_demandeur as $type) {
3899 if($this->f->get_submitted_post_value($type) !== null &&
3900 $this->f->get_submitted_post_value($type) != '') {
3901 $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
3902 }
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 $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 // Stockage du résultat dans un tableau
3937 foreach ($qres['result'] as $row) {
3938 $demandeur_type = $row['type_demandeur'];
3939 if ($row['petitionnaire_principal'] == 't'){
3940 $demandeur_type .= "_principal";
3941 }
3942 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
3943 }
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 echo OM_ROUTE_TAB;
3958 echo "&obj=recherche_dossier";
3959
3960 } else {
3961 if($this->getParameter("retour")=="form" && !($this->getParameter("validation")>0 && $this->getParameter("maj")==2 && $this->correct)) {
3962 echo OM_ROUTE_FORM;
3963 } else {
3964 echo OM_ROUTE_TAB;
3965 }
3966 echo "&obj=".$this->get_absolute_class_name();
3967 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 echo __("Retour");
3981 //
3982 echo "</a>\n";
3983
3984 }
3985
3986 /**
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
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 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 }
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 // Tableau des demandeurs selon le contexte
4037 $listeDemandeur = $this->valIdDemandeur;
4038 /**
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 if ($this->correct !== true &&
4045 $this->getParameter('validation') == 0 &&
4046 $this->getParameter("maj") != 0) {
4047 // Alors on récupère les demandeurs dans la table lien pour
4048 // affectation des résultats dans $this->valIdDemandeur
4049 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
4050 $listeDemandeur = $this->valIdDemandeur;
4051 }
4052
4053 // Récupération des valeurs postées
4054 if ($this->getParameter('validation') != 0) {
4055 $listeDemandeur = $this->postedIdDemandeur;
4056 }
4057
4058 // 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 // 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 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 }
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
4090 // 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 // Affichage de la synthèse du pétitionnaire principal
4094 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal", $linkable, $addable);
4095 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4096 echo "<div id=\"delegataire\">";
4097 // Affichage de la synthèse du délégataire
4098 $this->displaySyntheseDemandeur($listeDemandeur, "delegataire", $linkable, $addable);
4099 echo "</div>";
4100 // 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 $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire", $linkable, $addable);
4104 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 $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc", $linkable, $addable);
4109 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 $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste", $linkable, $addable);
4114 echo "</div>";
4115 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 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire", $linkable, $addable);
4121 echo "</div>";
4122
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 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal", $linkable, $addable);
4132 echo "</div>";
4133 echo "<div id=\"listeAutresBailleurs\">";
4134 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur", $linkable, $addable);
4135 echo "</div>";
4136 echo "</div>";
4137 echo "</div>";
4138
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 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal", $linkable, $addable);
4147 echo "</div>";
4148 echo "<div id=\"listeAutresContrevenants\">";
4149 // Affichage de la synthèse
4150 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant", $linkable, $addable);
4151 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 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal", $linkable, $addable);
4160 echo "</div>";
4161 echo "<div id=\"listeAutresPlaignants\">";
4162 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant", $linkable, $addable);
4163 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 $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal", $linkable, $addable);
4174 echo "</div>";
4175 echo "<div id=\"listeAutresRequerants\">";
4176 $this->displaySyntheseDemandeur($listeDemandeur, "requerant", $linkable, $addable);
4177 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 $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal", $linkable, $addable);
4185 echo "</div>";
4186 echo "<div id=\"listeAutresAvocats\">";
4187 $this->displaySyntheseDemandeur($listeDemandeur, "avocat", $linkable, $addable);
4188 echo "</div>";
4189 echo "</div>";
4190 echo "</div>";
4191
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 . __("Ajouter des demandeurs")."</legend>";
4197 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 }
4302
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 $linkable = false;
4318 // 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 }
4326 // Récupération du type de demandeur pour l'affichage
4327 switch ($type) {
4328 case 'petitionnaire_principal':
4329 $legend = __("Petitionnaire principal");
4330 break;
4331
4332 case 'delegataire':
4333 $legend = __("Autre correspondant");
4334 break;
4335
4336 case 'petitionnaire':
4337 $legend = __("Petitionnaire");
4338 break;
4339
4340 case 'contrevenant_principal':
4341 $legend = __("Contrevenant principal");
4342 break;
4343
4344 case 'contrevenant':
4345 $legend = __("Autre contrevenant");
4346 break;
4347
4348 case 'plaignant_principal':
4349 $legend = __("Plaignant principal");
4350 break;
4351
4352 case 'plaignant':
4353 $legend = __("Autre plaignant");
4354 break;
4355
4356 case 'requerant_principal':
4357 $legend = __("Requérant principal");
4358 break;
4359
4360 case 'requerant':
4361 $legend = __("Autre requérant");
4362 break;
4363
4364 case 'avocat_principal':
4365 $legend = __("Avocat principal");
4366 break;
4367
4368 case 'avocat':
4369 $legend = __("Autre avocat");
4370 break;
4371
4372 case 'bailleur_principal':
4373 $legend = __("Bailleur principal");
4374 break;
4375
4376 case 'bailleur':
4377 $legend = __("Autre bailleur");
4378 break;
4379
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 }
4392 foreach ($listeDemandeur[$type] as $demandeur_id) {
4393 $obj = str_replace('_principal', '', $type);
4394 $demandeur = $this->f->get_inst__om_dbform(array(
4395 "obj" => $obj,
4396 "idx" => $demandeur_id,
4397 ));
4398 $demandeur -> afficherSynthese($type, $linkable);
4399 $demandeur -> __destruct();
4400 }
4401 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 $legend = __("Demandeur principal");
4438 break;
4439
4440 case 'delegataire':
4441 $legend = __("Autre correspondant");
4442 break;
4443
4444 case 'petitionnaire':
4445 $legend = __("Demandeur");
4446 break;
4447
4448 case 'contrevenant_principal':
4449 $legend = __("Contrevenant principal");
4450 break;
4451
4452 case 'contrevenant':
4453 $legend = __("Autre contrevenant");
4454 break;
4455
4456 case 'plaignant_principal':
4457 $legend = __("Plaignant principal");
4458 break;
4459
4460 case 'plaignant':
4461 $legend = __("Autre plaignant");
4462 break;
4463
4464 case 'requerant_principal':
4465 $legend = __("Requérant principal");
4466 break;
4467
4468 case 'requerant':
4469 $legend = __("Autre requérant");
4470 break;
4471
4472 case 'avocat_principal':
4473 $legend = __("Avocat principal");
4474 break;
4475
4476 case 'avocat':
4477 $legend = __("Autre avocat");
4478 break;
4479
4480 case 'bailleur_principal':
4481 $legend = __("Bailleur principal");
4482 break;
4483
4484 case 'bailleur':
4485 $legend = __("Autre bailleur");
4486 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 // Si en édition de formulaire
4501 // 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 // Bouton d'ajout du avocat
4506 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
4507 echo "<button type=\"button\" id=\"add_".$type."\"
4508 class=\".ui-button button-success\"><i class=\"ri-user-add-line\"></i> ".
4509 $legend.
4510 "</button>";
4511 }
4512 }
4513
4514 // {{{
4515
4516 // getter
4517 function getValIdDemandeur() {
4518 return $this->valIdDemandeur;
4519 }
4520 // setter
4521 function setValIdDemandeur($valIdDemandeur) {
4522 $this->valIdDemandeur = $valIdDemandeur;
4523 }
4524
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 //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 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")", VERBOSE_MODE);
4542 if ($this->f->isDatabaseError($res, true)) {
4543 return false;
4544 }
4545
4546 //
4547 return true;
4548 }
4549
4550
4551 /**
4552 * 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 }
4574
4575 /**
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 $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 return false;
4644 }
4645
4646 //Un des dosssiers d'instruction a été accordé, on récupère ses données
4647 if ($qres['row_count'] !== 0 ){
4648
4649 $row = array_shift($qres['result']);
4650 $instruction = $this->f->get_inst__om_dbform(array(
4651 "obj" => "instruction",
4652 "idx" => "]",
4653 ));
4654
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 $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 return false;
4727 }
4728
4729 //On est pas dans le cas d'un dépôt d'un P0
4730 if ($qres['row_count'] != 0 ){
4731 $row = array_shift($qres['result']);
4732 $instruction = $this->f->get_inst__om_dbform(array(
4733 "obj" => "instruction",
4734 "idx" => "]",
4735 ));
4736 $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 $bouton = __("Ajouter");
4757 break;
4758 case 1 :
4759 $bouton = __("Modifier");
4760 break;
4761 case 2 :
4762 $bouton = __("Supprimer");
4763 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 $bouton = __("Valider");
4772 }
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 if ($this->inst_taxe_amenagement === null) {
4797 //
4798 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
4799
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 //
4811 if ($taxe_amenagement === null) {
4812 //
4813 return null;
4814 }
4815
4816 //
4817 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
4818 "obj" => "taxe_amenagement",
4819 "idx" => $taxe_amenagement,
4820 ));
4821 }
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 $taxe_amenagement = null;
4835
4836 // Si la collectivité n'est pas renseigné
4837 if ($om_collectivite !== '' && $om_collectivite !== null) {
4838
4839 // SQL
4840 $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 }
4857
4858 return $taxe_amenagement;
4859 }
4860
4861
4862 /**
4863 * TODO: replace with '$this->f->findObjectById' ?
4864 *
4865 * 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 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
4882 "obj" => "cerfa",
4883 "idx" => $cerfa,
4884 ));
4885 }
4886 }
4887
4888 //
4889 return $this->inst_cerfa;
4890 }
4891
4892
4893 /**
4894 * TODO: replace with '$this->f->findObjectById' ?
4895 *
4896 * 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 function get_inst_dossier_autorisation($dossier_autorisation = null) {
4903 //
4904 return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
4905 }
4906
4907 /**
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 $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 return false;
4945 }
4946 $code_type_da = $qres["result"];
4947
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 $departement = strtoupper($collectivite_parameters['departement']);
4966 $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 $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 );
4995 if ($qres["code"] === "OK"
4996 && $qres["result"] !== ""
4997 && $qres["result"] !== null) {
4998 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 $code_departement = strtoupper($commune->getVal('dep'));
5015
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 $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 $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 }
5047
5048

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26