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

Contents of /trunk/obj/dossier_autorisation.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2382 - (show annotations)
Thu Oct 10 16:48:16 2013 UTC (11 years, 3 months ago) by nhaye
File size: 36946 byte(s)
Modification de la façon dont les sequences pour la numérotation des dossiers sont créées.
Détection de l'existance de la sequence, sinon on la créer puis on l'a met à jour.

1 <?php
2 //$Id$
3 //gen openMairie le 14/11/2012 12:54
4
5 require_once ("../gen/obj/dossier_autorisation.class.php");
6
7 class dossier_autorisation extends dossier_autorisation_gen {
8
9
10 var $valIdDemandeur = array("petitionnaire_principal" => "",
11 "delegataire" => "",
12 "petitionnaire" => array());
13
14 function dossier_autorisation($id,&$db,$debug) {
15 $this->constructeur($id,$db,$debug);
16 }// fin constructeur
17
18
19 /**
20 * Assure que la date passee par reference soit en
21 * format attendu par la fonction dateDB du fichier
22 * core/om_dbform.class.php. Change le format de la
23 * date si necessaire.
24 * @param $string $field Le date dans format DB, ou
25 * celui attendu par setvalF
26 */
27 private function changeDateFormat(&$field) {
28 if (preg_match('/([0-9]{4})-([0-9]{2})-([0-9]{2})/',
29 $field, $matches)) {
30 $field = $matches[3].'/'.$matches[2].'/'.$matches[1];
31 }
32 }
33
34 function setvalF($val) {
35 // verifie que les dates envoyes au parent::setvalF sont ont
36 // bon format, et change le format si necessaire
37 $this->changeDateFormat($val['erp_date_ouverture']);
38 $this->changeDateFormat($val['erp_date_arrete_decision']);
39
40 parent::setvalF($val);
41
42 // si la valeur d'erp_arrete_decision n'etait pas set, laisse elle a null
43 if ($val['erp_arrete_decision'] == null) {
44 $this->valF['erp_arrete_decision'] = null;
45 }
46 // si la valeur d'erp_ouvert n'etait pas set, laisse elle a null
47 if ($val['erp_ouvert'] == null) {
48 $this->valF['erp_ouvert'] = null;
49 }
50 }
51
52 /**
53 * Méthode permettant de définir des valeurs à envoyer en base après
54 * validation du formulaire d'ajout.
55 * @param array $val tableau des valeurs retournées par le formulaire
56 */
57 function setValFAjout($val) {
58
59 // Récupération du type de dossier ou série
60 $sql = "SELECT da_t.code
61 FROM ".DB_PREFIXE."dossier_autorisation_type as da_t
62 INNER JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille as da_t_d
63 ON da_t.dossier_autorisation_type=da_t_d.dossier_autorisation_type
64 WHERE da_t_d.dossier_autorisation_type_detaille=".
65 $val['dossier_autorisation_type_detaille'].";";
66 //
67 $da_type_code = $this->db->getone($sql);
68 $this->addToLog("setValFAjout(): db->getone(\"".$sql."\")", VERBOSE_MODE);
69 database::isError($da_type_code);
70 // Récupération du code département
71 $departement = $this->f->getParameter("departement");
72 // Récupération du code commune
73 $commune = $this->f->getParameter("commune");
74 // Récupération du numéro du dossier
75 $numero_dossier = $this->createNumeroDossier($da_type_code);
76 if($numero_dossier === false) {
77 return false;
78 }
79 $annee = date('y', strtotime($val["depot_initial"]));
80 /// IDENTIFIANT DU DOSSIER
81 // PC 013 055 12 00001
82 $this->valF[$this->clePrimaire] =
83 $da_type_code.$departement.$commune.$annee.$numero_dossier;
84
85 // Identifiant du dossier d'autorisation lisible
86 // Ex : DP 013055 13 00002
87 $this->valF["dossier_autorisation_libelle"] =
88 $da_type_code." ".$departement.$commune." ".$annee." ".$numero_dossier;
89
90 }
91
92 // {{{
93 // getter
94 function getValIdDemandeur() {
95 return $this->valIdDemandeur;
96 }
97 // setter
98 function setValIdDemandeur($valIdDemandeur) {
99 $this->valIdDemandeur = $valIdDemandeur;
100 }
101 // }}}
102
103 /**
104 * Créée une numérotation pour le dossier à partir d'un numéro dans un séquence
105 * définie par le code du dossier_autorisation_type.
106 *
107 * @param string $datc type de dossier d'autorisation
108 * @return string numéro de dossier ou false.
109 */
110 function createNumeroDossier($datc) {
111
112 // Créer le code du dossier_autorisation_type associé au code du
113 // dossier_autorisation_type_detaille passé en paramètre.
114 if ( isset($datc) && is_string($datc) ){
115
116 // Récupère l'identifiant suivant dans la séquence correspondant au
117 // code passé en paramètre
118 $annee = date('y', strtotime($this->valF["depot_initial"]));
119 try {
120 $nextID = $this->db->nextId(
121 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee,
122 false);
123
124 if (PEAR::isError($nextID)) {
125 throw new Exception(
126 _("La sequence n'a pas ete mise a jour.")
127 );
128 }
129 $this->addToLog("createNumeroDossier(): db->nextId(
130 \"".DB_PREFIXE."dossier_".strtolower($datc).'_'.$annee."\");",
131 VERBOSE_MODE);
132 } catch (Exception $e) {
133 // Création de la sequence si elle n'existe pas
134 $res = $this->db->createSequence(
135 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee);
136 // Affichage du debug
137 $this->f->addToLog(
138 "createNumeroDossier(): db->createSequence(".DB_PREFIXE.
139 "\"dossier_".strtolower($datc).'_'.$annee."_seq\"
140 );", VERBOSE_MODE);
141
142 // Si une erreur est levé pour la création.
143 if (PEAR::isError($res)) {
144
145 // Appel de la methode de recuperation des erreurs
146 $this->erreur_db(
147 $res->getDebugInfo(),
148 $res->getMessage(),
149 'dossier_autorisation'
150 );
151 return false;
152 }
153
154 // Mise à jour de la sequence
155 // Récupération du code département
156 $dep = $this->f->getParameter("departement");
157 // Récupération du code commune
158 $com = $this->f->getParameter("commune");
159 // Vérification de la bonne configuration des paramètres
160 if($dep == "" or $com == "") {
161 $this->correct = false;
162 $this->addToMessage(
163 _("Erreur de parametrage. Contactez votre administrateur."));
164 }
165 // Récupération du dernier DA du typeDA passé en paramètre de
166 // l'année de dépôt
167 $sql_max_DA = "SELECT dossier_autorisation
168 FROM ".DB_PREFIXE."dossier_autorisation
169 WHERE dossier_autorisation
170 LIKE '".$datc.$dep.$com.$annee."%'
171 ORDER BY dossier_autorisation DESC";
172 $last_DA = $this->db->getone($sql_max_DA);
173 $this->f->addToLog(
174 "createNumeroDossier(): db->getone(\"".$sql_max_DA."\"
175 );", VERBOSE_MODE);
176 // Si une erreur est levé pour la création.
177 if (database::isError($last_DA)) {
178
179 // Appel de la methode de recuperation des erreurs
180 $this->erreur_db(
181 $nb_DA->getDebugInfo(),
182 $nb_DA->getMessage(),
183 'dossier_autorisation'
184 );
185 return false;
186 }
187 // Si au moins un dossier on récupère son id
188 if($last_DA != "") {
189 $id = intval(substr($last_DA, -5));
190
191 // Mise à jour de la sequence avec l'id recalculé
192 $sql_maj_seq = "SELECT setval('".DB_PREFIXE."dossier_".
193 strtolower($datc)."_".$annee."_seq',".$id.")";
194 $res_seq = $this->db->query($sql_maj_seq);
195 $this->f->addToLog(
196 "createNumeroDossier(): db->query(\"".$sql_maj_seq."\"
197 );", VERBOSE_MODE);
198 // Gestion d'erreurs
199 if (database::isError($res_seq)) {
200
201 // Appel de la methode de recuperation des erreurs
202 $this->erreur_db(
203 $res_seq->getDebugInfo(),
204 $res_seq->getMessage(),
205 'dossier_autorisation'
206 );
207 return false;
208 }
209 }
210
211 // Création du numéro de dossier
212 $nextID = $this->db->nextId(
213 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee,
214 false);
215 $this->f->addToLog(
216 "createNumeroDossier(): db->nextId(\"".
217 DB_PREFIXE.'dossier_'.strtolower($datc).'_'.$annee."\"
218 );", VERBOSE_MODE);
219 // Gestion des erreurs
220 if (PEAR::isError($nextID)) {
221 // Appel de la methode de recuperation des erreurs
222 $this->erreur_db(
223 $res_seq->getDebugInfo(),
224 $res_seq->getMessage(),
225 'dossier_autorisation'
226 );
227 return false;
228 }
229 }
230
231 $numero_dossier = str_pad($nextID, 5, "0", STR_PAD_LEFT);
232 }
233
234 return $numero_dossier;
235 }
236
237 /**
238 * Méthode permettant de récupérer les id des demandeur liés à la demande ou
239 * liés au dossier d'autorisation
240 **/
241 function listeDemandeur($from, $id) {
242 // Récupération des demandeurs de la base
243 $sql = "SELECT demandeur.demandeur,
244 demandeur.type_demandeur,
245 lien_".$from."_demandeur.petitionnaire_principal
246 FROM ".DB_PREFIXE."lien_".$from."_demandeur
247 INNER JOIN ".DB_PREFIXE."demandeur
248 ON demandeur.demandeur=lien_".$from."_demandeur.demandeur
249 WHERE ".$from." = '".$id."'";
250 $res = $this->f->db->query($sql);
251 $this->f->addToLog("listeDemandeur() : db->query(\"".$sql."\")", VERBOSE_MODE);
252 if ( database::isError($res)){
253 die();
254 }
255 // Stoquage du résultat dans un tableau
256 while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
257 if ($row['petitionnaire_principal'] == 't' AND
258 $row['type_demandeur']=="petitionnaire") {
259 $this->valIdDemandeur['petitionnaire_principal']=$row['demandeur'];
260 } elseif ($row['petitionnaire_principal'] == 'f' AND
261 $row['type_demandeur']=="petitionnaire"){
262 $this->valIdDemandeur['petitionnaire'][]=$row['demandeur'];
263 } elseif ($row['type_demandeur']=="delegataire"){
264 $this->valIdDemandeur['delegataire']=$row['demandeur'];
265 }
266 }
267 }
268
269 /**
270 * Ajout de la liste des demandeurs
271 */
272 function formSpecificContent($maj) {
273 if(!$this->correct AND $maj != 0) {
274 $this->listeDemandeur("dossier_autorisation", $this->val[array_search('dossier_autorisation', $this->champs)]);
275 }
276 if($maj < 2 AND !$this->correct) {
277 $linkable = true;
278 } else {
279 $linkable = false;
280 }
281
282 // Conteneur de la listes des demandeurs
283 echo "<div id=\"liste_demandeur\" class=\"demande_hidden_bloc col_12\">";
284 echo "<fieldset class=\"cadre ui-corner-all ui-widget-content\">";
285 echo " <legend class=\"ui-corner-all ui-widget-content ui-state-active\">"
286 ._("Petitionnaire")."</legend>";
287 // Si des demandeurs sont liés à la demande
288 require_once "../obj/petitionnaire.class.php";
289 require_once "../obj/delegataire.class.php";
290
291 // Affichage du bloc pétitionnaire principal / délégataire
292 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
293 echo "<div id=\"petitionnaire_principal_delegataire\">";
294 // Affichage de la synthèse
295 if (isset ($this->valIdDemandeur["petitionnaire_principal"]) AND
296 !empty($this->valIdDemandeur["petitionnaire_principal"])) {
297 $demandeur = new petitionnaire(
298 $this->valIdDemandeur["petitionnaire_principal"],
299 $this->f->db,false);
300 $demandeur -> afficherSynthese("petitionnaire_principal", $linkable);
301 $demandeur -> __destruct();
302 }
303 // Si en édition de formulaire
304 if($maj < 2) {
305 // Bouton d'ajout du pétitionnaire principal
306 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
307 echo "<span id=\"add_petitionnaire_principal\"
308 class=\"om-form-button add-16\">".
309 _("Saisir le petitionnaire principal").
310 "</span>";
311 }
312 // Bouton d'ajout du delegataire
313 // L'ID DU DIV ET DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
314 echo "<div id=\"delegataire\">";
315 if ($maj < 2 OR ($maj == 3 AND !empty($this->valIdDemandeur["delegataire"]))) {
316 echo " <span class=\"om-icon om-icon-16 om-icon-fix arrow-right-16\">
317 <!-- -->
318 </span> ";
319 }
320 // Affichage de la synthèse
321 if (isset ($this->valIdDemandeur["delegataire"]) AND
322 !empty($this->valIdDemandeur["delegataire"])) {
323 $demandeur = new delegataire($this->valIdDemandeur["delegataire"],
324 $this->f->db,false);
325 $demandeur -> afficherSynthese("delegataire", $linkable);
326 $demandeur -> __destruct();
327 }
328 if($maj < 2) {
329 echo "<span id=\"add_delegataire\"
330 class=\"om-form-button add-16\">".
331 _("Saisir le delegataire").
332 "</span>";
333 }
334 echo "</div>";
335
336 echo "</div>";
337 // Bloc des pétitionnaires secondaires
338 // L'ID DU DIV SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
339 echo "<div id=\"listePetitionnaires\">";
340
341 // Affichage de la synthèse
342 if (isset ($this->valIdDemandeur["petitionnaire"]) AND
343 !empty($this->valIdDemandeur["petitionnaire"])) {
344
345 foreach ($this->valIdDemandeur["petitionnaire"] as $petitionnaire) {
346 $demandeur = new petitionnaire($petitionnaire,
347 $this->f->db,false);
348 $demandeur -> afficherSynthese("petitionnaire", $linkable);
349 $demandeur -> __destruct();
350 }
351
352 }
353 if ($maj < 2) {
354 // L'ID DE L'INPUT SUIVANT EST NECESSAIRE AU BON FONCTIONNEMENT DU JS
355 echo "<span id=\"add_petitionnaire\"
356 class=\"om-form-button add-16\">".
357 _("Ajouter un petitionnaire")
358 ."</span>";
359 }
360 echo "</div>";
361 echo "</fieldset>";
362 echo "</div>";
363 }
364
365
366 /**
367 * Méthode permettant de recalculer à tout moment les données en cours de
368 * validité d'un dossier d'autorisation
369 */
370 function majDossierAutorisation() {
371
372 /*
373 * Mise à jour des données (terrain, ref. cadastrales, demandeurs, lots)
374 */
375 // Initialisation des requêtes
376 $sql_terrain = "SELECT dossier.terrain_references_cadastrales,
377 dossier.terrain_adresse_voie_numero,
378 dossier.terrain_adresse_voie,
379 dossier.terrain_adresse_lieu_dit,
380 dossier.terrain_adresse_localite,
381 dossier.terrain_adresse_code_postal,
382 dossier.terrain_adresse_bp,
383 dossier.terrain_adresse_cedex,
384 dossier.terrain_superficie
385 FROM ".DB_PREFIXE."dossier";
386
387 $sql_lots = "SELECT lot.lot
388 FROM ".DB_PREFIXE."lot
389 JOIN ".DB_PREFIXE."dossier ON dossier.dossier = lot.dossier";
390
391 $sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal,
392 lien_dossier_demandeur.lien_dossier_demandeur, lien_dossier_demandeur.dossier
393 FROM ".DB_PREFIXE."lien_dossier_demandeur
394 LEFT JOIN ".DB_PREFIXE."dossier ON
395 lien_dossier_demandeur.dossier = dossier.dossier";
396 $sql_etat = "SELECT avis_decision.typeavis
397 FROM ".DB_PREFIXE."dossier";
398 // Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation
399 $sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di
400 WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
401
402 $count_di = $this->db->getOne($sql_count_di);
403 $this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE);
404 if(database::isError($count_di)) {
405 // Appel de la methode de recuperation des erreurs
406 $this->erreur_db($count_di->getDebugInfo(), $count_di->getMessage(), '');
407 return false;
408 }
409 // Si pas de dossier : erreur
410 if ($count_di == 0) {
411 return false;
412 } elseif ($count_di == 1) { // Cas P0 (en cours ou non) ou de plusieurs DI en cours
413 $sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'";
414 } else { // Cas ou un dossier d'instruction est soumis à arrété
415 $sql_where = " WHERE dossier.dossier = (
416 SELECT dossier.dossier
417 FROM ".DB_PREFIXE."dossier
418 JOIN ".DB_PREFIXE."avis_decision
419 ON dossier.avis_decision = avis_decision.avis_decision
420 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
421 AND date_decision IS NOT NULL
422 AND avis_decision.typeavis='F'
423 ORDER BY version DESC
424 LIMIT 1
425 )";
426 }
427
428 //terrain
429 $res_terrain = $this->db->query($sql_terrain.$sql_where);
430 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE);
431 if(database::isError($res_terrain)) {
432 // Appel de la methode de recuperation des erreurs
433 $this->erreur_db($res_terrain->getDebugInfo(), $res_terrain->getMessage(), '');
434 return false;
435 }
436 $row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC);
437 // Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update
438 foreach ($row_terrain as $key => $champ) {
439 if ($champ == "") {
440 $row_terrain[$key] = NULL;
441 }
442 }
443 $res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
444 $row_terrain,
445 DB_AUTOQUERY_UPDATE,
446 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
447 if(database::isError($res_update_terrain)) {
448 // Appel de la methode de recuperation des erreurs
449 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
450 return false;
451 }
452
453 // Lots / demandeur
454 // Suppression des anciens liens entre les lots et le DA
455 $valLot['dossier_autorisation'] = NULL;
456 $res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot",
457 $valLot,
458 DB_AUTOQUERY_UPDATE,
459 "dossier_autorisation='".$this->getVal("dossier_autorisation")."'");
460 $sql = "SELECT count(*) FROM ".DB_PREFIXE."lot WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
461 if(database::isError($res_update_lots)) {
462 // Appel de la methode de recuperation des erreurs
463 $this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), '');
464 return false;
465 }
466 // Suppression des anciens liens dossier_autorisation/demandeurs
467 $sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur
468 WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
469 $res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur);
470 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE);
471 if(database::isError($res_delete_liens_da_demandeur)) {
472 // Appel de la methode de recuperation des erreurs
473 $this->erreur_db($res_delete_liens_da_demandeur->getDebugInfo(), $res_delete_liens_da_demandeur->getMessage(), '');
474 return false;
475 }
476 // Si il ya des lots liés on les remonte au DA et on omet les demandeurs
477 // car ils sont liés aux lots
478 $res_lots = $this->db->query($sql_lots.$sql_where);
479 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE);
480 if(database::isError($res_lots)) {
481 // Appel de la methode de recuperation des erreurs
482 $this->erreur_db($res_lots->getDebugInfo(), $res_lots->getMessage(), '');
483 return false;
484 }
485
486 // XXX Si il existe des lots (auxquels les demandeurs sont lié) faut-il recupérer la liste des demandeurs liés au DI ?
487 //if ($res_lots->numRows() > 0) {
488 // Définition du lien entre lot et dossier_autorisation pour chaque lot
489 $valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
490 // On lie chaque lot en définissant l'id du dossier d'autorisation
491 while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) {
492 $res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot",
493 $valLotUpdate,
494 DB_AUTOQUERY_UPDATE,
495 "lot=".$rowlot['lot']);
496 if(database::isError($res_lots_update)) {
497 // Appel de la methode de recuperation des erreurs
498 $this->erreur_db($res_lots_update->getDebugInfo(), $res_lots_update->getMessage(), '');
499 return false;
500 }
501 }
502 //} else { // Si pas de lot liaison avec les demandeurs
503 // Récupération de la liste des demandeurs
504 $res_demandeurs = $this->db->query($sql_demandeurs.$sql_where);
505 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE);
506 if(database::isError($res_demandeurs)) {
507 // Appel de la methode de recuperation des erreurs
508 $this->erreur_db($res_demandeurs->getDebugInfo(), $res_demandeurs->getMessage(), '');
509 return false;
510 }
511 // Définition de l'id du DA
512 $valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL;
513 $valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation");
514 // Pour chaque demandeur on créer un lien avec le DA
515 while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) {
516 // Ajout de l'id du demandeur et du flag petitionnaire_principal
517 // aux données à insérer
518 $valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"];
519 $valDemandeurUpdate["petitionnaire_principal"] = $rowDemandeur["petitionnaire_principal"];
520 // Instanciation d'un lien dossier_autorisation/demandeur en ajout
521 require_once "../obj/lien_dossier_autorisation_demandeur.class.php";
522 $ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG);
523 // Ajout d'un enregistrement avec les données des liens
524 $ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG);
525 }
526 //}
527
528
529 /**
530 * Mise à jour des dates
531 */
532 // Requêtes permettant de les recupérer
533 $sql_date_depot_decision_validite = "SELECT MIN(dossier.date_depot) as date_depot, MIN(dossier.date_decision) as date_decision, MAX(dossier.date_validite) as date_validite FROM ".DB_PREFIXE."dossier
534 WHERE dossier.dossier_autorisation='".$this->getVal("dossier_autorisation")."'";
535
536 $sql_date_doc_daact = "SELECT MAX(dossier.date_chantier) as date_chantier, MAX(dossier.date_achevement) as date_achevement FROM ".DB_PREFIXE."dossier
537 LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON
538 dossier.avis_decision = avis_decision.avis_decision
539 WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
540 AND date_decision IS NOT NULL AND avis_decision.typeavis='F'";
541 // Récupération des infos avec la 1ere requête
542 $res_date_depot_decision_validite = $this->db->query($sql_date_depot_decision_validite);
543 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_depot_decision_validite."\")", VERBOSE_MODE);
544 if(database::isError($res_date_depot_decision_validite)) {
545 // Appel de la methode de recuperation des erreurs
546 $this->erreur_db($res_date_depot_decision_validite->getDebugInfo(), $res_date_depot_decision_validite->getMessage(), '');
547 return false;
548 }
549 $row_date_depot_decision_validite = $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC);
550 // Récupération des infos avec la 2nd requête
551 $res_date_doc_daact = $this->db->query($sql_date_doc_daact);
552 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_doc_daact."\")", VERBOSE_MODE);
553 if(database::isError($res_date_doc_daact)) {
554 // Appel de la methode de recuperation des erreurs
555 $this->erreur_db($res_date_doc_daact->getDebugInfo(), $res_date_doc_daact->getMessage(), '');
556 return false;
557 }
558 $row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC);
559 // Fusion des 2 résultats
560 $row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact);
561 // Si pas de date on remplace "" par NULL pour éviter les erreurs de base de données
562 foreach($row_date as $key => $date) {
563 if($date == "") {
564 $row_date[$key] = NULL;
565 }
566 }
567 // Mise à jour du DA avec ces nouvelles dates
568 $res_update_date = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
569 $row_date,
570 DB_AUTOQUERY_UPDATE,
571 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
572 if(database::isError($res_update_date)) {
573 // Appel de la methode de recuperation des erreurs
574 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
575 return false;
576 }
577
578 /**
579 * Mise à jour de l'état
580 */
581 $sql_etat = "SELECT avis_decision.typeavis, avis_decision.avis_decision
582 FROM ".DB_PREFIXE."dossier
583 LEFT JOIN ".DB_PREFIXE."avis_decision ON
584 dossier.avis_decision = avis_decision.avis_decision";
585
586 // Récupération de le décision du dernier dossier en cours ou non
587 $sql_encours = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' ORDER BY dossier.version DESC";
588
589 // Récupération de la décision du dernier dossier accepté
590 $sql_cloture = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'
591 AND date_decision IS NOT NULL AND avis_decision.typeavis='F'
592 ORDER BY dossier.version DESC";
593
594 $res_encours = $this->db->query($sql_encours);
595 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_encours."\")", VERBOSE_MODE);
596 if(database::isError($res_encours)) {
597 // Appel de la methode de recuperation des erreurs
598 $this->erreur_db($res_encours->getDebugInfo(), $res_encours->getMessage(), '');
599 return false;
600 }
601
602 $row_encours = $res_encours->fetchRow(DB_FETCHMODE_ASSOC);
603 $etatDA = array();
604
605 // Cas initial : on défini les trois valeurs par défaut
606 // (elles seront écrasées si $res_encours->numRows() > 1)
607
608 // Correspondance entre typeavis et etat_dossier_autorisation
609 switch ($row_encours['typeavis']) {
610 case 'F':
611 // typeavis F => Accordé
612 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
613 $etatDA['etat_dossier_autorisation'] = 2;
614 break;
615 case 'D':
616 // typeavis D => Refusé
617 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
618 $etatDA['etat_dossier_autorisation'] = 4;
619 break;
620 case 'A':
621 // typeavis A => Abandonné
622 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
623 $etatDA['etat_dossier_autorisation'] = 3;
624 break;
625 default:
626 // typeavis '' => En cours
627 $etatDA['etat_dernier_dossier_instruction_accepte'] = NULL;
628 $etatDA['etat_dossier_autorisation'] = 1;
629 break;
630 }
631 $etatDA['avis_decision'] = $row_encours['avis_decision'];
632
633 // Si plus d'un dossier d'instruction
634 if($res_encours->numRows() > 1) {
635 $res_cloture = $this->db->query($sql_cloture);
636 $this->addToLog("majDossierAutorisation(): db->query(\"".$sql_cloture."\")", VERBOSE_MODE);
637 if(database::isError($res_cloture)) {
638 // Appel de la methode de recuperation des erreurs
639 $this->erreur_db($res_cloture->getDebugInfo(), $res_cloture->getMessage(), '');
640 return false;
641 }
642
643 $row_cloture = $res_cloture->fetchRow(DB_FETCHMODE_ASSOC);
644 // Correspondance entre typeavis et etat_dossier_autorisation
645 switch ($row_cloture['typeavis']) {
646 case 'F':
647 // typeavis F => Accordé
648 $etatDA['etat_dernier_dossier_instruction_accepte'] = 2;
649 break;
650 case 'D':
651 // typeavis D => Refusé
652 $etatDA['etat_dernier_dossier_instruction_accepte'] = 4;
653 break;
654 case 'A':
655 // typeavis A => Abandonné
656 $etatDA['etat_dernier_dossier_instruction_accepte'] = 3;
657 break;
658 default:
659 // typeavis '' => En cours
660 $etatDA['etat_dernier_dossier_instruction_accepte'] = NULL;
661 break;
662 }
663 $etatDA['avis_decision'] = $row_cloture['avis_decision'];
664 }
665 foreach($etatDA as $key=>$val) {
666 if($val=="") {
667 $etatDA[$key] = NULL;
668 }
669 }
670
671 // Mise à jour du DA avec ces nouvelles dates
672 $res_update_etat = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation",
673 $etatDA,
674 DB_AUTOQUERY_UPDATE,
675 "dossier_autorisation = '".$this->getVal("dossier_autorisation")."'");
676 if(database::isError($res_update_date)) {
677 // Appel de la methode de recuperation des erreurs
678 $this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), '');
679 return false;
680 }
681
682 // Si le champ des références cadastrales n'est pas vide
683 if ($this->getVal('terrain_references_cadastrales')
684 != $row_terrain['terrain_references_cadastrales']) {
685
686 // On supprime toutes les lignes de la table
687 // dossier_autorisation_parcelle qui font référence au
688 // dossier d'autorisation en cours de suppression
689 $this->supprimer_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'));
690
691 // Ajout des parcelles dans la table dossier_autorisation_parcelle
692 $this->ajouter_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'),
693 $row_terrain['terrain_references_cadastrales']);
694
695 }
696 }
697
698 /**
699 * Ajoute les parcelles du dossier d'autorisation passé en paramètre
700 * @param string $dossier_autorisation Identifiant du dossier
701 * @param string $terrain_references_cadastrales Références cadastrales du
702 * dossier
703 */
704 function ajouter_dossier_autorisation_parcelle($dossier_autorisation, $terrain_references_cadastrales) {
705
706 // Parse les parcelles
707 $list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales);
708
709 // Fichier requis
710 require_once "../obj/dossier_autorisation_parcelle.class.php";
711
712 // A chaque parcelle une nouvelle ligne est créée dans la table
713 // dossier_parcelle
714 foreach ($list_parcelles as $parcelle) {
715
716 // Instance de la classe dossier_parcelle
717 $dossier_autorisation_parcelle = new dossier_autorisation_parcelle("]", $this->db, DEBUG);
718
719 // Valeurs à sauvegarder
720 $value = array(
721 'dossier_autorisation_parcelle' => '',
722 'dossier_autorisation' => $dossier_autorisation,
723 'parcelle' => '',
724 'libelle' => $parcelle['quartier']
725 .$parcelle['section']
726 .$parcelle['parcelle']
727 );
728
729 // Ajout de la ligne
730 $dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG);
731 }
732
733 }
734
735 /**
736 * Supprime les parcelles du dossier d'autorisation passé en paramètre
737 * @param string $dossier_autorisation Identifiant du dossier
738 */
739 function supprimer_dossier_autorisation_parcelle($dossier_autorisation) {
740
741 // Suppression des parcelles du dossier d'autorisation
742 $sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle
743 WHERE dossier_autorisation='".$dossier_autorisation."'";
744 $res = $this->db->query($sql);
745 $this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE);
746 database::isError($res);
747
748 }
749
750 /**
751 * Permet d’effectuer des actions après l’insertion des données dans la base
752 */
753 function triggerajouterapres($id, &$db, $val, $DEBUG) {
754
755 // Si le champ des références cadastrales n'est pas vide
756 if ($this->valF['terrain_references_cadastrales'] != '') {
757
758 // Ajout des parcelles dans la table dossier_autorisation_parcelle
759 $this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'],
760 $this->valF['terrain_references_cadastrales']);
761
762 }
763
764 }
765
766 }// fin classe
767 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26