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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26