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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26