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($this->valF["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 |
* si au moins un dossier a été accepté |
375 |
*/ |
376 |
// Requête de vérification du nombre de dossiers acceptés |
377 |
$sqlDossierAccepte = "SELECT count(*) |
378 |
FROM ".DB_PREFIXE."dossier |
379 |
JOIN ".DB_PREFIXE."avis_decision |
380 |
ON dossier.avis_decision |
381 |
= avis_decision.avis_decision |
382 |
WHERE dossier.dossier_autorisation |
383 |
= '".$this->getVal("dossier_autorisation")."' |
384 |
AND date_decision IS NOT NULL |
385 |
AND avis_decision.typeavis='F' |
386 |
GROUP BY version |
387 |
ORDER BY version DESC |
388 |
LIMIT 1"; |
389 |
$nbDossierAccepte = $this->db->getOne($sqlDossierAccepte); |
390 |
$this->addToLog("majDossierAutorisation(): db->getone(\"". |
391 |
$sqlDossierAccepte."\")", VERBOSE_MODE); |
392 |
if(database::isError($nbDossierAccepte)) { |
393 |
// Appel de la methode de recuperation des erreurs |
394 |
$this->erreur_db($nbDossierAccepte->getDebugInfo(), |
395 |
$nbDossierAccepte->getMessage(), ''); |
396 |
return false; |
397 |
} |
398 |
// On sort de cette méthode si pas de dossier accepté |
399 |
if($nbDossierAccepte <= 0) { |
400 |
return; |
401 |
} |
402 |
// Initialisation des requêtes |
403 |
$sql_terrain = "SELECT dossier.terrain_references_cadastrales, |
404 |
dossier.terrain_adresse_voie_numero, |
405 |
dossier.terrain_adresse_voie, |
406 |
dossier.terrain_adresse_lieu_dit, |
407 |
dossier.terrain_adresse_localite, |
408 |
dossier.terrain_adresse_code_postal, |
409 |
dossier.terrain_adresse_bp, |
410 |
dossier.terrain_adresse_cedex, |
411 |
dossier.terrain_superficie |
412 |
FROM ".DB_PREFIXE."dossier"; |
413 |
|
414 |
$sql_lots = "SELECT lot.lot |
415 |
FROM ".DB_PREFIXE."lot |
416 |
JOIN ".DB_PREFIXE."dossier ON dossier.dossier = lot.dossier"; |
417 |
|
418 |
$sql_demandeurs = "SELECT lien_dossier_demandeur.demandeur, lien_dossier_demandeur.petitionnaire_principal, |
419 |
lien_dossier_demandeur.lien_dossier_demandeur, lien_dossier_demandeur.dossier |
420 |
FROM ".DB_PREFIXE."lien_dossier_demandeur |
421 |
LEFT JOIN ".DB_PREFIXE."dossier ON |
422 |
lien_dossier_demandeur.dossier = dossier.dossier"; |
423 |
$sql_etat = "SELECT avis_decision.typeavis |
424 |
FROM ".DB_PREFIXE."dossier"; |
425 |
// Récupération du nombre de dossiers d'instruction liés au dossier d'autorisation |
426 |
$sql_count_di = "SELECT count(*) FROM ".DB_PREFIXE."dossier as di |
427 |
WHERE di.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"; |
428 |
|
429 |
$count_di = $this->db->getOne($sql_count_di); |
430 |
$this->addToLog("majDossierAutorisation(): db->getone(\"".$sql_count_di."\")", VERBOSE_MODE); |
431 |
if(database::isError($count_di)) { |
432 |
// Appel de la methode de recuperation des erreurs |
433 |
$this->erreur_db($count_di->getDebugInfo(), $count_di->getMessage(), ''); |
434 |
return false; |
435 |
} |
436 |
// Si pas de dossier : erreur |
437 |
if ($count_di == 0) { |
438 |
return false; |
439 |
} elseif ($count_di == 1) { // Cas P0 (en cours ou non) ou de plusieurs DI en cours |
440 |
$sql_where = " WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"; |
441 |
} else { // Cas ou un dossier d'instruction est soumis à arrété |
442 |
$sql_where = " WHERE dossier.dossier = ( |
443 |
SELECT dossier.dossier |
444 |
FROM ".DB_PREFIXE."dossier |
445 |
JOIN ".DB_PREFIXE."avis_decision |
446 |
ON dossier.avis_decision = avis_decision.avis_decision |
447 |
WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' |
448 |
AND date_decision IS NOT NULL |
449 |
AND avis_decision.typeavis='F' |
450 |
ORDER BY version DESC |
451 |
LIMIT 1 |
452 |
)"; |
453 |
} |
454 |
|
455 |
//terrain |
456 |
$res_terrain = $this->db->query($sql_terrain.$sql_where); |
457 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_terrain.$sql_where."\")", VERBOSE_MODE); |
458 |
if(database::isError($res_terrain)) { |
459 |
// Appel de la methode de recuperation des erreurs |
460 |
$this->erreur_db($res_terrain->getDebugInfo(), $res_terrain->getMessage(), ''); |
461 |
return false; |
462 |
} |
463 |
$row_terrain = $res_terrain->fetchRow(DB_FETCHMODE_ASSOC); |
464 |
// Tous les champs vides sont mis à NULL pour éviter les erreurs de base lors de l'update |
465 |
foreach ($row_terrain as $key => $champ) { |
466 |
if ($champ == "") { |
467 |
$row_terrain[$key] = NULL; |
468 |
} |
469 |
} |
470 |
$res_update_terrain = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation", |
471 |
$row_terrain, |
472 |
DB_AUTOQUERY_UPDATE, |
473 |
"dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"); |
474 |
if(database::isError($res_update_terrain)) { |
475 |
// Appel de la methode de recuperation des erreurs |
476 |
$this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), ''); |
477 |
return false; |
478 |
} |
479 |
|
480 |
// Lots / demandeur |
481 |
// Suppression des anciens liens entre les lots et le DA |
482 |
$valLot['dossier_autorisation'] = NULL; |
483 |
$res_update_lots = $this->db->autoExecute(DB_PREFIXE."lot", |
484 |
$valLot, |
485 |
DB_AUTOQUERY_UPDATE, |
486 |
"dossier_autorisation='".$this->getVal("dossier_autorisation")."'"); |
487 |
$sql = "SELECT count(*) FROM ".DB_PREFIXE."lot WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'"; |
488 |
if(database::isError($res_update_lots)) { |
489 |
// Appel de la methode de recuperation des erreurs |
490 |
$this->erreur_db($res_update_terrain->getDebugInfo(), $res_update_terrain->getMessage(), ''); |
491 |
return false; |
492 |
} |
493 |
// Suppression des anciens liens dossier_autorisation/demandeurs |
494 |
$sql_delete_liens_da_demandeur = "DELETE FROM ".DB_PREFIXE."lien_dossier_autorisation_demandeur |
495 |
WHERE dossier_autorisation='".$this->getVal("dossier_autorisation")."'"; |
496 |
$res_delete_liens_da_demandeur = $this->db->query($sql_delete_liens_da_demandeur); |
497 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_delete_liens_da_demandeur."\")", VERBOSE_MODE); |
498 |
if(database::isError($res_delete_liens_da_demandeur)) { |
499 |
// Appel de la methode de recuperation des erreurs |
500 |
$this->erreur_db($res_delete_liens_da_demandeur->getDebugInfo(), $res_delete_liens_da_demandeur->getMessage(), ''); |
501 |
return false; |
502 |
} |
503 |
// Si il ya des lots liés on les remonte au DA et on omet les demandeurs |
504 |
// car ils sont liés aux lots |
505 |
$res_lots = $this->db->query($sql_lots.$sql_where); |
506 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_lots.$sql_where."\")", VERBOSE_MODE); |
507 |
if(database::isError($res_lots)) { |
508 |
// Appel de la methode de recuperation des erreurs |
509 |
$this->erreur_db($res_lots->getDebugInfo(), $res_lots->getMessage(), ''); |
510 |
return false; |
511 |
} |
512 |
|
513 |
// XXX Si il existe des lots (auxquels les demandeurs sont lié) faut-il recupérer la liste des demandeurs liés au DI ? |
514 |
//if ($res_lots->numRows() > 0) { |
515 |
// Définition du lien entre lot et dossier_autorisation pour chaque lot |
516 |
$valLotUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation"); |
517 |
// On lie chaque lot en définissant l'id du dossier d'autorisation |
518 |
while ($rowlot = $res_lots->fetchRow(DB_FETCHMODE_ASSOC)) { |
519 |
$res_lots_update = $this->db->autoExecute(DB_PREFIXE."lot", |
520 |
$valLotUpdate, |
521 |
DB_AUTOQUERY_UPDATE, |
522 |
"lot=".$rowlot['lot']); |
523 |
if(database::isError($res_lots_update)) { |
524 |
// Appel de la methode de recuperation des erreurs |
525 |
$this->erreur_db($res_lots_update->getDebugInfo(), $res_lots_update->getMessage(), ''); |
526 |
return false; |
527 |
} |
528 |
} |
529 |
//} else { // Si pas de lot liaison avec les demandeurs |
530 |
// Récupération de la liste des demandeurs |
531 |
$res_demandeurs = $this->db->query($sql_demandeurs.$sql_where); |
532 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_demandeurs.$sql_where."\")", VERBOSE_MODE); |
533 |
if(database::isError($res_demandeurs)) { |
534 |
// Appel de la methode de recuperation des erreurs |
535 |
$this->erreur_db($res_demandeurs->getDebugInfo(), $res_demandeurs->getMessage(), ''); |
536 |
return false; |
537 |
} |
538 |
// Définition de l'id du DA |
539 |
$valDemandeurUpdate["lien_dossier_autorisation_demandeur"] = NULL; |
540 |
$valDemandeurUpdate['dossier_autorisation'] = $this->getVal("dossier_autorisation"); |
541 |
// Pour chaque demandeur on créer un lien avec le DA |
542 |
while ($rowDemandeur = $res_demandeurs->fetchRow(DB_FETCHMODE_ASSOC)) { |
543 |
// Ajout de l'id du demandeur et du flag petitionnaire_principal |
544 |
// aux données à insérer |
545 |
$valDemandeurUpdate["demandeur"] = $rowDemandeur["demandeur"]; |
546 |
$valDemandeurUpdate["petitionnaire_principal"] = $rowDemandeur["petitionnaire_principal"]; |
547 |
// Instanciation d'un lien dossier_autorisation/demandeur en ajout |
548 |
require_once "../obj/lien_dossier_autorisation_demandeur.class.php"; |
549 |
$ldad = new lien_dossier_autorisation_demandeur("]", $this->db, DEBUG); |
550 |
// Ajout d'un enregistrement avec les données des liens |
551 |
$ldad->ajouter($valDemandeurUpdate, $this->db, DEBUG); |
552 |
} |
553 |
//} |
554 |
|
555 |
|
556 |
/** |
557 |
* Mise à jour des dates |
558 |
*/ |
559 |
// Requêtes permettant de les recupérer |
560 |
$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 |
561 |
WHERE dossier.dossier_autorisation='".$this->getVal("dossier_autorisation")."'"; |
562 |
|
563 |
$sql_date_doc_daact = "SELECT MAX(dossier.date_chantier) as date_chantier, MAX(dossier.date_achevement) as date_achevement FROM ".DB_PREFIXE."dossier |
564 |
LEFT OUTER JOIN ".DB_PREFIXE."avis_decision ON |
565 |
dossier.avis_decision = avis_decision.avis_decision |
566 |
WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' |
567 |
AND date_decision IS NOT NULL AND avis_decision.typeavis='F'"; |
568 |
// Récupération des infos avec la 1ere requête |
569 |
$res_date_depot_decision_validite = $this->db->query($sql_date_depot_decision_validite); |
570 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_depot_decision_validite."\")", VERBOSE_MODE); |
571 |
if(database::isError($res_date_depot_decision_validite)) { |
572 |
// Appel de la methode de recuperation des erreurs |
573 |
$this->erreur_db($res_date_depot_decision_validite->getDebugInfo(), $res_date_depot_decision_validite->getMessage(), ''); |
574 |
return false; |
575 |
} |
576 |
$row_date_depot_decision_validite = $res_date_depot_decision_validite->fetchRow(DB_FETCHMODE_ASSOC); |
577 |
// Récupération des infos avec la 2nd requête |
578 |
$res_date_doc_daact = $this->db->query($sql_date_doc_daact); |
579 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_date_doc_daact."\")", VERBOSE_MODE); |
580 |
if(database::isError($res_date_doc_daact)) { |
581 |
// Appel de la methode de recuperation des erreurs |
582 |
$this->erreur_db($res_date_doc_daact->getDebugInfo(), $res_date_doc_daact->getMessage(), ''); |
583 |
return false; |
584 |
} |
585 |
$row_date_doc_daact = $res_date_doc_daact->fetchRow(DB_FETCHMODE_ASSOC); |
586 |
// Fusion des 2 résultats |
587 |
$row_date = array_merge($row_date_depot_decision_validite, $row_date_doc_daact); |
588 |
// Si pas de date on remplace "" par NULL pour éviter les erreurs de base de données |
589 |
foreach($row_date as $key => $date) { |
590 |
if($date == "") { |
591 |
$row_date[$key] = NULL; |
592 |
} |
593 |
} |
594 |
// Mise à jour du DA avec ces nouvelles dates |
595 |
$res_update_date = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation", |
596 |
$row_date, |
597 |
DB_AUTOQUERY_UPDATE, |
598 |
"dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"); |
599 |
if(database::isError($res_update_date)) { |
600 |
// Appel de la methode de recuperation des erreurs |
601 |
$this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), ''); |
602 |
return false; |
603 |
} |
604 |
|
605 |
/** |
606 |
* Mise à jour de l'état |
607 |
*/ |
608 |
$sql_etat = "SELECT avis_decision.typeavis, avis_decision.avis_decision |
609 |
FROM ".DB_PREFIXE."dossier |
610 |
LEFT JOIN ".DB_PREFIXE."avis_decision ON |
611 |
dossier.avis_decision = avis_decision.avis_decision"; |
612 |
|
613 |
// Récupération de le décision du dernier dossier en cours ou non |
614 |
$sql_encours = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' ORDER BY dossier.version DESC"; |
615 |
|
616 |
// Récupération de la décision du dernier dossier accepté |
617 |
$sql_cloture = $sql_etat." WHERE dossier.dossier_autorisation = '".$this->getVal("dossier_autorisation")."' |
618 |
AND date_decision IS NOT NULL AND avis_decision.typeavis='F' |
619 |
ORDER BY dossier.version DESC"; |
620 |
|
621 |
$res_encours = $this->db->query($sql_encours); |
622 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_encours."\")", VERBOSE_MODE); |
623 |
if(database::isError($res_encours)) { |
624 |
// Appel de la methode de recuperation des erreurs |
625 |
$this->erreur_db($res_encours->getDebugInfo(), $res_encours->getMessage(), ''); |
626 |
return false; |
627 |
} |
628 |
|
629 |
$row_encours = $res_encours->fetchRow(DB_FETCHMODE_ASSOC); |
630 |
$etatDA = array(); |
631 |
|
632 |
// Cas initial : on défini les trois valeurs par défaut |
633 |
// (elles seront écrasées si $res_encours->numRows() > 1) |
634 |
|
635 |
// Correspondance entre typeavis et etat_dossier_autorisation |
636 |
switch ($row_encours['typeavis']) { |
637 |
case 'F': |
638 |
// typeavis F => Accordé |
639 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 2; |
640 |
$etatDA['etat_dossier_autorisation'] = 2; |
641 |
break; |
642 |
case 'D': |
643 |
// typeavis D => Refusé |
644 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 4; |
645 |
$etatDA['etat_dossier_autorisation'] = 4; |
646 |
break; |
647 |
case 'A': |
648 |
// typeavis A => Abandonné |
649 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 3; |
650 |
$etatDA['etat_dossier_autorisation'] = 3; |
651 |
break; |
652 |
default: |
653 |
// typeavis '' => En cours |
654 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = NULL; |
655 |
$etatDA['etat_dossier_autorisation'] = 1; |
656 |
break; |
657 |
} |
658 |
$etatDA['avis_decision'] = $row_encours['avis_decision']; |
659 |
|
660 |
// Si plus d'un dossier d'instruction |
661 |
if($res_encours->numRows() > 1) { |
662 |
$res_cloture = $this->db->query($sql_cloture); |
663 |
$this->addToLog("majDossierAutorisation(): db->query(\"".$sql_cloture."\")", VERBOSE_MODE); |
664 |
if(database::isError($res_cloture)) { |
665 |
// Appel de la methode de recuperation des erreurs |
666 |
$this->erreur_db($res_cloture->getDebugInfo(), $res_cloture->getMessage(), ''); |
667 |
return false; |
668 |
} |
669 |
|
670 |
$row_cloture = $res_cloture->fetchRow(DB_FETCHMODE_ASSOC); |
671 |
// Correspondance entre typeavis et etat_dossier_autorisation |
672 |
switch ($row_cloture['typeavis']) { |
673 |
case 'F': |
674 |
// typeavis F => Accordé |
675 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 2; |
676 |
break; |
677 |
case 'D': |
678 |
// typeavis D => Refusé |
679 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 4; |
680 |
break; |
681 |
case 'A': |
682 |
// typeavis A => Abandonné |
683 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = 3; |
684 |
break; |
685 |
default: |
686 |
// typeavis '' => En cours |
687 |
$etatDA['etat_dernier_dossier_instruction_accepte'] = NULL; |
688 |
break; |
689 |
} |
690 |
$etatDA['avis_decision'] = $row_cloture['avis_decision']; |
691 |
} |
692 |
foreach($etatDA as $key=>$val) { |
693 |
if($val=="") { |
694 |
$etatDA[$key] = NULL; |
695 |
} |
696 |
} |
697 |
|
698 |
// Mise à jour du DA avec ces nouvelles dates |
699 |
$res_update_etat = $this->db->autoExecute(DB_PREFIXE."dossier_autorisation", |
700 |
$etatDA, |
701 |
DB_AUTOQUERY_UPDATE, |
702 |
"dossier_autorisation = '".$this->getVal("dossier_autorisation")."'"); |
703 |
if(database::isError($res_update_date)) { |
704 |
// Appel de la methode de recuperation des erreurs |
705 |
$this->erreur_db($res_update_date->getDebugInfo(), $res_update_date->getMessage(), ''); |
706 |
return false; |
707 |
} |
708 |
|
709 |
// Si le champ des références cadastrales n'est pas vide |
710 |
if ($this->getVal('terrain_references_cadastrales') |
711 |
!= $row_terrain['terrain_references_cadastrales']) { |
712 |
|
713 |
// On supprime toutes les lignes de la table |
714 |
// dossier_autorisation_parcelle qui font référence au |
715 |
// dossier d'autorisation en cours de suppression |
716 |
$this->supprimer_dossier_autorisation_parcelle($this->getVal('dossier_autorisation')); |
717 |
|
718 |
// Ajout des parcelles dans la table dossier_autorisation_parcelle |
719 |
$this->ajouter_dossier_autorisation_parcelle($this->getVal('dossier_autorisation'), |
720 |
$row_terrain['terrain_references_cadastrales']); |
721 |
|
722 |
} |
723 |
} |
724 |
|
725 |
/** |
726 |
* Ajoute les parcelles du dossier d'autorisation passé en paramètre |
727 |
* @param string $dossier_autorisation Identifiant du dossier |
728 |
* @param string $terrain_references_cadastrales Références cadastrales du |
729 |
* dossier |
730 |
*/ |
731 |
function ajouter_dossier_autorisation_parcelle($dossier_autorisation, $terrain_references_cadastrales) { |
732 |
|
733 |
// Parse les parcelles |
734 |
$list_parcelles = $this->f->parseParcelles($terrain_references_cadastrales); |
735 |
|
736 |
// Fichier requis |
737 |
require_once "../obj/dossier_autorisation_parcelle.class.php"; |
738 |
|
739 |
// A chaque parcelle une nouvelle ligne est créée dans la table |
740 |
// dossier_parcelle |
741 |
foreach ($list_parcelles as $parcelle) { |
742 |
|
743 |
// Instance de la classe dossier_parcelle |
744 |
$dossier_autorisation_parcelle = new dossier_autorisation_parcelle("]", $this->db, DEBUG); |
745 |
|
746 |
// Valeurs à sauvegarder |
747 |
$value = array( |
748 |
'dossier_autorisation_parcelle' => '', |
749 |
'dossier_autorisation' => $dossier_autorisation, |
750 |
'parcelle' => '', |
751 |
'libelle' => $parcelle['quartier'] |
752 |
.$parcelle['section'] |
753 |
.$parcelle['parcelle'] |
754 |
); |
755 |
|
756 |
// Ajout de la ligne |
757 |
$dossier_autorisation_parcelle->ajouter($value, $this->db, DEBUG); |
758 |
} |
759 |
|
760 |
} |
761 |
|
762 |
/** |
763 |
* Supprime les parcelles du dossier d'autorisation passé en paramètre |
764 |
* @param string $dossier_autorisation Identifiant du dossier |
765 |
*/ |
766 |
function supprimer_dossier_autorisation_parcelle($dossier_autorisation) { |
767 |
|
768 |
// Suppression des parcelles du dossier d'autorisation |
769 |
$sql = "DELETE FROM ".DB_PREFIXE."dossier_autorisation_parcelle |
770 |
WHERE dossier_autorisation='".$dossier_autorisation."'"; |
771 |
$res = $this->db->query($sql); |
772 |
$this->addToLog("supprimer_dossier_autorisation_parcelle() db->query(\"".$sql."\");", VERBOSE_MODE); |
773 |
database::isError($res); |
774 |
|
775 |
} |
776 |
|
777 |
/** |
778 |
* Permet d’effectuer des actions après l’insertion des données dans la base |
779 |
*/ |
780 |
function triggerajouterapres($id, &$db, $val, $DEBUG) { |
781 |
|
782 |
// Si le champ des références cadastrales n'est pas vide |
783 |
if ($this->valF['terrain_references_cadastrales'] != '') { |
784 |
|
785 |
// Ajout des parcelles dans la table dossier_autorisation_parcelle |
786 |
$this->ajouter_dossier_autorisation_parcelle($this->valF['dossier_autorisation'], |
787 |
$this->valF['terrain_references_cadastrales']); |
788 |
|
789 |
} |
790 |
|
791 |
} |
792 |
|
793 |
}// fin classe |
794 |
?> |