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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3440 - (show annotations)
Thu Apr 30 12:30:41 2015 UTC (9 years, 9 months ago) by nmeucci
File size: 41297 byte(s)
Ajout de droits spécifiques, suppression du canAccess() et passage en nouvelles actions pour : dossier_message, blocnote, document_numerise.

1 <?php
2 //$Id$
3 //gen openMairie le 02/05/2013 15:03
4
5 require_once ("../gen/obj/document_numerise.class.php");
6 require_once("../services/outgoing/messageenqueuer.php");
7
8 class document_numerise extends document_numerise_gen {
9
10 //Métadonnées spécifiques
11 var $metadata = array(
12 "uid" => array(
13 "dossier" => "getDossier",
14 "dossier_version" => "getDossierVersion",
15 "numDemandeAutor" => "getNumDemandeAutor",
16 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
17 "typeInstruction" => "getTypeInstruction",
18 "statutAutorisation" => "getStatutAutorisation",
19 "typeAutorisation" => "getTypeAutorisation",
20 "dateEvenementDocument" => "getDateEvenementDocument",
21 "filename" => "getFilename",
22 "groupeInstruction" => 'getGroupeInstruction',
23 "title" => 'getTitle',
24 ),
25 );
26
27 var $metadonneesArrete = array();
28
29 var $abstract_type = array(
30 "uid" => "file",
31 );
32
33 /** @var boolean Les nouvelles actions sont activées sur cet objet */
34 var $activate_class_action;
35
36 function document_numerise($id,&$db,$debug) {
37 //On active les nouvelles actions
38 $this->activate_class_action = true;
39 //
40 $this->constructeur($id,$db,$debug);
41 }// fin constructeur
42
43 /**
44 * Définition des actions disponibles sur la classe.
45 *
46 * @return void
47 */
48 function init_class_actions() {
49 parent::init_class_actions();
50
51 // ACTION - 000 - ajouter
52 //
53 $this->class_actions[0]["condition"] = "is_ajoutable";
54
55 // ACTION - 001 - modifier
56 //
57 $this->class_actions[1]["condition"] = "is_modifiable";
58
59 // ACTION - 002 - supprimer
60 //
61 $this->class_actions[2]["condition"] = "is_supprimable";
62
63 // ACTION - 004 - view_tab
64 // Interface spécifique du tableau des pièces
65 $this->class_actions[4] = array(
66 "identifier" => "view_tab",
67 "view" => "view_tab",
68 "permission_suffix" => "tab",
69 );
70 }
71
72 /**
73 * VIEW - view_tab
74 *
75 * Cette vue permet d'afficher l'interface spécifique du tableau
76 * des pièces (liste et bouton d'ajout).
77 *
78 * @return void
79 */
80 function view_tab() {
81 // Vérification de l'accessibilité sur l'élément
82 $this->checkAccessibility();
83 //
84 echo "\n<div id=\"sousform-document_numerise\">\n";
85 echo "\n<!-- ########## START FORMULAIRE ########## -->\n";
86 echo "<div class=\"formEntete ui-corner-all\">\n";
87 //
88 ($this->f->get_submitted_get_value('idxformulaire')!==null ? $idxformulaire = $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
89 ($this->f->get_submitted_get_value('retourformulaire')!==null ? $retourformulaire = $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
90
91 //L'identifiant du dossier est $idxformualire de base pour les objets dossier_instruction
92 //Depuis l'objet dossier_autorisation $dossier posséderas le numéros du dossier d'autorisation
93 $dossier = $idxformulaire;
94
95 //Si le formulaire est demande_avis_encours ou demande_avis_passee
96 if ($retourformulaire == 'demande_avis_encours' || $retourformulaire == 'demande_avis_passee') {
97
98 // Récupération du dossier en fonction du numéro de consultation
99 $sql = "SELECT dossier
100 FROM ".DB_PREFIXE."consultation
101 WHERE consultation=$idxformulaire";
102 $dossier = $this->f->db->getone($sql);
103 $this->f->addToLog(__METHOD__."() : db->getone(\"".$sql."\");", VERBOSE_MODE);
104 $this->f->isDatabaseError($dossier);
105 }
106
107 // Récupération des documents numérisés
108 $select = "SELECT document_numerise.document_numerise as document_numerise,
109 document_numerise.date_creation as date_creation,
110 document_numerise_type_categorie.libelle as categorie,
111 document_numerise.nom_fichier as nom_fichier,
112 document_numerise_type.libelle as type_document,
113 document_numerise.uid as uid ";
114
115 //table de la requête
116 $from = "FROM ".DB_PREFIXE."document_numerise
117 LEFT JOIN ".DB_PREFIXE."document_numerise_type
118 ON document_numerise.document_numerise_type = document_numerise_type.document_numerise_type
119 LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie
120 ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie ";
121 if ($retourformulaire == 'dossier_autorisation') {
122 $select .= ", dossier.dossier as dossier ";
123 $from .= " LEFT JOIN ".DB_PREFIXE."dossier
124 ON document_numerise.dossier = dossier.dossier
125 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
126 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation ";
127 }
128
129 // La condition de la requête
130 $where = " WHERE document_numerise.dossier = '$dossier' ";
131 // Si le formulaire est celui des dossiers d'autorisations
132 if ($retourformulaire == 'dossier_autorisation') {
133 $where = " WHERE dossier_autorisation.dossier_autorisation = '$dossier'
134 AND (document_numerise_type.code = 'ART'
135 OR document_numerise_type.code = 'AVIS'
136 OR document_numerise_type.code = 'DOC'
137 OR document_numerise_type.code = 'DAACT'
138 OR document_numerise_type.code = 'DOS01'
139 OR document_numerise_type.code = 'DOS02' )";
140 }
141
142 // Le tri sur la requête
143 $tri = " ORDER BY document_numerise.date_creation, document_numerise.nom_fichier";
144
145 // Concaténation des morceaux de la requête
146 $sql = $select.$from.$where.$tri;
147 $res = $this->f->db->query($sql);
148 $this->f->addToLog(__METHOD__."() : db->query(\"".$sql."\");", VERBOSE_MODE);
149 $this->f->isDatabaseError($res);
150
151 // Requête sql pour recupèrere la division de l'instructeur en session
152 $sql_instr_division = "SELECT division.division
153 FROM ".DB_PREFIXE."instructeur
154 LEFT JOIN ".DB_PREFIXE."division
155 ON division.division=instructeur.division
156 LEFT JOIN ".DB_PREFIXE."om_utilisateur
157 ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
158 WHERE om_utilisateur.login = '".$_SESSION['login']."'";
159 $division = $this->f->db->getOne($sql_instr_division);
160 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql_instr_division."\");", VERBOSE_MODE);
161 $this->f->isDatabaseError($division);
162
163 //En-tête de tableau pour afficher la date et la catégorie des documents
164 $header =
165 "
166 <thead>
167 <tr class='ui-tabs-nav ui-accordion ui-state-default tab-title'>
168 <th class='title col-0 firstcol %s' colspan=2>
169 <span class='name'>
170 %s
171 </span>
172 </th>
173 </tr>
174 </thead>
175 ";
176
177 //Lien permettant d'ouvrir le document en pdf
178 $link = "
179 <a class='lienTable'
180 href=\"../spg/file.php?obj=document_numerise&champ=uid&id=%s\" target='_blank'>
181 %s
182 </a>";
183 if ($retourformulaire == "dossier_instruction"
184 && $this->f->isUserAdministrateur()) {
185 // l'administrateur à la permission d'accéder à la fiche du document
186 $link = "<a class='lienTable'
187 onclick=\"ajaxIt('document_numerise','../scr/sousform.php?obj=document_numerise&action=3&idx=%s&tri=&premier=0&recherche=&objsf=document_numerise&premiersf=0&retourformulaire=$retourformulaire&idxformulaire=$dossier&trisf=&retour=tab');\"
188 href=\"#\">
189 %s
190 </a>";
191 }
192
193 //Récupère le statut du dossier d'instruction
194 $sql = "SELECT etat.statut
195 FROM ".DB_PREFIXE."etat
196 LEFT JOIN
197 ".DB_PREFIXE."dossier
198 ON
199 etat.etat = dossier.etat
200 WHERE dossier.dossier = '".$idxformulaire."'";
201 $statut = $this->f->db->getOne($sql);
202 $this->f->addToLog(__METHOD__."() : db->getOne(\"".$sql."\");", VERBOSE_MODE);
203 $this->f->isDatabaseError($statut);
204
205 // Seul un administrateur peut ajouter des pièces
206 if (($retourformulaire == 'dossier'
207 OR $retourformulaire == 'dossier_instruction'
208 OR $retourformulaire == 'dossier_instruction_mes_encours'
209 OR $retourformulaire == 'dossier_instruction_tous_encours'
210 OR $retourformulaire == 'dossier_instruction_mes_clotures'
211 OR $retourformulaire == 'dossier_instruction_tous_clotures')
212 && $this->f->isAccredited('document_numerise_add')) {
213
214 //Affiche bouton ajouter
215 echo "<p><a onclick=\"ajaxIt('document_numerise','../scr/sousform.php?obj=document_numerise&action=0&tri=&objsf=document_numerise&premiersf=0&retourformulaire=$retourformulaire&idxformulaire=$dossier&trisf=&retour=tab');\" href='#'>
216 <span class='om-icon om-icon-16 om-icon-fix add-16' title='Ajouter'>Ajouter</span>
217 Ajouter un document
218 </a></p>";
219 }
220
221 //
222 $i = 1;
223
224 //Résultat à $i - 1 pour tester la date et catégorie des documents
225 $lastRes = array();
226 $lastRes['date_creation'][0] = "";
227 $lastRes['categorie'][0] = "";
228
229 //Tant qu'il y a des résultats
230 while( $row = &$res->fetchRow(DB_FETCHMODE_ASSOC) ) {
231
232 $lastRes['date_creation'][$i] = $row['date_creation'];
233 $lastRes['categorie'][$i] = $row['categorie'];
234
235 //Si la date de création est différente de celle du résultat juste avant
236 if ($row['date_creation'] != $lastRes['date_creation'][$i-1]) {
237 //Si ce n'est pas le premier résultat on ferme la table
238 if($i != 1) {
239 echo "</table>";
240 }
241
242 //Affiche la table
243 echo "<table class='tab-tab document_numerise'>";
244 //Affiche le header de la date
245 printf($header, 'headerDate', $this->f->formatDate($row['date_creation']));
246 //Affiche le header de la catégorie
247 printf($header,'headerCat', $row['categorie']);
248
249 //Style des lignes
250 $style = 'odd';
251
252 }
253
254 //Si la date de création est identique à celle du résultat juste avant
255 //et la catégorie est différente de celle du résultat juste avant
256 if ($row['date_creation'] == $lastRes['date_creation'][$i-1] && $row['categorie'] != $lastRes['categorie'][$i-1]) {
257 //Affiche le header de la catégorie
258 printf($header,'headerCat', $row['categorie']);
259
260 //Style des lignes
261 $style = 'odd';
262 }
263
264 //Si toujours dans la catégorie on change le style de la ligne
265 if ($row['categorie'] == $lastRes['categorie'][$i-1] && $row['date_creation'] == $lastRes['date_creation'][$i-1]) {
266 $style = ($style=='even')?'odd':'even';
267 }
268
269 //
270 echo '<tr class="tab-data '.$style.'">';
271
272 echo '<td class="col-0 firstcol">';
273 //Si on est dans la visualisation du DA, on affiche le numéro du dossier
274 //d'instruction auquel est rataché la pièce et le nom du fichier
275 if ($retourformulaire === 'dossier_autorisation'){
276 printf ($link, $row['document_numerise'], $row['dossier']." - ".$row['nom_fichier']);
277 }
278 else {
279 //On affiche que le nom du fichier
280 printf ($link, $row['document_numerise'], $row['nom_fichier']);
281
282 }
283 echo '</td>';
284
285 // Libelle du type du document
286 echo '<td class="col-1">';
287 printf ($link, $row['document_numerise'], $row['type_document']);
288 echo '</td>';
289
290 echo "</tr>";
291
292 //
293 $i++;
294
295 }
296
297 //On ferme la table
298 echo "</table>";
299
300 //S'il n'y a pas de résultat on affiche "Aucun enregistrements"
301 if ($res->numrows() == 0) {
302 echo "<p class='noData'>"._("Aucun enregistrements")."<p>";
303 }
304 }
305
306 function setType(&$form,$maj) {
307 parent::setType($form,$maj);
308
309 //type
310 $form->setType('document_numerise','hidden');
311 $form->setType('dossier','hidden');
312 $form->setType('nom_fichier','hidden');
313
314 if ($maj==0){ //ajout
315 $form->setType('nom_fichier','hidden');
316 if($this->retourformulaire == "") {
317 $form->setType('uid','upload');
318 } else {
319 $form->setType('uid','upload2');
320 }
321 }// fin ajout
322
323 if ($maj==1){ //modifier
324 $form->setType('nom_fichier','hiddenstatic');
325 if($this->retourformulaire == "") {
326 $form->setType('uid','upload');
327 } else {
328 $form->setType('uid','upload2');
329 }
330 }// fin modifier
331
332 if ($maj==2){ //supprimer
333 $form->setType('uid','filestatic');
334 $form->setType('date_creation','datestatic');
335 }// fin supprimer
336
337 if ($maj==3){ //consulter
338 $form->setType('uid','file');
339 }// fin consulter
340 }
341
342 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){
343 parent::setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG);
344
345 $this->retourformulaire = $retourformulaire;
346
347 if($maj == 0 &&
348 ($retourformulaire =='dossier'
349 || $retourformulaire =='dossier_instruction'
350 || $retourformulaire=='dossier_instruction_tous_clotures'
351 || $retourformulaire=='dossier_instruction_mes_clotures'
352 || $retourformulaire=='dossier_instruction_tous_encours'
353 || $retourformulaire=='dossier_instruction_mes_encours')) {
354 $form->setVal('dossier', $idxformulaire);
355 $form->setVal('date_creation', date("d/m/Y"));
356 }
357
358 }// fin setValsousformulaire
359
360 /**
361 * [setLib description]
362 * @param [type] $form [description]
363 * @param [type] $maj [description]
364 */
365 function setLib(&$form, $maj) {
366 parent::setLib($form, $maj);
367
368 //
369 $form->setLib("uid", _("fichier"));
370 }
371
372
373 /**
374 * Méthode de traitement des données retournées par le formulaire
375 */
376 function setvalF($val) {
377 parent::setvalF($val);
378
379 //Si le type est renseigné
380 if ($val['document_numerise_type'] != "") {
381 //Recupère le code du type du document
382 $document_numerise_type = $this->get_document_numerise_type_code_by_id($val["document_numerise_type"]);
383
384 } else {
385 $document_numerise_type = "";
386 }
387
388 if ($val["date_creation"] == "") {
389 $this->valF["date_creation"] = "";
390 }
391
392 //Génération automatique nom du fichier
393 //var_dump($this);
394 if ($val["nom_fichier"] == "" || $this->getParameter("maj") != 0) {
395 $this->valF['nom_fichier'] = $this->generateFilename($this->valF["date_creation"], $document_numerise_type);
396 }
397 }
398
399 /**
400 * Permet de mettre à jour un champs dans la table instruction sans passer par ses triggers
401 * @param string $document_numerise Identifiant du fichier
402 * @param integer $instruction L'identifiant de l'instruction à mettre à jour
403 */
404 private function updateInstructionAutoExecute($document_numerise, $instruction) {
405
406 // valeurs à mettre à jour
407 $val = array("document_numerise"=>$document_numerise);
408 // met à jour la table instruction sans passer par ses triggers
409 $res = $this->db->autoExecute(DB_PREFIXE."instruction", $val, DB_AUTOQUERY_UPDATE,"instruction=".$instruction);
410 // Exécution du traitement
411 $this->f->addToLog("updateInstructionDocumentArrete() : db->autoExecute(".$res.")", VERBOSE_MODE);
412 if (database::isError($res)) {
413 die();
414 }
415 }
416
417 /**
418 * Permet d’effectuer des actions après l’insertion des données dans la base
419 */
420 function triggerajouterapres($id,&$db,$val,$DEBUG) {
421
422 //Si l'option ERP est activée
423 if ($this->f->getParameter('option_erp') === 'true') {
424
425 //Envoi d'un message au référentiel ERP si on ajoute une piece sur
426 //un dossier de type AT
427 if ($this->f->getDATDCode($this->valF['dossier']) === 'AT') {
428 //On initialise la queue de message
429 $msgenque = new MessageEnqueuer();
430 //On initialise le dossier d'instruction
431 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
432
433 //On récupère l'état du dossier d'instruction
434 $etat = $this->getEtatDossier($this->valF['dossier']);
435
436 //On calcule le type de pièce
437 $msgenque->setTypePiece(($etat==='incomplet')?_("complementaire"):_("supplementaire"));
438 $return = $msgenque->enqueueMessage($msgenque::$ERP_AJOUT_PIECE);
439 //Si une erreur s'est produite on arrête le traitement et on
440 //retourne une erreur
441 if ($return !== 0){
442
443 $this->addToMessage(_("Une erreur s'est produite lors de ".
444 "l'envoi du message au referentiel ERP. Merci de ".
445 "contacter votre administrateur"));
446 //On ne valide pas le formulaire
447 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
448 $this->correct = false;
449 return false;
450 }
451 else {
452 $this->addToMessage(_("Le message a ete transmis au ".
453 "referentiel ERP."));
454 }
455 }
456 }
457 }
458
459 /**
460 * Permet d’effectuer des actions avant la modification des données dans la base
461 */
462 function triggermodifier($id,&$db,$val,$DEBUG) {
463
464 // si le fichier n'a pas été déjà modifié
465 if (stripos($val['uid'], 'tmp') === false) {
466 // récupération du fichier et de ses métadonnées
467 $file = $this->f->storage->get($val['uid']);
468 // créé un fichier temporaire
469 $tmp_file = $this->f->storage->create_temporary($file['file_content'], $file['metadata'], "from_content");
470 // remplace le fichier par le temporaire pour obliger la modification du fichier
471 $this->valF['uid'] = 'tmp|'.$tmp_file;
472 }
473 }
474
475 /**
476 * Surcharge du bouton retour des sous-formulaire
477 */
478 function retoursousformulaire($idxformulaire, $retourformulaire, $val,
479 $objsf, $premiersf, $tricolsf, $validation,
480 $idx, $maj, $retour) {
481
482 if(($maj == 0 || $maj == 3 || $maj == 2) && ($retourformulaire === "dossier_instruction"
483 || $retourformulaire==='dossier_instruction_tous_clotures'
484 || $retourformulaire==='dossier_instruction_mes_clotures'
485 || $retourformulaire==='dossier_instruction_tous_encours'
486 || $retourformulaire==='dossier_instruction_mes_encours')) {
487
488 echo "\n<a class=\"retour\" ";
489 echo "href=\"#\" ";
490
491 echo "onclick=\"ajaxIt('".$objsf."', '";
492 echo "../scr/sousform.php?obj=document_numerise"
493 ."&idx=$idxformulaire"
494 ."&action=4"
495 ."&retourformulaire=$retourformulaire"
496 ."&idxformulaire=$idxformulaire"
497 ."&retour=form');\"";
498 echo "\" ";
499 echo ">";
500 //
501 echo _("Retour");
502 //
503 echo "</a>\n";
504
505 } else {
506 parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
507 $objsf, $premiersf, $tricolsf, $validation,
508 $idx, $maj, $retour);
509 }
510 }
511
512 /**
513 * Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
514 * consultation
515 */
516 function setSelect(&$form, $maj,&$db,$debug) {
517 //parent::setSelect($form, $maj,$db,$debug);
518 // Inclusion du fichier de requêtes
519 if (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php")) {
520 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php";
521 } elseif (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc")) {
522 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc";
523 }
524 // document_numerise_type
525 $this->init_select($form, $this->f->db, $maj, null, "document_numerise_type", $sql_document_numerise_type, $sql_document_numerise_type_by_id, false);
526
527 //Seulement dans le cas d'un dossier d'instruction
528 if($this->retourformulaire =='dossier_instruction'
529 || $this->retourformulaire=='dossier_instruction_tous_clotures'
530 || $this->retourformulaire=='dossier_instruction_mes_clotures'
531 || $this->retourformulaire=='dossier_instruction_tous_encours'
532 || $this->retourformulaire=='dossier_instruction_mes_encours') {
533
534 //Tableau des contraintes
535 $params = array(
536 "constraint" => array(
537 "extension" => ".pdf"
538 ),
539 );
540
541 $form->setSelect("uid", $params);
542 }
543 }
544
545 // {{{
546 // Méthodes de récupération des métadonnées document
547 /**
548 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
549 * @return [type] [description]
550 */
551 protected function getDossier() {
552 if(empty($this->specificMetadata)) {
553 $this->getSpecificMetadata();
554 }
555 return $this->specificMetadata->dossier;
556 }
557 /**
558 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
559 * @return int Version
560 */
561 protected function getDossierVersion() {
562 if(empty($this->specificMetadata)) {
563 $this->getSpecificMetadata();
564 }
565 return $this->specificMetadata->version;
566 }
567 /**
568 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
569 * @return [type] [description]
570 */
571 protected function getNumDemandeAutor() {
572 if(empty($this->specificMetadata)) {
573 $this->getSpecificMetadata();
574 }
575 return $this->specificMetadata->dossier_autorisation;
576 }
577 /**
578 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
579 * @return [type] [description]
580 */
581 protected function getAnneemoisDemandeAutor() {
582 if(empty($this->specificMetadata)) {
583 $this->getSpecificMetadata();
584 }
585 return $this->specificMetadata->date_demande_initiale;
586 }
587 /**
588 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
589 * @return [type] [description]
590 */
591 protected function getTypeInstruction() {
592 if(empty($this->specificMetadata)) {
593 $this->getSpecificMetadata();
594 }
595 return $this->specificMetadata->dossier_instruction_type;
596 }
597 /**
598 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
599 * @return [type] [description]
600 */
601 protected function getStatutAutorisation() {
602 if(empty($this->specificMetadata)) {
603 $this->getSpecificMetadata();
604 }
605 return $this->specificMetadata->statut;
606 }
607 /**
608 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
609 * @return [type] [description]
610 */
611 protected function getTypeAutorisation() {
612 if(empty($this->specificMetadata)) {
613 $this->getSpecificMetadata();
614 }
615 return $this->specificMetadata->dossier_autorisation_type;
616 }
617 /**
618 * Récupération nom du fichier à ajouter aux métadonnées
619 * @return [type] [description]
620 */
621 protected function getFilename() {
622 return $this->valF["nom_fichier"];
623 }
624 /**
625 * Récupération de la date d'ajout de document à ajouter aux métadonnées
626 * @return [type] [description]
627 */
628 protected function getDateEvenementDocument() {
629 return date("Y-m-d", strtotime($this->valF["date_creation"]));
630 }
631 /**
632 * Récupération du groupe d'instruction à ajouter aux métadonnées
633 * @return string Groupe d'instruction
634 */
635 protected function getGroupeInstruction() {
636 if(empty($this->specificMetadata)) {
637 $this->getSpecificMetadata();
638 }
639 return $this->specificMetadata->groupe_instruction;
640 }
641 /**
642 * Récupération du libellé du type du document à ajouter aux métadonnées
643 * @return string Groupe d'instruction
644 */
645 protected function getTitle() {
646 //Requête sql
647 $sql = "SELECT libelle
648 FROM ".DB_PREFIXE."document_numerise_type
649 WHERE document_numerise_type = ".$this->valF["document_numerise_type"];
650 $document_numerise_type_libelle = $this->db->getOne($sql);
651 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
652 $this->f->addToLog("getTitle() : db->getOne(".$sql.")", VERBOSE_MODE);
653 if (database::isError($document_numerise_type_libelle)) {
654 die();
655 }
656
657 //Retourne le code du type de document
658 return $document_numerise_type_libelle;
659 }
660 // Fin des méthodes de récupération des métadonnées
661 // }}}
662
663 /**
664 * Génère le nom du fichier avec les information du formulaire
665 * @param string $date Date de création du document
666 * @param string $codeDoc Code du type de document
667 * @return string Nom du fichier
668 */
669 private function generateFilename($date, $codeDoc) {
670
671 //Change le format de la date
672 $date = date("Ymd", strtotime($date));
673 //Compose le nom du fichier date + code document + extension
674 $filename = $date.$codeDoc.'.pdf';
675
676 //Retourne le nom du fichier
677 return $filename;
678 }
679
680 /**
681 * Permet de recupérer le code du type de document par la clé primaire
682 * @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type
683 * @return string Code du type de document
684 */
685 private function get_document_numerise_type_code_by_id($document_numerise_type) {
686
687 //Requête sql
688 $sql = "SELECT code
689 FROM ".DB_PREFIXE."document_numerise_type
690 WHERE document_numerise_type = ".$document_numerise_type;
691 $document_numerise_type_code = $this->db->getOne($sql);
692 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
693 $this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
694 if (database::isError($document_numerise_type_code)) {
695 die();
696 }
697
698 //Retourne le code du type de document
699 return $document_numerise_type_code;
700 }
701
702 /**
703 * Permet de récupérer le libellé de la catégorie du type de document
704 * @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type
705 * @return string Libellé de la catégorie du type de document
706 */
707 private function get_document_numerise_type_categorie_libelle($document_numerise_type) {
708
709 // Requête sql
710 $sql = "SELECT document_numerise_type_categorie.libelle
711 FROM ".DB_PREFIXE."document_numerise_type
712 LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie
713 ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie
714 WHERE document_numerise_type.document_numerise_type = ".$document_numerise_type;
715 $document_numerise_type_categorie_libelle = $this->db->getOne($sql);
716 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
717 $this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
718 if (database::isError($document_numerise_type_categorie_libelle)) {
719 die();
720 }
721
722 //Retourne le code du type de document
723 return $document_numerise_type_categorie_libelle;
724 }
725
726
727 /**
728 * Cette méthode permet de stocker en attribut toutes les métadonnées
729 * nécessaire à l'ajout d'un document.
730 */
731 public function getSpecificMetadata() {
732
733 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
734 $sql = "SELECT dossier.dossier as dossier,
735 dossier_autorisation.dossier_autorisation as dossier_autorisation,
736 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
737 dossier_instruction_type.code as dossier_instruction_type,
738 etat_dossier_autorisation.libelle as statut,
739 dossier_autorisation_type.code as dossier_autorisation_type,
740 groupe.code as groupe_instruction
741 FROM ".DB_PREFIXE."dossier
742 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
743 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
744 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
745 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
746 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
747 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
748 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
749 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
750 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
751 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
752 LEFT JOIN ".DB_PREFIXE."groupe
753 ON dossier_autorisation_type.groupe = groupe.groupe
754 WHERE dossier.dossier = '".$this->valF["dossier"]."'";
755 $res = $this->db->query($sql);
756 $this->f->addToLog("getSpecificMetadata : db->query(".$sql.")", VERBOSE_MODE);
757 if ( database::isError($res)){
758 die();
759 }
760
761 //Le résultat est récupéré dans un objet
762 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
763
764 //Si il y a un résultat
765 if ($row !== null) {
766
767 //Génération du numéro de version
768 $sql = "SELECT
769 count(*)
770 FROM
771 ".DB_PREFIXE."dossier
772 LEFT JOIN
773 ".DB_PREFIXE."dossier_autorisation
774 ON
775 dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
776 LEFT JOIN
777 ".DB_PREFIXE."dossier_instruction_type
778 ON
779 dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
780 WHERE
781 dossier_autorisation.dossier_autorisation = '".$row->dossier_autorisation."'
782 AND
783 dossier_instruction_type.code = '".$row->dossier_instruction_type."'";
784 $row->version = $this->db->getOne($sql);
785 $this->f->addToLog("getInfosForFoldername(): db->getOne(\"".$sql."\")", VERBOSE_MODE);
786 if ( database::isError($row->version)){
787 $this->f->addToError("", $row->version, $row->version);
788 return false;
789 }
790
791 //Formatage du numéro de version
792 $row->version = str_pad($row->version, 2, "0", STR_PAD_LEFT);
793
794 //Alors on créé l'objet dossier_instruction
795 $this->specificMetadata = $row;
796
797 }
798 }
799
800 /**
801 * CONDITION - is_ajoutable.
802 *
803 * Condition pour pouvoir ajouter
804 *
805 * @return boolean
806 */
807 function is_ajoutable() {
808 // Test du bypass
809 if ($this->f->isAccredited("document_numerise_ajouter_bypass")) {
810 return true;
811 }
812 // Test des autres conditions
813 return $this->is_ajoutable_or_modifiable_or_supprimable();
814 }
815
816 /**
817 * CONDITION - is_modifiable.
818 *
819 * Condition pour afficher le bouton modifier
820 *
821 * @return boolean
822 */
823 function is_modifiable() {
824 // Test du bypass
825 if ($this->f->isAccredited("document_numerise_modifier_bypass")) {
826 return true;
827 }
828 // Test des autres conditions
829 return $this->is_ajoutable_or_modifiable_or_supprimable();
830 }
831
832 /**
833 * CONDITION - is_supprimable.
834 *
835 * Condition pour afficher le bouton supprimer
836 * @return boolean
837 */
838 function is_supprimable() {
839 // Test du bypass
840 if ($this->f->isAccredited("document_numerise_supprimer_bypass")) {
841 return true;
842 }
843 // Test des autres conditions
844 return $this->is_ajoutable_or_modifiable_or_supprimable();
845 }
846
847 /**
848 * Conditions pour afficher les boutons modifier et supprimer
849 *
850 * @return boolean
851 */
852 function is_ajoutable_or_modifiable_or_supprimable() {
853 //
854 $dossier = ($this->getParameter("maj")==0)?$this->getParameter("idxformulaire"):$this->getVal("dossier");
855 /**
856 * Tester si le dossier est cloturé , de la meme division, instructeur, admin (?)
857 */
858 if($this->f->isUserInstructeur()
859 && isset($this->f->om_utilisateur["division"])
860 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
861 return false;
862 }
863 //
864 if ( $this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture" ){
865 return false;
866 }
867 return true;
868 }
869
870 /**
871 * Retourne le statut du dossier d'instruction
872 * @param string $idx Identifiant du dossier d'instruction
873 * @return string Le statut du dossier d'instruction
874 */
875 function getStatutAutorisationDossier($idx){
876
877 $statut = '';
878
879 //Si l'identifiant du dossier d'instruction fourni est correct
880 if ( $idx != '' ){
881
882 //On récupère le statut de l'état du dossier d'instruction à partir de
883 //l'identifiant du dossier d'instruction
884 $sql = "SELECT etat.statut
885 FROM ".DB_PREFIXE."dossier
886 LEFT JOIN
887 ".DB_PREFIXE."etat
888 ON
889 dossier.etat = etat.etat
890 WHERE dossier ='".$idx."'";
891 $statut = $this->db->getOne($sql);
892 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
893 if ( database::isError($statut)){
894 die();
895 }
896 }
897 return $statut;
898 }
899
900 /**
901 * Cette variable permet de stocker le résultat de la méthode
902 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
903 * ces appels.
904 * @var string Code de la division du dossier en cours
905 */
906 var $_division_from_dossier = NULL;
907
908 /**
909 * Cette méthode permet de récupérer le code de division correspondant
910 * au dossier sur lequel on se trouve.
911 *
912 * @return string Code de la division du dossier en cours
913 */
914 function getDivisionFromDossier() {
915
916 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
917 // Pour éviter de refaire le traitement de recherche de la division
918 // alors on vérifie si nous ne l'avons pas déjà calculé.
919 if ($this->_division_from_dossier != NULL) {
920 // Logger
921 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
922 // On retourne la valeur déjà calculée
923 return $this->_division_from_dossier;
924 }
925
926 // Par défaut, on définit la valeur du dossier à NULL
927 $dossier = NULL;
928 // Test sur le mode et le contexte du formulaire
929 if ($this->getParameter("maj") == 0
930 && ($this->getParameter("retourformulaire") == "dossier"
931 || $this->getParameter("retourformulaire") == "dossier_instruction"
932 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_encours"
933 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_encours"
934 || $this->getParameter("retourformulaire") == "dossier_instruction_mes_clotures"
935 || $this->getParameter("retourformulaire") == "dossier_instruction_tous_clotures")) {
936 // Si on se trouve en mode AJOUT (seul mode où l'enregistrement
937 // n'existe pas en base de données) ET que nous nous trouvons
938 // dans le contexte d'un dossier d'instruction alors on récupère
939 // le numéro de dossier depuis le paramètre 'idxformulaire'
940 $dossier = $this->getParameter("idxformulaire");
941 } else {
942 // Sinon on récupère le numéro de dossier dans le champs dossier de
943 // l'enregistrement (en base de données)
944 $dossier = $this->getVal("dossier");
945 }
946
947 // On appelle la méthode de la classe utils qui renvoi le code de la
948 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
949 // prochain appel de cette méthode
950 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
951 // Logger
952 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
953 // On retourne la valeur retournée
954 return $this->_division_from_dossier;
955
956 }
957
958 function getLastInstructionArrete($dossier) {
959
960 // On récupère la dernière instruction dont l'événement est de type "arrete"
961 $sql = "SELECT max(instruction) FROM ".DB_PREFIXE."instruction
962 JOIN ".DB_PREFIXE."dossier ON instruction.dossier = dossier.dossier
963 LEFT JOIN ".DB_PREFIXE."evenement
964 ON instruction.evenement = evenement.evenement
965 WHERE dossier.dossier='".$dossier."' AND
966 evenement.type = 'arrete'";
967 $lastInstruction = $this->db->getOne($sql);
968 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
969 if ( database::isError($lastInstruction)){
970 die();
971 }
972
973 return $lastInstruction;
974 }
975
976 /**
977 * Récupère l'état d'un dossier d'instruction
978 * @param $idxDossier L'identifiant du dossier d'instruction
979 * @return L'état du dossier d'instruction
980 */
981 function getEtatDossier($idxDossier){
982
983 $etat = "";
984
985 $sql = "SELECT etat.etat
986 FROM ".DB_PREFIXE."etat
987 LEFT JOIN
988 ".DB_PREFIXE."dossier
989 ON
990 dossier.etat = etat.etat
991 WHERE dossier.dossier = '".$idxDossier."'";
992 $etat = $this->db->getOne($sql);
993 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
994 // Si une erreur survient on die
995 if (database::isError($etat, true)) {
996 // Appel de la methode de recuperation des erreurs
997 $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
998 }
999
1000 return $etat;
1001 }
1002
1003 }// fin classe
1004 ?>

Properties

Name Value
svn:keywords Id

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26