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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5254 - (hide annotations)
Fri Nov 25 10:59:14 2016 UTC (8 years, 2 months ago) by nhaye
File size: 122762 byte(s)
Merge de la branche d'application des nouvelles actions (passage des lots en nouvelles actions)

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26