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

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

Parent Directory Parent Directory | Revision Log Revision Log


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