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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26