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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4156 - (hide 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 mbroquet 3730 <?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 jymadier 3880
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 mbroquet 3730 }
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 fmichon 4138 * 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 mbroquet 3730 * 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 jymadier 3880 %s
190 mbroquet 3730 <!-- 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 jymadier 3880 '._("Ajouter une pièce").'
201 mbroquet 3730 </a>
202     </p>
203     ';
204 jymadier 3880 // ACTION TÉLÉCHARGER TOUTES LES PIÈCES
205     $template_link_download_zip = "
206     <p>
207 softime 3925 <a id='zip_download_link' onclick='zip_doc_numerise(%s, \"%s\");' href='#'>
208 jymadier 3880 <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 mbroquet 3730 // 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 jymadier 3880 <a class="lienTable lienDocumentNumerise"
232 mbroquet 3730 href="../spg/file.php?obj=document_numerise&champ=uid&id=%s"
233 jymadier 3880 target="_blank"
234     id="document_numerise_%s">
235 mbroquet 3730 <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 jymadier 3880 $template_filename_readonly = '
243     <p class="lienDocumentNumerise" id="document_numerise_%2$s">%3$s';
244 mbroquet 3730 // 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 jymadier 3880 * 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 softime 3925 // 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 jymadier 3880 // 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 softime 3886 "error_message" => _("L'archive n'a pas pu être créée. Veuillez contacter votre administrateur."),
415 jymadier 3880 );
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 softime 3925 $zip_messages_json,
421     $dossier
422 jymadier 3880 );
423     }
424     }
425    
426     /**
427 mbroquet 3730 * 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 jymadier 3880 $row['document_numerise'],
545     $row['document_numerise'],
546 mbroquet 3730 $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 jymadier 3880 $row['document_numerise'],
560 mbroquet 3730 $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 jymadier 3880 $row['document_numerise'],
576     $row['document_numerise'],
577 mbroquet 3730 $row['nom_fichier']
578     ),
579     sprintf(
580     $template_info_view,
581 jymadier 3880 $row['document_numerise'],
582 mbroquet 3730 $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 jymadier 3880 $ct_link_download_zip,
608 mbroquet 3730 $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 fmichon 4138
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 nmeucci 4156 $dossier_message_val['emetteur'] = $this->f->get_connected_user_login_name();
779     $dossier_message_val['login'] = $_SESSION['login'];
780 fmichon 4138 $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 mbroquet 3730 }
800    
801 nmeucci 4145 /**
802 fmichon 4138 * 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 mbroquet 3730 * 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 jymadier 3880
1047 mbroquet 3730 /**
1048 jymadier 3880 * 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 nmeucci 3951 if($this->f->get_submitted_get_value('ids') === null
1060     || $this->f->get_submitted_get_value('dossier') === null) {
1061 jymadier 3880 $return['status'] = false;
1062     }
1063 nmeucci 3951 $ids = $this->f->get_submitted_get_value('ids');
1064 softime 3925 // Identifiant du DI ou DA (selon contexte des pièces)
1065 nmeucci 3951 $dossier = $this->f->get_submitted_get_value('dossier');
1066 softime 3925
1067 jymadier 3880 // 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 softime 3925 $file_name = $dossier.'_'.date("Ymd");
1108 jymadier 3880 $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 mbroquet 3730 * 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 fmichon 3892 // 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 mbroquet 3730 //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 jymadier 3880
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 fmichon 4138 /**
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 mbroquet 3730 }// fin classe
1547     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26