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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 8329 - (show annotations)
Wed Nov 14 11:20:57 2018 UTC (6 years, 2 months ago) by softime
File size: 144180 byte(s)
* Merge de la branche d'intégration 4.8.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 );
38 var $postedIdDemandeur = array("petitionnaire_principal" => array(),
39 "delegataire" => array(),
40 "petitionnaire" => array(),
41 "plaignant_principal" => array(),
42 "plaignant" => array(),
43 "contrevenant_principal" => array(),
44 "contrevenant" => array(),
45 "requerant_principal" => array(),
46 "requerant" => array(),
47 "avocat_principal" => array(),
48 "avocat" => array(),
49 "bailleur_principal" => array(),
50 "bailleur" => array(),
51 );
52
53 var $autreDossierEnCour;
54
55 var $cerfa = null;
56
57 /**
58 * Instance du paramétrage de la taxe d'aménagement
59 *
60 * @var null
61 */
62 var $inst_taxe_amenagement = null;
63
64 /**
65 * Instance de la classe dossier_autorisation.
66 *
67 * @var mixed (resource | null)
68 */
69 var $inst_dossier_autorisation = null;
70
71 /**
72 * Instance de la classe cerfa.
73 *
74 * @var mixed (resource | null)
75 */
76 var $inst_cerfa = null;
77
78 /**
79 *
80 * @return string
81 */
82 function get_default_libelle() {
83 return $this->get_dossier_libelle($this->getVal('dossier_instruction'));
84 }
85
86 /**
87 * Définition des actions disponibles sur la classe.
88 *
89 * @return void
90 */
91 function init_class_actions() {
92
93 // On récupère les actions génériques définies dans la méthode
94 // d'initialisation de la classe parente
95 parent::init_class_actions();
96
97 // ACTION - 003 - consulter
98 //
99 $this->class_actions[3]["condition"] = "is_user_from_allowed_collectivite";
100
101 // ACTION - 100 - pdfetat
102 // Permet de visualiser le récépissé de la demande
103 $this->class_actions[100] = array(
104 "identifier" => "pdfetat",
105 "portlet" => array(
106 "type" => "action-blank",
107 "libelle" => _("Editer le recepisse PDF"),
108 "order" => 100,
109 "class" => "pdf-16",
110 ),
111 "view" => "view_pdfetat",
112 "permission_suffix" => "consulter",
113 );
114
115 // ACTION - 110 - affichage_reglementaire_registre
116 // Affiche un formulaire pour visualiser le registre réglementaire
117 $this->class_actions[110] = array(
118 "identifier" => "affichage_reglementaire_registre",
119 "view" => "view_reglementaire_registre",
120 "permission_suffix" => "consulter",
121 );
122
123 // ACTION - 111 - generate_affichage_reglementaire_registre
124 // Génère et affiche le PDF registre d'affichage réglementaire
125 $this->class_actions[111] = array(
126 "identifier" => "generate_affichage_reglementaire_registre",
127 "view" => "view_generate_affichage_reglementaire_registre",
128 "permission_suffix" => "consulter",
129 );
130
131 // ACTION - 120 - affichage_reglementaire_attestation
132 // Affiche un formulaire pour visualiser l'attestation réglementaire
133 $this->class_actions[120] = array(
134 "identifier" => "affichage_reglementaire_attestation",
135 "view" => "view_reglementaire_attestation",
136 "permission_suffix" => "consulter",
137 );
138
139 // ACTION - 130 - Récupération de l'adresse
140 $this->class_actions[130] = array(
141 "identifier" => "get_adresse",
142 "view" => "view_get_adresse_by_cadastre",
143 "permission_suffix" => "recuperer_adresse",
144 );
145 }
146
147
148 /**
149 * CONDITION - is_user_from_allowed_collectivite.
150 *
151 * Cette condition permet de vérifier si l'utilisateur connecté appartient
152 * à une collectivité autorisée : c'est-à-dire de niveau 2 ou identique à
153 * la collectivité de l'enregistrement sur lequel on se trouve.
154 *
155 * @return boolean
156 */
157 public function is_user_from_allowed_collectivite() {
158
159 // Si l'utilisateur est de niveau 2
160 if ($this->f->isCollectiviteMono() === false) {
161 // Alors l'utilisateur fait partie d'une collectivité autorisée
162 return true;
163 }
164
165 // L'utilisateur est donc de niveau 1
166 // On vérifie donc si la collectivité de l'utilisateur est la même
167 // que la collectivité de l'élément sur lequel on se trouve
168 if ($_SESSION["collectivite"] === $this->getVal("om_collectivite")) {
169 // Alors l'utilisateur fait partie d'une collectivité autorisée
170 return true;
171 }
172
173 // L'utilisateur ne fait pas partie d'une collectivité autorisée
174 return false;
175 }
176
177
178 /**
179 *
180 */
181 function get_inst_dossier_instruction($dossier_instruction = null) {
182 //
183 return $this->get_inst_common(
184 "dossier_instruction",
185 $dossier_instruction,
186 "dossier"
187 );
188 }
189
190 /**
191 * VIEW - view_pdfetat
192 *
193 * Génère un récépissé PDF de la demande.
194 *
195 * @return void
196 */
197 function view_pdfetat() {
198 // Identifiant de la demande
199 $idx = $this->getVal($this->clePrimaire);
200
201 // Requête qui récupère le type de lettre type
202 $sql = " SELECT instruction.instruction, instruction.lettretype,";
203 $sql .= " demande.om_collectivite, demande.dossier_instruction";
204 $sql .= " FROM ".DB_PREFIXE."demande ";
205 $sql .= " LEFT JOIN ".DB_PREFIXE."instruction ";
206 $sql .= " ON demande.instruction_recepisse=instruction.instruction ";
207 $sql .= " WHERE demande.demande=".intval($idx);
208 $res = $this->f->db->query($sql);
209 $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\")", VERBOSE_MODE);
210 $this->f->isDatabaseError($res);
211 $row = $res->fetchrow(DB_FETCHMODE_ASSOC);
212
213 // Si la requête nous retourne un résultat
214 if (isset($row["instruction"])
215 && !empty($row["instruction"])
216 && isset($row["lettretype"])
217 && !empty($row["lettretype"])) {
218
219 // récupération des paramètres de la collectivité
220 $coll_param = $this->f->getCollectivite($row["om_collectivite"]);
221
222 // Génération du récépissé
223 $pdf_output = $this->compute_pdf_output(
224 "lettretype",
225 $row["lettretype"],
226 $coll_param,
227 $row["instruction"]
228 );
229 // Mise à disposition du récépissé
230 $this->expose_pdf_output(
231 $pdf_output['pdf_output'],
232 "recepisse_depot_".$row["dossier_instruction"].".pdf"
233 );
234 } else {
235 // On indique à l'utilisateur que le récépissé n'existe pas
236 $this->f->displayMessage("error", _("Le recepisse demande n'existe pas."));
237 }
238 }
239
240 /**
241 * VIEW - view_reglementaire_registre
242 *
243 * Affiche un formulaire pour génèrer le registre d'affichage réglementaire.
244 *
245 * @return void
246 */
247 function view_reglementaire_registre() {
248
249 // Vérification de l'accessibilité sur l'élément
250 $this->checkAccessibility();
251
252 /**
253 * Gestion des erreurs : vérification du paramétrage
254 */
255 $erreur = false;
256 // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
257 $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
258 // Si le paramétrage est vide ou pas numérique
259 if ($aff_obli == "" or !is_numeric($aff_obli)) {
260 $erreur = true;
261 } else {
262 // Vérification de l'existance de l'événement
263 $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
264 $res_verif = $this->f->db->getOne($sql_verif);
265 $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
266 $this->f->isDatabaseError($res_verif);
267 // Si pas de correspondance d'événement dans la base
268 if ($res_verif === '0') {
269 $erreur = true;
270 }
271 }
272 // Affichage d'un message si en erreur
273 if ($erreur == true) {
274 // Affichage de l'erreur et sortie de la vue
275 $this->f->displayMessage("error", _("Erreur de parametrage. Contactez votre administrateur."));
276 return;
277 }
278
279 // Si un affichage réglementaire des dossiers est demandé (appel en ajax)
280 if ($this->f->get_submitted_get_value('update') !== null) {
281 // Désactivation des logs car appel en ajax
282 $this->f->disableLog();
283 // Récupère la collectivité de l'utilisateur
284 $this->f->getCollectivite();
285 // Récupération de la liste des dossiers d'instruction dont l'état est
286 // "encours" et le groupe est 'ADS'. Une jointure avec la table instruction
287 // permet de savoir si le dossier a déjà été affiché ou non en récupérant
288 // l'id de l'événement qui représente l'attestion de l'affichage
289 // réglementaire dans le paramétrage.
290 $sql = "SELECT dossier.dossier, instruction.instruction, dossier.om_collectivite
291 FROM
292 ".DB_PREFIXE."dossier
293 LEFT JOIN ".DB_PREFIXE."instruction
294 ON dossier.dossier=instruction.dossier
295 AND instruction.evenement=".$aff_obli."
296 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
297 ON dossier.dossier_autorisation =
298 dossier_autorisation.dossier_autorisation
299 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
300 ON dossier_autorisation.dossier_autorisation_type_detaille =
301 dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
302 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
303 ON dossier_autorisation_type_detaille.dossier_autorisation_type =
304 dossier_autorisation_type.dossier_autorisation_type
305 LEFT JOIN ".DB_PREFIXE."groupe
306 ON dossier_autorisation_type.groupe = groupe.groupe
307 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
308 ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
309 WHERE
310 (select
311 e.statut
312 from
313 ".DB_PREFIXE."etat e
314 where
315 e.etat = dossier.etat
316 ) = 'encours'
317 AND groupe.code = 'ADS'
318 AND LOWER(dossier_instruction_type.code) IN ('p','m','t')
319 AND dossier.om_collectivite = ".$this->f->getParameter('om_collectivite_idx');
320 $res = $this->f->db->query($sql);
321 $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
322 $this->f->isDatabaseError($res);
323 // Boucle sur les dossiers
324 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
325 // Si aucune instruction n'a d'événement de type "affichage_obligatoire"
326 // on créé une nouvelle instruction avec cet événement.
327 if ($row["instruction"] == "") {
328 // Instanciation d'instruction pour ajout
329 $instr = $this->f->get_inst__om_dbform(array(
330 "obj" => "instruction",
331 "idx" => "]",
332 ));
333 // Création d'un tableau avec la liste des champs de l'instruction
334 foreach($instr->champs as $champ) {
335 $valF[$champ] = "";
336 }
337 $valF["destinataire"] = $row['dossier'];
338 $valF["date_evenement"] = date("d/m/Y");
339 $valF["evenement"] = $aff_obli;
340 $valF["dossier"] = $row['dossier'];
341
342 // Définition des valeurs de la nouvelle instruction
343 $instr->valF = array();
344 // Insertion dans la base
345 $res_ajout = $instr->ajouter($valF, $this->f->db, DEBUG);
346 $this->f->addToLog(__METHOD__.": db->autoexecute(\"".DB_PREFIXE."instruction\", ".print_r($valF, true).", DB_AUTOQUERY_INSERT);", VERBOSE_MODE);
347 $this->f->isDatabaseError($res_ajout);
348
349 //Finalisation du document
350 $_GET['obj']='instruction';
351 $_GET['idx']=$instr->valF[$instr->clePrimaire];
352 $instr = $this->f->get_inst__om_dbform(array(
353 "obj" => "instruction",
354 "idx" => $_GET['idx'],
355 ));
356 // On se met en contexte de l'action 100 finaliser
357 $instr->setParameter('maj',100);
358 $instr->finalize();
359 }
360 }
361 } else { // Sinon affichage standard
362 // Affichage de la description de l'écran
363 $this->f->displayDescription(_("Cet ecran permet d'imprimer le registre d'affichage ".
364 "reglementaire des dossiers d'instruction en cours. ".
365 "La validation de ce traitement ajoute sur chacun des ".
366 "dossiers d'instruction concernes la possibilite ".
367 "d'imprimer une attestation d'affichage."));
368 // Ouverture du formulaire
369 echo "\t<form";
370 echo " method=\"post\"";
371 echo " id=\"affichage_reglementaire_registre_form\"";
372 echo " action=\"#\"";
373 echo ">\n";
374 //
375 echo "<div id=\"msg\"></div>";
376 // Affichage du bouton
377 echo "\t<div class=\"formControls\">\n";
378 $this->f->layout->display_form_button(array("value" => _("Valider"), "onclick" => "affichage_reglementaire_registre(this); return false;", ));
379 echo "\t</div>\n";
380 // Fermeture du fomulaire
381 echo "\t</form>\n";
382 }
383 }
384
385 /**
386 * VIEW - view_generate_affichage_reglementaire_registre
387 *
388 * Génère et affiche l'édition PDF registre d'affichage
389 * réglementaire.
390 *
391 * @return void
392 */
393 function view_generate_affichage_reglementaire_registre() {
394
395 // Vérification de l'accessibilité sur l'élément
396 $this->checkAccessibility();
397 // Génération du PDF
398 $result = $this->compute_pdf_output('etat', 'registre_dossiers_affichage_reglementaire', null, $this->getVal($this->clePrimaire));
399 // Affichage du PDF
400 $this->expose_pdf_output(
401 $result['pdf_output'],
402 $result['filename']
403 );
404 }
405
406 /**
407 * VIEW - view_reglementaire_attestation
408 *
409 * Affiche un formulaire pour génèrer l'attestation d'affichage
410 * réglementaire.
411 *
412 * @return void
413 */
414 function view_reglementaire_attestation() {
415
416 // Vérification de l'accessibilité sur l'élément
417 $this->checkAccessibility();
418
419 /**
420 * Gestion des erreurs : vérification du paramétrage
421 */
422 $erreur = false;
423 // Récupération de l'événement correspondant à l'instruction à insérer pour chaque dossier du registre
424 $aff_obli = $this->f->getParameter('id_affichage_obligatoire');
425 // Si le paramétrage est vide ou pas numérique
426 if ($aff_obli == "" or !is_numeric($aff_obli)) {
427 $erreur = true;
428 } else {
429 // Vérification de l'existance de l'événement
430 $sql_verif = "SELECT count(*) FROM ".DB_PREFIXE."evenement WHERE evenement = ".$aff_obli;
431 $res_verif = $this->f->db->getOne($sql_verif);
432 $this->f->addToLog(__METHOD__.": db->getOne(\"".$sql_verif."\");", VERBOSE_MODE);
433 $this->f->isDatabaseError($res_verif);
434 // Si pas de correspondance d'événement dans la base
435 if ($res_verif === '0') {
436 $erreur = true;
437 }
438 }
439 // Affichage d'un message si en erreur
440 if ($erreur == true) {
441 // Affichage de l'erreur et sortie de la vue
442 $this->f->displayMessage("error", _("Erreur de parametrage. Contactez votre administrateur."));
443 return;
444 }
445
446 /**
447 * Validation du formulaire
448 */
449 // Si le formulaire a été validé
450 if ($this->f->get_submitted_post_value("dossier") !== null) {
451 // Si une valeur a été saisie dans le champs dossier
452 if ($this->f->get_submitted_post_value("dossier") != "") {
453 // On récupère la valeur postée :
454 // - on l'échappe pour la base de données
455 // - on supprime les espaces pour faciliter la saisie
456 // - on le positionne en minuscule pour être sûr de la correspondance
457 $posted_dossier = $this->f->db->escapesimple(strtolower(str_replace(' ', '', $this->f->get_submitted_post_value("dossier"))));
458 // Récupération des informations sur le dossier et l'étape d'instruction
459 $sql = "SELECT
460 dossier.dossier, instruction.instruction, instruction.lettretype,
461 instruction.om_final_instruction, instruction.om_fichier_instruction
462 FROM
463 ".DB_PREFIXE."dossier
464 LEFT JOIN ".DB_PREFIXE."instruction
465 ON dossier.dossier=instruction.dossier
466 AND instruction.evenement=".$this->f->getParameter('id_affichage_obligatoire')."
467 WHERE
468 LOWER(dossier.dossier)='".$posted_dossier."' ";
469 $res = $this->f->db->query($sql);
470 $this->f->addToLog(__METHOD__.": db->query(\"".$sql."\");", VERBOSE_MODE);
471 $this->f->isDatabaseError($res);
472 $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
473 // Si il y a un dossier et une étape d'instrcution correspondante à
474 // l'événement affichage obligatoire et que l'instruction est bien finalisée
475 if ($res->numrows() != 0
476 && $row["instruction"] != ""
477 && isset($row['om_fichier_instruction'])
478 && isset($row['om_final_instruction'])
479 && $row['om_fichier_instruction'] != ''
480 && $row['om_final_instruction'] == 't') {
481 //
482 $message_class = "valid";
483 $message = _("Cliquez sur le lien ci-dessous pour telecharger votre attestation d'affichage");
484 $message .= " : <br/><br/>";
485 $message .= "<a class='om-prev-icon pdf-16'";
486 $message .= " title=\""._("Attestation d'affichage")."\"";
487 $message .= " href='../app/index.php?module=form&snippet=file&obj=instruction&amp;"
488 ."champ=om_fichier_instruction&amp;id=".$row['instruction']."'";
489 $message .= " target='_blank'>";
490 $message .= _("Attestation d'affichage");
491 $message .= "</a>";
492 } elseif ($res->numrows() != 0
493 && $row["instruction"] != ""
494 && isset($row['om_fichier_instruction'])
495 && isset($row['om_final_instruction'])
496 && $row['om_fichier_instruction'] != ''
497 && $row['om_final_instruction'] == 'f') {
498 // Si l'instruction n'est pas finalisée on indique à l'utilisateur que l'édition n'est pas possible
499 $message_class = "error";
500 $message = _("L'attestation de ce dossier existe mais n'est pas finalisée.");
501 } elseif ($res->numrows() != 0 && $row["instruction"] == "") {
502 // Si aucune instruction avec l'événement affichage obligatoire n'a
503 // été trouvée
504 $message_class = "error";
505 $message = _("Ce dossier n'a jamais ete affiche.");
506 } else {
507 // Si aucun dossier n'est trouvé
508 $message_class = "error";
509 $message = _("Ce dossier n'existe pas.");
510 }
511 } else {
512 // Si aucune valeur n'a été saisie dans le champs dossier
513 $message_class = "error";
514 $message = _("Veuiller saisir un No de dossier.");
515 }
516 }
517
518 /**
519 * Affichage des messages et du formulaire
520 */
521 // Affichage de la description de l'écran
522 $this->f->displayDescription(_("Cet ecran permet d'imprimer l'attestation d'affichage ".
523 "reglementaire d'un dossier d'instruction. Il suffit de ".
524 "saisir le numero du dossier d'instruction puis de ".
525 "valider pour obtenir le lien de telechargement de ".
526 "l'attestation permettant de l'imprimer."));
527 // Affichage du message de validation ou d'erreur
528 if (isset($message) && isset($message_class) && $message != "") {
529 $this->f->displayMessage($message_class, $message);
530 }
531 // Ouverture du formulaire
532 echo "\t<form";
533 echo " method=\"post\"";
534 echo " id=\"affichage_reglementaire_attestation_form\"";
535 echo " action=\"\"";
536 echo ">\n";
537 // Paramétrage des champs du formulaire
538 $champs = array("dossier");
539 // Création d'un nouvel objet de type formulaire
540 $form = $this->f->get_inst__om_formulaire(array(
541 "validation" => 0,
542 "maj" => 0,
543 "champs" => $champs,
544 ));
545 // Paramétrage des champs du formulaire
546 $form->setLib("dossier", _("No de dossier"));
547 $form->setType("dossier", "text");
548 $form->setTaille("dossier", 25);
549 $form->setMax("dossier", 25);
550 // Affichage du formulaire
551 $form->entete();
552 $form->afficher($champs, 0, false, false);
553 $form->enpied();
554 // Affichage du bouton
555 echo "\t<div class=\"formControls\">\n";
556 $this->f->layout->display_form_button(array("value" => _("Valider")));
557 echo "\t</div>\n";
558 // Fermeture du fomulaire
559 echo "\t</form>\n";
560 }
561
562
563 /**
564 * VIEW - view_get_adresse_by_cadastre
565 *
566 * Permet de récupérer l'adresse de la première référence cadastrale via le sig.
567 *
568 * @return void
569 */
570 public function view_get_adresse_by_cadastre() {
571 //
572 $this->f->disableLog();
573 $refcads = "";
574 // Récupération des références cadastrales passées en paramètre
575 if ($this->f->get_submitted_post_value("refcad") != null) {
576 $refcads = $this->f->get_submitted_post_value("refcad");
577 }
578 // Si ce n'est pas un tableau de références
579 if (is_array($refcads) === false){
580 printf(json_encode(_("Aucune reference cadastrale fournie")));
581 return;
582 }
583 // TODO : Ajouter les tests
584 // XXX
585 // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
586 // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
587 // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
588 $collectivite_idx = $_SESSION["collectivite"];
589 if ($this->f->get_submitted_post_value("om_collectivite") != null) {
590 $collectivite_idx = $this->f->get_submitted_post_value("om_collectivite");
591 }
592 $collectivite_param = $this->f->getCollectivite($collectivite_idx);
593 // Si le paramètre option_sig de la commune n'a pas la valeur 'sig_externe', on
594 // affiche une erreur.
595 if ($collectivite_param['option_sig'] != 'sig_externe') {
596 printf(json_encode(_("La localisation SIG n'est pas activee pour cette commune.")));
597 return;
598 }
599
600 $wParcelle = "";
601 //Formatage des références cadastrales pour l'envoi
602 foreach ($refcads as $refcad) {
603 //Pour chaque ligne
604 foreach ($refcad as $value) {
605 //On ajoute les données dans le tableau que si quartier + section + parcelle
606 //a été fourni
607 if ($value["quartier"] !== "" && $value["section"] !== "" &&
608 $value["parcelle"] !== "") {
609 //
610 $wParcelle .= $value["quartier"].$value["section"].$value["parcelle"];
611 //Si on a des délimiteurs
612 if (isset($value["delimit"][0])) {
613
614 //Pour chaque délimiteur
615 for($i = 0; $i < count($value["delimit"][0]); $i++) {
616 //
617 $wParcelle .= $value["delimit"][0][$i];
618 }
619 }
620 // Séparateur
621 $wParcelle .= ";";
622 }
623 }
624 }
625
626 try {
627 $geoads = new geoads($collectivite_param);
628 } catch (geoads_exception $e) {
629 printf(json_encode($e->getMessage()));
630 return;
631 }
632 // XXX
633 // Pour les utilisateur mono, il faut récupérer la session mais s'il s'agit d'un
634 // utilisateur commnauté, il faut récupérer la valeur du champ om_collectivite
635 // et vérifier que celui-ci n'est pas vide sinon afficher un message d'erreur
636 // Formatage des parcelles pour l'envoi au webservice
637 $liste_parcelles = $this->f->parseParcelles($wParcelle, $collectivite_idx);
638 try {
639 //On lance la requête SOAP
640 $execute = $geoads->verif_parcelle($liste_parcelles);
641 } catch (geoads_exception $e) {
642 printf(json_encode($e->getMessage()));
643 return;
644 }
645
646 // Vérifie l'existence de la 1ere parcelles
647 if (!isset($execute[0]) or $execute[0]['existe'] != true) {
648 printf(json_encode(_("Aucune adresse ne correspond a la reference cadastrale fournie")));
649 return;
650 }
651
652 $response['return_addr'] = array();
653 // Si plusieurs parcelles sont retournées on n'utilise que la première pour
654 // récupérer l'adresse
655 if (isset($execute[0]) && is_array($execute[0])) {
656 $adresse_ws = $execute[0];
657 }
658 //Récupération du nom de la collectivité
659 $sql = "SELECT UPPER(
660 valeur)
661 FROM
662 ".DB_PREFIXE."om_parametre
663 WHERE
664 libelle = 'ville' and om_collectivite = ".$collectivite_idx;
665 $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
666
667 $ville = $this->f->db->getOne($sql);
668 $this->f->isDatabaseError($ville);
669
670 $response["return_addr"]["localite"] = $ville;
671
672 // Formate le code postal
673 $code_postal = '';
674 // On vérifie que l'arrondissement retourné est bien une valeur
675 // cohérente avant d'essayer de récupérer son code postal en base de
676 // données
677 if (isset($adresse_ws["adresse"]['arrondissement']) === true
678 && $adresse_ws["adresse"]['arrondissement'] != ""
679 && is_numeric($adresse_ws["adresse"]['arrondissement']) === true) {
680 // Requête sql
681 $sqlDonneesArrdt = "SELECT code_postal
682 FROM ".DB_PREFIXE."arrondissement
683 WHERE arrondissement = ".$adresse_ws["adresse"]['arrondissement'];
684 $code_postal = $this->f->db->getOne($sqlDonneesArrdt);
685 $this->f->addToLog("app/geolocalisation_treatment.php : db->query(\"".$sqlDonneesArrdt."\")", VERBOSE_MODE);
686 $this->f->isDatabaseError($code_postal);
687 } else {
688 //Récupération du code postal
689 $sql = "SELECT
690 valeur
691 FROM
692 ".DB_PREFIXE."om_parametre
693 WHERE
694 libelle = 'cp' and om_collectivite = ".$collectivite_idx;
695 $this->f->addToLog(__METHOD__." : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
696
697 $code_postal = $this->f->db->getOne($sql);
698 $this->f->isDatabaseError($code_postal);
699 }
700
701 $response['return_addr']['code_postal'] = $code_postal;
702
703 // On coupe les chaînes retournées afin que leurs tailles
704 // correspondent aux tailles des champs en base de données
705 if ($adresse_ws["adresse"]['numero_voie'] !== '') {
706 $response['return_addr']['numero_voie'] = substr($adresse_ws["adresse"]['numero_voie'], 0, 20);
707 }
708 // cas où le type de voie n'est pas fourni par le SIG
709 if ($adresse_ws["adresse"]['nom_voie'] !== '') {
710 $response['return_addr']['nom_voie'] = substr(
711 $adresse_ws["adresse"]['nom_voie'],
712 0,
713 30
714 );
715 }
716 // cas où le type de voie est fourni
717 if (isset($adresse_ws["adresse"]['type_voie'])
718 AND $adresse_ws["adresse"]['type_voie'] !== ''
719 AND $adresse_ws["adresse"]['nom_voie'] !== '') {
720 $response['return_addr']['nom_voie'] = substr(
721 $adresse_ws["adresse"]['type_voie']." ".$adresse_ws["adresse"]['nom_voie'],
722 0,
723 30
724 );
725 }
726 //
727 printf(json_encode($response));
728 return;
729 }
730
731
732 function setValF($val = array()) {
733 parent::setValF($val);
734 // Récupération des id demandeurs postés
735 $this->getPostedValues();
736 //$this->valIdDemandeur=$this->postedIdDemandeur;
737
738 // On retraite le texte saisie pour jointure en BDD.
739 // Traitement identique à celui effectué en JavaScript
740 // dans la fonction lookingForAutorisationContestee().
741 if ($this->valF['autorisation_contestee'] !== NULL) {
742 $val = trim($this->valF['autorisation_contestee']);
743 $this->valF['autorisation_contestee'] = preg_replace(
744 '/\s+/',
745 '',
746 $val
747 );
748 }
749
750 }
751
752
753 /**
754 * Méthode permettant de récupérer les valeurs du dossier d'autorisation
755 * correspondant à la nouvelle demande
756 */
757 function getValFromDossier($dossier_autorisation) {
758 include "../sql/pgsql/demande.form.inc.php";
759 $sql=str_replace("<idx>",$this->getParameter("idx_dossier"),
760 $sql_infos_dossier);
761 $res = $this->db->query($sql);
762 $this->f->addToLog("getValFromDossier(): db->query(\"".$sql."\")", VERBOSE_MODE);
763 $this->f->isDatabaseError($res);
764 $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
765 return $row;
766 }
767
768 /*
769 * La date du jour par défaut dans le champs date_demande
770 * Put the date of the day by default into the field date_demande
771 */
772 function setVal(&$form, $maj, $validation, &$db = null, $DEBUG = null) {
773 parent::setVal($form, $maj, $validation, $db, $DEBUG);
774 // Sur le formulaire de modification, depot_electronique
775 // n'est pas modifiable et affiche Oui/Non.
776 if ($maj == 1){
777 if($this->getVal('depot_electronique') === 't'
778 || $this->getVal('depot_electronique') === true
779 || $this->getVal('depot_electronique') === 1){
780 //
781 $form->setVal('depot_electronique',"Oui");
782 }else{
783 $form->setVal('depot_electronique',"Non");
784 }
785 }
786
787 if($maj == 0) {
788
789 // Définition de la date de dépôt par défaut
790 if($this->f->getParameter('option_date_depot_demande_defaut') !== 'false') {
791 $form->setVal("date_demande", date('d/m/Y'));
792 }
793
794 // Récupération des valeurs du dossier d'autorisation correspondant
795 if($this->getParameter("idx_dossier") != "") {
796 $val_autorisation = $this->getValFromDossier(
797 $this->getParameter("idx_dossier"));
798 foreach($val_autorisation as $champ => $value) {
799 $form->setVal($champ,$value);
800 }
801 }
802 }
803 }
804 function getDataSubmit() {
805
806 $datasubmit = parent::getDataSubmit();
807 if($this->getParameter("idx_dossier") != "") {
808 $datasubmit .= "&idx_dossier=".$this->getParameter("idx_dossier");
809 }
810 return $datasubmit;
811 }
812
813 /**
814 * Retourne le type de formulaire : ADS, CTX RE, CTX IN ou DPC.
815 *
816 * @return, string Type de formulaire.
817 */
818 function get_type_affichage_formulaire() {
819
820 $sql = "SELECT dossier_autorisation_type.affichage_form
821 FROM ".DB_PREFIXE."demande_type
822 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
823 ON demande_type.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
824 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type
825 ON dossier_autorisation_type.dossier_autorisation_type=dossier_autorisation_type_detaille.dossier_autorisation_type
826 WHERE demande_type.demande_type=".$this->valF["demande_type"];
827 $type_aff_form = $this->db->getOne($sql);
828 $this->f->addToLog(__METHOD__ . " : db->getOne(\"".$sql."\")", VERBOSE_MODE);
829 if($this->f->isDatabaseError($type_aff_form, true) === true) {
830 return false;
831 }
832 return $type_aff_form;
833 }
834
835 /**
836 * Méthode de verification du contenu
837 */
838 function verifier($val = array(), &$db = null, $DEBUG = null) {
839 parent::verifier($val, $db, $DEBUG);
840
841 $type_aff_form = $this->get_type_affichage_formulaire();
842 if ($type_aff_form ===false) {
843 $this->correct = false;
844 $this->addToMessage(_("Une erreur s'est produite lors de l'ajout de ce dossier. Veuillez contacter votre administrateur."));
845 }
846 switch ($type_aff_form) {
847 case 'ADS':
848 case 'CTX RE':
849 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
850 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
851 !is_null($this->form)) {
852 $this->correct = false;
853 $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
854 }
855 break;
856 case 'CTX IN':
857 if(!isset($this->postedIdDemandeur["contrevenant_principal"]) OR
858 empty($this->postedIdDemandeur["contrevenant_principal"]) AND
859 !is_null($this->form)) {
860 $this->correct = false;
861 $this->addToMessage(_("La saisie d'un contrevenant principal est obligatoire."));
862 }
863 break;
864 case 'DPC':
865 if(!isset($this->postedIdDemandeur["petitionnaire_principal"]) OR
866 empty($this->postedIdDemandeur["petitionnaire_principal"]) AND
867 !is_null($this->form)) {
868 $this->correct = false;
869 $this->addToMessage(_("La saisie d'un petitionnaire principal est obligatoire."));
870 }
871 if(!isset($this->postedIdDemandeur["bailleur_principal"]) OR
872 empty($this->postedIdDemandeur["bailleur_principal"]) AND
873 !is_null($this->form)) {
874 $this->correct = false;
875 $this->addToMessage(_("La saisie d'un bailleur principal est obligatoire."));
876 }
877 break;
878
879 }
880
881 }
882
883 /**
884 * Configuration des select
885 */
886 function setSelect(&$form, $maj, &$db = null, $debug = null) {
887
888 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
889 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
890 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
891 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
892
893 // Méthode de récupération des valeurs du select "demande_type"
894 if ($maj < 2
895 && (($this->f->get_submitted_get_value('obj') !== null && $this->f->get_submitted_get_value('obj') != "demande")
896 OR ($this->f->get_submitted_get_value('obj') === null))) {
897 // demande_type
898 $form->setSelect('demande_type', $this->loadSelectDemandeType($form, $maj, $db, $debug, "dossier_autorisation_type_detaille"));
899 } else {
900 // demande_type
901 $this->init_select($form, $db, $maj, $debug, "demande_type",
902 $sql_demande_type, $sql_demande_type_by_id, false);
903 }
904 // arrondissement
905 $this->init_select($form, $db, $maj, $debug, "arrondissement",
906 $sql_arrondissement, $sql_arrondissement_by_id, false);
907
908 // Filtre des demandes par groupes
909 $group_clause = array();
910 $ajout_condition_requete = "";
911 foreach ($_SESSION["groupe"] as $key => $value) {
912 if($value["enregistrement_demande"] !== true) {
913 continue;
914 }
915 $group_clause[$key] = "(groupe.code = '".$key."'";
916 if($value["confidentiel"] !== true) {
917 $group_clause[$key] .= " AND dossier_autorisation_type.confidentiel IS NOT TRUE";
918 }
919 $group_clause[$key] .= ")";
920 }
921 // Mise en chaîne des clauses
922 $conditions = implode(" OR ", $group_clause);
923 if($conditions !== "") {
924 $ajout_condition_requete .= " AND (".$conditions.")";
925 }
926 // Les clauses sont une white list. Cela qui signifie que l'on
927 // rajoute une condition irréalisable si absence de clause.
928 if ($ajout_condition_requete === '') {
929 $ajout_condition_requete = 'AND false';
930 }
931 $sql_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requete>', $ajout_condition_requete, $sql_dossier_autorisation_type_detaille);
932 $this->init_select($form, $db, $maj, $debug, "dossier_autorisation_type_detaille",
933 $sql_dossier_autorisation_type_detaille, $sql_dossier_autorisation_type_detaille_by_id, false);
934
935 // om_collectivite
936 $this->init_select($form, $this->f->db, $maj, null, "om_collectivite", $sql_om_collectivite, $sql_om_collectivite_by_id, false);
937 }
938
939 /**
940 * Charge le select du champ type de demande
941 * @param object $form Formulaire
942 * @param int $maj Mode d'insertion
943 * @param object $db Database
944 * @param bool $debug Debug active ou pas
945 * @param string $champ champ activant le filtre
946 * @return array Contenu du select
947 */
948 function loadSelectDemandeType(&$form, $maj, &$db, $debug, $champ) {
949
950 //
951 if(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php"))
952 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php");
953 elseif(file_exists ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc"))
954 include ("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc");
955
956 // Contenu de la liste à choix
957 $contenu=array();
958 $contenu[0][0]='';
959 $contenu[1][0]=_('choisir')."&nbsp;"._("demande_type");
960
961 //Récupère l'id du type de dossier d'autorisation détaillé
962 $id_dossier_autorisation_type_detaille = "";
963 if ($this->f->get_submitted_post_value($champ) !== null) {
964 $id_dossier_autorisation_type_detaille = $this->f->get_submitted_post_value($champ);
965 } elseif($this->getParameter($champ) != "") {
966 $id_dossier_autorisation_type_detaille = $this->getParameter($champ);
967 } elseif(isset($form->val[$champ])) {
968 $id_dossier_autorisation_type_detaille = $form->val[$champ];
969 }
970
971 // Récupération de paramètre pour le rechargement ajax du select
972 $idx_dossier = $this->getParameter("idx_dossier");
973
974 // Récupère l'id de la nature de la demande
975 $id_demande_nature = "1";
976 if (isset($idx_dossier) AND $idx_dossier != "") {
977 $id_demande_nature = '2';
978 }
979
980 // Ajout de condition pour la requête
981 $ajout_condition_requête = "";
982 if ($id_demande_nature == '2') {
983
984 //On récupère le dossier d'autorisation
985 $sql = "SELECT dossier_autorisation
986 FROM ".DB_PREFIXE."dossier
987 WHERE dossier = '".$idx_dossier."'";
988 $dossier_autorisation = $this->db->getOne($sql);
989
990 $this->f->addToLog(
991 "loadSelectDemandeType() : db->getone(\"".$sql."\");",
992 VERBOSE_MODE
993 );
994 $this->f->isDatabaseError($dossier_autorisation);
995
996 //On récupère l'état du dernier dossier d'instruction
997 $sql = "SELECT etat
998 FROM ".DB_PREFIXE."dossier
999 WHERE dossier_autorisation = '".$dossier_autorisation."' AND
1000 version = (SELECT max(version) FROM ".DB_PREFIXE."dossier
1001 WHERE dossier_autorisation = '".$dossier_autorisation."' )";
1002 $etatDernierDi = $this->db->getOne($sql);
1003 $this->f->addToLog(
1004 "loadSelectDemandeType() : db->getone(\"".$sql."\");",
1005 VERBOSE_MODE
1006 );
1007 $this->f->isDatabaseError($etatDernierDi);
1008
1009 $ajout_condition_requête = " AND etat.etat = '".$etatDernierDi."'
1010 ";
1011 }
1012
1013 //
1014 if ($id_dossier_autorisation_type_detaille != "") {
1015 //Si l'id du type de dossier d'autorisation détaillé est renseigné
1016 $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_dossier_autorisation_type_detaille>', $id_dossier_autorisation_type_detaille, $sql_demande_type_by_dossier_autorisation_type_detaille);
1017 // Ajoute une condition sur la nature de la demande
1018 $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<idx_demande_nature>', $id_demande_nature, $sql_demande_type_by_dossier_autorisation_type_detaille);
1019 // Permet d'ajouter une condition
1020 $sql_demande_type_by_dossier_autorisation_type_detaille = str_replace('<ajout_condition_requête>', $ajout_condition_requête, $sql_demande_type_by_dossier_autorisation_type_detaille);
1021 $res = $this->db->query($sql_demande_type_by_dossier_autorisation_type_detaille);
1022 $this->addToLog("db->query(\"".$sql_demande_type_by_dossier_autorisation_type_detaille."\");", VERBOSE_MODE);
1023 $this->f->isDatabaseError($res);
1024 //Les résultats de la requête sont stocké dans le tableau contenu
1025 $k=1;
1026 while ($row=& $res->fetchRow()){
1027 $contenu[0][$k]=$row[0];
1028 $contenu[1][$k]=$row[1];
1029 $k++;
1030 }
1031 }
1032
1033 // Retourne le contenu de la liste
1034 return $contenu;
1035 }
1036
1037 /*
1038 * Ajout du fielset
1039 * Add fieldset
1040 */
1041 function setLayout(&$form, $maj){
1042 if ( $maj < 2) {
1043
1044 // Type de dossier/demande
1045 $form->setBloc('om_collectivite','D',"","col_12 dossier_type");
1046 $form->setFieldset('om_collectivite','D'
1047 ,_('Type de dossier/demande'));
1048 $form->setFieldset('etat','F','');
1049 $form->setBloc('etat','F');
1050
1051 // Autorisation contestée
1052 $form->setBloc('autorisation_contestee','D',"","col_12 demande_autorisation_contestee_hidden_bloc");
1053 $form->setFieldset('autorisation_contestee','D'
1054 ,_('Autorisation contestée'));
1055 $form->setFieldset('autorisation_contestee','F','');
1056 $form->setBloc('autorisation_contestee','F');
1057
1058 // Date de la demande
1059 $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1060 $form->setFieldset('date_demande','D',_('Date de la demande'));
1061 $form->setFieldset('date_demande','F','');
1062 $form->setBloc('date_demande','F');
1063
1064 // Localisation
1065 $form->setBloc('parcelle_temporaire','D',"",
1066 "col_12 localisation demande_hidden_bloc");
1067 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1068 $form->setFieldset('terrain_superficie','F','');
1069 $form->setBloc('terrain_superficie','F');
1070
1071 // Demandeurs
1072 // → cf. formSpecificContent()
1073 }
1074 if ( $maj == 3 ) {
1075 $form->setBloc('om_collectivite','D',"","dossier_type col_12");
1076 $form->setBloc('om_collectivite','D',"","dossier_type col_8");
1077 $form->setFieldset('om_collectivite','D'
1078 ,_('Type de dossier/demande'));
1079 $form->setFieldset('dossier_autorisation','F','');
1080 $form->setBloc('dossier_autorisation','F');
1081 /*Fin bloc 1*/
1082
1083 // Affichage de l'état du dossier d'instruction
1084 $form->setBloc('etat','D',"","col_4 demande_etat_hidden_bloc");
1085 $form->setFieldset('etat','D',_('etat du dossier_instruction'));
1086 $form->setFieldset('etat','F','');
1087 $form->setBloc('etat','F');
1088 $form->setBloc('etat','F');
1089
1090 $form->setBloc('autorisation_contestee','DF',"","demande_autorisation_contestee_hidden_bloc");
1091
1092 /*Champ sur lequel s'ouvre le bloc 2 */
1093 $form->setBloc('date_demande','D',"","col_4 demande_hidden_bloc");
1094 $form->setFieldset('date_demande','D',_('Date de la demande'));
1095 $form->setFieldset('date_demande','F','');
1096 $form->setBloc('date_demande','F');
1097 /*Fin bloc 2*/
1098
1099 /*Champ sur lequel s'ouvre le bloc 3 */
1100 $form->setBloc('parcelle_temporaire','D',"",
1101 "localisation col_12 demande_hidden_bloc");
1102 $form->setFieldset('parcelle_temporaire','D',_('Localisation'));
1103 $form->setFieldset('terrain_superficie','F','');
1104 $form->setBloc('terrain_superficie','F');
1105 /*Fin bloc 4*/
1106 }
1107 }
1108
1109 /*
1110 * Ajoute des actions sur les deux premiers select
1111 * Add actions on the two first select
1112 */
1113 function setOnchange(&$form,$maj){
1114 parent::setOnchange($form,$maj);
1115
1116 $form->setOnchange("dossier_autorisation_type_detaille","changeDemandeType();");
1117 $form->setOnchange("demande_type","manage_document_checklist(this);showFormDemande();");
1118 }
1119
1120 function setLib(&$form,$maj) {
1121 parent::setLib($form,$maj);
1122 //libelle des champs
1123
1124 $form->setLib('terrain_adresse_voie',_('terrain_adresse'));
1125 $form->setLib('autorisation_contestee',_('numéro du dossier contesté').' '.$form->required_tag);
1126 }
1127
1128 /*
1129 * Cache le champ terrain_references_cadastrales
1130 * Hide the fiels terrain_references_cadastrales
1131 */
1132 function setType(&$form,$maj) {
1133 parent::setType($form,$maj);
1134
1135 $form->setType('dossier_instruction', 'hidden');
1136 $form->setType('dossier_autorisation', 'hidden');
1137 $form->setType('autorisation_contestee', 'autorisation_contestee');
1138
1139 $form->setType('instruction_recepisse', 'hidden');
1140 $form->setType('arrondissement', 'hidden');
1141
1142 $form->setType('etat', 'hidden');
1143
1144 //Le paramètre "dépôt électronique" n'est pas modifiable manuellement
1145 if ($maj == 0) {
1146 $form->setType('depot_electronique', 'hidden');
1147 }
1148
1149 // Si il s'agit d'une demande sur dossier existant on desactive tous les champs
1150 // sauf demande_type
1151 if(($maj == 0 AND $this-> getParameter("idx_dossier"))) {
1152 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1153 $form->setType('etat', 'hiddenstatic');
1154 $form->setType('terrain_references_cadastrales', 'hiddenstatic');
1155 $form->setType('terrain_adresse_voie_numero', 'hiddenstatic');
1156 $form->setType('terrain_adresse_voie', 'hiddenstatic');
1157 $form->setType('terrain_adresse_lieu_dit', 'hiddenstatic');
1158 $form->setType('terrain_adresse_localite', 'hiddenstatic');
1159 $form->setType('terrain_adresse_code_postal', 'hiddenstatic');
1160 $form->setType('terrain_adresse_bp', 'hiddenstatic');
1161 $form->setType('terrain_adresse_cedex', 'hiddenstatic');
1162 $form->setType('terrain_superficie', 'hiddenstatic');
1163 }
1164 if($maj == 1) {
1165 $form->setType('depot_electronique', 'hiddenstatic');
1166 $form->setType('dossier_autorisation_type_detaille', 'selecthiddenstatic');
1167 $form->setType('demande_type', 'selecthiddenstatic');
1168 }
1169 if($maj == 3) {
1170 $form->setType('terrain_references_cadastrales', 'referencescadastralesstatic');
1171 }
1172
1173 }
1174
1175 /**
1176 * Permet de recupérer l'identifiant du cerfa du DATD séléctionné
1177 * par l'utilisateur.
1178 *
1179 * @return integer identifiant du cerfa
1180 */
1181 function getIdCerfa() {
1182 if($this->cerfa != null) {
1183 return $this->cerfa;
1184 }
1185 // Récupération du cerfa pour le type d'instruction sélectionnée et valide
1186 $sql = "SELECT
1187 dossier_autorisation_type_detaille.cerfa
1188 FROM
1189 ".DB_PREFIXE."dossier_autorisation_type_detaille
1190 JOIN
1191 ".DB_PREFIXE."cerfa
1192 ON
1193 dossier_autorisation_type_detaille.cerfa = cerfa.cerfa
1194 WHERE
1195 now()<=om_validite_fin
1196 AND now()>=om_validite_debut
1197 AND dossier_autorisation_type_detaille=".
1198 $this->valF['dossier_autorisation_type_detaille'];
1199 $this->cerfa = $this->db->getOne($sql);
1200 $this->f->addToLog(
1201 "ajoutDossierInstruction() : db->getone(\"".$sql."\");",
1202 VERBOSE_MODE
1203 );
1204 $this->f->isDatabaseError($this->cerfa);
1205 return $this->cerfa;
1206 }
1207
1208
1209 /**
1210 * Méthode permettant d'ajouter un dossier d'autorisation.
1211 *
1212 * @param integer $id identifiant de la demande
1213 * @param database &$db handler de la base de donnée
1214 * @param array $val tableau de valeurs postées via le formulaire
1215 * @param boolean $DEBUG debug
1216 *
1217 * @return boolean false si erreur
1218 */
1219 function ajoutDossierAutorisation($id, &$db, $val, $DEBUG) {
1220 $dossier_autorisation = $this->f->get_inst__om_dbform(array(
1221 "obj" => "dossier_autorisation",
1222 "idx" => "]",
1223 ));
1224 $id_etat_initial_da =
1225 $this->f->getParameter('id_etat_initial_dossier_autorisation');
1226
1227 // Vérification de l'existance d'un état initial des DA dans la table
1228 // om_parametre afin d'éviter d'eventuelle erreur de base de données
1229 if(isset($id_etat_initial_da)) {
1230 $sql = "SELECT count(*) FROM ".DB_PREFIXE."etat_dossier_autorisation
1231 WHERE etat_dossier_autorisation = ".$id_etat_initial_da;
1232 $count = $this->db->getOne($sql);
1233 $this->f->addToLog(
1234 "ajoutDossierAutorisation() : db->getOne(\"".$sql."\")",
1235 VERBOSE_MODE
1236 );
1237 if ($this->f->isDatabaseError($count, true)){
1238 $this->f->addToLog(
1239 "ajoutDossierAutorisation() : ERROR db->getOne(\"".$sql."\")",
1240 DEBUG_MODE
1241 );
1242
1243 return false;
1244 }
1245 if($count != 1) {
1246 $this->f->addToLog(__METHOD__."() : ERROR - Plusieurs états de dossier d'autorisation ont cet identifiant.", DEBUG_MODE);
1247
1248 return false;
1249 }
1250
1251 // On récupère les paramètres de la collectivité concernée
1252 // par la demande.
1253 $collectivite_parameters = $this->f->getCollectivite($this->valF['om_collectivite']);
1254 // Le paramètre 'insee' est obligatoire si il n'est pas présent
1255 // dans le tableau des paramètres alors on stoppe le traitement.
1256 if (!isset($collectivite_parameters['insee'])) {
1257 $this->f->addToLog(
1258 __METHOD__."(): ERROR om_parametre 'insee' inexistant.",
1259 DEBUG_MODE
1260 );
1261
1262 return false;
1263 }
1264
1265 // La méthode ajouter prend en paramètre un tableau associatif
1266 // contenant toutes les champs de la classe instanciée,
1267 // d'où l'initialisation du tableau en bouclant sur la liste des
1268 // champs du DA
1269 foreach($dossier_autorisation->champs as $value) {
1270 $valAuto[$value] = null;
1271 }
1272
1273 // Définition des valeurs à insérer
1274 $valAuto['om_collectivite']=
1275 $this->valF['om_collectivite'];
1276 $valAuto['dossier_autorisation']="";
1277 $valAuto['exercice']=null;
1278 $valAuto['insee']= $collectivite_parameters['insee'];
1279 $valAuto['arrondissement']=
1280 $this->getArrondissement($this->valF['terrain_adresse_code_postal']);
1281 $valAuto['etat_dossier_autorisation']=$id_etat_initial_da;
1282 $valAuto['erp_numero_batiment']=null;
1283 $valAuto['erp_ouvert']=null;
1284 $valAuto['erp_arrete_decision']=null;
1285 $valAuto['dossier_autorisation_type_detaille']=
1286 $this->valF['dossier_autorisation_type_detaille'];
1287 $valAuto['depot_initial']=
1288 $this->dateDBToForm($this->valF['date_demande']);
1289 $valAuto['terrain_references_cadastrales']=
1290 $this->valF['terrain_references_cadastrales'];
1291 $valAuto['terrain_adresse_voie_numero']=
1292 $this->valF['terrain_adresse_voie_numero'];
1293 $valAuto['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1294 $valAuto['terrain_adresse_lieu_dit']=
1295 $this->valF['terrain_adresse_lieu_dit'];
1296 $valAuto['terrain_adresse_localite']=
1297 $this->valF['terrain_adresse_localite'];
1298 $valAuto['terrain_adresse_code_postal']=
1299 $this->valF['terrain_adresse_code_postal'];
1300 $valAuto['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1301 $valAuto['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1302 $valAuto['terrain_superficie']=$this->valF['terrain_superficie'];
1303 $valAuto['numero_version']=-1;
1304 // Ajout du dossier dans la base
1305 if($dossier_autorisation->ajouter($valAuto, $db, $DEBUG) === false) {
1306 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'autorisation.", DEBUG_MODE);
1307
1308 return false;
1309 }
1310 // Liaison du dossier ajouter à la demande
1311 $this->valF['dossier_autorisation'] =
1312 $dossier_autorisation->valF['dossier_autorisation'];
1313
1314 return true;
1315 }
1316
1317 $this->f->addToLog(__METHOD__."() : ERROR - Le paramétre id_etat_initial_dossier_autorisation n'existe pas.", DEBUG_MODE);
1318
1319 return false;
1320 }
1321
1322 /**
1323 * Méthode permettant d'ajouter un dossier d'instruction.
1324 *
1325 * @param integer $id identifiant de la demande
1326 * @param database &$db handler de la base de donnée
1327 * @param array $val tableau de valeurs postées via
1328 * le formulaire
1329 * @param boolean $DEBUG debug
1330 * @param integer $dossier_instruction_type identifiant du DI type
1331 *
1332 * @return boolean false si erreur
1333 */
1334 function ajoutDossierInstruction($id, &$db, $val, $DEBUG, $dossier_instruction_type) {
1335 $dossier = $this->f->get_inst__om_dbform(array(
1336 "obj" => "dossier",
1337 "idx" => "]",
1338 ));
1339 foreach($dossier->champs as $value) {
1340 $valInstr[$value] = null;
1341 }
1342 $datd = $this->f->get_inst__om_dbform(array(
1343 "obj" => "dossier_autorisation_type_detaille",
1344 "idx" => $this->valF['dossier_autorisation_type_detaille'],
1345 ));
1346
1347 /*Ajout de la variable dossier_instruction_type à l'objet dossier pour le
1348 * versionning
1349 */
1350 $dossier->setDossierInstructionType($dossier_instruction_type);
1351
1352 // Définition des valeurs à entrée dans la table
1353 $valInstr['om_collectivite']=$this->valF['om_collectivite'];
1354 $valInstr['dossier_instruction_type']=$dossier_instruction_type;
1355 $valInstr['date_depot']=$this->dateDBToForm($this->valF['date_demande']);
1356 $valInstr['date_dernier_depot']=$this->dateDBToForm($this->valF['date_demande']);
1357 $valInstr['date_demande']=$this->dateDBToForm($this->valF['date_demande']);
1358 $valInstr['depot_initial']=$this->dateDBToForm($this->valF['date_demande']);
1359 $annee = DateTime::createFromFormat("Y-m-d", $this->valF['date_demande']);
1360 $valInstr['annee']=$annee->format("y");
1361 $valInstr['depot_electronique']=$this->valF['depot_electronique'];
1362 $valInstr['parcelle_temporaire']=$this->valF['parcelle_temporaire'];
1363 $valInstr['terrain_references_cadastrales']=
1364 $this->valF['terrain_references_cadastrales'];
1365 $valInstr['terrain_adresse_voie_numero']=
1366 $this->valF['terrain_adresse_voie_numero'];
1367 $valInstr['terrain_adresse_voie']=$this->valF['terrain_adresse_voie'];
1368 $valInstr['terrain_adresse_lieu_dit']=$this->valF['terrain_adresse_lieu_dit'];
1369 $valInstr['terrain_adresse_localite']=$this->valF['terrain_adresse_localite'];
1370 $valInstr['terrain_adresse_code_postal']=
1371 $this->valF['terrain_adresse_code_postal'];
1372 $valInstr['terrain_adresse_bp']=$this->valF['terrain_adresse_bp'];
1373 $valInstr['terrain_adresse_cedex']=$this->valF['terrain_adresse_cedex'];
1374 $valInstr['terrain_superficie']=$this->valF['terrain_superficie'];
1375 $valInstr['description']="";
1376 $valInstr['dossier_autorisation']=$this->valF['dossier_autorisation'];
1377 if ($this->valF["autorisation_contestee"] != "") {
1378 $valInstr['autorisation_contestee'] = str_replace(' ', '', $this->valF['autorisation_contestee']);
1379 }
1380
1381 /*
1382 * Gestion de la qualification
1383 * */
1384 // Initialise le champ à false
1385 $valInstr['a_qualifier'] = false;
1386
1387 // Récupère l'information depuis le type de la demande
1388 $qualification = $this->get_qualification($val['demande_type']);
1389
1390 // Si le dossier doit être à qualifier
1391 if ($qualification === 't') {
1392 // Met le champ à true
1393 $valInstr['a_qualifier'] = true;
1394 }
1395
1396 /*
1397 * Gestion de la simulation des taxes
1398 */
1399 // Récupère l'instance du cerfa lié au type détaillé du DA
1400 $inst_cerfa = $this->get_inst_cerfa_by_datd($val['dossier_autorisation_type_detaille']);
1401
1402 // Si l'option de simulation est activée pour la collectivité du dossier
1403 // et que le cerfa du dossier à les champs requis
1404 if ($this->f->is_option_simulation_taxes_enabled($val['om_collectivite']) === true
1405 && $inst_cerfa->can_simulate_taxe_amenagement() === true) {
1406
1407 // Récupère le paramétrage des taxes
1408 $inst_taxe_amenagement = $this->get_inst_taxe_amenagement_by_om_collectivite($this->valF['om_collectivite']);
1409 // Si un paramétrage des taxes est récupéré pour la collectivité
1410 if ($inst_taxe_amenagement !== null) {
1411
1412 // Si la taxe d'aménagement à un seul secteur
1413 if ($inst_taxe_amenagement->has_one_secteur() == true) {
1414 // Sélectionne l'unique secteur automatiquement
1415 $valInstr['tax_secteur'] = 1;
1416 }
1417 }
1418 }
1419
1420 //
1421 if($dossier->ajouter($valInstr, $db, $DEBUG) === false) {
1422 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le dossier d'instruction.", DEBUG_MODE);
1423 return false;
1424 }
1425
1426 //Affichage de message à l'utilisateur concernant un problème lors de
1427 //l'affectation de l'instructeur au dossier d'instruction
1428 if ($dossier->valF['dossier_autorisation'] === '' &&
1429 $dossier->valF['instructeur'] === null){
1430 $this->addToMessage(
1431 _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1432 );
1433 }
1434 elseif ( $dossier->valF['instructeur'] === null ){
1435 if ($this->f->isAccredited("dossier_modifier_instructeur")) {
1436 $this->addToMessage("<br/> ".
1437 _("Pensez a assigner un instructeur a ce dossier.")
1438 );
1439 } else {
1440 $this->addToMessage(
1441 _("Aucun instructeur compatible avec ce dossier, contactez votre administrateur afin d'en assigner un a ce dossier.")
1442 );
1443 }
1444 }
1445
1446 // Liaison du dossier ajouter à la demande
1447 $this->valF['dossier_instruction'] = $dossier->valF['dossier'];
1448
1449 //
1450 return true;
1451 }
1452
1453 /**
1454 * Méthode permettant d'ajouter les données techniques d'un DA.
1455 *
1456 * @param integer $id identifiant de la demande
1457 * @param database &$db handler de la base de donnée
1458 * @param array $val tableau de valeurs postées via le formulaire
1459 * @param boolean $DEBUG debug
1460 *
1461 * @return boolean false si erreur
1462 */
1463 function ajoutDonneesTechniquesDA($id, &$db, $val, $DEBUG) {
1464 $this->DTDA = $this->f->get_inst__om_dbform(array(
1465 "obj" => "donnees_techniques",
1466 "idx" => "]",
1467 ));
1468
1469 // Champs tous à NULL car seul le champ concernant le dossier
1470 // d'autorisation sera rempli
1471 foreach($this->DTDA->champs as $value) {
1472 $valF[$value] = null;
1473 }
1474 // Ajout du numéro de dossier d'instruction
1475 $valF['dossier_autorisation']=$this->valF['dossier_autorisation'];
1476 // Identifiant du cerfa
1477 $valF['cerfa'] = $this->getIdCerfa();
1478 //On vérifie que ce type détaille de dossier d'autorisation a un CERFA
1479 if ( $valF['cerfa'] !== "" && is_numeric($valF['cerfa'])){
1480 // Ajout des données techniques
1481 if($this->DTDA->ajouter($valF, $db, $DEBUG) === false) {
1482 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du dossier d'autorisation.", DEBUG_MODE);
1483 return false;
1484 }
1485 }
1486 else {
1487 //On indique que le dossier d'autorisation n'a pas de données techniques
1488 $this->DTDA = null;
1489 //Aucun CERFA n'est paramétré pour ce type détaillé de dossier d'autorisation
1490 $this->f->addToLog(__METHOD__."() : ERROR - Aucun CERFA paramétré.", DEBUG_MODE);
1491 return -1;
1492 }
1493
1494 //
1495 return true;
1496 }
1497
1498 /**
1499 * Ajout des liens demandeurs / dossier d'autorisation s'ils n'y sont pas déjà
1500 **/
1501 function ajoutLiensDossierAutorisation($id, &$db, $val, $DEBUG) {
1502 // Création des liens entre le dossier autorisation et les demandeurs
1503 include '../sql/pgsql/demande.form.inc.php';
1504 $ldad = $this->f->get_inst__om_dbform(array(
1505 "obj" => "lien_dossier_autorisation_demandeur",
1506 "idx" => "]",
1507 ));
1508 // Recupération des demandeurs liés à la demande
1509 $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur.
1510 " AND lien_demande_demandeur.demandeur NOT IN (
1511 SELECT lien_dossier_autorisation_demandeur.demandeur
1512 FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
1513 WHERE lien_dossier_autorisation_demandeur.dossier_autorisation =
1514 '".$this->valF['dossier_autorisation']."'
1515 )");
1516 $res = $db->query($sql);
1517 $this->f->addToLog("ajoutLiensDossierAutorisation() : db->query(\"".$sql."\");", VERBOSE_MODE);
1518 if ($this->f->isDatabaseError($res, true)) {
1519 return false;
1520 }
1521 while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1522 $row['lien_dossier_autorisation_demandeur'] = NULL;
1523 $row['dossier_autorisation'] = $this->valF['dossier_autorisation'];
1524 if ($ldad->ajouter($row, $db, $DEBUG) === false) {
1525 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'autorisation.", DEBUG_MODE);
1526 return false;
1527 }
1528 }
1529
1530 //
1531 return true;
1532 }
1533
1534 /**
1535 * Ajout des liens demandeurs / dossier d'autorisation
1536 **/
1537 function ajoutLiensDossierInstruction($id, &$db, $val, $DEBUG) {
1538 // Création des liens entre le dossier instruction et les demandeurs
1539 include '../sql/pgsql/demande.form.inc.php';
1540 $ldd = $this->f->get_inst__om_dbform(array(
1541 "obj" => "lien_dossier_demandeur",
1542 "idx" => "]",
1543 ));
1544 // Recupération des demandeurs liés à la demande
1545 $sql = str_replace("<demande>",$this->valF['demande'],$sql_lien_demande_demandeur);
1546 $res = $db->query($sql);
1547 $this->f->addToLog("ajoutLiensDossierInstruction() : db->query(\"".$sql."\");", VERBOSE_MODE);
1548 if ($this->f->isDatabaseError($res, true)) {
1549 return false;
1550 }
1551 while($row = &$res->fetchRow(DB_FETCHMODE_ASSOC)) {
1552 $row['lien_dossier_demandeur'] = NULL;
1553 $row['dossier'] = $this->valF['dossier_instruction'];
1554 if ($ldd->ajouter($row, $db, $DEBUG) === false) {
1555 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le demandeurs et le dossier d'instruction.", DEBUG_MODE);
1556 return false;
1557 }
1558 }
1559
1560 //
1561 return true;
1562 }
1563
1564 /*
1565 * Récupère l'identifiant d'un arrondissement à partir d'un code postal
1566 */
1567 function getArrondissement($terrain_adresse_code_postal){
1568
1569 $arrondissement = NULL;
1570
1571 $sql = "SELECT
1572 arrondissement
1573 FROM
1574 ".DB_PREFIXE."arrondissement
1575 WHERE
1576 code_postal = '$terrain_adresse_code_postal' ";
1577 $this->addToLog("demande.class.php : ".$sql." execute <br>", EXTRA_VERBOSE_MODE);
1578
1579 $res = $this->db->query($sql);
1580 $this->f->addToLog("getArrondissement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1581 $this->f->isDatabaseError($res);
1582
1583 if( $res->numrows() > 0 ) {
1584
1585 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1586 $arrondissement = $row['arrondissement'];
1587 }
1588
1589 return $arrondissement;
1590 }
1591
1592 /*
1593 * Récupère l'évènement lié à un type de demande
1594 */
1595 function getEvenement($demande_type){
1596
1597 $evenement = null;
1598
1599 $sql =
1600 "SELECT
1601 evenement
1602 FROM
1603 ".DB_PREFIXE."demande_type
1604 WHERE
1605 demande_type = $demande_type";
1606
1607 $res = $this->db->query($sql);
1608 $this->f->addToLog("getEvenement() : db->query(\"".$sql."\")", VERBOSE_MODE);
1609 $this->f->isDatabaseError($res);
1610
1611 if ( $res->numrows() > 0 ){
1612
1613 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
1614 $evenement = $row['evenement'];
1615 }
1616
1617 return $evenement;
1618 }
1619
1620
1621
1622 /**
1623 * Retourne le libellé du dossier d'autorisation
1624 * @param string $dossier_autorisation Identifiant du dossier d'autorisation
1625 * @return string Libellé dossier d'autorisation
1626 */
1627 function get_dossier_autorisation_libelle($dossier_autorisation) {
1628
1629 $dossier_autorisation_libelle = "";
1630
1631 // Requête SQL
1632 $sql = "SELECT
1633 dossier_autorisation_libelle
1634 FROM
1635 ".DB_PREFIXE."dossier_autorisation
1636 WHERE
1637 dossier_autorisation = '$dossier_autorisation'";
1638
1639 $dossier_autorisation_libelle = $this->db->getOne($sql);
1640 $this->addToLog("get_dossier_autorisation_libelle(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1641 $this->f->isDatabaseError($dossier_autorisation_libelle);
1642
1643 // Retourne le résultat
1644 return $dossier_autorisation_libelle;
1645 }
1646
1647 /**
1648 * Retourne le libellé du dossier d'autorisation.
1649 * @param string $dossier Identifiant du dossier d'autorisation
1650 *
1651 * @return string Libellé dossier d'autorisation
1652 */
1653 function get_dossier_libelle($dossier) {
1654
1655 $dossier_libelle = "";
1656
1657 // Requête SQL
1658 $sql = "SELECT
1659 dossier_libelle
1660 FROM
1661 ".DB_PREFIXE."dossier
1662 WHERE
1663 dossier = '$dossier'";
1664
1665 $dossier_libelle = $this->db->getOne($sql);
1666 $this->addToLog(__METHOD__."(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
1667 $this->f->isDatabaseError($dossier_libelle);
1668
1669 // Retourne le résultat
1670 return $dossier_libelle;
1671 }
1672
1673 /**
1674 * Ajout des dossiers
1675 **/
1676 function triggerajouter($id, &$db = null, $val = array(), $DEBUG = null) {
1677
1678 include '../sql/pgsql/demande.form.inc.php';
1679
1680 if($this->valF["demande_type"] != null) {
1681 $res = $db->query(
1682 str_replace(
1683 '<idx>',
1684 $this->valF['demande_type'],
1685 $sql_demande_type_details_by_id
1686 )
1687 );
1688 $this->f->addToLog(
1689 "triggerAjouter() : db->query(\"".
1690 str_replace(
1691 '<idx>',
1692 $this->valF['demande_type'],
1693 $sql_demande_type_details_by_id
1694 )."\")",
1695 VERBOSE_MODE
1696 );
1697 if ($this->f->isDatabaseError($res, true)) {
1698 return false;
1699 }
1700 // Attribut permettant de définir si un dossier a été créé
1701 $this->ajoutDI = false;
1702 $dossier_type = $res->fetchRow(DB_FETCHMODE_ASSOC);
1703 // Création du dossier_autorisation
1704 if($this->valF['dossier_autorisation'] == "") {
1705 //
1706 if($this->ajoutDossierAutorisation($id, $db, $val, $DEBUG) === false) {
1707 $this -> addToMessage(
1708 _("Erreur lors de l'enregistrement de la demande.")." ".
1709 _("Contactez votre administrateur.")
1710 );
1711 $this->correct = false;
1712 return false;
1713 }
1714 //
1715 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
1716 if ($inst_da->is_dossier_autorisation_visible()) {
1717 $this -> addToMessage(
1718 _("Creation du dossier d'autorisation no").
1719 '<span id="new_da">'.
1720 $this->get_dossier_autorisation_libelle(
1721 $this->valF['dossier_autorisation']
1722 ).'</span>'
1723 );
1724 }
1725 // Ajout des données techniques au dossier d'autorisation
1726 if($this->ajoutDonneesTechniquesDA($id, $db, $val, $DEBUG) === false) {
1727 $this -> addToMessage(
1728 _("Erreur lors de l'enregistrement de la demande.")." ".
1729 _("Contactez votre administrateur.")
1730 );
1731 $this->correct = false;
1732 return false;
1733 }
1734 } else {
1735 $sqlIdDTDA = "SELECT donnees_techniques
1736 FROM ".DB_PREFIXE."donnees_techniques
1737 WHERE dossier_autorisation='".
1738 $this->valF['dossier_autorisation']."'";
1739 $idDTDA = $this->db->getOne($sqlIdDTDA);
1740 $this->addToLog(
1741 "triggerAjouter(): db->getOne(\"".$sqlIdDTDA."\")",
1742 VERBOSE_MODE
1743 );
1744 if ($this->f->isDatabaseError($idDTDA, true)) {
1745 return false;
1746 }
1747
1748 $this->DTDA = null;
1749 if ($idDTDA!=="" && is_numeric($idDTDA)){
1750 $this->DTDA = $this->f->get_inst__om_dbform(array(
1751 "obj" => "donnees_techniques",
1752 "idx" => $idDTDA,
1753 ));
1754 $this->DTDA->setValFFromVal();
1755 }
1756 }
1757
1758 // Enregistrement du numéro dossier existant
1759 // (il sera écrasé si un DI est créé)
1760 if ($this->getParameter("idx_dossier") != "") {
1761 $this->valF['dossier_instruction'] = $this->getParameter("idx_dossier");
1762 }
1763 // Création du dossier d'instruction
1764 if($dossier_type['dossier_instruction_type'] != null) {
1765 if($this->ajoutDossierInstruction(
1766 $id,
1767 $db,
1768 $val,
1769 $DEBUG,
1770 $dossier_type['dossier_instruction_type']
1771 ) === false ) {
1772 $this -> addToMessage(
1773 _("Erreur lors de l'enregistrement de la demande.")." ".
1774 _("Contactez votre administrateur.")
1775 );
1776 $this->correct = false;
1777 return false;
1778 }
1779 // Libellé du dossier
1780 $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
1781 // Message de validation
1782 $this -> addToMessage(
1783 _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"."<br/>"
1784 );
1785
1786 // Attribut permettant de définir si un dossier a été créé.
1787 $this->ajoutDI = true;
1788 }
1789
1790 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $this->valF['dossier_autorisation_type_detaille']);
1791 $code_datd = $inst_datd->getVal('code');
1792
1793 $obj = "dossier_instruction";
1794 if ($code_datd === 'REC' OR $code_datd === 'REG') {
1795 $obj = "dossier_contentieux_tous_recours";
1796 }
1797 if ($code_datd === 'IN') {
1798 $obj = "dossier_contentieux_toutes_infractions";
1799 }
1800
1801 // Template du lien vers le DI
1802 $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>";
1803
1804 // Lien vers le DI
1805 $link_di = sprintf($template_link_di, _("Visualiser le dossier d'instruction / modifier la demande"), $this->valF['dossier_instruction'], _("Acceder au dossier d'instruction"));
1806
1807 // Message affiché à l'utilisateur
1808 $this->addToMessage($link_di."<br/>");
1809
1810 /*Ajout de l'arrondissement à partir du code postal*/
1811 if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
1812
1813 $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
1814 }
1815 }
1816
1817 //
1818 return true;
1819 }
1820
1821 /**
1822 * TRIGGER - triggerajouterapres.
1823 *
1824 * - Ajout des délégataires et pétitionnaires
1825 * - ...
1826 * - Option de numérisation
1827 * - Interface avec le référentiel ERP [109]
1828 * - Interface avec le référentiel ERP [112]
1829 * - Interface avec le référentiel ERP [110]
1830 * - Interface avec le référentiel ERP [107]
1831 *
1832 * @return boolean
1833 */
1834 function triggerajouterapres($id, &$db = null, $val = array(), $DEBUG = null) {
1835
1836 // Récupération d'informations nécessaires seulement lors de l'envoi de messages ERP
1837 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true) {
1838 // Instanciation du dossier d'instruction concerné par la demande en
1839 // cours d'ajout avant modification éventuelle par l'instruction
1840 $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
1841 // Récupère l'état du dossier avant l'exécution d'une éventuelle action
1842 // associée à l'événement d'instruction : utile pour le message 112 vers
1843 // le référentiel ERP
1844 $etat_di_before_instr = $this->getEtatDossier($inst_di->getVal($inst_di->clePrimaire));
1845 }
1846
1847 /**
1848 *
1849 */
1850 if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
1851 return false;
1852 }
1853
1854 // Ajout des lliens entre dossier_autorisation et demandeur
1855 if(!empty($this->valF['dossier_autorisation'])) {
1856 if ($this->ajoutLiensDossierAutorisation($id, $db, $val, $DEBUG) == false) {
1857 return false;
1858 }
1859 }
1860 // Ajout des liens entre dossier et demandeur
1861 if($this->ajoutDI === TRUE) {
1862 if ($this->ajoutLiensDossierInstruction($id, $db, $val, $DEBUG) == false) {
1863 return false;
1864 }
1865 }
1866
1867 // Création d'un lien entre le nouveau DI et le dossier contesté
1868 if ($this->valF["autorisation_contestee"] != "") {
1869 if ($this->ajoutLienDossierConteste() === false) {
1870 return false;
1871 }
1872 }
1873
1874 // Duplication des lots (et leurs données techniques) et
1875 // liaison au nouveau dossier_d'instruction
1876 if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
1877 $this->lienLotDossierInstruction($id, $db, $val, $DEBUG);
1878 }
1879
1880 /*Création du lien de téléchargement de récépissé de demande*/
1881 if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
1882 && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
1883
1884 /*Récupérer l'événement lié à ce type de demande*/
1885 $evenement = $this->getEvenement($this->valF['demande_type']);
1886
1887 /*Récupération de la lettre type de l'événement*/
1888 $lettretype = $this->f->getLettreType($evenement);
1889
1890 /*Création d'une nouvelle instruction avec cet événement*/
1891 /*Données*/
1892 $valInstr['instruction']=NULL;
1893
1894 $valInstr['destinataire']=$this->valF['dossier_instruction'];
1895 $valInstr['dossier']=$this->valF['dossier_instruction'];
1896 // Récupère la date de la demande
1897 $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
1898 $valInstr['evenement']=$evenement;
1899 $valInstr['lettretype']=$lettretype;
1900 $valInstr['complement_om_html']="";
1901 $valInstr['complement2_om_html']="";
1902
1903 $valInstr['action']="initialisation";
1904 $valInstr['delai']="2";
1905 $valInstr['etat']="notifier";
1906 $valInstr['accord_tacite']="Oui";
1907 $valInstr['delai_notification']="1";
1908 $valInstr['archive_delai']="0";
1909 $valInstr['archive_date_complet']=NULL;
1910 $valInstr['archive_date_dernier_depot']=NULL;
1911 $valInstr['archive_date_rejet']=NULL;
1912 $valInstr['archive_date_limite']=NULL;
1913 $valInstr['archive_date_notification_delai']=NULL;
1914 $valInstr['archive_accord_tacite']="Non";
1915 $valInstr['archive_etat']="initialiser";
1916 $valInstr['archive_date_decision']=NULL;
1917 $valInstr['archive_avis']="";
1918 $valInstr['archive_date_validite']=NULL;
1919 $valInstr['archive_date_achevement']=NULL;
1920 $valInstr['archive_date_chantier']=NULL;
1921 $valInstr['archive_date_conformite']=NULL;
1922 $valInstr['archive_incompletude']=NULL;
1923 $valInstr['archive_incomplet_notifie']=NULL;
1924 $valInstr['archive_evenement_suivant_tacite']="";
1925 $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
1926 $valInstr['archive_etat_pendant_incompletude']=NULL;
1927 $valInstr['archive_date_limite_incompletude']=NULL;
1928 $valInstr['archive_delai_incompletude']=NULL;
1929 $valInstr['archive_autorite_competente']=NULL;
1930 $valInstr['complement3_om_html']="";
1931 $valInstr['complement4_om_html']="";
1932 $valInstr['complement5_om_html']="";
1933 $valInstr['complement6_om_html']="";
1934 $valInstr['complement7_om_html']="";
1935 $valInstr['complement8_om_html']="";
1936 $valInstr['complement9_om_html']="";
1937 $valInstr['complement10_om_html']="";
1938 $valInstr['complement11_om_html']="";
1939 $valInstr['complement12_om_html']="";
1940 $valInstr['complement13_om_html']="";
1941 $valInstr['complement14_om_html']="";
1942 $valInstr['complement15_om_html']="";
1943 $valInstr['avis_decision']=NULL;
1944 $valInstr['date_finalisation_courrier']=NULL;
1945 $valInstr['date_envoi_signature']=NULL;
1946 $valInstr['date_retour_signature']=NULL;
1947 $valInstr['date_envoi_rar']=NULL;
1948 $valInstr['date_retour_rar']=NULL;
1949 $valInstr['date_envoi_controle_legalite']=NULL;
1950 $valInstr['date_retour_controle_legalite']=NULL;
1951 $valInstr['signataire_arrete']=NULL;
1952 $valInstr['numero_arrete']=NULL;
1953 $valInstr['code_barres']=NULL;
1954 $valInstr['om_fichier_instruction']=NULL;
1955 $valInstr['om_final_instruction']=NULL;
1956 $valInstr['document_numerise']=NULL;
1957 $valInstr['autorite_competente']=NULL;
1958 $valInstr['duree_validite_parametrage']="0";
1959 $valInstr['duree_validite']="0";
1960 $valInstr['date_depot']=NULL;
1961 $valInstr['om_final_instruction_utilisateur']= "f";
1962 $valInstr['om_fichier_instruction_dossier_final']= "f";
1963 $valInstr['created_by_commune']= "f";
1964 $valInstr['archive_date_cloture_instruction'] = null;
1965 $valInstr['archive_date_premiere_visite'] = null;
1966 $valInstr['archive_date_derniere_visite'] = null;
1967 $valInstr['archive_date_contradictoire'] = null;
1968 $valInstr['archive_date_retour_contradictoire'] = null;
1969 $valInstr['archive_date_ait'] = null;
1970 $valInstr['archive_date_transmission_parquet'] = null;
1971
1972 // Récupération des champs archive si cette demande a créée un dossier
1973 // d'instruction mais pas un P0
1974 if (!is_null($this->valF['dossier_instruction']) &&
1975 $this->valF['dossier_instruction'] !== "" ){
1976
1977 // Requête
1978 $sql = "SELECT dossier_instruction_type.code
1979 FROM ".DB_PREFIXE."demande_type
1980 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1981 ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1982 WHERE demande_type.demande_type = ".$this->valF['demande_type'];
1983 $res = $db->getOne($sql);
1984 $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1985 if ($this->f->isDatabaseError($res, true)) {
1986 return false;
1987 }
1988
1989 // On vérifie que ce n'est pas un P0
1990 if ( strcmp($res, "P") !== 0 ){
1991
1992 $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
1993
1994 if ($res == false) {
1995 return false;
1996 }
1997
1998 if (isset($res['archive_delai'])) {
1999 $valInstr['archive_delai']=$res["archive_delai"];
2000 }
2001 if (isset($res['archive_date_complet'])) {
2002 $valInstr['archive_date_complet']=$res["archive_date_complet"];
2003 }
2004 if (isset($res['archive_date_dernier_depot'])) {
2005 $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
2006 }
2007 if (isset($res['archive_date_rejet'])) {
2008 $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
2009 }
2010 if (isset($res['archive_date_limite'])) {
2011 $valInstr['archive_date_limite']=$res["archive_date_limite"];
2012 }
2013 if (isset($res['archive_date_notification_delai'])) {
2014 $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
2015 }
2016 if (isset($res['archive_accord_tacite'])) {
2017 $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
2018 }
2019 if (isset($res['archive_etat'])) {
2020 $valInstr['archive_etat']=$res["archive_etat"];
2021 }
2022 if (isset($res['archive_date_decision'])) {
2023 $valInstr['archive_date_decision']=$res["archive_date_decision"];
2024 }
2025 if (isset($res['archive_avis'])) {
2026 $valInstr['archive_avis']=$res["archive_avis"];
2027 }
2028 if (isset($res['archive_date_validite'])) {
2029 $valInstr['archive_date_validite']=$res["archive_date_validite"];
2030 }
2031 if (isset($res['archive_date_achevement'])) {
2032 $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
2033 }
2034 if (isset($res['archive_date_chantier'])) {
2035 $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
2036 }
2037 if (isset($res['archive_date_conformite'])) {
2038 $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
2039 }
2040 if (isset($res['archive_incompletude'])) {
2041 $valInstr['archive_incompletude']=$res["archive_incompletude"];
2042 }
2043 if (isset($res['archive_incomplet_notifie'])) {
2044 $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
2045 }
2046 if (isset($res['archive_evenement_suivant_tacite'])) {
2047 $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
2048 }
2049 if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
2050 $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
2051 }
2052 if (isset($res['archive_etat_pendant_incompletude'])) {
2053 $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
2054 }
2055 if (isset($res['archive_date_limite_incompletude'])) {
2056 $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
2057 }
2058 if (isset($res['archive_delai_incompletude'])) {
2059 $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
2060 }
2061 if (isset($res['archive_autorite_competente'])) {
2062 $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
2063 }
2064 if (isset($res['archive_date_cloture_instruction'])) {
2065 $valInstr['archive_date_cloture_instruction'] = $res['archive_date_cloture_instruction'];
2066 }
2067 if (isset($res['archive_date_premiere_visite'])) {
2068 $valInstr['archive_date_premiere_visite'] = $res['archive_date_premiere_visite'];
2069 }
2070 if (isset($res['archive_date_derniere_visite'])) {
2071 $valInstr['archive_date_derniere_visite'] = $res['archive_date_derniere_visite'];
2072 }
2073 if (isset($res['archive_date_contradictoire'])) {
2074 $valInstr['archive_date_contradictoire'] = $res['archive_date_contradictoire'];
2075 }
2076 if (isset($res['archive_date_retour_contradictoire'])) {
2077 $valInstr['archive_date_retour_contradictoire'] = $res['archive_date_retour_contradictoire'];
2078 }
2079 if (isset($res['archive_date_ait'])) {
2080 $valInstr['archive_date_ait'] = $res['archive_date_ait'];
2081 }
2082 if (isset($res['archive_date_transmission_parquet'])) {
2083 $valInstr['archive_date_transmission_parquet'] = $res['archive_date_transmission_parquet'];
2084 }
2085 }
2086 }
2087
2088 // Création d'un nouveau dossier
2089 $instruction = $this->f->get_inst__om_dbform(array(
2090 "obj" => "instruction",
2091 "idx" => "]",
2092 ));
2093 $instruction->valF = "";
2094 if ($instruction->ajouter($valInstr, $db, $DEBUG) === false) {
2095 // Suppression des messages valides puisque erreur
2096 $this->msg = '';
2097 $this -> addToMessage($instruction->msg);
2098 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
2099 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
2100 return false;
2101 }
2102
2103 // Finalisation du document
2104 $_GET['obj']='instruction';
2105 $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
2106 $instruction_final = $this->f->get_inst__om_dbform(array(
2107 "obj" => "instruction",
2108 "idx" => $_GET['idx'],
2109 ));
2110
2111 // Si l'instruction a une lettre type associée
2112 // ET si elle n'est pas déjà finalisée
2113 if($instruction_final->getVal('lettretype') != ""
2114 && $instruction_final->getVal('om_final_instruction') !== 't') {
2115 // On se met en contexte de l'action 100 finaliser
2116 $instruction_final->setParameter('maj',100);
2117 // On finalise l'événement d'instruction
2118 $res = $instruction_final->finalize();
2119 // Si échec cela ne stoppe pas la création du dossier
2120 // et l'utilisateur n'en est pas informé dans l'IHM
2121 // mais l'erreur est loguée
2122 if ($res === false) {
2123 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
2124 }
2125 }
2126
2127 // Mise à jour de la demande
2128 $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
2129 $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
2130 $demande_instance = $this->f->get_inst__om_dbform(array(
2131 "obj" => "demande",
2132 "idx" => $this->valF['demande'],
2133 ));
2134 if ($demande_instance->modifier($this->valF, $db, $DEBUG) === false) {
2135 $this -> addToMessage($demande_instance->msg);
2136 $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
2137 return false;
2138 }
2139
2140 // Instance du dossier d'autorisation
2141 $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
2142
2143 // Si l'option d'accès au portail citoyen est activée et que le DA est visible
2144 if ($this->f->is_option_citizen_access_portal_enabled($this->valF['om_collectivite']) === true
2145 && $inst_da->is_dossier_autorisation_visible() === true) {
2146
2147 // Permet de forcer la regénération de la clé citoyen
2148 $force = false;
2149
2150 // Regénération de la clé citoyen si le type de demande le demande
2151 $regeneration_cle_citoyen = $this->get_demande_type_regeneration_cle_citoyen($val['demande_type']);
2152 if ($regeneration_cle_citoyen === true) {
2153 $force = true;
2154 }
2155
2156 // Met à jour la clé d'accès au portail citoyen dans le dossier
2157 // d'autorisation
2158 $update = $inst_da->update_citizen_access_key($force);
2159 //
2160 if ($update !== true) {
2161 //
2162 $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
2163 return false;
2164 }
2165 }
2166
2167 // Si l'instruction initiale a une lettre type liée
2168 if ($instruction->valF['lettretype'] !== ''
2169 && $instruction->valF['lettretype'] !== null) {
2170
2171 // Affichage du récépissé de la demande
2172 $this -> addToMessage("<a
2173 class='lien' id='link_demande_recepisse'
2174 title=\""._("Telecharger le recepisse de la demande")."\"
2175 href='".OM_ROUTE_FORM."&obj=demande&amp;action=100&amp;idx=".
2176 $this->valF[$this->clePrimaire]."' target='_blank'>
2177 <span
2178 class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
2179 title=\""._("Telecharger le recepisse de la demande")."\">".
2180 _("Telecharger le recepisse de la demande").
2181 "</span>".
2182 _("Telecharger le recepisse de la demande")."
2183 </a><br/>");
2184 }
2185 }
2186
2187 // Instanciation du dossier d'instruction concerné par la demande en cours d'ajout.
2188 $inst_di = $this->get_inst_dossier_instruction($this->valF['dossier_instruction']);
2189
2190 /**
2191 * Option de numérisation.
2192 */
2193 // Si l'option est activée
2194 if ($this->f->is_option_digitalization_folder_enabled() === true) {
2195 // Création du répertoire de numérisation pour le dossier en
2196 // question.
2197 $ret = $inst_di->create_or_touch_digitalization_folder();
2198 // Si la création a échouée
2199 if ($ret !== true) {
2200 //
2201 $this->msg = "";
2202 $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
2203 return false;
2204 }
2205 }
2206
2207 /**
2208 * Interface avec le référentiel ERP.
2209 *
2210 * (WS->ERP)[109] Retrait de la demande -> AT
2211 * Déclencheur :
2212 * - L'option ERP est activée
2213 * - Le dossier est de type AT
2214 * - Le dossier est marqué comme "connecté au référentiel ERP"
2215 * - Le formulaire d'ajout de demande est validé avec un type de
2216 * demande correspondant à une demande de retrait
2217 */
2218 //
2219 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2220 && $inst_di->is_connected_to_referentiel_erp() === true
2221 && $this->f->getDATDCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2222 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__retrait__at')))) {
2223 //
2224 $infos = array(
2225 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2226 );
2227 //
2228 $ret = $this->f->send_message_to_referentiel_erp(109, $infos);
2229 if ($ret !== true) {
2230 $this->cleanMessage();
2231 $this->addToMessage(_("Une erreur s'est produite lors de la notification (109) du référentiel ERP. Contactez votre administrateur."));
2232 return false;
2233 }
2234 $this->addToMessage(_("Notification (109) du référentiel ERP OK."));
2235 }
2236
2237 /**
2238 * Interface avec le référentiel ERP.
2239 *
2240 * (WS->ERP)[112] Dépôt de pièces sur une DAT -> AT
2241 * Déclencheur :
2242 * - L'option ERP est activée
2243 * - Le dossier est de type AT
2244 * - Le dossier est marqué comme "connecté au référentiel ERP"
2245 * - Le formulaire d'ajout de demande est validé avec un type de
2246 * demande correspondant à un dépôt de pièces
2247 */
2248 //
2249 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2250 && $inst_di->is_connected_to_referentiel_erp() === true
2251 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2252 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__depot_piece__at')))) {
2253 // Définit le type de pièce par l'état du dossier
2254 $type_piece = "supplementaire";
2255 if ($etat_di_before_instr === 'incomplet') {
2256 $type_piece = "complementaire";
2257 }
2258 //
2259 $infos = array(
2260 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2261 "type_piece" => $type_piece,
2262 );
2263 //
2264 $ret = $this->f->send_message_to_referentiel_erp(112, $infos);
2265 if ($ret !== true) {
2266 $this->cleanMessage();
2267 $this->addToMessage(_("Une erreur s'est produite lors de la notification (112) du référentiel ERP. Contactez votre administrateur."));
2268 return false;
2269 }
2270 $this->addToMessage(_("Notification (112) du référentiel ERP OK."));
2271 }
2272
2273 /**
2274 * Interface avec le référentiel ERP.
2275 *
2276 * (WS->ERP)[110] Demande d'ouverture ERP DAT -> AT
2277 * Déclencheur :
2278 * - L'option ERP est activée
2279 * - Le dossier est de type AT
2280 * - Le dossier est marqué comme "connecté au référentiel ERP"
2281 * - Le formulaire d'ajout de demande est validé avec un type de
2282 * demande correspondant à une demande de visite d'ouverture ERP
2283 */
2284 //
2285 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2286 && $inst_di->is_connected_to_referentiel_erp() === true
2287 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__at')
2288 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__at')))) {
2289 //
2290 $infos = array(
2291 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2292 );
2293 //
2294 $ret = $this->f->send_message_to_referentiel_erp(110, $infos);
2295 if ($ret !== true) {
2296 $this->cleanMessage();
2297 $this->addToMessage(_("Une erreur s'est produite lors de la notification (110) du référentiel ERP. Contactez votre administrateur."));
2298 return false;
2299 }
2300 $this->addToMessage(_("Notification (110) du référentiel ERP OK."));
2301 }
2302
2303 /**
2304 * Interface avec le référentiel ERP.
2305 *
2306 * (WS->ERP)[107] Demande d'ouverture ERP PC -> PC
2307 * Déclencheur :
2308 * - L'option ERP est activée
2309 * - Le dossier est de type PC
2310 * - Le dossier est marqué comme "connecté au référentiel ERP"
2311 * - Le formulaire d'ajout de demande est validé avec un type de
2312 * demande correspondant à une demande de visite d'ouverture ERP
2313 */
2314 //
2315 if ($this->f->is_option_referentiel_erp_enabled($this->valF['om_collectivite']) === true
2316 && $inst_di->is_connected_to_referentiel_erp() === true
2317 && $this->f->getDATCode($inst_di->getVal($inst_di->clePrimaire)) == $this->f->getParameter('erp__dossier__nature__pc')
2318 && in_array($this->valF["demande_type"], explode(";", $this->f->getParameter('erp__demandes__ouverture__pc')))) {
2319 //
2320 $infos = array(
2321 "dossier_instruction" => $inst_di->getVal($inst_di->clePrimaire),
2322 );
2323 //
2324 $ret = $this->f->send_message_to_referentiel_erp(107, $infos);
2325 if ($ret !== true) {
2326 $this->cleanMessage();
2327 $this->addToMessage(_("Une erreur s'est produite lors de la notification (107) du référentiel ERP. Contactez votre administrateur."));
2328 return false;
2329 }
2330 $this->addToMessage(_("Notification (107) du référentiel ERP OK."));
2331 }
2332
2333 //
2334 return true;
2335 }
2336
2337 /**
2338 * Récupère l'état d'un dossier d'instruction
2339 * @param $idxDossier L'identifiant du dossier d'instruction
2340 * @return L'état du dossier d'instruction
2341 */
2342 function getEtatDossier($idxDossier){
2343
2344 $etat = "";
2345
2346 $sql = "SELECT etat.etat
2347 FROM ".DB_PREFIXE."etat
2348 LEFT JOIN
2349 ".DB_PREFIXE."dossier
2350 ON
2351 dossier.etat = etat.etat
2352 WHERE dossier.dossier = '".$idxDossier."'";
2353 $etat = $this->db->getOne($sql);
2354 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
2355 // Si une erreur survient on die
2356 if (database::isError($etat, true)) {
2357 // Appel de la methode de recuperation des erreurs
2358 $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
2359 }
2360
2361 return $etat;
2362 }
2363
2364 /*Ajout du lien demande / demandeur(s)*/
2365 function triggermodifierapres($id, &$db = null, $val = array(), $DEBUG = null) {
2366 $this->listeDemandeur("demande",$this->val[array_search('demande', $this->champs)]);
2367 if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
2368 return false;
2369 }
2370 $this->valIdDemandeur=$this->postedIdDemandeur;
2371
2372 //
2373 return true;
2374 }
2375
2376
2377 /**
2378 * Ajout du lien avec le dossier contesté dans le cas de l'ajout d'un
2379 * dossier de recours.
2380 *
2381 * @return, [type] [description]
2382 */
2383 function ajoutLienDossierConteste() {
2384 // Création des liens entre le dossier instruction créé et le dossier
2385 // contesté
2386 $ldd = $this->f->get_inst__om_dbform(array(
2387 "obj" => "lien_dossier_dossier",
2388 "idx" => "]",
2389 ));
2390 // Préparation des valeurs à mettre en base
2391 $val['lien_dossier_dossier'] = "";
2392 $val['dossier_src'] = $this->valF['dossier_instruction'];
2393 $val['dossier_cible'] = $this->valF["autorisation_contestee"];
2394 $val['type_lien'] = 'auto_recours';
2395
2396 return $ldd->ajouter($val, $this->f->db, NULL);
2397 }
2398
2399
2400 /**
2401 * Gestion des liens entre les lots du DA et le nouveau dossier
2402 **/
2403 function lienLotDossierInstruction($id, $db, $val, $DEBUG) {
2404 $lot = $this->f->get_inst__om_dbform(array(
2405 "obj" => "lot",
2406 "idx" => "]",
2407 ));
2408 $lld = $this->f->get_inst__om_dbform(array(
2409 "obj" => "lien_lot_demandeur",
2410 "idx" => "]",
2411 ));
2412
2413
2414 $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
2415 WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
2416 $resLot = $db -> query($sqlLots);
2417 $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
2418 $this->f->isDatabaseError($resLot);
2419 while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
2420 // Insertion du nouveau lot
2421 $valLot['lot'] = "";
2422 $valLot['libelle'] = $rowLot['libelle'];
2423 $valLot['dossier_autorisation'] = null;
2424 $valLot['dossier'] = $this->valF['dossier_instruction'];
2425 $lot -> ajouter($valLot, $db, $DEBUG);
2426
2427 //Insertion des liens entre dossier et les lots
2428 $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
2429 WHERE lot = ".$rowLot['lot'];
2430 $res = $db -> query($sqlDemandeurs);
2431 $this->f->addToLog(
2432 "lienLotDossierInstruction() : db->query(\"".$sqlDemandeurs."\");",
2433 VERBOSE_MODE
2434 );
2435 if ($this->f->isDatabaseError($res, true)) {
2436 return false;
2437 }
2438
2439 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2440 $valLld["lien_lot_demandeur"] = "";
2441 $valLld["lot"]=$lot->valF['lot'];
2442 $valLld["demandeur"] = $row['demandeur'];
2443 $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
2444 if ($lld->ajouter($valLld, $db, $DEBUG) === false) {
2445 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
2446 return false;
2447 }
2448 }
2449
2450 // Récupération des données techniques du nouveau lots
2451 if($this->ajoutDonneesTechniquesLots(
2452 $id,
2453 $db,
2454 $val,
2455 $DEBUG,
2456 $rowLot['lot'],
2457 $lot->valF['lot']) === false) {
2458 $this -> addToMessage(
2459 _("Erreur lors de l'enregistrement de la demande.")." ".
2460 _("Contactez votre administrateur.")
2461 );
2462 $this->correct = false;
2463 $this->f->addToLog(
2464 "lienLotDossierInstruction() : ERROR ajoutDonneesTechniquesLots",
2465 DEBUG_MODE
2466 );
2467 return false;
2468 }
2469
2470 }
2471
2472 //
2473 return true;
2474 }
2475
2476
2477 /**
2478 * Méthode permettant d'ajouter les données techniques d'un lot.
2479 *
2480 * @param integer $id identifiant de la demande
2481 * @param database &$db handler de la base de donnée
2482 * @param array $val tableau de valeurs postées via le formulaire
2483 * @param boolean $DEBUG debug
2484 * @param integer $lotInit identifiant de lot initial
2485 * @param integer $lotDest identifiant du lot qui va recevoir les données
2486 *
2487 * @return boolean false si erreur
2488 */
2489 function ajoutDonneesTechniquesLots($id, &$db, $val, $DEBUG, $lotInit, $lotDest) {
2490 // Requete permettant de recupérer les données techniques du lot passé
2491 // en paramètre ($lotInit)
2492 $sql_get_dt = "
2493 SELECT donnees_techniques
2494 FROM ".DB_PREFIXE."donnees_techniques
2495 WHERE lot=".$lotInit;
2496 $id_dt = $this->f->db->getOne($sql_get_dt);
2497 // Si des données techniques sont liées au lots on les "copie" et
2498 // on les lies au lot passé en paramètre (lotDest)
2499 if(isset($id_dt) and !empty($id_dt)) {
2500 $this->f->addToLog(
2501 "ajoutDonneesTechniquesLots() : db->getone(\"".$sql_get_dt."\");",
2502 VERBOSE_MODE
2503 );
2504 if ($this->f->isDatabaseError($id_dt, true)){
2505 $this->f->addToLog(
2506 "ajoutDonneesTechniquesLots() : ERROR",
2507 DEBUG_MODE
2508 );
2509 return false;
2510 }
2511 $donnees_techniques = $this->f->get_inst__om_dbform(array(
2512 "obj" => "donnees_techniques",
2513 "idx" => $id_dt,
2514 ));
2515
2516 // Récupération des données dans le tableau des valeurs à insérer
2517 foreach($donnees_techniques->champs as $value) {
2518 $val[$value] = $donnees_techniques->getVal($value);
2519 }
2520 // Modification du lien vers le nouveau lot
2521 $val["lot"] = $lotDest;
2522 // Identifiant du cerfa
2523 $val['cerfa'] = $this->getIdCerfa();
2524 // Ajout des données techniques
2525 if($donnees_techniques->ajouter($val, $db, $DEBUG) === false) {
2526 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
2527 return false;
2528 }
2529 }
2530
2531 //
2532 return true;
2533 }
2534
2535 /**
2536 * Gestion des liens entre la demande et les demandeurs recemment ajoutés
2537 **/
2538 function insertLinkDemandeDemandeur($db, $DEBUG) {
2539
2540 //
2541 $types_demandeur = array(
2542 "petitionnaire_principal",
2543 "delegataire",
2544 "petitionnaire",
2545 "plaignant_principal",
2546 "plaignant",
2547 "contrevenant_principal",
2548 "contrevenant",
2549 "requerant_principal",
2550 "requerant",
2551 "avocat_principal",
2552 "avocat",
2553 "bailleur_principal",
2554 "bailleur",
2555 );
2556 foreach ($types_demandeur as $type) {
2557 // Comparaison des autres demandeurs
2558 if(isset($this->postedIdDemandeur[$type]) === true) {
2559 // Suppression des liens non valides
2560 foreach ($this->valIdDemandeur[$type] as $demandeur) {
2561 // Demandeur
2562 if(!in_array($demandeur, $this->postedIdDemandeur[$type])) {
2563 if ($this->deleteLinkDemandeDemandeur($demandeur, $db, $DEBUG) == false) {
2564 //
2565 return false;
2566 }
2567 }
2568
2569 }
2570 // Ajout des nouveaux liens
2571 foreach ($this->postedIdDemandeur[$type] as $demandeur) {
2572 if(!in_array($demandeur, $this->valIdDemandeur[$type])) {
2573 $principal = false;
2574 if(strpos($type, '_principal') !== false) {
2575 $principal = true;
2576 }
2577 if ($this->addLinkDemandeDemandeur($demandeur, $principal, $db, $DEBUG) == false) {
2578 //
2579 return false;
2580 }
2581 }
2582 }
2583 }
2584 }
2585
2586 //
2587 return true;
2588 }
2589
2590
2591 /**
2592 * Fonction permettant d'ajouter un lien
2593 * entre la table demande et demandeur
2594 **/
2595 function addLinkDemandeDemandeur($id, $principal, $db, $DEBUG) {
2596 $lienAjout = $this->f->get_inst__om_dbform(array(
2597 "obj" => "lien_demande_demandeur",
2598 "idx" => "]",
2599 ));
2600 $lien = array('lien_demande_demandeur' => "",
2601 'petitionnaire_principal' => (($principal)?"t":"f"),
2602 'demande' => $this->valF['demande'],
2603 'demandeur' => $id);
2604 if ($lienAjout->ajouter($lien, $db, $DEBUG) === false) {
2605 $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
2606 return false;
2607 }
2608
2609 //
2610 return true;
2611 }
2612
2613 /**
2614 * Fonction permettant de supprimer un lien
2615 * entre la table demande et demandeur
2616 **/
2617 function deleteLinkDemandeDemandeur($id, $db, $DEBUG) {
2618 // Suppression
2619 $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
2620 "WHERE demande=".$this->valF['demande'].
2621 " AND demandeur=".$id;
2622 // Execution de la requete de suppression de l'objet
2623 $res = $db->query($sql);
2624 // Logger
2625 $this->f->addToLog("deleteLinkDemandeDemandeur(): db->query(\"".$sql."\");", VERBOSE_MODE);
2626 if ($this->f->isDatabaseError($res, true)){
2627 return false;
2628 }
2629
2630 //
2631 return true;
2632 }
2633
2634 /*
2635 * Teste si le lien entre une demande et un demandeur existe
2636 * */
2637 function isLinkDemandeDemandeurExist($idDemandeur) {
2638 $sql = "SELECT count(*)
2639 FROM ".DB_PREFIXE."lien_demande_demandeur
2640 WHERE demande = ".$this->valF['demande'].
2641 "AND demandeur = ".$idDemandeur;
2642 $count = $this->f->db->getOne($sql);
2643 $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\");", VERBOSE_MODE);
2644 $this->f->isDatabaseError($count);
2645 if ($count === 0) {
2646 $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
2647 return false;
2648 } else {
2649 return true;
2650 }
2651
2652 }
2653
2654 /**
2655 * Methode de recupération des valeurs postées
2656 **/
2657 function getPostedValues() {
2658 // Récupération des demandeurs dans POST
2659 $types_demandeur = array(
2660 "petitionnaire_principal",
2661 "delegataire",
2662 "petitionnaire",
2663 "plaignant_principal",
2664 "plaignant",
2665 "contrevenant_principal",
2666 "contrevenant",
2667 "requerant_principal",
2668 "requerant",
2669 "avocat_principal",
2670 "avocat",
2671 "bailleur_principal",
2672 "bailleur",
2673 );
2674 foreach ($types_demandeur as $type) {
2675 if($this->f->get_submitted_post_value($type) !== null AND
2676 $this->f->get_submitted_post_value($type) != '') {
2677 $this->postedIdDemandeur[$type] = $this->f->get_submitted_post_value($type);
2678 }
2679 }
2680 }
2681
2682 /**
2683 * Méthode permettant de récupérer les id des demandeurs liés à la table
2684 * liée passée en paramètre
2685 *
2686 * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2687 * @param string $id Identifiant (clé primaire de la table liée en question)
2688 */
2689 function listeDemandeur($from, $id) {
2690 // Récupération des demandeurs de la base
2691 $sql = "SELECT demandeur.demandeur,
2692 demandeur.type_demandeur,
2693 lien_".$from."_demandeur.petitionnaire_principal
2694 FROM ".DB_PREFIXE."lien_".$from."_demandeur
2695 INNER JOIN ".DB_PREFIXE."demandeur
2696 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2697 WHERE ".$from." = '".$id."'";
2698 $res = $this->f->db->query($sql);
2699 $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2700 $this->f->isDatabaseError($res);
2701 // Stockage du résultat dans un tableau
2702 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2703 $demandeur_type = $row['type_demandeur'];
2704 if ($row['petitionnaire_principal'] == 't'){
2705 $demandeur_type .= "_principal";
2706 }
2707 $this->valIdDemandeur[$demandeur_type][] = $row['demandeur'];
2708 }
2709 }
2710
2711
2712 /**
2713 * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
2714 * d'instruction existant
2715 */
2716 function retour($premier = 0, $recherche = "", $tricol = "") {
2717
2718 echo "\n<a class=\"retour\" ";
2719 echo "href=\"";
2720 //
2721 if($this->getParameter("idx_dossier") != "") {
2722 echo OM_ROUTE_TAB;
2723 echo "&obj=recherche_dossier";
2724
2725 } else {
2726 if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2727 echo OM_ROUTE_FORM;
2728 } else {
2729 echo OM_ROUTE_TAB;
2730 }
2731 echo "&obj=".$this->get_absolute_class_name();
2732 if($this->getParameter("retour")=="form") {
2733 echo "&amp;idx=".$this->getParameter("idx");
2734 echo "&amp;action=3";
2735 }
2736 }
2737 echo "&amp;premier=".$this->getParameter("premier");
2738 echo "&amp;tricol=".$this->getParameter("tricol");
2739 echo "&amp;advs_id=".$this->getParameter("advs_id");
2740 echo "&amp;valide=".$this->getParameter("valide");
2741 //
2742 echo "\"";
2743 echo ">";
2744 //
2745 echo _("Retour");
2746 //
2747 echo "</a>\n";
2748
2749 }
2750
2751
2752 /**
2753 * Cette méthode permet d'afficher des informations spécifiques dans le
2754 * formulaire de l'objet
2755 *
2756 * @param integer $maj Mode de mise à jour
2757 */
2758 function formSpecificContent($maj) {
2759 // Tableau des demandeurs selon le contexte
2760 $listeDemandeur = $this->valIdDemandeur;
2761 /**
2762 * Gestion du bloc des demandeurs
2763 */
2764 // Si le mode est (modification ou suppression ou consultation) ET que
2765 // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
2766 // actif)
2767 if ($this->correct !== true AND
2768 $this->getParameter('validation') == 0 AND
2769 $this->getParameter("maj") != 0) {
2770 // Alors on récupère les demandeurs dans la table lien pour
2771 // affectation des résultats dans $this->valIdDemandeur
2772 $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
2773 $listeDemandeur = $this->valIdDemandeur;
2774 }
2775
2776 // Récupération des valeurs postées
2777 if ($this->getParameter('validation') != 0) {
2778 $listeDemandeur = $this->postedIdDemandeur;
2779 }
2780
2781 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2782 // correct (c'est-à-dire que le formulaire est actif)
2783 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2784 // Alors on positionne le marqueur linkable a true qui permet
2785 // d'afficher ou non les actions de gestion des demandeurs
2786 $linkable = true;
2787 } else {
2788 // Sinon on positionne le marqueur linkable a false qui permet
2789 // d'afficher ou non les actions de gestion des demandeurs
2790 $linkable = false;
2791 }
2792
2793 // Affichage des demandeurs et des actions
2794 // Conteneur de la listes des demandeurs
2795 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
2796 echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
2797 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
2798 ._("Demandeurs")."</legend>";
2799
2800 // Affichage du bloc pétitionnaire principal / délégataire
2801 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2802 echo "<div id=\"petitionnaire_principal_delegataire\">";
2803 // Affichage de la synthèse du pétitionnaire principal
2804 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire_principal");
2805 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2806 echo "<div id=\"delegataire\">";
2807 // Affichage de la synthèse du délégataire
2808 $this->displaySyntheseDemandeur($listeDemandeur, "delegataire");
2809 echo "</div>";
2810 echo "<div class=\"both\"></div>";
2811 echo "</div>";
2812 // Bloc des pétitionnaires secondaires
2813 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2814 echo "<div id=\"listePetitionnaires\">";
2815 $this->displaySyntheseDemandeur($listeDemandeur, "petitionnaire");
2816 echo "</div>";
2817
2818 // Affichage du bloc pétitionnaire principal / délégataire / bailleur
2819 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2820 echo "<div id=\"petitionnaire_principal_delegataire_bailleur\">";
2821 // Doit être utilisé avec la div petitionnaire_principal_delegataire
2822 echo "<div id=\"listeBailleurs\" class=\"col_12\">";
2823 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2824 echo "<div id=\"bailleur_principal\">";
2825 // Affichage de la synthèse
2826 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur_principal");
2827 echo "</div>";
2828 echo "<div id=\"listeAutresBailleurs\">";
2829 $this->displaySyntheseDemandeur($listeDemandeur, "bailleur");
2830 echo "</div>";
2831 echo "</div>";
2832 echo "</div>";
2833
2834 echo "<div id=\"plaignant_contrevenant\">";
2835 // Affichage du bloc contrevenant
2836 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2837 echo "<div id=\"listeContrevenants\" class=\"col_12\">";
2838 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2839 echo "<div id=\"contrevenant_principal\">";
2840 // Affichage de la synthèse
2841 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant_principal");
2842 echo "</div>";
2843 echo "<div id=\"listeAutresContrevenants\">";
2844 // Affichage de la synthèse
2845 $this->displaySyntheseDemandeur($listeDemandeur, "contrevenant");
2846 echo "</div>";
2847 echo "</div>";
2848 // Affichage du bloc plaignant
2849 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2850 echo "<div id=\"listePlaignants\" class=\"col_12\">";
2851 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2852 echo "<div id=\"plaignant_principal\">";
2853 // Affichage de la synthèse
2854 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant_principal");
2855 echo "</div>";
2856 echo "<div id=\"listeAutresPlaignants\">";
2857 $this->displaySyntheseDemandeur($listeDemandeur, "plaignant");
2858 echo "</div>";
2859 echo "</div>";
2860 echo "</div>";
2861 echo "<div id=\"requerant_avocat\">";
2862 // Affichage du bloc requérant
2863 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2864 echo "<div id=\"listeRequerants\" class=\"col_12\">";
2865 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2866 echo "<div id=\"requerant_principal\">";
2867 // Affichage de la synthèse
2868 $this->displaySyntheseDemandeur($listeDemandeur, "requerant_principal");
2869 echo "</div>";
2870 echo "<div id=\"listeAutresRequerants\">";
2871 $this->displaySyntheseDemandeur($listeDemandeur, "requerant");
2872 echo "</div>";
2873 echo "</div>";
2874 // Affichage du bloc avocat
2875 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2876 echo "<div id=\"listeAvocat\" class=\"col_12\">";
2877 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2878 echo "<div id=\"avocat_principal\">";
2879 $this->displaySyntheseDemandeur($listeDemandeur, "avocat_principal");
2880 echo "</div>";
2881 echo "<div id=\"listeAutresAvocats\">";
2882 $this->displaySyntheseDemandeur($listeDemandeur, "avocat");
2883 echo "</div>";
2884 echo "</div>";
2885 echo "</div>";
2886 echo "</fieldset>";
2887 // Champ flag permettant de récupérer la valeur de l'option sig pour
2888 // l'utiliser en javascript, notamment lors du chargement de l'interface
2889 // pour les références cadastrales
2890 // XXX Si un widget pour les références cadastrales existait, il n'y
2891 // aurait pas besoin de faire cela
2892 echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
2893 echo "</div>";
2894 }
2895
2896 function displaySyntheseDemandeur($listeDemandeur, $type) {
2897 // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2898 // correct (c'est-à-dire que le formulaire est actif)
2899 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2900 // Alors on positionne le marqueur linkable a true qui permet
2901 // d'afficher ou non les actions de gestion des demandeurs
2902 $linkable = true;
2903 } else {
2904 // Sinon on positionne le marqueur linkable a false qui permet
2905 // d'afficher ou non les actions de gestion des demandeurs
2906 $linkable = false;
2907 }
2908 // Récupération du type de demandeur pour l'affichage
2909 switch ($type) {
2910 case 'petitionnaire_principal':
2911 $legend = _("Petitionnaire principal");
2912 break;
2913
2914 case 'delegataire':
2915 $legend = _("Autre correspondant");
2916 break;
2917
2918 case 'petitionnaire':
2919 $legend = _("Petitionnaire");
2920 break;
2921
2922 case 'contrevenant_principal':
2923 $legend = _("Contrevenant principal");
2924 break;
2925
2926 case 'contrevenant':
2927 $legend = _("Autre contrevenant");
2928 break;
2929
2930 case 'plaignant_principal':
2931 $legend = _("Plaignant principal");
2932 break;
2933
2934 case 'plaignant':
2935 $legend = _("Autre plaignant");
2936 break;
2937
2938 case 'requerant_principal':
2939 $legend = _("Requérant principal");
2940 break;
2941
2942 case 'requerant':
2943 $legend = _("Autre requérant");
2944 break;
2945
2946 case 'avocat_principal':
2947 $legend = _("Avocat principal");
2948 break;
2949
2950 case 'avocat':
2951 $legend = _("Autre avocat");
2952 break;
2953
2954 case 'bailleur_principal':
2955 $legend = _("Bailleur principal");
2956 break;
2957
2958 case 'bailleur':
2959 $legend = _("Autre bailleur");
2960 break;
2961 }
2962 foreach ($listeDemandeur[$type] as $demandeur_id) {
2963 $obj = str_replace('_principal', '', $type);
2964 $demandeur = $this->f->get_inst__om_dbform(array(
2965 "obj" => $obj,
2966 "idx" => $demandeur_id,
2967 ));
2968 $demandeur -> afficherSynthese($type, $linkable);
2969 $demandeur -> __destruct();
2970 }
2971 // Si en édition de formulaire
2972 if ($this->getParameter("maj") < 2 AND $this->correct !== true) {
2973 // Bouton d'ajout du avocat
2974 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2975 echo "<span id=\"add_".$type."\"
2976 class=\"om-form-button add-16\">".
2977 $legend.
2978 "</span>";
2979 }
2980 }
2981
2982 // {{{
2983
2984 // getter
2985 function getValIdDemandeur() {
2986 return $this->valIdDemandeur;
2987 }
2988 // setter
2989 function setValIdDemandeur($valIdDemandeur) {
2990 $this->valIdDemandeur = $valIdDemandeur;
2991 }
2992
2993 //Supression du lien entre la demandeur et le(s) demandeur(s)
2994 function triggersupprimer($id, &$db = null, $val = array(), $DEBUG = null) {
2995
2996 //Création de la requête
2997 $sql = "DELETE FROM
2998 ".DB_PREFIXE."lien_demande_demandeur
2999 WHERE
3000 demande = $id";
3001
3002 $res = $this->f->db->query($sql);
3003 $this->f->addToLog("triggerSupprimer() : db->query(\"".$sql."\")");
3004 if ($this->f->isDatabaseError($res, true)) {
3005 return false;
3006 }
3007
3008 //
3009 return true;
3010 }
3011
3012 // }}}
3013
3014 /**
3015 * Récupère le champ "qualification" du type de la demande
3016 * @param integer $demande_type Identifiant du type de la demande
3017 * @return boolean
3018 */
3019 function get_qualification($demande_type) {
3020
3021 // Initialise le résultat
3022 $qualification = "";
3023
3024 // Si la condition existe
3025 if (is_numeric($demande_type)) {
3026
3027 // Requête SQL
3028 $sql = "SELECT qualification
3029 FROM ".DB_PREFIXE."demande_type
3030 WHERE demande_type = $demande_type";
3031 $qualification = $this->db->getOne($sql);
3032 $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
3033 VERBOSE_MODE);
3034 $this->f->isDatabaseError($qualification);
3035 }
3036
3037 // Retourne le résultat
3038 return $qualification;
3039 }
3040
3041 /**
3042 * Récupère le champ "regeneration_cle_citoyen" du type de la demande.
3043 *
3044 * @param integer $demande_type Identifiant du type de la demande.
3045 *
3046 * @return boolean
3047 */
3048 function get_demande_type_regeneration_cle_citoyen($demande_type) {
3049 // Initialise le résultat
3050 $regeneration_cle_citoyen = false;
3051
3052 // Récupère le champ depuis la demande type
3053 $inst_demande_type = $this->f->get_inst__om_dbform(array(
3054 "obj" => "demande_type",
3055 "idx" => $demande_type,
3056 ));
3057 if ($inst_demande_type->getVal('regeneration_cle_citoyen') === 't') {
3058 $regeneration_cle_citoyen = true;
3059 }
3060
3061 // Retourne le résultat
3062 return $regeneration_cle_citoyen;
3063 }
3064
3065 /**
3066 * Récupère les champs archive_* d'une instruction
3067 * @param string $dossier L'identifiant du dossier d'instruction
3068 */
3069 public function getArchiveInstruction($dossierID){
3070
3071 //On récupère les données du dernier DI accordé
3072 $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3073 dossier.avis_decision,
3074 to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
3075 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
3076 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
3077 to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
3078 to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
3079 to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
3080 to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
3081 to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
3082 to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
3083 to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
3084 to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
3085 dossier.incompletude,
3086 dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3087 dossier.etat_pendant_incompletude,
3088 to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
3089 dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
3090 ,dossier.dossier, dossier.incomplet_notifie,
3091 to_char(dossier.date_cloture_instruction, 'DD/MM/YYYY') as date_cloture_instruction,
3092 to_char(dossier.date_premiere_visite, 'DD/MM/YYYY') as date_premiere_visite,
3093 to_char(dossier.date_derniere_visite, 'DD/MM/YYYY') as date_derniere_visite,
3094 to_char(dossier.date_contradictoire, 'DD/MM/YYYY') as date_contradictoire,
3095 to_char(dossier.date_retour_contradictoire, 'DD/MM/YYYY') as date_retour_contradictoire,
3096 to_char(dossier.date_ait, 'DD/MM/YYYY') as date_ait,
3097 to_char(dossier.date_transmission_parquet, 'DD/MM/YYYY') as date_transmission_parquet
3098 FROM ".DB_PREFIXE."dossier
3099 LEFT JOIN ".DB_PREFIXE."avis_decision
3100 ON dossier.avis_decision = avis_decision.avis_decision
3101 WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
3102 AND dossier.dossier_autorisation = (
3103 SELECT dossier_autorisation.dossier_autorisation
3104 FROM ".DB_PREFIXE."dossier_autorisation
3105 LEFT JOIN ".DB_PREFIXE."dossier
3106 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3107 WHERE dossier = '".$dossierID."')
3108 ORDER BY dossier.version DESC";
3109
3110 $res = $this->db->query($sql);
3111 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3112 if ($this->f->isDatabaseError($res, true)) {
3113 return false;
3114 }
3115
3116 //Un des dosssiers d'instruction a été accordé, on récupère ses données
3117 if ( $res->numrows() != 0 ){
3118
3119 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3120 $instruction = $this->f->get_inst__om_dbform(array(
3121 "obj" => "instruction",
3122 "idx" => "]",
3123 ));
3124
3125 $instruction->setParameter("maj", 1);
3126 $instruction->updateArchiveData($row);
3127 return $instruction->valF;
3128 }
3129 //Sinon, on prend les données du P0, si ce n'est pas un P0
3130 else {
3131 $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
3132 dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
3133 dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
3134 dossier.date_decision, dossier.date_validite, dossier.date_achevement,
3135 dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
3136 dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
3137 dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
3138 dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
3139 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot,
3140 dossier.date_cloture_instruction, dossier.date_premiere_visite,
3141 dossier.date_derniere_visite, dossier.date_contradictoire,
3142 dossier.date_retour_contradictoire, dossier.date_ait,
3143 dossier.date_transmission_parquet
3144 FROM ".DB_PREFIXE."dossier
3145 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
3146 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
3147 WHERE dossier.dossier_autorisation = (
3148 SELECT dossier_autorisation.dossier_autorisation
3149 FROM ".DB_PREFIXE."dossier_autorisation
3150 LEFT JOIN ".DB_PREFIXE."dossier
3151 ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
3152 WHERE dossier = '".$dossierID."')
3153 AND dossier_instruction_type.code = 'P'
3154 ORDER BY dossier.version DESC";
3155 $res = $this->db->query($sql);
3156 $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
3157 if ($this->f->isDatabaseError($res, true)) {
3158 return false;
3159 }
3160
3161 //On est pas dans le cas d'un dépôt d'un P0
3162 if ( $res->numrows() != 0 ){
3163 $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
3164 $instruction = $this->f->get_inst__om_dbform(array(
3165 "obj" => "instruction",
3166 "idx" => "]",
3167 ));
3168 $instruction->setParameter("maj", 1);
3169 $instruction->updateArchiveData($row);
3170 return $instruction->valF;
3171 }
3172 }
3173 }
3174
3175 /**
3176 * Cette methode permet d'afficher le bouton de validation du formulaire
3177 *
3178 * @param integer $maj Mode de mise a jour
3179 * @return void
3180 */
3181 function bouton($maj) {
3182
3183 if (!$this->correct
3184 && $this->checkActionAvailability() == true) {
3185 //
3186 switch($maj) {
3187 case 0 :
3188 $bouton = _("Ajouter");
3189 break;
3190 case 1 :
3191 $bouton = _("Modifier");
3192 break;
3193 case 2 :
3194 $bouton = _("Supprimer");
3195 break;
3196 default :
3197 // Actions specifiques
3198 if ($this->get_action_param($maj, "button") != null) {
3199 //
3200 $bouton = $this->get_action_param($maj, "button");
3201 } else {
3202 //
3203 $bouton = _("Valider");
3204 }
3205 break;
3206 }
3207 //
3208 $params = array(
3209 "value" => $bouton,
3210 "name" => "submit",
3211 "onclick"=>"return getDataFieldReferenceCadastrale();",
3212 );
3213 //
3214 $this->f->layout->display_form_button($params);
3215 }
3216
3217 }
3218
3219 /**
3220 * Récupère l'instance de la classe taxe_amenagement.
3221 *
3222 * @param integer $om_collectivite La collectivité
3223 *
3224 * @return object
3225 */
3226 function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
3227 //
3228 if ($this->inst_taxe_amenagement === null) {
3229 //
3230 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
3231
3232 // Si aucun paramétrage de taxe trouvé et que la collectivité
3233 // est mono
3234 if ($taxe_amenagement === null
3235 && $this->f->isCollectiviteMono($om_collectivite) === true) {
3236 // Récupère la collectivité multi
3237 $om_collectivite_multi = $this->f->get_idx_collectivite_multi();
3238 //
3239 $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite_multi);
3240 }
3241
3242 //
3243 if ($taxe_amenagement === null) {
3244 //
3245 return null;
3246 }
3247
3248 //
3249 $this->inst_taxe_amenagement = $this->f->get_inst__om_dbform(array(
3250 "obj" => "taxe_amenagement",
3251 "idx" => $taxe_amenagement,
3252 ));
3253 }
3254 //
3255 return $this->inst_taxe_amenagement;
3256 }
3257
3258 /**
3259 * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
3260 *
3261 * @param integer $om_collectivite La collectivité
3262 *
3263 * @return integer
3264 */
3265 function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
3266 //
3267 $taxe_amenagement = null;
3268
3269 // Si la collectivité n'est pas renseigné
3270 if ($om_collectivite !== '' && $om_collectivite !== null) {
3271
3272 // SQL
3273 $sql = "SELECT taxe_amenagement
3274 FROM ".DB_PREFIXE."taxe_amenagement
3275 WHERE om_collectivite = ".intval($om_collectivite);
3276 $taxe_amenagement = $this->f->db->getOne($sql);
3277 $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
3278 $this->f->isDatabaseError($taxe_amenagement);
3279 }
3280
3281 //
3282 return $taxe_amenagement;
3283 }
3284
3285
3286 /**
3287 * Récupère l'instance du cerfa par le type détaillé du DA.
3288 *
3289 * @param integer $datd Identifiant du type détaillé du DA.
3290 *
3291 * @return object
3292 */
3293 protected function get_inst_cerfa_by_datd($datd = null) {
3294 //
3295 if ($this->inst_cerfa === null) {
3296 //
3297 $inst_datd = $this->get_inst_common("dossier_autorisation_type_detaille", $datd);
3298 //
3299 $cerfa = $inst_datd->getVal('cerfa');
3300 //
3301 if ($cerfa !== '' && $cerfa !== null) {
3302 //
3303 $this->inst_cerfa = $this->f->get_inst__om_dbform(array(
3304 "obj" => "cerfa",
3305 "idx" => $cerfa,
3306 ));
3307 }
3308 }
3309
3310 //
3311 return $this->inst_cerfa;
3312 }
3313
3314
3315 /**
3316 * Récupère l'instance du dossier d'autorisation.
3317 *
3318 * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
3319 *
3320 * @return object
3321 */
3322 function get_inst_dossier_autorisation($dossier_autorisation = null) {
3323 //
3324 return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
3325 }
3326
3327 }
3328
3329

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26