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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4102 - (hide annotations)
Wed May 11 07:28:32 2016 UTC (8 years, 8 months ago) by jymadier
File size: 114104 byte(s)
Merge de la branche amelioration-recherche-attestation-dossier

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26