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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26