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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26