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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10968 - (show annotations)
Wed Dec 15 00:06:28 2021 UTC (3 years, 1 month ago) by softime
File size: 183932 byte(s)
* Fusion de la branche d'intégration 5.4.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 // On retraite le texte saisie pour jointure en BDD.
967 // Traitement identique à celui effectué en JavaScript
968 // dans la fonction lookingForAutorisationContestee().
969 if ($this->valF['autorisation_contestee'] !== NULL) {
970 $val = trim($this->valF['autorisation_contestee']);
971 $this->valF['autorisation_contestee'] = preg_replace(
972 '/\s+/',
973 '',
974 $val
975 );
976 }
977
978 //
979 $this->valF['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
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
1671
1672 /**
1673 * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1674 * par l'utilisateur.
1675 *
1676 * @return integer identifiant du cerfa
1677 */
1678 function getIdCerfa() {
1679 if($this->cerfa != null) {
1680 return $this->cerfa;
1681 }
1682 // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1683 $sql = "SELECT
1684 dossier_autorisation_type_detaille.cerfa
1685 FROM
1686 ".DB_PREFIXE."dossier_autorisation_type_detaille
1687 JOIN
1688 ".DB_PREFIXE."cerfa
1689 ON
1690 dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1691 WHERE
1692 now()<=om_validite_fin
1693 AND now()>=om_validite_debut
1694 AND dossier_autorisation_type_detaille=".
1695 $this->valF['dossier_autorisation_type_detaille'];
1696 $this->cerfa = $this->f->db->getOne($sql);
1697 $this->f->addToLog(
1698 __METHOD__."(): db->getone(\"".$sql."\");",
1699 VERBOSE_MODE
1700 );
1701 $this->f->isDatabaseError($this->cerfa);
1702 return $this->cerfa;
1703 }
1704
1705
1706 /**
1707 * Méthode permettant d'ajouter un dossier d'autorisation.
1708 *
1709 * @param integer $id identifiant de la demande
1710 * @param array $val tableau de valeurs postées via le formulaire
1711 *
1712 * @return boolean false si erreur
1713 */
1714 function ajoutDossierAutorisation($id, $val) {
1715 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1716 "obj" => "dossier_autorisation",
1717 "idx" => "]",
1718 ));
1719 $id_etat_initial_da =
1720 $this->f->getParameter('id_etat_initial_dossier_autorisation');
1721
1722 // Vérification de l'existance d'un état initial des DA dans la table
1723 // om_parametre afin d'éviter d'eventuelle erreur de base de données
1724 if(isset($id_etat_initial_da)) {
1725 $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1726 WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1727 $count = $this->f->db->getOne($sql);
1728 $this->f->addToLog(
1729 __METHOD__."(): db->getOne(\"".$sql."\")",
1730 VERBOSE_MODE
1731 );
1732 if ($this->f->isDatabaseError($count, true)){
1733 $this->f->addToLog(
1734 __METHOD__."(): ERROR db->getOne(\"".$sql."\")",
1735 DEBUG_MODE
1736 );
1737
1738 return false;
1739 }
1740 if($count != 1) {
1741 $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1742
1743 return false;
1744 }
1745
1746 // La méthode ajouter prend en paramètre un tableau associatif
1747 // contenant toutes les champs de la classe instanciée,
1748 // d'où l'initialisation du tableau en bouclant sur la liste des
1749 // champs du DA
1750 foreach($dossier_autorisation->champs as $value) {
1751 $valAuto[$value] = null;
1752 }
1753
1754
1755 // si l'option 'commune' n'est pas activée
1756 $insee = null;
1757 if ($this->f->is_option_dossier_commune_enabled($this->valF['om_collectivite']) === false) {
1758
1759 // On récupère les paramètres de la collectivité concernée
1760 // par la demande.
1761 $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1762
1763 // Le paramètre 'insee' est obligatoire si il n'est pas présent
1764 // dans le tableau des paramètres alors on stoppe le traitement.
1765 if (!isset($collectivite_parameters['insee'])) {
1766 $this->f->addToLog(
1767 __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1768 DEBUG_MODE
1769 );
1770 return false;
1771 }
1772
1773 // enregistre le code insee
1774 $insee = $collectivite_parameters['insee'];
1775 }
1776
1777 // si l'option 'commune' est activée
1778 else {
1779
1780 // si la commune est définie
1781 if (! empty($this->valF['commune'])) {
1782
1783 // récupère l'objet 'commune'
1784 $commune = $this->f->findObjectById("commune", $this->valF['commune']);
1785
1786 // s'il est trouvé
1787 if (! empty($commune)) {
1788
1789 // enregistre le code insee
1790 $insee = $commune->getVal('com');
1791 }
1792
1793 // commune non-trouvée
1794 else {
1795 $this->f->addToLog(
1796 __METHOD__."(): ERROR commune '".$this->valF['commune']."' non-trouvée.",
1797 DEBUG_MODE
1798 );
1799 return false;
1800 }
1801 }
1802
1803 // commune non-définie
1804 else {
1805 $this->f->addToLog(
1806 __METHOD__."(): ERROR champ 'commune' obligatoire.",
1807 DEBUG_MODE
1808 );
1809 return false;
1810 }
1811
1812 // enregistre la commune
1813 $valAuto['commune'] = $this->valF['commune'];
1814 }
1815
1816 // Définition des valeurs à insérer
1817 $valAuto['om_collectivite'] = $this->valF['om_collectivite'];
1818 $valAuto['dossier_autorisation']="";
1819 $valAuto['exercice']=null;
1820 $valAuto['insee'] = $insee;
1821 $valAuto['arrondissement']=
1822 $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1823 $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1824 $valAuto['erp_numero_batiment']=null;
1825 $valAuto['erp_ouvert']=null;
1826 $valAuto['erp_arrete_decision']=null;
1827 $valAuto['dossier_autorisation_type_detaille']=
1828 $this->valF['dossier_autorisation_type_detaille'];
1829 if ($this->f->is_option_date_depot_mairie_enabled() === true && $val['date_depot_mairie'] != null) {
1830 $valAuto['depot_initial']= $val['date_depot_mairie'];
1831 } else {
1832 $valAuto['depot_initial']=
1833 $this->dateDBToForm($this->valF['date_demande']);
1834 }
1835 $valAuto['terrain_references_cadastrales']=
1836 $this->valF['terrain_references_cadastrales'];
1837 $valAuto['terrain_adresse_voie_numero']=
1838 $this->valF['terrain_adresse_voie_numero'];
1839 $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1840 $valAuto['terrain_adresse_lieu_dit']=
1841 $this->valF['terrain_adresse_lieu_dit'];
1842 $valAuto['terrain_adresse_localite']=
1843 $this->valF['terrain_adresse_localite'];
1844 $valAuto['terrain_adresse_code_postal']=
1845 $this->valF['terrain_adresse_code_postal'];
1846 $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1847 $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1848 $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1849 $valAuto['numero_version']=-1;
1850 // Pour vérifier dans le dossier d'autorisation si déposé électroniquement
1851 $valAuto['depot_electronique']=$this->valF['depot_electronique'];
1852
1853 // saisie manuelle du numéro de dossier et division instructeur
1854 if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1855 isset($val['num_doss_sequence']) && !empty($val['num_doss_sequence'])) {
1856
1857 $valAuto['numero_dossier_seq'] = $val['num_doss_sequence'];
1858
1859 if (isset($val['num_doss_division'])) {
1860 $valAuto['division_instructeur'] = $val['num_doss_division'];
1861 }
1862 }
1863
1864 $this->da_already_exists = false;
1865 // saisie manuelle du numéro de dossier complet
1866 if (isset($val['num_doss_manuel']) && $val['num_doss_manuel'] == 'Oui' &&
1867 isset($val['num_doss_complet']) && !empty($val['num_doss_complet'])) {
1868 //
1869 $valAuto['numero_dossier_complet'] = $val['num_doss_complet'];
1870 $dossier_autorisation_id = $val['num_doss_complet'];
1871 $num_urba = $this->f->numerotation_urbanisme($val['num_doss_complet']);
1872 if (isset($num_urba['da'][0]) === true) {
1873 $dossier_autorisation_id = $num_urba['da'][0];
1874 }
1875 if ($this->f->findObjectById('dossier_autorisation', $dossier_autorisation_id) !== null) {
1876 $this->da_already_exists = true;
1877 }
1878 }
1879
1880 $valAuto['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
1881
1882 if ($this->da_already_exists === false) {
1883 // Ajout du dossier dans la base
1884 if($dossier_autorisation->ajouter($valAuto) === false) {
1885 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1886 if (!empty($dossier_autorisation->msg)) {
1887 $this->f->addToLog(__METHOD__."() : ERROR - ".$dossier_autorisation->msg, DEBUG_MODE);
1888 $this->addToMessage($dossier_autorisation->msg.'<br/>');
1889 }
1890 return false;
1891 }
1892 $dossier_autorisation_id = $dossier_autorisation->valF['dossier_autorisation'];
1893 $this->f->addToLog(__METHOD__."() : DA ajouté : ".$dossier_autorisation_id, VERBOSE_MODE);
1894 }
1895
1896 // Liaison du dossier ajouter à la demande
1897 $this->valF['dossier_autorisation'] = $dossier_autorisation_id;
1898
1899 return true;
1900 }
1901
1902 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1903
1904 return false;
1905 }
1906
1907 /**
1908 * Méthode permettant d'ajouter un dossier d'instruction.
1909 *
1910 * @param integer $id identifiant de la demande
1911 * @param array $val tableau de valeurs postées via
1912 * le formulaire
1913 * @param integer $dossier_instruction_type identifiant du DI type
1914 *
1915 * @return boolean false si erreur
1916 */
1917 function ajoutDossierInstruction($id, $val, $dossier_instruction_type) {
1918 $dossier = $this->f->get_inst__om_dbform(array(
1919 "obj" => "dossier",
1920 "idx" => "]",
1921 ));
1922 foreach($dossier->champs as $value) {
1923 $valInstr[$value] = null;
1924 }
1925 // TODO: remove because unused
1926 $datd = $this->f->get_inst__om_dbform(array(
1927 "obj" => "dossier_autorisation_type_detaille",
1928 "idx" => $this->valF['dossier_autorisation_type_detaille'],
1929 ));
1930
1931 /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1932 * versionning
1933 */
1934 $dossier->setDossierInstructionType($dossier_instruction_type);
1935
1936 // Définition des valeurs à entrée dans la table
1937 $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1938 $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1939 $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1940 if ($this->f->is_option_date_depot_mairie_enabled() === true){
1941 $valInstr['date_depot_mairie'] = $val['date_depot_mairie'];
1942 }
1943 $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1944 $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1945 $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1946 $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1947 $valInstr['annee']=$annee->format("y");
1948 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
1949 $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
1950 $valInstr['terrain_references_cadastrales']=
1951 $this->valF['terrain_references_cadastrales'];
1952 $valInstr['terrain_adresse_voie_numero']=
1953 $this->valF['terrain_adresse_voie_numero'];
1954 $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1955 $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1956 $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1957 $valInstr['terrain_adresse_code_postal']=
1958 $this->valF['terrain_adresse_code_postal'];
1959 $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1960 $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1961 $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
1962 $valInstr['description']="";
1963 $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
1964 if ($this->valF["autorisation_contestee"] != "") {
1965 $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
1966 }
1967 $valInstr['demande_type'] = $this->valF['demande_type'];
1968 $valInstr['etat_transmission_platau'] = $val['etat_transmission_platau'];
1969
1970 /*
1971 * Gestion de la qualification
1972 * */
1973 // Initialise le champ à false
1974 $valInstr['a_qualifier'] = false;
1975
1976 // Récupère l'information depuis le type de la demande
1977 $qualification = $this->get_qualification($val['demande_type']);
1978
1979 // Si le dossier doit être à qualifier
1980 if ($qualification === 't') {
1981 // Met le champ à true
1982 $valInstr['a_qualifier'] = true;
1983 }
1984
1985 /*
1986 * Gestion de la simulation des taxes
1987 */
1988 // Récupère l'instance du cerfa lié au type détaillé du DA
1989 $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
1990
1991 // Récupère le paramétrage des taxes
1992 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
1993 // Si un paramétrage des taxes est récupéré pour la collectivité
1994 if ($inst_taxe_amenagement !== null) {
1995 // Si la taxe d'aménagement à un seul secteur
1996 if ($inst_taxe_amenagement->has_one_secteur() == true) {
1997 // Sélectionne l'unique secteur automatiquement
1998 $valInstr['tax_secteur'] = 1;
1999 }
2000 }
2001
2002 // saisie de la commune
2003 if (array_key_exists('commune', $this->valF)) {
2004 $valInstr['commune'] = $this->valF['commune'];
2005 }
2006
2007 // saisie de l'affectation automatique
2008 if (isset($this->valF['affectation_automatique'])) {
2009 $valInstr['affectation_automatique'] = $this->valF['affectation_automatique'];
2010 }
2011
2012 // saisie manuelle du numéro de dossier complet
2013 if (isset($val['num_doss_manuel']) === true && $val['num_doss_manuel'] == 'Oui' &&
2014 isset($val['num_doss_complet']) === true && empty($val['num_doss_complet']) === false) {
2015 //
2016 $valInstr['numero_dossier_complet'] = $val['num_doss_complet'];
2017 }
2018
2019 $valInstr['source_depot'] = is_null($val['source_depot']) === true || $val['source_depot'] === '' ? 'app' : $val['source_depot'];
2020
2021 //
2022 $this->f->addToLog(__METHOD__."() : ajout du dossier", EXTRA_VERBOSE_MODE);
2023 if($dossier->ajouter($valInstr) === false) {
2024 $this->f->addToLog($dossier->msg, DEBUG_MODE);
2025 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
2026 // Affiche l'erreur empêchant a création du dossier d'instruction
2027 $this->addToMessage($dossier->msg);
2028 return false;
2029 }
2030 else {
2031 $this->f->addToLog(__METHOD__."() : dossier ajouté", VERBOSE_MODE);
2032 }
2033
2034
2035 // Si le dossier n'est pas un initial, que le type de dossier d'autorisation détaillé
2036 // est dans la liste du paramètre erp__dossier__nature__at
2037 // ou (que le type de dossier d'autorisation détaillé est dans la liste du paramètre erp__dossier__nature_pc
2038 // et que le type de dossier d'instruction est dans la liste du paramètre erp__dossier__type_di__pc)
2039 // alors la valeur de la case ERP du dossier initial est appliquée au nouveau dossier
2040 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2041 if (($dossier->get_dossier_instruction_version($dossier->valF['dossier']) != ''
2042 || $dossier->get_dossier_instruction_version($dossier->valF['dossier']) != '0')) {
2043
2044 if ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__at')
2045 || ($this->f->getDATCode($dossier->valF['dossier']) == $this->f->getParameter('erp__dossier__nature__pc')
2046 && in_array($dossier->valF['dossier_instruction_type'], explode(";", $this->f->getParameter('erp__dossier__type_di__pc'))) === true)) {
2047
2048 // On récupère la valeur de la case erp du dossier d'instruction initial
2049 $sql = sprintf('
2050 SELECT erp FROM %1$sdossier
2051 LEFT JOIN %1$sdossier_instruction_type
2052 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2053 WHERE dossier.dossier_autorisation = (
2054 SELECT dossier_autorisation.dossier_autorisation
2055 FROM %1$sdossier_autorisation
2056 LEFT JOIN %1$sdossier
2057 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2058 WHERE dossier = \'%2$s\')
2059 AND dossier_instruction_type.code = \'P\'
2060 ',
2061 DB_PREFIXE,
2062 $dossier->valF['dossier']
2063 );
2064 $res = $this->f->get_one_result_from_db_query($sql, true);
2065 if ($res['code'] === 'KO') {
2066 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de récupérer la valeur de la case ERP du DI initial", DEBUG_MODE);
2067 return false;
2068 }
2069
2070 // On met à jour la case erp en fonction du DI initial
2071 $valF = array();
2072 $valF['erp'] = isset($res['result']) === true && $res['result'] === 't' ? true : false;
2073
2074 $res = $this->f->db->autoExecute(
2075 DB_PREFIXE."dossier",
2076 $valF,
2077 DB_AUTOQUERY_UPDATE,
2078 $dossier->clePrimaire."='".$dossier->valF['dossier']."'"
2079 );
2080
2081 if ($this->f->isDatabaseError($res, true)) {
2082 // Appel de la methode de recuperation des erreurs
2083 $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
2084 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'appliquer la case ERP sur le dossier d'instruction.", DEBUG_MODE);
2085 $this->correct = false;
2086 return false;
2087 }
2088 }
2089 }
2090 }
2091
2092 //Affichage de message à l'utilisateur concernant un problème lors de
2093 //l'affectation de l'instructeur au dossier d'instruction
2094 if ($dossier->valF['dossier_autorisation'] === '' &&
2095 $dossier->valF['instructeur'] === null){
2096 $this->addToMessage(
2097 _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2098 );
2099 }
2100 elseif ( $dossier->valF['instructeur'] === null ){
2101 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
2102 $this->addToMessage("<br/> ".
2103 _("Pensez a assigner un instructeur a ce dossier.")
2104 );
2105 } else {
2106 $this->addToMessage(
2107 _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
2108 );
2109 }
2110 }
2111
2112 // Liaison du dossier ajouter à la demande
2113 $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
2114
2115 //
2116 return true;
2117 }
2118
2119 /**
2120 * Méthode permettant d'ajouter les données techniques d'un DA.
2121 *
2122 * @param integer $id identifiant de la demande
2123 * @param array $val tableau de valeurs postées via le formulaire
2124 *
2125 * @return boolean false si erreur
2126 */
2127 function ajoutDonneesTechniquesDA($id, $val) {
2128 $this->DTDA = $this->f->get_inst__om_dbform(array(
2129 "obj" => "donnees_techniques",
2130 "idx" => "]",
2131 ));
2132
2133 // Champs tous à NULL car seul le champ concernant le dossier
2134 // d'autorisation sera rempli
2135 foreach($this->DTDA->champs as $value) {
2136 $valF[$value] = null;
2137 }
2138 // Ajout du numéro de dossier d'instruction
2139 $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
2140 // Identifiant du cerfa
2141 $valF['cerfa'] = $this->getIdCerfa();
2142 //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
2143 if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
2144 // Ajout des données techniques
2145 if($this->DTDA->ajouter($valF) === false) {
2146 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
2147 return false;
2148 }
2149 $this->f->addToLog(__METHOD__."() : DTDA ajoutées", VERBOSE_MODE);
2150 }
2151 else {
2152 //On indique que le dossier d'autorisation n'a pas de données techniques
2153 $this->DTDA = null;
2154 //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
2155 $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
2156 return -1;
2157 }
2158
2159 //
2160 return true;
2161 }
2162
2163 /**
2164 * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
2165 **/
2166 function ajoutLiensDossierAutorisation($id, $val) {
2167 // Vérifie que le dossier d'instruction possède déjà un petitionnaire principal
2168 $query = sprintf('
2169 SELECT COUNT(lien_dossier_autorisation_demandeur)
2170 FROM %1$slien_dossier_autorisation_demandeur
2171 WHERE dossier_autorisation = \'%2$s\'
2172 AND petitionnaire_principal IS TRUE
2173 ',
2174 DB_PREFIXE,
2175 $this->valF['dossier_autorisation']
2176 );
2177 $res = $this->f->get_one_result_from_db_query($query, true);
2178 if ($res['code'] === 'KO') {
2179 return false;
2180 }
2181 $already_principal = false;
2182 if ($res['result'] > 0) {
2183 $already_principal = true;
2184 }
2185
2186 // Création des liens entre le dossier autorisation et les demandeurs
2187 $ldad = $this->f->get_inst__om_dbform(array(
2188 "obj" => "lien_dossier_autorisation_demandeur",
2189 "idx" => "]",
2190 ));
2191 // Recupération des demandeurs liés à la demande
2192 $sql = str_replace(
2193 "<demande>",
2194 $this->valF['demande'],
2195 $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2196 );
2197 $sql .= " AND lien_demande_demandeur.demandeur NOT IN (
2198 SELECT lien_dossier_autorisation_demandeur.demandeur
2199 FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
2200 WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
2201 '".$this->valF['dossier_autorisation']."')";
2202 $res = $this->f->db->query($sql);
2203 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2204 if ($this->f->isDatabaseError($res, true)) {
2205 return false;
2206 }
2207 while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2208 $can_add = true;
2209 $row['lien_dossier_autorisation_demandeur'] = NULL;
2210 $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
2211 // La liaison n'est pas ajoutée si celle-ci concerne un pétitionnaire principal
2212 // alors que le DA possède est déjà lié à un petitionnaire principal
2213 if ($row['petitionnaire_principal'] === 't'
2214 && $already_principal === true) {
2215 //
2216 $can_add = false;
2217 }
2218 if ($can_add === true) {
2219 $add = $ldad->ajouter($row);
2220 if ($add === false) {
2221 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
2222 return false;
2223 }
2224 }
2225 }
2226 $this->f->addToLog(__METHOD__."() : liens demandeurs DA ajoutés", VERBOSE_MODE);
2227
2228 //
2229 return true;
2230 }
2231
2232 /**
2233 * Ajout des liens demandeurs / dossier d'autorisation
2234 **/
2235 function ajoutLiensDossierInstruction($id, $val) {
2236 // Création des liens entre le dossier instruction et les demandeurs
2237 $ldd = $this->f->get_inst__om_dbform(array(
2238 "obj" => "lien_dossier_demandeur",
2239 "idx" => "]",
2240 ));
2241 // Recupération des demandeurs liés à la demande
2242 $sql = str_replace(
2243 "<demande>",
2244 $this->valF['demande'],
2245 $this->get_var_sql_forminc__sql("lien_demande_demandeur")
2246 );
2247 $res = $this->f->db->query($sql);
2248 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
2249 if ($this->f->isDatabaseError($res, true)) {
2250 return false;
2251 }
2252 while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
2253 $row['lien_dossier_demandeur'] = NULL;
2254 $row['dossier'] = $this->valF['dossier_instruction'];
2255 if ($ldd->ajouter($row) === false) {
2256 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
2257 return false;
2258 }
2259 }
2260 $this->f->addToLog(__METHOD__."() : liens demandeurs DI ajoutés", VERBOSE_MODE);
2261
2262 //
2263 return true;
2264 }
2265
2266 /*
2267 * Récupère l'identifiant d'un arrondissement à partir d'un code postal
2268 */
2269 function getArrondissement($terrain_adresse_code_postal){
2270
2271 $arrondissement = NULL;
2272
2273 $sql = "SELECT
2274 arrondissement
2275 FROM
2276 ".DB_PREFIXE."arrondissement
2277 WHERE
2278 code_postal = '$terrain_adresse_code_postal' ";
2279 $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
2280
2281 $res = $this->f->db->query($sql);
2282 $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2283 $this->f->isDatabaseError($res);
2284
2285 if( $res->numrows() > 0 ) {
2286
2287 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2288 $arrondissement = $row['arrondissement'];
2289 }
2290
2291 return $arrondissement;
2292 }
2293
2294 /*
2295 * Récupère l'évènement lié à un type de demande
2296 */
2297 function getEvenement($demande_type){
2298
2299 $evenement = null;
2300
2301 $sql =
2302 "SELECT
2303 evenement
2304 FROM
2305 ".DB_PREFIXE."demande_type
2306 WHERE
2307 demande_type = $demande_type";
2308
2309 $res = $this->f->db->query($sql);
2310 $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
2311 $this->f->isDatabaseError($res);
2312
2313 if ( $res->numrows() > 0 ){
2314
2315 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2316 $evenement = $row['evenement'];
2317 }
2318
2319 return $evenement;
2320 }
2321
2322
2323
2324 /**
2325 * Retourne le libellé du dossier d'autorisation
2326 * @param string $dossier_autorisation Identifiant du dossier d'autorisation
2327 * @return string Libellé dossier d'autorisation
2328 */
2329 function get_dossier_autorisation_libelle($dossier_autorisation) {
2330
2331 $dossier_autorisation_libelle = "";
2332
2333 // Requête SQL
2334 $sql = "SELECT
2335 dossier_autorisation_libelle
2336 FROM
2337 ".DB_PREFIXE."dossier_autorisation
2338 WHERE
2339 dossier_autorisation = '$dossier_autorisation'";
2340
2341 $dossier_autorisation_libelle = $this->f->db->getOne($sql);
2342 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2343 $this->f->isDatabaseError($dossier_autorisation_libelle);
2344
2345 // Retourne le résultat
2346 return $dossier_autorisation_libelle;
2347 }
2348
2349 /**
2350 * Retourne le libellé du dossier d'autorisation.
2351 * @param string $dossier Identifiant du dossier d'autorisation
2352 *
2353 * @return string Libellé dossier d'autorisation
2354 */
2355 function get_dossier_libelle($dossier) {
2356
2357 $dossier_libelle = "";
2358
2359 // Requête SQL
2360 $sql = "SELECT
2361 dossier_libelle
2362 FROM
2363 ".DB_PREFIXE."dossier
2364 WHERE
2365 dossier = '$dossier'";
2366
2367 $dossier_libelle = $this->f->db->getOne($sql);
2368 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
2369 $this->f->isDatabaseError($dossier_libelle);
2370
2371 // Retourne le résultat
2372 return $dossier_libelle;
2373 }
2374
2375 /**
2376 * TRIGGER - triggerajouter.
2377 *
2378 * - Ajout des dossiers
2379 *
2380 * @return boolean
2381 */
2382 function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2383 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2384 //
2385 // Le mode MC nécessite des paramètres spécifiques
2386 if ($this->f->is_option_om_collectivite_entity_enabled($this->valF['om_collectivite']) === true) {
2387 $parameters = $this->f->getCollectivite(intval($this->valF['om_collectivite']));
2388 if ($parameters['code_entite'] === null) {
2389 $this->addToMessage(sprintf(
2390 __("Veuillez renseigner le paramètre %s"),
2391 sprintf('<span class="bold">%s</span>', 'code_entite')
2392 ));
2393 $this->correct = false;
2394 return false;
2395 }
2396 }
2397 //
2398 if($this->valF["demande_type"] != null) {
2399 $res = $this->f->db->query(
2400 str_replace(
2401 '<idx>',
2402 $this->valF['demande_type'],
2403 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2404 )
2405 );
2406 $this->f->addToLog(
2407 __METHOD__."(): db->query(\"".
2408 str_replace(
2409 '<idx>',
2410 $this->valF['demande_type'],
2411 $this->get_var_sql_forminc__sql("demande_type_details_by_id")
2412 )."\")",
2413 VERBOSE_MODE
2414 );
2415 if ($this->f->isDatabaseError($res, true)) {
2416 return false;
2417 }
2418 // Attribut permettant de définir si un dossier a été créé
2419 $this->ajoutDI = false;
2420 $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
2421
2422 // Par défaut on considère que le dossier d'instruction ne doit pas
2423 // être transmissible à Plat'AU
2424 $etat_transmission_platau = 'jamais_transmissible';
2425
2426 // Création du dossier_autorisation
2427 if($this->valF['dossier_autorisation'] == "") {
2428 //
2429 if($this->ajoutDossierAutorisation($id, $val) === false) {
2430 if(empty($this->msg)) {
2431 $this -> addToMessage(
2432 _("Erreur lors de l'enregistrement de la demande.")." ".
2433 _("Contactez votre administrateur.")
2434 );
2435 }
2436 $this->correct = false;
2437 return false;
2438 }
2439
2440 // Seulement dans le cas d'un dossier d'instruction initial, dont le type serait
2441 // prise en charge par Plat'AU, alors il serait transmissible
2442 if ($this->f->is_type_dossier_platau($this->valF['dossier_autorisation']) === true) {
2443 $etat_transmission_platau = 'non_transmissible';
2444 if (isset($val['etat_transmission_platau']) === true) {
2445 $etat_transmission_platau = $val['etat_transmission_platau'];
2446 }
2447 }
2448
2449 if ($this->da_already_exists === false) {
2450 //
2451 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2452 if ($inst_da->is_dossier_autorisation_visible()) {
2453 $this -> addToMessage(
2454 _("Creation du dossier d'autorisation no").
2455 '<span id="new_da">'.
2456 $this->get_dossier_autorisation_libelle(
2457 $this->valF['dossier_autorisation']
2458 ).'</span>'
2459 );
2460 }
2461 // Ajout des données techniques au dossier d'autorisation
2462 if($this->ajoutDonneesTechniquesDA($id, $val) === false) {
2463 $this -> addToMessage(
2464 _("Erreur lors de l'enregistrement de la demande.")." ".
2465 _("Contactez votre administrateur.")
2466 );
2467 $this->correct = false;
2468 return false;
2469 }
2470 }
2471 } else {
2472 $sqlIdDTDA = "SELECT donnees_techniques
2473 FROM ".DB_PREFIXE."donnees_techniques
2474 WHERE dossier_autorisation='".
2475 $this->valF['dossier_autorisation']."'";
2476 $idDTDA = $this->f->db->getOne($sqlIdDTDA);
2477 $this->addToLog(
2478 __METHOD__."(): db->getOne(\"".$sqlIdDTDA."\")",
2479 VERBOSE_MODE
2480 );
2481 if ($this->f->isDatabaseError($idDTDA, true)) {
2482 return false;
2483 }
2484
2485 $this->DTDA = null;
2486 if ($idDTDA!=="" && is_numeric($idDTDA)){
2487 $this->DTDA = $this->f->get_inst__om_dbform(array(
2488 "obj" => "donnees_techniques",
2489 "idx" => $idDTDA,
2490 ));
2491 $this->DTDA->setValFFromVal();
2492 }
2493 }
2494
2495 // Enregistrement du numéro dossier existant
2496 // (il sera écrasé si un DI est créé)
2497 if ($this->getParameter("idx_dossier") != "") {
2498 $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
2499 }
2500
2501 // Affecte la valeur de l'état de transmission avant la création du
2502 // dossier d'instruction
2503 $val['etat_transmission_platau'] = $etat_transmission_platau;
2504
2505 // Création du dossier d'instruction
2506 if($dossier_type['dossier_instruction_type'] != null) {
2507 if($this->ajoutDossierInstruction($id, $val, $dossier_type['dossier_instruction_type']) === false ) {
2508 $this->addToMessage(
2509 _("Erreur lors de l'enregistrement de la demande.")." ".
2510 _("Contactez votre administrateur.")
2511 );
2512 $this->correct = false;
2513 return false;
2514 }
2515 // Libellé du dossier
2516 $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
2517 // Message de validation
2518 $this->addToMessage(
2519 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
2520 );
2521
2522 // Attribut permettant de définir si un dossier a été créé.
2523 $this->ajoutDI = true;
2524 }
2525
2526 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
2527 $code_datd = $inst_datd->getVal('code');
2528
2529 $obj = "dossier_instruction";
2530 if ($code_datd === 'REC' OR $code_datd === 'REG') {
2531 $obj = "dossier_contentieux_tous_recours";
2532 }
2533 if ($code_datd === 'IN') {
2534 $obj = "dossier_contentieux_toutes_infractions";
2535 }
2536
2537 // Template du lien vers le DI
2538 $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>";
2539
2540 // Lien vers le DI
2541 $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
2542
2543 // Message affiché à l'utilisateur
2544 $this->addToMessage($link_di."<br/>");
2545
2546 /*Ajout de l'arrondissement à partir du code postal*/
2547 if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
2548
2549 $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
2550 }
2551 }
2552
2553 //
2554 return true;
2555 }
2556
2557 /**
2558 * TRIGGER - triggerajouterapres.
2559 *
2560 * - Ajout des délégataires et pétitionnaires
2561 * - ...
2562 * - Option de numérisation
2563 * - Interface avec le référentiel ERP [109]
2564 * - Interface avec le référentiel ERP [112]
2565 * - Interface avec le référentiel ERP [110]
2566 * - Interface avec le référentiel ERP [107]
2567 *
2568 * @return boolean
2569 */
2570 function triggerajouterapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
2571 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
2572 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
2573 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
2574 // Instanciation du dossier d'instruction concerné par la demande en
2575 // cours d'ajout avant modification éventuelle par l'instruction
2576 $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2577 // Récupère l'état du dossier avant l'exécution d'une éventuelle action
2578 // associée à l'événement d'instruction : utile pour le message 112 vers
2579 // le référentiel ERP
2580 $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
2581 }
2582
2583 /**
2584 *
2585 */
2586 if ($this->insertLinkDemandeDemandeur() == false) {
2587 return false;
2588 }
2589
2590 // Ajout des lliens entre dossier_autorisation et demandeur
2591 if(!empty($this->valF['dossier_autorisation'])) {
2592 if ($this->ajoutLiensDossierAutorisation($id, $val) == false) {
2593 return false;
2594 }
2595 }
2596 // Ajout des liens entre dossier et demandeur
2597 if($this->ajoutDI === TRUE) {
2598 if ($this->ajoutLiensDossierInstruction($id, $val) == false) {
2599 return false;
2600 }
2601 }
2602
2603 // Création d'un lien entre le nouveau DI et le dossier contesté
2604 if ($this->valF["autorisation_contestee"] != "") {
2605 if ($this->ajoutLienDossierConteste() === false) {
2606 return false;
2607 }
2608 }
2609
2610 // Duplication des lots (et leurs données techniques) et
2611 // liaison au nouveau dossier_d'instruction
2612 if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
2613 $this->lienLotDossierInstruction($id, $val);
2614 }
2615
2616 /*Création du lien de téléchargement de récépissé de demande*/
2617 if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
2618 && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
2619
2620 /*Récupérer l'événement lié à ce type de demande*/
2621 $evenement = $this->getEvenement($this->valF['demande_type']);
2622
2623 /*Récupération de la lettre type de l'événement*/
2624 $lettretype = $this->f->getLettreType($evenement);
2625
2626 /*Création d'une nouvelle instruction avec cet événement*/
2627 /*Données*/
2628 $valInstr['instruction']=NULL;
2629
2630 $valInstr['destinataire']=$this->valF['dossier_instruction'];
2631 $valInstr['dossier']=$this->valF['dossier_instruction'];
2632 // Récupère la date de la demande
2633 $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
2634 $valInstr['evenement']=$evenement;
2635 $valInstr['lettretype']=$lettretype;
2636 $valInstr['complement_om_html']="";
2637 $valInstr['complement2_om_html']="";
2638
2639 $valInstr['action']="initialisation";
2640 $valInstr['delai']="2";
2641 $valInstr['etat']="notifier";
2642 $valInstr['accord_tacite']="Oui";
2643 $valInstr['delai_notification']="1";
2644 $valInstr['archive_delai']="0";
2645 $valInstr['archive_date_complet']=NULL;
2646 $valInstr['archive_date_dernier_depot']=NULL;
2647 $valInstr['archive_date_rejet']=NULL;
2648 $valInstr['archive_date_limite']=NULL;
2649 $valInstr['archive_date_notification_delai']=NULL;
2650 $valInstr['archive_accord_tacite']="Non";
2651 $valInstr['archive_etat']="initialiser";
2652 $valInstr['archive_date_decision']=NULL;
2653 $valInstr['archive_avis']="";
2654 $valInstr['archive_date_validite']=NULL;
2655 $valInstr['archive_date_achevement']=NULL;
2656 $valInstr['archive_date_chantier']=NULL;
2657 $valInstr['archive_date_conformite']=NULL;
2658 $valInstr['archive_incompletude']=NULL;
2659 $valInstr['archive_incomplet_notifie']=NULL;
2660 $valInstr['archive_evenement_suivant_tacite']="";
2661 $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
2662 $valInstr['archive_etat_pendant_incompletude']=NULL;
2663 $valInstr['archive_date_limite_incompletude']=NULL;
2664 $valInstr['archive_delai_incompletude']=NULL;
2665 $valInstr['archive_autorite_competente']=NULL;
2666 $valInstr['complement3_om_html']="";
2667 $valInstr['complement4_om_html']="";
2668 $valInstr['complement5_om_html']="";
2669 $valInstr['complement6_om_html']="";
2670 $valInstr['complement7_om_html']="";
2671 $valInstr['complement8_om_html']="";
2672 $valInstr['complement9_om_html']="";
2673 $valInstr['complement10_om_html']="";
2674 $valInstr['complement11_om_html']="";
2675 $valInstr['complement12_om_html']="";
2676 $valInstr['complement13_om_html']="";
2677 $valInstr['complement14_om_html']="";
2678 $valInstr['complement15_om_html']="";
2679 $valInstr['avis_decision']=NULL;
2680 $valInstr['date_finalisation_courrier']=NULL;
2681 $valInstr['date_envoi_signature']=NULL;
2682 $valInstr['date_retour_signature']=NULL;
2683 $valInstr['date_envoi_rar']=NULL;
2684 $valInstr['date_retour_rar']=NULL;
2685 $valInstr['date_envoi_controle_legalite']=NULL;
2686 $valInstr['date_retour_controle_legalite']=NULL;
2687 $valInstr['signataire_arrete']=NULL;
2688 $valInstr['numero_arrete']=NULL;
2689 $valInstr['code_barres']=NULL;
2690 $valInstr['om_fichier_instruction']=NULL;
2691 $valInstr['om_final_instruction']=NULL;
2692 $valInstr['document_numerise']=NULL;
2693 $valInstr['autorite_competente']=NULL;
2694 $valInstr['duree_validite_parametrage']="0";
2695 $valInstr['duree_validite']="0";
2696 $valInstr['date_depot']=NULL;
2697 $valInstr['date_depot_mairie']=NULL;
2698 $valInstr['om_final_instruction_utilisateur']= "f";
2699 $valInstr['om_fichier_instruction_dossier_final']= "f";
2700 $valInstr['created_by_commune']= "f";
2701 $valInstr['archive_date_cloture_instruction'] = null;
2702 $valInstr['archive_date_premiere_visite'] = null;
2703 $valInstr['archive_date_derniere_visite'] = null;
2704 $valInstr['archive_date_contradictoire'] = null;
2705 $valInstr['archive_date_retour_contradictoire'] = null;
2706 $valInstr['archive_date_ait'] = null;
2707 $valInstr['archive_date_transmission_parquet'] = null;
2708 $valInstr['flag_edition_integrale'] = 'f';
2709 $valInstr['titre_om_htmletat'] = null;
2710 $valInstr['corps_om_htmletatex'] = null;
2711 $valInstr['archive_dossier_instruction_type'] = null;
2712 $valInstr['archive_date_affichage'] = null;
2713 $valInstr['pec_metier'] = null;
2714 $valInstr['archive_pec_metier'] = null;
2715 $valInstr['archive_a_qualifier'] = null;
2716 $valInstr['id_parapheur_signature'] = NULL;
2717 $valInstr['statut_signature'] = NULL;
2718 $valInstr['commentaire_signature'] = NULL;
2719 $valInstr['historique_signature'] = NULL;
2720 $valInstr['commentaire'] = NULL;
2721
2722 // Récupération des champs archive si cette demande a créée un dossier
2723 // d'instruction mais pas un P0
2724 if (!is_null($this->valF['dossier_instruction']) &&
2725 $this->valF['dossier_instruction'] !== "" ){
2726
2727 // Requête
2728 $sql = "SELECT dossier_instruction_type.code
2729 FROM ".DB_PREFIXE."demande_type
2730 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2731 ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2732 WHERE demande_type.demande_type = ".$this->valF['demande_type'];
2733 $res = $this->f->db->getOne($sql);
2734 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2735 if ($this->f->isDatabaseError($res, true)) {
2736 return false;
2737 }
2738
2739 // On vérifie qu'il ne s'agit pas d'une nouvelle demande
2740 if (get_called_class() !== 'demande_nouveau_dossier') {
2741 $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
2742
2743 if ($res == false) {
2744 $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);
2745 return false;
2746 }
2747
2748 if (isset($res['archive_delai'])) {
2749 $valInstr['archive_delai']=$res["archive_delai"];
2750 }
2751 if (isset($res['archive_date_complet'])) {
2752 $valInstr['archive_date_complet']=$res["archive_date_complet"];
2753 }
2754 if (isset($res['archive_date_dernier_depot'])) {
2755 $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
2756 }
2757 if (isset($res['archive_date_rejet'])) {
2758 $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
2759 }
2760 if (isset($res['archive_date_limite'])) {
2761 $valInstr['archive_date_limite']=$res["archive_date_limite"];
2762 }
2763 if (isset($res['archive_date_notification_delai'])) {
2764 $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
2765 }
2766 if (isset($res['archive_accord_tacite'])) {
2767 $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
2768 }
2769 if (isset($res['archive_etat'])) {
2770 $valInstr['archive_etat']=$res["archive_etat"];
2771 }
2772 if (isset($res['archive_date_decision'])) {
2773 $valInstr['archive_date_decision']=$res["archive_date_decision"];
2774 }
2775 if (isset($res['archive_avis'])) {
2776 $valInstr['archive_avis']=$res["archive_avis"];
2777 }
2778 if (isset($res['archive_date_validite'])) {
2779 $valInstr['archive_date_validite']=$res["archive_date_validite"];
2780 }
2781 if (isset($res['archive_date_achevement'])) {
2782 $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2783 }
2784 if (isset($res['archive_date_chantier'])) {
2785 $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2786 }
2787 if (isset($res['archive_date_conformite'])) {
2788 $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2789 }
2790 if (isset($res['archive_incompletude'])) {
2791 $valInstr['archive_incompletude']=$res["archive_incompletude"];
2792 }
2793 if (isset($res['archive_incomplet_notifie'])) {
2794 $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2795 }
2796 if (isset($res['archive_evenement_suivant_tacite'])) {
2797 $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2798 }
2799 if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2800 $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2801 }
2802 if (isset($res['archive_etat_pendant_incompletude'])) {
2803 $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2804 }
2805 if (isset($res['archive_date_limite_incompletude'])) {
2806 $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2807 }
2808 if (isset($res['archive_delai_incompletude'])) {
2809 $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2810 }
2811 if (isset($res['archive_autorite_competente'])) {
2812 $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2813 }
2814 if (isset($res['archive_date_cloture_instruction'])) {
2815 $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2816 }
2817 if (isset($res['archive_date_premiere_visite'])) {
2818 $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2819 }
2820 if (isset($res['archive_date_derniere_visite'])) {
2821 $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2822 }
2823 if (isset($res['archive_date_contradictoire'])) {
2824 $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2825 }
2826 if (isset($res['archive_date_retour_contradictoire'])) {
2827 $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2828 }
2829 if (isset($res['archive_date_ait'])) {
2830 $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2831 }
2832 if (isset($res['archive_date_transmission_parquet'])) {
2833 $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2834 }
2835 if (isset($res['archive_date_affichage'])) {
2836 $valInstr['archive_date_affichage'] = $res['archive_date_affichage'];
2837 }
2838 if (isset($res['archive_pec_metier'])) {
2839 $valInstr['archive_pec_metier'] = $res['archive_pec_metier'];
2840 }
2841 if (isset($res['archive_a_qualifier'])) {
2842 $valInstr['archive_a_qualifier'] = $res['archive_a_qualifier'];
2843 }
2844 }
2845 }
2846
2847 // Création d'un nouveau dossier
2848 $instruction = $this->f->get_inst__om_dbform(array(
2849 "obj" => "instruction",
2850 "idx" => "]",
2851 ));
2852 $instruction->valF = array();
2853 if ($instruction->ajouter($valInstr) === false) {
2854 // Suppression des messages valides puisque erreur
2855 $this->msg = '';
2856 $this -> addToMessage($instruction->msg);
2857 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2858 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2859 return false;
2860 }
2861 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) ajoutée", VERBOSE_MODE);
2862
2863 // Finalisation du document
2864 $_GET['obj']='instruction';
2865 $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2866 $instruction_final = $this->f->get_inst__om_dbform(array(
2867 "obj" => "instruction",
2868 "idx" => $_GET['idx'],
2869 ));
2870
2871 // Si l'instruction a une lettre type associée
2872 // ET si elle n'est pas déjà finalisée
2873 if($instruction_final->getVal('lettretype') != ""
2874 && $instruction_final->getVal('om_final_instruction') !== 't') {
2875 // On se met en contexte de l'action 100 finaliser
2876 $instruction_final->setParameter('maj',100);
2877 // On finalise l'événement d'instruction
2878 $this->f->addToLog(__METHOD__."() : finalisation de l'instruction '$evenement' ($lettretype) ...", VERBOSE_MODE);
2879 $res = $instruction_final->finalize();
2880 $this->f->addToLog(__METHOD__."() : instruction '$evenement' ($lettretype) finalisée", VERBOSE_MODE);
2881 // Si échec cela ne stoppe pas la création du dossier
2882 // et l'utilisateur n'en est pas informé dans l'IHM
2883 // mais l'erreur est loguée
2884 if ($res === false) {
2885 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2886 }
2887 }
2888
2889 // Mise à jour de la demande
2890 $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2891 $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2892 $demande_instance = $this->f->get_inst__om_dbform(array(
2893 "obj" => "demande",
2894 "idx" => $this->valF['demande'],
2895 ));
2896 if ($demande_instance->modifier($this->valF) === false) {
2897 $this -> addToMessage($demande_instance->msg);
2898 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2899 return false;
2900 }
2901 $this->f->addToLog(__METHOD__."() : demande mise à jour", VERBOSE_MODE);
2902
2903 // Instance du dossier d'autorisation
2904 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2905
2906 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
2907 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2908 && $inst_da->is_dossier_autorisation_visible() === true) {
2909
2910 // Permet de forcer la regénération de la clé citoyen
2911 $force = false;
2912
2913 // Regénération de la clé citoyen si le type de demande le demande
2914 $regeneration_cle_citoyen = $this->get_demande_type_regeneration_cle_citoyen($val['demande_type']);
2915 if ($regeneration_cle_citoyen === true) {
2916 $force = true;
2917 }
2918
2919 // Met à jour la clé d'accès au portail citoyen dans le dossier
2920 // d'autorisation
2921 $update = $inst_da->update_citizen_access_key($force);
2922 //
2923 if ($update !== true) {
2924 //
2925 $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2926 return false;
2927 }
2928 }
2929
2930 // Si l'instruction initiale a une lettre type liée
2931 if ($instruction->valF['lettretype'] !== ''
2932 && $instruction->valF['lettretype'] !== null) {
2933
2934 // Affichage du récépissé de la demande
2935 $this -> addToMessage("<a
2936 class='lien' id='link_demande_recepisse'
2937 title=\""._("Telecharger le recepisse de la demande")."\"
2938 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
2939 $this->valF[$this->clePrimaire]."' target='_blank'>
2940 <span
2941 class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2942 title=\""._("Telecharger le recepisse de la demande")."\">".
2943 _("Telecharger le recepisse de la demande").
2944 "</span>".
2945 _("Telecharger le recepisse de la demande")."
2946 </a><br/>");
2947 }
2948 }
2949
2950 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2951 $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2952
2953 /**
2954 * Option de numérisation.
2955 */
2956 // Si l'option est activée
2957 if ($this->f->is_option_digitalization_folder_enabled() === true) {
2958 // Création du répertoire de numérisation pour le dossier en
2959 // question.
2960 $ret = $inst_di->create_or_touch_digitalization_folder();
2961 // Si la création a échouée
2962 if ($ret !== true) {
2963 //
2964 $this->msg = "";
2965 $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
2966 return false;
2967 }
2968 }
2969
2970 /**
2971 * Interface avec le référentiel ERP.
2972 *
2973 * (WS->ERP)[109] Retrait de la demande -> AT
2974 * Déclencheur :
2975 * - L'option ERP est activée
2976 * - Le dossier est de type AT
2977 * - Le dossier est marqué comme "connecté au référentiel ERP"
2978 * - Le formulaire d'ajout de demande est validé avec un type de
2979 * demande correspondant à une demande de retrait
2980 */
2981 //
2982 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2983 && $inst_di->is_connected_to_referentiel_erp() === true
2984 && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2985 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
2986 //
2987 $infos = array(
2988 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2989 );
2990 //
2991 $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
2992 if ($ret !== true) {
2993 $this->cleanMessage();
2994 $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
2995 return false;
2996 }
2997 $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
2998 }
2999
3000 /**
3001 * Interface avec le référentiel ERP.
3002 *
3003 * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
3004 * Déclencheur :
3005 * - L'option ERP est activée
3006 * - Le dossier est de type AT
3007 * - Le dossier est marqué comme "connecté au référentiel ERP"
3008 * - Le formulaire d'ajout de demande est validé avec un type de
3009 * demande correspondant à un dépôt de pièces
3010 */
3011 //
3012 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3013 && $inst_di->is_connected_to_referentiel_erp() === true
3014 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3015 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
3016 // Définit le type de pièce par l'état du dossier
3017 $type_piece = "supplementaire";
3018 if ($etat_di_before_instr === 'incomplet') {
3019 $type_piece = "complementaire";
3020 }
3021 //
3022 $infos = array(
3023 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3024 "type_piece" => $type_piece,
3025 );
3026 //
3027 $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
3028 if ($ret !== true) {
3029 $this->cleanMessage();
3030 $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
3031 return false;
3032 }
3033 $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
3034 }
3035
3036 /**
3037 * Interface avec le référentiel ERP.
3038 *
3039 * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
3040 * Déclencheur :
3041 * - L'option ERP est activée
3042 * - Le dossier est de type AT
3043 * - Le dossier est marqué comme "connecté au référentiel ERP"
3044 * - Le formulaire d'ajout de demande est validé avec un type de
3045 * demande correspondant à une demande de visite d'ouverture ERP
3046 */
3047 //
3048 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3049 && $inst_di->is_connected_to_referentiel_erp() === true
3050 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
3051 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
3052 //
3053 $infos = array(
3054 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3055 );
3056 //
3057 $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
3058 if ($ret !== true) {
3059 $this->cleanMessage();
3060 $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
3061 return false;
3062 }
3063 $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
3064 }
3065
3066 /**
3067 * Interface avec le référentiel ERP.
3068 *
3069 * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
3070 * Déclencheur :
3071 * - L'option ERP est activée
3072 * - Le dossier est de type PC
3073 * - Le dossier est marqué comme "connecté au référentiel ERP"
3074 * - Le formulaire d'ajout de demande est validé avec un type de
3075 * demande correspondant à une demande de visite d'ouverture ERP
3076 */
3077 //
3078 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
3079 && $inst_di->is_connected_to_referentiel_erp() === true
3080 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
3081 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
3082 //
3083 $infos = array(
3084 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
3085 );
3086 //
3087 $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
3088 if ($ret !== true) {
3089 $this->cleanMessage();
3090 $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
3091 return false;
3092 }
3093 $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
3094 }
3095
3096 //
3097 return true;
3098 }
3099
3100 /**
3101 * Récupère l'état d'un dossier d'instruction
3102 * @param $idxDossier L'identifiant du dossier d'instruction
3103 * @return L'état du dossier d'instruction
3104 */
3105 function getEtatDossier($idxDossier){
3106
3107 $etat = "";
3108
3109 $sql = "SELECT etat.etat
3110 FROM ".DB_PREFIXE."etat
3111 LEFT JOIN
3112 ".DB_PREFIXE."dossier
3113 ON
3114 dossier.etat = etat.etat
3115 WHERE dossier.dossier = '".$idxDossier."'";
3116 $etat = $this->f->db->getOne($sql);
3117 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
3118 // Si une erreur survient on die
3119 if (database::isError($etat, true)) {
3120 // Appel de la methode de recuperation des erreurs
3121 $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
3122 }
3123
3124 return $etat;
3125 }
3126
3127 /**
3128 * TRIGGER - triggermodifierapres.
3129 *
3130 * - Ajout du lien demande / demandeur(s)
3131 *
3132 * @return boolean
3133 */
3134 function triggermodifierapres($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3135 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3136 //
3137 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3138 if ($this->insertLinkDemandeDemandeur() == false) {
3139 return false;
3140 }
3141 $this->valIdDemandeur=$this->postedIdDemandeur;
3142
3143 //
3144 return true;
3145 }
3146
3147
3148 /**
3149 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
3150 * dossier de recours.
3151 *
3152 * @return, [type] [description]
3153 */
3154 function ajoutLienDossierConteste() {
3155 // Création des liens entre le dossier instruction créé et le dossier
3156 // contesté
3157 $ldd = $this->f->get_inst__om_dbform(array(
3158 "obj" => "lien_dossier_dossier",
3159 "idx" => "]",
3160 ));
3161 // Préparation des valeurs à mettre en base
3162 $val['lien_dossier_dossier'] = "";
3163 $val['dossier_src'] = $this->valF['dossier_instruction'];
3164 $val['dossier_cible'] = $this->valF["autorisation_contestee"];
3165 $val['type_lien'] = 'auto_recours';
3166
3167 return $ldd->ajouter($val);
3168 }
3169
3170
3171 /**
3172 * Gestion des liens entre les lots du DA et le nouveau dossier
3173 **/
3174 function lienLotDossierInstruction($id, $val) {
3175 $lot = $this->f->get_inst__om_dbform(array(
3176 "obj" => "lot",
3177 "idx" => "]",
3178 ));
3179 $lld = $this->f->get_inst__om_dbform(array(
3180 "obj" => "lien_lot_demandeur",
3181 "idx" => "]",
3182 ));
3183
3184
3185 $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
3186 WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
3187 $resLot = $this->f->db->query($sqlLots);
3188 $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
3189 $this->f->isDatabaseError($resLot);
3190 while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
3191 // Insertion du nouveau lot
3192 $valLot['lot'] = "";
3193 $valLot['libelle'] = $rowLot['libelle'];
3194 $valLot['dossier_autorisation'] = null;
3195 $valLot['dossier'] = $this->valF['dossier_instruction'];
3196 $lot->ajouter($valLot);
3197
3198 //Insertion des liens entre dossier et les lots
3199 $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
3200 WHERE lot = ".$rowLot['lot'];
3201 $res = $this->f->db->query($sqlDemandeurs);
3202 $this->f->addToLog(
3203 __METHOD__."(): db->query(\"".$sqlDemandeurs."\");",
3204 VERBOSE_MODE
3205 );
3206 if ($this->f->isDatabaseError($res, true)) {
3207 return false;
3208 }
3209
3210 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3211 $valLld["lien_lot_demandeur"] = "";
3212 $valLld["lot"]=$lot->valF['lot'];
3213 $valLld["demandeur"] = $row['demandeur'];
3214 $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
3215 if ($lld->ajouter($valLld) === false) {
3216 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
3217 return false;
3218 }
3219 }
3220
3221 // Récupération des données techniques du nouveau lots
3222 if ($this->ajoutDonneesTechniquesLots($id, $val, $rowLot['lot'], $lot->valF['lot']) === false) {
3223 $this->addToMessage(
3224 _("Erreur lors de l'enregistrement de la demande.")." ".
3225 _("Contactez votre administrateur.")
3226 );
3227 $this->correct = false;
3228 $this->f->addToLog(
3229 __METHOD__."(): ERROR ajoutDonneesTechniquesLots",
3230 DEBUG_MODE
3231 );
3232 return false;
3233 }
3234
3235 }
3236
3237 //
3238 return true;
3239 }
3240
3241
3242 /**
3243 * Méthode permettant d'ajouter les données techniques d'un lot.
3244 *
3245 * @param integer $id identifiant de la demande
3246 * @param array $val tableau de valeurs postées via le formulaire
3247 * @param integer $lotInit identifiant de lot initial
3248 * @param integer $lotDest identifiant du lot qui va recevoir les données
3249 *
3250 * @return boolean false si erreur
3251 */
3252 function ajoutDonneesTechniquesLots($id, $val, $lotInit, $lotDest) {
3253 // Requete permettant de recupérer les données techniques du lot passé
3254 // en paramètre ($lotInit)
3255 $sql_get_dt = "
3256 SELECT donnees_techniques
3257 FROM ".DB_PREFIXE."donnees_techniques
3258 WHERE lot=".$lotInit;
3259 $id_dt = $this->f->db->getOne($sql_get_dt);
3260 // Si des données techniques sont liées au lots on les "copie" et
3261 // on les lies au lot passé en paramètre (lotDest)
3262 if(isset($id_dt) and !empty($id_dt)) {
3263 $this->f->addToLog(
3264 __METHOD__."(): db->getone(\"".$sql_get_dt."\");",
3265 VERBOSE_MODE
3266 );
3267 if ($this->f->isDatabaseError($id_dt, true)){
3268 $this->f->addToLog(
3269 __METHOD__."(): ERROR",
3270 DEBUG_MODE
3271 );
3272 return false;
3273 }
3274 $donnees_techniques = $this->f->get_inst__om_dbform(array(
3275 "obj" => "donnees_techniques",
3276 "idx" => $id_dt,
3277 ));
3278
3279 // Récupération des données dans le tableau des valeurs à insérer
3280 foreach($donnees_techniques->champs as $value) {
3281 $val[$value] = $donnees_techniques->getVal($value);
3282 }
3283 // Modification du lien vers le nouveau lot
3284 $val["lot"] = $lotDest;
3285 // Identifiant du cerfa
3286 $val['cerfa'] = $this->getIdCerfa();
3287 // Ajout des données techniques
3288 if($donnees_techniques->ajouter($val) === false) {
3289 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
3290 return false;
3291 }
3292 }
3293
3294 //
3295 return true;
3296 }
3297
3298 /**
3299 * Gestion des liens entre la demande et les demandeurs recemment ajoutés
3300 **/
3301 function insertLinkDemandeDemandeur() {
3302
3303 foreach ($this->types_demandeur as $type) {
3304 // Comparaison des autres demandeurs
3305 if(isset($this->postedIdDemandeur[$type]) === true) {
3306 // Suppression des liens non valides
3307 foreach ($this->valIdDemandeur[$type] as $demandeur) {
3308 // Demandeur
3309 if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
3310 if ($this->deleteLinkDemandeDemandeur($demandeur) == false) {
3311 //
3312 return false;
3313 }
3314 }
3315
3316 }
3317 // Ajout des nouveaux liens
3318 foreach ($this->postedIdDemandeur[$type] as $demandeur) {
3319 if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
3320 $principal = false;
3321 if(strpos($type, '_principal') !== false) {
3322 $principal = true;
3323 }
3324 if ($this->addLinkDemandeDemandeur($demandeur, $principal) == false) {
3325 //
3326 return false;
3327 }
3328 }
3329 }
3330 }
3331 }
3332
3333 //
3334 return true;
3335 }
3336
3337
3338 /**
3339 * Fonction permettant d'ajouter un lien
3340 * entre la table demande et demandeur
3341 **/
3342 function addLinkDemandeDemandeur($id, $principal) {
3343 $lienAjout = $this->f->get_inst__om_dbform(array(
3344 "obj" => "lien_demande_demandeur",
3345 "idx" => "]",
3346 ));
3347 $lien = array('lien_demande_demandeur' => "",
3348 'petitionnaire_principal' => (($principal)?"t":"f"),
3349 'demande' => $this->valF['demande'],
3350 'demandeur' => $id);
3351 if ($lienAjout->ajouter($lien) === false) {
3352 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
3353 return false;
3354 }
3355
3356 //
3357 return true;
3358 }
3359
3360 /**
3361 * Fonction permettant de supprimer un lien
3362 * entre la table demande et demandeur
3363 **/
3364 function deleteLinkDemandeDemandeur($id) {
3365 // Suppression
3366 $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
3367 "WHERE demande=".$this->valF['demande'].
3368 " AND demandeur=".$id;
3369 // Execution de la requete de suppression de l'objet
3370 $res = $this->f->db->query($sql);
3371 // Logger
3372 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
3373 if ($this->f->isDatabaseError($res, true)){
3374 return false;
3375 }
3376
3377 //
3378 return true;
3379 }
3380
3381 /*
3382 * Teste si le lien entre une demande et un demandeur existe
3383 * */
3384 function isLinkDemandeDemandeurExist($idDemandeur) {
3385 $sql = "SELECT count(*)
3386 FROM ".DB_PREFIXE."lien_demande_demandeur
3387 WHERE demande = ".$this->valF['demande'].
3388 "AND demandeur = ".$idDemandeur;
3389 $count = $this->f->db->getOne($sql);
3390 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
3391 $this->f->isDatabaseError($count);
3392 if ($count === 0) {
3393 $this->f->addToLog(__METHOD__."(): db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
3394 return false;
3395 } else {
3396 return true;
3397 }
3398
3399 }
3400
3401 /**
3402 * Methode de recupération des valeurs postées
3403 **/
3404 function getPostedValues() {
3405 // Récupération des demandeurs dans POST
3406 foreach ($this->types_demandeur as $type) {
3407 if($this->f->get_submitted_post_value($type) !== null AND
3408 $this->f->get_submitted_post_value($type) != '') {
3409 $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
3410 }
3411 }
3412 }
3413
3414 /**
3415 * Méthode permettant de récupérer les id des demandeurs liés à la table
3416 * liée passée en paramètre
3417 *
3418 * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
3419 * @param string $id Identifiant (clé primaire de la table liée en question)
3420 */
3421 function listeDemandeur($from, $id) {
3422 // Récupération des demandeurs de la base
3423 $sql = "SELECT demandeur.demandeur,
3424 demandeur.type_demandeur,
3425 lien_".$from."_demandeur.petitionnaire_principal
3426 FROM ".DB_PREFIXE."lien_".$from."_demandeur
3427 INNER JOIN ".DB_PREFIXE."demandeur
3428 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
3429 WHERE ".$from." = '".$id."'";
3430 $res = $this->f->db->query($sql);
3431 $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
3432 $this->f->isDatabaseError($res);
3433 // Stockage du résultat dans un tableau
3434 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
3435 $demandeur_type = $row['type_demandeur'];
3436 if ($row['petitionnaire_principal'] == 't'){
3437 $demandeur_type .= "_principal";
3438 }
3439 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
3440 }
3441 }
3442
3443
3444 /**
3445 * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
3446 * d'instruction existant
3447 */
3448 function retour($premier = 0, $recherche = "", $tricol = "") {
3449
3450 echo "\n<a class=\"retour\" ";
3451 echo "href=\"";
3452 //
3453 if($this->getParameter("idx_dossier") != "") {
3454 echo OM_ROUTE_TAB;
3455 echo "&obj=recherche_dossier";
3456
3457 } else {
3458 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
3459 echo OM_ROUTE_FORM;
3460 } else {
3461 echo OM_ROUTE_TAB;
3462 }
3463 echo "&obj=".$this->get_absolute_class_name();
3464 if($this->getParameter("retour")=="form") {
3465 echo "&amp;idx=".$this->getParameter("idx");
3466 echo "&amp;action=3";
3467 }
3468 }
3469 echo "&amp;premier=".$this->getParameter("premier");
3470 echo "&amp;tricol=".$this->getParameter("tricol");
3471 echo "&amp;advs_id=".$this->getParameter("advs_id");
3472 echo "&amp;valide=".$this->getParameter("valide");
3473 //
3474 echo "\"";
3475 echo ">";
3476 //
3477 echo _("Retour");
3478 //
3479 echo "</a>\n";
3480
3481 }
3482
3483
3484 /**
3485 * Cette méthode permet d'afficher des informations spécifiques dans le
3486 * formulaire de l'objet
3487 *
3488 * @param integer $maj Mode de mise à jour
3489 */
3490 function formSpecificContent($maj) {
3491 // Tableau des demandeurs selon le contexte
3492 $listeDemandeur = $this->valIdDemandeur;
3493 /**
3494 * Gestion du bloc des demandeurs
3495 */
3496 // Si le mode est (modification ou suppression ou consultation) ET que
3497 // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
3498 // actif)
3499 if ($this->correct !== true AND
3500 $this->getParameter('validation') == 0 AND
3501 $this->getParameter("maj") != 0) {
3502 // Alors on récupère les demandeurs dans la table lien pour
3503 // affectation des résultats dans $this->valIdDemandeur
3504 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
3505 $listeDemandeur = $this->valIdDemandeur;
3506 }
3507
3508 // Récupération des valeurs postées
3509 if ($this->getParameter('validation') != 0) {
3510 $listeDemandeur = $this->postedIdDemandeur;
3511 }
3512
3513 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3514 // correct (c'est-à-dire que le formulaire est actif)
3515 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3516 // Alors on positionne le marqueur linkable a true qui permet
3517 // d'afficher ou non les actions de gestion des demandeurs
3518 $linkable = true;
3519 } else {
3520 // Sinon on positionne le marqueur linkable a false qui permet
3521 // d'afficher ou non les actions de gestion des demandeurs
3522 $linkable = false;
3523 }
3524
3525 // Affichage des demandeurs et des actions
3526 // Conteneur de la listes des demandeurs
3527 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
3528 echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
3529 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
3530 ._("Demandeurs")."</legend>";
3531
3532 // Affichage du bloc pétitionnaire principal / délégataire
3533 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3534 echo "<div id=\"petitionnaire_principal_delegataire\">";
3535 // Affichage de la synthèse du pétitionnaire principal
3536 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
3537 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3538 echo "<div id=\"delegataire\">";
3539 // Affichage de la synthèse du délégataire
3540 $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
3541 echo "</div>";
3542 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3543 echo "<div id=\"proprietaire\">";
3544 // Affichage de la synthèse du délégataire
3545 $this->displaySyntheseDemandeur($listeDemandeur, "proprietaire");
3546 echo "</div>";
3547 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3548 echo "<div id=\"architecte_lc\">";
3549 // Affichage de la synthèse du délégataire
3550 $this->displaySyntheseDemandeur($listeDemandeur, "architecte_lc");
3551 echo "</div>";
3552 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3553 echo "<div id=\"paysagiste\">";
3554 // Affichage de la synthèse du délégataire
3555 $this->displaySyntheseDemandeur($listeDemandeur, "paysagiste");
3556 echo "</div>";
3557 echo "<div class=\"both\"></div>";
3558 echo "</div>";
3559 // Bloc des pétitionnaires secondaires
3560 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3561 echo "<div id=\"listePetitionnaires\">";
3562 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
3563 echo "</div>";
3564
3565 // Affichage du bloc pétitionnaire principal / délégataire / bailleur
3566 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3567 echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
3568 // Doit être utilisé avec la div petitionnaire_principal_delegataire
3569 echo "<div id=\"listeBailleurs\" class=\"col_12\">";
3570 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3571 echo "<div id=\"bailleur_principal\">";
3572 // Affichage de la synthèse
3573 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
3574 echo "</div>";
3575 echo "<div id=\"listeAutresBailleurs\">";
3576 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
3577 echo "</div>";
3578 echo "</div>";
3579 echo "</div>";
3580
3581 echo "<div id=\"plaignant_contrevenant\">";
3582 // Affichage du bloc contrevenant
3583 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3584 echo "<div id=\"listeContrevenants\" class=\"col_12\">";
3585 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3586 echo "<div id=\"contrevenant_principal\">";
3587 // Affichage de la synthèse
3588 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
3589 echo "</div>";
3590 echo "<div id=\"listeAutresContrevenants\">";
3591 // Affichage de la synthèse
3592 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
3593 echo "</div>";
3594 echo "</div>";
3595 // Affichage du bloc plaignant
3596 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3597 echo "<div id=\"listePlaignants\" class=\"col_12\">";
3598 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3599 echo "<div id=\"plaignant_principal\">";
3600 // Affichage de la synthèse
3601 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
3602 echo "</div>";
3603 echo "<div id=\"listeAutresPlaignants\">";
3604 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
3605 echo "</div>";
3606 echo "</div>";
3607 echo "</div>";
3608 echo "<div id=\"requerant_avocat\">";
3609 // Affichage du bloc requérant
3610 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3611 echo "<div id=\"listeRequerants\" class=\"col_12\">";
3612 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3613 echo "<div id=\"requerant_principal\">";
3614 // Affichage de la synthèse
3615 $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
3616 echo "</div>";
3617 echo "<div id=\"listeAutresRequerants\">";
3618 $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
3619 echo "</div>";
3620 echo "</div>";
3621 // Affichage du bloc avocat
3622 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3623 echo "<div id=\"listeAvocat\" class=\"col_12\">";
3624 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3625 echo "<div id=\"avocat_principal\">";
3626 $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
3627 echo "</div>";
3628 echo "<div id=\"listeAutresAvocats\">";
3629 $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
3630 echo "</div>";
3631 echo "</div>";
3632 echo "</div>";
3633 echo "</fieldset>";
3634 // Champ flag permettant de récupérer la valeur de l'option sig pour
3635 // l'utiliser en javascript, notamment lors du chargement de l'interface
3636 // pour les références cadastrales
3637 // XXX Si un widget pour les références cadastrales existait, il n'y
3638 // aurait pas besoin de faire cela
3639 echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
3640 echo "</div>";
3641 }
3642
3643 function displaySyntheseDemandeur($listeDemandeur, $type) {
3644 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
3645 // correct (c'est-à-dire que le formulaire est actif)
3646 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3647 // Alors on positionne le marqueur linkable a true qui permet
3648 // d'afficher ou non les actions de gestion des demandeurs
3649 $linkable = true;
3650 } else {
3651 // Sinon on positionne le marqueur linkable a false qui permet
3652 // d'afficher ou non les actions de gestion des demandeurs
3653 $linkable = false;
3654 }
3655 // Récupération du type de demandeur pour l'affichage
3656 switch ($type) {
3657 case 'petitionnaire_principal':
3658 $legend = _("Petitionnaire principal");
3659 break;
3660
3661 case 'delegataire':
3662 $legend = _("Autre correspondant");
3663 break;
3664
3665 case 'petitionnaire':
3666 $legend = _("Petitionnaire");
3667 break;
3668
3669 case 'contrevenant_principal':
3670 $legend = _("Contrevenant principal");
3671 break;
3672
3673 case 'contrevenant':
3674 $legend = _("Autre contrevenant");
3675 break;
3676
3677 case 'plaignant_principal':
3678 $legend = _("Plaignant principal");
3679 break;
3680
3681 case 'plaignant':
3682 $legend = _("Autre plaignant");
3683 break;
3684
3685 case 'requerant_principal':
3686 $legend = _("Requérant principal");
3687 break;
3688
3689 case 'requerant':
3690 $legend = _("Autre requérant");
3691 break;
3692
3693 case 'avocat_principal':
3694 $legend = _("Avocat principal");
3695 break;
3696
3697 case 'avocat':
3698 $legend = _("Autre avocat");
3699 break;
3700
3701 case 'bailleur_principal':
3702 $legend = _("Bailleur principal");
3703 break;
3704
3705 case 'bailleur':
3706 $legend = _("Autre bailleur");
3707 break;
3708
3709 case 'proprietaire':
3710 $legend = __('Propriétaire');
3711 break;
3712
3713 case 'architecte_lc':
3714 $legend = __('Architecte législation connexe');
3715 break;
3716
3717 case 'paysagiste':
3718 $legend = __('Concepteur-Paysagiste');
3719 break;
3720 }
3721 foreach ($listeDemandeur[$type] as $demandeur_id) {
3722 $obj = str_replace('_principal', '', $type);
3723 $demandeur = $this->f->get_inst__om_dbform(array(
3724 "obj" => $obj,
3725 "idx" => $demandeur_id,
3726 ));
3727 $demandeur -> afficherSynthese($type, $linkable);
3728 $demandeur -> __destruct();
3729 }
3730 // Si en édition de formulaire
3731 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
3732 // Bouton d'ajout du avocat
3733 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
3734 echo "<span id=\"add_".$type."\"
3735 class=\"om-form-button add-16\">".
3736 $legend.
3737 "</span>";
3738 }
3739 }
3740
3741 // {{{
3742
3743 // getter
3744 function getValIdDemandeur() {
3745 return $this->valIdDemandeur;
3746 }
3747 // setter
3748 function setValIdDemandeur($valIdDemandeur) {
3749 $this->valIdDemandeur = $valIdDemandeur;
3750 }
3751
3752 /**
3753 * TRIGGER - triggersupprimer.
3754 *
3755 * - Supression du lien entre la demandeur et le(s) demandeur(s)
3756 *
3757 * @return boolean
3758 */
3759 function triggersupprimer($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
3760 $this->addToLog(__METHOD__."(): start", EXTRA_VERBOSE_MODE);
3761 //Création de la requête
3762 $sql = "DELETE FROM
3763 ".DB_PREFIXE."lien_demande_demandeur
3764 WHERE
3765 demande = $id";
3766
3767 $res = $this->f->db->query($sql);
3768 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")", VERBOSE_MODE);
3769 if ($this->f->isDatabaseError($res, true)) {
3770 return false;
3771 }
3772
3773 //
3774 return true;
3775 }
3776
3777 // }}}
3778
3779 /**
3780 * Récupère le champ "qualification" du type de la demande
3781 * @param integer $demande_type Identifiant du type de la demande
3782 * @return boolean
3783 */
3784 function get_qualification($demande_type) {
3785
3786 // Initialise le résultat
3787 $qualification = "";
3788
3789 // Si la condition existe
3790 if (is_numeric($demande_type)) {
3791
3792 // Requête SQL
3793 $sql = "SELECT qualification
3794 FROM ".DB_PREFIXE."demande_type
3795 WHERE demande_type = $demande_type";
3796 $qualification = $this->f->db->getOne($sql);
3797 $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
3798 VERBOSE_MODE);
3799 $this->f->isDatabaseError($qualification);
3800 }
3801
3802 // Retourne le résultat
3803 return $qualification;
3804 }
3805
3806 /**
3807 * Récupère le champ "regeneration_cle_citoyen" du type de la demande.
3808 *
3809 * @param integer $demande_type Identifiant du type de la demande.
3810 *
3811 * @return boolean
3812 */
3813 function get_demande_type_regeneration_cle_citoyen($demande_type) {
3814 // Initialise le résultat
3815 $regeneration_cle_citoyen = false;
3816
3817 // Récupère le champ depuis la demande type
3818 $inst_demande_type = $this->f->get_inst__om_dbform(array(
3819 "obj" => "demande_type",
3820 "idx" => $demande_type,
3821 ));
3822 if ($inst_demande_type->getVal('regeneration_cle_citoyen') === 't') {
3823 $regeneration_cle_citoyen = true;
3824 }
3825
3826 // Retourne le résultat
3827 return $regeneration_cle_citoyen;
3828 }
3829
3830 /**
3831 * Récupère les champs archive_* d'une instruction
3832 * @param string $dossier L'identifiant du dossier d'instruction
3833 */
3834 public function getArchiveInstruction($dossierID){
3835
3836 //On récupère les données du dernier DI accordé
3837 $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3838 dossier.avis_decision,
3839 to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
3840 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
3841 to_char(dossier.date_depot_mairie, 'DD/MM/YYYY') as date_depot_mairie,
3842 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3843 to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3844 to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3845 to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3846 to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3847 to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3848 to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3849 to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3850 to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3851 dossier.incompletude,
3852 dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3853 dossier.etat_pendant_incompletude,
3854 to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3855 dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3856 ,dossier.dossier, dossier.incomplet_notifie,
3857 to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3858 to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3859 to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3860 to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3861 to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3862 to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3863 to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet,
3864 dossier.dossier_instruction_type as dossier_instruction_type,
3865 to_char(dossier.date_affichage, 'DD/MM/YYYY') as date_affichage
3866 FROM ".DB_PREFIXE."dossier
3867 LEFT JOIN ".DB_PREFIXE."avis_decision
3868 ON dossier.avis_decision = avis_decision.avis_decision
3869 WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3870 AND dossier.dossier_autorisation = (
3871 SELECT dossier_autorisation.dossier_autorisation
3872 FROM ".DB_PREFIXE."dossier_autorisation
3873 LEFT JOIN ".DB_PREFIXE."dossier
3874 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3875 WHERE dossier = '".$dossierID."')
3876 ORDER BY dossier.version DESC";
3877
3878 $res = $this->f->db->query($sql);
3879 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3880 if ($this->f->isDatabaseError($res, true)) {
3881 return false;
3882 }
3883
3884 //Un des dosssiers d'instruction a été accordé, on récupère ses données
3885 if ( $res->numrows() != 0 ){
3886
3887 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3888 $instruction = $this->f->get_inst__om_dbform(array(
3889 "obj" => "instruction",
3890 "idx" => "]",
3891 ));
3892
3893 $instruction->setParameter("maj", 1);
3894 $instruction->updateArchiveData($row);
3895 return $instruction->valF;
3896 }
3897 //Sinon, on prend les données du P0, si ce n'est pas un P0
3898 else {
3899 $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3900 dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3901 dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3902 dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3903 dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3904 dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3905 dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3906 dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3907 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot, dossier.date_depot_mairie,
3908 dossier.date_cloture_instruction, dossier.date_premiere_visite,
3909 dossier.date_derniere_visite, dossier.date_contradictoire,
3910 dossier.date_retour_contradictoire, dossier.date_ait,
3911 dossier.date_transmission_parquet, dossier.dossier_instruction_type,
3912 dossier.date_affichage
3913 FROM ".DB_PREFIXE."dossier
3914 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3915 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3916 WHERE dossier.dossier_autorisation = (
3917 SELECT dossier_autorisation.dossier_autorisation
3918 FROM ".DB_PREFIXE."dossier_autorisation
3919 LEFT JOIN ".DB_PREFIXE."dossier
3920 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3921 WHERE dossier = '".$dossierID."')
3922 AND dossier_instruction_type.code = 'P'
3923 ORDER BY dossier.version DESC";
3924 $res = $this->f->db->query($sql);
3925 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3926 if ($this->f->isDatabaseError($res, true)) {
3927 return false;
3928 }
3929
3930 //On est pas dans le cas d'un dépôt d'un P0
3931 if ( $res->numrows() != 0 ){
3932 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3933 $instruction = $this->f->get_inst__om_dbform(array(
3934 "obj" => "instruction",
3935 "idx" => "]",
3936 ));
3937 $instruction->setParameter("maj", 1);
3938 $instruction->updateArchiveData($row);
3939 return $instruction->valF;
3940 }
3941 }
3942 }
3943
3944 /**
3945 * Cette methode permet d'afficher le bouton de validation du formulaire
3946 *
3947 * @param integer $maj Mode de mise a jour
3948 * @return void
3949 */
3950 function bouton($maj) {
3951
3952 if (!$this->correct
3953 && $this->checkActionAvailability() == true) {
3954 //
3955 switch($maj) {
3956 case 0 :
3957 $bouton = _("Ajouter");
3958 break;
3959 case 1 :
3960 $bouton = _("Modifier");
3961 break;
3962 case 2 :
3963 $bouton = _("Supprimer");
3964 break;
3965 default :
3966 // Actions specifiques
3967 if ($this->get_action_param($maj, "button") != null) {
3968 //
3969 $bouton = $this->get_action_param($maj, "button");
3970 } else {
3971 //
3972 $bouton = _("Valider");
3973 }
3974 break;
3975 }
3976 //
3977 $params = array(
3978 "value" => $bouton,
3979 "name" => "submit",
3980 "onclick"=>"return getDataFieldReferenceCadastrale();",
3981 );
3982 //
3983 $this->f->layout->display_form_button($params);
3984 }
3985
3986 }
3987
3988 /**
3989 * Récupère l'instance de la classe taxe_amenagement.
3990 *
3991 * @param integer $om_collectivite La collectivité
3992 *
3993 * @return object
3994 */
3995 function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
3996 //
3997 if ($this->inst_taxe_amenagement === null) {
3998 //
3999 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
4000
4001 // Si aucun paramétrage de taxe trouvé et que la collectivité
4002 // est mono
4003 if ($taxe_amenagement === null
4004 && $this->f->isCollectiviteMono($om_collectivite) === true) {
4005 // Récupère la collectivité multi
4006 $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
4007 //
4008 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
4009 }
4010
4011 //
4012 if ($taxe_amenagement === null) {
4013 //
4014 return null;
4015 }
4016
4017 //
4018 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
4019 "obj" => "taxe_amenagement",
4020 "idx" => $taxe_amenagement,
4021 ));
4022 }
4023 //
4024 return $this->inst_taxe_amenagement;
4025 }
4026
4027 /**
4028 * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
4029 *
4030 * @param integer $om_collectivite La collectivité
4031 *
4032 * @return integer
4033 */
4034 function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
4035 //
4036 $taxe_amenagement = null;
4037
4038 // Si la collectivité n'est pas renseigné
4039 if ($om_collectivite !== '' && $om_collectivite !== null) {
4040
4041 // SQL
4042 $sql = "SELECT taxe_amenagement
4043 FROM ".DB_PREFIXE."taxe_amenagement
4044 WHERE om_collectivite = ".intval($om_collectivite);
4045 $taxe_amenagement = $this->f->db->getOne($sql);
4046 $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
4047 $this->f->isDatabaseError($taxe_amenagement);
4048 }
4049
4050 //
4051 return $taxe_amenagement;
4052 }
4053
4054
4055 /**
4056 * TODO: replace with '$this->f->findObjectById' ?
4057 *
4058 * Récupère l'instance du cerfa par le type détaillé du DA.
4059 *
4060 * @param integer $datd Identifiant du type détaillé du DA.
4061 *
4062 * @return object
4063 */
4064 protected function get_inst_cerfa_by_datd($datd = null) {
4065 //
4066 if ($this->inst_cerfa === null) {
4067 //
4068 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
4069 //
4070 $cerfa = $inst_datd->getVal('cerfa');
4071 //
4072 if ($cerfa !== '' && $cerfa !== null) {
4073 //
4074 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
4075 "obj" => "cerfa",
4076 "idx" => $cerfa,
4077 ));
4078 }
4079 }
4080
4081 //
4082 return $this->inst_cerfa;
4083 }
4084
4085
4086 /**
4087 * TODO: replace with '$this->f->findObjectById' ?
4088 *
4089 * Récupère l'instance du dossier d'autorisation.
4090 *
4091 * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
4092 *
4093 * @return object
4094 */
4095 function get_inst_dossier_autorisation($dossier_autorisation = null) {
4096 //
4097 return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
4098 }
4099
4100 /**
4101 * Vérifie si un dossier d'autorisation avec cette numérotation existe déjà.
4102 *
4103 * @return boolean
4104 */
4105 function existsDAWithNumeroDossierSeq($idDAdt, $date_demande, $collectivite_id, $num_doss_seq, $commune_id = null, $code_depcom = null) {
4106
4107 if (empty($idDAdt) || empty($date_demande) || empty($collectivite_id) || empty($num_doss_seq)) {
4108 return false;
4109 }
4110
4111 if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === true
4112 && empty($commune_id) === true) {
4113 //
4114 return false;
4115 }
4116
4117 // code du type de DA
4118 $sql = "SELECT da_t.code
4119 FROM ".DB_PREFIXE."dossier_autorisation_type as da_t
4120 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d
4121 ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type
4122 WHERE da_t_d.dossier_autorisation_type_detaille=".$idDAdt.";";
4123 $code_type_da = $this->f->db->getone($sql);
4124 $this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE);
4125 if ($this->f->isDatabaseError($code_type_da, true) === true) {
4126 return false;
4127 }
4128
4129 // annee date demande
4130 $annee = date('y', strtotime($date_demande));
4131
4132 // code département et commune
4133 if (empty($code_depcom) === true) {
4134 if ($this->f->is_option_dossier_commune_enabled($collectivite_id) === false) {
4135 $collectivite_parameters = $this->f->getCollectivite($collectivite_id);
4136 if (!isset($collectivite_parameters['departement'])) {
4137 $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'departement' inexistant.",
4138 DEBUG_MODE);
4139 return false;
4140 }
4141 if (!isset($collectivite_parameters['commune'])) {
4142 $this->f->addToLog(__METHOD__."(): ERROR om_parametre 'commune' inexistant.",
4143 DEBUG_MODE);
4144 return false;
4145 }
4146 $departement = $collectivite_parameters['departement'];
4147 $commune = $collectivite_parameters['commune'];
4148 $code_depcom = $departement.$commune;
4149 } else {
4150 //
4151 $getCodeDepartementCommuneFromCommune = $this->getCodeDepartementCommuneFromCommune($commune_id);
4152 $code_depcom = $getCodeDepartementCommuneFromCommune[0];
4153 }
4154 }
4155
4156 // construction de la requête
4157 $num_dossier = str_pad($num_doss_seq, 4, '0', STR_PAD_LEFT);
4158 $clePrimaire = $code_type_da.$code_depcom.$annee.'%'.$num_dossier;
4159 $query = sprintf("
4160 SELECT dossier_autorisation
4161 FROM %sdossier_autorisation
4162 WHERE dossier_autorisation LIKE '%s'
4163 ",
4164 DB_PREFIXE,
4165 $clePrimaire
4166 );
4167 $res = $this->f->get_one_result_from_db_query($query, true);
4168 if ($res['code'] === 'OK'
4169 && $res['result'] !== ''
4170 && $res['result'] !== null) {
4171 //
4172 return true;
4173 }
4174 return false;
4175 }
4176
4177 /**
4178 * Concatenation du code département et du code commune
4179 * obtenus à partir de la collectivité (collectivité par défaut si aucun id fourni).
4180 * Renvoie un tuple (code_depcom, error_msg).
4181 */
4182 protected function getCodeDepartementCommuneFromCommune(int $commune_id) : array {
4183 $code_depcom = null;
4184 $error_msg = null;
4185 if (!empty($commune_id)) {
4186 $commune = $this->f->findObjectById("commune", $commune_id);
4187 if (!empty($commune)) {
4188 $code_departement = $commune->getVal('dep');
4189 $code_commune = preg_replace('/^'.$code_departement.'/', '', $commune->getVal('com'));
4190 if(!is_numeric($code_departement)) {
4191 $error_msg = sprintf(__("code département invalide (%s). Doit être numérique."),
4192 $code_departement);
4193 }
4194 else if (!is_numeric($code_commune)) {
4195 $error_msg = sprintf(__("code commune invalide (%s). Doit être numérique."),
4196 $code_commune);
4197 }
4198 else {
4199 $code_depcom = str_pad($code_departement, 3, '0', STR_PAD_LEFT)
4200 .str_pad($code_commune, 3, '0', STR_PAD_LEFT);
4201 }
4202 }
4203 else {
4204 $error_msg = sprintf(__("commune ID '%d' inexistante"), $commune_id);
4205 }
4206 }
4207 if (!empty($error_msg)) {
4208 $this->f->addToLog(__METHOD__."(): ERROR $error_msg", DEBUG_MODE);
4209 }
4210 return array($code_depcom, $error_msg);
4211 }
4212
4213 }
4214
4215

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26