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

Diff of /trunk/obj/consultation.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3 by fraynaud, Thu Feb 10 20:46:18 2011 UTC revision 943 by fmichon, Fri Nov 30 15:25:27 2012 UTC
# Line 2  Line 2 
2  //$Id$  //$Id$
3  //gen openMairie le 10/02/2011 20:32  //gen openMairie le 10/02/2011 20:32
4  require_once ("../gen/obj/consultation.class.php");  require_once ("../gen/obj/consultation.class.php");
5    require_once("../services/outgoing/messageenqueuer.php");
6    
7  class consultation extends consultation_gen {  class consultation extends consultation_gen {
8    
9  function consultation($id,&$db,$debug) {      function consultation($id,&$db,$debug) {
10          $this->constructeur($id,$db,$debug);          $this->constructeur($id,$db,$debug);
11  }// fin constructeur      }// fin constructeur
12    
13        // {{{ Gestion de la confidentialité des données spécifiques
14    
15        /**
16         * Surcharge pour gérer les actions disponibles dans le portlet
17         */
18        function checkAccessibility() {
19            //
20            parent::checkAccessibility();
21            // Si l'utilisateur est un intructeur qui en correspond pas à la
22            // division du dossier
23            if ($this->f->isUserInstructeur()
24                && isset($this->f->om_utilisateur["division"])
25                && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()) {
26                //
27                $this->actions_sup = array();
28                $this->setParameter("actions", array());
29            }
30            // Si une action 'lu' est présente et que le champ lu est à true
31            // on supprime l'action
32            if (isset($this->actions_sup["lu"])
33                && isset($this->val[array_search("lu", $this->champs)])
34                && $this->val[array_search("lu", $this->champs)]== "t") {
35                unset($this->actions_sup["lu"]);
36            }
37        }
38    
39        /**
40         * Cette methode est à surcharger elle permet de tester dans chaque classe
41         * des droits des droits spécifiques en fonction des données
42         */
43        function canAccess() {
44            // Si l'utilisateur est un utilisateur de service externe
45            // on vérifie qu'il peut accéder à la consultation
46            if ($this->f->isUserServiceExt()) {
47                // On compare l'id du service de la consultation
48                // aux id des services de utilisateur connecté
49                foreach($this->f->om_utilisateur['service'] as $service) {
50                    if($this->val[array_search("service",$this->champs)]===$service['service']) {
51                        return true;
52                    }
53                }
54                return false;
55            }
56            // Si l'utilisateur est un intructeur qui ne correspond pas à la
57            // division du dossier
58            if ($this->f->isUserInstructeur()
59                && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()
60                && $this->getParameter("maj") != 3) {
61                //
62                return false;
63            }
64            //
65            return true;
66        }
67    
68        /**
69         * Cette méthode permet de récupérer la division d'un dossier
70         */
71        function getDivisionFromDossier() {
72            //
73            if (!isset($this->val[array_search("dossier", $this->champs)])) {
74                return NULL;
75            }
76            //
77            $sql = "select division from ".DB_PREFIXE."dossier ";
78            $sql .= " where dossier='".$this->val[array_search("dossier", $this->champs)]."'";
79            //
80            $division = $this->db->getOne($sql);
81            $this->addToLog("getDivisionFromDossier(): db->getone(\"".$sql."\")", VERBOSE_MODE);
82            database::isError($division);
83            //
84            return $division;
85        }
86    
87        // }}}
88    
89        function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire){
90            if ($validation==0) {
91                if ($maj == 0){
92                    $form->setVal("dossier", $idxformulaire);
93                    $form->setVal("date_envoi",date('d/m/Y'));
94                }
95                if($maj == 1) {
96                    if($this->f->isAccredited('consultation_retour_avis_suivi') OR
97                        $this->f->isAccredited('consultation_retour_avis_service')) {
98                        $form->setVal("date_retour",date('d/m/Y'));
99                    }
100                }
101            }
102        }
103        
104        function setVal(&$form, $maj, $validation, &$db) {
105            if($maj == 1) {
106                 $form->setVal("date_retour",date('d/m/Y'));
107            }
108        }
109    
110        function setvalF($val) {
111            parent::setValF($val);
112            if($this->getParameter('maj')==0) {
113                $this->valF["date_reception"]=$this->valF["date_envoi"];
114            }
115    
116            // Si un retour d'avis est modifie on passe "lu" a false
117            if($this->getParameter('maj')==1 AND (
118                $this->val[array_search("avis_consultation",$this->champs)] != $val["avis_consultation"] OR
119                $this->val[array_search("date_retour",$this->champs)] != $val["date_retour"] OR
120                $this->val[array_search("motivation",$this->champs)] != $val["motivation"] OR
121                $this->val[array_search("fichier",$this->champs)] != $val["fichier"])
122            ) {
123                $this->valF["lu"]=false;
124            }
125        }
126        
127        function verifier($val, &$db, $DEBUG) {
128            parent::verifier($val, $db, $DEBUG);
129            // Si le fichier envoye est different de l'existant
130            if (isset($this->val[array_search("fichier",$this->champs)])
131                && $this->val[array_search("fichier",$this->champs)] != $val["fichier"]
132                && $this->valF['fichier']!="") {
133                // Si le fichier existe dans tmp
134                if(file_exists("../tmp/".$this->valF['fichier'])) {
135                    $contents=file_get_contents("../tmp/".$this->valF['fichier']);
136                    // On essaye de l'enregistrer
137                    $res = $this->f->storeDecisionFile($contents, $this->valF['fichier'],
138                                                   $this->valF['dossier'],
139                                                   'consultation_'.$this->valF['consultation']."_");
140                    // Si l'enregistrement s'est bien deroule
141                    // on supprime le fichier dans tmp
142                    // on met a jour valF avec le nouveau nom du fichier
143                    if($res===true){
144                        $this->addToMessage(_("Sauvegarde du fichier reussi"));
145                        unlink("../tmp/".$this->valF['fichier']);
146                        $this->valF['fichier']='consultation_'.$this->valF['consultation']."_".$this->valF['fichier'];
147                    // Sinon on supprime le fichier dans tmp
148                    // on reinitialise le nom du fichier a l'ancienne valeur
149                    } else {
150                        $this->correct = false;
151                        $this->addToMessage($res);
152                        unlink("../tmp/".$this->valF['fichier']);
153                        $this->valF['fichier']=$this->val[array_search("fichier",$this->champs)];
154                    }
155                }
156            }
157        }
158        
159        function setType(&$form,$maj) {
160            // Appel du parent
161            parent::setType($form,$maj);
162            // MODE - AJOUTER
163            if ($maj == 0) {
164                // On cache alors tous les champs que nous ne voulons pas voir
165                // apparaître dans le formulaire d'ajout (principalement les
166                // informations sur le retour d'avis)
167                $form->setType('date_retour', 'hidden');
168                $form->setType('date_reception', 'hidden');
169                $form->setType('date_limite', 'hidden');
170                $form->setType('avis_consultation', 'hidden');
171                $form->setType('motivation', 'hidden');
172                $form->setType('fichier', 'hidden');
173                $form->setType('lu', 'hidden');
174                // On permet la modification de certains champs
175                $form->setType('dossier', 'hiddenstatic');
176                $form->setType('service', 'select');
177                $form->setType('date_envoi', 'date2');
178            }
179            // MODE - MODIFIER
180            if ($maj == 1) {
181    
182                // On affiche en statique les informations qui ne sont plus
183                // modifiables
184                $form->setType('dossier', 'hiddenstatic');
185                $form->setType('date_envoi', 'hiddenstaticdate');
186                $form->setType('date_limite', 'hiddenstaticdate');
187                $form->setType('service', 'selecthiddenstatic');
188                
189                // La date de réception ne peut être modifiée que par un
190                // utilisateur en ayant spécifiquement la permission
191                if($this->f->isAccredited('consultation_modifier_date_reception')) {
192                    $form->setType('date_reception', 'date2');
193                } else {
194                    $form->setType('date_reception', 'hiddenstaticdate');
195                }
196    
197                // Le marqueur lu/non lu ne peut être modifié que par un
198                // utilisateur en ayant spécifiquement la permission
199                if ($this->f->isAccredited('consultation_modifier_lu')) {
200                    $form->setType('lu', 'checkbox');
201                } else {
202                    $form->setType('lu', 'hidden');
203                }
204    
205                // Gestion du type du widget sur le champ fichier
206                if($this->val[array_search("fichier",$this->champs)]=="" OR
207                   $this->f->isAccredited('consultation_modifier_fichier')) {
208                    // Si il n'y a jamais eu de fichier enregistré ou que
209                    // l'utilisateur a spécifiquement les droits pour modifier
210                    // un fichier déjà enregistré alors on positionne un type
211                    // de widget modifiable
212                    $form->setType('fichier', 'tmpUpload');
213                } else {
214                    // Si non on affiche uniquement le nom du fichier
215                    $form->setType('fichier', 'tmpUploadStatic');
216                }
217    
218                // Modification layout : écran de retour d'avis permettant
219                // uniquement la saisie des trois champs : avis, motivation et fichier
220                if (!$this->f->isAccredited('consultation_consulter_autre_que_retour_avis')) {
221    
222                    // On cache alors tous les champs que nous ne voulons pas voir
223                    $form->setType('dossier', 'hidden');
224                    $form->setType('service', 'hidden');
225                    $form->setType('date_envoi', 'hidden');
226                    $form->setType('date_retour', 'hidden');
227                    $form->setType('date_reception', 'hidden');
228                    $form->setType('date_limite', 'hidden');
229                    $form->setType('lu', 'hidden');
230    
231                }
232    
233            }
234            // MODE - CONSULTER
235            if ( $maj == 3 ) {
236                $form->setType('fichier', 'tmpUploadStatic');
237            }
238            //// On cache la clé primaire
239            //$form->setType('consultation', 'hidden');
240        }
241    
242        // TRIGGER AVANT MODIFICATION DE DONNEES
243        // trigger before modification data
244        function triggerajouter($id,&$db,$val,$DEBUG) {
245            // mise a jour instruction avec evenement [return delay]
246            if ($this->valF['date_envoi']!=""){
247                $sql= "select delai from ".DB_PREFIXE."service where service ='".$this->valF['service']."'";
248                $delai = $db->getOne($sql);
249                $this->valF['date_limite'] =  $this->moisdate($this->valF['date_envoi'],$delai);
250                $this->addToMessage(_("delai")." ".
251                   _("retour")." ".$delai." "._("mois")." -> ".
252                   _("retour")." ".$this->valF['date_limite']."<br>");
253                $this->valF['lu'] = true;
254            }
255            
256        }
257        
258        function triggerajouterapres($id,&$db,$val,$DEBUG) {
259            
260            // Verification de la demande de notif par mail
261            $sql= "SELECT abrege, notification_email, email FROM ".DB_PREFIXE.
262                    "service WHERE service ='".$this->valF['service']."'";
263            $res=$db->query($sql);
264            $notif = $res->fetchrow(DB_FETCHMODE_ASSOC);
265            if (database :: isError($sql))die($res->getMessage()."erreur ".$sql);
266            if ($notif['notification_email']=='t') {
267                
268                // Recuperation des infos du dossier
269                $sql= "SELECT dossier, terrain_adresse, terrain_adresse_complement, terrain_cp, terrain_ville
270                        FROM ".DB_PREFIXE."dossier WHERE dossier ='".$this->valF['dossier']."'";
271                $res=$db->query($sql);
272                $dossier = $res->fetchrow(DB_FETCHMODE_ASSOC);
273                
274                // Definition des parametres d'envoi du mail
275                $title=_("Consultation de services : dossier no")." ".$dossier['dossier'];
276                $corps=_("Votre service est consulte concernant le dossier no")." ".$dossier['dossier']."<br/>".
277                _("Il concerne le terrain situe a l'adresse :")." ".utf8_decode($dossier['terrain_adresse']).
278                " ".utf8_decode($dossier['terrain_adresse_complement'])." ".utf8_decode($dossier['terrain_cp'])." ".$dossier['terrain_ville']."<br/>".
279                _("Vous pouvez y acceder et rendre votre avis a l'adresse")." <a href='".$this->f->getParameter('services_consultes_lien_interne').
280                "scr/form.php?obj=consultation&action=3&idx=".$this->valF['consultation']."' >".
281                _("Lien interne (services VDM)")."</a> "._("ou")." <a href='".$this->f->getParameter('services_consultes_lien_externe').
282                "scr/form.php?obj=consultation&action=3&idx=".$this->valF['consultation']."' >".
283                _("Lien externe (hors VDM)")."</a>";
284                // Envoi du mail avec message de retour
285                if($this->f->sendMail($title, $corps, $notif['email'])) {
286                    $this->addToMessage(_("Envoi d'un mail de notification au service")." ".$notif['abrege']);
287                } else {
288                    $this->addToMessage(_("L'envoi du mail de notification a echoue"));
289                }
290            }
291            
292            // s'il s'agit de la consultation ERP Secu, ERP Accessibilite, ou
293            // deenvoie un
294            // message a ERP
295            $dossier_erp = $this->getFromDB("SELECT erp FROM ".DB_PREFIXE.
296                            "dossier WHERE dossier = '" .$this->valF['dossier'] . "'");
297            $dossier_nature = $this->getFromDB("SELECT nature FROM ".DB_PREFIXE.
298                            "dossier WHERE dossier = '" . $this->valF['dossier'] . "'");
299            if ($dossier_erp == 't'
300                && substr($dossier_nature, 0, 2) == $this->f->getParameter('erp_dossier_nature_pc')) {
301                // envoi du message "Demande d'instruction d'un dossier PC pour un ERP"
302                if (($this->valF['service'] == $this->f->getParameter('erp_service_accessibilite')
303                    || $this->valF['service'] == $this->f->getParameter('erp_service_securite'))) {
304                    $msgenque = new MessageEnqueuer();
305                    $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
306                    $msgenque->setConsultationIdentifier($this->valF['consultation']);
307                    $msgenque->enqueueMessage($msgenque::$ERP_DEMANDE_INSTRUCTION_PC);
308                }
309                
310                // envoi du message "Consultation ERP pour conformite" en cas de creation de la
311                // consultation du service ERP Conformite
312                if ($this->valF['service'] == $this->f->getParameter('erp_service_conformite')) {
313                    $msgenque = new MessageEnqueuer();
314                    $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
315                    $msgenque->setConsultationIdentifier($this->valF['consultation']);
316                    $msgenque->enqueueMessage($msgenque::$ERP_CONSULTATION_CONFORMITE);                
317                }
318            }
319            
320        }
321        
322        /**
323         * Fait une requette sql pour extraire la valeur d'un champ, et retourne
324         * cette valeur
325         * @param string $sql La requete sql a executer
326         * @return La valeur du champs cherche, sinon NULL. En cas d'erreur de la BD
327         * l'execution s'arrete.
328         */
329        function getFromDB($sql) {
330            //$sql = "SELECT libelle FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";
331            $res = $this->db->limitquery($sql, 0, 1);
332            $this->addToLog("getDossierERPSpecification(): db->limitquery(\"".
333                            str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
334            // Si une erreur survient on die
335            if (database::isError($res, true)) {
336                // Appel de la methode de recuperation des erreurs
337                $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'instruction');
338            }
339            // retourne la nature du dossier
340            while ($row =& $res->fetchRow()) {
341                return $row[0];
342            }
343            // la nature n'etait pas trouve, ce qui ne devrait pas se passer
344            return NULL;
345    
346        }
347    
348        
349        /**
350         * Returne la nature du dossier auquel la consultation appartient.
351         * @param string $dossier L'identifiant du dossier
352         * @return La nature du dossier si elle existe, sinon NULL. En cas
353         * d'erreur de la BD, l'execution se termine.
354         */
355        function getDossierNature($dossier) {
356            $sql = "SELECT nature FROM ".DB_PREFIXE."dossier WHERE dossier = '" . $dossier . "'";
357            $res = $this->db->limitquery($sql, 0, 1);
358            $this->addToLog("getDossierNature(): db->limitquery(\"".str_replace(",",", ",$sql)."\", 0, 1);", VERBOSE_MODE);
359            // Si une erreur survient on die
360            if (database::isError($res, true)) {
361                // Appel de la methode de recuperation des erreurs
362                $this->erreur_db($res->getDebugInfo(), $res->getMessage(), 'dossier');
363            }
364            // retourne la nature du dossier
365            while ($row =& $res->fetchRow()) {
366                return $row[0];
367            }
368            // la nature n'etait pas trouve, ce qui ne devrait pas se passer
369            return NULL;
370        }
371    
372        // =============================================
373        // calcul de date avec ajout de mois (delais)
374        // [add months (delay) and calculation final date]
375        // limite ? => voir fonction instruction
376        // =============================================
377        function moisdate($date,$delaimois) {
378            // rajout de mois à une date (moins de 12)
379            $temp = explode("-" , $date);
380            $jour = (int) $temp[2];
381            $mois = (int) $temp[1];
382            $annee = (int) $temp[0];
383            $mois=$mois+$delaimois;
384            // calcul mois annee
385            if($mois>12){
386                $mois=$mois-12;
387                $annee=$annee+1;
388            }
389             // Calcul du nombre de jours dans le mois sélectionné
390             switch($mois) {
391                case "2":
392                    if ($annee % 4 == 0 && $annee % 100 != 0 || $annee % 400 == 0)
393                        $jourmax = 29;
394                    else
395                        $jourmax = 28;
396                break;
397                case "4":
398                case "6":
399                case "9":
400                case "11":
401                    $jourmax = 30;
402                    break;
403                default:
404                    $jourmax = 31;
405            }
406            if ($jour > $jourmax)
407                $jour = $jourmax;
408            return $annee."-".$mois."-".$jour ;
409        }
410    
411        // =============================================
412        // Ajout du fielset
413        // Add fieldset
414        // =============================================
415        function setLayout(&$form, $maj){
416    
417                // Modification layout : écran de retour d'avis permettant
418                // uniquement la saisie des trois champs : avis, motivation et fichier
419                if ($this->f->isAccredited('consultation_consulter_autre_que_retour_avis')) {
420                    
421                    //Champs sur lequel s'ouvre le fieldset
422                    $form->setBloc('dossier','D',"");
423                    $form->setFieldset('dossier','D',_('Consultation'));
424        
425                    //Champs sur lequel se ferme le fieldset
426                    $form->setFieldset('date_envoi','F','');
427                    $form->setBloc('date_envoi','F');
428    
429                }
430                
431                // MODE - autre que AJOUTER alors on affiche un fieldset retour
432                // d'avis
433                if ($maj != 0) {
434                    
435                    //Champs sur lequel s'ouvre le fieldset
436                    $form->setBloc('date_reception','D',"");
437                    $form->setFieldset('date_reception','D',_('Retour d\'avis'));
438        
439                    //Champs sur lequel se ferme le fieldset
440                    $form->setFieldset('lu','F','');
441                    $form->setBloc('lu','F');
442                    
443                }
444        }
445    
446        /** Surcharge de la methode retour afin de retourner sur la page de saisie de
447        * code barre si besoin
448        **/
449        function retour($premier = 0, $recherche = "", $tricol = "") {
450            $params ="obj=".get_class($this);
451            if($this->getParameter("retour")=="form") {
452                $params .= "&amp;idx=".$this->getParameter("idx");
453                $params .= "&amp;action=3";
454            }
455            $params .= "&amp;premier=".$this->getParameter("premier");
456            $params .= "&amp;tricol=".$this->getParameter("tricol");
457            $params .= "&amp;recherche=".$this->getParameter("recherche");
458            $params .= "&amp;selectioncol=".$this->getParameter("selectioncol");
459            $params .= "&amp;advs_id=".$this->getParameter("advs_id");
460            $params .= "&amp;valide=".$this->getParameter("valide");
461            echo "\n<a class=\"retour\" ";
462            echo "href=\"";
463            //
464    
465            if($this->getParameter("retour")=="form" AND !($this->getParameter("validation")>0 AND $this->getParameter("maj")==2 AND $this->correct)) {
466                echo "form.php?".$params;
467            } elseif($this->getParameter("retour")=="avis_code_barre") {
468                echo "../app/avis_code_barre.php";
469            } else {
470                echo "tab.php?".$params;
471            }
472            //
473            echo "\"";
474            echo ">";
475            //
476            echo _("Retour");
477            //
478            echo "</a>\n";
479        }
480    
481        /**
482         * Surcharge du bouton retour pour popup
483         */
484            function retoursousformulaire($idxformulaire, $retourformulaire, $val,
485                                      $objsf, $premiersf, $tricolsf, $validation,
486                                      $idx, $maj, $retour) {
487            if($retourformulaire === "demande_avis_encours") {
488                echo "\n<a class=\"retour\" ";
489                echo "href=\"";
490                echo "#";
491                echo  "\" ";
492                echo ">";
493                //
494                echo _("Retour");
495                //
496                echo "</a>\n";
497            } else {
498                parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
499                                      $objsf, $premiersf, $tricolsf, $validation,
500                                      $idx, $maj, $retour);
501            }
502        }
503  }// fin classe  }// fin classe
 ?>  
504    ?>

Legend:
Removed from v.3  
changed lines
  Added in v.943

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26