/[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 4156 - (show annotations)
Fri May 13 12:58:37 2016 UTC (8 years, 8 months ago) by nmeucci
File size: 57873 byte(s)
* Correction de la création des messages de dossier

1 <?php
2 /**
3 * DOCUMENT_NUMERISE
4 *
5 * @package openads
6 * @version SVN : $Id: document_numerise.class.php 5861 2016-02-03 15:54:48Z jymadier $
7 */
8
9 //
10 require_once "../gen/obj/document_numerise.class.php";
11
12 //
13 require_once "../services/outgoing/messageenqueuer.php";
14
15 /**
16 *
17 */
18 class document_numerise extends document_numerise_gen {
19
20 function __construct($id, &$dnu1 = null, $dnu2 = null) {
21 $this->constructeur($id);
22 }
23
24 /**
25 *
26 */
27 var $activate_class_action = true;
28
29 /**
30 * Définition des actions disponibles sur la classe.
31 *
32 * @return void
33 */
34 function init_class_actions() {
35
36 // On récupère les actions génériques définies dans la méthode
37 // d'initialisation de la classe parente
38 parent::init_class_actions();
39
40 // ACTION - 000 - ajouter
41 //
42 $this->class_actions[0]["condition"] = "is_ajoutable";
43
44 // ACTION - 001 - modifier
45 //
46 $this->class_actions[1]["condition"] = "is_modifiable";
47
48 // ACTION - 002 - supprimer
49 //
50 $this->class_actions[2]["condition"] = "is_supprimable";
51
52 // ACTION - 004 - view_tab
53 // Interface spécifique du tableau des pièces
54 $this->class_actions[4] = array(
55 "identifier" => "view_tab",
56 "view" => "view_tab",
57 "permission_suffix" => "tab",
58 );
59
60 // ACTION - 100 - Télécharger toutes les pièces numérisées
61 $this->class_actions[100] = array(
62 "identifier" => "archive_doc",
63 "view" => "generate_archive_doc",
64 "permission_suffix" => "tab",
65 );
66 }
67
68 /**
69 *
70 */
71 //Métadonnées spécifiques
72 var $metadata = array(
73 "uid" => array(
74 "dossier" => "getDossier",
75 "dossier_version" => "getDossierVersion",
76 "numDemandeAutor" => "getNumDemandeAutor",
77 "anneemoisDemandeAutor" => "getAnneemoisDemandeAutor",
78 "typeInstruction" => "getTypeInstruction",
79 "statutAutorisation" => "getStatutAutorisation",
80 "typeAutorisation" => "getTypeAutorisation",
81 "dateEvenementDocument" => "getDateEvenementDocument",
82 "filename" => "getFilename",
83 "groupeInstruction" => 'getGroupeInstruction',
84 "title" => 'getTitle',
85 ),
86 );
87
88 var $metadonneesArrete = array();
89
90 var $abstract_type = array(
91 "uid" => "file",
92 );
93
94 /**
95 * Instance de dossier_message
96 *
97 * @var null
98 */
99 var $inst_dossier_message = null;
100
101 /**
102 * Identifiant du message de notification à l'ajout d'une pièce numérisée.
103 *
104 * @var null
105 */
106 var $dossier_message_id = null;
107
108 /**
109 * VIEW - view_tab
110 *
111 * Cette vue permet d'afficher l'interface spécifique du tableau
112 * des pièces (liste et bouton d'ajout).
113 *
114 * @return void
115 */
116 function view_tab() {
117
118 // Vérification de l'accessibilité sur l'élément
119 $this->checkAccessibility();
120
121 /**
122 *
123 */
124 echo "\n\n";
125 echo "\n<!-- ########## START VIEW DOCUMENT_NUMERISE ########## -->\n";
126 echo "\n\n";
127
128 //
129 ($this->f->get_submitted_get_value('idxformulaire') !== null ? $idxformulaire = $this->f->get_submitted_get_value('idxformulaire') : $idxformulaire = "");
130 ($this->f->get_submitted_get_value('retourformulaire') !== null ? $retourformulaire = $this->f->get_submitted_get_value('retourformulaire') : $retourformulaire = "");
131
132 /**
133 * Récupération de l'identifiant du dossier
134 *
135 * En fonction du contexte dans lequel on se trouve, on récupère
136 * l'identifiant du dossier selon une méthode différente :
137 * - dans le contexte du DI, on récupère directement depuis les
138 * paramètres GET passsés à la vue (idxformulaire) l'id du DI
139 * - dans le contexte du DA, on récupère directement depuis les
140 * paramètres GET passsés à la vue (idxformulaire) l'id du DA
141 * - dans le contexte d'une consultation pour un service consulté
142 * (demande_avis), on récupère depuis les paramètres GET
143 * passsés à la vue (idxformulaire) l'id de la consultation puis
144 * on fait une requête pour récupérer l'id du DI
145 */
146
147 //
148 $contexte = "";
149 if ($retourformulaire == "dossier_autorisation") {
150 // Si on se trouve dans le contexte d'un dossier d'autorisation
151 $contexte = "dossier_autorisation";
152 $dossier_autorisation = $idxformulaire;
153 } elseif ($retourformulaire == 'dossier'
154 || $retourformulaire == 'dossier_instruction'
155 || $retourformulaire == 'dossier_instruction_mes_encours'
156 || $retourformulaire == 'dossier_instruction_tous_encours'
157 || $retourformulaire == 'dossier_instruction_mes_clotures'
158 || $retourformulaire == 'dossier_instruction_tous_clotures') {
159 // Si on se trouve dans le contexte d'un dossier d'instruction
160 $contexte = "dossier_instruction";
161 $dossier_instruction = $idxformulaire;
162 } elseif ($retourformulaire == "demande_avis"
163 || $retourformulaire == "demande_avis_encours"
164 || $retourformulaire == "demande_avis_passee") {
165 // Si on se trouve dans le contexte d'une demande d'avis
166 $contexte = "demande_avis";
167 $demande_avis = $idxformulaire;
168 // Récupération du dossier en fonction du numéro de consultation
169 $sql = "
170 SELECT
171 dossier
172 FROM
173 ".DB_PREFIXE."consultation
174 WHERE
175 consultation=".$demande_avis;
176 $dossier_instruction = $this->f->db->getone($sql);
177 $this->f->addToLog(__METHOD__."() : db->getone(\"".$sql."\");", VERBOSE_MODE);
178 $this->f->isDatabaseError($dossier_instruction);
179 }
180
181 /**
182 * Gestion des templates html
183 */
184 //
185 $template_view = '
186 <div class="formEntete ui-corner-all">
187 <!-- Action ajouter -->
188 %s
189 %s
190 <!-- Liste des pièces -->
191 %s
192 </div>
193 ';
194 // ACTION AJOUTER
195 $template_link_add = '
196 <p>
197 <a onclick="ajaxIt(\'document_numerise\', \'../scr/sousform.php?obj=document_numerise&action=0&tri=&objsf=document_numerise&premiersf=0&retourformulaire='.$retourformulaire.'&idxformulaire='.$idxformulaire.'&trisf=&retour=tab\');"
198 href="#">
199 <span class="om-icon om-icon-16 om-icon-fix add-16" title="Ajouter">Ajouter</span>
200 '._("Ajouter une pièce").'
201 </a>
202 </p>
203 ';
204 // ACTION TÉLÉCHARGER TOUTES LES PIÈCES
205 $template_link_download_zip = "
206 <p>
207 <a id='zip_download_link' onclick='zip_doc_numerise(%s, \"%s\");' href='#'>
208 <span class='om-icon om-icon-16 om-icon-fix archive-16'
209 title='"._("Télécharger toutes les pièces")."'>"._("Télécharger toutes les pièces")."</span>
210 "._("Télécharger toutes les pièces")."
211 </a>
212 </p>
213 ";
214 // TABLE - HEAD
215 // En-tête de tableau pour afficher la date et la catégorie des documents
216 $template_header = '
217 <thead>
218 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
219 <th class="title col-0 firstcol %s" colspan="%s">
220 <span class="name">
221 %s
222 </span>
223 </th>
224 </tr>
225 </thead>
226 ';
227 // TABLE - CELL content - NOM DU FICHIER
228 // Template de visualisation du nom du fichier avec accès au
229 // téléchargement de la pièce
230 $template_filename_download = '
231 <a class="lienTable lienDocumentNumerise"
232 href="../spg/file.php?obj=document_numerise&champ=uid&id=%s"
233 target="_blank"
234 id="document_numerise_%s">
235 <span class="om-prev-icon reqmo-16" title="'._("Télécharger").'">
236 %s
237 </span>
238 </a>
239 ';
240 // Template de visualisation du nom du fichier en lecture seule
241 // (Pas d'accès au téléchargement de la pièce)
242 $template_filename_readonly = '
243 <p class="lienDocumentNumerise" id="document_numerise_%2$s">%3$s';
244 // TABLE - CELL content - ICON
245 // Template de visualisation de l'icône de l'action Consulter
246 $template_icon_view_link = '
247 <a 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='.$idxformulaire.'&trisf=&retour=tab\');"
248 href="#">
249 <span class="om-icon om-icon-16 om-icon-fix consult-16" title="Consulter">
250 Consulter
251 </span>
252 </a>
253 ';
254 // TABLE - CELL content - DOSSIER ou TYPE DE DOCUMENT
255 //
256 $template_info_view_link = '
257 <a class="lienTable"
258 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='.$idxformulaire.'&trisf=&retour=tab\');"
259 href="#">
260 %s
261 </a>
262 ';
263 // TABLE - BODY - TR TD - STRUCTURE 3 colonnes
264 $template_line_3col = '
265 <tr class="tab-data %s">
266 <td class="icons">
267 %s
268 </td>
269 <td class="col-0 firstcol">
270 %s
271 </td>
272 <td class="col-1">
273 %s
274 </td>
275 </tr>
276 ';
277 // TABLE - BODY - TR TD - STRUCTURE 4 colonnes
278 $template_line_4col = '
279 <tr class="tab-data %s">
280 <td class="icons">
281 %s
282 </td>
283 <td class="col-0 firstcol">
284 %s
285 </td>
286 <td class="col-1">
287 %s
288 </td>
289 <td class="col-2">
290 %s
291 </td>
292 </tr>
293 ';
294
295 /**
296 * Récupération de la liste des pièces (document_numerise)
297 *
298 * En fonction du contexte dans lequel on se trouve la requête est
299 * différente.
300 */
301 //
302 $sql = "
303 SELECT
304 document_numerise.document_numerise as document_numerise,
305 document_numerise.date_creation as date_creation,
306 document_numerise_type_categorie.libelle as categorie,
307 document_numerise.nom_fichier as nom_fichier,
308 document_numerise_type.libelle as type_document,
309 document_numerise.uid as uid,
310 dossier.dossier as dossier
311 FROM
312 ".DB_PREFIXE."document_numerise
313 LEFT JOIN ".DB_PREFIXE."document_numerise_type
314 ON document_numerise.document_numerise_type = document_numerise_type.document_numerise_type
315 LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie
316 ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie
317 LEFT JOIN ".DB_PREFIXE."dossier
318 ON document_numerise.dossier = dossier.dossier
319 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
320 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
321 WHERE
322 ";
323 // Filtre sur le DI ou le DA en fonction du contexte
324 if ($contexte == "dossier_instruction"
325 || $contexte == "demande_avis") {
326 $sql .= "
327 document_numerise.dossier = '".$dossier_instruction."'
328 ";
329 } elseif ($contexte == "dossier_autorisation") {
330 $sql .= "
331 dossier_autorisation.dossier_autorisation = '".$dossier_autorisation."'
332 ";
333 }
334 // Filtre sur les types de documents lorsqu'on se trouve dans le
335 // contexte du dossier d'autoisation
336 //
337 if ($retourformulaire == 'dossier_autorisation') {
338 // On récupère dans la table paramètre la liste des types de documents
339 // qui sont affichables, si aucune liste n'est définie alors on affiche
340 // tous les documents
341 $da_listing_pieces_filtre = $this->f->getParameter("da_listing_pieces_filtre");
342 //
343 if ($da_listing_pieces_filtre !== null
344 && $da_listing_pieces_filtre !== "") {
345 //
346 $filtre_codes = explode(";", $da_listing_pieces_filtre);
347 //
348 $filtre = "";
349 foreach ($filtre_codes as $filtre_code) {
350 $filtre .= " document_numerise_type.code = '".$this->f->db->escapesimple(trim($filtre_code))."' OR ";
351 }
352 $filtre = substr($filtre, 0, count($filtre) - 4);
353 //
354 $sql .= sprintf(" AND (%s) ", $filtre);
355 }
356 }
357 // Le tri sur la requête
358 $sql .= "
359 ORDER BY
360 document_numerise.date_creation,
361 document_numerise.nom_fichier
362 ";
363 // Exécution de la requête
364 $res = $this->f->db->query($sql);
365 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
366 $this->f->isDatabaseError($res);
367
368 /**
369 * Gestion du lien vers l'ajout d'une nouvelle pièce
370 *
371 * Le lien d'ajout d'une nouvelle pièce est disponible uniquement dans
372 * le contexte du dossier d'instruction.
373 */
374 //
375 $ct_link_add = "";
376 //
377 if ($contexte == "dossier_instruction"
378 && $this->is_action_available(0)) {
379 // Affiche bouton ajouter
380 $ct_link_add = $template_link_add;
381 }
382
383 /**
384 * Gestion du lien vers le téléchargement de toutes les pièces dans une archive.
385 *
386 * Le lien est disponible dans l'onglet pièce du DA, du DI, des demandes d'avis
387 * en cours et passées.
388 */
389 //
390 $ct_link_download_zip = "";
391 if (($contexte == "dossier_instruction"
392 OR $contexte == "dossier_autorisation"
393 OR $contexte == "demande_avis")
394 AND ($this->f->isAccredited("document_numerise_tab")
395 OR $this->f->isAccredited("document_numerise"))) {
396 // Identifiant du DA ou DI à passer dans le lien de l'archive zip
397 if ($contexte == "dossier_autorisation") {
398 $dossier = $dossier_autorisation;
399 } else {
400 $dossier = $dossier_instruction;
401 }
402 // Affichage du bouton "Télécharger toutes les pièces" et passage des messages
403 // d'erreur à la fonction Javascript qui va afficher la fenêtre modale qui
404 // permet de télécharger l'archive zip.
405 if($res->numRows() > 0) {
406 $zip_messages = array(
407 "title" => _("Téléchargement de l'archive"),
408 "confirm_message" => _("Êtes vous sûr de vouloir télécharger l'intégralité des pièces du dossier ?"),
409 "confirm_button_ok" => _("Oui"),
410 "confirm_button_ko" => _("Non"),
411 "waiting_message" => _("Votre archive est en cours de préparation. Veuillez patienter."),
412 "download_message" => _("Votre archive est prête,"),
413 "download_link_message" => _("Cliquez ici pour la télécharger"),
414 "error_message" => _("L'archive n'a pas pu être créée. Veuillez contacter votre administrateur."),
415 );
416 $zip_messages_json = json_encode($zip_messages, JSON_HEX_APOS);
417 // Remplacement des messages en JSON dans le template
418 $ct_link_download_zip = sprintf(
419 $template_link_download_zip,
420 $zip_messages_json,
421 $dossier
422 );
423 }
424 }
425
426 /**
427 * Gestion du lien vers la fiche de visualisation de la pièce
428 *
429 * Le lien vers la fiche de visualisation d'une pièce est disponible
430 * uniquement dans le contexte du dossier d'instruction.
431 */
432 //
433 if ($contexte == "dossier_instruction"
434 && ($this->f->isAccredited("document_numerise_consulter")
435 || $this->f->isAccredited("document_numerise"))
436 ) {
437 //
438 $template_info_view = $template_info_view_link;
439 $template_icon_view = $template_icon_view_link;
440 } else {
441 //
442 $template_info_view = "";
443 $template_icon_view = "";
444 }
445
446 /**
447 * Gestion du lien de téléchargement de la pièce
448 */
449 //
450 if ($this->f->isAccredited("document_numerise_uid_telecharger")) {
451 //
452 $template_filename = $template_filename_download;
453 } else {
454 //
455 $template_filename = $template_filename_readonly;
456 }
457
458 /**
459 * Gestion de l'affichage
460 */
461 // Si on se trouve dans le contexte du dossier d'autorisation alors le
462 // tableau affiche une colonne supplémentaire pour afficher le numéro
463 // du dossier
464 if ($contexte == "dossier_autorisation") {
465 $nb_col = 4;
466 } else {
467 $nb_col = 3;
468 }
469 //
470 $ct_list_dn = "";
471 //
472 $i = 1;
473
474 //Résultat à $i - 1 pour tester la date et catégorie des documents
475 $lastRes = array();
476 $lastRes['date_creation'][0] = "";
477 $lastRes['categorie'][0] = "";
478
479 //Tant qu'il y a des résultats
480 while( $row = &$res->fetchRow(DB_FETCHMODE_ASSOC) ) {
481
482 $lastRes['date_creation'][$i] = $row['date_creation'];
483 $lastRes['categorie'][$i] = $row['categorie'];
484
485 //Si la date de création est différente de celle du résultat juste avant
486 if ($row['date_creation'] != $lastRes['date_creation'][$i-1]) {
487 //Si ce n'est pas le premier résultat on ferme la table
488 if($i != 1) {
489 $ct_list_dn .= "</table>";
490 }
491 //Affiche la table
492 $ct_list_dn .= "<table class='tab-tab document_numerise'>";
493 //Affiche le header de la date
494 $ct_list_dn .= sprintf(
495 $template_header,
496 'headerDate',
497 $nb_col,
498 $this->f->formatDate($row['date_creation'])
499 );
500 //Affiche le header de la catégorie
501 $ct_list_dn .= sprintf(
502 $template_header,
503 'headerCat',
504 $nb_col,
505 $row['categorie']
506 );
507 //Style des lignes
508 $style = 'odd';
509 }
510
511 //Si la date de création est identique à celle du résultat juste avant
512 //et la catégorie est différente de celle du résultat juste avant
513 if ($row['date_creation'] == $lastRes['date_creation'][$i-1] && $row['categorie'] != $lastRes['categorie'][$i-1]) {
514 //Affiche le header de la catégorie
515 $ct_list_dn .= sprintf(
516 $template_header,
517 'headerCat',
518 $nb_col,
519 $row['categorie']
520 );
521 //Style des lignes
522 $style = 'odd';
523 }
524
525 //Si toujours dans la catégorie on change le style de la ligne
526 if ($row['categorie'] == $lastRes['categorie'][$i-1] && $row['date_creation'] == $lastRes['date_creation'][$i-1]) {
527 $style = ($style=='even')?'odd':'even';
528 }
529
530 //
531 $style .= " col".$nb_col;
532
533 // Si on est dans la visualisation du DA, on affiche le numéro du dossier
534 // d'instruction auquel est rataché la pièce et le nom du fichier
535 if ($contexte === 'dossier_autorisation') {
536 //
537 $ct_list_dn .= sprintf(
538 $template_line_4col,
539 $style,
540 "",
541 $row['dossier'],
542 sprintf(
543 $template_filename,
544 $row['document_numerise'],
545 $row['document_numerise'],
546 $row['nom_fichier']
547 ),
548 $row['type_document']
549 );
550 } elseif ($contexte === "demande_avis") {
551 //
552 $ct_list_dn .= sprintf(
553 $template_line_3col,
554 $style,
555 "",
556 sprintf(
557 $template_filename,
558 $row['document_numerise'],
559 $row['document_numerise'],
560 $row['nom_fichier']
561 ),
562 $row['type_document']
563 );
564 } elseif ($contexte === 'dossier_instruction') {
565 //
566 $ct_list_dn .= sprintf(
567 $template_line_3col,
568 $style,
569 sprintf(
570 $template_icon_view,
571 $row['document_numerise']
572 ),
573 sprintf(
574 $template_filename,
575 $row['document_numerise'],
576 $row['document_numerise'],
577 $row['nom_fichier']
578 ),
579 sprintf(
580 $template_info_view,
581 $row['document_numerise'],
582 $row['type_document']
583 )
584 );
585 }
586
587 //
588 $i++;
589
590 }
591
592 //On ferme la table
593 $ct_list_dn .= "</table>";
594
595 //S'il n'y a pas de résultat on affiche "Aucun enregistrement"
596 if ($res->numrows() == 0) {
597 //
598 $ct_list_dn = "<p class='noData'>"._("Aucun enregistrement")."</p>";
599 }
600
601 /**
602 *
603 */
604 printf(
605 $template_view,
606 $ct_link_add,
607 $ct_link_download_zip,
608 $ct_list_dn
609 );
610
611 /**
612 *
613 */
614 echo "\n\n";
615 echo "\n<!-- ########## END VIEW DOCUMENT_NUMERISE ########## -->\n";
616 echo "\n\n";
617 }
618
619 function setType(&$form,$maj) {
620 parent::setType($form,$maj);
621
622 //type
623 $form->setType('document_numerise','hidden');
624 $form->setType('dossier','hidden');
625 $form->setType('nom_fichier','hidden');
626
627 if ($maj==0){ //ajout
628 $form->setType('nom_fichier','hidden');
629 if($this->retourformulaire == "") {
630 $form->setType('uid','upload');
631 } else {
632 $form->setType('uid','upload2');
633 }
634 }// fin ajout
635
636 if ($maj==1){ //modifier
637 $form->setType('nom_fichier','hiddenstatic');
638 if($this->retourformulaire == "") {
639 $form->setType('uid','upload');
640 } else {
641 $form->setType('uid','upload2');
642 }
643 }// fin modifier
644
645 if ($maj==2){ //supprimer
646 $form->setType('uid','filestatic');
647 $form->setType('date_creation','datestatic');
648 }// fin supprimer
649
650 if ($maj==3){ //consulter
651 $form->setType('uid','file');
652 }// fin consulter
653 }
654
655 function setValsousformulaire(&$form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,&$db,$DEBUG=null){
656 parent::setValsousformulaire($form,$maj,$validation,$idxformulaire,$retourformulaire,$typeformulaire,$db,$DEBUG);
657
658 $this->retourformulaire = $retourformulaire;
659
660 if($maj == 0 &&
661 ($retourformulaire =='dossier'
662 || $retourformulaire =='dossier_instruction'
663 || $retourformulaire=='dossier_instruction_tous_clotures'
664 || $retourformulaire=='dossier_instruction_mes_clotures'
665 || $retourformulaire=='dossier_instruction_tous_encours'
666 || $retourformulaire=='dossier_instruction_mes_encours')) {
667 $form->setVal('dossier', $idxformulaire);
668 $form->setVal('date_creation', date("d/m/Y"));
669 }
670
671 }// fin setValsousformulaire
672
673 /**
674 * [setLib description]
675 * @param [type] $form [description]
676 * @param [type] $maj [description]
677 */
678 function setLib(&$form, $maj) {
679 parent::setLib($form, $maj);
680
681 //
682 $form->setLib("uid", _("fichier"));
683 }
684
685
686 /**
687 * Méthode de traitement des données retournées par le formulaire
688 */
689 function setvalF($val) {
690 parent::setvalF($val);
691
692 //Si le type est renseigné
693 if ($val['document_numerise_type'] != "") {
694 //Recupère le code du type du document
695 $document_numerise_type = $this->get_document_numerise_type_code_by_id($val["document_numerise_type"]);
696
697 } else {
698 $document_numerise_type = "";
699 }
700
701 if ($val["date_creation"] == "") {
702 $this->valF["date_creation"] = "";
703 }
704
705 //Génération automatique nom du fichier
706 if ($val["nom_fichier"] == "" || $this->getParameter("maj") != 0) {
707 $this->valF['nom_fichier'] = $this->generateFilename($this->valF["date_creation"], $document_numerise_type);
708 }
709 }
710
711 /**
712 * Permet de mettre à jour un champs dans la table instruction sans passer par ses triggers
713 * @param string $document_numerise Identifiant du fichier
714 * @param integer $instruction L'identifiant de l'instruction à mettre à jour
715 */
716 private function updateInstructionAutoExecute($document_numerise, $instruction) {
717
718 // valeurs à mettre à jour
719 $val = array("document_numerise"=>$document_numerise);
720 // met à jour la table instruction sans passer par ses triggers
721 $res = $this->db->autoExecute(DB_PREFIXE."instruction", $val, DB_AUTOQUERY_UPDATE,"instruction=".$instruction);
722 // Exécution du traitement
723 $this->f->addToLog("updateInstructionDocumentArrete() : db->autoExecute(".$res.")", VERBOSE_MODE);
724 if (database::isError($res)) {
725 die();
726 }
727 }
728
729 /**
730 * Permet d’effectuer des actions après l’insertion des données dans la base
731 */
732 function triggerajouterapres($id,&$db,$val,$DEBUG) {
733
734 //Si l'option ERP est activée
735 if ($this->f->getParameter('option_erp') === 'true') {
736
737 //Envoi d'un message au référentiel ERP si on ajoute une piece sur
738 //un dossier de type AT
739 if ($this->f->getDATDCode($this->valF['dossier']) === 'AT') {
740 //On initialise la queue de message
741 $msgenque = new MessageEnqueuer();
742 //On initialise le dossier d'instruction
743 $msgenque->setDossierInstructionIdentifier($this->valF['dossier']);
744
745 //On récupère l'état du dossier d'instruction
746 $etat = $this->getEtatDossier($this->valF['dossier']);
747
748 //On calcule le type de pièce
749 $msgenque->setTypePiece(($etat==='incomplet')?_("complementaire"):_("supplementaire"));
750 $return = $msgenque->enqueueMessage($msgenque::$ERP_AJOUT_PIECE);
751 //Si une erreur s'est produite on arrête le traitement et on
752 //retourne une erreur
753 if ($return !== 0){
754
755 $this->addToMessage(_("Une erreur s'est produite lors de ".
756 "l'envoi du message au referentiel ERP. Merci de ".
757 "contacter votre administrateur"));
758 //On ne valide pas le formulaire
759 $this->addToMessage("<br/>"._("SAISIE NON ENREGISTREE")."<br/>");
760 $this->correct = false;
761 return false;
762 }
763 else {
764 $this->addToMessage(_("Le message a ete transmis au ".
765 "referentiel ERP."));
766 }
767 }
768 }
769
770 // Si l'option de notification par message est activée
771 if ($this->f->getParameter('option_notification_piece_numerisee') === 'true') {
772 // Instancie la classe dossier_message
773 $dossier_message = $this->get_inst_dossier_message(0);
774 // Ajoute le message de notification
775 $dossier_message_val = array();
776 $dossier_message_val['dossier'] = $val['dossier'];
777 $dossier_message_val['type'] = _('Ajout de pièce(s)');
778 $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
779 $dossier_message_val['login'] = $_SESSION['login'];
780 $dossier_message_val['date_emission'] = date('Y-m-d H:i:s');
781 $dossier_message_val['contenu'] = _('Une ou plusieurs pièces ont été ajoutées sur le dossier.');
782 $add = $dossier_message->add_notification_message($dossier_message_val);
783 // Si une erreur se produit pendant l'ajout
784 if ($add !== true) {
785 // Message d'erreur affiché à l'utilisateur
786 $this->addToMessage(_("Le message de notification n'a pas pu être ajouté."));
787 $this->correct = false;
788 return false;
789 }
790
791 // Récupère l'identifiant du message
792 if (isset($dossier_message->valF[$dossier_message->clePrimaire]) === true) {
793 $this->set_dossier_message_id($dossier_message->valF[$dossier_message->clePrimaire]);
794 }
795 }
796
797 //
798 return true;
799 }
800
801 /**
802 * Affecte une valeur à l'attribut de l'identifiant du message.
803 *
804 * @param integer $value Valeur à stocker dans l'attribut.
805 *
806 * @return void
807 */
808 private function set_dossier_message_id($value) {
809 //
810 $this->dossier_message_id = $value;
811 }
812
813
814 /**
815 * Retourne l'identifiant du message stocké dans l'attribut.
816 *
817 * @return integer
818 */
819 private function get_dossier_message_id() {
820 //
821 return $this->dossier_message_id;
822 }
823
824
825 /**
826 * Permet d’effectuer des actions avant la modification des données dans la base
827 */
828 function triggermodifier($id,&$db,$val,$DEBUG) {
829
830 // si le fichier n'a pas été déjà modifié
831 if (stripos($val['uid'], 'tmp') === false) {
832 // récupération du fichier et de ses métadonnées
833 $file = $this->f->storage->get($val['uid']);
834 // créé un fichier temporaire
835 $tmp_file = $this->f->storage->create_temporary($file['file_content'], $file['metadata'], "from_content");
836 // remplace le fichier par le temporaire pour obliger la modification du fichier
837 $this->valF['uid'] = 'tmp|'.$tmp_file;
838 }
839 }
840
841 /**
842 * Surcharge du bouton retour des sous-formulaire
843 */
844 function retoursousformulaire($idxformulaire, $retourformulaire, $val,
845 $objsf, $premiersf, $tricolsf, $validation,
846 $idx, $maj, $retour) {
847
848 if(($maj == 0 || $maj == 3 || $maj == 2) && ($retourformulaire === "dossier_instruction"
849 || $retourformulaire==='dossier_instruction_tous_clotures'
850 || $retourformulaire==='dossier_instruction_mes_clotures'
851 || $retourformulaire==='dossier_instruction_tous_encours'
852 || $retourformulaire==='dossier_instruction_mes_encours')) {
853
854 echo "\n<a class=\"retour\" ";
855 echo "href=\"#\" ";
856
857 echo "onclick=\"ajaxIt('".$objsf."', '";
858 echo "../scr/sousform.php?obj=document_numerise"
859 ."&idx=$idxformulaire"
860 ."&action=4"
861 ."&retourformulaire=$retourformulaire"
862 ."&idxformulaire=$idxformulaire"
863 ."&retour=form');\"";
864 echo "\" ";
865 echo ">";
866 //
867 echo _("Retour");
868 //
869 echo "</a>\n";
870
871 } else {
872 parent::retoursousformulaire($idxformulaire, $retourformulaire, $val,
873 $objsf, $premiersf, $tricolsf, $validation,
874 $idx, $maj, $retour);
875 }
876 }
877
878 /**
879 * Ajout des contraintes spécifiques pour l'ajout d'un fichier en retour de
880 * consultation
881 */
882 function setSelect(&$form, $maj,&$db,$debug) {
883 //parent::setSelect($form, $maj,$db,$debug);
884 // Inclusion du fichier de requêtes
885 if (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php")) {
886 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc.php";
887 } elseif (file_exists("../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc")) {
888 include "../sql/".OM_DB_PHPTYPE."/".$this->table.".form.inc";
889 }
890 // document_numerise_type
891 $this->init_select($form, $this->f->db, $maj, null, "document_numerise_type", $sql_document_numerise_type, $sql_document_numerise_type_by_id, false);
892
893 //Seulement dans le cas d'un dossier d'instruction
894 if($this->retourformulaire =='dossier_instruction'
895 || $this->retourformulaire=='dossier_instruction_tous_clotures'
896 || $this->retourformulaire=='dossier_instruction_mes_clotures'
897 || $this->retourformulaire=='dossier_instruction_tous_encours'
898 || $this->retourformulaire=='dossier_instruction_mes_encours') {
899
900 //Tableau des contraintes
901 $params = array(
902 "constraint" => array(
903 "extension" => ".pdf"
904 ),
905 );
906
907 $form->setSelect("uid", $params);
908 }
909 }
910
911 // {{{
912 // Méthodes de récupération des métadonnées document
913 /**
914 * Récupération du numéro de dossier d'instruction à ajouter aux métadonnées
915 * @return [type] [description]
916 */
917 protected function getDossier() {
918 if(empty($this->specificMetadata)) {
919 $this->getSpecificMetadata();
920 }
921 return $this->specificMetadata->dossier;
922 }
923 /**
924 * Récupération la version du dossier d'instruction à ajouter aux métadonnées
925 * @return int Version
926 */
927 protected function getDossierVersion() {
928 if(empty($this->specificMetadata)) {
929 $this->getSpecificMetadata();
930 }
931 return $this->specificMetadata->version;
932 }
933 /**
934 * Récupération du numéro de dossier d'autorisation à ajouter aux métadonnées
935 * @return [type] [description]
936 */
937 protected function getNumDemandeAutor() {
938 if(empty($this->specificMetadata)) {
939 $this->getSpecificMetadata();
940 }
941 return $this->specificMetadata->dossier_autorisation;
942 }
943 /**
944 * Récupération de la date de demande initiale du dossier à ajouter aux métadonnées
945 * @return [type] [description]
946 */
947 protected function getAnneemoisDemandeAutor() {
948 if(empty($this->specificMetadata)) {
949 $this->getSpecificMetadata();
950 }
951 return $this->specificMetadata->date_demande_initiale;
952 }
953 /**
954 * Récupération du type de dossier d'instruction à ajouter aux métadonnées
955 * @return [type] [description]
956 */
957 protected function getTypeInstruction() {
958 if(empty($this->specificMetadata)) {
959 $this->getSpecificMetadata();
960 }
961 return $this->specificMetadata->dossier_instruction_type;
962 }
963 /**
964 * Récupération du statut du dossier d'autorisation à ajouter aux métadonnées
965 * @return [type] [description]
966 */
967 protected function getStatutAutorisation() {
968 if(empty($this->specificMetadata)) {
969 $this->getSpecificMetadata();
970 }
971 return $this->specificMetadata->statut;
972 }
973 /**
974 * Récupération du type de dossier d'autorisation à ajouter aux métadonnées
975 * @return [type] [description]
976 */
977 protected function getTypeAutorisation() {
978 if(empty($this->specificMetadata)) {
979 $this->getSpecificMetadata();
980 }
981 return $this->specificMetadata->dossier_autorisation_type;
982 }
983 /**
984 * Récupération nom du fichier à ajouter aux métadonnées
985 * @return [type] [description]
986 */
987 protected function getFilename() {
988 return $this->valF["nom_fichier"];
989 }
990 /**
991 * Récupération de la date d'ajout de document à ajouter aux métadonnées
992 * @return [type] [description]
993 */
994 protected function getDateEvenementDocument() {
995 return date("Y-m-d", strtotime($this->valF["date_creation"]));
996 }
997 /**
998 * Récupération du groupe d'instruction à ajouter aux métadonnées
999 * @return string Groupe d'instruction
1000 */
1001 protected function getGroupeInstruction() {
1002 if(empty($this->specificMetadata)) {
1003 $this->getSpecificMetadata();
1004 }
1005 return $this->specificMetadata->groupe_instruction;
1006 }
1007 /**
1008 * Récupération du libellé du type du document à ajouter aux métadonnées
1009 * @return string Groupe d'instruction
1010 */
1011 protected function getTitle() {
1012 //Requête sql
1013 $sql = "SELECT libelle
1014 FROM ".DB_PREFIXE."document_numerise_type
1015 WHERE document_numerise_type = ".$this->valF["document_numerise_type"];
1016 $document_numerise_type_libelle = $this->db->getOne($sql);
1017 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
1018 $this->f->addToLog("getTitle() : db->getOne(".$sql.")", VERBOSE_MODE);
1019 if (database::isError($document_numerise_type_libelle)) {
1020 die();
1021 }
1022
1023 //Retourne le code du type de document
1024 return $document_numerise_type_libelle;
1025 }
1026 // Fin des méthodes de récupération des métadonnées
1027 // }}}
1028
1029 /**
1030 * Génère le nom du fichier avec les information du formulaire
1031 * @param string $date Date de création du document
1032 * @param string $codeDoc Code du type de document
1033 * @return string Nom du fichier
1034 */
1035 private function generateFilename($date, $codeDoc) {
1036
1037 //Change le format de la date
1038 $date = date("Ymd", strtotime($date));
1039 //Compose le nom du fichier date + code document + extension
1040 $filename = $date.$codeDoc.'.pdf';
1041
1042 //Retourne le nom du fichier
1043 return $filename;
1044 }
1045
1046
1047 /**
1048 * VIEW - generate_archive_doc
1049 * Permet de générer une archive zip contenant les documents passés en paramètre
1050 *
1051 * @param string $ids Identifiant des documents numérisés séparés par une virgule.
1052 *
1053 * @return uid du fichier zip ou false si erreur.
1054 */
1055 function generate_archive_doc() {
1056
1057 $return = array();
1058
1059 if($this->f->get_submitted_get_value('ids') === null
1060 || $this->f->get_submitted_get_value('dossier') === null) {
1061 $return['status'] = false;
1062 }
1063 $ids = $this->f->get_submitted_get_value('ids');
1064 // Identifiant du DI ou DA (selon contexte des pièces)
1065 $dossier = $this->f->get_submitted_get_value('dossier');
1066
1067 // Création du storage temporaire
1068 $temp = "0";
1069 $metadata = array(
1070 "filename" => time().".zip",
1071 "size" => 1,
1072 "mimetype" => "application/zip",
1073 );
1074
1075 // Création du fichier zip en filestorage temporary
1076 if($this->f->storage == null) {
1077 $return['status'] = false;
1078 }
1079 $temp_uid = $this->f->storage->create_temporary($temp, $metadata);
1080 if($temp_uid == OP_FAILURE) {
1081 $return['status'] = false;
1082 }
1083 // Récupération de son path pour ziparchive
1084 $temp_path = $this->f->storage->getPath_temporary($temp_uid);
1085 // Récupération des uid de documents
1086 $sql_uid = "SELECT uid FROM ".DB_PREFIXE."document_numerise WHERE document_numerise IN (".$ids.")";
1087 $res_uid = $this->f->db->query($sql_uid);
1088 if($this->f->isDatabaseError($res_uid, true) === true) {
1089 $return['status'] = false;
1090 }
1091 // Instanciation de l'archive
1092 $zip = new ZipArchive;
1093 $zip->open($temp_path, ZipArchive::OVERWRITE);
1094 // On rempli l'archive avec les documents récupérés sur le storage
1095 while($row = $res_uid->fetchRow(DB_FETCHMODE_ASSOC)) {
1096 $file = $this->f->storage->get($row['uid']);
1097 if($file == OP_FAILURE) {
1098 $return['status'] = false;
1099 }
1100 $zip->addFromString($file['metadata']['filename'], $file['file_content']);
1101 }
1102 $zip->close();
1103
1104 // Création d'un second temporary pour mettre à jour les métadonnées
1105 $size = filesize($temp_path);
1106 $id_doc = explode(',', $ids);
1107 $file_name = $dossier.'_'.date("Ymd");
1108 $metadata = array(
1109 "filename" => $file_name.".zip",
1110 "size" => $size,
1111 "mimetype" => "application/zip",
1112 );
1113 $uid = $this->f->storage->create_temporary($temp_path, $metadata, "from_path");
1114 // Suppression du temporaire
1115 $this->f->storage->delete_temporary($temp_uid);
1116 $return['status'] = true;
1117
1118 if($uid == OP_FAILURE) {
1119 $return['status'] = false;
1120 }
1121 $return['file'] = $uid;
1122 echo json_encode($return);
1123 }
1124
1125
1126 /**
1127 * Permet de recupérer le code du type de document par la clé primaire
1128 * @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type
1129 * @return string Code du type de document
1130 */
1131 private function get_document_numerise_type_code_by_id($document_numerise_type) {
1132
1133 //Requête sql
1134 $sql = "SELECT code
1135 FROM ".DB_PREFIXE."document_numerise_type
1136 WHERE document_numerise_type = ".$document_numerise_type;
1137 $document_numerise_type_code = $this->db->getOne($sql);
1138 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
1139 $this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
1140 if (database::isError($document_numerise_type_code)) {
1141 die();
1142 }
1143
1144 //Retourne le code du type de document
1145 return $document_numerise_type_code;
1146 }
1147
1148 /**
1149 * Permet de récupérer le libellé de la catégorie du type de document
1150 * @param int $document_numerise_type Clé primaire d'un donnée de document_numerise_type
1151 * @return string Libellé de la catégorie du type de document
1152 */
1153 private function get_document_numerise_type_categorie_libelle($document_numerise_type) {
1154
1155 // Requête sql
1156 $sql = "SELECT document_numerise_type_categorie.libelle
1157 FROM ".DB_PREFIXE."document_numerise_type
1158 LEFT JOIN ".DB_PREFIXE."document_numerise_type_categorie
1159 ON document_numerise_type.document_numerise_type_categorie = document_numerise_type_categorie.document_numerise_type_categorie
1160 WHERE document_numerise_type.document_numerise_type = ".$document_numerise_type;
1161 $document_numerise_type_categorie_libelle = $this->db->getOne($sql);
1162 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
1163 $this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
1164 if (database::isError($document_numerise_type_categorie_libelle)) {
1165 die();
1166 }
1167
1168 //Retourne le code du type de document
1169 return $document_numerise_type_categorie_libelle;
1170 }
1171
1172
1173 /**
1174 * Cette méthode permet de stocker en attribut toutes les métadonnées
1175 * nécessaire à l'ajout d'un document.
1176 */
1177 public function getSpecificMetadata() {
1178
1179 //Requête pour récupérer les informations essentiels sur le dossier d'instruction
1180 $sql = "SELECT dossier.dossier as dossier,
1181 dossier_autorisation.dossier_autorisation as dossier_autorisation,
1182 to_char(dossier.date_demande, 'YYYY/MM') as date_demande_initiale,
1183 dossier_instruction_type.code as dossier_instruction_type,
1184 etat_dossier_autorisation.libelle as statut,
1185 dossier_autorisation_type.code as dossier_autorisation_type,
1186 groupe.code as groupe_instruction
1187 FROM ".DB_PREFIXE."dossier
1188 LEFT JOIN ".DB_PREFIXE."dossier_instruction_type
1189 ON dossier.dossier_instruction_type = dossier_instruction_type.dossier_instruction_type
1190 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1191 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1192 LEFT JOIN ".DB_PREFIXE."etat_dossier_autorisation
1193 ON dossier_autorisation.etat_dossier_autorisation = etat_dossier_autorisation.etat_dossier_autorisation
1194 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1195 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1196 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1197 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
1198 LEFT JOIN ".DB_PREFIXE."groupe
1199 ON dossier_autorisation_type.groupe = groupe.groupe
1200 WHERE dossier.dossier = '".$this->valF["dossier"]."'";
1201 $res = $this->db->query($sql);
1202 $this->f->addToLog("getSpecificMetadata : db->query(".$sql.")", VERBOSE_MODE);
1203 if ( database::isError($res)){
1204 die();
1205 }
1206
1207 //Le résultat est récupéré dans un objet
1208 $row =& $res->fetchRow(DB_FETCHMODE_OBJECT);
1209
1210 //Si il y a un résultat
1211 if ($row !== null) {
1212
1213 // Instrance de la classe dossier
1214 $inst_dossier = $this->get_inst_dossier($this->valF["dossier"]);
1215
1216 // Insère l'attribut version à l'objet
1217 $row->version = $inst_dossier->get_dossier_instruction_version();
1218
1219 //Alors on créé l'objet dossier_instruction
1220 $this->specificMetadata = $row;
1221
1222 }
1223 }
1224
1225 /**
1226 * CONDITION - is_ajoutable.
1227 *
1228 * Condition pour pouvoir ajouter
1229 *
1230 * @return boolean
1231 */
1232 function is_ajoutable() {
1233 // Test du bypass
1234 if ($this->f->isAccredited("document_numerise_ajouter_bypass")) {
1235 return true;
1236 }
1237 // Test des autres conditions
1238 return $this->is_ajoutable_or_modifiable_or_supprimable($this->getParameter("idxformulaire"));
1239 }
1240
1241 /**
1242 * CONDITION - is_modifiable.
1243 *
1244 * Condition pour afficher le bouton modifier
1245 *
1246 * @return boolean
1247 */
1248 function is_modifiable() {
1249 // Test du bypass
1250 if ($this->f->isAccredited("document_numerise_modifier_bypass")) {
1251 return true;
1252 }
1253 // Test des autres conditions
1254 return $this->is_ajoutable_or_modifiable_or_supprimable();
1255 }
1256
1257 /**
1258 * CONDITION - is_supprimable.
1259 *
1260 * Condition pour afficher le bouton supprimer
1261 * @return boolean
1262 */
1263 function is_supprimable() {
1264 // Test du bypass
1265 if ($this->f->isAccredited("document_numerise_supprimer_bypass")) {
1266 return true;
1267 }
1268 // Test des autres conditions
1269 return $this->is_ajoutable_or_modifiable_or_supprimable();
1270 }
1271
1272 /**
1273 * Conditions pour afficher les boutons modifier et supprimer
1274 *
1275 * @return boolean
1276 */
1277 function is_ajoutable_or_modifiable_or_supprimable($dossier = null) {
1278 // Instance du dossier
1279 $inst_dossier = $this->get_inst_dossier($dossier);
1280 // On récupère la clé primaire du dossier
1281 $dossier = $inst_dossier->getVal($inst_dossier->clePrimaire);
1282 /**
1283 * Tester si le dossier est cloturé , de la meme division, instructeur, admin (?)
1284 */
1285 if($this->f->isUserInstructeur()
1286 && isset($this->f->om_utilisateur["division"])
1287 && $this->f->om_utilisateur["division"] != $this->getDivisionFromDossier()){
1288 return false;
1289 }
1290 //
1291 if ( $this->f->isUserInstructeur() && $this->f->getStatutDossier($dossier) == "cloture" ){
1292 return false;
1293 }
1294 return true;
1295 }
1296
1297 /**
1298 * Retourne le statut du dossier d'instruction
1299 * @param string $idx Identifiant du dossier d'instruction
1300 * @return string Le statut du dossier d'instruction
1301 */
1302 function getStatutAutorisationDossier($idx){
1303
1304 $statut = '';
1305
1306 //Si l'identifiant du dossier d'instruction fourni est correct
1307 if ( $idx != '' ){
1308
1309 //On récupère le statut de l'état du dossier d'instruction à partir de
1310 //l'identifiant du dossier d'instruction
1311 $sql = "SELECT etat.statut
1312 FROM ".DB_PREFIXE."dossier
1313 LEFT JOIN
1314 ".DB_PREFIXE."etat
1315 ON
1316 dossier.etat = etat.etat
1317 WHERE dossier ='".$idx."'";
1318 $statut = $this->db->getOne($sql);
1319 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
1320 if ( database::isError($statut)){
1321 die();
1322 }
1323 }
1324 return $statut;
1325 }
1326
1327 /**
1328 * Cette variable permet de stocker le résultat de la méthode
1329 * getDivisionFromDossier() afin de ne pas effectuer le recalcul à chacun de
1330 * ces appels.
1331 * @var string Code de la division du dossier en cours
1332 */
1333 var $_division_from_dossier = NULL;
1334
1335 /**
1336 * Cette méthode permet de récupérer le code de division correspondant
1337 * au dossier sur lequel on se trouve.
1338 *
1339 * @return string Code de la division du dossier en cours
1340 */
1341 function getDivisionFromDossier() {
1342
1343 // Cette méthode peut être appelée plusieurs fois lors d'une requête.
1344 // Pour éviter de refaire le traitement de recherche de la division
1345 // alors on vérifie si nous ne l'avons pas déjà calculé.
1346 if ($this->_division_from_dossier != NULL) {
1347 // Logger
1348 $this->addToLog("getDivisionFromDossier(): retour de la valeur déjà calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
1349 // On retourne la valeur déjà calculée
1350 return $this->_division_from_dossier;
1351 }
1352
1353 // Instance du dossier
1354 $inst_dossier = $this->get_inst_dossier();
1355 // On récupère la clé primaire du dossier
1356 $dossier = $inst_dossier->getVal($inst_dossier->clePrimaire);
1357
1358 // On appelle la méthode de la classe utils qui renvoi le code de la
1359 // division d'un dossier, on la stocke pour ne pas refaire le calcul au
1360 // prochain appel de cette méthode
1361 $this->_division_from_dossier = $this->f->getDivisionFromDossier($dossier);
1362 // Logger
1363 $this->addToLog("getDivisionFromDossier(): retour de la valeur nouvellement calculée - '".$this->_division_from_dossier."'", EXTRA_VERBOSE_MODE);
1364 // On retourne la valeur retournée
1365 return $this->_division_from_dossier;
1366
1367 }
1368
1369 function getLastInstructionArrete($dossier) {
1370
1371 // On récupère la dernière instruction dont l'événement est de type "arrete"
1372 $sql = "SELECT max(instruction) FROM ".DB_PREFIXE."instruction
1373 JOIN ".DB_PREFIXE."dossier ON instruction.dossier = dossier.dossier
1374 LEFT JOIN ".DB_PREFIXE."evenement
1375 ON instruction.evenement = evenement.evenement
1376 WHERE dossier.dossier='".$dossier."' AND
1377 evenement.type = 'arrete'";
1378 $lastInstruction = $this->db->getOne($sql);
1379 $this->f->addToLog("getStatutAutorisationDossier() : db->getOne(\"".$sql."\")", VERBOSE_MODE);
1380 if ( database::isError($lastInstruction)){
1381 die();
1382 }
1383
1384 return $lastInstruction;
1385 }
1386
1387 /**
1388 * Récupère l'état d'un dossier d'instruction
1389 * @param $idxDossier L'identifiant du dossier d'instruction
1390 * @return L'état du dossier d'instruction
1391 */
1392 function getEtatDossier($idxDossier){
1393
1394 $etat = "";
1395
1396 $sql = "SELECT etat.etat
1397 FROM ".DB_PREFIXE."etat
1398 LEFT JOIN
1399 ".DB_PREFIXE."dossier
1400 ON
1401 dossier.etat = etat.etat
1402 WHERE dossier.dossier = '".$idxDossier."'";
1403 $etat = $this->db->getOne($sql);
1404 $this->addToLog("getEtatDossier(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
1405 // Si une erreur survient on die
1406 if (database::isError($etat, true)) {
1407 // Appel de la methode de recuperation des erreurs
1408 $this->erreur_db($etat->getDebugInfo(), $etat->getMessage(), 'document_numerise');
1409 }
1410
1411 return $etat;
1412 }
1413
1414 /**
1415 * Instance du dossier d'instruction
1416 *
1417 * @var null
1418 */
1419 var $inst_dossier = null;
1420
1421 /**
1422 * Récupère l'instance du dossier d'instruction
1423 *
1424 * @param string $dossier Identifiant du dossier d'instruction
1425 *
1426 * @return object
1427 */
1428 function get_inst_dossier($dossier = null) {
1429 // Si le dossier courant a été instancié
1430 if ($this->inst_dossier != null) {
1431 return $this->inst_dossier;
1432 }
1433 if (is_null($this->inst_dossier)) {
1434 // Si le dossier n'a pas été passé en paramètre
1435 if (is_null($dossier)) {
1436 $retourformulaire = $this->getParameter("retourformulaire");
1437 // Si la valeur n'est pas récupÚrée
1438 if ($dossier == null) {
1439 // Vérifie les autres contextes
1440 if (in_array($retourformulaire, $this->foreign_keys_extended['dossier'])) {
1441 //
1442 $dossier = $this->getVal('dossier');
1443
1444 } elseif (in_array($retourformulaire, $this->foreign_keys_extended['demande_avis'])) {
1445 //
1446 $demande_avis = $this->get_inst_demande_avis();
1447 //
1448 $dossier = $demande_avis->getVal('dossier');
1449 }
1450 }
1451 }
1452 // Instancie le dossier
1453 require_once "../obj/dossier.class.php";
1454 $this->inst_dossier = new dossier($dossier, $this->f->db, 0);
1455 }
1456 //
1457 return $this->inst_dossier;
1458 }
1459
1460 /**
1461 * Instance de la demande d'avis
1462 *
1463 * @var null
1464 */
1465 var $inst_demande_avis = null;
1466
1467 /**
1468 * Récupère l'instance de la demande d'avis
1469 *
1470 * @param integer $demande_avis Identifiant de la demande d'avis
1471 *
1472 * @return object
1473 */
1474 function get_inst_demande_avis($demande_avis = null) {
1475 //
1476 if (is_null($this->inst_demande_avis)) {
1477 //
1478 if (is_null($demande_avis)) {
1479 // Récupère l'identifiant du formulaire parent
1480 $demande_avis = $this->getParameter("idxformulaire");
1481 }
1482 // Instancie la demande d'avis
1483 require_once "../obj/demande_avis.class.php";
1484 $this->inst_demande_avis = new demande_avis($demande_avis, $this->f->db, 0);
1485 }
1486 //
1487 return $this->inst_demande_avis;
1488 }
1489
1490
1491 /**
1492 * Permet de recupérer l'identifiant du dossier d'instruction.
1493 *
1494 * @param integer $document_numerise Clé primaire de document_numerise.
1495 *
1496 * @return string dossier
1497 */
1498 private function get_libelle_dossier($document_numerise) {
1499
1500 //Requête sql
1501 $sql = "SELECT dossier
1502 FROM ".DB_PREFIXE."document_numerise
1503 WHERE document_numerise = ".$document_numerise;
1504 $dossier = $this->db->getOne($sql);
1505 $this->addToLog("db->getone(\"".$sql."\");", VERBOSE_MODE);
1506 $this->f->addToLog("obj/document_numerise.class.php : db->getOne(".$sql.")", VERBOSE_MODE);
1507 if($this->f->isDatabaseError($dossier, true) === true) {
1508 return false;
1509 }
1510
1511 //Retourne le code du dossier
1512 return $dossier;
1513 }
1514
1515
1516 /**
1517 * Récupère l'instance de dossier message.
1518 *
1519 * @param string $dossier_message Identifiant du message.
1520 *
1521 * @return object
1522 */
1523 private function get_inst_dossier_message($dossier_message = null) {
1524 //
1525 return $this->get_inst_common("dossier_message", $dossier_message);
1526 }
1527
1528
1529 /**
1530 * Ajout d'un contenu spécifique à la fin du sous-formulaire.
1531 *
1532 * @param integer $maj État du formulaire.
1533 *
1534 * @return void
1535 */
1536 public function sousFormSpecificContent($maj) {
1537 // Si l'option de notification par message de l'ajout d'une pièce
1538 // numérisée est activée
1539 if ($this->f->getParameter('option_notification_piece_numerisee') === 'true') {
1540 //
1541 echo "<input id=\"dossier_message_id\" name=\"dossier_message_id\" type=\"hidden\" value=\"".$this->get_dossier_message_id()."\" />";
1542 }
1543 }
1544
1545
1546 }// fin classe
1547 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26