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 |
?> |