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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26