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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7366 - (show annotations)
Tue Aug 8 09:19:57 2017 UTC (7 years, 5 months ago) by softime
File size: 141375 byte(s)
* Merge de la branche d'intégration 4.4.0

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26