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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 mbroquet 3730 <?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 nhaye 5254 require_once ("../obj/lien_lot_demandeur.class.php");
7 mbroquet 3730
8     class lot extends lot_gen {
9    
10    
11 nhaye 5254 function __construct($id,&$db,$debug) {
12     // On active les nouvelles actions
13     $this->activate_class_action = true;
14 mbroquet 3730 $this->constructeur($id,$db,$debug);
15    
16     }// fin constructeur
17    
18 nhaye 5254 /**
19     * Définition des actions disponibles sur la classe.
20     *
21     * @return void
22     */
23     function init_class_actions() {
24     //
25     parent::init_class_actions();
26 mbroquet 3730
27 nhaye 5254 // ACTION - 001 - ajouter
28     //
29     $this->class_actions[0]["condition"] = "is_ajoutable";
30    
31     // ACTION - 001 - modifier
32     //
33     $this->class_actions[1]["condition"] = "is_modifiable";
34    
35     // ACTION - 002 - supprimer
36     //
37     $this->class_actions[2]["condition"] = "is_supprimable";
38    
39     // ACTION - 100 - donnees_techniques
40     // Affiche dans un overlay les données techniques
41     $this->class_actions[100] = array(
42     "identifier" => "donnees_techniques",
43     "portlet" => array(
44     "type" => "action-self",
45     "libelle" => _("Données techniques"),
46     "order" => 100,
47     "class" => "rediger-16",
48     ),
49     "view" => "view_donnees_techniques",
50     "permission_suffix" => "donnees_techniques_consulter",
51     );
52    
53     // ACTION - 100 - transferer_lot_nouveaux_demandeurs
54     // Transfert les lots de demandeur
55     $this->class_actions[110] = array(
56     "identifier" => "transferer_lot_nouveaux_demandeurs",
57     "portlet" => array(
58     "type" => "action-direct",
59     "libelle" => _("Transferer ce lot aux nouveaux demandeurs"),
60     "order" => 110,
61     "class" => "transferer-16",
62     ),
63     "permission_suffix" => "transferer",
64     "method" => "transferer_lot_demandeurs"
65     );
66     }
67    
68 softime 5169 /**
69 nhaye 5254 * TREATMENT - transferer_lot_demandeurs.
70     *
71     * Permet de permet de transferer les lots aux nouveau demandeur.
72     *
73     *
74     * @param array $val valeurs soumises par le formulaire
75     * @param null $dnu1 @deprecated Ancienne ressource de base de données.
76     * @param null $dnu2 @deprecated Ancien marqueur de débogage.
77     *
78     * @return boolean
79     */
80     function transferer_lot_demandeurs($val = array(), &$dnu1 = null, $dnu2 = null) {
81    
82     // Cette méthode permet d'exécuter une routine en début des méthodes
83     // dites de TREATMENT.
84     $this->begin_treatment(__METHOD__);
85    
86    
87     /*Donnees*/
88     $idxDossier = $this->getVal("dossier");
89     //Si les liaisons n'existent pas déjà
90     $sql = "SELECT
91     lot.lot as lot, lien_lot_demandeur.demandeur as demandeur
92     FROM
93     ".DB_PREFIXE."lien_dossier_demandeur
94     INNER JOIN ".DB_PREFIXE."lien_lot_demandeur
95     ON
96     lien_lot_demandeur.demandeur = lien_dossier_demandeur.demandeur
97     INNER JOIN ".DB_PREFIXE."lot
98     ON
99     lot.lot = ".$this->getVal($this->clePrimaire)."
100     WHERE lien_dossier_demandeur.dossier = '$idxDossier'";
101    
102     $res = $this->db->query($sql);
103     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
104    
105     // Si une erreur survient
106     if (database::isError($res, true)) {
107    
108     // Appel de la methode de recuperation des erreurs
109     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
110     $res->free();
111     $this->correct = false;
112     // Termine le traitement
113     return $this->end_treatment(__METHOD__, false);
114     }
115    
116     // Récupère la liste des demandeurs associés aux lot et dossier d'instruction
117     $listDemandeurLie = array();
118     if ($res->numrows() > 0) {
119    
120     $i = 0;
121     while($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
122    
123     $listDemandeurLie[$i++] = $row['demandeur'];
124     }
125     }
126     echo (" nbDossierDemandeurIJ: " . $res->numrows());
127    
128     $res->free();
129     // Récupère les demandeurs du dossier d'instruction
130     $sql = "SELECT
131     lien_dossier_demandeur.demandeur as demandeur,
132     lien_dossier_demandeur.petitionnaire_principal as pp
133     FROM
134     ".DB_PREFIXE."lien_dossier_demandeur
135     WHERE lien_dossier_demandeur.dossier = '$idxDossier'";
136    
137     $res = $this->db->query($sql);
138     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
139    
140     // Si une erreur survient
141     if (database::isError($res, true)) {
142    
143     // Appel de la methode de recuperation des erreurs
144     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
145     $res->free();
146     $this->correct = false;
147     // Termine le traitement
148     return $this->end_treatment(__METHOD__, false);
149     }
150    
151     echo (" nbDossierDemandeurWD: " . $res->numrows());
152    
153     // Transfert des demandeurs entre le dossier et le lot
154     if (count($listDemandeurLie) != $res->numrows()){
155    
156     //Supprime les anciens liens
157     $sql = "DELETE FROM ".DB_PREFIXE."lien_lot_demandeur
158     WHERE lien_lot_demandeur.lot = ".$this->getVal($this->clePrimaire);
159    
160     $res2 = $this->db->query($sql);
161    
162     echo (" delLotDemandeur: " . $res2);
163     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
164    
165    
166     // Si une erreur survient
167     if (database::isError($res2, true)) {
168    
169     // Appel de la methode de recuperation des erreurs
170     $this->erreur_db($res2->getDebugInfo(), $res2->getMessage(), '');
171     $res2->free();
172     $this->correct = false;
173     // Termine le traitement
174     return $this->end_treatment(__METHOD__, false);
175     }
176    
177     $ret = "";
178    
179    
180     // Créé autant de liaisons que de demandeurs liés au dossier d'instruction
181     while($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
182    
183     if (!in_array($row['demandeur'], $listDemandeurLie)){
184    
185     $valLLD = array();
186     $valLLD['lien_lot_demandeur'] = NULL;
187     $valLLD['lot'] = $this->getVal($this->clePrimaire);
188     $valLLD['demandeur'] = $row['demandeur'];
189     $valLLD['petitionnaire_principal'] = $row['pp'];
190    
191     $lld = new lien_lot_demandeur("]", $this->db, DEBUG);
192     $lld->valF = "";
193    
194     $lld->ajouter($valLLD, $this->db, DEBUG) ;
195    
196     $sql = "SELECT
197     civilite.code as code,
198     CASE WHEN demandeur.qualite='particulier'
199     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
200     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
201     END as nom
202     FROM
203     ".DB_PREFIXE."demandeur
204     LEFT JOIN
205     ".DB_PREFIXE."civilite
206     ON
207     demandeur.particulier_civilite = civilite.civilite OR
208     demandeur.personne_morale_civilite = civilite.civilite
209     WHERE demandeur.demandeur = ".$row['demandeur'];
210    
211     $res2 = $this->db->query($sql);
212     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
213    
214     // Si une erreur survient
215     if (database::isError($res2, true)) {
216    
217     // Appel de la methode de recuperation des erreurs
218     $this->erreur_db($res2->getDebugInfo(), $res2->getMessage(), '');
219     $res2->free();
220     $this->correct = false;
221     // Termine le traitement
222     return $this->end_treatment(__METHOD__, false);
223     }
224    
225     $row=& $res2->fetchRow(DB_FETCHMODE_ASSOC);
226     $ret .= $row['code']. " " . $row['nom'] . "<br/>" ;
227    
228     $res2->free();
229     }
230     }
231     $res->free();
232    
233     //Envoie du message de retour
234     $this->addToMessage(_("Transfert effectue avec succès"));
235     }
236     //Sinon
237     else {
238     //Envoie du message de retour
239     $this->addToMessage(_("Les demandeurs ont déjà été transférés"));
240     }
241    
242     // Termine le traitement
243     return $this->end_treatment(__METHOD__, true);
244     }
245    
246     /**
247     * Ouvre le sous-formulaire passé en paramètre en overlay
248     * en mode ajout si aucun n'existe sinon en mode modifier.
249     *
250     * @return void
251     */
252     function display_overlay($idx = "", $obj = "") {
253     // Seulement si le numéro de dossier est fourni
254     if (isset($idx) && !empty($idx)
255     && isset($obj) && !empty($obj)){
256    
257     // Vérifie que l'objet n'existe pas
258     $sql = "SELECT donnees_techniques
259     FROM ".DB_PREFIXE."donnees_techniques
260     WHERE donnees_techniques.lot = ".$idx;
261     // Ajout au log
262     $this->f->addToLog($obj.".php: db->query(\"".$sql."\");", VERBOSE_MODE);
263     // Exécution de la requête
264     $res = $this->db->query($sql);
265     $this->f->isDatabaseError($res);
266    
267     // S'il n'y en a pas, afficher le formulaire d'ajout
268     if ($res->numrows() == 0) {
269     //
270     echo '
271     <script type="text/javascript" >
272     overlayIt(\''.$obj.'\',\'sousform.php?obj=donnees_techniques'.
273     '&retourformulaire=lot&action=0&idxformulaire='. $idx. '\', 1);
274     </script>
275     ';
276     }
277     // Sinon afficher l'objet en consultation
278     else {
279     //
280     $row = & $res->fetchRow(DB_FETCHMODE_ASSOC);
281     //
282     echo '
283     <script type="text/javascript" >
284     overlayIt(\''.$obj.'\',\'sousform.php?obj=donnees_techniques'.
285     '&retourformulaire=lot&action=3&idxformulaire='. $idx. '&idx=' . $row['donnees_techniques'] .'&objsf='.$obj.'\', 1);
286     </script>
287     ';
288     }
289     }
290     }
291    
292     /**
293     * CONDITION - is_ajoutable.
294     *
295     * Condition pour pouvoir ajouter
296     *
297     * @return boolean
298     */
299     function is_ajoutable() {
300     // Test du bypass
301     if ($this->f->isAccredited("lot_ajouter_bypass")) {
302     return true;
303     }
304     // Test des autres conditions
305     return $this->is_ajoutable_or_modifiable_or_supprimable();
306     }
307    
308     /**
309     * CONDITION - is_modifiable.
310     *
311     * Condition pour afficher le bouton modifier
312     *
313     * @return boolean
314     */
315     function is_modifiable() {
316     // Test du bypass
317     if ($this->f->isAccredited("lot_modifier_bypass")) {
318     return true;
319     }
320     // Test des autres conditions
321     return $this->is_ajoutable_or_modifiable_or_supprimable();
322     }
323    
324     /**
325     * CONDITION - is_supprimable.
326     *
327     * Condition pour afficher le bouton supprimer
328     * @return boolean
329     */
330     function is_supprimable() {
331     // Test du bypass
332     if ($this->f->isAccredited("lot_supprimer_bypass")) {
333     return true;
334     }
335     // Test des autres conditions
336     return $this->is_ajoutable_or_modifiable_or_supprimable();
337     }
338    
339    
340     /**
341     * Conditions pour afficher les boutons modifier et supprimer
342     *
343     * @return boolean
344     */
345     function is_ajoutable_or_modifiable_or_supprimable() {
346     //
347     $dossier = $this->getVal("dossier");
348     /**
349     * Tester si le dossier est cloturé , de la meme division, instructeur, admin (?)
350     */
351     if($this->f->isUserInstructeur() === true
352     && isset($this->f->om_utilisateur["division"])
353     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
354     return false;
355     }
356     //
357     if ($this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture"){
358     return false;
359     }
360     return true;
361     }
362    
363    
364     /**
365     * VIEW - view_donnees_techniques.
366     *
367     * Ouvre le sous-formulaire en ajaxIt dans un overlay.
368     * Cette action est bindée pour utiliser la fonction popUpIt.
369     *
370     * @return void
371     */
372     function view_donnees_techniques() {
373     $dossier = $this->getVal("dossier");
374     // Vérification de l'accessibilité sur l'élément
375     $this->checkAccessibility();
376     //
377     $this->display_overlay(
378     $this->getVal($this->clePrimaire),
379     "donnees_techniques"
380     );
381     }
382    
383     /**
384 softime 5169 * Méthode qui effectue les requêtes de configuration des champs.
385     *
386     * @param object &$form Formulaire.
387     * @param integer $maj Mode du formulaire.
388     *
389     * @return void
390     */
391     public function setSelect(&$form,$maj) {
392     // Le parent n'est pas appelé délibérament pour cause de performance.
393     // En effet, celui-ci charge toutes les données de la table dossier et
394     // de la table dossier_autorisation.
395     }
396    
397    
398 mbroquet 3730 function triggerAjouterApres($id, &$db, $val, $DEBUG) {
399     parent::triggerAjouterApres($id, $db, $val, $DEBUG);
400    
401 softime 5169 // Si en sous-formulaire
402 mbroquet 3730 if($this->getParameter("idxformulaire") != "") {
403    
404     // Insertion du lien demandeur/lot
405     require_once ("../obj/lien_lot_demandeur.class.php");
406     $lld = new lien_lot_demandeur("]", $db, $DEBUG);
407     $sqlDemandeur = "SELECT * FROM ".DB_PREFIXE."lien_dossier_demandeur
408     WHERE dossier='".$this->getParameter("idxformulaire")."'";
409     $res = $db->query($sqlDemandeur);
410     $this->f->addToLog("triggerAjouterApres() : db->query(\"".$sqlDemandeur."\");", VERBOSE_MODE);
411     if ( database::isError($res)){
412     die();
413     }
414     while($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
415     unset($row['lien_dossier_demandeur']);
416     unset($row['dossier']);
417     $row['lien_lot_demandeur'] = "";
418     $row['lot'] = $this->valF["lot"];
419     $lld->ajouter($row, $db, $DEBUG);
420     }
421 softime 5169
422     // Ajoute une ligne dans les données techniques
423     $add_dt = $this->add_donnees_techniques();
424     //
425     if ($add_dt === false) {
426     //
427     $this->addToMessage(_("Impossible d'associer des données techniques au lot.")." "._("Veuillez contacter votre administrateur."));
428     return false;
429     }
430 mbroquet 3730 }
431 softime 5169
432     //
433     return true;
434 mbroquet 3730 }
435    
436     /**
437     * Cache le champ dossier_autorisation
438     */
439     function setType(&$form,$maj) {
440     parent::setType($form,$maj);
441    
442     $form->setType('dossier_autorisation', 'hidden');
443     $form->setType('dossier','hidden');
444 nhaye 5254
445     if($maj == "110") {
446     $form->setType('lot', 'hidden');
447     $form->setType('libelle', 'hidden');
448     $form->setType('dossier_autorisation', 'hidden');
449     $form->setType('dossie', 'hidden');
450     }
451 mbroquet 3730 }
452    
453    
454     /**
455     * Permet d'affecter des valeurs aux champs de sous formulaires
456     */
457 softime 5169 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null) {
458     //
459 mbroquet 3730 if($validation == 0) {
460 softime 5169 //
461     $is_in_context_of_di = $this->is_in_context_of_foreign_key("dossier", $this->getParameter('retourformulaire'));
462     //
463     $is_in_context_of_da = $this->is_in_context_of_foreign_key("dossier_autorisation", $this->getParameter('retourformulaire'));
464    
465     //
466     if($is_in_context_of_di === true) {
467     //
468     $form->setVal('dossier', $this->getParameter('idxformulaire'));
469     // Instancie le dossier
470     $inst_di = $this->get_inst_dossier($this->getParameter('idxformulaire'));
471     // Récupère la valeur du dossier d'autorisation
472     $form->setVal('dossier_autorisation', $inst_di->getVal('dossier_autorisation'));
473 mbroquet 3730 }
474 softime 5169
475     //
476     if($is_in_context_of_da === true) {
477     //
478     $form->setVal('dossier_autorisation', $this->getParameter('idxformulaire'));
479     }
480 mbroquet 3730 }// fin validation
481     }// fin setValsousformulaire
482    
483     /**
484     * Ajout de la liste des demandeurs
485     */
486     function sousformSpecificContent($maj) {
487    
488     //En consultation
489     if ( $maj == 3 ){
490    
491     //Récupère la liste des demandeurs
492     $sql = "SELECT
493     civilite.code as code,
494     CASE WHEN demandeur.qualite='particulier'
495     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
496     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
497     END as nom,
498     lien_lot_demandeur.petitionnaire_principal as petitionnaire_principal,
499     demandeur.type_demandeur as type_demandeur
500     FROM
501     ".DB_PREFIXE."lien_lot_demandeur
502     LEFT JOIN
503     ".DB_PREFIXE."demandeur
504     ON
505     lien_lot_demandeur.demandeur = demandeur.demandeur
506     LEFT JOIN
507     ".DB_PREFIXE."civilite
508     ON
509     demandeur.particulier_civilite = civilite.civilite OR
510     demandeur.personne_morale_civilite = civilite.civilite
511     WHERE lien_lot_demandeur.lot = ".$this->val[array_search('lot', $this->champs)]."
512     ORDER BY demandeur.type_demandeur DESC";
513    
514     $res = $this->f->db->query($sql);
515     $this->f->addToLog("sousformSpecificContent() : db->query(\"".$sql."\")");
516     if ( database::isError($res)){
517     die();
518     }
519    
520     //Affichage des données
521     echo "<div class=\"field field-type-static\">";
522     echo "<div class=\"form-libelle\">";
523     echo "<label id=\"lib-libelle\" class=\"libelle-demandeur\" for=\"demandeur\">";
524     echo _("demandeur");
525     echo "</label>";
526     echo "</div>";
527     echo "<div class=\"form-content\">";
528     echo "<span id=\"demandeur\" class=\"field_value\">";
529    
530     $listDemandeur = "";
531     //La liste des demandeurs
532     while($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)){
533    
534     //Ordonne l'affichage des demandeur
535     if ( $row['petitionnaire_principal'] == 't' ){
536    
537     $listDemandeur = $row['code']. " " . $row['nom'] . ", " . _("petitionnaire principal") . "<br/>".$listDemandeur;
538     }
539     else {
540    
541     $listDemandeur .= $row['code']. " " . $row['nom'] . ", " . $row['type_demandeur'] . "<br/>";
542     }
543     }
544     echo $listDemandeur;
545     echo "</span>";
546     echo "</div>";
547     echo "</div>";
548     }
549     }
550    
551     /**
552     * Surcharge pour gérer les actions disponibles dans le portlet
553     */
554     function checkAccessibility() {
555     //
556     parent::checkAccessibility();
557    
558     $idxformulaire = $this->getParameter("idxformulaire");
559     $retourformulaire = $this->getParameter("retourformulaire");
560     //Si le dossier d'instruction auquel est rattaché le lot est
561     //cloturé, on affiche pas les liens du portlet
562     if ( $idxformulaire != '' &&
563     (
564     $retourformulaire == 'dossier' ||
565     $retourformulaire == 'dossier_instruction' ||
566     $retourformulaire == 'dossier_instruction_mes_encours' ||
567     $retourformulaire == 'dossier_instruction_tous_encours' ||
568     $retourformulaire == 'dossier_instruction_mes_clotures' ||
569     $retourformulaire == 'dossier_instruction_tous_clotures'
570     )){
571    
572     //On récuppère le statut du dossier d'instruction
573     $statut = $this->f->getStatutDossier($idxformulaire);
574     if ( $this->f->isUserInstructeur() && $statut == "cloture" ){
575    
576     //On cache le lien de modification
577     $this->parameters["actions"]["modifier"] = NULL;
578     $this->parameters["actions"]["supprimer"] = NULL;
579     $this->actions_sup["transferer"] = NULL;
580    
581     //Si le dossier lié n'a pas de données techniques
582     if ( !$this->hasDonneesTechniquesDossier($idxformulaire) ){
583     $this->actions_sup["editer_donnees"] = NULL;
584     }
585     }
586     }
587    
588     /*
589     * Si l'utilisateur est un instructeur sans bypass sur l'action et si
590     * sa division ne correspond pas à celle du dossier alors on n'affiche
591     * pas cette action dans le portlet.
592     */
593    
594     $instr_with_different_div = false;
595     if ($this->f->isUserInstructeur()
596     && isset($this->f->om_utilisateur["division"])
597     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
598     $instr_with_different_div = true;
599     }
600    
601     // MODIFIER
602     if ($this->f->can_bypass("lot", "modifier") == false
603     && $instr_with_different_div == true) {
604     //
605     $this->parameters["actions"]["modifier"] = NULL;
606     }
607     // SUPPRIMER
608     if ($this->f->can_bypass("lot", "supprimer") == false
609     && $instr_with_different_div == true) {
610     //
611     $this->parameters["actions"]["supprimer"] = NULL;
612     }
613     // TRANSFERER
614     if ($this->f->can_bypass("lot", "transferer") == false
615     && $instr_with_different_div == true) {
616     //
617     unset($this->actions_sup["transferer"]);
618     }
619     // EDITER DONNEES TECHNIQUES
620     if ($this->f->can_bypass("lot", "editer_donnees") == false
621     && $instr_with_different_div == true) {
622     //
623     unset($this->actions_sup["editer_donnees"]);
624     }
625     }
626    
627     /**
628     * Cette methode est à surcharger elle permet de tester dans chaque classe
629     * des droits spécifiques en fonction des données
630     */
631     function canAccess() {
632    
633     $retourformulaire = $this->getParameter("retourformulaire");
634     // Si l'utilisateur est un instructeur et que le dossier est cloturé
635     if ( $this->f->isUserInstructeur() &&
636     $this->f->getStatutDossier($this->getParameter("idxformulaire")) == "cloture" &&
637     (
638     $retourformulaire == 'dossier' ||
639     $retourformulaire == 'dossier_instruction' ||
640     $retourformulaire == 'dossier_instruction_mes_encours' ||
641     $retourformulaire == 'dossier_instruction_tous_encours' ||
642     $retourformulaire == 'dossier_instruction_mes_clotures' ||
643     $retourformulaire == 'dossier_instruction_tous_clotures'
644     ) && $this->getParameter("maj") != 3) {
645    
646     return false;
647     }
648    
649     // Récupération du bypass adéquat
650     // XXX - actions spécifiques non testées
651     $bypass = false;
652     if (($this->f->can_bypass("lot", "ajouter") == true && $this->getParameter("maj") == 0)
653     || ($this->f->can_bypass("lot", "modifier") == true && $this->getParameter("maj") == 1)
654     || ($this->f->can_bypass("lot", "supprimer") == true && $this->getParameter("maj") == 2)) {
655     $bypass = true;
656     }
657     // Si, hors mode consulter, l'utilisateur est un instructeur sans bypass
658     // dont la division ne correspond pas à celle du dossier
659     if ($this->getParameter("maj") != 3 && $bypass == false && $this->f->isUserInstructeur()
660     && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
661     //
662     return false;
663     }
664     //
665     return true;
666     }
667    
668     /**
669     * Retourne true s'il y a des données techniques lié au dossier d'instruction
670     * @param string $idx Identifiant du dossier d'instruction
671     * @return boolean S'il y a des données techniques
672     */
673     function hasDonneesTechniquesDossier($idx){
674    
675     //Si l'identifiant du dossier d'instruction founi est correct
676     if ( $idx != '' ){
677    
678     //On récupère le statut de l'état du dossier d'instruction à partir de
679     //l'identifiant du dossier
680     $sql = "SELECT donnees_techniques.donnees_techniques
681     FROM ".DB_PREFIXE."donnees_techniques
682     LEFT JOIN
683     ".DB_PREFIXE."dossier
684     ON
685     donnees_techniques.dossier_instruction = dossier.dossier
686     WHERE dossier.dossier = '".$idx."'";
687     $donnees_techniques = $this->db->query($sql);
688     $this->f->addToLog("hasDonneesTechniquesDossier() : db->query(\"".$sql."\")", VERBOSE_MODE);
689     if ( database::isError($donnees_techniques)){
690     die();
691     }
692    
693     if ( $donnees_techniques->numRows() > 0 ){
694     return TRUE;
695     }
696     }
697     return FALSE;
698     }
699    
700     /**
701     * Cette variable permet de stocker le résultat de la méthode
702     * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
703     * ces appels.
704     * @var string Code de la division du dossier en cours
705     */
706     var $_division_from_dossier = NULL;
707    
708     /**
709     * Cette méthode permet de récupérer le code de division correspondant
710     * au dossier sur lequel on se trouve.
711     *
712     * @return string Code de la division du dossier en cours
713     */
714     function getDivisionFromDossier() {
715    
716     // Cette méthode peut être appelée plusieurs fois lors d'une requête.
717     // Pour éviter de refaire le traitement de recherche de la division
718     // alors on vérifie si nous ne l'avons pas déjà calculé.
719     if ($this->_division_from_dossier != NULL) {
720     // Logger
721     $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
722     // On retourne la valeur déjà calculée
723     return $this->_division_from_dossier;
724     }
725    
726     // Par défaut, on définit la valeur du dossier à NULL
727     $dossier = NULL;
728     // Test sur le mode et le contexte du formulaire
729     if ($this->getParameter("maj") == 0
730     && ($this->getParameter("retourformulaire") == "dossier"
731     || $this->getParameter("retourformulaire") == "dossier_instruction"
732     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
733     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
734     || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
735     || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
736     // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
737     // n'existe pas en base de données) ET que nous nous trouvons
738     // dans le contexte d'un dossier d'instruction alors on récupère
739     // le numéro de dossier depuis le paramètre 'idxformulaire'
740     $dossier = $this->getParameter("idxformulaire");
741     } else {
742     // Sinon on récupère le numéro de dossier dans le champs dossier de
743     // l'enregistrement (en base de données)
744     $dossier = $this->getVal("dossier");
745     }
746    
747     // On appelle la méthode de la classe utils qui renvoi le code de la
748     // division d'un dossier, on la stocke pour ne pas refaire le calcul au
749     // prochain appel de cette méthode
750     $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
751     // Logger
752     $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
753     // On retourne la valeur retournée
754     return $this->_division_from_dossier;
755    
756     }
757 softime 5169
758    
759     /**
760     * Cette méthode est appelée lors de la suppression d’un objet, elle permet
761     * de vérifier si l’objet supprimé n’est pas lié à une autre table pour en
762     * empêcher la suppression.
763     *
764     * @param mixed $id Identifiant de l'objet.
765     *
766     * @return boolean
767     */
768     public function cleSecondaire($id) {
769     // Surcharge pour éviter les contrôles sur les tables liées en cas
770     // de suppression
771     return true;
772     }
773    
774    
775     /**
776     * Supprime le lien entre le lot et les demandeurs.
777     *
778     * @param integer $lot Identifiant de l'objet.
779     *
780     * @return boolean
781     */
782     protected function delete_lien_lot_demandeur($lot) {
783    
784     // SQL
785     $sql = "DELETE FROM ".DB_PREFIXE."lien_lot_demandeur
786     WHERE lot = ".$lot;
787     // Résultat
788     $res = $this->f->db->query($sql);
789     // Log
790     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")");
791     //
792     if ($this->f->isDatabaseError($res, true)) {
793     return false;
794     }
795    
796     //
797     return true;
798     }
799    
800    
801     /**
802     * Supprime les données techniques liées.
803     *
804     * @param integer $lot Identifiant de l'objet.
805     *
806     * @return boolean
807     */
808     protected function delete_donnees_techniques($lot) {
809    
810     // SQL
811     $sql = "DELETE FROM ".DB_PREFIXE."donnees_techniques
812     WHERE lot = ".$lot;
813     // Résultat
814     $res = $this->f->db->query($sql);
815     // Log
816     $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\")");
817     //
818     if ($this->f->isDatabaseError($res, true)) {
819     return false;
820     }
821    
822     //
823     return true;
824     }
825    
826    
827     /**
828     * Permet d’effectuer des actions avant la modification des données dans la
829     * base.
830     *
831     * @param mixed $id Identifiant de l'objet.
832     * @param object &$db Instance BDD.
833     * @param array $val Liste des valeurs.
834     * @param mixed $DEBUG Mode du debug.
835     *
836     * @return boolean
837     */
838     public function triggersupprimer($id, &$db, $val, $DEBUG) {
839    
840     // Suppression du lien entre le lot et les demandeurs
841     $delete_lien_lot_demandeur = $this->delete_lien_lot_demandeur($id);
842     //
843     if ($delete_lien_lot_demandeur === false) {
844     //
845     return false;
846     }
847    
848     // Suppression des données techniques lié au lot
849     $delete_donnees_techniques = $this->delete_donnees_techniques($id);
850     //
851     if ($delete_donnees_techniques === false) {
852     //
853     return false;
854     }
855    
856     //
857     return true;
858     }
859    
860    
861     /**
862     * Ajout les données techniques au lot.
863     *
864     * @return boolean
865     */
866     protected function add_donnees_techniques() {
867    
868     // Instancie la classe donnees_techniques en ajout
869     require_once '../obj/donnees_techniques.class.php';
870     $inst_dt = new donnees_techniques("]", $this->f->db, DEBUG);
871    
872     // Toutes les valeurs sont mis à null
873     foreach($inst_dt->champs as $value) {
874     //
875     $valF[$value] = null;
876     }
877    
878     // Ajout de l'identifiant du lot
879     $valF['lot'] = $this->valF[$this->clePrimaire];
880     // Identifiant du CERFA
881     $valF['cerfa'] = $this->get_cerfa_id_by_dossier_autorisation($this->valF['dossier_autorisation']);
882     // Si aucun CERFA n'est identifié
883     if ($valF['cerfa'] === '' || $valF['cerfa'] === null) {
884     //
885     $this->f->addToLog(__METHOD__."() : ERROR - "._("Aucun CERFA paramétré."), DEBUG_MODE);
886     return false;
887     }
888    
889     // Ajoute l'enregistrement dans la table donnees_techniques
890     $add = $inst_dt->ajouter($valF, $this->f->db, DEBUG);
891     //
892     if ($add === false) {
893     //
894     $this->f->addToLog(__METHOD__."() : ERROR - "._("Impossible d'ajouter les données techniques du lot."), DEBUG_MODE);
895     return false;
896     }
897    
898     //
899     return true;
900     }
901    
902    
903     /**
904     * Récupère l'instance du dossier.
905     *
906     * @param string $dossier Identifiant de l'objet.
907     *
908     * @return object
909     */
910     public function get_inst_dossier($dossier = null) {
911     //
912     return $this->get_inst_common("dossier", $dossier);
913     }
914    
915    
916     /**
917     * Récupère l'instance du dossier.
918     *
919     * @param string $dossier_autorisation Identifiant de l'objet.
920     *
921     * @return object
922     */
923     public function get_inst_dossier_autorisation($dossier_autorisation = null) {
924     //
925     return $this->get_inst_common("dossier_autorisation", $dossier_autorisation);
926     }
927    
928    
929     /**
930     * Récupère l'instance du dossier.
931     *
932     * @param integer $dossier_autorisation_type_detaille Identifiant de l'objet.
933     *
934     * @return object
935     */
936     public function get_inst_dossier_autorisation_type_detaille($dossier_autorisation_type_detaille) {
937     //
938     return $this->get_inst_common("dossier_autorisation_type_detaille", $dossier_autorisation_type_detaille);
939     }
940    
941    
942     /**
943     * Récupère le cerfa des lots pour afficher les bonnes données techniques.
944     *
945     * @param string $da Identifiant de l'objet.
946     *
947     * @return integer
948     */
949     public function get_cerfa_id_by_dossier_autorisation($da) {
950    
951     // Instancie le dossier d'autorisation
952     $inst_da = $this->get_inst_dossier_autorisation($da);
953    
954     // Instancie le type détaillé du dossier d'autorisation
955     $inst_datd = $this->get_inst_dossier_autorisation_type_detaille($inst_da->getVal('dossier_autorisation_type_detaille'));
956    
957     //
958     return $inst_datd->getVal('cerfa_lot');
959    
960     }
961    
962    
963 mbroquet 3730 }// fin classe
964 nhaye 5254 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26