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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5024 - (show annotations)
Wed Nov 2 14:39:23 2016 UTC (8 years, 3 months ago) by softime
File size: 122928 byte(s)
* Merge de la branche de développement 3.33.x

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26