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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 5169 - (show annotations)
Thu Nov 17 18:17:08 2016 UTC (8 years, 2 months ago) by softime
File size: 22105 byte(s)
* Merge de la branche de développement 3.34.0 vers le trunk

1 <?php
2 //$Id: lot.class.php 4698 2015-04-30 16:17:47Z nmeucci $
3 //gen openMairie le 08/11/2012 14:59
4
5 require_once ("../gen/obj/lot.class.php");
6
7 class lot extends lot_gen {
8
9 var $donnees_techniques;
10 var $idDT;
11 var $inst_dossier = null;
12 var $inst_dossier_autorisation = null;
13 var $inst_dossier_autorisation_type_detaille = null;
14
15 function lot($id,&$db,$debug) {
16 $this->constructeur($id,$db,$debug);
17
18 }// fin constructeur
19
20
21 /**
22 * Méthode qui effectue les requêtes de configuration des champs.
23 *
24 * @param object &$form Formulaire.
25 * @param integer $maj Mode du formulaire.
26 *
27 * @return void
28 */
29 public function setSelect(&$form,$maj) {
30 // Le parent n'est pas appelé délibérament pour cause de performance.
31 // En effet, celui-ci charge toutes les données de la table dossier et
32 // de la table dossier_autorisation.
33 }
34
35
36 function triggerAjouterApres($id, &$db, $val, $DEBUG) {
37 parent::triggerAjouterApres($id, $db, $val, $DEBUG);
38
39 // Si en sous-formulaire
40 if($this->getParameter("idxformulaire") != "") {
41
42 // Insertion du lien demandeur/lot
43 require_once ("../obj/lien_lot_demandeur.class.php");
44 $lld = new lien_lot_demandeur("]", $db, $DEBUG);
45 $sqlDemandeur = "SELECT * FROM ".DB_PREFIXE."lien_dossier_demandeur
46 WHERE dossier='".$this->getParameter("idxformulaire")."'";
47 $res = $db->query($sqlDemandeur);
48 $this->f->addToLog("triggerAjouterApres() : db->query(\"".$sqlDemandeur."\");", VERBOSE_MODE);
49 if ( database::isError($res)){
50 die();
51 }
52 while($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
53 unset($row['lien_dossier_demandeur']);
54 unset($row['dossier']);
55 $row['lien_lot_demandeur'] = "";
56 $row['lot'] = $this->valF["lot"];
57 $lld->ajouter($row, $db, $DEBUG);
58 }
59
60 // Ajoute une ligne dans les données techniques
61 $add_dt = $this->add_donnees_techniques();
62 //
63 if ($add_dt === false) {
64 //
65 $this->addToMessage(_("Impossible d'associer des données techniques au lot.")." "._("Veuillez contacter votre administrateur."));
66 return false;
67 }
68 }
69
70 //
71 return true;
72 }
73
74 /**
75 * Cache le champ dossier_autorisation
76 */
77 function setType(&$form,$maj) {
78 parent::setType($form,$maj);
79
80 $form->setType('dossier_autorisation', 'hidden');
81 $form->setType('dossier','hidden');
82 }
83
84
85 /**
86 * Permet d'affecter des valeurs aux champs de sous formulaires
87 */
88 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null) {
89 //
90 if($validation == 0) {
91 //
92 $is_in_context_of_di = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
93 //
94 $is_in_context_of_da = $this->is_in_context_of_foreign_key("dossier_autorisation", $this->getParameter('retourformulaire'));
95
96 //
97 if($is_in_context_of_di === true) {
98 //
99 $form->setVal('dossier', $this->getParameter('idxformulaire'));
100 // Instancie le dossier
101 $inst_di = $this->get_inst_dossier($this->getParameter('idxformulaire'));
102 // Récupère la valeur du dossier d'autorisation
103 $form->setVal('dossier_autorisation', $inst_di->getVal('dossier_autorisation'));
104 }
105
106 //
107 if($is_in_context_of_da === true) {
108 //
109 $form->setVal('dossier_autorisation', $this->getParameter('idxformulaire'));
110 }
111 }// fin validation
112 }// fin setValsousformulaire
113
114 /**
115 * Ajout de la liste des demandeurs
116 */
117 function sousformSpecificContent($maj) {
118
119 //En consultation
120 if ( $maj == 3 ){
121
122 //Récupère la liste des demandeurs
123 $sql = "SELECT
124 civilite.code as code,
125 CASE WHEN demandeur.qualite='particulier'
126 THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
127 ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
128 END as nom,
129 lien_lot_demandeur.petitionnaire_principal as petitionnaire_principal,
130 demandeur.type_demandeur as type_demandeur
131 FROM
132 ".DB_PREFIXE."lien_lot_demandeur
133 LEFT JOIN
134 ".DB_PREFIXE."demandeur
135 ON
136 lien_lot_demandeur.demandeur = demandeur.demandeur
137 LEFT JOIN
138 ".DB_PREFIXE."civilite
139 ON
140 demandeur.particulier_civilite = civilite.civilite OR
141 demandeur.personne_morale_civilite = civilite.civilite
142 WHERE lien_lot_demandeur.lot = ".$this->val[array_search('lot', $this->champs)]."
143 ORDER BY demandeur.type_demandeur DESC";
144
145 $res = $this->f->db->query($sql);
146 $this->f->addToLog("sousformSpecificContent() : db->query(\"".$sql."\")");
147 if ( database::isError($res)){
148 die();
149 }
150
151 //Affichage des données
152 echo "<div class=\"field field-type-static\">";
153 echo "<div class=\"form-libelle\">";
154 echo "<label id=\"lib-libelle\" class=\"libelle-demandeur\" for=\"demandeur\">";
155 echo _("demandeur");
156 echo "</label>";
157 echo "</div>";
158 echo "<div class=\"form-content\">";
159 echo "<span id=\"demandeur\" class=\"field_value\">";
160
161 $listDemandeur = "";
162 //La liste des demandeurs
163 while($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
164
165 //Ordonne l'affichage des demandeur
166 if ( $row['petitionnaire_principal'] == 't' ){
167
168 $listDemandeur = $row['code']. " " . $row['nom'] . ", " . _("petitionnaire principal") . "<br/>".$listDemandeur;
169 }
170 else {
171
172 $listDemandeur .= $row['code']. " " . $row['nom'] . ", " . $row['type_demandeur'] . "<br/>";
173 }
174 }
175 echo $listDemandeur;
176 echo "</span>";
177 echo "</div>";
178 echo "</div>";
179 }
180 }
181
182 /**
183 * Surcharge pour gérer les actions disponibles dans le portlet
184 */
185 function checkAccessibility() {
186 //
187 parent::checkAccessibility();
188
189 $idxformulaire = $this->getParameter("idxformulaire");
190 $retourformulaire = $this->getParameter("retourformulaire");
191 //Si le dossier d'instruction auquel est rattaché le lot est
192 //cloturé, on affiche pas les liens du portlet
193 if ( $idxformulaire != '' &&
194 (
195 $retourformulaire == 'dossier' ||
196 $retourformulaire == 'dossier_instruction' ||
197 $retourformulaire == 'dossier_instruction_mes_encours' ||
198 $retourformulaire == 'dossier_instruction_tous_encours' ||
199 $retourformulaire == 'dossier_instruction_mes_clotures' ||
200 $retourformulaire == 'dossier_instruction_tous_clotures'
201 )){
202
203 //On récuppère le statut du dossier d'instruction
204 $statut = $this->f->getStatutDossier($idxformulaire);
205 if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
206
207 //On cache le lien de modification
208 $this->parameters["actions"]["modifier"] = NULL;
209 $this->parameters["actions"]["supprimer"] = NULL;
210 $this->actions_sup["transferer"] = NULL;
211
212 //Si le dossier lié n'a pas de données techniques
213 if ( !$this->hasDonneesTechniquesDossier($idxformulaire) ){
214 $this->actions_sup["editer_donnees"] = NULL;
215 }
216 }
217 }
218
219 /*
220 * Si l'utilisateur est un instructeur sans bypass sur l'action et si
221 * sa division ne correspond pas à celle du dossier alors on n'affiche
222 * pas cette action dans le portlet.
223 */
224
225 $instr_with_different_div = false;
226 if ($this->f->isUserInstructeur()
227 && isset($this->f->om_utilisateur["division"])
228 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
229 $instr_with_different_div = true;
230 }
231
232 // MODIFIER
233 if ($this->f->can_bypass("lot", "modifier") == false
234 && $instr_with_different_div == true) {
235 //
236 $this->parameters["actions"]["modifier"] = NULL;
237 }
238 // SUPPRIMER
239 if ($this->f->can_bypass("lot", "supprimer") == false
240 && $instr_with_different_div == true) {
241 //
242 $this->parameters["actions"]["supprimer"] = NULL;
243 }
244 // TRANSFERER
245 if ($this->f->can_bypass("lot", "transferer") == false
246 && $instr_with_different_div == true) {
247 //
248 unset($this->actions_sup["transferer"]);
249 }
250 // EDITER DONNEES TECHNIQUES
251 if ($this->f->can_bypass("lot", "editer_donnees") == false
252 && $instr_with_different_div == true) {
253 //
254 unset($this->actions_sup["editer_donnees"]);
255 }
256 }
257
258 /**
259 * Cette methode est à surcharger elle permet de tester dans chaque classe
260 * des droits spécifiques en fonction des données
261 */
262 function canAccess() {
263
264 $retourformulaire = $this->getParameter("retourformulaire");
265 // Si l'utilisateur est un instructeur et que le dossier est cloturé
266 if ( $this->f->isUserInstructeur() &&
267 $this->f->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" &&
268 (
269 $retourformulaire == 'dossier' ||
270 $retourformulaire == 'dossier_instruction' ||
271 $retourformulaire == 'dossier_instruction_mes_encours' ||
272 $retourformulaire == 'dossier_instruction_tous_encours' ||
273 $retourformulaire == 'dossier_instruction_mes_clotures' ||
274 $retourformulaire == 'dossier_instruction_tous_clotures'
275 ) && $this->getParameter("maj") != 3) {
276
277 return false;
278 }
279
280 // Récupération du bypass adéquat
281 // XXX - actions spécifiques non testées
282 $bypass = false;
283 if (($this->f->can_bypass("lot", "ajouter") == true && $this->getParameter("maj") == 0)
284 || ($this->f->can_bypass("lot", "modifier") == true && $this->getParameter("maj") == 1)
285 || ($this->f->can_bypass("lot", "supprimer") == true && $this->getParameter("maj") == 2)) {
286 $bypass = true;
287 }
288 // Si, hors mode consulter, l'utilisateur est un instructeur sans bypass
289 // dont la division ne correspond pas à celle du dossier
290 if ($this->getParameter("maj") != 3 && $bypass == false && $this->f->isUserInstructeur()
291 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
292 //
293 return false;
294 }
295 //
296 return true;
297 }
298
299 /**
300 * Retourne true s'il y a des données techniques lié au dossier d'instruction
301 * @param string $idx Identifiant du dossier d'instruction
302 * @return boolean S'il y a des données techniques
303 */
304 function hasDonneesTechniquesDossier($idx){
305
306 //Si l'identifiant du dossier d'instruction founi est correct
307 if ( $idx != '' ){
308
309 //On récupère le statut de l'état du dossier d'instruction à partir de
310 //l'identifiant du dossier
311 $sql = "SELECT donnees_techniques.donnees_techniques
312 FROM ".DB_PREFIXE."donnees_techniques
313 LEFT JOIN
314 ".DB_PREFIXE."dossier
315 ON
316 donnees_techniques.dossier_instruction = dossier.dossier
317 WHERE dossier.dossier = '".$idx."'";
318 $donnees_techniques = $this->db->query($sql);
319 $this->f->addToLog("hasDonneesTechniquesDossier() : db->query(\"".$sql."\")", VERBOSE_MODE);
320 if ( database::isError($donnees_techniques)){
321 die();
322 }
323
324 if ( $donnees_techniques->numRows() > 0 ){
325 return TRUE;
326 }
327 }
328 return FALSE;
329 }
330
331 /**
332 * Cette variable permet de stocker le résultat de la méthode
333 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
334 * ces appels.
335 * @var string Code de la division du dossier en cours
336 */
337 var $_division_from_dossier = NULL;
338
339 /**
340 * Cette méthode permet de récupérer le code de division correspondant
341 * au dossier sur lequel on se trouve.
342 *
343 * @return string Code de la division du dossier en cours
344 */
345 function getDivisionFromDossier() {
346
347 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
348 // Pour éviter de refaire le traitement de recherche de la division
349 // alors on vérifie si nous ne l'avons pas déjà calculé.
350 if ($this->_division_from_dossier != NULL) {
351 // Logger
352 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
353 // On retourne la valeur déjà calculée
354 return $this->_division_from_dossier;
355 }
356
357 // Par défaut, on définit la valeur du dossier à NULL
358 $dossier = NULL;
359 // Test sur le mode et le contexte du formulaire
360 if ($this->getParameter("maj") == 0
361 && ($this->getParameter("retourformulaire") == "dossier"
362 || $this->getParameter("retourformulaire") == "dossier_instruction"
363 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
364 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
365 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
366 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
367 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
368 // n'existe pas en base de données) ET que nous nous trouvons
369 // dans le contexte d'un dossier d'instruction alors on récupère
370 // le numéro de dossier depuis le paramètre 'idxformulaire'
371 $dossier = $this->getParameter("idxformulaire");
372 } else {
373 // Sinon on récupère le numéro de dossier dans le champs dossier de
374 // l'enregistrement (en base de données)
375 $dossier = $this->getVal("dossier");
376 }
377
378 // On appelle la méthode de la classe utils qui renvoi le code de la
379 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
380 // prochain appel de cette méthode
381 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
382 // Logger
383 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
384 // On retourne la valeur retournée
385 return $this->_division_from_dossier;
386
387 }
388
389
390 /**
391 * Cette méthode est appelée lors de la suppression d’un objet, elle permet
392 * de vérifier si l’objet supprimé n’est pas lié à une autre table pour en
393 * empêcher la suppression.
394 *
395 * @param mixed $id Identifiant de l'objet.
396 *
397 * @return boolean
398 */
399 public function cleSecondaire($id) {
400 // Surcharge pour éviter les contrôles sur les tables liées en cas
401 // de suppression
402 return true;
403 }
404
405
406 /**
407 * Supprime le lien entre le lot et les demandeurs.
408 *
409 * @param integer $lot Identifiant de l'objet.
410 *
411 * @return boolean
412 */
413 protected function delete_lien_lot_demandeur($lot) {
414
415 // SQL
416 $sql = "DELETE FROM ".DB_PREFIXE."lien_lot_demandeur
417 WHERE lot = ".$lot;
418 // Résultat
419 $res = $this->f->db->query($sql);
420 // Log
421 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")");
422 //
423 if ($this->f->isDatabaseError($res, true)) {
424 return false;
425 }
426
427 //
428 return true;
429 }
430
431
432 /**
433 * Supprime les données techniques liées.
434 *
435 * @param integer $lot Identifiant de l'objet.
436 *
437 * @return boolean
438 */
439 protected function delete_donnees_techniques($lot) {
440
441 // SQL
442 $sql = "DELETE FROM ".DB_PREFIXE."donnees_techniques
443 WHERE lot = ".$lot;
444 // Résultat
445 $res = $this->f->db->query($sql);
446 // Log
447 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")");
448 //
449 if ($this->f->isDatabaseError($res, true)) {
450 return false;
451 }
452
453 //
454 return true;
455 }
456
457
458 /**
459 * Permet d’effectuer des actions avant la modification des données dans la
460 * base.
461 *
462 * @param mixed $id Identifiant de l'objet.
463 * @param object &$db Instance BDD.
464 * @param array $val Liste des valeurs.
465 * @param mixed $DEBUG Mode du debug.
466 *
467 * @return boolean
468 */
469 public function triggersupprimer($id, &$db, $val, $DEBUG) {
470
471 // Suppression du lien entre le lot et les demandeurs
472 $delete_lien_lot_demandeur = $this->delete_lien_lot_demandeur($id);
473 //
474 if ($delete_lien_lot_demandeur === false) {
475 //
476 return false;
477 }
478
479 // Suppression des données techniques lié au lot
480 $delete_donnees_techniques = $this->delete_donnees_techniques($id);
481 //
482 if ($delete_donnees_techniques === false) {
483 //
484 return false;
485 }
486
487 //
488 return true;
489 }
490
491
492 /**
493 * Ajout les données techniques au lot.
494 *
495 * @return boolean
496 */
497 protected function add_donnees_techniques() {
498
499 // Instancie la classe donnees_techniques en ajout
500 require_once '../obj/donnees_techniques.class.php';
501 $inst_dt = new donnees_techniques("]", $this->f->db, DEBUG);
502
503 // Toutes les valeurs sont mis à null
504 foreach($inst_dt->champs as $value) {
505 //
506 $valF[$value] = null;
507 }
508
509 // Ajout de l'identifiant du lot
510 $valF['lot'] = $this->valF[$this->clePrimaire];
511 // Identifiant du CERFA
512 $valF['cerfa'] = $this->get_cerfa_id_by_dossier_autorisation($this->valF['dossier_autorisation']);
513 // Si aucun CERFA n'est identifié
514 if ($valF['cerfa'] === '' || $valF['cerfa'] === null) {
515 //
516 $this->f->addToLog(__METHOD__."() : ERROR - "._("Aucun CERFA paramétré."), DEBUG_MODE);
517 return false;
518 }
519
520 // Ajoute l'enregistrement dans la table donnees_techniques
521 $add = $inst_dt->ajouter($valF, $this->f->db, DEBUG);
522 //
523 if ($add === false) {
524 //
525 $this->f->addToLog(__METHOD__."() : ERROR - "._("Impossible d'ajouter les données techniques du lot."), DEBUG_MODE);
526 return false;
527 }
528
529 //
530 return true;
531 }
532
533
534 /**
535 * Récupère l'instance du dossier.
536 *
537 * @param string $dossier Identifiant de l'objet.
538 *
539 * @return object
540 */
541 public function get_inst_dossier($dossier = null) {
542 //
543 return $this->get_inst_common("dossier", $dossier);
544 }
545
546
547 /**
548 * Récupère l'instance du dossier.
549 *
550 * @param string $dossier_autorisation Identifiant de l'objet.
551 *
552 * @return object
553 */
554 public function get_inst_dossier_autorisation($dossier_autorisation = null) {
555 //
556 return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
557 }
558
559
560 /**
561 * Récupère l'instance du dossier.
562 *
563 * @param integer $dossier_autorisation_type_detaille Identifiant de l'objet.
564 *
565 * @return object
566 */
567 public function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille) {
568 //
569 return $this->get_inst_common("dossier_autorisation_type_detaille", $dossier_autorisation_type_detaille);
570 }
571
572
573 /**
574 * Récupère le cerfa des lots pour afficher les bonnes données techniques.
575 *
576 * @param string $da Identifiant de l'objet.
577 *
578 * @return integer
579 */
580 public function get_cerfa_id_by_dossier_autorisation($da) {
581
582 // Instancie le dossier d'autorisation
583 $inst_da = $this->get_inst_dossier_autorisation($da);
584
585 // Instancie le type détaillé du dossier d'autorisation
586 $inst_datd = $this->get_inst_dossier_autorisation_type_detaille($inst_da->getVal('dossier_autorisation_type_detaille'));
587
588 //
589 return $inst_datd->getVal('cerfa_lot');
590
591 }
592
593
594 }// fin classe
595 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26