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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4441 - (hide annotations)
Wed Jun 8 14:27:41 2016 UTC (8 years, 8 months ago) by jymadier
File size: 114319 byte(s)
Merge de la branche no-recepisse-initial

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     $this -> addToMessage(
1487     _("Erreur lors de l'enregistrement de la demande.")." ".
1488     _("Contactez votre administrateur.")
1489     );
1490     $this->correct = false;
1491     return false;
1492     }
1493     // Libellé du dossier
1494     $dossier_libelle = $this->get_dossier_libelle($this->valF['dossier_instruction']);
1495     // Message de validation
1496     $this -> addToMessage(
1497     _("Creation du dossier d'instruction no")."<span id='new_di'>".$dossier_libelle."</span>"
1498     );
1499     // Lien vers le DI
1500     $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"));
1501     // Ajout du lien vers le DI dans le message de validation
1502     $this -> addToMessage(
1503 jymadier 4441 "<br/>".$link_di."<br/>"
1504 mbroquet 3730 );
1505     // Attribut permettant de définir si un dossier a été créé.
1506     $this->ajoutDI = true;
1507     }
1508    
1509     /*Ajout de l'arrondissement à partir du code postal*/
1510     if ( !is_null($this->valF["terrain_adresse_code_postal"]) && is_numeric($this->valF["terrain_adresse_code_postal"]) ){
1511    
1512     $this->valF["arrondissement"] = $this->getArrondissement($this->valF["terrain_adresse_code_postal"]);
1513     }
1514     }
1515    
1516     //
1517     return true;
1518     }
1519    
1520     /**
1521     * Ajout des délégataires et pétitionnaires
1522     **/
1523     function triggerAjouterApres($id, &$db, $val, $DEBUG){
1524    
1525     if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
1526     return false;
1527     }
1528    
1529     // Ajout des lliens entre dossier_autorisation et demandeur
1530     if(!empty($this->valF['dossier_autorisation'])) {
1531     if ($this->ajoutLiensDossierAutorisation($id, $db, $val, $DEBUG) == false) {
1532     return false;
1533     }
1534     }
1535     // Ajout des lliens entre dossier et demandeur
1536     if($this->ajoutDI === TRUE) {
1537     if ($this->ajoutLiensDossierInstruction($id, $db, $val, $DEBUG) == false) {
1538     return false;
1539     }
1540     }
1541    
1542     // Duplication des lots (et leurs données techniques) et
1543     // liaison au nouveau dossier_d'instruction
1544     if(!empty($this->valF['dossier_autorisation']) AND $val['dossier_autorisation'] != "" ) {
1545     $this->lienLotDossierInstruction($id, $db, $val, $DEBUG);
1546     }
1547    
1548     /*Création du lien de téléchargement de récépissé de demande*/
1549     if ( $this->valF['demande_type'] != "" && is_numeric($this->valF['demande_type'])
1550     && isset($this->valF['dossier_instruction']) && $this->valF['dossier_instruction'] !== "" ){
1551    
1552     /*Récupérer l'événement lié à ce type de demande*/
1553     $evenement = $this->getEvenement($this->valF['demande_type']);
1554    
1555     /*Récupération de la lettre type de l'événement*/
1556     $lettretype = $this->f->getLettreType($evenement);
1557    
1558     /*Création d'une nouvelle instruction avec cet événement*/
1559     /*Données*/
1560     $valInstr['instruction']=NULL;
1561    
1562     $valInstr['destinataire']=$this->valF['dossier_instruction'];
1563     $valInstr['dossier']=$this->valF['dossier_instruction'];
1564     // Récupère la date de la demande
1565     $valInstr['date_evenement']=$this->dateDBToForm($this->valF['date_demande']);
1566     $valInstr['evenement']=$evenement;
1567     $valInstr['lettretype']=$lettretype;
1568     $valInstr['complement_om_html']="";
1569     $valInstr['complement2_om_html']="";
1570    
1571     $valInstr['action']="initialisation";
1572     $valInstr['delai']="2";
1573     $valInstr['etat']="notifier";
1574     $valInstr['accord_tacite']="Oui";
1575     $valInstr['delai_notification']="1";
1576     $valInstr['archive_delai']="0";
1577     $valInstr['archive_date_complet']=NULL;
1578     $valInstr['archive_date_dernier_depot']=NULL;
1579     $valInstr['archive_date_rejet']=NULL;
1580     $valInstr['archive_date_limite']=NULL;
1581     $valInstr['archive_date_notification_delai']=NULL;
1582     $valInstr['archive_accord_tacite']="Non";
1583     $valInstr['archive_etat']="initialiser";
1584     $valInstr['archive_date_decision']=NULL;
1585     $valInstr['archive_avis']="";
1586     $valInstr['archive_date_validite']=NULL;
1587     $valInstr['archive_date_achevement']=NULL;
1588     $valInstr['archive_date_chantier']=NULL;
1589     $valInstr['archive_date_conformite']=NULL;
1590     $valInstr['archive_incompletude']=NULL;
1591     $valInstr['archive_incomplet_notifie']=NULL;
1592     $valInstr['archive_evenement_suivant_tacite']="";
1593     $valInstr['archive_evenement_suivant_tacite_incompletude']=NULL;
1594     $valInstr['archive_etat_pendant_incompletude']=NULL;
1595     $valInstr['archive_date_limite_incompletude']=NULL;
1596     $valInstr['archive_delai_incompletude']=NULL;
1597     $valInstr['archive_autorite_competente']=NULL;
1598     $valInstr['complement3_om_html']="";
1599     $valInstr['complement4_om_html']="";
1600     $valInstr['complement5_om_html']="";
1601     $valInstr['complement6_om_html']="";
1602     $valInstr['complement7_om_html']="";
1603     $valInstr['complement8_om_html']="";
1604     $valInstr['complement9_om_html']="";
1605     $valInstr['complement10_om_html']="";
1606     $valInstr['complement11_om_html']="";
1607     $valInstr['complement12_om_html']="";
1608     $valInstr['complement13_om_html']="";
1609     $valInstr['complement14_om_html']="";
1610     $valInstr['complement15_om_html']="";
1611     $valInstr['avis_decision']=NULL;
1612     $valInstr['date_finalisation_courrier']=NULL;
1613     $valInstr['date_envoi_signature']=NULL;
1614     $valInstr['date_retour_signature']=NULL;
1615     $valInstr['date_envoi_rar']=NULL;
1616     $valInstr['date_retour_rar']=NULL;
1617     $valInstr['date_envoi_controle_legalite']=NULL;
1618     $valInstr['date_retour_controle_legalite']=NULL;
1619     $valInstr['signataire_arrete']=NULL;
1620     $valInstr['numero_arrete']=NULL;
1621     $valInstr['code_barres']=NULL;
1622     $valInstr['om_fichier_instruction']=NULL;
1623     $valInstr['om_final_instruction']=NULL;
1624     $valInstr['document_numerise']=NULL;
1625     $valInstr['autorite_competente']=NULL;
1626     $valInstr['duree_validite_parametrage']="0";
1627     $valInstr['duree_validite']="0";
1628 nmeucci 3873 $valInstr['date_depot']=NULL;
1629 mbroquet 3730 $valInstr['om_final_instruction_utilisateur']= "f";
1630     $valInstr['created_by_commune']= "f";
1631    
1632     // Récupération des champs archive si cette demande a créée un dossier
1633     // d'instruction mais pas un P0
1634     if (!is_null($this->valF['dossier_instruction']) &&
1635     $this->valF['dossier_instruction'] !== "" ){
1636    
1637     // Requête
1638     $sql = "SELECT dossier_instruction_type.code
1639     FROM ".DB_PREFIXE."demande_type
1640     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1641     ON demande_type.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1642     WHERE demande_type.demande_type = ".$this->valF['demande_type'];
1643     $res = $db->getOne($sql);
1644     $this->addToLog("triggerajouter(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1645     if ($this->f->isDatabaseError($res, true)) {
1646     return false;
1647     }
1648    
1649     // On vérifie que ce n'est pas un P0
1650     if ( strcmp($res, "P") !== 0 ){
1651    
1652     $res = $this->getArchiveInstruction($this->valF['dossier_instruction']);
1653    
1654     if ($res == false) {
1655     return false;
1656     }
1657    
1658     if (isset($res['archive_delai'])) {
1659     $valInstr['archive_delai']=$res["archive_delai"];
1660     }
1661     if (isset($res['archive_date_complet'])) {
1662     $valInstr['archive_date_complet']=$res["archive_date_complet"];
1663     }
1664     if (isset($res['archive_date_dernier_depot'])) {
1665     $valInstr['archive_date_dernier_depot']=$res["archive_date_dernier_depot"];
1666     }
1667     if (isset($res['archive_date_rejet'])) {
1668     $valInstr['archive_date_rejet']=$res["archive_date_rejet"];
1669     }
1670     if (isset($res['archive_date_limite'])) {
1671     $valInstr['archive_date_limite']=$res["archive_date_limite"];
1672     }
1673     if (isset($res['archive_date_notification_delai'])) {
1674     $valInstr['archive_date_notification_delai']=$res["archive_date_notification_delai"];
1675     }
1676     if (isset($res['archive_accord_tacite'])) {
1677     $valInstr['archive_accord_tacite']=$res["archive_accord_tacite"];
1678     }
1679     if (isset($res['archive_etat'])) {
1680     $valInstr['archive_etat']=$res["archive_etat"];
1681     }
1682     if (isset($res['archive_date_decision'])) {
1683     $valInstr['archive_date_decision']=$res["archive_date_decision"];
1684     }
1685     if (isset($res['archive_avis'])) {
1686     $valInstr['archive_avis']=$res["archive_avis"];
1687     }
1688     if (isset($res['archive_date_validite'])) {
1689     $valInstr['archive_date_validite']=$res["archive_date_validite"];
1690     }
1691     if (isset($res['archive_date_achevement'])) {
1692     $valInstr['archive_date_achevement']=$res["archive_date_achevement"];
1693     }
1694     if (isset($res['archive_date_chantier'])) {
1695     $valInstr['archive_date_chantier']=$res["archive_date_chantier"];
1696     }
1697     if (isset($res['archive_date_conformite'])) {
1698     $valInstr['archive_date_conformite']=$res["archive_date_conformite"];
1699     }
1700     if (isset($res['archive_incompletude'])) {
1701     $valInstr['archive_incompletude']=$res["archive_incompletude"];
1702     }
1703     if (isset($res['archive_incomplet_notifie'])) {
1704     $valInstr['archive_incomplet_notifie']=$res["archive_incomplet_notifie"];
1705     }
1706     if (isset($res['archive_evenement_suivant_tacite'])) {
1707     $valInstr['archive_evenement_suivant_tacite']=$res["archive_evenement_suivant_tacite"];
1708     }
1709     if (isset($res['archive_evenement_suivant_tacite_incompletude'])) {
1710     $valInstr['archive_evenement_suivant_tacite_incompletude']=$res["archive_evenement_suivant_tacite_incompletude"];
1711     }
1712     if (isset($res['archive_etat_pendant_incompletude'])) {
1713     $valInstr['archive_etat_pendant_incompletude']=$res["archive_etat_pendant_incompletude"];
1714     }
1715     if (isset($res['archive_date_limite_incompletude'])) {
1716     $valInstr['archive_date_limite_incompletude']=$res["archive_date_limite_incompletude"];
1717     }
1718     if (isset($res['archive_delai_incompletude'])) {
1719     $valInstr['archive_delai_incompletude']=$res["archive_delai_incompletude"];
1720     }
1721     if (isset($res['archive_autorite_competente'])) {
1722     $valInstr['archive_autorite_competente']=$res["archive_autorite_competente"];
1723     }
1724     }
1725     }
1726    
1727     // Fichier requis
1728     require_once '../obj/instruction.class.php';
1729    
1730     // Création d'un nouveau dossier
1731     $instruction = new instruction("]",$db,$DEBUG);
1732     $instruction->valF = "";
1733     if ($instruction->ajouter($valInstr, $db, $DEBUG) === false) {
1734 nmeucci 3876 // Suppression des messages valides puisque erreur
1735     $this->msg = '';
1736     $this -> addToMessage($instruction->msg);
1737 mbroquet 3730 $this -> addToMessage(_("Une erreur s'est produite lors de la creation du recepisse"));
1738     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter l'instruction.", DEBUG_MODE);
1739     return false;
1740     }
1741    
1742     // Finalisation du document
1743     $_GET['obj']='instruction';
1744     $_GET['idx']=$instruction->valF[$instruction->clePrimaire];
1745     $instruction_final = new instruction($_GET['idx'],$db,$DEBUG);
1746     if($instruction_final->getVal('lettretype') != "") {
1747     // On se met en contexte de l'action 100 finaliser
1748     $instruction_final->setParameter('maj',100);
1749     // On finalise l'événement d'instruction
1750     $res = $instruction_final->finalize();
1751     if ($res === false) {
1752     $this -> addToMessage($instruction_final->msg);
1753     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de finaliser l'instruction.", DEBUG_MODE);
1754     return false;
1755     }
1756     }
1757    
1758     // Mise à jour de la demande
1759     $this->valF['instruction_recepisse'] = $instruction->valF['instruction'];
1760     $this->valF['date_demande'] = $this->dateDBToForm($this->valF['date_demande']);
1761     $demande_instance = new demande($this->valF['demande'], $db, $DEBUG);
1762     if ($demande_instance->modifier($this->valF, $db, $DEBUG) === false) {
1763     $this -> addToMessage($demande_instance->msg);
1764     $this->f->addToLog(__METHOD__."() : ERROR - Impossible de modifier la demande.", DEBUG_MODE);
1765     return false;
1766     }
1767    
1768     // Si l'option d'accès au portail citoyen est activée
1769     if ($this->f->is_option_citizen_access_portal_enabled() === true) {
1770     // Met à jour la clé d'accès au portail citoyen dans le dossier
1771     // d'autorisation
1772     $inst_da = $this->get_inst_dossier_autorisation($this->valF['dossier_autorisation']);
1773     $update = $inst_da->update_citizen_access_key();
1774     //
1775     if ($update !== true) {
1776     //
1777     $this->addToMessage(_("La cle d'acces au portail citoyen n'a pas pu etre generee."));
1778     return false;
1779     }
1780     }
1781    
1782    
1783 jymadier 4441 // Si l'instruction initiale a une lettre type liée
1784     if ($instruction->valF['lettretype'] !== ''
1785     && $instruction->valF['lettretype'] !== null) {
1786    
1787     // Affichage du récépissé de la demande
1788     $this -> addToMessage("<a
1789     class='lien' id='link_demande_recepisse'
1790     title=\""._("Telecharger le recepisse de la demande")."\"
1791     href='../scr/form.php?obj=demande&amp;action=100&amp;idx=".
1792     $this->valF[$this->clePrimaire]."' target='_blank'>
1793     <span
1794     class=\"om-icon om-icon-16 om-icon-fix pdf-16\"
1795     title=\""._("Telecharger le recepisse de la demande")."\">".
1796     _("Telecharger le recepisse de la demande").
1797     "</span>".
1798     _("Telecharger le recepisse de la demande")."
1799     </a><br/>");
1800     }
1801     }
1802    
1803 mbroquet 3730 // DIGITALIZATION
1804     // Si le dossier_instruction existe et que l'option est activée
1805     if ($this->f->is_option_digitalization_folder_enabled() === true
1806     && isset($this->valF['dossier_instruction'])
1807     && $this->valF['dossier_instruction'] !== "" ) {
1808     // Instanciation du dossier d'instruction concerné par la demande
1809     // en cours d'ajout.
1810     $inst_di = $this->get_inst_dossier_instruction(
1811     $this->valF['dossier_instruction']
1812     );
1813     // Création du répertoire de numérisation pour le dossier en
1814     // question.
1815     $ret = $inst_di->create_or_touch_digitalization_folder();
1816     // Si la création a échouée
1817     if ($ret !== true) {
1818     //
1819     $this->msg = "";
1820     $this->addToMessage(_("Erreur lors de la création du répertoire de numérisation. Contactez votre administrateur."));
1821     return false;
1822     }
1823     }
1824    
1825     //
1826     return true;
1827     }
1828    
1829     /*Ajout du lien demande / demandeur(s)*/
1830     function triggerModifierApres($id, &$db, $val, $DEBUG){
1831     $this->listeDemandeur("demande",$this->val[array_search('demande', $this->champs)]);
1832     if ($this->insertLinkDemandeDemandeur($db, $DEBUG) == false) {
1833     return false;
1834     }
1835     $this->valIdDemandeur=$this->postedIdDemandeur;
1836    
1837     //
1838     return true;
1839     }
1840    
1841     /**
1842     * Gestion des liens entre les lots du DA et le nouveau dossier
1843     **/
1844     function lienLotDossierInstruction($id, $db, $val, $DEBUG) {
1845     require_once ("../obj/lot.class.php");
1846     $lot = new lot("]", $db, $DEBUG);
1847     require_once ("../obj/lien_lot_demandeur.class.php");
1848     $lld = new lien_lot_demandeur("]", $db, $DEBUG);
1849    
1850    
1851     $sqlLots = "SELECT * FROM ".DB_PREFIXE."lot
1852     WHERE dossier_autorisation = '".$this->valF['dossier_autorisation']."'";
1853     $resLot = $db -> query($sqlLots);
1854     $this->f->addToLog("db->query(\"".$sqlLots."\");", VERBOSE_MODE);
1855     $this->f->isDatabaseError($resLot);
1856     while ($rowLot=& $resLot->fetchRow(DB_FETCHMODE_ASSOC)){
1857     // Insertion du nouveau lot
1858     $valLot['lot'] = "";
1859     $valLot['libelle'] = $rowLot['libelle'];
1860     $valLot['dossier_autorisation'] = null;
1861     $valLot['dossier'] = $this->valF['dossier_instruction'];
1862     $lot -> ajouter($valLot, $db, $DEBUG);
1863    
1864     //Insertion des liens entre dossier et les lots
1865     $sqlDemandeurs = "SELECT * FROM ".DB_PREFIXE."lien_lot_demandeur
1866     WHERE lot = ".$rowLot['lot'];
1867     $res = $db -> query($sqlDemandeurs);
1868     $this->f->addToLog(
1869     "lienLotDossierInstruction() : db->query(\"".$sqlDemandeurs."\");",
1870     VERBOSE_MODE
1871     );
1872     if ($this->f->isDatabaseError($res, true)) {
1873     return false;
1874     }
1875    
1876     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
1877     $valLld["lien_lot_demandeur"] = "";
1878     $valLld["lot"]=$lot->valF['lot'];
1879     $valLld["demandeur"] = $row['demandeur'];
1880     $valLld["petitionnaire_principal"] = $row['petitionnaire_principal'];
1881     if ($lld->ajouter($valLld, $db, $DEBUG) === false) {
1882     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre le lot et le dossier d'instruction.", DEBUG_MODE);
1883     return false;
1884     }
1885     }
1886    
1887     // Récupération des données techniques du nouveau lots
1888     if($this->ajoutDonneesTechniquesLots(
1889     $id,
1890     $db,
1891     $val,
1892     $DEBUG,
1893     $rowLot['lot'],
1894     $lot->valF['lot']) === false) {
1895     $this -> addToMessage(
1896     _("Erreur lors de l'enregistrement de la demande.")." ".
1897     _("Contactez votre administrateur.")
1898     );
1899     $this->correct = false;
1900     $this->f->addToLog(
1901     "lienLotDossierInstruction() : ERROR ajoutDonneesTechniquesLots",
1902     DEBUG_MODE
1903     );
1904     return false;
1905     }
1906    
1907     }
1908    
1909     //
1910     return true;
1911     }
1912    
1913    
1914     /**
1915     * Méthode permettant d'ajouter les données techniques d'un lot.
1916     *
1917     * @param integer $id identifiant de la demande
1918     * @param database &$db handler de la base de donnée
1919     * @param array $val tableau de valeurs postées via le formulaire
1920     * @param boolean $DEBUG debug
1921     * @param integer $lotInit identifiant de lot initial
1922     * @param integer $lotDest identifiant du lot qui va recevoir les données
1923     *
1924     * @return boolean false si erreur
1925     */
1926     function ajoutDonneesTechniquesLots($id, &$db, $val, $DEBUG, $lotInit, $lotDest) {
1927     // Requete permettant de recupérer les données techniques du lot passé
1928     // en paramètre ($lotInit)
1929     $sql_get_dt = "
1930     SELECT donnees_techniques
1931     FROM ".DB_PREFIXE."donnees_techniques
1932     WHERE lot=".$lotInit;
1933     $id_dt = $this->f->db->getOne($sql_get_dt);
1934     // Si des données techniques sont liées au lots on les "copie" et
1935     // on les lies au lot passé en paramètre (lotDest)
1936     if(isset($id_dt) and !empty($id_dt)) {
1937     $this->f->addToLog(
1938     "ajoutDonneesTechniquesLots() : db->getone(\"".$sql_get_dt."\");",
1939     VERBOSE_MODE
1940     );
1941     if ($this->f->isDatabaseError($id_dt, true)){
1942     $this->f->addToLog(
1943     "ajoutDonneesTechniquesLots() : ERROR",
1944     DEBUG_MODE
1945     );
1946     return false;
1947     }
1948     require_once '../obj/donnees_techniques.class.php';
1949     $donnees_techniques = new donnees_techniques($id_dt, $db, $DEBUG);
1950    
1951     // Récupération des données dans le tableau des valeurs à insérer
1952     foreach($donnees_techniques->champs as $value) {
1953     $val[$value] = $donnees_techniques->getVal($value);
1954     }
1955     // Modification du lien vers le nouveau lot
1956     $val["lot"] = $lotDest;
1957     // Identifiant du cerfa
1958     $val['cerfa'] = $this->getIdCerfa();
1959     // Ajout des données techniques
1960     if($donnees_techniques->ajouter($val, $db, $DEBUG) === false) {
1961     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter les données techniques du lot.", DEBUG_MODE);
1962     return false;
1963     }
1964     }
1965    
1966     //
1967     return true;
1968     }
1969    
1970     /**
1971     * Gestion des liens entre la demande et les demandeurs recemment ajoutés
1972     **/
1973     function insertLinkDemandeDemandeur($db, $DEBUG) {
1974    
1975     //
1976     require_once "../obj/lien_demande_demandeur.class.php";
1977     // Comparaison de l'id petitionnaire principal
1978     if(isset($this->postedIdDemandeur['petitionnaire_principal']) AND
1979     !empty($this->postedIdDemandeur['petitionnaire_principal']) AND
1980     $this->valIdDemandeur['petitionnaire_principal'] !=
1981     $this->postedIdDemandeur['petitionnaire_principal']) {
1982     // Ajout du nouveau lien
1983     if ($this->addLinkDemandeDemandeur($this->postedIdDemandeur['petitionnaire_principal'], true, $db, $DEBUG) == false) {
1984     //
1985     return false;
1986     }
1987     if(!empty($this->valIdDemandeur['petitionnaire_principal'])) {
1988     if ($this->deleteLinkDemandeDemandeur($this->valIdDemandeur['petitionnaire_principal'], $db, $DEBUG) == false) {
1989     //
1990     return false;
1991     }
1992     }
1993     }
1994    
1995     // Comparaison du delegataire
1996     if(isset($this->postedIdDemandeur['delegataire']) AND
1997     !empty($this->postedIdDemandeur['delegataire']) AND
1998     $this->valIdDemandeur['delegataire'] !=
1999     $this->postedIdDemandeur['delegataire']) {
2000     // Ajout du nouveau lien
2001     if ($this->addLinkDemandeDemandeur($this->postedIdDemandeur['delegataire'], false, $db, $DEBUG) == false) {
2002     //
2003     return false;
2004     }
2005     if(!empty($this->valIdDemandeur['delegataire'])) {
2006     if ($this->deleteLinkDemandeDemandeur($this->valIdDemandeur['delegataire'], $db, $DEBUG) == false) {
2007     //
2008     return false;
2009     }
2010     }
2011     }
2012    
2013     // Comparaison des different petitionnaires
2014     if(isset($this->postedIdDemandeur['petitionnaire'])) {
2015     // Suppression des liens non valides
2016     foreach ($this->valIdDemandeur['petitionnaire'] as $petitionnaire) {
2017     if(!in_array($petitionnaire, $this->postedIdDemandeur['petitionnaire'])) {
2018     if ($this->deleteLinkDemandeDemandeur($petitionnaire, $db, $DEBUG) == false) {
2019     //
2020     return false;
2021     }
2022     }
2023     }
2024     // Ajout des nouveaux liens
2025     foreach ($this->postedIdDemandeur['petitionnaire'] as $petitionnaire) {
2026     if(!in_array($petitionnaire, $this->valIdDemandeur['petitionnaire'])) {
2027     if ($this->addLinkDemandeDemandeur($petitionnaire, false, $db, $DEBUG) == false) {
2028     //
2029     return false;
2030     }
2031     }
2032     }
2033     }
2034    
2035     //
2036     return true;
2037     }
2038    
2039    
2040     /**
2041     * Fonction permettant d'ajouter un lien
2042     * entre la table demande et demandeur
2043     **/
2044     function addLinkDemandeDemandeur($id, $principal, $db, $DEBUG) {
2045     $lienAjout = new lien_demande_demandeur(
2046     "]",
2047     $db,
2048     $DEBUG);
2049     $lien = array('lien_demande_demandeur' => "",
2050     'petitionnaire_principal' => (($principal)?"t":"f"),
2051     'demande' => $this->valF['demande'],
2052     'demandeur' => $id);
2053     if ($lienAjout->ajouter($lien, $db, $DEBUG) === false) {
2054     $this->f->addToLog(__METHOD__."() : ERROR - Impossible d'ajouter le lien entre la demande et le demandeur.", DEBUG_MODE);
2055     return false;
2056     }
2057    
2058     //
2059     return true;
2060     }
2061    
2062     /**
2063     * Fonction permettant de supprimer un lien
2064     * entre la table demande et demandeur
2065     **/
2066     function deleteLinkDemandeDemandeur($id, $db, $DEBUG) {
2067     // Suppression
2068     $sql = "DELETE FROM ".DB_PREFIXE."lien_demande_demandeur ".
2069     "WHERE demande=".$this->valF['demande'].
2070     " AND demandeur=".$id;
2071     // Execution de la requete de suppression de l'objet
2072     $res = $db->query($sql);
2073     // Logger
2074     $this->f->addToLog("deleteLinkDemandeDemandeur(): db->query(\"".$sql."\");", VERBOSE_MODE);
2075     if ($this->f->isDatabaseError($res, true)){
2076     return false;
2077     }
2078    
2079     //
2080     return true;
2081     }
2082    
2083     /*
2084     * Teste si le lien entre une demande et un demandeur existe
2085     * */
2086     function isLinkDemandeDemandeurExist($idDemandeur) {
2087     $sql = "SELECT count(*)
2088     FROM ".DB_PREFIXE."lien_demande_demandeur
2089     WHERE demande = ".$this->valF['demande'].
2090     "AND demandeur = ".$idDemandeur;
2091     $count = $this->f->db->getOne($sql);
2092     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\");", VERBOSE_MODE);
2093     $this->f->isDatabaseError($count);
2094     if ($count === 0) {
2095     $this->f->addToLog("isLinkDemandeDemandeurExist() : db->getone(\"".$sql."\"); 0 values", VERBOSE_MODE);
2096     return false;
2097     } else {
2098     return true;
2099     }
2100    
2101     }
2102    
2103     /**
2104     * Methode de recupération des valeurs postées
2105     **/
2106     function getPostedValues() {
2107     // Récupération des demandeurs dans POST
2108     if ($this->f->get_submitted_post_value('petitionnaire_principal') !== null OR
2109     $this->f->get_submitted_post_value('delegataire') !== null OR
2110     $this->f->get_submitted_post_value('petitionnaire') !== null) {
2111     if ($this->f->get_submitted_post_value('petitionnaire_principal') !== null AND
2112     $this->f->get_submitted_post_value('petitionnaire_principal') != '') {
2113     $this->postedIdDemandeur['petitionnaire_principal'] = $this->f->get_submitted_post_value('petitionnaire_principal');
2114     }
2115     if ($this->f->get_submitted_post_value('delegataire') !== null AND
2116     $this->f->get_submitted_post_value('delegataire') != '') {
2117     $this->postedIdDemandeur['delegataire'] = $this->f->get_submitted_post_value('delegataire');
2118     }
2119     if ($this->f->get_submitted_post_value('petitionnaire') !== null AND
2120     $this->f->get_submitted_post_value('petitionnaire') != '') {
2121     $this->postedIdDemandeur['petitionnaire'] = $this->f->get_submitted_post_value('petitionnaire');
2122     }
2123     }
2124     }
2125    
2126     /**
2127     * Méthode permettant de récupérer les id des demandeurs liés à la table
2128     * liée passée en paramètre
2129     *
2130     * @param string $from Table liée : "demande", "dossier", dossier_autorisation"
2131     * @param string $id Identifiant (clé primaire de la table liée en question)
2132     */
2133     function listeDemandeur($from, $id) {
2134     // Récupération des demandeurs de la base
2135     $sql = "SELECT demandeur.demandeur,
2136     demandeur.type_demandeur,
2137     lien_".$from."_demandeur.petitionnaire_principal
2138     FROM ".DB_PREFIXE."lien_".$from."_demandeur
2139     INNER JOIN ".DB_PREFIXE."demandeur
2140     ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
2141     WHERE ".$from." = '".$id."'";
2142     $res = $this->f->db->query($sql);
2143     $this->f->addToLog("listeDemandeur(): db->query(\"".$sql."\")", VERBOSE_MODE);
2144     $this->f->isDatabaseError($res);
2145     // Stockage du résultat dans un tableau
2146     while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
2147     if ($row['petitionnaire_principal'] == 't' AND
2148     $row['type_demandeur']=="petitionnaire") {
2149     $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
2150     } elseif ($row['petitionnaire_principal'] == 'f' AND
2151     $row['type_demandeur']=="petitionnaire"){
2152     $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
2153     } elseif ($row['type_demandeur']=="delegataire"){
2154     $this->valIdDemandeur['delegataire']=$row['demandeur'];
2155     }
2156     }
2157     }
2158    
2159    
2160     /**
2161     * Surcharge du bouton retour afin de retourner sur la recherche de dossiers
2162     * d'instruction existant
2163     */
2164     function retour($premier = 0, $recherche = "", $tricol = "") {
2165    
2166     echo "\n<a class=\"retour\" ";
2167     echo "href=\"";
2168     //
2169     if($this->getParameter("idx_dossier") != "") {
2170     echo "tab.php?";
2171     echo "obj=recherche_dossier";
2172    
2173     } else {
2174     if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
2175     echo "form.php?";
2176     } else {
2177     echo "tab.php?";
2178     }
2179     echo "obj=".get_class($this);
2180     if($this->getParameter("retour")=="form") {
2181     echo "&amp;idx=".$this->getParameter("idx");
2182     echo "&amp;idz=".$this->getParameter("idz");
2183     echo "&amp;action=3";
2184     }
2185     }
2186     echo "&amp;premier=".$this->getParameter("premier");
2187     echo "&amp;tricol=".$this->getParameter("tricol");
2188     echo "&amp;recherche=".$this->getParameter("recherche");
2189     echo "&amp;selectioncol=".$this->getParameter("selectioncol");
2190     echo "&amp;advs_id=".$this->getParameter("advs_id");
2191     echo "&amp;valide=".$this->getParameter("valide");
2192     //
2193     echo "\"";
2194     echo ">";
2195     //
2196     echo _("Retour");
2197     //
2198     echo "</a>\n";
2199    
2200     }
2201    
2202    
2203     /**
2204     * Cette méthode permet d'afficher des informations spécifiques dans le
2205     * formulaire de l'objet
2206     *
2207     * @param integer $maj Mode de mise à jour
2208     */
2209     function formSpecificContent($maj) {
2210    
2211     /**
2212     * Gestion du bloc des demandeurs
2213     */
2214     // Si le mode est (modification ou suppression ou consultation) ET que
2215     // le formulaire n'est pas correct (c'est-à-dire que le formulaire est
2216     // actif)
2217     if (!$this->correct AND $maj != 0) {
2218     // Alors on récupère les demandeurs dans la table lien pour
2219     // affectation des résultats dans this->valIdDemandeur
2220     $this->listeDemandeur("demande", $this->val[array_search('demande', $this->champs)]);
2221     }
2222    
2223     // Si le mode est (ajout ou modification) ET que le formulaire n'est pas
2224     // correct (c'est-à-dire que le formulaire est actif)
2225     if ($maj < 2 AND !$this->correct) {
2226     // Alors on positionne le marqueur linkable a true qui permet
2227     // d'afficher ou non les actions de gestion des demandeurs
2228     $linkable = true;
2229     } else {
2230     // Sinon on positionne le marqueur linkable a false qui permet
2231     // d'afficher ou non les actions de gestion des demandeurs
2232     $linkable = false;
2233     }
2234    
2235     // Affichage des demandeurs et des actions
2236     // Conteneur de la listes des demandeurs
2237     echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
2238     echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
2239     echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
2240     ._("Petitionnaire")."</legend>";
2241     // Si des demandeurs sont liés à la demande
2242     require_once "../obj/petitionnaire.class.php";
2243     require_once "../obj/delegataire.class.php";
2244     // Affichage du bloc pétitionnaire principal / délégataire
2245     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2246     echo "<div id=\"petitionnaire_principal_delegataire\">";
2247     // Affichage de la synthèse
2248     if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
2249     !empty($this->valIdDemandeur["petitionnaire_principal"])) {
2250     $demandeur = new petitionnaire(
2251     $this->valIdDemandeur["petitionnaire_principal"],
2252     $this->f->db,false);
2253     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
2254     $demandeur -> __destruct();
2255     } elseif ( isset ($this->postedIdDemandeur["petitionnaire_principal"]) AND
2256     !empty($this->postedIdDemandeur["petitionnaire_principal"]) ) {
2257     $demandeur = new petitionnaire(
2258     $this->postedIdDemandeur["petitionnaire_principal"],
2259     $this->f->db,false);
2260     $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
2261     $demandeur -> __destruct();
2262     }
2263     // Si en édition de formulaire
2264     if($maj < 2) {
2265     // Bouton d'ajout du pétitionnaire principal
2266     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2267     echo "<span id=\"add_petitionnaire_principal\"
2268     class=\"om-form-button add-16\">".
2269     _("Saisir le petitionnaire principal").
2270     "</span>";
2271     }
2272     // Bouton d'ajout du delegataire
2273     // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2274     echo "<div id=\"delegataire\">";
2275     // Affichage de la synthèse
2276     if (isset ($this->valIdDemandeur["delegataire"]) AND
2277     !empty($this->valIdDemandeur["delegataire"])) {
2278     $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
2279     $this->f->db,false);
2280     $demandeur -> afficherSynthese("delegataire", $linkable);
2281     $demandeur -> __destruct();
2282     } elseif ( isset ($this->postedIdDemandeur["delegataire"]) AND
2283     !empty($this->postedIdDemandeur["delegataire"]) ) {
2284    
2285     $demandeur = new delegataire($this->postedIdDemandeur["delegataire"],
2286     $this->f->db,false);
2287     $demandeur -> afficherSynthese("delegataire", $linkable);
2288     $demandeur -> __destruct();
2289     }
2290     if($maj < 2) {
2291     echo "<span id=\"add_delegataire\"
2292     class=\"om-form-button add-16\">".
2293     _("Saisir un autre correspondant").
2294     "</span>";
2295     }
2296     echo "</div>";
2297     echo "<div class=\"both\"></div>";
2298     echo "</div>";
2299     // Bloc des pétitionnaires secondaires
2300     // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2301     echo "<div id=\"listePetitionnaires\">";
2302    
2303     // Affichage de la synthèse
2304     if (isset ($this->valIdDemandeur["petitionnaire"]) AND
2305     !empty($this->valIdDemandeur["petitionnaire"])) {
2306    
2307     foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
2308     $demandeur = new petitionnaire($petitionnaire,
2309     $this->f->db,false);
2310     $demandeur -> afficherSynthese("petitionnaire", $linkable);
2311     $demandeur -> __destruct();
2312     }
2313    
2314     } elseif ( isset ($this->postedIdDemandeur["petitionnaire"]) AND
2315     !empty($this->postedIdDemandeur["petitionnaire"]) ) {
2316     foreach ($this->postedIdDemandeur["petitionnaire"] as $petitionnaire) {
2317     $demandeur = new petitionnaire($petitionnaire,
2318     $this->f->db,false);
2319     $demandeur -> afficherSynthese("petitionnaire", $linkable);
2320     $demandeur -> __destruct();
2321     }
2322     }
2323     if ($maj < 2) {
2324     // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
2325     echo "<span id=\"add_petitionnaire\"
2326     class=\"om-form-button add-16\">".
2327     _("Ajouter un petitionnaire")
2328     ."</span>";
2329     }
2330     echo "</div>";
2331     echo "</fieldset>";
2332     // Champ flag permettant de récupérer la valeur de l'option sig pour
2333     // l'utiliser en javascript, notamment lors du chargement de l'interface
2334     // pour les références cadastrales
2335     // XXX Si un widget pour les références cadastrales existait, il n'y
2336     // aurait pas besoin de faire cela
2337     echo "<input id='option_sig' type='hidden' value='".$this->f->getParameter("option_sig")."' name='option_sig'>";
2338     echo "</div>";
2339     }
2340    
2341     // {{{
2342    
2343     // getter
2344     function getValIdDemandeur() {
2345     return $this->valIdDemandeur;
2346     }
2347     // setter
2348     function setValIdDemandeur($valIdDemandeur) {
2349     $this->valIdDemandeur = $valIdDemandeur;
2350     }
2351    
2352     //Supression du lien entre la demandeur et le(s) demandeur(s)
2353     function triggerSupprimer($id, &$db, $val, $DEBUG){
2354    
2355     //Création de la requête
2356     $sql = "DELETE FROM
2357     ".DB_PREFIXE."lien_demande_demandeur
2358     WHERE
2359     demande = $id";
2360    
2361     $res = $this->f->db->query($sql);
2362     $this->f->addToLog("triggerSupprimer() : db->query(\"".$sql."\")");
2363     if ($this->f->isDatabaseError($res, true)) {
2364     return false;
2365     }
2366    
2367     //
2368     return true;
2369     }
2370    
2371     // }}}
2372    
2373     /**
2374     * Récupère le champ "qualification" du type de la demande
2375     * @param integer $demande_type Identifiant du type de la demande
2376     * @return boolean
2377     */
2378     function get_qualification($demande_type) {
2379    
2380     // Initialise le résultat
2381     $qualification = "";
2382    
2383     // Si la condition existe
2384     if (is_numeric($demande_type)) {
2385    
2386     // Requête SQL
2387     $sql = "SELECT qualification
2388     FROM ".DB_PREFIXE."demande_type
2389     WHERE demande_type = $demande_type";
2390     $qualification = $this->db->getOne($sql);
2391     $this->f->addToLog("get_qualification() : db->getOne(\"".$sql."\")",
2392     VERBOSE_MODE);
2393     $this->f->isDatabaseError($qualification);
2394     }
2395    
2396     // Retourne le résultat
2397     return $qualification;
2398     }
2399    
2400     /**
2401     * Récupère les champs archive_* d'une instruction
2402     * @param string $dossier L'identifiant du dossier d'instruction
2403     */
2404     public function getArchiveInstruction($dossierID){
2405    
2406     //On récupère les données du dernier DI accordé
2407     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
2408     dossier.avis_decision,
2409     to_char(dossier.date_complet, 'DD/MM/YYYY') as date_complet,
2410 nmeucci 3873 to_char(dossier.date_depot, 'DD/MM/YYYY') as date_depot,
2411 mbroquet 3730 to_char(dossier.date_dernier_depot, 'DD/MM/YYYY') as date_dernier_depot,
2412     to_char(dossier.date_rejet, 'DD/MM/YYYY') as date_rejet,
2413     to_char(dossier.date_limite, 'DD/MM/YYYY') as date_limite,
2414     to_char(dossier.date_notification_delai, 'DD/MM/YYYY') as date_notification_delai,
2415     to_char(dossier.date_decision, 'DD/MM/YYYY') as date_decision,
2416     to_char(dossier.date_validite, 'DD/MM/YYYY') as date_validite,
2417     to_char(dossier.date_achevement, 'DD/MM/YYYY') as date_achevement,
2418     to_char(dossier.date_chantier, 'DD/MM/YYYY') as date_chantier,
2419     to_char(dossier.date_conformite, 'DD/MM/YYYY') as date_conformite,
2420     dossier.incompletude,
2421     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
2422     dossier.etat_pendant_incompletude,
2423     to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') as date_limite_incompletude,
2424     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite
2425     ,dossier.dossier, dossier.incomplet_notifie
2426     FROM ".DB_PREFIXE."dossier
2427     LEFT JOIN ".DB_PREFIXE."avis_decision
2428     ON dossier.avis_decision = avis_decision.avis_decision
2429     WHERE dossier.avis_decision IS NOT NULL AND avis_decision.typeavis = 'F'
2430     AND dossier.dossier_autorisation = (
2431     SELECT dossier_autorisation.dossier_autorisation
2432     FROM ".DB_PREFIXE."dossier_autorisation
2433     LEFT JOIN ".DB_PREFIXE."dossier
2434     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2435     WHERE dossier = '".$dossierID."')
2436     ORDER BY dossier.version DESC";
2437    
2438     $res = $this->db->query($sql);
2439     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
2440     if ($this->f->isDatabaseError($res, true)) {
2441     return false;
2442     }
2443    
2444     //Un des dosssiers d'instruction a été accordé, on récupère ses données
2445     if ( $res->numrows() != 0 ){
2446    
2447     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2448     require_once "../obj/instruction.class.php";
2449     $instruction = new instruction("]",$this->db,DEBUG);
2450    
2451     $instruction->setParameter("maj", 1);
2452     $instruction->updateArchiveData($row);
2453     return $instruction->valF;
2454     }
2455     //Sinon, on prend les données du P0, si ce n'est pas un P0
2456     else {
2457     $sql = "SELECT dossier.delai, dossier.accord_tacite, dossier.etat,
2458     dossier.avis_decision, dossier.date_complet, dossier.date_dernier_depot,
2459     dossier.date_rejet, dossier.date_limite, dossier.date_notification_delai,
2460     dossier.date_decision, dossier.date_validite, dossier.date_achevement,
2461     dossier.date_chantier, dossier.date_conformite, dossier.incompletude,
2462     dossier.evenement_suivant_tacite, dossier.evenement_suivant_tacite_incompletude,
2463     dossier.etat_pendant_incompletude, dossier.date_limite_incompletude,
2464     dossier.delai_incompletude, dossier.autorite_competente, dossier.duree_validite,
2465 nmeucci 3873 dossier.dossier, dossier.incomplet_notifie, dossier.date_depot
2466 mbroquet 3730 FROM ".DB_PREFIXE."dossier
2467     LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
2468     ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
2469     WHERE dossier.dossier_autorisation = (
2470     SELECT dossier_autorisation.dossier_autorisation
2471     FROM ".DB_PREFIXE."dossier_autorisation
2472     LEFT JOIN ".DB_PREFIXE."dossier
2473     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2474     WHERE dossier = '".$dossierID."')
2475     AND dossier_instruction_type.code = 'P'
2476     ORDER BY dossier.version DESC";
2477     $res = $this->db->query($sql);
2478     $this->addToLog("updateArchiveInstruction(): db->query(\"".$sql."\");", VERBOSE_MODE);
2479     if ($this->f->isDatabaseError($res, true)) {
2480     return false;
2481     }
2482    
2483     //On est pas dans le cas d'un dépôt d'un P0
2484     if ( $res->numrows() != 0 ){
2485     $row=& $res->fetchRow(DB_FETCHMODE_ASSOC);
2486     require_once "../obj/instruction.class.php";
2487     $instruction = new instruction("]",$this->db,DEBUG);
2488     $instruction->setParameter("maj", 1);
2489     $instruction->updateArchiveData($row);
2490     return $instruction->valF;
2491     }
2492     }
2493     }
2494    
2495     /**
2496     * Cette methode permet d'afficher le bouton de validation du formulaire
2497     *
2498     * @param integer $maj Mode de mise a jour
2499     * @return void
2500     */
2501     function bouton($maj) {
2502    
2503     if (!$this->correct
2504     && $this->checkActionAvailability() == true) {
2505     //
2506     switch($maj) {
2507     case 0 :
2508     $bouton = _("Ajouter");
2509     break;
2510     case 1 :
2511     $bouton = _("Modifier");
2512     break;
2513     case 2 :
2514     $bouton = _("Supprimer");
2515     break;
2516     default :
2517     // Actions specifiques
2518     if ($this->get_action_param($maj, "button") != null) {
2519     //
2520     $bouton = $this->get_action_param($maj, "button");
2521     } else {
2522     //
2523     $bouton = _("Valider");
2524     }
2525     break;
2526     }
2527     //
2528     $params = array(
2529     "value" => $bouton,
2530     "name" => "submit",
2531     "onclick"=>"return getDataFieldReferenceCadastrale();",
2532     );
2533     //
2534     $this->f->layout->display_form_button($params);
2535     }
2536    
2537     }
2538    
2539     /**
2540     * Récupère l'instance de la classe taxe_amenagement.
2541     *
2542     * @param integer $om_collectivite La collectivité
2543     *
2544     * @return object
2545     */
2546     function get_inst_taxe_amenagement_by_om_collectivite($om_collectivite) {
2547     //
2548     if (is_null($this->inst_taxe_amenagement)) {
2549     //
2550     $taxe_amenagement = $this->get_taxe_amenagement_by_om_collectivite($om_collectivite);
2551     //
2552     require_once "../obj/taxe_amenagement.class.php";
2553     $this->inst_taxe_amenagement = new taxe_amenagement($taxe_amenagement);
2554     }
2555     //
2556     return $this->inst_taxe_amenagement;
2557     }
2558    
2559     /**
2560     * Récupère l'identifiant de la taxe d'aménagement par rapport à la collectivité.
2561     *
2562     * @param integer $om_collectivite La collectivité
2563     *
2564     * @return integer
2565     */
2566     function get_taxe_amenagement_by_om_collectivite($om_collectivite) {
2567     //
2568     $sql = "SELECT taxe_amenagement
2569     FROM ".DB_PREFIXE."taxe_amenagement
2570     WHERE om_collectivite = ".intval($om_collectivite);
2571     $collectivite = $this->f->db->getOne($sql);
2572     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\")", VERBOSE_MODE);
2573     $this->f->isDatabaseError($collectivite);
2574    
2575     //
2576     return $collectivite;
2577     }
2578    
2579    
2580     /**
2581     * Récupère l'instance du dossier d'autorisation.
2582     *
2583     * @param string $dossier_autorisation Identifiant du dossier d'autorisation.
2584     *
2585     * @return object
2586     */
2587     private function get_inst_dossier_autorisation($dossier_autorisation = null) {
2588     //
2589     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
2590     }
2591    
2592    
2593     }// fin classe
2594     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26