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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11057 - (hide annotations)
Thu Dec 23 15:34:03 2021 UTC (3 years ago) by softime
File size: 337924 byte(s)
* Fusion de la branche d'intégration 5.5.0-develop dans le trunk

1 mbroquet 3730 <?php
2     /**
3     * OM_WIDGET - Surcharge du core
4     *
5     * L'objectif de la surcharge est de coder les vues spécifiques des widgets
6     * de type 'file'.
7     *
8     * @package openads
9     * @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $
10     */
11    
12 softime 7996 require_once PATH_OPENMAIRIE."obj/om_widget.class.php";
13 mbroquet 3730
14     class om_widget extends om_widget_core {
15    
16 fmichon 4479 /**
17 jymadier 4132 *
18     */
19     var $template_help = '<div class="widget-help"><span class="info-16" title="%s"></span></div>';
20    
21     /**
22     *
23     */
24     var $template_footer = '
25     <div class="widget-footer">
26     <a href="%s">
27     %s
28     </a>
29     </div>
30     ';
31    
32     /**
33 fmichon 3799 * Cette méthode retourne un arbre html représentant un raccourci.
34     *
35     * Un raccourci est composé d'un lien, d'une image et d'une description.
36     * Voir les widgets :
37     * - widget_nouvelle_demande_autre_dossier
38     * - widget_nouvelle_demande_dossier_encours
39     * - widget_nouvelle_demande_nouveau_dossier
40     */
41     function get_display_widget_shortlink($config) {
42     return sprintf (
43     '<a href="%s"><span><img src="%s" align="left" alt="%s" />%s</span></a>',
44     $config["a_href"],
45     $config["img_src"],
46     $config["img_alt"],
47     $config["a_content"]
48     );
49     }
50    
51     /**
52     * WIDGET DASHBOARD - widget_nouvelle_demande_autre_dossier.
53     */
54     function view_widget_nouvelle_demande_autre_dossier($content = null) {
55     echo $this->get_display_widget_shortlink(array(
56 softime 7996 "a_href" => OM_ROUTE_TAB."&obj=demande_autre_dossier",
57 fmichon 3799 "img_src" => "../app/img/dossier-existant.png",
58     "img_alt" => _("Autres dossiers"),
59     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours ou une autorisation existante"),
60     ));
61     }
62    
63     /**
64     * WIDGET DASHBOARD - widget_nouvelle_demande_dossier_encours.
65     */
66     function view_widget_nouvelle_demande_dossier_encours($content = null) {
67     echo $this->get_display_widget_shortlink(array(
68 softime 7996 "a_href" => OM_ROUTE_TAB."&obj=demande_dossier_encours",
69 fmichon 3799 "img_src" => "../app/img/dossier-existant.png",
70     "img_alt" => _("Dossier en cours"),
71     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours"),
72     ));
73     }
74    
75     /**
76     * WIDGET DASHBOARD - widget_nouvelle_demande_nouveau_dossier.
77     */
78     function view_widget_nouvelle_demande_nouveau_dossier($content = null) {
79 softime 6565 $params = array("contexte");
80     // Formatage des arguments reçus en paramètres
81     $arguments = $this->get_arguments($content, $params);
82     $arguments_default = array(
83     "contexte" => "standard"
84     );
85     // Vérification des arguments
86     foreach ($arguments_default as $key => $value) {
87     //
88     if (isset($arguments[$key])) {
89     //
90     $elem = trim($arguments[$key]);
91     //
92     if ($key === "contexte"
93     && in_array($elem, array("standard", "contentieux"))) {
94     // La valeur doit être dans cette liste
95     $arguments[$key] = $elem;
96     continue;
97     }
98     }
99     //
100     $arguments[$key] = $value;
101     }
102     $contexte = $arguments["contexte"];
103     $widget_config = array(
104 softime 7996 "a_href" => OM_ROUTE_FORM."&obj=demande_nouveau_dossier&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
105 fmichon 3799 "img_src" => "../app/img/dossier-nouveau.png",
106     "img_alt" => _("Nouveau dossier"),
107     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant le depot d'un nouveau dossier"),
108 softime 6565 );
109     if ($contexte == "contentieux") {
110 softime 7996 $widget_config["a_href"] = OM_ROUTE_FORM."&obj=demande_nouveau_dossier_contentieux&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=";
111 softime 6565 }
112     echo $this->get_display_widget_shortlink($widget_config);
113 fmichon 3799 }
114    
115     /**
116 mbroquet 3730 * WIDGET DASHBOARD - widget_recherche_dossier.
117     *
118     * Quatre cas d'utilisation :
119     * - 1 - La valeur recherchée correspond exactement au code d'un DI,
120     * alors on accède directement à la fiche de visualisation du DI.
121     * - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au
122     * listing des dossiers d'instruction avec le formulaire de
123     * recherche avancée pré-rempli avec la valeur saisie.
124     * - 3 - La valeur recherchée renvoi aucun enregistrement, alors on
125     * affiche un message en ce sens directement dans le widget.
126     * - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce
127     * sens directement dans le widget.
128     *
129     * @return void
130     */
131     function view_widget_recherche_dossier($content = null) {
132    
133     /**
134     * Traitement de la validation du formulaire
135     */
136     //
137     if ($this->f->get_submitted_post_value("validation") != null
138 softime 6565 && $this->f->get_submitted_post_value("dossier") === '') {
139 mbroquet 3730
140     //
141 softime 6565 // AUCUNE VALEUR SAISIE
142 mbroquet 3730 //
143    
144 softime 6565 // Cas d'utilisation n°4
145     // Affiche un message d'erreur
146     $erreur = _("Veuillez saisir un No de dossier.");
147     }
148     //
149     if ($this->f->get_submitted_post_value("validation") != null
150     && $this->f->get_submitted_post_value("dossier") !== null
151     && $this->f->get_submitted_post_value("dossier") !== '') {
152     //
153     $list_dossiers = $this->execute_recherche_dossier();
154 mbroquet 3730
155 softime 6565 $total_dossiers = count($list_dossiers);
156 mbroquet 3730 // Si on obtient un seul résultat
157     if ($total_dossiers == 1) {
158     // On reformate le dossier
159 softime 10573 $dossier = str_replace(' ', '', $list_dossiers[0]);
160 mbroquet 3730 // On redirige vers le listing des DI
161     echo '
162     <script type="text/javascript" >
163 softime 6565 widget_recherche_dossier(\''.$dossier.'\', 1, \'dossier_instruction\');
164 mbroquet 3730 </script>
165     ';
166     // On arrête l'exécution du script car l'utilisateur a été
167     // redirigé vers un autre script
168     exit();
169     }
170     // Si on obtient plusieurs résultats
171     if ($total_dossiers > 1) {
172 softime 6565 // Mémorisation de la recherche
173     $search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier"));
174     // Ajout d'une étoile au début s'il n'y en n'a pas.
175     // Par defaut * est toujours ajouté à la fin des recherches.
176     if (substr($search, 0, 1) != '*') {
177     $search = '*'.$search;
178     }
179 mbroquet 3730 // On redirige vers le listing des DI
180 softime 6565 //
181 mbroquet 3730 echo '
182     <script type="text/javascript" >
183 softime 6565 widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.', \'dossier_instruction\');
184 mbroquet 3730 </script>
185     ';
186     // On arrête l'exécution du script car l'utilisateur a été
187     // redirigé vers un autre script
188     exit();
189     }
190     // Cas d'utilisation n°3
191     // Si aucun dossier trouve
192     // Affiche un message d'erreur
193 softime 6565 $erreur = _("Aucun dossier trouvé.");
194     }
195 mbroquet 3730
196 softime 6565 /**
197     * Affichage du widget
198     */
199     // Affichage du message d'informations
200     printf(
201     '<div class="widget-help"><span class="info-16" title="%s"></span></div>',
202     _("Permet la recherche directe de dossiers d'instruction.\n\n".
203     "Deux modes de saisie sont possibles :\n".
204     "- Code de dossier intégral 'PC0130551300027P0' ou 'PC 013055 13 00027P0' pour un accès direct à la fiche de visualisation du dossier d'instruction,\n".
205     "- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.")
206     );
207     // Ouverture du form
208 softime 7996 echo "\t<form method=\"post\" id=\"widget_recherche_dossier_form\" action=\"".OM_ROUTE_DASHBOARD."\">\n";
209 softime 6565 // Affichage d'un éventuel message d'erreur
210     if (isset($erreur) && $erreur != "") {
211     $class = "error";
212     $this->f->displayMessage($class, $erreur);
213     }
214     // Configuration du formulaire de recherche
215     $champs = array("dossier");
216 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
217     "validation" => 0,
218     "maj" => 0,
219     "champs" => $champs,
220     ));
221 softime 6565 $form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>');
222     $form->setType("dossier", "text");
223     $form->setTaille("dossier", 20);
224     $form->setMax("dossier", 250);
225     // Affichage du formulaire
226     $form->entete();
227     $form->afficher($champs, 0, false, false);
228     $form->enpied();
229     // Affichage des contrôles du formulaire
230     echo "\t<div class=\"formControls\">\n";
231     echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
232     value=\""._("Valider")."\" name=\"validation\" />\n";
233     echo "\t</div>\n";
234     // Fermeture du form
235     echo "\t</form>\n";
236     }
237    
238 softime 10869 /**
239     * WIDGET DASHBOARD - widget_recherche_parametrable.
240     *
241     * Le widget permet de lister les dossiers en fonction de l'état,
242     * du filtre instructeur ou division et d'avoir un message d'aide personnalisé
243     */
244     function view_widget_recherche_parametrable($content=null) {
245     $params = array('etat', 'filtre', 'tri', 'affichage', 'source_depot', 'message_help');
246     $arguments = $this->get_arguments($content, $params);
247     $conf = $this->get_config_recherche_dossier_parametrable($arguments);
248 softime 6565
249 softime 10869 $sql = sprintf(
250     "SELECT
251     %s
252     FROM
253     %s
254     %s
255     %s
256     %s
257     %s",
258     $conf["query_ct_select"],
259     $conf["query_ct_from"],
260     trim($conf["query_ct_where"]) !== '' ? "WHERE" : '',
261     $conf["query_ct_where"],
262     $conf["query_ct_orderby"],
263     $conf["query_ct_limit"]
264     );
265    
266     $search = array(
267     "valide" => "false",
268     "advanced-search-submit" => "",
269     );
270    
271     // Ajout des arguments pour la recherche avancée
272     foreach ($conf['arguments'] as $key => $argument) {
273     $search[$key] = $argument;
274     }
275    
276     // Récupération de l'identifiant de l'instructeur pour la recherche avancée
277     if ($conf['arguments']['filtre'] == 'instructeur') {
278     $select_instructeur = sprintf(
279     "SELECT
280     dossier.instructeur
281     FROM
282     %s",
283     $conf["query_ct_from"]
284     );
285    
286     // Execution de la requête
287     $id_instructeur = $this->f->db->getone($select_instructeur);
288     $this->addToLog(__METHOD__."(): db->getone(\"".$select_instructeur."\");", VERBOSE_MODE);
289     $this->f->isDatabaseError($id_instructeur);
290    
291     $search['instructeur'] = $id_instructeur;
292     }
293    
294     // Récupération de l'identifiant de la division pour la recherche avancée
295     if ($conf['arguments']['filtre'] == 'division') {
296     $select_division = sprintf(
297     "SELECT
298     division.division
299     FROM
300     %s",
301     $conf["query_ct_from"]
302     );
303    
304     // Execution de la requête
305     $id_division = $this->f->db->getone($select_division);
306     $this->addToLog(__METHOD__."(): db->getone(\"".$select_division."\");", VERBOSE_MODE);
307     $this->f->isDatabaseError($id_division);
308    
309     $search['division'] = $id_division;
310     }
311    
312     // Récupération de la collectivité pour la recherche avancée
313     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
314     $search['om_collectivite'] = $_SESSION['collectivite'];
315     }
316    
317     // Génération de l'advs_id
318     $advs_id = str_replace(array('.',','), '', microtime(true));
319     $search["advanced-search-submit"] = "";
320     $_SESSION["advs_ids"][$advs_id] = serialize($search);
321    
322     // Affichage du message d'informations
323     printf(
324     $this->template_help,
325     $conf["message_help"]
326     );
327    
328     // Affichage du widget avec une bulle
329     if ($conf["arguments"]["affichage"] === "nombre") {
330     // Execution de la requête
331     $res = $this->f->db->getone($sql);
332     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
333     $this->f->isDatabaseError($res);
334    
335     // Si il n'y a aucun dossier à afficher
336     if (intval($res) == 0) {
337     // Affichage du message d'informations
338     echo _("Aucun dossier trouvé.");
339     // Exit
340     return;
341     }
342     $this->display_resultat_bulle($res, __("dossier(s) trouvé(s)"), "bg-info", "");
343     } else {
344     // Exécution de la requête
345     $res = $this->f->db->query($sql);
346     $this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
347     $this->f->isDatabaseError($res);
348    
349     // Si il n'y a aucun dossier à afficher
350     if ($res->numrows() == 0) {
351     // Affichage du message d'informations
352     echo _("Vous n'avez pas de dossiers pour le moment.");
353     // Exit
354     return;
355     }
356    
357     //
358     $template_table = '
359     <table class="tab-tab">
360     <thead>
361     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
362     <th class="title col-0 firstcol">
363     <span class="name">
364     %s
365     </span>
366     </th>
367     <th class="title col-1">
368     <span class="name">
369     %s
370     </span>
371     </th>
372     <th class="title col-2 lastcol">
373     <span class="name">
374     %s
375     </span>
376     </th>
377     </tr>
378     </thead>
379     <tbody>
380     %s
381     </tbody>
382     </table>
383     ';
384     //
385     $template_line = '
386     <tr class="tab-data odd">
387     <td class="col-1 firstcol">
388     %s
389     </td>
390     <td class="col-1">
391     %s
392     </td>
393     <td class="col-2 lastcol">
394     %s
395     </td>
396     </tr>
397     ';
398     //
399     $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
400     //
401     $template_link = '
402     <a class="lienTable" href="%s">
403     %s
404     </a>
405     ';
406    
407     /**
408     * Si il y a des dossiers à afficher, alors on affiche le widget.
409     */
410     // On construit le contenu du tableau
411     $ct_tbody = '';
412     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
413     // On construit l'attribut href du lien
414     $ct_href = sprintf(
415     $template_href,
416     // idx
417     $row["dossier"]
418     );
419     // On construit la ligne
420     $ct_tbody .= sprintf(
421     $template_line,
422     // Colonne 1 - Numéro du dossier
423     sprintf(
424     $template_link,
425     $ct_href,
426     $row["dossier"]
427     ),
428     // Colonne 2 - Libellé du dossier
429     sprintf(
430     $template_link,
431     $ct_href,
432     $row["dossier_libelle"]
433     ),
434     // Colonne 3 - Date dépôt
435     sprintf(
436     $template_link,
437     $ct_href,
438     $this->f->formatDate($row["date_depot"])
439     )
440     );
441     }
442     // Affichage du tableau listant les dossiers
443     printf(
444     $template_table,
445     // Colonne 1 - Numéro de dossier
446     _('dossier'),
447     // Colonne 2 - Libellé du dossier
448     _('nom_petitionnaire'),
449     // Colonne 3 - Date de dépôt
450     _('date_depot'),
451     // Contenu du tableau
452     $ct_tbody
453     );
454     }
455    
456    
457     // Affichage du footer
458     printf(
459     $this->template_footer,
460     sprintf(
461     OM_ROUTE_TAB."&obj=dossier_instruction&advs_id=%s&tricol=%s&message_help=%s",
462     $advs_id,
463     $conf['arguments']['tri'],
464     urlencode($conf['message_help'])
465     ),
466    
467     // titre
468     _("Voir +")
469     );
470     }
471    
472 softime 6565 /**
473 softime 10869 * Cette méthode permet de récupérer la configuration du widget 'Recherche
474     * paramétrable'.
475     *
476     * @return array
477     */
478     function get_config_recherche_dossier_parametrable($arguments) {
479     $arguments_default = array(
480     'affichage' => "nombre",
481     'filtre' => 'instructeur',
482     'tri' => -6
483     );
484    
485     // Vérification des arguments
486     foreach ($arguments_default as $key => $value) {
487     //
488     if (isset($arguments[$key])) {
489     //
490     $elem = trim($arguments[$key]);
491     if ($key === "filtre"
492     && in_array($elem, array("instructeur", "division", "aucun"))) {
493     // La valeur doit être dans cette liste
494     $arguments[$key] = $elem;
495     continue;
496     }
497     if ($key === "affichage"
498     && in_array($elem, array('liste', 'nombre'))) {
499     // La valeur doit être dans cette liste
500     $arguments[$key] = $elem;
501     continue;
502     }
503     if ($key === "tri"
504     && is_numeric(str_replace('-', '', $elem)) === true) {
505     //
506     $arguments[$key] = $elem;
507     continue;
508     }
509     }
510     //
511     $arguments[$key] = $value;
512     }
513    
514     // Ajout du filtre sur la source du dépôt
515     $query_ct_where_source_depot = "";
516     if (isset($arguments["source_depot"])
517     && ! is_null($arguments["source_depot"])
518     && $arguments["source_depot"] !== "") {
519    
520     $source_depot = $arguments["source_depot"];
521     if (! is_null($source_depot) && $source_depot !== "") {
522     $query_ct_where_source_depot = sprintf(
523     " demande.source_depot = '%s' ",
524     $source_depot
525     );
526     }
527     }
528    
529     $query_limit = '';
530     // Gestion de l'affichage
531     if ($arguments['affichage'] == 'nombre') {
532     $query_ct_select = "COUNT(*)";
533     $query_ct_orderby = '';
534     } else {
535     $query_ct_select = "
536     dossier.dossier,
537     dossier.dossier_libelle,
538     dossier.date_depot
539     ";
540    
541     $query_ct_orderby = sprintf("ORDER BY dossier.date_depot DESC");
542     }
543    
544     $query_ct_from = sprintf(
545     '%1$sdossier LEFT JOIN %1$sdemande
546     ON demande.dossier_instruction = dossier.dossier',
547     DB_PREFIXE
548     );
549    
550     // Filtre sur la collectivité en fonction du niveau
551     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
552     $query_ct_join_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
553     ON dossier.om_collectivite=om_collectivite.om_collectivite
554     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
555     ";
556     } else {
557     $query_ct_join_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
558     ON dossier.om_collectivite=om_collectivite.om_collectivite
559     ";
560     }
561    
562     $query_ct_where_filtre = "";
563     $filtre = $arguments["filtre"];
564     // Filtre sur les dossiers qui concernent l'utilisateur
565     if ($filtre == "instructeur") {
566     //
567     $query_ct_where_filtre_instructeur = " JOIN ".DB_PREFIXE."instructeur
568     ON dossier.instructeur=instructeur.instructeur
569     JOIN ".DB_PREFIXE."om_utilisateur
570     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
571     AND om_utilisateur.login='".$_SESSION['login']."'
572     ";
573     } else {
574     $query_ct_where_filtre_instructeur = " LEFT JOIN ".DB_PREFIXE."instructeur
575     ON dossier.instructeur=instructeur.instructeur
576     LEFT JOIN ".DB_PREFIXE."om_utilisateur
577     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
578     }
579     // Filtre sur les dossier de la division
580     if ($filtre == "division") {
581     //
582     $query_ct_where_filtre_division = " JOIN ".DB_PREFIXE."division
583     ON dossier.division=division.division
584     AND division.division = ".$_SESSION['division']."
585     ";
586     } else {
587     $query_ct_where_filtre_division = " LEFT JOIN ".DB_PREFIXE."division
588     ON dossier.division=division.division";
589     }
590    
591     //
592     $query_ct_where = '';
593     if (isset($arguments["etat"])
594     && is_null($arguments["etat"]) === false
595     && $arguments["etat"] !== "") {
596     //
597     $query_ct_where = sprintf(
598     " dossier.etat = '%s' ",
599     $arguments['etat']
600     );
601     }
602    
603     $query_ct_select_champaffiche = array(
604     'dossier.dossier as "'._("dossier").'"',
605     'dossier.dossier_libelle as "'._("dossier").'"',
606     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"'
607     );
608    
609     $message_help = "";
610     // Récupération du message d'aide
611     if (isset($arguments["message_help"])
612     && ! is_null($arguments["message_help"])
613     && $arguments["message_help"] !== "") {
614    
615     $message_help = $arguments["message_help"];
616     }
617    
618     // Filtrage sur l'instructeur ou la division
619     $query_ct_where_filtre = $query_ct_where_filtre_instructeur.$query_ct_where_filtre_division;
620    
621     // Construction du FROM
622     $query_ct_from = $query_ct_from.$query_ct_join_collectivite_filter.$query_ct_where_filtre;
623    
624     // Construction du WHERE
625     $query_ct_where = sprintf(
626     '%s %s %s',
627     $query_ct_where,
628     trim($query_ct_where_source_depot) !== '' ? 'AND' : '',
629     $query_ct_where_source_depot
630     );
631    
632     return array(
633     "arguments" => $arguments,
634     "message_help" => $message_help,
635     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
636     "query_ct_select" => $query_ct_select,
637     "query_ct_from" => $query_ct_from,
638     "query_ct_where" => $query_ct_where,
639     "query_ct_orderby" => $query_ct_orderby,
640     "query_ct_limit" => $query_limit,
641     );
642     }
643    
644    
645    
646     /**
647 softime 6565 * WIDGET DASHBOARD - widget_recherche_dossier_par_type.
648     *
649     * Le widget de recherche accès direct par type est similaire au widget de recherche
650     * accès direct classique. Il permet en plus de choisir la portée de la recherche par
651 softime 6864 * le biais d'un select : ADS ou RE* ou IN.
652 softime 6565 * Selon le type de dossier choisi, lors de la recherche la redirection se fera vers
653     * le menu Instruction ou Contentieux.
654     *
655     * @return void
656     */
657     function view_widget_recherche_dossier_par_type($content = null) {
658    
659     /**
660     * Traitement de la validation du formulaire
661     */
662     if ($this->f->get_submitted_post_value("validation") != null
663 mbroquet 3730 && $this->f->get_submitted_post_value("dossier") !== null
664     && $this->f->get_submitted_post_value("dossier") == '') {
665    
666     // AUCUNE VALEUR SAISIE
667     // Affiche un message d'erreur
668     $erreur = _("Veuillez saisir un No de dossier.");
669     }
670 softime 6565 //
671     if ($this->f->get_submitted_post_value("validation") != null
672     && $this->f->get_submitted_post_value("dossier") !== null
673     && $this->f->get_submitted_post_value("dossier") != '') {
674     //
675     $list_dossiers = $this->execute_recherche_dossier("type");
676     $posted_type_dossier = $this->f->get_submitted_post_value("type_dossier_recherche");
677     // Définition des objets sur lesquels la redirection se fera
678 softime 6864 if ($posted_type_dossier === "ADS") {
679 softime 6565 $obj = "dossier_instruction";
680     }
681     if ($posted_type_dossier === "RE*") {
682     $obj = "dossier_contentieux_tous_recours";
683     }
684     if ($posted_type_dossier === "IN") {
685     $obj = "dossier_contentieux_toutes_infractions";
686     }
687     $total_dossiers = count($list_dossiers);
688     // Si on obtient un seul résultat
689     if ($total_dossiers == 1) {
690     // On reformate le dossier
691     $dossier = strtoupper(str_replace(' ', '', $list_dossiers[0]));
692     // On redirige vers le listing des DI
693     echo '
694     <script type="text/javascript" >
695     widget_recherche_dossier(\'' . $dossier . '\', 1, \'' . $obj . '\');
696     </script>
697     ';
698     // On arrête l'exécution du script car l'utilisateur a été
699     // redirigé vers un autre script
700     exit();
701     }
702     // Si on obtient plusieurs résultats
703     if ($total_dossiers > 1) {
704     // Mémorisation de la recherche
705     $search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier"));
706     // Ajout d'une étoile au début s'il n'y en n'a pas.
707     // Par defaut * est toujours ajouté à la fin des recherches.
708     if (substr($search, 0, 1) != '*') {
709     $search = '*'.$search;
710     }
711     // On redirige vers le listing des DI
712     //
713     echo '
714     <script type="text/javascript" >
715     widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.', \'' . $obj . '\');
716     </script>
717     ';
718     // On arrête l'exécution du script car l'utilisateur a été
719     // redirigé vers un autre script
720     exit();
721     }
722     // Si aucun dossier trouve
723     // Affiche un message d'erreur
724     $erreur = _("Aucun dossier trouvé.");
725     }
726 mbroquet 3730
727     /**
728     * Affichage du widget
729     */
730 softime 6565 // Liste des paramètres
731     $params = array("type_defaut", );
732     // Initialisation du tableau des paramètres avec ses valeur par défaut
733     $arguments_default = array(
734 softime 6864 "type_defaut" => "ADS",
735 softime 6565 );
736     $arguments = $this->get_arguments($content, $params);
737    
738     // Vérification des arguments
739     foreach ($arguments_default as $key => $value) {
740     //
741     if (isset($arguments[$key])) {
742     //
743     $elem = trim($arguments[$key]);
744     //
745     if ($key === "type_defaut"
746 softime 6864 && in_array($elem, array("ADS", "RE*", "IN"))) {
747 softime 6565 // La valeur doit être dans cette liste
748     $arguments[$key] = $elem;
749     continue;
750     }
751     }
752     //
753     $arguments[$key] = $value;
754     }
755     //
756     $type_defaut = $arguments["type_defaut"];
757    
758 mbroquet 3730 // Affichage du message d'informations
759     printf(
760     '<div class="widget-help"><span class="info-16" title="%s"></span></div>',
761 softime 6864 _("Permet la recherche directe de dossiers d'instruction, avec choix de la portée de la recherche : ADS ou RE* ou IN.\n".
762 softime 6565 "La sélection de la famille de dossier filtre les résultats et conditionne la redirection de l'utilisateur :\n".
763 softime 6864 "- ADS : Instruction > Dossiers d'instruction > Recherche\n".
764 softime 6565 "- RE* : Contentieux > Recours > Tous les Recours \n".
765     "- IN : Contentieux > Infractions > Toutes les Infractions\n\n".
766 mbroquet 3730 "Deux modes de saisie sont possibles :\n".
767     "- Code de dossier intégral 'PC0130551300027P0' ou 'PC 013055 13 00027P0' pour un accès direct à la fiche de visualisation du dossier d'instruction,\n".
768     "- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.")
769     );
770     // Ouverture du form
771 softime 7996 echo "\t<form method=\"post\" id=\"widget_recherche_dossier_par_type_form\" action=\"".OM_ROUTE_DASHBOARD."\">\n";
772 mbroquet 3730 // Affichage d'un éventuel message d'erreur
773     if (isset($erreur) && $erreur != "") {
774     $class = "error";
775     $this->f->displayMessage($class, $erreur);
776     }
777     // Configuration du formulaire de recherche
778 softime 6565 $champs = array("dossier", "type_dossier_recherche");
779 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
780     "validation" => 0,
781     "maj" => 0,
782     "champs" => $champs,
783     ));
784 mbroquet 3730 $form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>');
785     $form->setType("dossier", "text");
786     $form->setTaille("dossier", 20);
787     $form->setMax("dossier", 250);
788 softime 6565
789     // Définition des types de dossiers visibles dans le select
790 softime 6864 $options[0] = array("ADS",
791 softime 6565 "RE*",
792     "IN");
793     $options[1] = array(
794 softime 6864 _("ADS"),
795 softime 6565 _("RE*"),
796     _("IN"));
797    
798     $form->setType("type_dossier_recherche", "select");
799     $form->setLib("om_profil", _("Tableau de bord pour le profil"));
800     $form->setSelect('type_dossier_recherche', $options);
801     $form->setVal('type_dossier_recherche', $type_defaut);
802     $form->setLib('type_dossier_recherche', 'Type de dossier');
803    
804 mbroquet 3730 // Affichage du formulaire
805     $form->entete();
806     $form->afficher($champs, 0, false, false);
807     $form->enpied();
808     // Affichage des contrôles du formulaire
809     echo "\t<div class=\"formControls\">\n";
810     echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
811     value=\""._("Valider")."\" name=\"validation\" />\n";
812     echo "\t</div>\n";
813     // Fermeture du form
814     echo "\t</form>\n";
815     }
816    
817 softime 6565
818 mbroquet 3730 /**
819 softime 6565 * Méthode générique exécutant une recherche par numéro de dossier dans 2 contextes
820     * différents :
821     * - le widget de recherche classique
822     * - le widget de recherche avec choix du type/groupe de dossier
823     *
824     * @param string $filtre Indique si un filtre supplémentaire doit être appliqué à la
825     * recherche de dossier. Seule valeur possible : "type".
826     *
827     * @return string $error_message Le message d'erreur s'il y en a un, sinon chaîne vide
828     */
829     protected function execute_recherche_dossier($filtre = null) {
830    
831     // Traitement des valeurs postées
832     $posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier"))));
833     $posted_dossiers = str_replace(';', ',', $posted_dossiers);
834    
835     //
836     // UNE VALEUR SAISIE
837     //
838    
839     // WHERE - Filtre Collectivité
840     $query_ct_where_collectivite = "";
841     // Si collectivité utilisateur mono alors filtre sur celle-ci
842     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
843     //
844     $query_ct_where_collectivite = " AND dossier.om_collectivite=".$_SESSION['collectivite'];
845     }
846    
847     // WHERE - Filtre par groupe
848     $query_ct_where_groupe = "";
849     $query_ct_where_type_da = "";
850     $query_ct_from = "";
851     $query_ct_where_common = "";
852     $posted_type_dossier = $this->f->get_submitted_post_value("type_dossier_recherche");
853     // La variable $posted_type_dossier vaut null si on est dans le contexte du widget
854     // de recherche de dossier classique (sans choix du type)
855 softime 6864 if ($posted_type_dossier === null OR $posted_type_dossier === "ADS") {
856 softime 6565 $query_ct_from = "
857     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
858     ON dossier.dossier_autorisation =
859     dossier_autorisation.dossier_autorisation
860     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
861     ON dossier_autorisation.dossier_autorisation_type_detaille =
862     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
863     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
864     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
865     dossier_autorisation_type.dossier_autorisation_type
866     LEFT JOIN ".DB_PREFIXE."groupe
867     ON dossier_autorisation_type.groupe = groupe.groupe";
868     //
869     $query_ct_where_groupe = "
870     AND groupe.code != 'CTX'
871     ";
872     }
873     if ($posted_type_dossier === "RE*" OR $posted_type_dossier === "IN") {
874     $query_ct_from = "
875     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
876     ON dossier.dossier_autorisation =
877     dossier_autorisation.dossier_autorisation
878     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
879     ON dossier_autorisation.dossier_autorisation_type_detaille =
880     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
881     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
882     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
883     dossier_autorisation_type.dossier_autorisation_type
884     ";
885     if ($posted_type_dossier === "RE*") {
886     $posted_type_dossier = "RE";
887     }
888     $query_ct_where_type_da = "
889     AND dossier_autorisation_type.code = '". $posted_type_dossier . "'
890     ";
891     }
892    
893     // Gestion des groupes et confidentialité
894     include('../sql/pgsql/filter_group_widgets.inc.php');
895    
896     // Construction de la requête
897     // Pour chaque dossier on cherche sur les deux champs du code du
898     // dossier (un avec et un sans espaces)
899     $posted_dossiers = explode(',', $posted_dossiers);
900     $liste_dossiers = array();
901     foreach ($posted_dossiers as $posted_dossier) {
902     $sql = "
903     SELECT
904     dossier
905     FROM
906     " . DB_PREFIXE . "dossier
907     " . $query_ct_from . "
908     WHERE
909     (LOWER(dossier.dossier) LIKE '%".$posted_dossier."%'
910     OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' )
911     ";
912     $sql .= $query_ct_where_collectivite . $query_ct_where_type_da . $query_ct_where_groupe;
913     // Exécution de la requête
914     $res = $this->f->db->query($sql);
915     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
916     $this->f->isDatabaseError($res);
917     // On récupère les numéros de dossier dans les résultats
918     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
919     $liste_dossiers[] = $row['dossier'];
920     }
921     }
922    
923     return $liste_dossiers;
924     }
925    
926    
927     /**
928 mbroquet 3730 * Cette méthode permet de récupérer la configuration du widget 'Dossiers
929     * limites'.
930     *
931     * @return array
932     */
933     function get_config_dossiers_limites($arguments) {
934     // Initialisation du tableau des paramètres avec ses valeur par défaut
935     $arguments_default = array(
936     "nombre_de_jours" => 15,
937     "codes_datd" => null,
938     "filtre" => "instructeur",
939 softime 7717 "restreindre_aux_tacites" => null,
940 softime 10573 "affichage" => "liste"
941 mbroquet 3730 );
942     // Vérification des arguments
943     foreach ($arguments_default as $key => $value) {
944     //
945     if (isset($arguments[$key])) {
946     //
947     $elem = trim($arguments[$key]);
948     //
949     if ($key === "nombre_de_jours"
950     && intval($elem) > 0) {
951     // Ce doit être un entier
952     $arguments[$key] = intval($elem);
953     continue;
954     } elseif ($key === "codes_datd"
955     && $elem != "") {
956     // Ce doit être un tableau
957     $arguments[$key] = explode(";", $elem);
958     continue;
959     } elseif ($key === "filtre"
960     && in_array($elem, array("instructeur", "division", "aucun"))) {
961     // La valeur doit être dans cette liste
962     $arguments[$key] = $elem;
963     continue;
964 softime 7717 } elseif ($key === "restreindre_aux_tacites"
965     && in_array($elem, array("true", "false"))) {
966     // La valeur doit être dans cette liste
967     $arguments[$key] = $elem;
968     continue;
969 softime 10573 } elseif ($key === "affichage"
970     && in_array($elem, array('liste', 'nombre'))) {
971     // La valeur doit être dans cette liste
972     $arguments[$key] = $elem;
973     continue;
974 mbroquet 3730 }
975     }
976     //
977     $arguments[$key] = $value;
978     }
979     //
980     $nombre_de_jours = $arguments["nombre_de_jours"];
981     $codes_datd = $arguments["codes_datd"];
982     $filtre = $arguments["filtre"];
983 softime 7717 $restreindre_aux_tacites = $arguments["restreindre_aux_tacites"];
984 mbroquet 3730
985     /**
986     * Construction de la requête
987     */
988     // SELECT
989     $query_ct_select = "
990     dossier.dossier,
991     dossier.dossier_libelle,
992     dossier.date_limite,
993     dossier.date_limite_incompletude,
994 softime 10573 CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
995     dossier.date_limite_incompletude ELSE
996     dossier.date_limite END as date_limite_na,
997 mbroquet 3730 COALESCE(
998     demandeur.particulier_nom,
999     demandeur.personne_morale_denomination
1000     ) AS nom_petitionnaire,
1001     CASE
1002     WHEN dossier.enjeu_erp is TRUE
1003     THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>'
1004     ELSE
1005     ''
1006     END
1007     ||
1008     CASE
1009     WHEN dossier.enjeu_urba is TRUE
1010     THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>'
1011     ELSE
1012     ''
1013     END AS enjeu
1014     ";
1015     // SELECT - CHAMPAFFICHE
1016     $query_ct_select_champaffiche = array(
1017     'dossier.dossier as "'._("dossier").'"',
1018     'dossier.dossier_libelle as "'._("dossier").'"',
1019     'COALESCE(
1020     demandeur.particulier_nom,
1021     demandeur.personne_morale_denomination
1022     ) AS "'._("nom_petitionnaire").'"',
1023     'CASE
1024     WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
1025     THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\')
1026     ELSE
1027     to_char(dossier.date_limite, \'DD/MM/YYYY\')
1028     END as "'._("date_limite").'"',
1029     'CASE
1030     WHEN dossier.enjeu_erp is TRUE
1031     THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\'
1032     ELSE
1033     \'\'
1034     END
1035     ||
1036     CASE
1037     WHEN dossier.enjeu_urba is TRUE
1038     THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\'
1039     ELSE
1040     \'\'
1041     END AS "'._("enjeu").'"',
1042     // XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau
1043     'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
1044     dossier.date_limite_incompletude ELSE
1045     dossier.date_limite END as date_limite_na',
1046     );
1047     // FROM
1048     $query_ct_from = "
1049     ".DB_PREFIXE."dossier
1050 fmichon 3890 LEFT JOIN ".DB_PREFIXE."etat
1051     ON dossier.etat = etat.etat
1052 mbroquet 3730 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
1053     ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
1054     LEFT JOIN ".DB_PREFIXE."demandeur
1055     ON lien_dossier_demandeur.demandeur = demandeur.demandeur
1056     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1057     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
1058     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1059     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
1060     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
1061     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
1062 nhaye 4791 %s
1063     %s
1064     %s
1065 mbroquet 3730 ";
1066 nhaye 4791
1067     $query_ct_where_instructeur_filter = "";
1068     $query_ct_where_division_filter = "";
1069     $query_ct_where_collectivite_filter = "";
1070     // Filtre sur les dossiers qui concernent l'utilisateur
1071     if ($filtre == "instructeur") {
1072     //
1073     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
1074     ON dossier.instructeur=instructeur.instructeur
1075     JOIN ".DB_PREFIXE."om_utilisateur
1076     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
1077     AND om_utilisateur.login='".$_SESSION['login']."'
1078     ";
1079 nhaye 4793 } else {
1080 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
1081 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
1082     LEFT JOIN ".DB_PREFIXE."om_utilisateur
1083     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
1084 nhaye 4791 }
1085     // Filtre sur les dossier de la division
1086     if ($filtre == "division") {
1087     //
1088     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
1089     ON dossier.division=division.division
1090     AND division.division = ".$_SESSION['division']."
1091     ";
1092 nhaye 4793 } else {
1093 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
1094 nhaye 4793 ON dossier.division=division.division";
1095 nhaye 4791 }
1096     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1097     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1098     // collectivité
1099     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1100     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
1101     ON dossier.om_collectivite=om_collectivite.om_collectivite
1102     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
1103     ";
1104 nmeucci 4799 } else {
1105     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
1106     ON dossier.om_collectivite=om_collectivite.om_collectivite
1107     ";
1108 nhaye 4791 }
1109    
1110     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
1111 mbroquet 3730 // WHERE - COMMON
1112     $query_ct_where_common = "
1113 softime 6565 groupe.code != 'CTX'
1114     AND
1115 mbroquet 3730 (
1116     (
1117     dossier.incomplet_notifie IS FALSE
1118 softime 10573 AND date_limite >= CURRENT_DATE AND date_limite <= CURRENT_DATE + ".$nombre_de_jours." * interval '1 day'
1119 mbroquet 3730 )
1120     OR
1121     (
1122     dossier.incomplet_notifie IS TRUE
1123     AND dossier.incompletude IS TRUE
1124 softime 10573 AND date_limite_incompletude >= CURRENT_DATE AND date_limite_incompletude <= CURRENT_DATE + ".$nombre_de_jours." * interval '1 day'
1125 mbroquet 3730 )
1126     )
1127 fmichon 3890 AND etat.statut != 'cloture'
1128 softime 7521 AND dossier.avis_decision IS NULL
1129 mbroquet 3730 ";
1130 softime 7717 // WHERE - TACITE
1131     // Filtre sur le caractère tacite
1132     $query_ct_where_tacite_filter = '';
1133     if (is_null($restreindre_aux_tacites) === false
1134     && $restreindre_aux_tacites === 'true') {
1135     //
1136     //
1137     $query_ct_where_tacite_filter = " AND LOWER(dossier.accord_tacite) = 'oui' ";
1138     }
1139 mbroquet 3730 // WHERE - DATD
1140     // Filtre sur le type détaillé des dossiers
1141     $query_ct_where_datd_filter = "";
1142     if (!is_null($codes_datd)
1143     && is_array($codes_datd)
1144     && count($codes_datd) != 0) {
1145     //
1146     $sql_codes = "";
1147     //
1148     foreach ($codes_datd as $code) {
1149     $sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR ";
1150     }
1151 softime 9282 $sql_codes = substr($sql_codes, 0, strlen($sql_codes) - 4);
1152 mbroquet 3730 //
1153     $query_ct_where_datd_filter = " AND ( ".$sql_codes." ) ";
1154     }
1155     // ORDER BY
1156     $query_ct_orderby = "
1157     date_limite_na
1158     ";
1159    
1160 softime 6565 $query_ct_where_groupe = "";
1161     // Gestion des groupes et confidentialité
1162     include('../sql/pgsql/filter_group_widgets.inc.php');
1163    
1164 mbroquet 3730 /**
1165     * Message d'aide
1166     */
1167     //
1168 softime 7717 $message_restreindre_aux_tacites = '';
1169     //
1170     if (is_null($restreindre_aux_tacites) === false
1171     && $restreindre_aux_tacites === 'true') {
1172     //
1173     $message_restreindre_aux_tacites = " "._("avec tacite automatique");
1174     }
1175     //
1176 mbroquet 3730 $message_filtre = "";
1177     //
1178     switch($filtre) {
1179     case "instructeur" :
1180     $message_filtre = " "._("(filtrés par instructeur)");
1181     break;
1182     case "division" :
1183     $message_filtre = " "._("(filtrés par division)");
1184     break;
1185     }
1186     //
1187     $message_help = sprintf(
1188 softime 7717 _("Les dossiers%s%s sur lesquels aucune décision n'a été prise et dont la date limite est dans moins de %s jours%s."),
1189 mbroquet 3730 (is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"),
1190 softime 7717 $message_restreindre_aux_tacites,
1191 mbroquet 3730 $nombre_de_jours,
1192     $message_filtre
1193     );
1194    
1195     /**
1196     * Return
1197     */
1198     //
1199     return array(
1200     "arguments" => $arguments,
1201     "message_help" => $message_help,
1202     "query_ct_select" => $query_ct_select,
1203     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
1204     "query_ct_from" => $query_ct_from,
1205     "query_ct_where_common" => $query_ct_where_common,
1206 softime 7717 "query_ct_where_tacite_filter" => $query_ct_where_tacite_filter,
1207 mbroquet 3730 "query_ct_where_datd_filter" => $query_ct_where_datd_filter,
1208 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
1209 mbroquet 3730 "query_ct_orderby" => $query_ct_orderby,
1210     );
1211     }
1212    
1213     /**
1214     * WIDGET DASHBOARD - Dossiers limites
1215     *
1216     * @return void
1217     */
1218     function view_widget_dossiers_limites($content = null) {
1219    
1220     /**
1221     * Ce widget est configurable via l'interface Web. Lors de la création
1222     * du widget dans le paramétrage il est possible de spécifier la ou les
1223     * options suivantes :
1224     *
1225     * - nombre_de_jours : c'est le délai en jours avant la date limite à
1226     * partir duquel on souhaite voir apparaître les dossiers dans le
1227     * widget.
1228     * (default) Par défaut la valeur est 15 jours.
1229     *
1230     * - codes_datd : la liste des types de dossiers à afficher. exemple :
1231     * "PCI;PCA;DPS;CUa;CUb".
1232     * (default) Par défaut tous les types sont affichés. [null]
1233     *
1234     * - filtre :
1235     * = instructeur
1236     * = division
1237     * = aucun
1238     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1239 softime 7717 *
1240     * - restreindre_aux_tacites : permet d'afficher seulement les dossiers
1241     * d'instruction dont le caractère tacite est actif.
1242 mbroquet 3730 */
1243     // Liste des paramètres
1244 softime 10573 $params = array("nombre_de_jours", "codes_datd", "filtre", "restreindre_aux_tacites", "affichage");
1245 mbroquet 3730 // Formatage des arguments reçus en paramètres
1246     $arguments = $this->get_arguments($content, $params);
1247     // Récupération de la configuration du widget
1248     $conf = $this->get_config_dossiers_limites($arguments);
1249     //
1250     $nombre_de_jours = $conf["arguments"]["nombre_de_jours"];
1251     $codes_datd = $conf["arguments"]["codes_datd"];
1252     $filtre = $conf["arguments"]["filtre"];
1253 softime 7717 $restreindre_aux_tacites = $conf['arguments']['restreindre_aux_tacites'];
1254 mbroquet 3730
1255     /**
1256     * Composition de la requête
1257     */
1258 softime 10573 // Gestion de la requête selon le tye d'affichage
1259     $query_ct_orderby = sprintf(
1260     "ORDER BY
1261     %s
1262     LIMIT 10",
1263     $conf["query_ct_orderby"]
1264     );
1265     $query_ct_select = $conf["query_ct_select"];
1266     if ($conf["arguments"]["affichage"] === "nombre") {
1267     $query_ct_orderby = "";
1268     $query_ct_select = "COUNT(*)";
1269     }
1270    
1271 mbroquet 3730 $query = sprintf("
1272     SELECT
1273     %s
1274     FROM
1275     %s
1276     WHERE
1277     %s
1278     %s
1279 softime 6565 %s
1280 softime 7717 %s
1281 softime 10573 %s",
1282     $query_ct_select,
1283 mbroquet 3730 $conf["query_ct_from"],
1284     $conf["query_ct_where_common"],
1285 softime 7717 $conf["query_ct_where_tacite_filter"],
1286 mbroquet 3730 $conf["query_ct_where_datd_filter"],
1287 softime 6565 $conf["query_ct_where_groupe"],
1288 softime 10573 $query_ct_orderby
1289 mbroquet 3730 );
1290    
1291     /**
1292 softime 10573 * Templates nécessaires à l'affichage du widget
1293 mbroquet 3730 */
1294 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
1295     // Execution de la requête
1296     $res = $this->f->db->getone($query);
1297     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
1298     $this->f->isDatabaseError($res);
1299    
1300     // Affichage du message d'informations
1301     printf(
1302     $this->template_help,
1303     $conf["message_help"]
1304     );
1305 mbroquet 3730
1306 softime 10573 // Si il n'y a aucun dossier à afficher
1307     if (intval($res) == 0) {
1308     // Affichage du message d'informations
1309     echo _("Vous n'avez pas de dossiers limites pour le moment.");
1310     // Exit
1311     return;
1312     }
1313     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
1314     } else {
1315     // Exécution de la requête
1316     $res = $this->f->db->query($query);
1317     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
1318     $this->f->isDatabaseError($res);
1319    
1320 mbroquet 3730 // Affichage du message d'informations
1321 softime 10573 printf(
1322     $this->template_help,
1323     $conf["message_help"]
1324     );
1325    
1326     /**
1327     * Si il n'y a aucun dossier à afficher, alors on affiche un message
1328     * clair à l'utilisateur et on sort de la vue.
1329     */
1330     // Si il n'y a aucun dossier à afficher
1331     if ($res->numrows() == 0) {
1332     // Affichage du message d'informations
1333     echo _("Vous n'avez pas de dossiers limites pour le moment.");
1334     // Exit
1335     return;
1336     }
1337    
1338     //
1339     $template_table = '
1340     <table class="tab-tab">
1341     <thead>
1342     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
1343     <th class="title col-0 firstcol">
1344     <span class="name">
1345     %s
1346     </span>
1347     </th>
1348     <th class="title col-1">
1349     <span class="name">
1350     %s
1351     </span>
1352     </th>
1353     <th class="title col-2">
1354     <span class="name">
1355     %s
1356     </span>
1357     </th>
1358     <th class="title col-3 lastcol">
1359     <span class="name">
1360     %s
1361     </span>
1362     </th>
1363     </tr>
1364     </thead>
1365     <tbody>
1366     %s
1367     </tbody>
1368     </table>
1369     ';
1370     //
1371     $template_line = '
1372     <tr class="tab-data odd">
1373     <td class="col-1 firstcol">
1374     %s
1375     </td>
1376     <td class="col-1">
1377     %s
1378     </td>
1379     <td class="col-2">
1380     %s
1381     </td>
1382     <td class="col-3 lastcol">
1383     %s
1384     </td>
1385     </tr>
1386     ';
1387     //
1388     $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
1389     //
1390     $template_link = '
1391     <a class="lienTable" href="%s">
1392 mbroquet 3730 %s
1393 softime 10573 </a>
1394     ';
1395 mbroquet 3730
1396 softime 10573 /**
1397     * Si il y a des dossiers à afficher, alors on affiche le widget.
1398     */
1399     // On construit le contenu du tableau
1400     $ct_tbody = '';
1401     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1402     // On construit l'attribut href du lien
1403     $ct_href = sprintf(
1404     $template_href,
1405     // idx
1406     $row["dossier"]
1407     );
1408     // On construit la ligne
1409     $ct_tbody .= sprintf(
1410     $template_line,
1411     // Colonne 1 - Numéro de dossier
1412     sprintf(
1413     $template_link,
1414     $ct_href,
1415     $row["dossier_libelle"]
1416     ),
1417     // Colonne 2 - Nom du pétitionnaire
1418     sprintf(
1419     $template_link,
1420     $ct_href,
1421     $row["nom_petitionnaire"]
1422     ),
1423     // Colonne 3 - Date limite
1424     sprintf(
1425     $template_link,
1426     $ct_href,
1427     $this->f->formatDate($row["date_limite_na"])
1428     ),
1429     // Colonne 4 - Enjeu
1430     sprintf(
1431     $template_link,
1432     $ct_href,
1433     $row["enjeu"]
1434     )
1435     );
1436     }
1437     // Affichage du tableau listant les dossiers
1438     printf(
1439     $template_table,
1440 mbroquet 3730 // Colonne 1 - Numéro de dossier
1441 softime 10573 _('dossier'),
1442 mbroquet 3730 // Colonne 2 - Nom du pétitionnaire
1443 softime 10573 _('nom_petitionnaire'),
1444 mbroquet 3730 // Colonne 3 - Date limite
1445 softime 10573 _('date_limite'),
1446 mbroquet 3730 // Colonne 4 - Enjeu
1447 softime 10573 _('enjeu'),
1448     // Contenu du tableau
1449     $ct_tbody
1450 mbroquet 3730 );
1451     }
1452     // Affichage du footer
1453     printf(
1454 jymadier 4132 $this->template_footer,
1455 mbroquet 3730 // href (avec les paramètres du widget)
1456     sprintf(
1457 softime 7996 OM_ROUTE_TAB."&obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s&restreindre_aux_tacites=%s",
1458 mbroquet 3730 $nombre_de_jours,
1459     (is_null($codes_datd) ? "" : implode(";",$codes_datd)),
1460 softime 7717 $filtre,
1461     $restreindre_aux_tacites
1462 mbroquet 3730 ),
1463     // titre
1464     _("Voir +")
1465     );
1466     }
1467    
1468 softime 6565
1469 mbroquet 3730 /**
1470 softime 6565 * Cette méthode permet de récupérer la configuration du widget 'Mes
1471     * recours'.
1472     *
1473     * @return array
1474     */
1475     function get_config_dossier_contentieux_recours($arguments) {
1476     // Initialisation du tableau des paramètres avec ses valeur par défaut
1477     $arguments_default = array(
1478 softime 10573 "filtre" => "instructeur",
1479     "affichage" => "liste"
1480 softime 6565 );
1481     // Vérification des arguments
1482     foreach ($arguments_default as $key => $value) {
1483     //
1484     if (isset($arguments[$key])) {
1485     //
1486     $elem = trim($arguments[$key]);
1487     //
1488     if ($key === "filtre"
1489     && in_array($elem, array("instructeur", "aucun"))) {
1490     // La valeur doit être dans cette liste
1491     $arguments[$key] = $elem;
1492     continue;
1493 softime 10573 } elseif ($key === "affichage"
1494     && in_array($elem, array('liste', 'nombre'))) {
1495     // La valeur doit être dans cette liste
1496     $arguments[$key] = $elem;
1497     continue;
1498 softime 6565 }
1499     }
1500     //
1501     $arguments[$key] = $value;
1502     }
1503     $filtre = $arguments["filtre"];
1504    
1505     // SELECT - CHAMPAFFICHE
1506     //
1507     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
1508     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
1509     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
1510     END";
1511     //
1512 softime 10573 $trim_concat_terrain = '
1513     TRIM(
1514 softime 11057 CASE
1515     WHEN dossier.adresse_normalisee IS NULL
1516     OR TRIM(dossier.adresse_normalisee) = \'\'
1517     THEN
1518     CONCAT_WS(
1519     \' \',
1520     dossier.terrain_adresse_voie_numero,
1521     dossier.terrain_adresse_voie,
1522     dossier.terrain_adresse_code_postal
1523     )
1524     ELSE
1525     dossier.adresse_normalisee
1526     END
1527 softime 10573 ) as "'.__("localisation").'"';
1528 softime 6565 //
1529     $case_requerant = "
1530     CASE WHEN demandeur_requerant.qualite = 'particulier'
1531     THEN TRIM(CONCAT(demandeur_requerant.particulier_nom, ' ', demandeur_requerant.particulier_prenom))
1532     ELSE TRIM(CONCAT(demandeur_requerant.personne_morale_raison_sociale, ' ', demandeur_requerant.personne_morale_denomination))
1533     END
1534     ";
1535     //
1536     $query_ct_select_champaffiche = array(
1537     'dossier.dossier as "'._("dossier").'"',
1538     'dossier.dossier_libelle as "'._("dossier").'"',
1539     'dossier_autorisation_type_detaille.libelle as "'._("type de dossier").'"',
1540     'dossier_autorisation_contestee.dossier_libelle as "'._("autorisation").'"',
1541     $case_demandeur.' as "'._("petitionnaire").'"',
1542     $trim_concat_terrain,
1543     $case_requerant.' as "'._("requerant").'"',
1544 softime 8477 'donnees_techniques.ctx_reference_dsj as "'._("ctx_reference_dsj").'"',
1545 softime 6565 'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date de recours").'"',
1546     'avis_decision.libelle as "'._("decision").'"',
1547     'etat.libelle as "'._("etat").'"',
1548     );
1549    
1550     /**
1551     * Construction de la requête
1552     */
1553     // SELECT
1554     $query_ct_select = "
1555     dossier.dossier,
1556     dossier.dossier_libelle,
1557     dossier.date_depot
1558     ";
1559    
1560     // FROM
1561     $query_ct_from =
1562     DB_PREFIXE."dossier
1563     LEFT JOIN (
1564     SELECT *
1565     FROM ".DB_PREFIXE."lien_dossier_demandeur
1566     INNER JOIN ".DB_PREFIXE."demandeur
1567     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1568     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1569     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
1570     ) as demandeur
1571     ON demandeur.dossier = dossier.dossier
1572     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1573     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1574     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1575     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1576     LEFT JOIN ".DB_PREFIXE."etat
1577     ON dossier.etat = etat.etat
1578     LEFT JOIN ".DB_PREFIXE."division
1579     ON dossier.division = division.division
1580     LEFT JOIN ".DB_PREFIXE."avis_decision
1581     ON avis_decision.avis_decision=dossier.avis_decision
1582     LEFT OUTER JOIN ".DB_PREFIXE."arrondissement
1583     ON arrondissement.code_postal = dossier.terrain_adresse_code_postal
1584     LEFT JOIN (
1585     SELECT *
1586     FROM ".DB_PREFIXE."lien_dossier_demandeur
1587     INNER JOIN ".DB_PREFIXE."demandeur
1588     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1589     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1590     AND LOWER(demandeur.type_demandeur) = LOWER('requerant')
1591     ) as demandeur_requerant
1592     ON demandeur_requerant.dossier = dossier.dossier
1593     LEFT JOIN ".DB_PREFIXE."dossier as dossier_autorisation_contestee
1594     ON dossier.autorisation_contestee = dossier_autorisation_contestee.dossier
1595 softime 8477 INNER JOIN (
1596     SELECT
1597     ctx_reference_dsj,
1598     dossier_instruction
1599     FROM ".DB_PREFIXE."donnees_techniques
1600     ) as donnees_techniques
1601     ON donnees_techniques.dossier_instruction = dossier.dossier
1602 softime 6565 %s
1603     %s
1604     ";
1605    
1606     $query_ct_from_collectivite_filter = "";
1607     $query_ct_from_instructeur_filter = "";
1608     // Filtre sur les dossiers qui concernent l'utilisateur
1609     if ($filtre == "instructeur") {
1610     $query_ct_from_instructeur_filter = "
1611     JOIN ".DB_PREFIXE."instructeur
1612     ON dossier.instructeur=instructeur.instructeur
1613     OR dossier.instructeur_2=instructeur.instructeur
1614     JOIN ".DB_PREFIXE."om_utilisateur
1615     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
1616     AND om_utilisateur.login='".$_SESSION['login']."'
1617     ";
1618     }
1619     else {
1620     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
1621     ON dossier.instructeur=instructeur.instructeur
1622     LEFT JOIN ".DB_PREFIXE."om_utilisateur
1623     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
1624     }
1625    
1626     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1627     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1628     // collectivité
1629     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1630     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
1631     ON dossier.om_collectivite=om_collectivite.om_collectivite
1632     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
1633     ";
1634     }
1635     else {
1636     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
1637     ON dossier.om_collectivite=om_collectivite.om_collectivite
1638     ";
1639     }
1640    
1641     $query_ct_from = sprintf($query_ct_from, $query_ct_from_instructeur_filter, $query_ct_from_collectivite_filter);
1642    
1643     // WHERE - COMMON
1644     $query_ct_where_common = "
1645     LOWER(dossier_autorisation_type.code) = LOWER('RE')
1646     ";
1647    
1648     // ORDER BY
1649     $query_ct_orderby = "
1650 softime 9245 dossier.date_depot DESC, dossier.dossier DESC
1651 softime 6565 ";
1652    
1653     $query_ct_where_groupe = "";
1654     // Gestion des groupes et confidentialité
1655     include('../sql/pgsql/filter_group_widgets.inc.php');
1656    
1657     /**
1658     * Message d'aide
1659     */
1660     //
1661     $message_filtre = "";
1662     //
1663     switch ($filtre) {
1664     case "instructeur":
1665     $message_filtre = " "._("dont je suis l'instructeur");
1666     break;
1667     case "aucun":
1668     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1669     $message_filtre = " "._("situés dans ma collectivité");
1670     } else {
1671     $message_filtre = " "._("situés dans toutes les collectivités");
1672     }
1673     break;
1674     }
1675     //
1676     $message_help = sprintf(
1677     _("Les derniers recours%s."),
1678     $message_filtre
1679     );
1680    
1681     /**
1682     * Return
1683     */
1684     //
1685     return array(
1686     "arguments" => $arguments,
1687     "message_help" => $message_help,
1688     "query_ct_select" => $query_ct_select,
1689     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
1690     "query_ct_from" => $query_ct_from,
1691     "query_ct_where" => $query_ct_where_common,
1692     "query_ct_where_groupe" => $query_ct_where_groupe,
1693     "query_ct_orderby" => $query_ct_orderby
1694     );
1695     }
1696    
1697    
1698     /**
1699     * WIDGET DASHBOARD - Mes recours
1700     * @return void
1701     */
1702     function view_widget_dossier_contentieux_recours($content = null) {
1703     /**
1704     * Ce widget est configurable via l'interface Web. Lors de la création
1705     * du widget dans le paramétrage il est possible de spécifier la ou les
1706     * options suivantes :
1707     * - filtre :
1708     * = instructeur
1709     * = aucun
1710     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1711     */
1712     // Liste des paramètres
1713 softime 10573 $params = array("filtre", "affichage");
1714 softime 6565 // Formatage des arguments reçus en paramètres
1715     $arguments = $this->get_arguments($content, $params);
1716     // Récupération de la configuration du widget
1717     $conf = $this->get_config_dossier_contentieux_recours($arguments);
1718     // Récupération du filtre
1719     $filtre = $conf["arguments"]["filtre"];
1720     // Définit l'objet cible
1721     $obj = 'dossier_contentieux_tous_recours';
1722     if ($filtre === 'instructeur') {
1723     //
1724     $obj = 'dossier_contentieux_mes_recours';
1725     }
1726    
1727     /**
1728     * Composition de la requête
1729     */
1730     //
1731 softime 10573 // Gestion de la requête selon le type d'affichage
1732     $query_ct_orderby = sprintf(
1733     "ORDER BY
1734     %s
1735     LIMIT 5",
1736     $conf["query_ct_orderby"]
1737     );
1738     $query_ct_select = $conf["query_ct_select"];
1739     if ($conf["arguments"]["affichage"] === "nombre") {
1740     $query_ct_orderby = "";
1741     $query_ct_select = "COUNT(*)";
1742     }
1743 softime 6565 $query = sprintf("
1744     SELECT
1745     %s
1746     FROM
1747     %s
1748     WHERE
1749     %s
1750 softime 10573 %s",
1751     $query_ct_select,
1752 softime 6565 $conf["query_ct_from"],
1753     $conf["query_ct_where"],
1754 softime 10573 $query_ct_orderby
1755 softime 6565 );
1756    
1757     /**
1758     * Template nécessaires à l'affichage du widget
1759     */
1760 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
1761     // Exécution de la requête
1762     $res = $this->f->db->getone($query);
1763     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
1764     $this->f->isDatabaseError($res);
1765    
1766     // Affichage du message d'informations
1767     printf(
1768     $this->template_help,
1769     $conf["message_help"]
1770     );
1771     // Si il n'y a aucun dossier à afficher
1772     if (intval($res) == 0) {
1773     echo _("Vous n'avez pas de recours.");
1774     return;
1775     }
1776    
1777     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
1778     } else {
1779     // Exécution de la requête
1780     $res = $this->f->db->query($query);
1781     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
1782     $this->f->isDatabaseError($res);
1783    
1784     // Affichage du message d'informations
1785     printf(
1786     $this->template_help,
1787     $conf["message_help"]
1788     );
1789     // Si il n'y a aucun dossier à afficher
1790     if ($res->numrows() == 0) {
1791     echo _("Vous n'avez pas de recours.");
1792     return;
1793     }
1794     //
1795     $template_table = '
1796     <table class="tab-tab">
1797     <thead>
1798     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
1799     <th class="title col-0 firstcol">
1800     <span class="name">
1801     %s
1802     </span>
1803     </th>
1804     <th class="title col-1">
1805     <span class="name">
1806     %s
1807     </span>
1808     </th>
1809     <th class="title col-2 lastcol">
1810     <span class="name">
1811     %s
1812     </span>
1813     </th>
1814     </tr>
1815     </thead>
1816     <tbody>
1817     %s
1818     </tbody>
1819     </table>
1820     ';
1821     //
1822     $template_line = '
1823     <tr class="tab-data odd">
1824     <td class="col-0 firstcol">
1825     %s
1826     </td>
1827     <td class="col-1 ">
1828     %s
1829     </td>
1830     <td class="col-2 lastcol">
1831     %s
1832     </td>
1833     </tr>
1834     ';
1835     //
1836     $template_href = OM_ROUTE_FORM.'&obj=%s&amp;action=3&amp;idx=%s';
1837     //
1838     $template_link = '
1839     <a class="lienTable" href="%s">
1840 softime 6565 %s
1841 softime 10573 </a>
1842     ';
1843     // Bouton consulter
1844     $template_btn_consulter = '
1845     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
1846     ._('Consulter')
1847     .'</span>
1848     ';
1849     //
1850 softime 6565
1851 softime 10573 /**
1852     * Si il y a des dossiers à afficher, alors on affiche le widget.
1853     */
1854     // On construit le contenu du tableau
1855     $ct_tbody = '';
1856     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1857     // On construit l'attribut href du lien
1858     $ct_href = sprintf(
1859     $template_href,
1860     // obj
1861     $obj,
1862     // idx
1863     $row["dossier"]
1864     );
1865     // On construit la ligne
1866     $ct_tbody .= sprintf(
1867     $template_line,
1868     // Colonne 1 - Numéro de dossier
1869     sprintf(
1870     $template_link,
1871     $ct_href,
1872     $template_btn_consulter
1873     ),
1874     // Colonne 2 - Numéro de dossier
1875     sprintf(
1876     $template_link,
1877     $ct_href,
1878     $row["dossier_libelle"]
1879     ),
1880     // Colonne 3 - Date de depot
1881     sprintf(
1882     $template_link,
1883     $ct_href,
1884     $this->f->formatDate($row["date_depot"])
1885     )
1886     );
1887     }
1888     // Affichage du tableau listant les dossiers
1889     printf(
1890     $template_table,
1891     // Colonne 1 - Consulter
1892     '',
1893 softime 6565 // Colonne 2 - Numéro de dossier
1894 softime 10573 _('dossier'),
1895 softime 6565 // Colonne 3 - Date de depot
1896 softime 10573 _("Date de recours"),
1897     // Le Contenu
1898     $ct_tbody
1899 softime 6565 );
1900     }
1901     /**
1902     * Affichage du footer
1903     */
1904     //
1905 softime 7996 $template_link_footer = OM_ROUTE_TAB.'&obj=%s';
1906 softime 6565 //
1907     $link_footer = sprintf(
1908     $template_link_footer,
1909     $obj
1910     );
1911     //
1912     printf(
1913     $this->template_footer,
1914     $link_footer,
1915     _("Voir +")
1916     );
1917     }
1918    
1919    
1920     /**
1921     * Cette méthode permet de récupérer la configuration du widget 'Mes
1922     * infractions'.
1923     *
1924     * @return array
1925     */
1926     function get_config_dossier_contentieux_infraction($arguments) {
1927     // Initialisation du tableau des paramètres avec ses valeur par défaut
1928     $arguments_default = array(
1929 softime 10573 "filtre" => "instructeur",
1930     "affichage" => "liste"
1931 softime 6565 );
1932     // Vérification des arguments
1933     foreach ($arguments_default as $key => $value) {
1934     //
1935     if (isset($arguments[$key])) {
1936     //
1937     $elem = trim($arguments[$key]);
1938     //
1939     if ($key === "filtre"
1940     && in_array($elem, array("instructeur", "aucun"))) {
1941     // La valeur doit être dans cette liste
1942     $arguments[$key] = $elem;
1943     continue;
1944 softime 10573 } elseif ($key === "affichage"
1945     && in_array($elem, array('liste', 'nombre'))) {
1946     // La valeur doit être dans cette liste
1947     $arguments[$key] = $elem;
1948     continue;
1949 softime 6565 }
1950     }
1951     //
1952     $arguments[$key] = $value;
1953     }
1954     $filtre = $arguments["filtre"];
1955    
1956     // SELECT - CHAMPAFFICHE
1957     //
1958 softime 10573 $trim_concat_terrain = '
1959     TRIM(
1960 softime 11057 CASE
1961     WHEN dossier.adresse_normalisee IS NULL
1962     OR TRIM(dossier.adresse_normalisee) = \'\'
1963     THEN
1964     CONCAT_WS(
1965     \' \',
1966     dossier.terrain_adresse_voie_numero,
1967     dossier.terrain_adresse_voie,
1968     dossier.terrain_adresse_code_postal
1969     )
1970     ELSE
1971     dossier.adresse_normalisee
1972     END
1973 softime 10573 ) as "'.__("localisation").'"';
1974 softime 6565 //
1975     $case_contrevenant = "
1976     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
1977     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
1978     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
1979     END
1980     ";
1981     //
1982     $query_ct_select_champaffiche = array(
1983     'dossier.dossier as "'._("dossier").'"',
1984     'dossier.dossier_libelle as "'._("dossier").'"',
1985     $trim_concat_terrain,
1986     $case_contrevenant.' as "'._("contrevenant").'"',
1987 softime 8477 'donnees_techniques.ctx_reference_dsj as "'._("ctx_reference_dsj").'"',
1988 softime 6565 'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
1989     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
1990     'etat.libelle as "'._("etat").'"',
1991     );
1992    
1993     /**
1994     * Construction de la requête
1995     */
1996     // SELECT
1997     $query_ct_select = "
1998     dossier.dossier,
1999     dossier.dossier_libelle,
2000     dossier.date_depot
2001     ";
2002    
2003     // FROM
2004     $query_ct_from =
2005     DB_PREFIXE."dossier
2006     LEFT JOIN (
2007     SELECT *
2008     FROM ".DB_PREFIXE."lien_dossier_demandeur
2009     INNER JOIN ".DB_PREFIXE."demandeur
2010     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
2011     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
2012     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
2013     ) as demandeur
2014     ON demandeur.dossier = dossier.dossier
2015 softime 8477 INNER JOIN ".DB_PREFIXE."etat
2016     ON dossier.etat = etat.etat%s
2017 softime 6565 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
2018     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
2019     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
2020     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
2021     LEFT JOIN ".DB_PREFIXE."division
2022     ON dossier.division = division.division
2023     LEFT JOIN ".DB_PREFIXE."avis_decision
2024     ON avis_decision.avis_decision=dossier.avis_decision
2025     LEFT OUTER JOIN ".DB_PREFIXE."arrondissement
2026     ON arrondissement.code_postal = dossier.terrain_adresse_code_postal
2027     LEFT JOIN (
2028     SELECT *
2029     FROM ".DB_PREFIXE."lien_dossier_demandeur
2030     INNER JOIN ".DB_PREFIXE."demandeur
2031     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
2032     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
2033     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
2034     ) as demandeur_contrevenant
2035     ON demandeur_contrevenant.dossier = dossier.dossier
2036 softime 8477 INNER JOIN (
2037     SELECT
2038     ctx_reference_dsj,
2039     ctx_infraction,
2040     dossier_instruction
2041     FROM ".DB_PREFIXE."donnees_techniques
2042     ) as donnees_techniques
2043     ON donnees_techniques.dossier_instruction = dossier.dossier
2044 softime 6565 %s
2045     %s
2046     ";
2047    
2048     $query_ct_from_collectivite_filter = "";
2049     $query_ct_from_instructeur_filter = "";
2050     // Filtre sur les dossiers qui concernent l'utilisateur
2051     if ($filtre == "instructeur") {
2052     $query_ct_from_instructeur_filter = "
2053     JOIN ".DB_PREFIXE."instructeur
2054     ON dossier.instructeur=instructeur.instructeur
2055     OR dossier.instructeur_2=instructeur.instructeur
2056     JOIN ".DB_PREFIXE."om_utilisateur
2057     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2058     AND om_utilisateur.login='".$_SESSION['login']."'
2059     ";
2060     }
2061     else {
2062     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
2063     ON dossier.instructeur=instructeur.instructeur
2064 softime 8477 LEFT JOIN ".DB_PREFIXE."instructeur as instructeur_2
2065     ON dossier.instructeur_2=instructeur_2.instructeur
2066 softime 6565 LEFT JOIN ".DB_PREFIXE."om_utilisateur
2067     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
2068     }
2069    
2070     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2071     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2072     // collectivité
2073     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2074     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
2075     ON dossier.om_collectivite=om_collectivite.om_collectivite
2076     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
2077     ";
2078     }
2079     else {
2080     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
2081     ON dossier.om_collectivite=om_collectivite.om_collectivite
2082     ";
2083     }
2084    
2085 softime 8477 // Retourne seulement les dossiers en cours d'instruction, lorsque le
2086     // filtre sur instructeur est activé
2087     $query_ct_where_etat_ctx_filter = "" ;
2088     if ($filtre === "instructeur") {
2089     $query_ct_where_etat_ctx_filter = " AND etat.statut = 'encours'";
2090     }
2091 softime 6565
2092 softime 8477 $query_ct_from = sprintf(
2093     $query_ct_from,
2094     $query_ct_where_etat_ctx_filter,
2095     $query_ct_from_instructeur_filter,
2096     $query_ct_from_collectivite_filter
2097     );
2098    
2099 softime 6565 // WHERE - COMMON
2100     $query_ct_where_common = "
2101     LOWER(dossier_autorisation_type.code) = LOWER('IN')
2102     ";
2103    
2104     // ORDER BY
2105     $query_ct_orderby = "
2106 softime 9245 dossier.date_depot DESC, dossier.dossier DESC
2107 softime 6565 ";
2108    
2109     $query_ct_where_groupe = "";
2110     // Gestion des groupes et confidentialité
2111     include('../sql/pgsql/filter_group_widgets.inc.php');
2112    
2113     /**
2114     * Message d'aide
2115     */
2116     //
2117     $message_filtre = "";
2118     //
2119     switch ($filtre) {
2120     case "instructeur":
2121 softime 8477 $message_filtre = " ".__("en cours d'instruction")." ".__("dont je suis l'instructeur");
2122 softime 6565 break;
2123     case "aucun":
2124     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2125     $message_filtre = " "._("situés dans ma collectivité");
2126     } else {
2127     $message_filtre = " "._("situés dans toutes les collectivités");
2128     }
2129     break;
2130     }
2131     //
2132     $message_help = sprintf(
2133     _("Les dernières infractions%s."),
2134     $message_filtre
2135     );
2136    
2137     /**
2138     * Return
2139     */
2140     //
2141     return array(
2142     "arguments" => $arguments,
2143     "message_help" => $message_help,
2144     "query_ct_select" => $query_ct_select,
2145     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
2146     "query_ct_from" => $query_ct_from,
2147     "query_ct_where" => $query_ct_where_common,
2148     "query_ct_orderby" => $query_ct_orderby
2149     );
2150     }
2151    
2152 softime 7996 /**
2153     * WIDGET DASHBOARD - RSS
2154     *
2155     * Cette fonction gère l'affichage du widget RSS.
2156     *
2157     * Elle récupère trois arguments :
2158     * - urls (l'urls des flux rss séparé par une virgule)
2159     * - mode (le mode utilisé par le widget, soit "server_side" donc uniquement
2160     * sur server, soit "client_side" avec une récuperation des informations en
2161     * javascript)
2162     * - max_item (le nombre d'information provenant du flux, à afficher)
2163     *
2164     * Si mode = "server_side" alors
2165     * le DOM est construit dans la méthode view_widget_rss() de cette classe
2166     *
2167     * Si mode = client_side alors
2168     * le DOM est construit en javascript dans script.js::bind_widget_rss()
2169     *
2170     * @param string $content Contenu du champ "texte" ou "arguments" du widget
2171     * @param string $id Identifiant de l'enregistrement "om_dashboard"
2172     *
2173     * @return void
2174     */
2175     function display_widget_rss($content = null, $id) {
2176     // Liste des paramètres
2177     $params = array("urls", "mode", "max_item");
2178     // Formatage des arguments reçus en paramètres
2179     $arguments = $this->get_arguments($content, $params);
2180 softime 6565
2181 softime 7996 // Requête SQL
2182     $sql_template = "
2183     SELECT om_dashboard.om_widget
2184     FROM %som_dashboard
2185     WHERE om_dashboard.om_dashboard=%s;
2186     ";
2187     $sql = sprintf($sql_template, DB_PREFIXE, $id);
2188     $row = $this->f->db->getone($sql);
2189     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
2190     $this->f->isDatabaseError($row);
2191    
2192     if ($arguments["mode"] === "client_side") {
2193     $widget_template = "
2194     <div class='widget-rss-marker' data-id_widget='%d' data-mode='%s' data-urls='%s' data-max_item='%s'/></div>
2195     ";
2196     echo sprintf($widget_template, $row, "client_side", $arguments['urls'], $arguments['max_item']);
2197     } else {
2198     $widget_template = "
2199     <div class='widget-rss-marker' data-id_widget='%d' data-mode='%s'/></div>
2200     ";
2201     echo sprintf($widget_template, $row, "server_side");
2202     }
2203     }
2204    
2205    
2206    
2207 softime 6565 /**
2208 softime 7996 * WIDGET DASHBOARD
2209     *
2210     * Création du DOM du widget RSS dans le cas server_side.
2211     *
2212     * @return void
2213     */
2214     function view_widget_rss() {
2215     // Liste des paramètres
2216     $params = array("urls", "mode", "max_item");
2217     // Formatage des arguments reçus en paramètres
2218     $arguments = $this->get_arguments($this->getVal('arguments'), $params);
2219     // Récupère les URLs des différents flux dans un tableau
2220     $urls = explode(',', $arguments['urls']);
2221    
2222     // On retire 1 à la valeur de max_item car nous bouclons à partir de 0
2223     $real_max_item = $arguments['max_item'] - 1;
2224    
2225     //Pour chaque url
2226     foreach ($urls as $url) {
2227    
2228     // Initialise le contenu vide
2229     $content = "";
2230    
2231     // Template de l'affichage en liste
2232     $render = "
2233     <ul>
2234     <h4>%s</h4>
2235     %s
2236     </ul>
2237     ";
2238    
2239     // Tempalte de l'affichage du contenu
2240     $content_flux_template = "
2241     <li>
2242     <a href=%s target=_blank>
2243     <h5>%s</h5>
2244     </a>
2245     <p>%s</>
2246     </li>
2247     ";
2248    
2249 softime 9282 // Instanciation de la classe DOMDocument
2250     $xmlDoc = new DOMDocument();
2251     @$ret = $xmlDoc->load($url);
2252     if ($ret !== true) {
2253     printf(
2254     $render,
2255     "Erreur",
2256     "Erreur au chargement de l'URL. Contactez votre administrateur."
2257     );
2258     continue;
2259     }
2260    
2261 softime 7996 // Récupération du nom du flux
2262     $channel_title = $xmlDoc->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
2263    
2264     // Pour chaque item du flux
2265     $x = $xmlDoc->getElementsByTagName('item');
2266     if ($x->length > 0) {
2267     for ($i=0; $i<=$real_max_item; $i++) {
2268     $item_title = $x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
2269     $item_link = $x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
2270     $item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
2271     // Contenu
2272     $content .= sprintf($content_flux_template, $item_link, $item_title, $item_desc);
2273     }
2274     } else {
2275     $content = "Aucune donnée disponible";
2276     }
2277    
2278     // Affiche le contenu du widget
2279     echo sprintf($render, $channel_title, $content);
2280     }
2281     }
2282    
2283     /**
2284     * Définition des actions disponibles sur la classe.
2285     *
2286     * @return void
2287     */
2288     function init_class_actions() {
2289    
2290     // On récupère les actions génériques définies dans la méthode
2291     // d'initialisation de la classe parente
2292     parent::init_class_actions();
2293    
2294     // ACTION - 004 - view_widget_rss
2295     // Permet d'accéder au widget RSS "server_side" depuis une URL
2296     $this->class_actions[4] = array(
2297     "identifier" => "widget-rss",
2298     "view" => "view_widget_rss",
2299     "permission_suffix" => "widget_rss",
2300     );
2301    
2302     }
2303    
2304     /**
2305 softime 6565 * WIDGET DASHBOARD - Mes infractions
2306     * @return void
2307     */
2308     function view_widget_dossier_contentieux_infraction($content = null) {
2309     /**
2310     * Ce widget est configurable via l'interface Web. Lors de la création
2311     * du widget dans le paramétrage il est possible de spécifier la ou les
2312     * options suivantes :
2313     * - filtre :
2314     * = instructeur
2315     * = aucun
2316     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2317     */
2318     // Liste des paramètres
2319 softime 10573 $params = array("filtre", "affichage");
2320 softime 6565 // Formatage des arguments reçus en paramètres
2321     $arguments = $this->get_arguments($content, $params);
2322     // Récupération de la configuration du widget
2323     $conf = $this->get_config_dossier_contentieux_infraction($arguments);
2324     // Récupération du filtre
2325     $filtre = $conf["arguments"]["filtre"];
2326     // Définit l'objet cible
2327     $obj = 'dossier_contentieux_toutes_infractions';
2328     if ($filtre === 'instructeur') {
2329     //
2330     $obj = 'dossier_contentieux_mes_infractions';
2331     }
2332    
2333     /**
2334     * Composition de la requête
2335     */
2336 softime 10573 // Gestion de la requête selon le type d'affichage
2337     $query_ct_orderby = sprintf(
2338     "ORDER BY
2339     %s
2340     LIMIT 5",
2341     $conf["query_ct_orderby"]
2342     );
2343     $query_ct_select = $conf["query_ct_select"];
2344     if ($conf["arguments"]["affichage"] === "nombre") {
2345     $query_ct_orderby = "";
2346     $query_ct_select = "COUNT(*)";
2347     }
2348 softime 6565 $query = sprintf("
2349     SELECT
2350     %s
2351     FROM
2352     %s
2353     WHERE
2354     %s
2355 softime 10573 %s",
2356     $query_ct_select,
2357 softime 6565 $conf["query_ct_from"],
2358     $conf["query_ct_where"],
2359 softime 10573 $query_ct_orderby
2360 softime 6565 );
2361    
2362     /**
2363 softime 10573 * Template nécessaires à l'affichage du widget
2364 softime 6565 */
2365 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
2366     // Exécution de la requête
2367     $res = $this->f->db->getone($query);
2368     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
2369     $this->f->isDatabaseError($res);
2370    
2371 softime 6565 // Affichage du message d'informations
2372 softime 10573 printf(
2373     $this->template_help,
2374     $conf["message_help"]
2375     );
2376     // Si il n'y a aucun dossier à afficher
2377     if (intval($res) == 0) {
2378     echo _("Vous n'avez pas d'infraction.");
2379     return;
2380     }
2381    
2382     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
2383     } else {
2384     // Exécution de la requête
2385     $res = $this->f->db->query($query);
2386     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
2387     $this->f->isDatabaseError($res);
2388    
2389     // Affichage du message d'informations
2390     printf(
2391     $this->template_help,
2392     $conf["message_help"]
2393     );
2394     // Si il n'y a aucun dossier à afficher
2395     if ($res->numrows() == 0) {
2396     echo _("Vous n'avez pas d'infraction.");
2397     return;
2398     }
2399     //
2400     $template_table = '
2401     <table class="tab-tab">
2402     <thead>
2403     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
2404     <th class="title col-0 firstcol">
2405     <span class="name">
2406     %s
2407     </span>
2408     </th>
2409     <th class="title col-1">
2410     <span class="name">
2411     %s
2412     </span>
2413     </th>
2414     <th class="title col-2 lastcol">
2415     <span class="name">
2416     %s
2417     </span>
2418     </th>
2419     </tr>
2420     </thead>
2421     <tbody>
2422     %s
2423     </tbody>
2424     </table>
2425     ';
2426     //
2427     $template_line = '
2428     <tr class="tab-data odd">
2429     <td class="col-0 firstcol">
2430     %s
2431     </td>
2432     <td class="col-1 ">
2433     %s
2434     </td>
2435     <td class="col-2 lastcol">
2436     %s
2437     </td>
2438     </tr>
2439     ';
2440 softime 6565
2441 softime 10573 // Bouton consulter
2442     $template_btn_consulter = '
2443     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
2444     ._('Consulter')
2445     .'</span>
2446     ';
2447     //
2448     $template_href = OM_ROUTE_FORM.'&obj=%s&amp;action=3&amp;idx=%s';
2449     //
2450     $template_link = '
2451     <a class="lienTable" href="%s">
2452 softime 6565 %s
2453 softime 10573 </a>
2454     ';
2455 softime 6565
2456 softime 10573 /**
2457     * Si il y a des dossiers à afficher, alors on affiche le widget.
2458     */
2459     // On construit le contenu du tableau
2460     $ct_tbody = '';
2461     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2462     // On construit l'attribut href du lien
2463     $ct_href = sprintf(
2464     $template_href,
2465     // obj
2466     $obj,
2467     // idx
2468     $row["dossier"]
2469     );
2470     // On construit la ligne
2471     $ct_tbody .= sprintf(
2472     $template_line,
2473     // Colonne 1 - Numéro de dossier
2474     sprintf(
2475     $template_link,
2476     $ct_href,
2477     $template_btn_consulter
2478     ),
2479     // Colonne 2 - Numéro de dossier
2480     sprintf(
2481     $template_link,
2482     $ct_href,
2483     $row["dossier_libelle"]
2484     ),
2485     // Colonne 3 - Date de depot
2486     sprintf(
2487     $template_link,
2488     $ct_href,
2489     $this->f->formatDate($row["date_depot"])
2490     )
2491     );
2492     }
2493     // Affichage du tableau listant les dossiers
2494     printf(
2495     $template_table,
2496     // Colonne 1 - Consulter
2497     '',
2498 softime 6565 // Colonne 2 - Numéro de dossier
2499 softime 10573 _('dossier'),
2500 softime 6565 // Colonne 3 - Date de depot
2501 softime 10573 _("Date de réception"),
2502     // Le Contenu
2503     $ct_tbody
2504 softime 6565 );
2505     }
2506     /**
2507     * Affichage du footer
2508     */
2509     //
2510 softime 7996 $template_link_footer = OM_ROUTE_TAB.'&obj=%s';
2511 softime 6565 //
2512     $link_footer = sprintf(
2513     $template_link_footer,
2514     $obj
2515     );
2516     //
2517     printf(
2518     $this->template_footer,
2519     $link_footer,
2520     _("Voir +")
2521     );
2522     }
2523    
2524     /**
2525 mbroquet 3730 * Cet méthode permet de formater, la chaîne de caractères reçue du
2526     * paramétrage du widget en un tableau de valeurs dont les clés
2527     * correspondent aux clés passées en paramètre.
2528     *
2529     * @param string $content
2530     * @param array $params
2531     *
2532     * @return array
2533     */
2534     function get_arguments($content = null, $params = array()) {
2535     //
2536     $arguments = array();
2537     // On explose les paramètres reçus avec un élément par ligne
2538     $params_tmp1 = explode("\n", $content);
2539     // On boucle sur chaque ligne de paramètre
2540     foreach ($params_tmp1 as $key => $value) {
2541     // On explose le paramètre de sa valeur avec le séparateur '='
2542     $params_tmp2[] = explode("=", $value);
2543     }
2544     // On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue
2545     // est acceptable ou non
2546     foreach ($params_tmp2 as $key => $value) {
2547     //
2548     if (!isset($value[0]) || !isset($value[1])) {
2549     continue;
2550     }
2551     //
2552     if (in_array(trim($value[0]), $params)) {
2553     $arguments[trim($value[0])] = trim($value[1]);
2554     }
2555     }
2556     //
2557     return $arguments;
2558     }
2559    
2560 jymadier 4132 /**
2561 fmichon 4138 * WIDGET DASHBOARD - Retours de messages
2562     *
2563     * @return void
2564     */
2565     function view_widget_messages_retours($content = null) {
2566    
2567     /**
2568     * Ce widget est configurable via l'interface Web. Lors de la création
2569     * du widget dans le paramétrage il est possible de spécifier la ou les
2570     * options suivantes :
2571     *
2572     * - filtre :
2573     * = instructeur
2574     * = division
2575     * = aucun
2576     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2577 softime 6565 *
2578     * - contexte :
2579     * = standard
2580     * = contentieux
2581     * (defaut) Par défaut le contexte est standard.
2582 fmichon 4138 */
2583     // Liste des paramètres
2584 softime 6565 $params = array("filtre", "contexte");
2585 fmichon 4138 // Formatage des arguments reçus en paramètres
2586     $arguments = $this->get_arguments($content, $params);
2587     // Récupération de la configuration du widget
2588     $conf = $this->get_config_messages_retours($arguments);
2589     //
2590     $filtre = $conf["arguments"]["filtre"];
2591 softime 6565 //
2592     $contexte = $conf["arguments"]["contexte"];
2593 fmichon 4138
2594     /**
2595     * Composition de la requête
2596     */
2597     //
2598     $query = sprintf(
2599     "SELECT
2600     count(*)
2601     FROM
2602     %s
2603     WHERE
2604     %s",
2605     $conf["query_ct_from"],
2606 softime 6565 $conf["query_ct_where_common"],
2607     $conf["query_ct_where_groupe"]
2608 fmichon 4138 );
2609    
2610     /**
2611     * Exécution de la requête
2612     */
2613     //
2614     $res = $this->f->db->getone($query);
2615     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
2616     $this->f->isDatabaseError($res);
2617    
2618     // Affichage du message d'informations
2619     printf(
2620     $this->template_help,
2621     $conf["message_help"]
2622     );
2623    
2624     //
2625     if (intval($res) === 0) {
2626     //
2627     echo _("Aucun message non lu.");
2628     return;
2629     }
2630    
2631    
2632     /**
2633     *
2634     */
2635 softime 10573 $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
2636 fmichon 4138
2637 softime 6565 // Définit le lien de redirection vers le listing en fonction du
2638     // contexte et du filtre
2639     if ($contexte === 'standard') {
2640     //
2641     switch ($filtre) {
2642     case 'instructeur':
2643     $obj_href_more_link = 'messages_mes_retours';
2644     break;
2645     case 'division':
2646     $obj_href_more_link = 'messages_retours_ma_division';
2647     break;
2648     case 'aucun':
2649     $obj_href_more_link = 'messages_tous_retours';
2650     break;
2651     }
2652 fmichon 4138 }
2653 softime 6565 //
2654     if ($contexte === 'contentieux') {
2655     //
2656     switch ($filtre) {
2657     case 'instructeur':
2658     $obj_href_more_link = 'messages_contentieux_mes_retours';
2659     break;
2660     case 'division':
2661     $obj_href_more_link = 'messages_contentieux_retours_ma_division';
2662     break;
2663     case 'aucun':
2664     $obj_href_more_link = 'messages_contentieux_tous_retours';
2665     break;
2666     }
2667     }
2668 fmichon 4138
2669     //
2670     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
2671     return;
2672     }
2673     // Affichage du footer
2674     printf(
2675     $this->template_footer,
2676     // href
2677     sprintf(
2678 softime 7996 OM_ROUTE_TAB.'&obj=%s',
2679 fmichon 4138 $obj_href_more_link
2680     ),
2681     // titre
2682     _("Voir +")
2683     );
2684    
2685     }
2686    
2687    
2688     /**
2689     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2690     * messages'.
2691     *
2692     * @return array
2693     */
2694     function get_config_messages_retours($arguments) {
2695     // Initialisation du tableau des paramètres avec ses valeur par défaut
2696     $arguments_default = array(
2697     "filtre" => "instructeur",
2698 softime 6565 "contexte" => "standard",
2699 fmichon 4138 );
2700     // Vérification des arguments
2701     foreach ($arguments_default as $key => $value) {
2702     //
2703     if (isset($arguments[$key])) {
2704     //
2705     $elem = trim($arguments[$key]);
2706     //
2707     if ($key === "filtre"
2708     && in_array($elem, array("instructeur", "division", "aucun"))) {
2709     // La valeur doit être dans cette liste
2710     $arguments[$key] = $elem;
2711     continue;
2712     }
2713 softime 6565 //
2714     if ($key === "contexte"
2715     && in_array($elem, array("standard", "contentieux"))) {
2716     // La valeur doit être dans cette liste
2717     $arguments[$key] = $elem;
2718     continue;
2719     }
2720 fmichon 4138 }
2721     //
2722     $arguments[$key] = $value;
2723     }
2724     //
2725     $filtre = $arguments["filtre"];
2726 softime 6565 //
2727     $contexte = $arguments["contexte"];
2728 fmichon 4138
2729     /**
2730     * Construction de la requête
2731     */
2732 softime 6565 //
2733     $query_ct_from_instructeur_filter = "";
2734     $query_ct_from_division_filter = "";
2735     $query_ct_from_collectivite_filter = "";
2736     //
2737     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
2738     ON dossier.instructeur=instructeur.instructeur
2739     LEFT JOIN ".DB_PREFIXE."om_utilisateur
2740     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2741     LEFT JOIN ".DB_PREFIXE."instructeur as instructeur_2
2742     ON dossier.instructeur_2=instructeur_2.instructeur ";
2743     //
2744     if ($filtre == "instructeur") {
2745     $query_ct_from_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
2746     ON dossier.instructeur=instructeur.instructeur
2747     OR dossier.instructeur_2=instructeur.instructeur
2748     JOIN ".DB_PREFIXE."om_utilisateur
2749     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2750     ";
2751     }
2752     //
2753     $query_ct_from_division_filter = " JOIN ".DB_PREFIXE."division
2754     ON dossier.division=division.division
2755     ";
2756     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2757     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2758     // collectivité
2759     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2760     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
2761     ON dossier.om_collectivite=om_collectivite.om_collectivite
2762     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
2763     ";
2764     } else {
2765     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
2766     ON dossier.om_collectivite=om_collectivite.om_collectivite
2767     ";
2768     }
2769    
2770 fmichon 4138 // FROM
2771     $query_ct_from = "
2772     ".DB_PREFIXE."dossier_message
2773     LEFT JOIN ".DB_PREFIXE."dossier
2774     ON dossier_message.dossier=dossier.dossier
2775 softime 10573 LEFT JOIN ".DB_PREFIXE."etat
2776     ON dossier.etat = etat.etat
2777 nhaye 4791 %s
2778     %s
2779     %s";
2780    
2781 softime 6565 //
2782     $query_ct_from = sprintf($query_ct_from, $query_ct_from_instructeur_filter, $query_ct_from_division_filter, $query_ct_from_collectivite_filter);
2783    
2784     //
2785 nhaye 4791 $query_ct_where_instructeur_filter = "";
2786     $query_ct_where_division_filter = "";
2787     $query_ct_where_collectivite_filter = "";
2788 fmichon 4138 // Filtre sur les dossiers qui concernent l'utilisateur
2789     if ($filtre == "instructeur") {
2790     //
2791 softime 6565 $query_ct_where_instructeur_filter = " AND om_utilisateur.login='".$_SESSION['login']."'
2792     AND dossier_message.destinataire = 'instructeur'
2793 fmichon 4138 ";
2794 softime 6565 //
2795     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2796     $query_ct_where_instructeur_filter = " AND (om_utilisateur.login='".$_SESSION['login']."'
2797     OR dossier_message.destinataire = 'commune')
2798     ";
2799     }
2800 nhaye 4791 }
2801     // Filtre sur les dossier de la division
2802     if ($filtre == "division") {
2803 fmichon 4138 //
2804 softime 6565 $query_ct_where_division_filter = " AND division.division = ".$_SESSION['division']."
2805     AND dossier_message.destinataire = 'instructeur'
2806 fmichon 4138 ";
2807 softime 6565 //
2808     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2809     $query_ct_where_division_filter = " AND (division.division = ".$_SESSION['division']."
2810     OR dossier_message.destinataire = 'commune')
2811     ";
2812     }
2813 fmichon 4138 }
2814 softime 6565
2815     // Filtre les dossiers par contexte
2816     $query_ct_where_groupe_filter = " AND LOWER(groupe.code) != 'ctx'";
2817     if ($contexte === 'contentieux') {
2818     //
2819     $query_ct_where_groupe_filter = " AND LOWER(groupe.code) = 'ctx'";
2820 fmichon 4138 }
2821    
2822 nhaye 4791 // WHERE - COMMON
2823     $query_ct_where_common = "
2824     dossier_message.lu IS FALSE
2825 softime 10573 AND etat.statut != 'cloture'
2826 softime 6565 %s
2827     %s
2828     %s
2829     %s
2830 nhaye 4791 ";
2831    
2832 softime 6565 //
2833     $query_ct_where_common = sprintf($query_ct_where_common, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter, $query_ct_where_groupe_filter);
2834    
2835     // Filtre du groupe
2836     $query_ct_where_groupe = "";
2837     // Gestion des groupes et confidentialité
2838     include('../sql/pgsql/filter_group_widgets.inc.php');
2839    
2840 fmichon 4138 /**
2841     * Message d'aide
2842     */
2843     //
2844     $message_filtre = "";
2845     //
2846     switch ($filtre) {
2847     case "instructeur":
2848 softime 6565 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2849     $message_filtre = " "._("dont je suis l'instructeur ou dont le destinataire est 'commune'");
2850     } else {
2851     $message_filtre = " "._("dont je suis l'instructeur et dont le destinataire est 'instructeur'");
2852     }
2853 fmichon 4138 break;
2854     case "division":
2855 softime 6565 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2856     $message_filtre = " "._("situés dans ma division ou dont le destinataire est 'commune'");
2857     } else {
2858     $message_filtre = " "._("situés dans ma division et dont le destinataire est 'instructeur'");
2859     }
2860 fmichon 4138 break;
2861     case "aucun":
2862     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2863     $message_filtre = " "._("situés dans ma collectivité");
2864     } else {
2865     $message_filtre = " "._("situés dans toutes les collectivités");
2866     }
2867     break;
2868     }
2869     //
2870 softime 6565 $template_message_help = _("Les messages marqués comme 'non lu' qui concernent des dossiers d'instruction%s.");
2871     //
2872     if ($contexte === 'contentieux') {
2873     //
2874     $template_message_help = _("Les messages marqués comme 'non lu' qui concernent des dossiers contentieux%s.");
2875     }
2876     //
2877 fmichon 4138 $message_help = sprintf(
2878 softime 6565 $template_message_help,
2879 fmichon 4138 $message_filtre
2880     );
2881    
2882     /**
2883     * Return
2884     */
2885     //
2886     return array(
2887     "arguments" => $arguments,
2888     "message_help" => $message_help,
2889     "query_ct_from" => $query_ct_from,
2890     "query_ct_where_common" => $query_ct_where_common,
2891 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
2892 fmichon 4138 );
2893     }
2894    
2895     /**
2896 jymadier 4132 * WIDGET DASHBOARD - Retours de consultation
2897     *
2898     * @return void
2899     */
2900     function view_widget_consultation_retours($content = null) {
2901    
2902     /**
2903     * Ce widget est configurable via l'interface Web. Lors de la création
2904     * du widget dans le paramétrage il est possible de spécifier la ou les
2905     * options suivantes :
2906     *
2907     * - filtre :
2908     * = instructeur
2909     * = division
2910     * = aucun
2911     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2912     */
2913     // Liste des paramètres
2914     $params = array("filtre", );
2915     // Formatage des arguments reçus en paramètres
2916     $arguments = $this->get_arguments($content, $params);
2917     // Récupération de la configuration du widget
2918     $conf = $this->get_config_consultation_retours($arguments);
2919     //
2920     $filtre = $conf["arguments"]["filtre"];
2921    
2922     /**
2923     * Composition de la requête
2924     */
2925     //
2926     $query = sprintf(
2927     "SELECT
2928     count(*)
2929     FROM
2930     %s
2931     WHERE
2932     %s",
2933     $conf["query_ct_from"],
2934 nhaye 4791 $conf["query_ct_where_common"]
2935 jymadier 4132 );
2936    
2937     /**
2938     * Exécution de la requête
2939     */
2940     //
2941     $res = $this->f->db->getone($query);
2942     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
2943     $this->f->isDatabaseError($res);
2944    
2945     // Affichage du message d'informations
2946     printf(
2947     $this->template_help,
2948     $conf["message_help"]
2949     );
2950    
2951     //
2952     if (intval($res) === 0) {
2953     //
2954     echo _("Aucun retour de consultation non lu.");
2955     return;
2956     }
2957    
2958    
2959     /**
2960     *
2961     */
2962 softime 10573 $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
2963 jymadier 4132 /**
2964     *
2965     */
2966     if ($filtre === "aucun") {
2967     $obj_href_more_link = "consultation_tous_retours";
2968     } elseif ($filtre === "division") {
2969     $obj_href_more_link = "consultation_retours_ma_division";
2970     } else {
2971     $obj_href_more_link = "consultation_mes_retours";
2972     }
2973    
2974     //
2975     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
2976     return;
2977     }
2978     // Affichage du footer
2979     printf(
2980     $this->template_footer,
2981     // href
2982     sprintf(
2983 softime 7996 OM_ROUTE_TAB.'&obj=%s',
2984 jymadier 4132 $obj_href_more_link
2985     ),
2986     // titre
2987     _("Voir +")
2988     );
2989    
2990     }
2991    
2992    
2993     /**
2994     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2995     * consultation'.
2996     *
2997     * @return array
2998     */
2999     function get_config_consultation_retours($arguments) {
3000 softime 7366 // Initialisation du tableau des paramètres avec ses valeurs par défaut
3001 jymadier 4132 $arguments_default = array(
3002     "filtre" => "instructeur",
3003     );
3004     // Vérification des arguments
3005     foreach ($arguments_default as $key => $value) {
3006     //
3007     if (isset($arguments[$key])) {
3008     //
3009     $elem = trim($arguments[$key]);
3010     //
3011     if ($key === "filtre"
3012     && in_array($elem, array("instructeur", "division", "aucun"))) {
3013     // La valeur doit être dans cette liste
3014     $arguments[$key] = $elem;
3015     continue;
3016     }
3017     }
3018     //
3019     $arguments[$key] = $value;
3020     }
3021     //
3022     $filtre = $arguments["filtre"];
3023    
3024     /**
3025     * Construction de la requête
3026     */
3027     // FROM
3028     $query_ct_from = "
3029     ".DB_PREFIXE."consultation
3030     LEFT JOIN ".DB_PREFIXE."avis_consultation
3031     ON consultation.avis_consultation=avis_consultation.avis_consultation
3032     LEFT JOIN ".DB_PREFIXE."dossier
3033     ON consultation.dossier=dossier.dossier
3034     LEFT JOIN ".DB_PREFIXE."service
3035     ON consultation.service=service.service
3036 nhaye 4791 %s
3037     %s
3038     %s";
3039    
3040     $query_ct_where_instructeur_filter = "";
3041     $query_ct_where_division_filter = "";
3042     $query_ct_where_collectivite_filter = "";
3043 jymadier 4132 // Filtre sur les dossiers qui concernent l'utilisateur
3044 softime 7366 if ($filtre === "instructeur") {
3045 jymadier 4132 //
3046 nhaye 4791 $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3047     ON dossier.instructeur=instructeur.instructeur
3048     JOIN ".DB_PREFIXE."om_utilisateur
3049     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3050     AND om_utilisateur.login='".$_SESSION['login']."'
3051 jymadier 4132 ";
3052 nhaye 4793 } else {
3053 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
3054 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
3055     LEFT JOIN ".DB_PREFIXE."om_utilisateur
3056     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
3057 nhaye 4791 }
3058     // Filtre sur les dossier de la division
3059 softime 7366 if ($filtre === "division") {
3060 jymadier 4132 //
3061 nhaye 4791 $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3062     ON dossier.division=division.division
3063     AND division.division = ".$_SESSION['division']."
3064 jymadier 4132 ";
3065 nhaye 4793 } else {
3066 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
3067 nhaye 4793 ON dossier.division=division.division";
3068 jymadier 4132 }
3069     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3070     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3071     // collectivité
3072     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3073 nhaye 4791 $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3074     ON dossier.om_collectivite=om_collectivite.om_collectivite
3075     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3076 jymadier 4132 ";
3077 nmeucci 4799 } else {
3078     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3079     ON dossier.om_collectivite=om_collectivite.om_collectivite
3080     ";
3081 jymadier 4132 }
3082    
3083 nhaye 4791 $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3084    
3085     // WHERE - COMMON
3086     $query_ct_where_common = "
3087     consultation.lu IS FALSE
3088     ";
3089    
3090 jymadier 4132 /**
3091     * Message d'aide
3092     */
3093     //
3094     $message_filtre = "";
3095     //
3096     switch ($filtre) {
3097     case "instructeur":
3098     $message_filtre = " "._("dont je suis l'instructeur");
3099     break;
3100     case "division":
3101     $message_filtre = " "._("situés dans ma division");
3102     break;
3103     case "aucun":
3104     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3105     $message_filtre = " "._("situés dans ma collectivité");
3106     } else {
3107     $message_filtre = " "._("situés dans toutes les collectivités");
3108     }
3109     break;
3110     }
3111     //
3112     $message_help = sprintf(
3113     _("Les consultations marquées comme 'non lu' qui concernent des ".
3114     "dossiers d'instruction%s."),
3115     $message_filtre
3116     );
3117    
3118     /**
3119     * Return
3120     */
3121     //
3122     return array(
3123     "arguments" => $arguments,
3124     "message_help" => $message_help,
3125     "query_ct_from" => $query_ct_from,
3126     "query_ct_where_common" => $query_ct_where_common,
3127     );
3128     }
3129    
3130 softime 4291
3131     /**
3132 softime 7366 * WIDGET DASHBOARD - widget_commission_retours
3133     *
3134     * Ce widget est configurable via l'interface Web. Lors de la création
3135     * du widget dans le paramétrage il est possible de spécifier la ou les
3136     * options suivantes :
3137     *
3138     * - filtre :
3139     * = instructeur
3140     * = division
3141     * = aucun
3142     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
3143     *
3144     * @param string $content Arguments pour le widget, ici les filtres.
3145     * @return void
3146     */
3147     function view_widget_commission_retours($content = null) {
3148     // Liste des paramètres
3149     $params = array("filtre", );
3150     // Formatage des arguments reçus en paramètres
3151     $arguments = $this->get_arguments($content, $params);
3152     // Récupération de la configuration du widget
3153     $conf = $this->get_config_commission_retours($arguments);
3154     //
3155     $filtre = $conf["arguments"]["filtre"];
3156    
3157     /**
3158     * Composition de la requête
3159     */
3160     //
3161     $query = sprintf(
3162     "SELECT
3163     count(*)
3164     FROM
3165     %s
3166     WHERE
3167     %s",
3168     $conf["query_ct_from"],
3169     $conf["query_ct_where_common"]
3170     );
3171    
3172     /**
3173     * Exécution de la requête
3174     */
3175     //
3176     $res = $this->f->db->getone($query);
3177     $this->addToLog(__METHOD__ . "(): db->getone(\"" . $query . "\");", VERBOSE_MODE);
3178     $this->f->isDatabaseError($res);
3179    
3180     // Affichage du message d'informations
3181     printf(
3182     $this->template_help,
3183     $conf["message_help"]
3184     );
3185    
3186     if (intval($res) === 0) {
3187     //
3188     echo _("Aucun retour de commission non lu.");
3189     return;
3190     }
3191    
3192    
3193     /**
3194     * Panel
3195     */
3196 softime 10573 $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
3197 softime 7366
3198     /**
3199     * Widget footer
3200     */
3201     if ($filtre === "aucun") {
3202     $obj_href_more_link = "commission_tous_retours";
3203     } elseif ($filtre === "division") {
3204     $obj_href_more_link = "commission_retours_ma_division";
3205     } else {
3206     $obj_href_more_link = "commission_mes_retours";
3207     }
3208    
3209     //
3210     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link . "_tab"), "OR")) {
3211     return;
3212     }
3213     // Affichage du footer
3214     printf(
3215     $this->template_footer,
3216     // href
3217     sprintf(
3218 softime 7996 OM_ROUTE_TAB.'&obj=%s',
3219 softime 7366 $obj_href_more_link
3220     ),
3221     // titre
3222     _("Voir +")
3223     );
3224     }
3225    
3226     /**
3227     * Cette méthode permet de récupérer la configuration du widget 'Retours de
3228     * consultation'.
3229     *
3230     * @return array
3231     */
3232     function get_config_commission_retours($arguments) {
3233     // Initialisation du tableau des paramètres avec ses valeurs par défaut
3234     $arguments_default = array(
3235     "filtre" => "instructeur",
3236     );
3237     // Vérification des arguments
3238     foreach ($arguments_default as $key => $value) {
3239     //
3240     if (isset($arguments[$key])) {
3241     //
3242     $elem = trim($arguments[$key]);
3243     //
3244     if ($key === "filtre"
3245     && in_array($elem, array("instructeur", "division", "aucun"))) {
3246     // La valeur doit être dans cette liste
3247     $arguments[$key] = $elem;
3248     continue;
3249     }
3250     }
3251     //
3252     $arguments[$key] = $value;
3253     }
3254     //
3255     $filtre = $arguments["filtre"];
3256    
3257     /**
3258     * Construction de la requête
3259     */
3260     // FROM
3261     $query_ct_from ="
3262     " . DB_PREFIXE . "dossier_commission
3263     LEFT JOIN " . DB_PREFIXE . "dossier
3264     ON dossier_commission.dossier=dossier.dossier
3265     LEFT JOIN " . DB_PREFIXE . "commission
3266     ON dossier_commission.commission=commission.commission
3267     %s
3268     %s
3269     %s";
3270    
3271     $query_ct_where_instructeur_filter = "";
3272     $query_ct_where_division_filter = "";
3273     $query_ct_where_collectivite_filter = "";
3274    
3275     // Filtre sur les dossiers qui concernent l'utilisateur
3276     if ($filtre === "instructeur") {
3277     //
3278     $query_ct_where_instructeur_filter = " JOIN " . DB_PREFIXE . "instructeur
3279     ON dossier.instructeur=instructeur.instructeur
3280     JOIN " . DB_PREFIXE . "om_utilisateur
3281     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3282     AND om_utilisateur.login='" . $_SESSION['login'] . "'
3283     ";
3284     } else {
3285     $query_ct_where_instructeur_filter = " LEFT JOIN " . DB_PREFIXE . "instructeur
3286     ON dossier.instructeur=instructeur.instructeur
3287     LEFT JOIN " . DB_PREFIXE . "om_utilisateur
3288     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
3289     }
3290     // Filtre sur les dossier de la division
3291     if ($filtre === "division") {
3292     //
3293     $query_ct_where_division_filter = " JOIN " . DB_PREFIXE . "division
3294     ON dossier.division=division.division
3295     AND division.division = " . $_SESSION['division'] . "
3296     ";
3297     } else {
3298     $query_ct_where_division_filter = " LEFT JOIN " . DB_PREFIXE . "division
3299     ON dossier.division=division.division";
3300     }
3301     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3302     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3303     // collectivité
3304     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3305     $query_ct_where_collectivite_filter = " JOIN " . DB_PREFIXE . "om_collectivite
3306     ON dossier.om_collectivite=om_collectivite.om_collectivite
3307     AND om_collectivite.om_collectivite=" . $_SESSION['collectivite'] . "
3308     ";
3309     } else {
3310     $query_ct_where_collectivite_filter = " LEFT JOIN " . DB_PREFIXE . "om_collectivite
3311     ON dossier.om_collectivite=om_collectivite.om_collectivite
3312     ";
3313     }
3314    
3315     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3316    
3317     // WHERE - COMMON
3318     $query_ct_where_common = "
3319     dossier_commission.lu IS FALSE
3320     ";
3321    
3322     /**
3323     * Message d'aide
3324     */
3325     //
3326     $message_filtre = "";
3327     //
3328     switch ($filtre) {
3329     case "instructeur":
3330     $message_filtre = " " . _("dont je suis l'instructeur");
3331     break;
3332     case "division":
3333     $message_filtre = " " . _("situés dans ma division");
3334     break;
3335     case "aucun":
3336     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3337     $message_filtre = " " . _("situés dans ma collectivité");
3338     } else {
3339     $message_filtre = " " . _("situés dans toutes les collectivités");
3340     }
3341     break;
3342     }
3343     //
3344     $message_help = sprintf(
3345     _("Les retours de commission marqués comme 'non lu' qui concernent des " .
3346     "dossiers d'instruction%s."),
3347     $message_filtre
3348     );
3349    
3350     return array(
3351     "arguments" => $arguments,
3352     "message_help" => $message_help,
3353     "query_ct_from" => $query_ct_from,
3354     "query_ct_where_common" => $query_ct_where_common,
3355     );
3356    
3357     }
3358    
3359    
3360     /**
3361 softime 8989 * WIDGET DASHBOARD - Dossiers incomplets ou majorés sans date de notification
3362 softime 4291 *
3363     * @return void
3364     */
3365     function view_widget_dossiers_evenement_incomplet_majoration($content = null) {
3366    
3367     /**
3368     * Ce widget est configurable via l'interface Web. Lors de la création
3369     * du widget dans le paramétrage il est possible de spécifier la ou les
3370     * options suivantes :
3371     *
3372     * - filtre :
3373     * = instructeur
3374     * = division
3375     * = aucun
3376     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
3377     */
3378     // Liste des paramètres
3379 softime 10573 $params = array("filtre", "affichage");
3380 softime 4291 // Formatage des arguments reçus en paramètres
3381     $arguments = $this->get_arguments($content, $params);
3382     // Récupération de la configuration du widget
3383     $conf = $this->get_config_dossiers_evenement_incomplet_majoration($arguments);
3384     //
3385     $filtre = $conf["arguments"]["filtre"];
3386    
3387     /**
3388     * Composition de la requête
3389     */
3390 softime 10573 // Gestion de la requête selon le type d'affichage
3391     $query_ct_orderby = sprintf(
3392     "ORDER BY
3393     %s
3394     LIMIT 10",
3395     $conf["query_ct_orderby"]
3396     );
3397     $query_ct_select = $conf["query_ct_select"];
3398     if ($conf["arguments"]["affichage"] === "nombre") {
3399     $query_ct_orderby = "";
3400     $query_ct_select = "COUNT(*)";
3401     }
3402 softime 4291 $query = sprintf("
3403     SELECT
3404     %s
3405     FROM
3406     %s
3407     WHERE
3408     %s
3409 softime 6565 %s
3410 softime 10573 %s",
3411     $query_ct_select,
3412 softime 4291 $conf["query_ct_from"],
3413     $conf["query_ct_where_common"],
3414 softime 6565 $conf["query_ct_where_groupe"],
3415 softime 10573 $query_ct_orderby
3416 softime 4291 );
3417    
3418     /**
3419 softime 10573 * Template nécessaires à l'affichage du widget
3420 softime 4291 */
3421 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
3422     // Exécution de la requête
3423     $res = $this->f->db->getone($query);
3424     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
3425     $this->f->isDatabaseError($res);
3426    
3427 softime 4291 // Affichage du message d'informations
3428 softime 10573 printf(
3429     $this->template_help,
3430     $conf["message_help"]
3431     );
3432     // Si il n'y a aucun dossier à afficher
3433     if (intval($res) == 0) {
3434     echo _("Vous n'avez pas de dossiers d'instruction avec un événement d'incomplétude ou de majoration de délai sans date de notification.");
3435     return;
3436     }
3437    
3438     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
3439     } else {
3440     // Exécution de la requête
3441     $res = $this->f->db->query($query);
3442     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
3443     $this->f->isDatabaseError($res);
3444    
3445     // Affichage du message d'informations
3446     printf(
3447     $this->template_help,
3448     $conf["message_help"]
3449     );
3450     // Si il n'y a aucun dossier à afficher
3451     if ($res->numrows() == 0) {
3452     echo _("Vous n'avez pas de dossiers d'instruction avec un événement d'incomplétude ou de majoration de délai sans date de notification.");
3453     return;
3454     }
3455    
3456     // Bouton consulter
3457     $template_btn_consulter = '
3458     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
3459     ._('Consulter')
3460     .'</span>
3461     ';
3462 softime 4291
3463 softime 10573 $template_table = '
3464     <table class="tab-tab">
3465     <thead>
3466     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3467     <th class="title col-0 firstcol">
3468     <span class="name">
3469     %s
3470     </span>
3471     </th>
3472     <th class="title col-1">
3473     <span class="name">
3474     %s
3475     </span>
3476     </th>
3477     <th class="title col-2 lastcol">
3478     <span class="name">
3479     %s
3480     </span>
3481     </th>
3482     </tr>
3483     </thead>
3484     <tbody>
3485     %s
3486     </tbody>
3487     </table>
3488     ';
3489 softime 4291
3490 softime 10573 // Données dans le tableau
3491     //
3492     $template_line = '
3493     <tr class="tab-data odd">
3494     <td class="col-1 firstcol">
3495     %s
3496     </td>
3497     <td class="col-1">
3498     %s
3499     </td>
3500     <td class="col-2 lastcol">
3501     %s
3502     </td>
3503     </tr>
3504     ';
3505     //
3506     $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
3507     //
3508     $template_link = '
3509     <a class="lienTable" href="%s">
3510 softime 4291 %s
3511 softime 10573 </a>
3512     ';
3513 softime 4291
3514 softime 10573 /**
3515     * Si il y a des dossiers à afficher, alors on affiche le widget.
3516     */
3517     // On construit le contenu du tableau
3518     $ct_tbody = '';
3519     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3520     // On construit l'attribut href du lien
3521     $ct_href = sprintf(
3522     $template_href,
3523     // idx
3524     $row["dossier"]
3525     );
3526     // On construit la ligne
3527     $ct_tbody .= sprintf(
3528     $template_line,
3529     // Colonne 1 - Bouton consulter
3530     sprintf(
3531     $template_link,
3532     $ct_href,
3533     $template_btn_consulter
3534     ),
3535     // Colonne 2 - Numéro de dossier
3536     sprintf(
3537     $template_link,
3538     $ct_href,
3539     $row["dossier_libelle"]
3540     ),
3541     // Colonne 3 - Date de dépôt
3542     sprintf(
3543     $template_link,
3544     $ct_href,
3545     $this->f->formatDate($row["date_depot"])
3546     )
3547     );
3548     }
3549     // Affichage du tableau listant les dossiers
3550     printf(
3551     $template_table,
3552 softime 4291 // Colonne 1 - Bouton consulter
3553 softime 10573 '',
3554 softime 4291 // Colonne 2 - Numéro de dossier
3555 softime 10573 _('dossier'),
3556     // Colonne 3 - Date de dépôt du dossier
3557     _('date_depot'),
3558     // Contenu du tableau
3559     $ct_tbody
3560 softime 4291 );
3561     }
3562    
3563     // Affichage du footer
3564     printf(
3565     $this->template_footer,
3566     // href (avec les paramètres du widget)
3567     sprintf(
3568 softime 7996 OM_ROUTE_TAB."&obj=dossiers_evenement_incomplet_majoration&filtre=%s",
3569 softime 4291 $filtre
3570     ),
3571     // titre
3572 softime 8989 __("Voir tous les dossiers d'instruction avec un événement d'incomplétude ou de majoration de délai sans date de notification")
3573 softime 4291 );
3574     }
3575    
3576    
3577     /**
3578     * Cette méthode permet de récupérer la configuration du widget 'Retours de
3579     * consultation'.
3580     *
3581     * @return array
3582     */
3583     function get_config_dossiers_evenement_incomplet_majoration($arguments) {
3584     // Initialisation du tableau des paramètres avec ses valeur par défaut
3585     $arguments_default = array(
3586     "filtre" => "instructeur",
3587 softime 10573 "affichage" => "liste"
3588 softime 4291 );
3589     // Vérification des arguments
3590     foreach ($arguments_default as $key => $value) {
3591     //
3592     if (isset($arguments[$key])) {
3593     //
3594     $elem = trim($arguments[$key]);
3595     //
3596     if ($key === "filtre"
3597     && in_array($elem, array("instructeur", "division", "aucun"))) {
3598     // La valeur doit être dans cette liste
3599     $arguments[$key] = $elem;
3600     continue;
3601 softime 10573 } elseif ($key === "affichage"
3602     && in_array($elem, array('liste', 'nombre'))) {
3603     // La valeur doit être dans cette liste
3604     $arguments[$key] = $elem;
3605     continue;
3606 softime 4291 }
3607     }
3608     //
3609     $arguments[$key] = $value;
3610     }
3611     //
3612     $filtre = $arguments["filtre"];
3613    
3614     /**
3615     * Construction de la requête
3616     */
3617     // SELECT
3618     $query_ct_select = "
3619     dossier.dossier,
3620     dossier.dossier_libelle,
3621     dossier.date_depot
3622     ";
3623     // SELECT - CHAMPAFFICHE
3624     $query_ct_select_champaffiche = array(
3625     'dossier.dossier as "'._("dossier").'"',
3626     'dossier.dossier_libelle as "'._("dossier").'"',
3627     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"'
3628     );
3629     // FROM
3630     $query_ct_from = "
3631     ".DB_PREFIXE."dossier
3632     LEFT JOIN
3633     ".DB_PREFIXE."instruction
3634     ON
3635     dossier.dossier = instruction.dossier
3636     LEFT JOIN
3637     ".DB_PREFIXE."evenement
3638     ON
3639     instruction.evenement = evenement.evenement
3640 nhaye 4791 %s
3641     %s
3642     %s
3643 softime 4291 ";
3644 nhaye 4791
3645     $query_ct_where_instructeur_filter = "";
3646     $query_ct_where_division_filter = "";
3647     $query_ct_where_collectivite_filter = "";
3648     // Filtre sur les dossiers qui concernent l'utilisateur
3649     if ($filtre == "instructeur") {
3650     //
3651     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3652     ON dossier.instructeur=instructeur.instructeur
3653     JOIN ".DB_PREFIXE."om_utilisateur
3654     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3655     AND om_utilisateur.login='".$_SESSION['login']."'
3656     ";
3657 nhaye 4793 } else {
3658 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
3659 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
3660     LEFT JOIN ".DB_PREFIXE."om_utilisateur
3661     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
3662 nhaye 4791 }
3663     // Filtre sur les dossier de la division
3664     if ($filtre == "division") {
3665     //
3666     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3667     ON dossier.division=division.division
3668     AND division.division = ".$_SESSION['division']."
3669     ";
3670 nhaye 4793 } else {
3671 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
3672 nhaye 4793 ON dossier.division=division.division";
3673 nhaye 4791 }
3674     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3675     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3676     // collectivité
3677     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3678     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3679     ON dossier.om_collectivite=om_collectivite.om_collectivite
3680     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3681     ";
3682 nmeucci 4799 } else {
3683     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3684     ON dossier.om_collectivite=om_collectivite.om_collectivite
3685     ";
3686 nhaye 4791 }
3687    
3688     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3689    
3690 softime 4291 // WHERE - COMMON
3691     $query_ct_where_common = "
3692     (
3693     LOWER(evenement.type) = 'incompletude' OR
3694     LOWER(evenement.type) = 'majoration_delai'
3695     ) AND
3696     (
3697     instruction.date_envoi_rar > CURRENT_TIMESTAMP - interval '1 month' AND
3698     instruction.date_envoi_rar <= CURRENT_TIMESTAMP
3699     ) AND
3700     instruction.date_retour_rar IS NULL AND
3701     evenement.retour = 'f'
3702     ";
3703    
3704     // ORDER BY
3705     $query_ct_orderby = "
3706     dossier.date_depot desc
3707     ";
3708    
3709 softime 6565 $query_ct_where_groupe = "";
3710     // Gestion des groupes et confidentialité
3711     include('../sql/pgsql/filter_group_widgets.inc.php');
3712    
3713 softime 4291 /**
3714     * Message d'aide
3715     */
3716     //
3717     $message_filtre = "";
3718     //
3719     switch ($filtre) {
3720     case "instructeur":
3721     $message_filtre = " "._("dont je suis l'instructeur");
3722     break;
3723     case "division":
3724     $message_filtre = " "._("situés dans ma division");
3725     break;
3726     case "aucun":
3727     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3728     $message_filtre = " "._("situés dans ma collectivité");
3729     } else {
3730     $message_filtre = " "._("situés dans toutes les collectivités");
3731     }
3732     break;
3733     }
3734     //
3735     $message_help = sprintf(
3736 softime 8989 __("Les dossiers d'instruction%s qui ont un événement d'incomplétude ou de majoration de délai avec une date d'envoi AR, mais sans date de notification."),
3737 softime 4291 $message_filtre
3738     );
3739    
3740     /**
3741     * Return
3742     */
3743     //
3744     return array(
3745     "arguments" => $arguments,
3746     "message_help" => $message_help,
3747     "query_ct_select" => $query_ct_select,
3748     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3749     "query_ct_from" => $query_ct_from,
3750     "query_ct_where_common" => $query_ct_where_common,
3751 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
3752 softime 4291 "query_ct_orderby" => $query_ct_orderby,
3753     );
3754     }
3755    
3756 softime 6565
3757     /**
3758     * WIDGET DASHBOARD - widget_infos_profil.
3759     */
3760     function view_widget_infos_profil($content = null) {
3761    
3762     /**
3763     * Template nécessaires à l'affichage du widget
3764     */
3765     //
3766     $template_table = '
3767     </br>
3768     <h4>Liste des accès</h4>
3769     <table class="tab-tab">
3770     <thead>
3771     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3772     <th class="title col-0 firstcol">
3773     <span class="name">
3774     %s
3775     </span>
3776     </th>
3777     <th class="title col-1">
3778     <span class="name">
3779     %s
3780     </span>
3781     </th>
3782     <th class="title col-2 lastcol">
3783     <span class="name">
3784     %s
3785     </span>
3786     </th>
3787     </tr>
3788     </thead>
3789     <tbody>
3790     %s
3791     </tbody>
3792     </table>
3793     ';
3794     //
3795     $template_line = '
3796     <tr class="tab-data odd">
3797     <td class="col-1 firstcol">
3798     %s
3799     </td>
3800     <td class="col-1">
3801     %s
3802     </td>
3803     <td class="col-2 lastcol">
3804     %s
3805     </td>
3806     </tr>
3807     ';
3808    
3809    
3810     // Récupère les informations sur l'utilisateur
3811     $this->f->getUserInfos();
3812    
3813     // Si l'utilisateur est loggé $_SESSION existe
3814     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
3815    
3816     // On compose le bloc html d'affichage des informations de l'utilisateur
3817     $bloc_infos_profil = "
3818     %s
3819     <div class=\"profil-infos\">
3820     <h4>Utilisateur</h4>
3821     <div class=\"profil-infos-profil\">
3822     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3823     </div>
3824     <div class=\"profil-infos-nom\">
3825     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3826     </div>
3827     ";
3828    
3829     // Si l'utilisateur connecté est un instructeur
3830     if ($this->f->isUserInstructeur() === true) {
3831    
3832     // On compose le bloc html d'affichage des informations de l'utilisateur
3833     $bloc_infos_profil .= "
3834     <div class=\"profil-infos-division\">
3835     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3836     </div>
3837     ";
3838    
3839     // Requête de récupération de la qualité de l'instructeur
3840     $query = sprintf(
3841     "SELECT
3842     instructeur_qualite.libelle
3843     FROM
3844     " . DB_PREFIXE. "instructeur
3845     INNER JOIN " . DB_PREFIXE . "instructeur_qualite
3846     ON instructeur.instructeur_qualite=instructeur_qualite.instructeur_qualite
3847     WHERE
3848     instructeur.om_utilisateur = " . intval($this->f->om_utilisateur["om_utilisateur"])
3849     );
3850     $instr_qualite_lib = $this->f->db->getone($query);
3851     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
3852     $this->f->isDatabaseError($instr_qualite_lib);
3853     // S'il y a un résultat
3854     if ($instr_qualite_lib !== null) {
3855     $bloc_infos_profil .= "
3856     <div class=\"profil-infos-instructeur_qualite\">
3857     <span class=\"libelle\">" . _("Qualité") . "</span> : <span class=\"value\">" . $instr_qualite_lib . "</span>
3858     </div>
3859     ";
3860     }
3861     } else {
3862     // Pour éviter une NOTICE
3863     $this->f->om_utilisateur["code"] = '';
3864     }
3865     //
3866     $bloc_infos_profil .= "</div>";
3867    
3868     // Ajout d'un tableau listant les groupes de l'utilisateur ainsi que ses
3869     // accès aux groupes
3870     $msg_erreur_groupe = '';
3871     $bloc_tableau_droits = '';
3872     // Si le profil et l'utilisateur n'ont pas de groupe défini
3873     if (isset($_SESSION['groupe']) === false) {
3874     $msg_erreur_groupe = '
3875     <div class="message ui-widget ui-corner-all ui-state-highlight ui-state-error borderless">
3876     <p>
3877     <span class="ui-icon ui-icon-info"></span>
3878     <span class="text">Problème de paramétrage : vous n\'avez pas de groupe associé.</span>
3879     </p>
3880     </div>
3881     ';
3882     } else {
3883     $ct_tbody = '';
3884     // On construit le contenu du tableau
3885     foreach ($_SESSION['groupe'] as $key => $value) {
3886     if ($value['confidentiel'] === true) {
3887     $value['confidentiel'] = _('Oui');
3888     }
3889     else {
3890     $value['confidentiel'] = _('Non');
3891     }
3892     if ($value['enregistrement_demande'] === true) {
3893     $value['enregistrement_demande'] = _('Oui');
3894     }
3895     else {
3896     $value['enregistrement_demande'] = _('Non');
3897     }
3898     // On construit la ligne
3899     $ct_tbody .= sprintf(
3900     $template_line,
3901     // Colonne 1 - Libellé du groupe
3902     $value["libelle"],
3903     // Colonne 2 - A accès aux dossiers confidentiels
3904     $value["confidentiel"],
3905     // Colonne 3 - Peut créer une demande
3906     $value["enregistrement_demande"]
3907     );
3908     }
3909     // Affichage du tableau listant les dossiers
3910     $bloc_infos_profil .= sprintf(
3911     $template_table,
3912     // Colonne 1 - Libellé du groupe
3913     _('groupe'),
3914     // Colonne 2 - A accès aux dossiers confidentiels
3915     _('dossiers confidentiels'),
3916     // Colonne 3 - Peut créer une demande
3917     _('enregistrement demande'),
3918     // Contenu du tableau
3919     $ct_tbody
3920     );
3921     }
3922     // Affichage du bloc html avec les variables associées
3923     printf(
3924     $bloc_infos_profil,
3925     $msg_erreur_groupe,
3926     _('Profil'), $this->f->om_utilisateur["libelle_profil"],
3927     _('Nom'), $this->f->om_utilisateur["nom"],
3928     _('Division'), $this->f->om_utilisateur["code"]
3929     );
3930     }
3931     }
3932    
3933    
3934     /**
3935     * Cette méthode permet de récupérer la configuration du widget
3936     * 'Mes contradictoires' ou 'Les contradictoires'.
3937     *
3938     * @return array
3939     */
3940     function get_config_dossier_contentieux_contradictoire($arguments) {
3941     // Initialisation du tableau des paramètres avec ses valeur par défaut
3942     $arguments_default = array(
3943 softime 10573 "filtre" => "instructeur",
3944     "affichage" => "liste"
3945 softime 6565 );
3946     // Vérification des arguments
3947     foreach ($arguments_default as $key => $value) {
3948     //
3949     if (isset($arguments[$key])) {
3950     //
3951     $elem = trim($arguments[$key]);
3952     //
3953     if ($key === "filtre"
3954     && in_array($elem, array("instructeur", "division", "aucun"))) {
3955     // La valeur doit être dans cette liste
3956     $arguments[$key] = $elem;
3957     continue;
3958 softime 10573 } elseif ($key === "affichage"
3959     && in_array($elem, array('liste', 'nombre'))) {
3960     // La valeur doit être dans cette liste
3961     $arguments[$key] = $elem;
3962     continue;
3963 softime 6565 }
3964     }
3965     //
3966     $arguments[$key] = $value;
3967     }
3968     $filtre = $arguments["filtre"];
3969    
3970     // SELECT - CHAMPAFFICHE
3971 softime 10573 $trim_concat_terrain = '
3972     TRIM(
3973 softime 11057 CASE
3974     WHEN dossier.adresse_normalisee IS NULL
3975     OR TRIM(dossier.adresse_normalisee) = \'\'
3976     THEN
3977     CONCAT_WS(
3978     \' \',
3979     dossier.terrain_adresse_voie_numero,
3980     dossier.terrain_adresse_voie,
3981     dossier.terrain_adresse_code_postal
3982     )
3983     ELSE
3984     dossier.adresse_normalisee
3985     END
3986 softime 10573 ) as "'.__("localisation").'"';
3987 softime 6565 //
3988     $case_contrevenant = "
3989     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
3990     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
3991     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
3992     END
3993     ";
3994     //
3995     $query_ct_select_champaffiche = array(
3996     'dossier.dossier as "'._("dossier").'"',
3997     'dossier.dossier_libelle as "'._("dossier").'"',
3998     $trim_concat_terrain,
3999     $case_contrevenant.' as "'._("contrevenant").'"',
4000     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4001     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4002     'etat.libelle as "'._("etat").'"',
4003     'to_char(dossier.date_contradictoire, \'DD/MM/YYYY\') as "'._("date_contradictoire").'"',
4004     'to_char(dossier.date_retour_contradictoire, \'DD/MM/YYYY\') as "'._("date_retour_contradictoire").'"',
4005     );
4006    
4007     /**
4008     * Construction de la requête
4009     */
4010     // SELECT
4011     $query_ct_select = "
4012     dossier.dossier,
4013     dossier.dossier_libelle,
4014     dossier.date_contradictoire,
4015     dossier.date_retour_contradictoire
4016     ";
4017    
4018     // FROM
4019     $query_ct_from = "
4020     ".DB_PREFIXE."dossier
4021     LEFT JOIN ".DB_PREFIXE."etat
4022     ON dossier.etat = etat.etat
4023     LEFT JOIN (
4024     SELECT *
4025     FROM ".DB_PREFIXE."lien_dossier_demandeur
4026     INNER JOIN ".DB_PREFIXE."demandeur
4027     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4028     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4029     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4030     ) as demandeur_contrevenant
4031     ON demandeur_contrevenant.dossier = dossier.dossier
4032     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4033     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4034     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4035     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4036     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4037     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4038     LEFT JOIN ".DB_PREFIXE."avis_decision
4039     ON avis_decision.avis_decision=dossier.avis_decision
4040     %s
4041     %s
4042     %s
4043     ";
4044    
4045     $query_ct_where_instructeur_filter = "";
4046     $query_ct_where_division_filter = "";
4047     $query_ct_where_collectivite_filter = "";
4048     // Filtre sur les dossiers qui concernent l'utilisateur
4049     if ($filtre == "instructeur") {
4050     //
4051     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
4052     ON dossier.instructeur=instructeur.instructeur
4053     OR dossier.instructeur_2=instructeur.instructeur
4054     JOIN ".DB_PREFIXE."om_utilisateur
4055     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4056     AND om_utilisateur.login='".$_SESSION['login']."'
4057     ";
4058     }
4059    
4060     // Filtre sur les dossier de la division
4061     if ($filtre == "division") {
4062     //
4063     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4064     ON dossier.division=division.division
4065     AND division.division = ".$_SESSION['division']."
4066     ";
4067     }
4068    
4069     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4070     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4071     // collectivité
4072     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4073     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4074     ON dossier.om_collectivite=om_collectivite.om_collectivite
4075     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4076     ";
4077     } else {
4078     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4079     ON dossier.om_collectivite=om_collectivite.om_collectivite
4080     ";
4081     }
4082    
4083     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4084    
4085     // WHERE - COMMON
4086     $query_ct_where_common = "
4087     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4088     AND NOT EXISTS
4089     (SELECT NULL
4090     FROM ".DB_PREFIXE."instruction
4091     INNER JOIN ".DB_PREFIXE."evenement
4092     ON instruction.evenement = evenement.evenement
4093     WHERE instruction.dossier = dossier.dossier
4094     AND evenement.type = 'annul_contradictoire')
4095     AND (dossier.date_contradictoire >= CURRENT_DATE + interval '3 weeks'
4096     OR (dossier.date_contradictoire IS NOT NULL
4097     AND dossier.date_retour_contradictoire IS NULL))
4098     AND date_ait IS NULL
4099     ";
4100    
4101     // ORDER BY
4102     $query_ct_orderby = "
4103     dossier.date_depot ASC
4104     ";
4105    
4106     $query_ct_where_groupe = "";
4107     // Gestion des groupes et confidentialité
4108     include('../sql/pgsql/filter_group_widgets.inc.php');
4109    
4110     /**
4111     * Message d'aide
4112     */
4113     //
4114     $message_filtre = "";
4115     //
4116     switch ($filtre) {
4117     case "instructeur":
4118     $message_filtre = " "._("dont je suis l'instructeur");
4119     break;
4120     case "division":
4121     $message_filtre = " "._("situés dans ma division");
4122     break;
4123     case "aucun":
4124     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4125     $message_filtre = " "._("situés dans ma collectivité");
4126     } else {
4127     $message_filtre = " "._("situés dans toutes les collectivités");
4128     }
4129     break;
4130     }
4131     //
4132     $message_help = sprintf(
4133     _("Les infractions%s les plus anciennes pour lesquelles la date de contradictoire est saisie (soit elle est supérieure ou égale à la date du jour + 3 semaines, soit elle ne rentre pas dans cette condition et la date de retour du contradictoire est vide), il n'y a pas d'événements de type 'Annulation de contradictoire' et il n'y a pas d'AIT créé."),
4134     $message_filtre
4135     );
4136    
4137     /**
4138     * Return
4139     */
4140     //
4141     return array(
4142     "arguments" => $arguments,
4143     "message_help" => $message_help,
4144     "query_ct_select" => $query_ct_select,
4145     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4146     "query_ct_from" => $query_ct_from,
4147     "query_ct_where" => $query_ct_where_common,
4148     "query_ct_where_groupe" => $query_ct_where_groupe,
4149     "query_ct_orderby" => $query_ct_orderby,
4150     );
4151     }
4152    
4153     /**
4154     * WIDGET DASHBOARD - Les ou Mes dossiers contradictoires
4155     * @return void
4156     */
4157     function view_widget_dossier_contentieux_contradictoire($content = null) {
4158     /**
4159     * Ce widget est configurable via l'interface Web. Lors de la création
4160     * du widget dans le paramétrage il est possible de spécifier la ou les
4161     * options suivantes :
4162     * - filtre :
4163     * = instructeur
4164     * = division
4165     * = aucun
4166     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4167     */
4168     // Liste des paramètres
4169 softime 10573 $params = array("filtre", "affichage");
4170 softime 6565 // Formatage des arguments reçus en paramètres
4171     $arguments = $this->get_arguments($content, $params);
4172     // Récupération de la configuration du widget
4173     $conf = $this->get_config_dossier_contentieux_contradictoire($arguments);
4174    
4175     $filtre = $conf["arguments"]["filtre"];
4176     //
4177    
4178    
4179     /**
4180     * Composition de la requête
4181     */
4182 softime 10573 // Gestion de la requête selon le type d'affichage
4183     $query_ct_orderby = sprintf(
4184     "ORDER BY
4185     %s
4186     LIMIT 10",
4187     $conf["query_ct_orderby"]
4188     );
4189     $query_ct_select = $conf["query_ct_select"];
4190     if ($conf["arguments"]["affichage"] === "nombre") {
4191     $query_ct_orderby = "";
4192     $query_ct_select = "COUNT(*)";
4193     }
4194 softime 6565 $query = sprintf("
4195     SELECT
4196     %s
4197     FROM
4198     %s
4199     WHERE
4200     %s
4201     %s
4202 softime 10573 %s",
4203     $query_ct_select,
4204 softime 6565 $conf["query_ct_from"],
4205     $conf["query_ct_where"],
4206     $conf["query_ct_where_groupe"],
4207 softime 10573 $query_ct_orderby
4208 softime 6565 );
4209    
4210     /**
4211     * Template nécessaires à l'affichage du widget
4212     */
4213 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
4214     // Exécution de la requête
4215     $res = $this->f->db->getone($query);
4216     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
4217     $this->f->isDatabaseError($res);
4218    
4219     // Affichage du message d'informations
4220     printf(
4221     $this->template_help,
4222     $conf["message_help"]
4223     );
4224     // Si il n'y a aucun dossier à afficher
4225     if (intval($res) == 0) {
4226     echo _("Il n'y a pas d'infractions pour lesquelles la date de contradictoire est saisie (soit elle est supérieure ou égale à la date du jour + 3 semaines, soit elle ne rentre pas dans cette condition et la date de retour du contradictoire est vide), il n'y a pas d'événements de type 'Annulation de contradictoire' et il n'y a pas d'AIT créé.");
4227     return;
4228     }
4229    
4230     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
4231     } else {
4232     // Exécution de la requête
4233     $res = $this->f->db->query($query);
4234     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4235     $this->f->isDatabaseError($res);
4236    
4237     // Affichage du message d'informations
4238     printf(
4239     $this->template_help,
4240     $conf["message_help"]
4241     );
4242     // Si il n'y a aucun dossier à afficher
4243     if ($res->numrows() == 0) {
4244     echo _("Il n'y a pas d'infractions pour lesquelles la date de contradictoire est saisie (soit elle est supérieure ou égale à la date du jour + 3 semaines, soit elle ne rentre pas dans cette condition et la date de retour du contradictoire est vide), il n'y a pas d'événements de type 'Annulation de contradictoire' et il n'y a pas d'AIT créé.");
4245     return;
4246     }
4247     //
4248     $template_table = '
4249     <table class="tab-tab">
4250     <thead>
4251     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4252     <th class="title col-0 firstcol">
4253     <span class="name">
4254     %s
4255     </span>
4256     </th>
4257     <th class="title col-1">
4258     <span class="name">
4259     %s
4260     </span>
4261     </th>
4262     <th class="title col-2">
4263     <span class="name">
4264     %s
4265     </span>
4266     </th>
4267     <th class="title col-3 lastcol">
4268     <span class="name">
4269     %s
4270     </span>
4271     </th>
4272     </tr>
4273     </thead>
4274     <tbody>
4275     %s
4276     </tbody>
4277     </table>
4278     ';
4279     //
4280     $template_line = '
4281     <tr class="tab-data odd">
4282     <td class="col-0 firstcol">
4283     %s
4284     </td>
4285     <td class="col-1 ">
4286     %s
4287     </td>
4288     <td class="col-2">
4289     %s
4290     </td>
4291     <td class="col-3 lastcol">
4292     %s
4293     </td>
4294     </tr>
4295     ';
4296     //
4297     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4298     //
4299     $template_link = '
4300     <a class="lienTable" href="%s">
4301 softime 6565 %s
4302 softime 10573 </a>
4303     ';
4304     // Bouton consulter
4305     $template_btn_consulter = '
4306     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4307     ._('Consulter')
4308     .'</span>
4309     ';
4310     //
4311 softime 6565
4312 softime 10573 /**
4313     * Si il y a des dossiers à afficher, alors on affiche le widget.
4314     */
4315     // On construit le contenu du tableau
4316     $ct_tbody = '';
4317     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4318     // On construit l'attribut href du lien
4319     $ct_href = sprintf(
4320     $template_href,
4321     // idx
4322     $row["dossier"]
4323     );
4324     // On construit la ligne
4325     $ct_tbody .= sprintf(
4326     $template_line,
4327     // Colonne 1 - Numéro de dossier
4328     sprintf(
4329     $template_link,
4330     $ct_href,
4331     $template_btn_consulter
4332     ),
4333     // Colonne 2 - Numéro de dossier
4334     sprintf(
4335     $template_link,
4336     $ct_href,
4337     $row["dossier_libelle"]
4338     ),
4339     // Colonne 3 - Date contradictoire
4340     sprintf(
4341     $template_link,
4342     $ct_href,
4343     $this->f->formatDate($row["date_contradictoire"])
4344     ),
4345     // Colonne 4 - Date retour contradictoire
4346     sprintf(
4347     $template_link,
4348     $ct_href,
4349     $this->f->formatDate($row["date_retour_contradictoire"])
4350     )
4351     );
4352     }
4353     // Affichage du tableau listant les dossiers
4354     printf(
4355     $template_table,
4356     // Colonne 1 - Consulter
4357     '',
4358 softime 6565 // Colonne 2 - Numéro de dossier
4359 softime 10573 _('dossier'),
4360 softime 6565 // Colonne 3 - Date contradictoire
4361 softime 10573 _('date_contradictoire'),
4362 softime 6565 // Colonne 4 - Date retour contradictoire
4363 softime 10573 _('date_retour_contradictoire'),
4364     // Le Contenu
4365     $ct_tbody
4366 softime 6565 );
4367     }
4368     // Affichage du footer
4369     printf(
4370     $this->template_footer,
4371 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_contradictoire&filtre=" . $filtre,
4372 softime 6565 _("Voir +")
4373     );
4374     }
4375    
4376    
4377     /**
4378     * Cette méthode permet de récupérer la configuration du widget 'Mes AIT'
4379     * ou 'Les AIT'.
4380     *
4381     * @return array
4382     */
4383     function get_config_dossier_contentieux_ait($arguments) {
4384     // Initialisation du tableau des paramètres avec ses valeur par défaut
4385     $arguments_default = array(
4386 softime 10573 "filtre" => "instructeur",
4387     "affichage" => "liste"
4388 softime 6565 );
4389     // Vérification des arguments
4390     foreach ($arguments_default as $key => $value) {
4391     //
4392     if (isset($arguments[$key])) {
4393     //
4394     $elem = trim($arguments[$key]);
4395     //
4396     if ($key === "filtre"
4397     && in_array($elem, array("instructeur", "division", "aucun"))) {
4398     // La valeur doit être dans cette liste
4399     $arguments[$key] = $elem;
4400     continue;
4401 softime 10573 } elseif ($key === "affichage"
4402     && in_array($elem, array('liste', 'nombre'))) {
4403     // La valeur doit être dans cette liste
4404     $arguments[$key] = $elem;
4405     continue;
4406 softime 6565 }
4407     }
4408     //
4409     $arguments[$key] = $value;
4410     }
4411     $filtre = $arguments["filtre"];
4412    
4413     // SELECT - CHAMPAFFICHE
4414 softime 10573 $trim_concat_terrain = '
4415     TRIM(
4416 softime 11057 CASE
4417     WHEN dossier.adresse_normalisee IS NULL
4418     OR TRIM(dossier.adresse_normalisee) = \'\'
4419     THEN
4420     CONCAT_WS(
4421     \' \',
4422     dossier.terrain_adresse_voie_numero,
4423     dossier.terrain_adresse_voie,
4424     dossier.terrain_adresse_code_postal
4425     )
4426     ELSE
4427     dossier.adresse_normalisee
4428     END
4429 softime 10573 ) as "'.__("localisation").'"';
4430 softime 6565 //
4431     $case_contrevenant = "
4432     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4433     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4434     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4435     END
4436     ";
4437     //
4438     $query_ct_select_champaffiche = array(
4439     'dossier.dossier as "'._("dossier").'"',
4440     'dossier.dossier_libelle as "'._("dossier").'"',
4441     $trim_concat_terrain,
4442     $case_contrevenant.' as "'._("contrevenant").'"',
4443     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4444     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4445     'etat.libelle as "'._("etat").'"',
4446     'to_char(dossier.date_ait, \'DD/MM/YYYY\') as "'._("date_ait").'"',
4447     'to_char(instruction.date_retour_signature, \'DD/MM/YYYY\') as "'._("date_retour_signature").'"',
4448     );
4449    
4450     /**
4451     * Construction de la requête
4452     */
4453     // SELECT
4454     $query_ct_select = "
4455     dossier.dossier,
4456     dossier.dossier_libelle,
4457     dossier.date_ait,
4458     instruction.date_retour_signature
4459     ";
4460    
4461     // FROM
4462     $query_ct_from = "
4463     ".DB_PREFIXE."dossier
4464     LEFT JOIN ".DB_PREFIXE."etat
4465     ON dossier.etat = etat.etat
4466     LEFT JOIN (
4467     SELECT *
4468     FROM ".DB_PREFIXE."lien_dossier_demandeur
4469     INNER JOIN ".DB_PREFIXE."demandeur
4470     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4471     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4472     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4473     ) as demandeur_contrevenant
4474     ON demandeur_contrevenant.dossier = dossier.dossier
4475     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4476     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4477     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4478     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4479     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4480     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4481     LEFT JOIN ".DB_PREFIXE."avis_decision
4482     ON avis_decision.avis_decision=dossier.avis_decision
4483     INNER JOIN ".DB_PREFIXE."instruction
4484     ON dossier.dossier = instruction.dossier
4485     AND date_retour_signature IS NOT NULL
4486     INNER JOIN ".DB_PREFIXE."evenement
4487     ON instruction.evenement = evenement.evenement
4488     AND LOWER(evenement.type) LIKE 'ait'
4489     %s
4490     %s
4491     %s
4492     ";
4493    
4494     $query_ct_where_instructeur_filter = "";
4495     $query_ct_where_division_filter = "";
4496     $query_ct_where_collectivite_filter = "";
4497     // Filtre sur les dossiers qui concernent l'utilisateur
4498     if ($filtre == "instructeur") {
4499     //
4500     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
4501     ON dossier.instructeur=instructeur.instructeur
4502     OR dossier.instructeur_2=instructeur.instructeur
4503     JOIN ".DB_PREFIXE."om_utilisateur
4504     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4505     AND om_utilisateur.login='".$_SESSION['login']."'
4506     ";
4507     }
4508    
4509     // Filtre sur les dossier de la division
4510     if ($filtre == "division") {
4511     //
4512     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4513     ON dossier.division=division.division
4514     AND division.division = ".$_SESSION['division']."
4515     ";
4516     }
4517    
4518     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4519     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4520     // collectivité
4521     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4522     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4523     ON dossier.om_collectivite=om_collectivite.om_collectivite
4524     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4525     ";
4526     } else {
4527     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4528     ON dossier.om_collectivite=om_collectivite.om_collectivite
4529     ";
4530     }
4531    
4532     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4533    
4534     // WHERE
4535     $query_ct_where_common = "
4536     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4537     ";
4538    
4539     // ORDER BY
4540     $query_ct_orderby = "
4541     dossier.date_depot DESC
4542     ";
4543    
4544     $query_ct_where_groupe = "";
4545     // Gestion des groupes et confidentialité
4546     include('../sql/pgsql/filter_group_widgets.inc.php');
4547    
4548     /**
4549     * Message d'aide
4550     */
4551     //
4552     $message_filtre = "";
4553     //
4554     switch ($filtre) {
4555     case "instructeur":
4556     $message_filtre = " "._("dont je suis l'instructeur");
4557     break;
4558     case "division":
4559     $message_filtre = " "._("situés dans ma division");
4560     break;
4561     case "aucun":
4562     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4563     $message_filtre = " "._("situés dans ma collectivité");
4564     } else {
4565     $message_filtre = " "._("situés dans toutes les collectivités");
4566     }
4567     break;
4568     }
4569     //
4570     $message_help = sprintf(
4571     _("Les infractions%s les plus récentes pour lesquelles il y a un AIT signé."),
4572     $message_filtre
4573     );
4574    
4575     /**
4576     * Return
4577     */
4578     //
4579     return array(
4580     "arguments" => $arguments,
4581     "message_help" => $message_help,
4582     "query_ct_select" => $query_ct_select,
4583     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4584     "query_ct_from" => $query_ct_from,
4585     "query_ct_where" => $query_ct_where_common,
4586     "query_ct_where_groupe" => $query_ct_where_groupe,
4587     "query_ct_orderby" => $query_ct_orderby
4588     );
4589     }
4590    
4591    
4592     /**
4593     * WIDGET DASHBOARD - Les ou Mes dossiers AIT
4594     * @return void
4595     */
4596     function view_widget_dossier_contentieux_ait($content = null) {
4597     /**
4598     * Ce widget est configurable via l'interface Web. Lors de la création
4599     * du widget dans le paramétrage il est possible de spécifier la ou les
4600     * options suivantes :
4601     * - filtre :
4602     * = instructeur
4603     * = division
4604     * = aucun
4605     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4606     */
4607     // Liste des paramètres
4608 softime 10573 $params = array("filtre", "affichage");
4609 softime 6565 // Formatage des arguments reçus en paramètres
4610     $arguments = $this->get_arguments($content, $params);
4611     // Récupération de la configuration du widget
4612     $conf = $this->get_config_dossier_contentieux_ait($arguments);
4613     $filtre = $conf["arguments"]["filtre"];
4614    
4615    
4616     /**
4617     * Composition de la requête
4618     */
4619 softime 10573 // Gestion de la requête selon le type d'affichage
4620     $query_ct_orderby = sprintf(
4621     "ORDER BY
4622     %s
4623     LIMIT 5",
4624     $conf["query_ct_orderby"]
4625     );
4626     $query_ct_select = $conf["query_ct_select"];
4627     if ($conf["arguments"]["affichage"] === "nombre") {
4628     $query_ct_orderby = "";
4629     $query_ct_select = "COUNT(*)";
4630     }
4631 softime 6565 $query = sprintf("
4632     SELECT
4633     %s
4634     FROM
4635     %s
4636     WHERE
4637     %s
4638     %s
4639 softime 10573 %s",
4640     $query_ct_select,
4641 softime 6565 $conf["query_ct_from"],
4642     $conf["query_ct_where"],
4643     $conf["query_ct_where_groupe"],
4644 softime 10573 $query_ct_orderby
4645 softime 6565 );
4646    
4647     /**
4648     * Template nécessaires à l'affichage du widget
4649     */
4650 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
4651     // Exécution de la requête
4652     $res = $this->f->db->getone($query);
4653     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
4654     $this->f->isDatabaseError($res);
4655    
4656     // Affichage du message d'informations
4657     printf(
4658     $this->template_help,
4659     $conf["message_help"]
4660     );
4661     // Si il n'y a aucun dossier à afficher
4662     if (intval($res) == 0) {
4663     echo _("Il n'y a pas d'infractions pour lesquelles il y a un AIT signé.");
4664     return;
4665     }
4666    
4667     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
4668     } else {
4669     // Exécution de la requête
4670     $res = $this->f->db->query($query);
4671     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4672     $this->f->isDatabaseError($res);
4673    
4674     // Affichage du message d'informations
4675     printf(
4676     $this->template_help,
4677     $conf["message_help"]
4678     );
4679     // Si il n'y a aucun dossier à afficher
4680     if ($res->numrows() == 0) {
4681     echo _("Il n'y a pas d'infractions pour lesquelles il y a un AIT signé.");
4682     return;
4683     }
4684     //
4685     $template_table = '
4686     <table class="tab-tab">
4687     <thead>
4688     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4689     <th class="title col-0 firstcol">
4690     <span class="name">
4691     %s
4692     </span>
4693     </th>
4694     <th class="title col-1">
4695     <span class="name">
4696     %s
4697     </span>
4698     </th>
4699     <th class="title col-2">
4700     <span class="name">
4701     %s
4702     </span>
4703     </th>
4704     <th class="title col-3 lastcol">
4705     <span class="name">
4706     %s
4707     </span>
4708     </th>
4709     </tr>
4710     </thead>
4711     <tbody>
4712     %s
4713     </tbody>
4714     </table>
4715     ';
4716     //
4717     $template_line = '
4718     <tr class="tab-data odd">
4719     <td class="col-0 firstcol">
4720     %s
4721     </td>
4722     <td class="col-1 ">
4723     %s
4724     </td>
4725     <td class="col-2">
4726     %s
4727     </td>
4728     <td class="col-3 lastcol">
4729     %s
4730     </td>
4731     </tr>
4732     ';
4733     //
4734     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4735     //
4736     $template_link = '
4737     <a class="lienTable" href="%s">
4738 softime 6565 %s
4739 softime 10573 </a>
4740     ';
4741     // Bouton consulter
4742     $template_btn_consulter = '
4743     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4744     ._('Consulter')
4745     .'</span>
4746     ';
4747     //
4748 softime 6565
4749 softime 10573 /**
4750     * Si il y a des dossiers à afficher, alors on affiche le widget.
4751     */
4752     // On construit le contenu du tableau
4753     $ct_tbody = '';
4754     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4755     // On construit l'attribut href du lien
4756     $ct_href = sprintf(
4757     $template_href,
4758     // idx
4759     $row["dossier"]
4760     );
4761     // On construit la ligne
4762     $ct_tbody .= sprintf(
4763     $template_line,
4764     // Colonne 1 - Numéro de dossier
4765     sprintf(
4766     $template_link,
4767     $ct_href,
4768     $template_btn_consulter
4769     ),
4770     // Colonne 2 - Numéro de dossier
4771     sprintf(
4772     $template_link,
4773     $ct_href,
4774     $row["dossier_libelle"]
4775     ),
4776     // Colonne 3 - Date AIT
4777     sprintf(
4778     $template_link,
4779     $ct_href,
4780     $this->f->formatDate($row["date_ait"])
4781     ),
4782     // Colonne 4 - Date retour signature
4783     sprintf(
4784     $template_link,
4785     $ct_href,
4786     $this->f->formatDate($row["date_retour_signature"])
4787     )
4788     );
4789     }
4790     // Affichage du tableau listant les dossiers
4791     printf(
4792     $template_table,
4793     // Colonne 1 - Consulter
4794     '',
4795 softime 6565 // Colonne 2 - Numéro de dossier
4796 softime 10573 _('dossier'),
4797 softime 6565 // Colonne 3 - Date AIT
4798 softime 10573 _('date_ait'),
4799 softime 6565 // Colonne 4 - Date retour signature
4800 softime 10573 _('date_retour_signature'),
4801     // Le Contenu
4802     $ct_tbody
4803 softime 6565 );
4804     }
4805     // Affichage du footer
4806     printf(
4807     $this->template_footer,
4808 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_ait&filtre=" . $filtre,
4809 softime 6565 _("Voir +")
4810     );
4811     }
4812    
4813    
4814     /**
4815     * Cette méthode permet de récupérer la configuration du widget 'Les infractions
4816     * non affectées'.
4817     *
4818     * @return array
4819     */
4820     function get_config_dossier_contentieux_inaffectes($arguments) {
4821     // Initialisation du tableau des paramètres avec ses valeur par défaut
4822     $arguments_default = array(
4823 softime 8477 "filtre" => "division",
4824     "dossier_encours" => "true",
4825 softime 10573 "affichage" => "liste"
4826 softime 6565 );
4827     // Vérification des arguments
4828     foreach ($arguments_default as $key => $value) {
4829     //
4830     if (isset($arguments[$key])) {
4831     //
4832     $elem = trim($arguments[$key]);
4833     //
4834     if ($key === "filtre"
4835     && in_array($elem, array("division", "aucun"))) {
4836     // La valeur doit être dans cette liste
4837     $arguments[$key] = $elem;
4838     continue;
4839 softime 8477 } elseif ($key === "dossier_encours"
4840     && in_array($elem, array("true", "false"))) {
4841     // La valeur doit être dans cette liste
4842     $arguments[$key] = $elem;
4843     continue;
4844 softime 10573 } elseif ($key === "affichage"
4845     && in_array($elem, array('liste', 'nombre'))) {
4846     // La valeur doit être dans cette liste
4847     $arguments[$key] = $elem;
4848     continue;
4849 softime 6565 }
4850     }
4851     //
4852     $arguments[$key] = $value;
4853     }
4854     $filtre = $arguments["filtre"];
4855 softime 8477 $d_encours = $arguments["dossier_encours"];
4856 softime 6565
4857     // SELECT - CHAMPAFFICHE
4858 softime 10573 $trim_concat_terrain = '
4859     TRIM(
4860 softime 11057 CASE
4861     WHEN dossier.adresse_normalisee IS NULL
4862     OR TRIM(dossier.adresse_normalisee) = \'\'
4863     THEN
4864     CONCAT_WS(
4865     \' \',
4866     dossier.terrain_adresse_voie_numero,
4867     dossier.terrain_adresse_voie,
4868     dossier.terrain_adresse_code_postal
4869     )
4870     ELSE
4871     dossier.adresse_normalisee
4872     END
4873 softime 10573 ) as "'.__("localisation").'"';
4874 softime 6565 //
4875     $case_contrevenant = "
4876     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4877     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4878     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4879     END
4880     ";
4881     //
4882     $query_ct_select_champaffiche = array(
4883     'dossier.dossier as "'._("dossier").'"',
4884     'dossier.dossier_libelle as "'._("dossier").'"',
4885     $trim_concat_terrain,
4886     $case_contrevenant.' as "'._("contrevenant").'"',
4887     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4888     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4889     'etat.libelle as "'._("etat").'"',
4890     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4891     );
4892    
4893     /**
4894     * Construction de la requête
4895     */
4896     // SELECT
4897     $query_ct_select = "
4898     dossier.dossier,
4899     dossier.dossier_libelle,
4900     dossier.date_depot
4901     ";
4902    
4903     // FROM
4904     $query_ct_from = "
4905     ".DB_PREFIXE."dossier
4906 softime 8477 INNER JOIN ".DB_PREFIXE."etat
4907     ON dossier.etat = etat.etat%s
4908 softime 6565 LEFT JOIN (
4909     SELECT *
4910     FROM ".DB_PREFIXE."lien_dossier_demandeur
4911     INNER JOIN ".DB_PREFIXE."demandeur
4912     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4913     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4914     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4915     ) as demandeur_contrevenant
4916     ON demandeur_contrevenant.dossier = dossier.dossier
4917     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4918     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4919     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4920     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4921     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4922     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4923     LEFT JOIN ".DB_PREFIXE."avis_decision
4924     ON avis_decision.avis_decision=dossier.avis_decision
4925     %s
4926     %s
4927     ";
4928    
4929     $query_ct_where_division_filter = "";
4930     $query_ct_where_collectivite_filter = "";
4931 softime 8477 $query_ct_where_statut_filter = "";
4932 softime 6565 // Filtre sur les dossier de la division
4933     if ($filtre == "division") {
4934     //
4935     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4936     ON dossier.division=division.division
4937     AND division.division = ".$_SESSION['division']."
4938     ";
4939     } else {
4940     $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
4941     ON dossier.division=division.division";
4942     }
4943    
4944     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4945     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4946     // collectivité
4947     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4948     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4949     ON dossier.om_collectivite=om_collectivite.om_collectivite
4950     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4951     ";
4952     } else {
4953     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4954     ON dossier.om_collectivite=om_collectivite.om_collectivite
4955     ";
4956     }
4957    
4958 softime 8477 // Permet de filtrer les dossiers d'instruction pour n'afficher
4959     // seulement ceux dont l'état est considéré comme 'encours'
4960     if ($d_encours === 'true') {
4961     $query_ct_where_statut_filter = " AND etat.statut = 'encours' ";
4962     }
4963    
4964     $query_ct_from = sprintf($query_ct_from,
4965     $query_ct_where_statut_filter,
4966     $query_ct_where_division_filter,
4967     $query_ct_where_collectivite_filter
4968     );
4969 softime 6565
4970     // WHERE - COMMON
4971     $query_ct_where_common = "
4972     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4973     AND dossier.instructeur_2 IS NULL
4974     ";
4975    
4976     // ORDER BY
4977    
4978     $query_ct_orderby = "
4979     dossier.date_depot ASC
4980     ";
4981    
4982     $query_ct_where_groupe = "";
4983     // Gestion des groupes et confidentialité
4984     include('../sql/pgsql/filter_group_widgets.inc.php');
4985    
4986     /**
4987     * Message d'aide
4988     */
4989     //
4990     $message_filtre = "";
4991     //
4992     switch ($filtre) {
4993     case "division":
4994     $message_filtre = " "._("situés dans ma division");
4995     break;
4996     case "aucun":
4997     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4998     $message_filtre = " "._("situés dans ma collectivité");
4999     } else {
5000     $message_filtre = " "._("situés dans toutes les collectivités");
5001     }
5002     break;
5003     }
5004 softime 8477
5005     // Complète le message d'aide pour préciser que les dossiers
5006     // d'instruction sont seulement ceux considérés comme 'encours'
5007     if ($d_encours === 'true') {
5008     $message_filtre = " "._("en cours d'instruction").$message_filtre;
5009     }
5010 softime 6565 //
5011     $message_help = sprintf(
5012     _("Les infractions%s les plus anciennes non-affectées à un technicien."),
5013     $message_filtre
5014     );
5015    
5016     /**
5017     * Return
5018     */
5019     //
5020     return array(
5021     "arguments" => $arguments,
5022     "message_help" => $message_help,
5023     "query_ct_select" => $query_ct_select,
5024     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5025     "query_ct_from" => $query_ct_from,
5026     "query_ct_where" => $query_ct_where_common,
5027     "query_ct_where_groupe" => $query_ct_where_groupe,
5028     "query_ct_orderby" => $query_ct_orderby
5029     );
5030     }
5031    
5032     /**
5033     * WIDGET DASHBOARD - Les infractions non affectées
5034     * @return void
5035     */
5036     function view_widget_dossier_contentieux_inaffectes($content = null) {
5037     /**
5038     * Ce widget est configurable via l'interface Web. Lors de la création
5039     * du widget dans le paramétrage il est possible de spécifier la ou les
5040     * options suivantes :
5041     * - filtre :
5042     * = instructeur
5043     * = division
5044     * = aucun
5045     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5046 softime 8477 * - dossier_encours (permet d'afficher seulement les DI en cours) :
5047     * = true (affiche seulement les DI en cours)
5048     * = false (affiche tous les DI)
5049     * (default) true
5050 softime 6565 */
5051     // Liste des paramètres
5052 softime 10573 $params = array("filtre", "dossier_encours", "affichage");
5053 softime 6565 // Formatage des arguments reçus en paramètres
5054     $arguments = $this->get_arguments($content, $params);
5055     // Récupération de la configuration du widget
5056     $conf = $this->get_config_dossier_contentieux_inaffectes($arguments);
5057    
5058     $filtre = $conf["arguments"]["filtre"];
5059 softime 8477 $d_encours = $conf["arguments"]["dossier_encours"];
5060 softime 6565 //
5061    
5062    
5063     /**
5064     * Composition de la requête
5065     */
5066 softime 10573 // Gestion de la requête selon le type d'affichage
5067     $query_ct_orderby = sprintf(
5068     "ORDER BY
5069     %s
5070     LIMIT 5",
5071     $conf["query_ct_orderby"]
5072     );
5073     $query_ct_select = $conf["query_ct_select"];
5074     if ($conf["arguments"]["affichage"] === "nombre") {
5075     $query_ct_orderby = "";
5076     $query_ct_select = "COUNT(*)";
5077     }
5078 softime 6565 $query = sprintf("
5079     SELECT
5080     %s
5081     FROM
5082     %s
5083     WHERE
5084     %s
5085     %s
5086 softime 10573 %s",
5087     $query_ct_select,
5088 softime 6565 $conf["query_ct_from"],
5089     $conf["query_ct_where"],
5090     $conf["query_ct_where_groupe"],
5091 softime 10573 $query_ct_orderby
5092 softime 6565 );
5093    
5094     /**
5095     * Template nécessaires à l'affichage du widget
5096     */
5097 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
5098     // Exécution de la requête
5099     $res = $this->f->db->getone($query);
5100     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
5101     $this->f->isDatabaseError($res);
5102    
5103     // Affichage du message d'informations
5104     printf(
5105     $this->template_help,
5106     $conf["message_help"]
5107     );
5108     // Si il n'y a aucun dossier à afficher
5109     if (intval($res) == 0) {
5110     echo _("Il n'y a pas d'infractions non-affectées à un technicien.");
5111     return;
5112     }
5113    
5114     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
5115     } else {
5116     // Exécution de la requête
5117     $res = $this->f->db->query($query);
5118     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5119     $this->f->isDatabaseError($res);
5120    
5121     // Affichage du message d'informations
5122     printf(
5123     $this->template_help,
5124     $conf["message_help"]
5125     );
5126     // Si il n'y a aucun dossier à afficher
5127     if ($res->numrows() == 0) {
5128     echo _("Il n'y a pas d'infractions non-affectées à un technicien.");
5129     return;
5130     }
5131     //
5132     $template_table = '
5133     <table class="tab-tab">
5134     <thead>
5135     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5136     <th class="title col-0 firstcol">
5137     <span class="name">
5138     %s
5139     </span>
5140     </th>
5141     <th class="title col-1">
5142     <span class="name">
5143     %s
5144     </span>
5145     </th>
5146     <th class="title col-2 lastcol">
5147     <span class="name">
5148     %s
5149     </span>
5150     </th>
5151     </tr>
5152     </thead>
5153     <tbody>
5154     %s
5155     </tbody>
5156     </table>
5157     ';
5158     //
5159     $template_line = '
5160     <tr class="tab-data odd">
5161     <td class="col-0 firstcol">
5162     %s
5163     </td>
5164     <td class="col-1 ">
5165     %s
5166     </td>
5167     <td class="col-2 lastcol">
5168     %s
5169     </td>
5170     </tr>
5171     ';
5172     //
5173     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
5174     //
5175     $template_link = '
5176     <a class="lienTable" href="%s">
5177 softime 6565 %s
5178 softime 10573 </a>
5179     ';
5180     // Bouton consulter
5181     $template_btn_consulter = '
5182     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5183     ._('Consulter')
5184     .'</span>
5185     ';
5186     //
5187 softime 6565
5188 softime 10573 /**
5189     * Si il y a des dossiers à afficher, alors on affiche le widget.
5190     */
5191     // On construit le contenu du tableau
5192     $ct_tbody = '';
5193     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5194     // On construit l'attribut href du lien
5195     $ct_href = sprintf(
5196     $template_href,
5197     // idx
5198     $row["dossier"]
5199     );
5200     // On construit la ligne
5201     $ct_tbody .= sprintf(
5202     $template_line,
5203     // Colonne 1 - Numéro de dossier
5204     sprintf(
5205     $template_link,
5206     $ct_href,
5207     $template_btn_consulter
5208     ),
5209     // Colonne 2 - Numéro de dossier
5210     sprintf(
5211     $template_link,
5212     $ct_href,
5213     $row["dossier_libelle"]
5214     ),
5215     // Colonne 3 - Date de réception
5216     sprintf(
5217     $template_link,
5218     $ct_href,
5219     $this->f->formatDate($row["date_depot"])
5220     )
5221     );
5222     }
5223     // Affichage du tableau listant les dossiers
5224     printf(
5225     $template_table,
5226     // Colonne 1 - Consulter
5227     '',
5228 softime 6565 // Colonne 2 - Numéro de dossier
5229 softime 10573 _('dossier'),
5230 softime 6565 // Colonne 3 - Date de réception
5231 softime 10573 _('Date de réception'),
5232     // Le Contenu
5233     $ct_tbody
5234 softime 6565 );
5235     }
5236     // Affichage du footer
5237     printf(
5238     $this->template_footer,
5239 softime 8477 OM_ROUTE_TAB."&obj=dossier_contentieux_inaffectes&filtre=" . $filtre."&dossier_encours=".$d_encours,
5240 softime 6565 _("Voir +")
5241     );
5242     }
5243    
5244    
5245     /**
5246     * Cette méthode permet de récupérer la configuration du widget 'Alerte Visite'.
5247     *
5248     * @return array
5249     */
5250     function get_config_dossier_contentieux_alerte_visite($arguments) {
5251     // Initialisation du tableau des paramètres avec ses valeur par défaut
5252     $arguments_default = array(
5253 softime 8477 "filtre" => "instructeur",
5254     "dossier_encours" => "true",
5255 softime 10573 "affichage" => "liste"
5256 softime 6565 );
5257     // Vérification des arguments
5258     foreach ($arguments_default as $key => $value) {
5259     //
5260     if (isset($arguments[$key])) {
5261     //
5262     $elem = trim($arguments[$key]);
5263     //
5264     if ($key === "filtre"
5265     && in_array($elem, array("instructeur", "division", "aucun"))) {
5266     // La valeur doit être dans cette liste
5267     $arguments[$key] = $elem;
5268     continue;
5269 softime 8477 } elseif ($key === "dossier_encours"
5270     && in_array($elem, array("true", "false"))) {
5271     // La valeur doit être dans cette liste
5272     $arguments[$key] = $elem;
5273     continue;
5274 softime 10573 } elseif ($key === "affichage"
5275     && in_array($elem, array('liste', 'nombre'))) {
5276     // La valeur doit être dans cette liste
5277     $arguments[$key] = $elem;
5278     continue;
5279 softime 6565 }
5280     }
5281     //
5282     $arguments[$key] = $value;
5283     }
5284     $filtre = $arguments["filtre"];
5285 softime 8477 $d_encours = $arguments["dossier_encours"];
5286 softime 6565
5287     // SELECT - CHAMPAFFICHE
5288 softime 10573 $trim_concat_terrain = '
5289     TRIM(
5290 softime 11057 CASE
5291     WHEN dossier.adresse_normalisee IS NULL
5292     OR TRIM(dossier.adresse_normalisee) = \'\'
5293     THEN
5294     CONCAT_WS(
5295     \' \',
5296     dossier.terrain_adresse_voie_numero,
5297     dossier.terrain_adresse_voie,
5298     dossier.terrain_adresse_code_postal
5299     )
5300     ELSE
5301     dossier.adresse_normalisee
5302     END
5303 softime 10573 ) as "'.__("localisation").'"';
5304 softime 6565 //
5305     $case_contrevenant = "
5306     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
5307     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
5308     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
5309     END
5310     ";
5311     //
5312     $query_ct_select_champaffiche = array(
5313     'dossier.dossier as "'._("dossier").'"',
5314     'dossier.dossier_libelle as "'._("dossier").'"',
5315     $trim_concat_terrain,
5316     $case_contrevenant.' as "'._("contrevenant").'"',
5317     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
5318     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
5319     'etat.libelle as "'._("etat").'"',
5320     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
5321     );
5322    
5323     /**
5324     * Construction de la requête
5325     */
5326     // SELECT
5327     $query_ct_select = "
5328     dossier.dossier,
5329     dossier.dossier_libelle,
5330     dossier.date_depot
5331     ";
5332    
5333     // FROM
5334     $query_ct_from = "
5335     ".DB_PREFIXE."dossier
5336 softime 8477 INNER JOIN ".DB_PREFIXE."etat
5337     ON dossier.etat = etat.etat%s
5338 softime 6565 LEFT JOIN (
5339     SELECT *
5340     FROM ".DB_PREFIXE."lien_dossier_demandeur
5341     INNER JOIN ".DB_PREFIXE."demandeur
5342     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5343     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5344     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
5345     ) as demandeur_contrevenant
5346     ON demandeur_contrevenant.dossier = dossier.dossier
5347     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5348     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5349     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5350     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5351     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5352     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5353     LEFT JOIN ".DB_PREFIXE."avis_decision
5354     ON avis_decision.avis_decision=dossier.avis_decision
5355     %s
5356     %s
5357     %s
5358     ";
5359    
5360     $query_ct_where_instructeur_filter = "";
5361     $query_ct_where_division_filter = "";
5362     $query_ct_where_collectivite_filter = "";
5363 softime 8477 $query_ct_where_statut_filter = "";
5364 softime 6565 // Filtre sur les dossiers qui concernent l'utilisateur
5365     if ($filtre == "instructeur") {
5366     //
5367     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5368     ON dossier.instructeur=instructeur.instructeur
5369     OR dossier.instructeur_2=instructeur.instructeur
5370     JOIN ".DB_PREFIXE."om_utilisateur
5371     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5372     AND om_utilisateur.login='".$_SESSION['login']."'
5373     ";
5374     }
5375    
5376     // Filtre sur les dossier de la division
5377     if ($filtre == "division") {
5378     //
5379     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5380     ON dossier.division=division.division
5381     AND division.division = ".$_SESSION['division']."
5382     ";
5383     }
5384    
5385     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5386     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5387     // collectivité
5388     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5389     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5390     ON dossier.om_collectivite=om_collectivite.om_collectivite
5391     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5392     ";
5393     } else {
5394     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5395     ON dossier.om_collectivite=om_collectivite.om_collectivite
5396     ";
5397     }
5398    
5399 softime 8477 //
5400     if ($d_encours === 'true') {
5401     $query_ct_where_statut_filter = " AND etat.statut = 'encours' ";
5402     }
5403 softime 6565
5404 softime 8477 $query_ct_from = sprintf(
5405     $query_ct_from,
5406     $query_ct_where_statut_filter,
5407     $query_ct_where_instructeur_filter,
5408     $query_ct_where_division_filter,
5409     $query_ct_where_collectivite_filter
5410     );
5411    
5412 softime 6565 // WHERE - COMMON
5413     $query_ct_where_common = "
5414     LOWER(dossier_autorisation_type.code) = LOWER('IN')
5415     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '3 months'
5416     AND dossier.date_premiere_visite IS NULL
5417     ";
5418 softime 8477
5419 softime 6565 // ORDER BY
5420     $query_ct_orderby = "
5421     dossier.date_depot ASC
5422     ";
5423    
5424     $query_ct_where_groupe = "";
5425     // Gestion des groupes et confidentialité
5426     include('../sql/pgsql/filter_group_widgets.inc.php');
5427    
5428     /**
5429     * Message d'aide
5430     */
5431     //
5432     $message_filtre = "";
5433     //
5434     switch ($filtre) {
5435     case "instructeur":
5436     $message_filtre = " "._("dont je suis l'instructeur");
5437     break;
5438     case "division":
5439     $message_filtre = " "._("situés dans ma division");
5440     break;
5441     case "aucun":
5442     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5443     $message_filtre = " "._("situés dans ma collectivité");
5444     } else {
5445     $message_filtre = " "._("situés dans toutes les collectivités");
5446     }
5447     break;
5448     }
5449 softime 8477 // Complète le message d'aide pour préciser que les dossiers
5450     // d'instruction sont seulement ceux considérés comme 'encours'
5451     if ($d_encours === 'true') {
5452     $message_filtre = " "._("en cours d'instruction").$message_filtre;
5453     }
5454 softime 6565 //
5455     $message_help = sprintf(
5456     _("Les infractions%s les plus anciennes pour lesquelles la date de réception est dépassée depuis plus de 3 mois et dont la date de première visite n'est pas saisie."),
5457     $message_filtre
5458     );
5459    
5460     /**
5461     * Return
5462     */
5463     //
5464     return array(
5465     "arguments" => $arguments,
5466     "message_help" => $message_help,
5467     "query_ct_select" => $query_ct_select,
5468     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5469     "query_ct_from" => $query_ct_from,
5470     "query_ct_where" => $query_ct_where_common,
5471     "query_ct_where_groupe" => $query_ct_where_groupe,
5472     "query_ct_orderby" => $query_ct_orderby
5473     );
5474     }
5475    
5476     /**
5477     * WIDGET DASHBOARD - Alerte Visite
5478     * @return void
5479     */
5480     function view_widget_dossier_contentieux_alerte_visite($content = null) {
5481     /**
5482     * Ce widget est configurable via l'interface Web. Lors de la création
5483     * du widget dans le paramétrage il est possible de spécifier la ou les
5484     * options suivantes :
5485     * - filtre :
5486     * = instructeur
5487     * = division
5488     * = aucun
5489     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5490 softime 8477 * - dossier_encours (permet d'afficher seulement les DI en cours) :
5491     * = true (affiche seulement les DI en cours)
5492     * = false (affiche tous les DI)
5493     * (default) true
5494 softime 6565 */
5495     // Liste des paramètres
5496 softime 10573 $params = array("filtre", "dossier_encours", "affichage");
5497 softime 6565 // Formatage des arguments reçus en paramètres
5498     $arguments = $this->get_arguments($content, $params);
5499     // Récupération de la configuration du widget
5500     $conf = $this->get_config_dossier_contentieux_alerte_visite($arguments);
5501    
5502     //
5503     $filtre = $conf["arguments"]["filtre"];
5504 softime 8477 $d_encours = $conf["arguments"]["dossier_encours"];
5505 softime 6565
5506     /**
5507     * Composition de la requête
5508     */
5509     //
5510     $query = sprintf("
5511     SELECT
5512 softime 10573 COUNT(*)
5513 softime 6565 FROM
5514     %s
5515     WHERE
5516     %s
5517 softime 10573 %s",
5518 softime 6565 $conf["query_ct_from"],
5519     $conf["query_ct_where"],
5520 softime 10573 $conf["query_ct_where_groupe"]
5521 softime 6565 );
5522    
5523     /**
5524     * Exécution de la requête
5525     */
5526 softime 10573 // Gestion de la requête selon le type d'affichage
5527     $query_ct_orderby = sprintf(
5528     "ORDER BY
5529     %s
5530     LIMIT 5",
5531     $conf["query_ct_orderby"]
5532 softime 6565 );
5533 softime 10573 $query_ct_select = $conf["query_ct_select"];
5534     if ($conf["arguments"]["affichage"] === "nombre") {
5535     $query_ct_orderby = "";
5536     $query_ct_select = "COUNT(*)";
5537 softime 6565 }
5538 softime 10573 $query = sprintf("
5539     SELECT
5540 softime 6565 %s
5541 softime 10573 FROM
5542 softime 6565 %s
5543 softime 10573 WHERE
5544 softime 6565 %s
5545 softime 10573 %s
5546     %s",
5547     $query_ct_select,
5548     $conf["query_ct_from"],
5549     $conf["query_ct_where"],
5550     $conf["query_ct_where_groupe"],
5551     $query_ct_orderby
5552     );
5553 softime 6565
5554 softime 10573
5555 softime 6565 /**
5556 softime 10573 * Template nécessaires à l'affichage du widget
5557 softime 6565 */
5558 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
5559     // Exécution de la requête
5560     $res = $this->f->db->getone($query);
5561     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
5562     $this->f->isDatabaseError($res);
5563    
5564     // Affichage du message d'informations
5565     printf(
5566     $this->template_help,
5567     $conf["message_help"]
5568 softime 6565 );
5569 softime 10573 // Si il n'y a aucun dossier à afficher
5570     if (intval($res) == 0) {
5571     echo _("Il n'y a pas d'infractions pour lesquelles la date de réception est dépassée depuis plus de 3 mois et dont la date de première visite n'est pas saisie.");
5572     return;
5573     }
5574    
5575     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
5576     } else {
5577     // Exécution de la requête
5578     $res = $this->f->db->query($query);
5579     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5580     $this->f->isDatabaseError($res);
5581    
5582     // Affichage du message d'informations
5583     printf(
5584     $this->template_help,
5585     $conf["message_help"]
5586     );
5587     // Si il n'y a aucun dossier à afficher
5588     if ($res->numrows() == 0) {
5589     echo _("Il n'y a pas d'infractions pour lesquelles la date de réception est dépassée depuis plus de 3 mois et dont la date de première visite n'est pas saisie.");
5590     return;
5591     }
5592     //
5593     $template_table = '
5594     <table class="tab-tab">
5595     <thead>
5596     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5597     <th class="title col-0 firstcol">
5598     <span class="name">
5599     %s
5600     </span>
5601     </th>
5602     <th class="title col-1">
5603     <span class="name">
5604     %s
5605     </span>
5606     </th>
5607     <th class="title col-2 lastcol">
5608     <span class="name">
5609     %s
5610     </span>
5611     </th>
5612     </tr>
5613     </thead>
5614     <tbody>
5615     %s
5616     </tbody>
5617     </table>
5618     ';
5619     //
5620     $template_line = '
5621     <tr class="tab-data odd">
5622     <td class="col-0 firstcol">
5623     %s
5624     </td>
5625     <td class="col-1 ">
5626     %s
5627     </td>
5628     <td class="col-2 lastcol">
5629     %s
5630     </td>
5631     </tr>
5632     ';
5633     //
5634     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
5635     //
5636     $template_link = '
5637     <a class="lienTable" href="%s">
5638     %s
5639     </a>
5640     ';
5641     // Bouton consulter
5642     $template_btn_consulter = '
5643     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5644     ._('Consulter')
5645     .'</span>
5646     ';
5647     //
5648    
5649     /**
5650     * Si il y a des dossiers à afficher, alors on affiche le widget.
5651     */
5652     // On construit le contenu du tableau
5653     $ct_tbody = '';
5654     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5655     // On construit l'attribut href du lien
5656     $ct_href = sprintf(
5657     $template_href,
5658     // idx
5659     $row["dossier"]
5660     );
5661     // On construit la ligne
5662     $ct_tbody .= sprintf(
5663     $template_line,
5664     // Colonne 1 - Numéro de dossier
5665     sprintf(
5666     $template_link,
5667     $ct_href,
5668     $template_btn_consulter
5669     ),
5670     // Colonne 2 - Numéro de dossier
5671     sprintf(
5672     $template_link,
5673     $ct_href,
5674     $row["dossier_libelle"]
5675     ),
5676     // Colonne 3 - Date de réception
5677     sprintf(
5678     $template_link,
5679     $ct_href,
5680     $this->f->formatDate($row["date_depot"])
5681     )
5682     );
5683     }
5684     // Affichage du tableau listant les dossiers
5685     printf(
5686     $template_table,
5687     // Colonne 1 - Consulter
5688     '',
5689 softime 6565 // Colonne 2 - Numéro de dossier
5690 softime 10573 _('dossier'),
5691 softime 6565 // Colonne 3 - Date de réception
5692 softime 10573 _('Date de réception'),
5693     // Le Contenu
5694     $ct_tbody
5695 softime 6565 );
5696     }
5697     // Affichage du footer
5698     printf(
5699     $this->template_footer,
5700 softime 8477 OM_ROUTE_TAB."&obj=dossier_contentieux_alerte_visite&filtre=".$filtre."&dossier_encours=".$d_encours,
5701 softime 6565 _("Voir +")
5702     );
5703     }
5704    
5705     /**
5706     * Cette méthode permet de récupérer la configuration du widget 'Alerte Parquet'.
5707     *
5708     * @return array
5709     */
5710     function get_config_dossier_contentieux_alerte_parquet($arguments) {
5711     // Initialisation du tableau des paramètres avec ses valeur par défaut
5712     $arguments_default = array(
5713 softime 8477 "filtre" => "instructeur",
5714     "dossier_encours" => "true",
5715 softime 10573 "affichage" => "liste"
5716 softime 6565 );
5717     // Vérification des arguments
5718     foreach ($arguments_default as $key => $value) {
5719     //
5720     if (isset($arguments[$key])) {
5721     //
5722     $elem = trim($arguments[$key]);
5723     //
5724     if ($key === "filtre"
5725     && in_array($elem, array("instructeur", "division", "aucun"))) {
5726     // La valeur doit être dans cette liste
5727     $arguments[$key] = $elem;
5728     continue;
5729 softime 8477 } elseif ($key === "dossier_encours"
5730     && in_array($elem, array("true", "false"))) {
5731     // La valeur doit être dans cette liste
5732     $arguments[$key] = $elem;
5733     continue;
5734 softime 10573 } elseif ($key === "affichage"
5735     && in_array($elem, array('liste', 'nombre'))) {
5736     // La valeur doit être dans cette liste
5737     $arguments[$key] = $elem;
5738     continue;
5739 softime 6565 }
5740     }
5741     //
5742     $arguments[$key] = $value;
5743     }
5744     $filtre = $arguments["filtre"];
5745 softime 8477 $d_encours = $arguments["dossier_encours"];
5746 softime 6565
5747     // SELECT - CHAMPAFFICHE
5748 softime 10573 $trim_concat_terrain = '
5749     TRIM(
5750 softime 11057 CASE
5751     WHEN dossier.adresse_normalisee IS NULL
5752     OR TRIM(dossier.adresse_normalisee) = \'\'
5753     THEN
5754     CONCAT_WS(
5755     \' \',
5756     dossier.terrain_adresse_voie_numero,
5757     dossier.terrain_adresse_voie,
5758     dossier.terrain_adresse_code_postal
5759     )
5760     ELSE
5761     dossier.adresse_normalisee
5762     END
5763 softime 10573 ) as "'.__("localisation").'"';
5764 softime 6565 //
5765     $case_contrevenant = "
5766     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
5767     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
5768     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
5769     END
5770     ";
5771     //
5772     $query_ct_select_champaffiche = array(
5773     'dossier.dossier as "'._("dossier").'"',
5774     'dossier.dossier_libelle as "'._("dossier").'"',
5775     $trim_concat_terrain,
5776     $case_contrevenant.' as "'._("contrevenant").'"',
5777     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
5778     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
5779     'etat.libelle as "'._("etat").'"',
5780     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
5781     );
5782    
5783     /**
5784     * Construction de la requête
5785     */
5786     // SELECT
5787     $query_ct_select = "
5788     dossier.dossier,
5789     dossier.dossier_libelle,
5790     dossier.date_depot
5791     ";
5792    
5793     // FROM
5794     $query_ct_from = "
5795     ".DB_PREFIXE."dossier
5796 softime 8477 INNER JOIN ".DB_PREFIXE."etat
5797     ON dossier.etat = etat.etat%s
5798 softime 6565 LEFT JOIN (
5799     SELECT *
5800     FROM ".DB_PREFIXE."lien_dossier_demandeur
5801     INNER JOIN ".DB_PREFIXE."demandeur
5802     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5803     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5804     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
5805     ) as demandeur_contrevenant
5806     ON demandeur_contrevenant.dossier = dossier.dossier
5807     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5808     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5809     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5810     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5811     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5812     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5813     LEFT JOIN ".DB_PREFIXE."avis_decision
5814     ON avis_decision.avis_decision=dossier.avis_decision
5815     %s
5816     %s
5817     %s
5818     ";
5819    
5820     $query_ct_where_instructeur_filter = "";
5821     $query_ct_where_division_filter = "";
5822     $query_ct_where_collectivite_filter = "";
5823 softime 8477 $query_ct_where_statut_filter = "";
5824 softime 6565 // Filtre sur les dossiers qui concernent l'utilisateur
5825     if ($filtre == "instructeur") {
5826     //
5827     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5828     ON dossier.instructeur=instructeur.instructeur
5829     OR dossier.instructeur_2=instructeur.instructeur
5830     JOIN ".DB_PREFIXE."om_utilisateur
5831     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5832     AND om_utilisateur.login='".$_SESSION['login']."'
5833     ";
5834     }
5835    
5836     // Filtre sur les dossier de la division
5837     if ($filtre == "division") {
5838     //
5839     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5840     ON dossier.division=division.division
5841     AND division.division = ".$_SESSION['division']."
5842     ";
5843     }
5844    
5845     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5846     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5847     // collectivité
5848     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5849     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5850     ON dossier.om_collectivite=om_collectivite.om_collectivite
5851     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5852     ";
5853     } else {
5854     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5855     ON dossier.om_collectivite=om_collectivite.om_collectivite
5856     ";
5857     }
5858    
5859 softime 8477 // Permet de filtrer les dossiers d'instruction pour n'afficher
5860     // seulement ceux dont l'état est considéré comme 'encours'
5861     if ($d_encours === 'true') {
5862     $query_ct_where_statut_filter = " AND etat.statut = 'encours' ";
5863     }
5864 softime 6565
5865 softime 8477 $query_ct_from = sprintf(
5866     $query_ct_from,
5867     $query_ct_where_statut_filter,
5868     $query_ct_where_instructeur_filter,
5869     $query_ct_where_division_filter,
5870     $query_ct_where_collectivite_filter
5871     );
5872    
5873 softime 6565 // WHERE - COMMON
5874     $query_ct_where_common = "
5875     LOWER(dossier_autorisation_type.code) = LOWER('IN')
5876     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '9 months'
5877     AND dossier.date_transmission_parquet IS NULL
5878     ";
5879    
5880     // ORDER BY
5881     $query_ct_orderby = "
5882     dossier.date_depot ASC
5883     ";
5884    
5885     $query_ct_where_groupe = "";
5886     // Gestion des groupes et confidentialité
5887     include('../sql/pgsql/filter_group_widgets.inc.php');
5888    
5889     /**
5890     * Message d'aide
5891     */
5892     //
5893     $message_filtre = "";
5894     //
5895     switch ($filtre) {
5896     case "instructeur":
5897     $message_filtre = " "._("dont je suis l'instructeur");
5898     break;
5899     case "division":
5900     $message_filtre = " "._("situés dans ma division");
5901     break;
5902     case "aucun":
5903     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5904     $message_filtre = " "._("situés dans ma collectivité");
5905     } else {
5906     $message_filtre = " "._("situés dans toutes les collectivités");
5907     }
5908     break;
5909     }
5910 softime 8477 // Complète le message d'aide pour préciser que les dossiers
5911     // d'instruction sont seulement ceux considérés comme 'encours'
5912     if ($d_encours === 'true') {
5913     $message_filtre = " "._("en cours d'instruction").$message_filtre;
5914     }
5915 softime 6565 //
5916     $message_help = sprintf(
5917     _("Les infractions%s les plus anciennes pour lesquelles la date de réception est dépassée depuis plus de 9 mois et dont la date de transmission au parquet n'est pas saisie."),
5918     $message_filtre
5919     );
5920    
5921     /**
5922     * Return
5923     */
5924     //
5925     return array(
5926     "arguments" => $arguments,
5927     "message_help" => $message_help,
5928     "query_ct_select" => $query_ct_select,
5929     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5930     "query_ct_from" => $query_ct_from,
5931     "query_ct_where" => $query_ct_where_common,
5932     "query_ct_where_groupe" => $query_ct_where_groupe,
5933     "query_ct_orderby" => $query_ct_orderby
5934     );
5935     }
5936    
5937     /**
5938     * WIDGET DASHBOARD - Alerte Parquet
5939     * @return void
5940     */
5941     function view_widget_dossier_contentieux_alerte_parquet($content = null) {
5942     /**
5943     * Ce widget est configurable via l'interface Web. Lors de la création
5944     * du widget dans le paramétrage il est possible de spécifier la ou les
5945     * options suivantes :
5946     * - filtre :
5947     * = instructeur
5948     * = division
5949     * = aucun
5950     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5951 softime 8477 * - dossier_encours (permet d'afficher seulement les DI en cours) :
5952     * = true (affiche seulement les DI en cours)
5953     * = false (affiche tous les DI)
5954     * (default) true
5955 softime 6565 */
5956     // Liste des paramètres
5957 softime 10573 $params = array("filtre", "dossier_encours", "affichage");
5958 softime 6565 // Formatage des arguments reçus en paramètres
5959     $arguments = $this->get_arguments($content, $params);
5960     // Récupération de la configuration du widget
5961     $conf = $this->get_config_dossier_contentieux_alerte_parquet($arguments);
5962    
5963     //
5964     $filtre = $conf["arguments"]["filtre"];
5965 softime 8477 $d_encours = $conf["arguments"]["dossier_encours"];
5966 softime 6565
5967     /**
5968     * Composition de la requête
5969     */
5970 softime 10573 // Gestion de la requête selon le type d'affichage
5971     $query_ct_orderby = sprintf(
5972     "ORDER BY
5973     %s
5974     LIMIT 5",
5975     $conf["query_ct_orderby"]
5976     );
5977     $query_ct_select = $conf["query_ct_select"];
5978     if ($conf["arguments"]["affichage"] === "nombre") {
5979     $query_ct_orderby = "";
5980     $query_ct_select = "COUNT(*)";
5981     }
5982 softime 6565 $query = sprintf("
5983     SELECT
5984     %s
5985     FROM
5986     %s
5987     WHERE
5988     %s
5989     %s
5990 softime 10573 %s",
5991     $query_ct_select,
5992 softime 6565 $conf["query_ct_from"],
5993     $conf["query_ct_where"],
5994     $conf["query_ct_where_groupe"],
5995 softime 10573 $query_ct_orderby
5996 softime 6565 );
5997    
5998     /**
5999     * Template nécessaires à l'affichage du widget
6000     */
6001 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
6002     // Exécution de la requête
6003     $res = $this->f->db->getone($query);
6004     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
6005     $this->f->isDatabaseError($res);
6006    
6007     // Affichage du message d'informations
6008     printf(
6009     $this->template_help,
6010     $conf["message_help"]
6011     );
6012     // Si il n'y a aucun dossier à afficher
6013     if (intval($res) == 0) {
6014     echo _("Il n'y a pas d'infractions pour lesquelles la date de réception est dépassée depuis plus de 9 mois et dont la date de transmission au parquet n'est pas saisie.");
6015     return;
6016     }
6017    
6018     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
6019     } else {
6020     // Exécution de la requête
6021     $res = $this->f->db->query($query);
6022     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
6023     $this->f->isDatabaseError($res);
6024    
6025     // Affichage du message d'informations
6026     printf(
6027     $this->template_help,
6028     $conf["message_help"]
6029     );
6030     // Si il n'y a aucun dossier à afficher
6031     if ($res->numrows() == 0) {
6032     echo _("Il n'y a pas d'infractions pour lesquelles la date de réception est dépassée depuis plus de 9 mois et dont la date de transmission au parquet n'est pas saisie.");
6033     return;
6034     }
6035     //
6036     $template_table = '
6037     <table class="tab-tab">
6038     <thead>
6039     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
6040     <th class="title col-0 firstcol">
6041     <span class="name">
6042     %s
6043     </span>
6044     </th>
6045     <th class="title col-1">
6046     <span class="name">
6047     %s
6048     </span>
6049     </th>
6050     <th class="title col-2 lastcol">
6051     <span class="name">
6052     %s
6053     </span>
6054     </th>
6055     </tr>
6056     </thead>
6057     <tbody>
6058     %s
6059     </tbody>
6060     </table>
6061     ';
6062     //
6063     $template_line = '
6064     <tr class="tab-data odd">
6065     <td class="col-0 firstcol">
6066     %s
6067     </td>
6068     <td class="col-1 ">
6069     %s
6070     </td>
6071     <td class="col-2 lastcol">
6072     %s
6073     </td>
6074     </tr>
6075     ';
6076     //
6077     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
6078     //
6079     $template_link = '
6080     <a class="lienTable" href="%s">
6081 softime 6565 %s
6082 softime 10573 </a>
6083     ';
6084     // Bouton consulter
6085     $template_btn_consulter = '
6086     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
6087     ._('Consulter')
6088     .'</span>
6089     ';
6090     //
6091 softime 6565
6092 softime 10573 /**
6093     * Si il y a des dossiers à afficher, alors on affiche le widget.
6094     */
6095     // On construit le contenu du tableau
6096     $ct_tbody = '';
6097     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
6098     // On construit l'attribut href du lien
6099     $ct_href = sprintf(
6100     $template_href,
6101     // idx
6102     $row["dossier"]
6103     );
6104     // On construit la ligne
6105     $ct_tbody .= sprintf(
6106     $template_line,
6107     // Colonne 1 - Numéro de dossier
6108     sprintf(
6109     $template_link,
6110     $ct_href,
6111     $template_btn_consulter
6112     ),
6113     // Colonne 2 - Numéro de dossier
6114     sprintf(
6115     $template_link,
6116     $ct_href,
6117     $row["dossier_libelle"]
6118     ),
6119     // Colonne 3 - Date de réception
6120     sprintf(
6121     $template_link,
6122     $ct_href,
6123     $this->f->formatDate($row["date_depot"])
6124     )
6125     );
6126     }
6127     // Affichage du tableau listant les dossiers
6128     printf(
6129     $template_table,
6130     // Colonne 1 - Consulter
6131     '',
6132 softime 6565 // Colonne 2 - Numéro de dossier
6133 softime 10573 _('dossier'),
6134 softime 6565 // Colonne 3 - Date de réception
6135 softime 10573 _('Date de réception'),
6136     // Le Contenu
6137     $ct_tbody
6138 softime 6565 );
6139     }
6140     // Affichage du footer
6141     printf(
6142     $this->template_footer,
6143 softime 8477 OM_ROUTE_TAB."&obj=dossier_contentieux_alerte_parquet&filtre=".$filtre."&dossier_encours=".$d_encours,
6144 softime 6565 _("Voir +")
6145     );
6146     }
6147    
6148     /**
6149     * Cette méthode permet de récupérer la configuration du widget 'Mes clôtures'.
6150     *
6151     * @return array
6152     */
6153     function get_config_dossier_contentieux_clotures($arguments) {
6154     // Initialisation du tableau des paramètres avec ses valeur par défaut
6155     $arguments_default = array(
6156     "filtre" => "instructeur",
6157 softime 10573 "affichage" => "liste"
6158 softime 6565 );
6159     // Vérification des arguments
6160     foreach ($arguments_default as $key => $value) {
6161     //
6162     if (isset($arguments[$key])) {
6163     //
6164     $elem = trim($arguments[$key]);
6165     //
6166     if ($key === "filtre"
6167     && in_array($elem, array("instructeur", "division", "aucun"))) {
6168     // La valeur doit être dans cette liste
6169     $arguments[$key] = $elem;
6170     continue;
6171 softime 10573 } elseif ($key === "affichage"
6172     && in_array($elem, array('liste', 'nombre'))) {
6173     // La valeur doit être dans cette liste
6174     $arguments[$key] = $elem;
6175     continue;
6176 softime 6565 }
6177     }
6178     //
6179     $arguments[$key] = $value;
6180     }
6181    
6182     $filtre = $arguments["filtre"];
6183    
6184     // SELECT - CHAMPAFFICHE
6185 softime 10573 $trim_concat_terrain = '
6186     TRIM(
6187 softime 11057 CASE
6188     WHEN dossier.adresse_normalisee IS NULL
6189     OR TRIM(dossier.adresse_normalisee) = \'\'
6190     THEN
6191     CONCAT_WS(
6192     \' \',
6193     dossier.terrain_adresse_voie_numero,
6194     dossier.terrain_adresse_voie,
6195     dossier.terrain_adresse_code_postal
6196     )
6197     ELSE
6198     dossier.adresse_normalisee
6199     END
6200 softime 10573 ) as "'.__("localisation").'"';
6201 softime 6565 //
6202     $case_requerant = "
6203     CASE WHEN demandeur_requerant.qualite = 'particulier'
6204     THEN TRIM(CONCAT(demandeur_requerant.particulier_nom, ' ', demandeur_requerant.particulier_prenom))
6205     ELSE TRIM(CONCAT(demandeur_requerant.personne_morale_raison_sociale, ' ', demandeur_requerant.personne_morale_denomination))
6206     END
6207     ";
6208     //
6209     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
6210     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
6211     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
6212     END";
6213     //
6214     $query_ct_select_champaffiche = array(
6215     'dossier.dossier as "'._("dossier").'"',
6216     'dossier.dossier_libelle as "'._("dossier").'"',
6217     'dossier_autorisation_type_detaille.libelle as "'._("type de dossier").'"',
6218     'dossier_autorisation_contestee.dossier_libelle as "'._("autorisation").'"',
6219     $case_demandeur.' as "'._("petitionnaire").'"',
6220     $trim_concat_terrain,
6221     $case_requerant.' as "'._("requerant").'"',
6222     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',
6223     'avis_decision.libelle as "'._("decision").'"',
6224     'etat.libelle as "'._("etat").'"',
6225     'to_char(dossier.date_cloture_instruction, \'DD/MM/YYYY\') as "'._("date_cloture_instruction").'"',
6226     );
6227    
6228     /**
6229     * Construction de la requête
6230     */
6231     // SELECT
6232     $query_ct_select = "
6233     dossier.dossier,
6234     dossier.dossier_libelle,
6235     dossier.date_cloture_instruction
6236     ";
6237    
6238     // FROM
6239     $query_ct_from = "
6240     ".DB_PREFIXE."dossier
6241     LEFT JOIN ".DB_PREFIXE."etat
6242     ON dossier.etat = etat.etat
6243     LEFT JOIN (
6244     SELECT *
6245     FROM ".DB_PREFIXE."lien_dossier_demandeur
6246     INNER JOIN ".DB_PREFIXE."demandeur
6247     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
6248     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
6249     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
6250     ) as demandeur
6251     ON demandeur.dossier = dossier.dossier
6252     LEFT JOIN (
6253     SELECT *
6254     FROM ".DB_PREFIXE."lien_dossier_demandeur
6255     INNER JOIN ".DB_PREFIXE."demandeur
6256     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
6257     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
6258     AND LOWER(demandeur.type_demandeur) = LOWER('requerant')
6259     ) as demandeur_requerant
6260     ON demandeur_requerant.dossier = dossier.dossier
6261     LEFT JOIN ".DB_PREFIXE."dossier as dossier_autorisation_contestee
6262     ON dossier.autorisation_contestee = dossier_autorisation_contestee.dossier
6263     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
6264     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
6265     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6266     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
6267     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
6268     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
6269     LEFT JOIN ".DB_PREFIXE."avis_decision
6270     ON avis_decision.avis_decision=dossier.avis_decision
6271     %s
6272     %s
6273     %s
6274     ";
6275    
6276     $query_ct_where_instructeur_filter = "";
6277     $query_ct_where_division_filter = "";
6278     $query_ct_where_collectivite_filter = "";
6279     // Filtre sur les dossiers qui concernent l'utilisateur
6280     if ($filtre == "instructeur") {
6281     //
6282     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
6283     ON dossier.instructeur=instructeur.instructeur
6284     OR dossier.instructeur_2=instructeur.instructeur
6285     JOIN ".DB_PREFIXE."om_utilisateur
6286     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
6287     AND om_utilisateur.login='".$_SESSION['login']."'
6288     ";
6289     }
6290    
6291     // Filtre sur les dossier de la division
6292     if ($filtre == "division") {
6293     //
6294     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
6295     ON dossier.division=division.division
6296     AND division.division = ".$_SESSION['division']."
6297     ";
6298     }
6299    
6300     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
6301     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
6302     // collectivité
6303     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
6304     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
6305     ON dossier.om_collectivite=om_collectivite.om_collectivite
6306     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
6307     ";
6308     } else {
6309     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
6310     ON dossier.om_collectivite=om_collectivite.om_collectivite
6311     ";
6312     }
6313    
6314     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
6315    
6316     // WHERE - COMMON
6317     $query_ct_where_common = "
6318     LOWER(dossier_autorisation_type.code) = LOWER('RE')
6319     AND dossier.date_cloture_instruction >= CURRENT_TIMESTAMP
6320     AND dossier.date_cloture_instruction <= CURRENT_TIMESTAMP + interval '1 month'
6321     ";
6322    
6323     // ORDER BY
6324    
6325     $query_ct_orderby = "
6326     dossier.date_cloture_instruction ASC
6327     ";
6328    
6329     $query_ct_where_groupe = "";
6330     // Gestion des groupes et confidentialité
6331     include('../sql/pgsql/filter_group_widgets.inc.php');
6332    
6333     /**
6334     * Message d'aide
6335     */
6336     //
6337     $message_filtre = "";
6338     //
6339     switch ($filtre) {
6340     case "instructeur":
6341     $message_filtre = " "._("dont je suis l'instructeur");
6342     break;
6343     case "division":
6344     $message_filtre = " "._("situés dans ma division");
6345     break;
6346     case "aucun":
6347     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
6348     $message_filtre = " "._("situés dans ma collectivité");
6349     } else {
6350     $message_filtre = " "._("situés dans toutes les collectivités");
6351     }
6352     break;
6353     }
6354     //
6355     $message_help = sprintf(
6356     _("Les recours%s les plus récents pour lesquels une date de clôture d'instruction existe et est comprise entre le jour courant et un mois dans le futur."),
6357     $message_filtre
6358     );
6359    
6360     /**
6361     * Return
6362     */
6363     //
6364     return array(
6365     "arguments" => $arguments,
6366     "message_help" => $message_help,
6367     "query_ct_select" => $query_ct_select,
6368     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
6369     "query_ct_from" => $query_ct_from,
6370     "query_ct_where" => $query_ct_where_common,
6371     "query_ct_where_groupe" => $query_ct_where_groupe,
6372     "query_ct_orderby" => $query_ct_orderby
6373     );
6374     }
6375    
6376     /**
6377     * WIDGET DASHBOARD - Les clôtures
6378     * @return void
6379     */
6380     function view_widget_dossier_contentieux_clotures($content = null) {
6381    
6382     /**
6383     * Ce widget est configurable via l'interface Web. Lors de la création
6384     * du widget dans le paramétrage il est possible de spécifier la ou les
6385     * options suivantes :
6386     * - filtre :
6387     * = instructeur
6388     * = division
6389     * = aucun
6390     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
6391     */
6392     // Liste des paramètres
6393 softime 10573 $params = array("filtre", "affichage");
6394 softime 6565 // Formatage des arguments reçus en paramètres
6395     $arguments = $this->get_arguments($content, $params);
6396     // Récupération de la configuration du widget
6397     $conf = $this->get_config_dossier_contentieux_clotures($arguments);
6398    
6399     $filtre = $conf["arguments"]["filtre"];
6400     //
6401    
6402    
6403     /**
6404     * Composition de la requête
6405     */
6406 softime 10573 // Gestion de la requête selon le type d'affichage
6407     $query_ct_orderby = sprintf(
6408     "ORDER BY
6409     %s
6410     LIMIT 5",
6411     $conf["query_ct_orderby"]
6412     );
6413     $query_ct_select = $conf["query_ct_select"];
6414     if ($conf["arguments"]["affichage"] === "nombre") {
6415     $query_ct_orderby = "";
6416     $query_ct_select = "COUNT(*)";
6417     }
6418 softime 6565 $query = sprintf("
6419     SELECT
6420     %s
6421     FROM
6422     %s
6423     WHERE
6424     %s
6425     %s
6426 softime 10573 %s",
6427     $query_ct_select,
6428 softime 6565 $conf["query_ct_from"],
6429     $conf["query_ct_where"],
6430     $conf["query_ct_where_groupe"],
6431 softime 10573 $query_ct_orderby
6432 softime 6565 );
6433    
6434     /**
6435     * Template nécessaires à l'affichage du widget
6436     */
6437 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
6438     // Exécution de la requête
6439     $res = $this->f->db->getone($query);
6440     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
6441     $this->f->isDatabaseError($res);
6442    
6443     // Affichage du message d'informations
6444     printf(
6445     $this->template_help,
6446     $conf["message_help"]
6447     );
6448     // Si il n'y a aucun dossier à afficher
6449     if (intval($res) == 0) {
6450     echo _("Il n'y a pas de recours pour lesquels une date de clôture d'instruction existe et est comprise entre le jour courant et un mois dans le futur.");
6451     return;
6452     }
6453    
6454     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
6455     } else {
6456     // Exécution de la requête
6457     $res = $this->f->db->query($query);
6458     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
6459     $this->f->isDatabaseError($res);
6460    
6461     // Affichage du message d'informations
6462     printf(
6463     $this->template_help,
6464     $conf["message_help"]
6465     );
6466     // Si il n'y a aucun dossier à afficher
6467     if ($res->numrows() == 0) {
6468     echo _("Il n'y a pas de recours pour lesquels une date de clôture d'instruction existe et est comprise entre le jour courant et un mois dans le futur.");
6469     return;
6470     }
6471     //
6472     $template_table = '
6473     <table class="tab-tab">
6474     <thead>
6475     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
6476     <th class="title col-0 firstcol">
6477     <span class="name">
6478     %s
6479     </span>
6480     </th>
6481     <th class="title col-1">
6482     <span class="name">
6483     %s
6484     </span>
6485     </th>
6486     <th class="title col-2 lastcol">
6487     <span class="name">
6488     %s
6489     </span>
6490     </th>
6491     </tr>
6492     </thead>
6493     <tbody>
6494     %s
6495     </tbody>
6496     </table>
6497     ';
6498     //
6499     $template_line = '
6500     <tr class="tab-data odd">
6501     <td class="col-0 firstcol">
6502     %s
6503     </td>
6504     <td class="col-1 ">
6505     %s
6506     </td>
6507     <td class="col-2 lastcol">
6508     %s
6509     </td>
6510     </tr>
6511     ';
6512     //
6513     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_tous_recours&amp;action=3&amp;idx=%s';
6514     //
6515     $template_link = '
6516     <a class="lienTable" href="%s">
6517 softime 6565 %s
6518 softime 10573 </a>
6519     ';
6520     // Bouton consulter
6521     $template_btn_consulter = '
6522     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
6523     ._('Consulter')
6524     .'</span>
6525     ';
6526     //
6527 softime 6565
6528 softime 10573 /**
6529     * Si il y a des dossiers à afficher, alors on affiche le widget.
6530     */
6531     // On construit le contenu du tableau
6532     $ct_tbody = '';
6533     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
6534     // On construit l'attribut href du lien
6535     $ct_href = sprintf(
6536     $template_href,
6537     // idx
6538     $row["dossier"]
6539     );
6540     // On construit la ligne
6541     $ct_tbody .= sprintf(
6542     $template_line,
6543     // Colonne 1 - Numéro de dossier
6544     sprintf(
6545     $template_link,
6546     $ct_href,
6547     $template_btn_consulter
6548     ),
6549     // Colonne 2 - Numéro de dossier
6550     sprintf(
6551     $template_link,
6552     $ct_href,
6553     $row["dossier_libelle"]
6554     ),
6555     // Colonne 3 - Date de clôture d'instruction
6556     sprintf(
6557     $template_link,
6558     $ct_href,
6559     $this->f->formatDate($row["date_cloture_instruction"])
6560     )
6561     );
6562     }
6563     // Affichage du tableau listant les dossiers
6564     printf(
6565     $template_table,
6566     // Colonne 1 - Consulter
6567     '',
6568 softime 6565 // Colonne 2 - Numéro de dossier
6569 softime 10573 _('dossier'),
6570 softime 6565 // Colonne 3 - Date de clôture d'instruction
6571 softime 10573 _("date_cloture_instruction"),
6572     // Le Contenu
6573     $ct_tbody
6574 softime 6565 );
6575     }
6576     // Affichage du footer
6577     printf(
6578     $this->template_footer,
6579 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_clotures&filtre=" . $filtre,
6580 softime 6565 _("Voir +")
6581     );
6582     }
6583    
6584     /**
6585     * Cette méthode permet de récupérer la configuration du widget 'Les audience'.
6586     *
6587     * @return array
6588     */
6589     function get_config_dossier_contentieux_audience($arguments) {
6590     // Initialisation du tableau des paramètres avec ses valeur par défaut
6591     $arguments_default = array(
6592 softime 10573 "filtre" => "instructeur",
6593     "affichage" => "liste"
6594 softime 6565 );
6595     // Vérification des arguments
6596     foreach ($arguments_default as $key => $value) {
6597     //
6598     if (isset($arguments[$key])) {
6599     //
6600     $elem = trim($arguments[$key]);
6601     //
6602     if ($key === "filtre"
6603     && in_array($elem, array("instructeur", "division", "aucun"))) {
6604     // La valeur doit être dans cette liste
6605     $arguments[$key] = $elem;
6606     continue;
6607 softime 10573 } elseif ($key === "affichage"
6608     && in_array($elem, array('liste', 'nombre'))) {
6609     // La valeur doit être dans cette liste
6610     $arguments[$key] = $elem;
6611     continue;
6612 softime 6565 }
6613     }
6614     //
6615     $arguments[$key] = $value;
6616     }
6617    
6618     $filtre = $arguments["filtre"];
6619    
6620     // SELECT - CHAMPAFFICHE
6621 softime 10573 $trim_concat_terrain = '
6622     TRIM(
6623 softime 11057 CASE
6624     WHEN dossier.adresse_normalisee IS NULL
6625     OR TRIM(dossier.adresse_normalisee) = \'\'
6626     THEN
6627     CONCAT_WS(
6628     \' \',
6629     dossier.terrain_adresse_voie_numero,
6630     dossier.terrain_adresse_voie,
6631     dossier.terrain_adresse_code_postal
6632     )
6633     ELSE
6634     dossier.adresse_normalisee
6635     END
6636 softime 10573 ) as "'.__("localisation").'"';
6637 softime 6565 //
6638     $case_contrevenant = "
6639     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
6640     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
6641     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
6642     END
6643     ";
6644     //
6645     $query_ct_select_champaffiche = array(
6646     'dossier.dossier as "'._("dossier").'"',
6647     'dossier.dossier_libelle as "'._("dossier").'"',
6648     $trim_concat_terrain,
6649     $case_contrevenant.' as "'._("contrevenant").'"',
6650     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
6651     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
6652     'etat.libelle as "'._("etat").'"',
6653     'to_char(donnees_techniques.ctx_date_audience, \'DD/MM/YYYY\') as "'._("ctx_date_audience").'"',
6654     );
6655    
6656     /**
6657     * Construction de la requête
6658     */
6659     // SELECT
6660     $query_ct_select = "
6661     dossier.dossier,
6662     dossier.dossier_libelle,
6663     donnees_techniques.ctx_date_audience
6664     ";
6665    
6666     // FROM
6667     $query_ct_from = "
6668     ".DB_PREFIXE."dossier
6669     LEFT JOIN ".DB_PREFIXE."etat
6670     ON dossier.etat = etat.etat
6671     LEFT JOIN (
6672     SELECT *
6673     FROM ".DB_PREFIXE."lien_dossier_demandeur
6674     INNER JOIN ".DB_PREFIXE."demandeur
6675     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
6676     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
6677     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
6678     ) as demandeur_contrevenant
6679     ON demandeur_contrevenant.dossier = dossier.dossier
6680     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
6681     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
6682     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6683     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
6684     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
6685     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
6686     LEFT JOIN ".DB_PREFIXE."avis_decision
6687     ON avis_decision.avis_decision=dossier.avis_decision
6688     LEFT JOIN ".DB_PREFIXE."donnees_techniques
6689     ON donnees_techniques.dossier_instruction = dossier.dossier
6690     %s
6691     %s
6692     %s
6693     ";
6694    
6695     $query_ct_where_instructeur_filter = "";
6696     $query_ct_where_division_filter = "";
6697     $query_ct_where_collectivite_filter = "";
6698     // Filtre sur les dossiers qui concernent l'utilisateur
6699     if ($filtre == "instructeur") {
6700     //
6701     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
6702     ON dossier.instructeur=instructeur.instructeur
6703     OR dossier.instructeur_2=instructeur.instructeur
6704     JOIN ".DB_PREFIXE."om_utilisateur
6705     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
6706     AND om_utilisateur.login='".$_SESSION['login']."'
6707     ";
6708     }
6709    
6710     // Filtre sur les dossier de la division
6711     if ($filtre == "division") {
6712     //
6713     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
6714     ON dossier.division=division.division
6715     AND division.division = ".$_SESSION['division']."
6716     ";
6717     }
6718    
6719     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
6720     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
6721     // collectivité
6722     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
6723     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
6724     ON dossier.om_collectivite=om_collectivite.om_collectivite
6725     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
6726     ";
6727     } else {
6728     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
6729     ON dossier.om_collectivite=om_collectivite.om_collectivite
6730     ";
6731     }
6732    
6733     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
6734    
6735     // WHERE - COMMON
6736     $query_ct_where_common = "
6737     LOWER(dossier_autorisation_type.code) = LOWER('IN')
6738     AND donnees_techniques.ctx_date_audience IS NOT NULL
6739     AND donnees_techniques.ctx_date_audience >= CURRENT_TIMESTAMP
6740     AND donnees_techniques.ctx_date_audience <= CURRENT_TIMESTAMP + interval '1 month'
6741     ";
6742     // ORDER BY
6743    
6744     $query_ct_orderby = "
6745     donnees_techniques.ctx_date_audience ASC
6746     ";
6747    
6748     $query_ct_where_groupe = "";
6749     // Gestion des groupes et confidentialité
6750     include('../sql/pgsql/filter_group_widgets.inc.php');
6751    
6752     /**
6753     * Message d'aide
6754     */
6755     //
6756     $message_filtre = "";
6757     //
6758     switch ($filtre) {
6759     case "instructeur":
6760     $message_filtre = " "._("dont je suis l'instructeur");
6761     break;
6762     case "division":
6763     $message_filtre = " "._("situés dans ma division");
6764     break;
6765     case "aucun":
6766     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
6767     $message_filtre = " "._("situés dans ma collectivité");
6768     } else {
6769     $message_filtre = " "._("situés dans toutes les collectivités");
6770     }
6771     break;
6772     }
6773     //
6774     $message_help = sprintf(
6775     _("Les infractions%s les plus récentes pour lesquelles une date d'audience existe et est comprise entre le jour courant et un mois dans le futur."),
6776     $message_filtre
6777     );
6778    
6779     /**
6780     * Return
6781     */
6782     //
6783     return array(
6784     "arguments" => $arguments,
6785     "message_help" => $message_help,
6786     "query_ct_select" => $query_ct_select,
6787     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
6788     "query_ct_from" => $query_ct_from,
6789     "query_ct_where" => $query_ct_where_common,
6790     "query_ct_where_groupe" => $query_ct_where_groupe,
6791     "query_ct_orderby" => $query_ct_orderby,
6792     );
6793     }
6794    
6795     /**
6796     * WIDGET DASHBOARD - Les audiences
6797     * @return void
6798     */
6799     function view_widget_dossier_contentieux_audience($content = null) {
6800     /**
6801     * Ce widget est configurable via l'interface Web. Lors de la création
6802     * du widget dans le paramétrage il est possible de spécifier la ou les
6803     * options suivantes :
6804     * - filtre :
6805     * = instructeur
6806     * = division
6807     * = aucun
6808     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
6809     */
6810     // Liste des paramètres
6811 softime 10573 $params = array("filtre", "affichage");
6812 softime 6565 // Formatage des arguments reçus en paramètres
6813     $arguments = $this->get_arguments($content, $params);
6814     // Récupération de la configuration du widget
6815     $conf = $this->get_config_dossier_contentieux_audience($arguments);
6816    
6817     //
6818     $filtre = $conf["arguments"]["filtre"];
6819     //
6820    
6821     /**
6822     * Composition de la requête
6823     */
6824 softime 10573 // Gestion de la requête selon le type d'affichage
6825     $query_ct_orderby = sprintf(
6826     "ORDER BY
6827     %s
6828     LIMIT 5",
6829     $conf["query_ct_orderby"]
6830     );
6831     $query_ct_select = $conf["query_ct_select"];
6832     if ($conf["arguments"]["affichage"] === "nombre") {
6833     $query_ct_orderby = "";
6834     $query_ct_select = "COUNT(*)";
6835     }
6836 softime 6565 $query = sprintf("
6837     SELECT
6838     %s
6839     FROM
6840     %s
6841     WHERE
6842     %s
6843     %s
6844 softime 10573 %s",
6845     $query_ct_select,
6846 softime 6565 $conf["query_ct_from"],
6847     $conf["query_ct_where"],
6848     $conf["query_ct_where_groupe"],
6849 softime 10573 $query_ct_orderby
6850 softime 6565 );
6851    
6852     /**
6853     * Template nécessaires à l'affichage du widget
6854     */
6855 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
6856     // Exécution de la requête
6857     $res = $this->f->db->getone($query);
6858     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
6859     $this->f->isDatabaseError($res);
6860    
6861     // Affichage du message d'informations
6862     printf(
6863     $this->template_help,
6864     $conf["message_help"]
6865     );
6866     // Si il n'y a aucun dossier à afficher
6867     if (intval($res) == 0) {
6868     echo _("Il n'y a pas d'infractions pour lesquelles une date d'audience existe et est comprise entre le jour courant et un mois dans le futur.");
6869     return;
6870     }
6871    
6872     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
6873     } else {
6874     // Exécution de la requête
6875     $res = $this->f->db->query($query);
6876     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
6877     $this->f->isDatabaseError($res);
6878    
6879     // Affichage du message d'informations
6880     printf(
6881     $this->template_help,
6882     $conf["message_help"]
6883     );
6884     // Si il n'y a aucun dossier à afficher
6885     if ($res->numrows() == 0) {
6886     echo _("Il n'y a pas d'infractions pour lesquelles une date d'audience existe et est comprise entre le jour courant et un mois dans le futur.");
6887     return;
6888     }
6889     //
6890     $template_table = '
6891     <table class="tab-tab">
6892     <thead>
6893     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
6894     <th class="title col-0 firstcol">
6895     <span class="name">
6896     %s
6897     </span>
6898     </th>
6899     <th class="title col-1">
6900     <span class="name">
6901     %s
6902     </span>
6903     </th>
6904     <th class="title col-2 lastcol">
6905     <span class="name">
6906     %s
6907     </span>
6908     </th>
6909     </tr>
6910     </thead>
6911     <tbody>
6912     %s
6913     </tbody>
6914     </table>
6915     ';
6916     //
6917     $template_line = '
6918     <tr class="tab-data odd">
6919     <td class="col-0 firstcol">
6920     %s
6921     </td>
6922     <td class="col-1 ">
6923     %s
6924     </td>
6925     <td class="col-2 lastcol">
6926     %s
6927     </td>
6928     </tr>
6929     ';
6930     //
6931     $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
6932     //
6933     $template_link = '
6934     <a class="lienTable" href="%s">
6935 softime 6565 %s
6936 softime 10573 </a>
6937     ';
6938     // Bouton consulter
6939     $template_btn_consulter = '
6940     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
6941     ._('Consulter')
6942     .'</span>
6943     ';
6944     //
6945 softime 6565
6946 softime 10573 /**
6947     * Si il y a des dossiers à afficher, alors on affiche le widget.
6948     */
6949     // On construit le contenu du tableau
6950     $ct_tbody = '';
6951     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
6952     // On construit l'attribut href du lien
6953     $ct_href = sprintf(
6954     $template_href,
6955     // idx
6956     $row["dossier"]
6957     );
6958     // On construit la ligne
6959     $ct_tbody .= sprintf(
6960     $template_line,
6961     // Colonne 1 - Numéro de dossier
6962     sprintf(
6963     $template_link,
6964     $ct_href,
6965     $template_btn_consulter
6966     ),
6967     // Colonne 2 - Numéro de dossier
6968     sprintf(
6969     $template_link,
6970     $ct_href,
6971     $row["dossier_libelle"]
6972     ),
6973     // Colonne 3 - Date d'audience
6974     sprintf(
6975     $template_link,
6976     $ct_href,
6977     $this->f->formatDate($row["ctx_date_audience"])
6978     )
6979     );
6980     }
6981     // Affichage du tableau listant les dossiers
6982     printf(
6983     $template_table,
6984     // Colonne 1 - Consulter
6985     '',
6986 softime 6565 // Colonne 2 - Numéro de dossier
6987 softime 10573 _('dossier'),
6988 softime 6565 // Colonne 3 - Date d'audience
6989 softime 10573 _('ctx_date_audience'),
6990     // Le Contenu
6991     $ct_tbody
6992 softime 6565 );
6993     }
6994     // Affichage du footer
6995     printf(
6996     $this->template_footer,
6997 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_audience&filtre=" . $filtre,
6998 softime 6565 _("Voir +")
6999     );
7000     }
7001    
7002 softime 8329 /**
7003     * WIDGET DASHBOARD - Derniers dossiers déposés
7004     *
7005     * @return void
7006     */
7007     function view_widget_derniers_dossiers_deposes($content = null) {
7008 softime 6565
7009 softime 8329 /**
7010     * Ce widget est configurable via l'interface Web. Lors de la création
7011     * du widget dans le paramétrage il est possible de spécifier la ou les
7012     * options suivantes :
7013     *
7014     * - filtre :
7015     * = instructeur
7016     * = division
7017     * = aucun
7018     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
7019     *
7020     * - nombre_de_jours : c'est le délai en jours avant la date limite à
7021     * partir duquel on souhaite voir apparaître les dossiers dans le
7022     * widget.
7023     * (default) Par défaut la valeur est 15 jours.
7024     *
7025     * - codes_datd : la liste des types de dossiers à afficher. exemple :
7026     * "PCI;PCA;DPS;CUa;CUb".
7027     * (default) Par défaut tous les types sont affichés. [null]
7028     *
7029     * - restreindre_msg_non_lus : dans le listing associé, la colonne "message
7030     * manuel" affiche un indicateur
7031     * = true : que si le dossier comporte au moins un message
7032     * manuel NON LU.
7033     * = (default)false :si le dossier comporte au moins un message
7034     * manuel.
7035     *
7036     * - filtre_depot :
7037     * = depot_electronique
7038     * = guichet
7039     * = (default) aucun
7040     * Par défaut le filtre de dépôt est aucun,
7041     * donc autorise tous les types de dépôt.
7042     */
7043     // Liste des paramètres
7044     $params = array("filtre", "nombre_de_jours", "codes_datd", "filtre_depot", "restreindre_msg_non_lus");
7045     // Formatage des arguments reçus en paramètres
7046     $arguments = $this->get_arguments($content, $params);
7047     // Récupération de la configuration du widget
7048     $conf = $this->get_config_derniers_dossiers_deposes($arguments);
7049     //
7050     $filtre = $conf["arguments"]["filtre"];
7051     $nombre_de_jours = $conf["arguments"]["nombre_de_jours"];
7052     $codes_datd = $conf["arguments"]["codes_datd"];
7053     $filtre_depot = $conf["arguments"]["filtre_depot"];
7054     $restreindre_msg_non_lus = $conf["arguments"]["restreindre_msg_non_lus"];
7055    
7056     /**
7057     * Composition de la requête
7058     */
7059     //
7060     $query = sprintf(
7061     "SELECT COUNT (DISTINCT(dossier.dossier))
7062     FROM
7063     %s
7064     WHERE
7065     %s
7066     %s
7067     %s
7068     %s
7069     %s",
7070     $conf["query_ct_from"],
7071     $conf["query_ct_where_common"],
7072     $conf["query_ct_where_date_filter"],
7073     $conf["query_ct_where_groupe"],
7074     $conf["query_ct_where_depot_filter"],
7075     $conf["query_ct_where_datd_filter"]
7076     );
7077    
7078     /**
7079     * Exécution de la requête
7080     */
7081     //
7082     $res = $this->f->db->getone($query);
7083     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
7084     $this->f->isDatabaseError($res);
7085    
7086     // Affichage du message d'informations
7087     printf(
7088     $this->template_help,
7089     $conf["message_help"]
7090     );
7091    
7092     //
7093     if (intval($res) === 0) {
7094     //
7095     echo _("Aucun dossier déposé dernièrement.");
7096     return;
7097     }
7098    
7099    
7100     /**
7101     *
7102     */
7103 softime 10573 $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
7104 softime 8329
7105     // Affichage du footer
7106     printf(
7107     $this->template_footer,
7108     // href (avec les paramètres du widget)
7109     sprintf(
7110     OM_ROUTE_TAB."&obj=derniers_dossiers_deposes&filtre=%s&nombre_de_jours=%s&codes_datd=%s&filtre_depot=%s&restreindre_msg_non_lus=%s",
7111     $filtre,
7112     $nombre_de_jours,
7113     (is_null($codes_datd) ? "" : implode(";",$codes_datd)),
7114     $filtre_depot,
7115     $restreindre_msg_non_lus
7116     ),
7117     // titre
7118     _("Voir +")
7119     );
7120    
7121     }
7122    
7123 softime 7996 /**
7124 softime 8329 * Cette méthode permet de récupérer la configuration du widget 'Dossiers
7125     * limites'.
7126     *
7127     * @return array
7128     */
7129     function get_config_derniers_dossiers_deposes($arguments) {
7130     // Initialisation du tableau des paramètres avec ses valeur par défaut
7131     $arguments_default = array(
7132     "nombre_de_jours" => 15,
7133     "codes_datd" => null,
7134     "filtre" => "division",
7135     "filtre_depot"=> "aucun",
7136     "restreindre_msg_non_lus" => "false"
7137     );
7138     // Vérification des arguments
7139     foreach ($arguments_default as $key => $value) {
7140     //
7141     if (isset($arguments[$key])) {
7142     //
7143     $elem = trim($arguments[$key]);
7144     //
7145     if ($key === "nombre_de_jours"
7146     && intval($elem) > 0) {
7147     // Ce doit être un entier
7148     $arguments[$key] = intval($elem);
7149     continue;
7150     } elseif ($key === "codes_datd"
7151     && $elem != "") {
7152     // Ce doit être un tableau
7153     $arguments[$key] = explode(";", $elem);
7154     continue;
7155     } elseif ($key === "filtre"
7156     && in_array($elem, array("instructeur", "division", "aucun"))) {
7157     // La valeur doit être dans cette liste
7158     $arguments[$key] = $elem;
7159     continue;
7160     } elseif ($key === "filtre_depot"
7161     && in_array($elem, array("depot_electronique", "guichet", "aucun"))) {
7162     // La valeur doit être dans cette liste
7163     $arguments[$key] = $elem;
7164     continue;
7165     } elseif ($key === "restreindre_msg_non_lus"
7166     && in_array($elem, array("true", "false"))) {
7167     // La valeur doit être dans cette liste
7168     $arguments[$key] = $elem;
7169     continue;
7170     }
7171     }
7172 softime 10573 //
7173 softime 8329 $arguments[$key] = $value;
7174     }
7175     //
7176     $nombre_de_jours = $arguments["nombre_de_jours"];
7177     $codes_datd = $arguments["codes_datd"];
7178     $filtre = $arguments["filtre"];
7179     $filtre_depot = $arguments["filtre_depot"];
7180     $restreindre_msg_non_lus = $arguments["restreindre_msg_non_lus"];
7181    
7182     // SELECT - CHAMPAFFICHE - pour le listing
7183     // On distingue par dossier_libelle car la jointure à la table message
7184     // provoque des doublons lorsqu'un dossier a plusieurs messages
7185     // On distingue par date de dépot car les arguments du "DISTINCT ON"
7186     // doivent être ceux de "ORDER BY"
7187     $case_demandeur = "CASE WHEN demandeur.qualite = 'particulier'
7188     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
7189     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
7190     END";
7191     $query_ct_select_champrecherche = array(
7192     'dossier.dossier as "'._("dossier").'"',
7193     'dossier.dossier_libelle as "'._("dossier_libelle").'"',
7194     );
7195     $query_ct_select_champaffiche = array(
7196 softime 8593 'dossier.dossier as "'._("dossier").'"',
7197 softime 8329 'dossier.dossier_libelle as "'._("dossier").'"',
7198     $case_demandeur.' AS "'._("petitionnaire").'"',
7199     'to_char(dossier.date_depot, \'DD/MM/YYYY\') AS "'._("date_depot").'"',
7200     "CASE WHEN dossier.a_qualifier IS TRUE
7201     THEN 'Oui'
7202     ELSE 'Non'
7203     END".' as "'._("a_qualifier").'"',
7204     'donnees_techniques.co_tot_log_nb as "'._("nombre total de logements").'"',
7205     'CASE WHEN su2_avt_shon1 IS NOT NULL
7206     OR su2_avt_shon2 IS NOT NULL
7207     OR su2_avt_shon3 IS NOT NULL
7208     OR su2_avt_shon4 IS NOT NULL
7209     OR su2_avt_shon5 IS NOT NULL
7210     OR su2_avt_shon6 IS NOT NULL
7211     OR su2_avt_shon7 IS NOT NULL
7212     OR su2_avt_shon8 IS NOT NULL
7213     OR su2_avt_shon9 IS NOT NULL
7214     OR su2_avt_shon10 IS NOT NULL
7215     OR su2_avt_shon11 IS NOT NULL
7216     OR su2_avt_shon12 IS NOT NULL
7217     OR su2_avt_shon13 IS NOT NULL
7218     OR su2_avt_shon14 IS NOT NULL
7219     OR su2_avt_shon15 IS NOT NULL
7220     OR su2_avt_shon16 IS NOT NULL
7221     OR su2_avt_shon17 IS NOT NULL
7222     OR su2_avt_shon18 IS NOT NULL
7223     OR su2_avt_shon19 IS NOT NULL
7224     OR su2_avt_shon20 IS NOT NULL
7225     OR su2_cstr_shon1 IS NOT NULL
7226     OR su2_cstr_shon2 IS NOT NULL
7227     OR su2_cstr_shon3 IS NOT NULL
7228     OR su2_cstr_shon4 IS NOT NULL
7229     OR su2_cstr_shon5 IS NOT NULL
7230     OR su2_cstr_shon6 IS NOT NULL
7231     OR su2_cstr_shon7 IS NOT NULL
7232     OR su2_cstr_shon8 IS NOT NULL
7233     OR su2_cstr_shon9 IS NOT NULL
7234     OR su2_cstr_shon10 IS NOT NULL
7235     OR su2_cstr_shon11 IS NOT NULL
7236     OR su2_cstr_shon12 IS NOT NULL
7237     OR su2_cstr_shon13 IS NOT NULL
7238     OR su2_cstr_shon14 IS NOT NULL
7239     OR su2_cstr_shon15 IS NOT NULL
7240     OR su2_cstr_shon16 IS NOT NULL
7241     OR su2_cstr_shon17 IS NOT NULL
7242     OR su2_cstr_shon18 IS NOT NULL
7243     OR su2_cstr_shon19 IS NOT NULL
7244     OR su2_cstr_shon20 IS NOT NULL
7245     OR su2_chge_shon1 IS NOT NULL
7246     OR su2_chge_shon2 IS NOT NULL
7247     OR su2_chge_shon3 IS NOT NULL
7248     OR su2_chge_shon4 IS NOT NULL
7249     OR su2_chge_shon5 IS NOT NULL
7250     OR su2_chge_shon6 IS NOT NULL
7251     OR su2_chge_shon7 IS NOT NULL
7252     OR su2_chge_shon8 IS NOT NULL
7253     OR su2_chge_shon9 IS NOT NULL
7254     OR su2_chge_shon10 IS NOT NULL
7255     OR su2_chge_shon11 IS NOT NULL
7256     OR su2_chge_shon12 IS NOT NULL
7257     OR su2_chge_shon13 IS NOT NULL
7258     OR su2_chge_shon14 IS NOT NULL
7259     OR su2_chge_shon15 IS NOT NULL
7260     OR su2_chge_shon16 IS NOT NULL
7261     OR su2_chge_shon17 IS NOT NULL
7262     OR su2_chge_shon18 IS NOT NULL
7263     OR su2_chge_shon19 IS NOT NULL
7264     OR su2_chge_shon20 IS NOT NULL
7265     OR su2_demo_shon1 IS NOT NULL
7266     OR su2_demo_shon2 IS NOT NULL
7267     OR su2_demo_shon3 IS NOT NULL
7268     OR su2_demo_shon4 IS NOT NULL
7269     OR su2_demo_shon5 IS NOT NULL
7270     OR su2_demo_shon6 IS NOT NULL
7271     OR su2_demo_shon7 IS NOT NULL
7272     OR su2_demo_shon8 IS NOT NULL
7273     OR su2_demo_shon9 IS NOT NULL
7274     OR su2_demo_shon10 IS NOT NULL
7275     OR su2_demo_shon11 IS NOT NULL
7276     OR su2_demo_shon12 IS NOT NULL
7277     OR su2_demo_shon13 IS NOT NULL
7278     OR su2_demo_shon14 IS NOT NULL
7279     OR su2_demo_shon15 IS NOT NULL
7280     OR su2_demo_shon16 IS NOT NULL
7281     OR su2_demo_shon17 IS NOT NULL
7282     OR su2_demo_shon18 IS NOT NULL
7283     OR su2_demo_shon19 IS NOT NULL
7284     OR su2_demo_shon20 IS NOT NULL
7285     OR su2_sup_shon1 IS NOT NULL
7286     OR su2_sup_shon2 IS NOT NULL
7287     OR su2_sup_shon3 IS NOT NULL
7288     OR su2_sup_shon4 IS NOT NULL
7289     OR su2_sup_shon5 IS NOT NULL
7290     OR su2_sup_shon6 IS NOT NULL
7291     OR su2_sup_shon7 IS NOT NULL
7292     OR su2_sup_shon8 IS NOT NULL
7293     OR su2_sup_shon9 IS NOT NULL
7294     OR su2_sup_shon10 IS NOT NULL
7295     OR su2_sup_shon11 IS NOT NULL
7296     OR su2_sup_shon12 IS NOT NULL
7297     OR su2_sup_shon13 IS NOT NULL
7298     OR su2_sup_shon14 IS NOT NULL
7299     OR su2_sup_shon15 IS NOT NULL
7300     OR su2_sup_shon16 IS NOT NULL
7301     OR su2_sup_shon17 IS NOT NULL
7302     OR su2_sup_shon18 IS NOT NULL
7303     OR su2_sup_shon19 IS NOT NULL
7304     OR su2_sup_shon20 IS NOT NULL
7305     THEN
7306     donnees_techniques.su2_cstr_shon_tot
7307     ELSE
7308     donnees_techniques.su_cstr_shon_tot
7309     END as "'._("surface de plancher construite totale").'"',
7310     "CASE WHEN su2_avt_shon1 IS NOT NULL
7311     OR su2_avt_shon2 IS NOT NULL
7312     OR su2_avt_shon3 IS NOT NULL
7313     OR su2_avt_shon4 IS NOT NULL
7314     OR su2_avt_shon5 IS NOT NULL
7315     OR su2_avt_shon6 IS NOT NULL
7316     OR su2_avt_shon7 IS NOT NULL
7317     OR su2_avt_shon8 IS NOT NULL
7318     OR su2_avt_shon9 IS NOT NULL
7319     OR su2_avt_shon10 IS NOT NULL
7320     OR su2_avt_shon11 IS NOT NULL
7321     OR su2_avt_shon12 IS NOT NULL
7322     OR su2_avt_shon13 IS NOT NULL
7323     OR su2_avt_shon14 IS NOT NULL
7324     OR su2_avt_shon15 IS NOT NULL
7325     OR su2_avt_shon16 IS NOT NULL
7326     OR su2_avt_shon17 IS NOT NULL
7327     OR su2_avt_shon18 IS NOT NULL
7328     OR su2_avt_shon19 IS NOT NULL
7329     OR su2_avt_shon20 IS NOT NULL
7330     OR su2_cstr_shon1 IS NOT NULL
7331     OR su2_cstr_shon2 IS NOT NULL
7332     OR su2_cstr_shon3 IS NOT NULL
7333     OR su2_cstr_shon4 IS NOT NULL
7334     OR su2_cstr_shon5 IS NOT NULL
7335     OR su2_cstr_shon6 IS NOT NULL
7336     OR su2_cstr_shon7 IS NOT NULL
7337     OR su2_cstr_shon8 IS NOT NULL
7338     OR su2_cstr_shon9 IS NOT NULL
7339     OR su2_cstr_shon10 IS NOT NULL
7340     OR su2_cstr_shon11 IS NOT NULL
7341     OR su2_cstr_shon12 IS NOT NULL
7342     OR su2_cstr_shon13 IS NOT NULL
7343     OR su2_cstr_shon14 IS NOT NULL
7344     OR su2_cstr_shon15 IS NOT NULL
7345     OR su2_cstr_shon16 IS NOT NULL
7346     OR su2_cstr_shon17 IS NOT NULL
7347     OR su2_cstr_shon18 IS NOT NULL
7348     OR su2_cstr_shon19 IS NOT NULL
7349     OR su2_cstr_shon20 IS NOT NULL
7350     OR su2_chge_shon1 IS NOT NULL
7351     OR su2_chge_shon2 IS NOT NULL
7352     OR su2_chge_shon3 IS NOT NULL
7353     OR su2_chge_shon4 IS NOT NULL
7354     OR su2_chge_shon5 IS NOT NULL
7355     OR su2_chge_shon6 IS NOT NULL
7356     OR su2_chge_shon7 IS NOT NULL
7357     OR su2_chge_shon8 IS NOT NULL
7358     OR su2_chge_shon9 IS NOT NULL
7359     OR su2_chge_shon10 IS NOT NULL
7360     OR su2_chge_shon11 IS NOT NULL
7361     OR su2_chge_shon12 IS NOT NULL
7362     OR su2_chge_shon13 IS NOT NULL
7363     OR su2_chge_shon14 IS NOT NULL
7364     OR su2_chge_shon15 IS NOT NULL
7365     OR su2_chge_shon16 IS NOT NULL
7366     OR su2_chge_shon17 IS NOT NULL
7367     OR su2_chge_shon18 IS NOT NULL
7368     OR su2_chge_shon19 IS NOT NULL
7369     OR su2_chge_shon20 IS NOT NULL
7370     OR su2_demo_shon1 IS NOT NULL
7371     OR su2_demo_shon2 IS NOT NULL
7372     OR su2_demo_shon3 IS NOT NULL
7373     OR su2_demo_shon4 IS NOT NULL
7374     OR su2_demo_shon5 IS NOT NULL
7375     OR su2_demo_shon6 IS NOT NULL
7376     OR su2_demo_shon7 IS NOT NULL
7377     OR su2_demo_shon8 IS NOT NULL
7378     OR su2_demo_shon9 IS NOT NULL
7379     OR su2_demo_shon10 IS NOT NULL
7380     OR su2_demo_shon11 IS NOT NULL
7381     OR su2_demo_shon12 IS NOT NULL
7382     OR su2_demo_shon13 IS NOT NULL
7383     OR su2_demo_shon14 IS NOT NULL
7384     OR su2_demo_shon15 IS NOT NULL
7385     OR su2_demo_shon16 IS NOT NULL
7386     OR su2_demo_shon17 IS NOT NULL
7387     OR su2_demo_shon18 IS NOT NULL
7388     OR su2_demo_shon19 IS NOT NULL
7389     OR su2_demo_shon20 IS NOT NULL
7390     OR su2_sup_shon1 IS NOT NULL
7391     OR su2_sup_shon2 IS NOT NULL
7392     OR su2_sup_shon3 IS NOT NULL
7393     OR su2_sup_shon4 IS NOT NULL
7394     OR su2_sup_shon5 IS NOT NULL
7395     OR su2_sup_shon6 IS NOT NULL
7396     OR su2_sup_shon7 IS NOT NULL
7397     OR su2_sup_shon8 IS NOT NULL
7398     OR su2_sup_shon9 IS NOT NULL
7399     OR su2_sup_shon10 IS NOT NULL
7400     OR su2_sup_shon11 IS NOT NULL
7401     OR su2_sup_shon12 IS NOT NULL
7402     OR su2_sup_shon13 IS NOT NULL
7403     OR su2_sup_shon14 IS NOT NULL
7404     OR su2_sup_shon15 IS NOT NULL
7405     OR su2_sup_shon16 IS NOT NULL
7406     OR su2_sup_shon17 IS NOT NULL
7407     OR su2_sup_shon18 IS NOT NULL
7408     OR su2_sup_shon19 IS NOT NULL
7409     OR su2_sup_shon20 IS NOT NULL
7410     THEN
7411     REGEXP_REPLACE(CONCAT(
7412     CASE WHEN donnees_techniques.su2_cstr_shon1 IS NULL
7413     THEN ''
7414     ELSE CONCAT ('Exploitation agricole - ', donnees_techniques.su2_cstr_shon1, ' m² / ')
7415     END,
7416     CASE WHEN donnees_techniques.su2_cstr_shon2 IS NULL
7417     THEN ''
7418     ELSE CONCAT ('Exploitation forestière - ', donnees_techniques.su2_cstr_shon2, ' m² / ')
7419     END,
7420     CASE WHEN donnees_techniques.su2_cstr_shon3 IS NULL
7421     THEN ''
7422     ELSE CONCAT ('Logement - ', donnees_techniques.su2_cstr_shon3, ' m² / ')
7423     END,
7424     CASE WHEN donnees_techniques.su2_cstr_shon4 IS NULL
7425     THEN ''
7426     ELSE CONCAT ('Hébergement - ', donnees_techniques.su2_cstr_shon4, ' m² / ')
7427     END,
7428     CASE WHEN donnees_techniques.su2_cstr_shon5 IS NULL
7429     THEN ''
7430     ELSE CONCAT ('Artisanat et commerce de détail - ', donnees_techniques.su2_cstr_shon5, ' m² / ')
7431     END,
7432     CASE WHEN donnees_techniques.su2_cstr_shon6 IS NULL
7433     THEN ''
7434     ELSE CONCAT ('Restauration - ', donnees_techniques.su2_cstr_shon6, ' m² / ')
7435     END,
7436     CASE WHEN donnees_techniques.su2_cstr_shon7 IS NULL
7437     THEN ''
7438     ELSE CONCAT ('Commerce de gros - ', donnees_techniques.su2_cstr_shon7, ' m² / ')
7439     END,
7440     CASE WHEN donnees_techniques.su2_cstr_shon8 IS NULL
7441     THEN ''
7442     ELSE CONCAT ('Activités de services où s''effectue l''accueil d''une clientèle - ', donnees_techniques.su2_cstr_shon8, ' m² / ')
7443     END,
7444     CASE WHEN donnees_techniques.su2_cstr_shon9 IS NULL
7445     THEN ''
7446     ELSE CONCAT ('Hébergement hôtelier et touristique - ', donnees_techniques.su2_cstr_shon9, ' m² / ')
7447     END,
7448     CASE WHEN donnees_techniques.su2_cstr_shon10 IS NULL
7449     THEN ''
7450     ELSE CONCAT ('Cinéma - ', donnees_techniques.su2_cstr_shon10, ' m² / ')
7451     END,
7452     CASE WHEN donnees_techniques.su2_cstr_shon11 IS NULL
7453     THEN ''
7454     ELSE CONCAT ('Locaux et bureaux accueillant du public des administrations publiques et assimilés - ', donnees_techniques.su2_cstr_shon11, ' m² / ')
7455     END,
7456     CASE WHEN donnees_techniques.su2_cstr_shon12 IS NULL
7457     THEN ''
7458     ELSE CONCAT ('Locaux techniques et industriels des administrations publiques et assimilés - ', donnees_techniques.su2_cstr_shon12, ' m² / ')
7459     END,
7460     CASE WHEN donnees_techniques.su2_cstr_shon13 IS NULL
7461     THEN ''
7462     ELSE CONCAT ('Établissements d''enseignement, de santé et d''action sociale - ', donnees_techniques.su2_cstr_shon13, ' m² / ')
7463     END,
7464     CASE WHEN donnees_techniques.su2_cstr_shon14 IS NULL
7465     THEN ''
7466     ELSE CONCAT ('Salles d''art et de spectacles - ', donnees_techniques.su2_cstr_shon14, ' m² / ')
7467     END,
7468     CASE WHEN donnees_techniques.su2_cstr_shon15 IS NULL
7469     THEN ''
7470     ELSE CONCAT ('Équipements sportifs - ', donnees_techniques.su2_cstr_shon15, ' m² / ')
7471     END,
7472     CASE WHEN donnees_techniques.su2_cstr_shon16 IS NULL
7473     THEN ''
7474     ELSE CONCAT ('Autres équipements recevant du public - ', donnees_techniques.su2_cstr_shon16, ' m² / ')
7475     END,
7476     CASE WHEN donnees_techniques.su2_cstr_shon17 IS NULL
7477     THEN ''
7478     ELSE CONCAT ('Industrie - ', donnees_techniques.su2_cstr_shon17, ' m² / ')
7479     END,
7480     CASE WHEN donnees_techniques.su2_cstr_shon18 IS NULL
7481     THEN ''
7482     ELSE CONCAT ('Entrepôt - ', donnees_techniques.su2_cstr_shon18, ' m² / ')
7483     END,
7484     CASE WHEN donnees_techniques.su2_cstr_shon19 IS NULL
7485     THEN ''
7486     ELSE CONCAT ('Bureau - ', donnees_techniques.su2_cstr_shon19, ' m² / ')
7487     END,
7488     CASE WHEN donnees_techniques.su2_cstr_shon20 IS NULL
7489     THEN ''
7490     ELSE CONCAT ('Centre de congrès et d''exposition - ', donnees_techniques.su2_cstr_shon20, ' m²')
7491     END
7492     ), ' / $', '')
7493     ELSE
7494     REGEXP_REPLACE(CONCAT(
7495     CASE
7496     WHEN donnees_techniques.su_cstr_shon1 IS NULL
7497     THEN ''
7498     ELSE CONCAT('Habitation - ', donnees_techniques.su_cstr_shon1, ' m² / ')
7499     END,
7500     CASE
7501     WHEN donnees_techniques.su_cstr_shon2 IS NULL
7502     THEN ''
7503     ELSE CONCAT('Hébergement hôtelier - ', donnees_techniques.su_cstr_shon2, ' m² / ')
7504     END,
7505     CASE
7506     WHEN donnees_techniques.su_cstr_shon3 IS NULL
7507     THEN ''
7508     ELSE CONCAT('Bureaux - ', donnees_techniques.su_cstr_shon3, ' m² / ')
7509     END,
7510     CASE
7511     WHEN donnees_techniques.su_cstr_shon4 IS NULL
7512     THEN ''
7513     ELSE CONCAT('Commerce - ', donnees_techniques.su_cstr_shon4, ' m² / ')
7514     END,
7515     CASE
7516     WHEN donnees_techniques.su_cstr_shon5 IS NULL
7517     THEN ''
7518     ELSE CONCAT('Artisanat - ', donnees_techniques.su_cstr_shon5, ' m² / ')
7519     END,
7520     CASE
7521     WHEN donnees_techniques.su_cstr_shon6 IS NULL
7522     THEN ''
7523     ELSE CONCAT('Industrie - ', donnees_techniques.su_cstr_shon6, ' m² / ')
7524     END,
7525     CASE
7526     WHEN donnees_techniques.su_cstr_shon7 IS NULL
7527     THEN ''
7528     ELSE CONCAT('Exploitation agricole ou forestière - ', donnees_techniques.su_cstr_shon7, ' m² / ')
7529     END,
7530     CASE
7531     WHEN donnees_techniques.su_cstr_shon8 IS NULL
7532     THEN ''
7533     ELSE CONCAT('Entrepôt - ', donnees_techniques.su_cstr_shon8, ' m² / ')
7534     END,
7535     CASE
7536     WHEN donnees_techniques.su_cstr_shon9 IS NULL
7537     THEN ''
7538     ELSE CONCAT('Service public ou d''intérêt collectif - ', donnees_techniques.su_cstr_shon9, ' m²')
7539     END
7540     ), ' / $', '')
7541     END".' as "'._("destination").'"'
7542     );
7543    
7544     //SELECT DEPOT ELECTRONIQUE (LISTING)
7545     // Si le filtre_depot précise le type de dépot il est inutile de faire apparaitre cette colonne
7546     if ($filtre_depot == "aucun") {
7547     //
7548     $query_ct_select_depot_electronique="CASE WHEN dossier.depot_electronique IS TRUE
7549     THEN 'Oui'
7550     ELSE 'Non'
7551     END".' as "'._("depot_electronique").'"';
7552     // On l'ajoute aux champs affichés
7553     $query_ct_select_champaffiche[] = $query_ct_select_depot_electronique;
7554     }
7555    
7556     // SELECT COLONNE MESSAGE (LISTING)
7557     $query_ct_select_message ="";
7558     $title_icon_message = __("Le dossier d'instruction possède au moins un message ajouté manuellement%s.")." ".__("Cliquez sur l'icône pour accéder à la liste des messages du dossier.");
7559     switch($restreindre_msg_non_lus) {
7560     case "false" :
7561     $query_ct_select_message =
7562     "CASE
7563     WHEN dossier.dossier IN (
7564     SELECT dossier.dossier
7565 softime 8477 FROM ".DB_PREFIXE."dossier
7566     LEFT JOIN ".DB_PREFIXE."dossier_message ON dossier.dossier=dossier_message.dossier
7567 softime 8329 WHERE dossier_message.lu IS NOT NULL
7568     AND dossier_message.type ='"._("message manuel")."'
7569     )
7570     THEN %s
7571     ELSE %s
7572     END as message";
7573     $title_icon_message = sprintf($title_icon_message, "");
7574     break;
7575     case "true" :
7576     $query_ct_select_message =
7577     "CASE
7578     WHEN dossier.dossier IN (
7579     SELECT dossier.dossier
7580 softime 8477 FROM ".DB_PREFIXE."dossier
7581     LEFT JOIN ".DB_PREFIXE."dossier_message ON dossier.dossier=dossier_message.dossier
7582 softime 8329 WHERE dossier_message.lu IS NOT NULL
7583     AND dossier_message.type ='"._("message manuel")."'
7584     AND dossier_message.lu IS FALSE
7585     )
7586     THEN %s
7587     ELSE %s
7588     END as message";
7589     $title_icon_message = sprintf($title_icon_message, " ".__('qui soit non lu'));
7590     break;
7591     }
7592     //Selon le paramétrage, une icone de notification message s'affiche à l'utilisateur. Cliquer dessus redirige vers l'onglet des messages.
7593     $icone_msg = "CONCAT ('<a title=\"', '".pg_escape_string($title_icon_message)."','\" href=','".OM_ROUTE_FORM."','&obj=dossier_instruction&action=3&idx=',dossier.dossier,'&advs_id=&premier=0&tricol=&valide=&retour=tab#ui-tabs-6>".'<span class=".om-icon om-icon-16 om-icon-fix message-manuel-16"/></a>'."')";
7594     // Sans message (ou message non lu selon paramétrage) rien ne s'affiche dans la colonne
7595     $icone_no_msg = "''";
7596     $query_ct_select_message = sprintf($query_ct_select_message, $icone_msg, $icone_no_msg);
7597     //Les requêtes de la colonne message sont ajoutées aux requêtes des champs affichés pour le listing
7598     $query_ct_select_champaffiche[] = $query_ct_select_message;
7599    
7600     // FROM
7601     $query_ct_from = "
7602     ".DB_PREFIXE."dossier
7603     LEFT JOIN (
7604     SELECT *
7605     FROM ".DB_PREFIXE."lien_dossier_demandeur
7606     INNER JOIN ".DB_PREFIXE."demandeur
7607     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
7608     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
7609     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
7610     ) AS demandeur
7611     ON demandeur.dossier = dossier.dossier
7612     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7613     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
7614     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
7615     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
7616     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
7617     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
7618     LEFT JOIN ".DB_PREFIXE."donnees_techniques
7619     ON dossier.dossier = donnees_techniques.dossier_instruction
7620     %s
7621     %s
7622     %s
7623     ";
7624    
7625     $query_ct_where_instructeur_filter = "";
7626     $query_ct_where_division_filter = "";
7627     $query_ct_where_collectivite_filter = "";
7628     // Filtre sur les dossiers qui concernent l'utilisateur
7629     if ($filtre == "instructeur") {
7630     //
7631     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
7632     ON dossier.instructeur=instructeur.instructeur
7633     JOIN ".DB_PREFIXE."om_utilisateur
7634     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
7635     AND om_utilisateur.login='".$_SESSION['login']."'
7636     ";
7637     } else {
7638     $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
7639     ON dossier.instructeur=instructeur.instructeur
7640     LEFT JOIN ".DB_PREFIXE."om_utilisateur
7641     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
7642     }
7643     // Filtre sur les dossier de la division
7644     if ($filtre == "division") {
7645     //
7646     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
7647     ON dossier.division=division.division
7648     AND division.division = ".$_SESSION['division']."
7649     ";
7650     } else {
7651     $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
7652     ON dossier.division=division.division";
7653     }
7654     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
7655     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
7656     // collectivité
7657     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
7658     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
7659     ON dossier.om_collectivite=om_collectivite.om_collectivite
7660     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
7661     ";
7662     } else {
7663     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
7664     ON dossier.om_collectivite=om_collectivite.om_collectivite
7665     ";
7666     }
7667    
7668     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
7669     // WHERE - COMMON
7670     $query_ct_where_common = "
7671     groupe.code != 'CTX'
7672     ";
7673     // WHERE - nombre_de_jours
7674     // Filtre sur l'intervalle pour la date de dépôt
7675     $query_ct_where_date_filter = "
7676     AND dossier.date_depot >= CURRENT_TIMESTAMP - ".$nombre_de_jours." * interval '1 day'
7677     ";
7678     // WHERE - DATD
7679     // Filtre sur le type détaillé des dossiers
7680     $query_ct_where_datd_filter = "";
7681     if (!is_null($codes_datd)
7682     && is_array($codes_datd)
7683     && count($codes_datd) != 0) {
7684     //
7685     $sql_codes = "";
7686     //
7687     foreach ($codes_datd as $code) {
7688     $sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR ";
7689     }
7690 softime 9282 $sql_codes = substr($sql_codes, 0, strlen($sql_codes) - 4);
7691 softime 8329 //
7692     $query_ct_where_datd_filter = " AND ( ".$sql_codes." ) ";
7693     }
7694     //WHERE - filtre_depot
7695     // Filtre sur le type de dépôt des dossiers
7696     $query_ct_where_depot_filter = "";
7697     if ($filtre_depot == "depot_electronique") {
7698     //
7699     $query_ct_where_depot_filter = "
7700     AND dossier.depot_electronique IS TRUE
7701     ";
7702     }
7703     if ($filtre_depot == "guichet") {
7704    
7705     $query_ct_where_depot_filter = "
7706     AND dossier.depot_electronique IS FALSE
7707     ";
7708     }
7709    
7710     // ORDER BY
7711     $query_ct_orderby = "
7712     dossier.date_depot DESC,
7713     dossier.dossier
7714     ";
7715    
7716     $query_ct_where_groupe = "";
7717     // Gestion des groupes et confidentialité
7718     include('../sql/pgsql/filter_group_widgets.inc.php');
7719    
7720     /**
7721     * Message d'aide
7722     */
7723     //
7724     $message_filtre_depot = '';
7725     //
7726     switch ($filtre_depot) {
7727     case "depot_electronique" :
7728     $message_filtre_depot = " "._("déposés électroniquement uniquement");
7729     break;
7730     case "guichet" :
7731     $message_filtre_depot = " "._("déposés uniquement via le guichet");
7732     break;
7733     case "aucun" :
7734     $message_filtre_depot = " "._("déposés");
7735     break;
7736     }
7737     //
7738     $message_filtre = "";
7739     //
7740     switch ($filtre) {
7741     case "instructeur" :
7742     $message_filtre = " "._("(filtrés par instructeur)");
7743     break;
7744     case "division" :
7745     $message_filtre = " "._("(filtrés par division)");
7746     break;
7747     }
7748     //
7749     $message_restreindre_msg_non_lus = "";
7750     //
7751     if ($restreindre_msg_non_lus === "true") {
7752     $message_restreindre_msg_non_lus =" "._("et dont l'indicateur des messages manuels est restreint aux messages non lus");
7753     }
7754     //
7755     $message_help = sprintf(
7756     _("Les dossiers%s%s dans les %s derniers jours%s%s."),
7757     (is_null($codes_datd) ? "": " (".implode(", ",$codes_datd).")"),
7758     $message_filtre_depot,
7759     $nombre_de_jours,
7760     $message_filtre,
7761     $message_restreindre_msg_non_lus
7762     );
7763    
7764     /**
7765     * Return
7766     */
7767     //
7768     return array(
7769     "arguments" => $arguments,
7770     "message_help" => $message_help,
7771     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
7772     "query_ct_select_champrecherche" => $query_ct_select_champrecherche,
7773     "query_ct_from" => $query_ct_from,
7774     "query_ct_where_common" => $query_ct_where_common,
7775     "query_ct_where_date_filter" => $query_ct_where_date_filter,
7776     "query_ct_where_depot_filter" => $query_ct_where_depot_filter,
7777     "query_ct_where_datd_filter" => $query_ct_where_datd_filter,
7778     "query_ct_where_groupe" => $query_ct_where_groupe,
7779     "query_ct_orderby" => $query_ct_orderby,
7780     );
7781     }
7782    
7783    
7784     /**
7785 softime 7996 * Cette méthode permet de récupérer la configuration du widget 'Dossier consulter'.
7786     *
7787     * @return array
7788     */
7789     function get_config_dossier_consulter($idx) {
7790     /**
7791     * Construction de la requête
7792     */
7793 softime 8329 //
7794     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
7795     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
7796     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
7797     END";
7798 softime 7996 // SELECT
7799     $query_ct_select = "
7800 softime 8329 dossier.dossier,
7801     dossier.dossier_libelle,
7802     $case_demandeur as nom_petitionnaire,
7803     dossier.date_depot,
7804     dossier_autorisation_type.code
7805 softime 7996 ";
7806    
7807     // FROM
7808     $query_ct_from = "
7809     ".DB_PREFIXE."dossier
7810     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
7811     ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
7812     LEFT JOIN ".DB_PREFIXE."demandeur
7813     ON lien_dossier_demandeur.demandeur = demandeur.demandeur
7814     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
7815     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
7816     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
7817     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
7818     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
7819     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
7820     ";
7821    
7822     $query_ct_where_id_dossier_consulte ="
7823     dossier.dossier ='".$idx."'
7824     ";
7825    
7826     /**
7827     * Return
7828     */
7829     //
7830     return array(
7831     "query_ct_select" => $query_ct_select,
7832     "query_ct_from" => $query_ct_from,
7833     "query_ct_where_id_dossier_consulte" => $query_ct_where_id_dossier_consulte,
7834     );
7835     }
7836    
7837     /**
7838     * WIDGET DASHBOARD - widget_dossier_consulter
7839     * @return void
7840     */
7841     function view_widget_dossier_consulter($content = null) {
7842     /**
7843     * Ce widget est configurable via l'interface Web. Lors de la création
7844     * du widget dans le paramétrage il est possible de spécifier l'options suivantes :
7845     *
7846     * - nb_dossiers : le nombre de dossiers récemment consultés visibile dans le
7847     * widget.
7848     * (default) Par défaut la valeur est 5 derniers dossiers.
7849     **/
7850    
7851     // Liste des paramètres
7852     $params = array("nb_dossiers");
7853     // Formatage des arguments reçus en paramètres
7854     $arguments = $this->get_arguments($content, $params);
7855    
7856     //On retire 1 à la valeur de nb_dossiers car $i boucle à partir de 0
7857     if(isset($arguments['nb_dossiers']) == false) {
7858     $nb_dossiers = 4;
7859     } else {
7860     $nb_dossiers = $arguments['nb_dossiers']-1;
7861     }
7862    
7863    
7864     $dossier_brut = null;
7865     if (isset($_SESSION['dossiers_consulte']) === false) {
7866     $dossiers_consulte = array();
7867     } else {
7868     $dossier_brut = $_SESSION['dossiers_consulte'];
7869     $dossiers_consulte = array_reverse($dossier_brut);
7870     }
7871    
7872     /**
7873     * Template nécessaires à l'affichage du widget
7874     */
7875     //
7876     $template_table = '
7877     <table class="tab-tab widget_dossier_consulter">
7878     <thead>
7879     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
7880     <th class="title col-0 firstcol">
7881     <span class="name">
7882     %s
7883     </span>
7884     </th>
7885     <th class="title col-1">
7886     <span class="name">
7887     %s
7888     </span>
7889     </th>
7890     <th class="title col-2">
7891     <span class="name">
7892     %s
7893     </span>
7894     </th>
7895     </tr>
7896     </thead>
7897     <tbody>
7898     %s
7899     </tbody>
7900     </table>
7901     ';
7902     //
7903     $template_line = '
7904     <tr class="tab-data odd">
7905     <td class="col-1 firstcol">
7906     %s
7907     </td>
7908     <td class="col-1">
7909     %s
7910     </td>
7911     <td class="col-2">
7912     %s
7913     </td>
7914     </tr>
7915     ';
7916    
7917     //
7918     $template_line_hidden = '
7919     <tr class="tab-data odd" hidden>
7920     <td class="col-1 firstcol">
7921     %s
7922     </td>
7923     <td class="col-1">
7924     %s
7925     </td>
7926     <td class="col-2">
7927     %s
7928     </td>
7929     </tr>
7930     ';
7931     // Récupererle type du dossier pour bien rediriger et son id.
7932     $template_href = OM_ROUTE_FORM.'&obj=%s&action=3&idx=%s';
7933    
7934     $template_link = '
7935     <a class="lienTable" href="%s">
7936     %s
7937     </a>
7938     ';
7939     //
7940     $template_footer_consulter = '
7941     <div class="widget-footer">
7942     <a class="simple-btn" onClick="%s">
7943     %s
7944     </a>
7945     </div>
7946     ';
7947    
7948     if ($dossier_brut === null) {
7949     // Affichage du message d'information
7950 softime 8329 echo __("Vous n'avez pas consulté de dossier pour le moment.");
7951 softime 7996 // Exit
7952     return;
7953     }
7954    
7955     $ct_tbody = '';
7956    
7957     $i = 0;
7958     // On construit le contenu du tableau
7959     foreach ($dossiers_consulte as $key => $value) {
7960    
7961     // Récupération en bdd des données necessaire par idx
7962     $conf = $this->get_config_dossier_consulter($value);
7963    
7964     // Composition de la requête
7965     $query = sprintf("
7966     SELECT
7967     %s
7968     FROM
7969     %s
7970     WHERE
7971     %s",
7972     $conf["query_ct_select"],
7973     $conf["query_ct_from"],
7974     $conf["query_ct_where_id_dossier_consulte"]
7975     );
7976    
7977     // Exécution de la requête
7978     $res = $this->f->db->query($query);
7979     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
7980     $this->f->isDatabaseError($res);
7981     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
7982    
7983     // Determination de la route à utiliser.
7984     switch ($row['code']) {
7985     case 'IN':
7986     $route="dossier_contentieux_toutes_infractions";
7987     break;
7988     case 'RE':
7989     $route="dossier_contentieux_tous_recours";
7990     break;
7991     default: $route="dossier_instruction";
7992     }
7993    
7994     // On construit l'attribut href du lien
7995     $ct_href = sprintf(
7996     $template_href,
7997     $route,
7998     // idx
7999     $row['dossier']
8000     );
8001    
8002     if ($i > $nb_dossiers){
8003     $good_template_line = $template_line_hidden;
8004     } else {
8005     $good_template_line = $template_line;
8006     }
8007     // Construction d'une ligne
8008     $ct_tbody .= sprintf(
8009     $good_template_line,
8010     // Colonne 1 - Numéro de dossier
8011     sprintf(
8012     $template_link,
8013     $ct_href,
8014     $row['dossier_libelle']
8015     ),
8016     // Colonne 2 - Nom du pétitionnaire
8017     sprintf(
8018     $template_link,
8019     $ct_href,
8020     $row["nom_petitionnaire"]
8021     ),
8022     // Colonne 3 - Date depot
8023     sprintf(
8024     $template_link,
8025     $ct_href,
8026     $this->f->formatDate($row["date_depot"])
8027     )
8028     );
8029    
8030     $i++;
8031     }
8032     // Affichage du tableau listant les dossiers
8033     printf(
8034     $template_table,
8035     // Colonne 1 - Numéro de dossier
8036 softime 8329 __('dossier'),
8037 softime 7996 // Colonne 2 - petitionnaire
8038 softime 8329 __('demandeur'),
8039 softime 7996 // Colonne 3 - date depot
8040 softime 8329 __('date_depot'),
8041 softime 7996 // Contenu du tableau
8042     $ct_tbody
8043     );
8044    
8045     // On affiche le footer seulement si l'utilisateur à consulté plus de
8046     // dossier que le nombre de dossier affiché par défaut (paramétrage)
8047     if ($i > $nb_dossiers) {
8048     // Affichage du footer
8049     printf(
8050     $template_footer_consulter,
8051     "get_all_dossier_consulte($(this).parent().parent().parent().parent().attr('id'))",
8052 softime 8329 __("Afficher +")
8053 softime 7996 );
8054     }
8055     }
8056    
8057 softime 8989 /**
8058     * WIDGET DASHBOARD - Dossiers à qualifier (limite de la notification du délai)
8059     * @return void
8060     */
8061     function view_widget_dossiers_pre_instruction($content = null) {
8062     /**
8063     * Ce widget est configurable via l'interface Web. Lors de la création
8064     * du widget dans le paramétrage il est possible de spécifier la ou les
8065     * options suivantes :
8066     * - filtre :
8067     * = instructeur
8068     * = aucun
8069     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
8070     */
8071     // Liste des paramètres
8072 softime 10573 $params = array("filtre", "codes_datd", "affichage");
8073 softime 8989 // Formatage des arguments reçus en paramètres
8074     $arguments = $this->get_arguments($content, $params);
8075     // Récupération de la configuration du widget
8076     $conf = $this->get_config_dossiers_pre_instruction($arguments);
8077     // Récupération du filtre
8078     $filtre = $conf["arguments"]["filtre"];
8079     //Récupération du code datd
8080     $codes_datd = $conf["arguments"]["codes_datd"];
8081     // Définit l'objet cible
8082     $obj = 'dossier_instruction';
8083    
8084     /**
8085     * Composition de la requête
8086     */
8087 softime 10573 // Gestion de la requête selon le type d'affichage
8088     $query_ct_orderby = sprintf(
8089     "ORDER BY
8090     %s
8091     LIMIT 5",
8092     $conf["query_ct_orderby"]
8093     );
8094     $query_ct_select = $conf["query_ct_select"];
8095     if ($conf["arguments"]["affichage"] === "nombre") {
8096     $query_ct_orderby = "";
8097     $query_ct_select = "COUNT(*)";
8098     }
8099 softime 8989 $query = sprintf("
8100     SELECT
8101     %s
8102     FROM
8103     %s
8104     WHERE
8105     %s
8106     %s
8107 softime 10573 %s",
8108     $query_ct_select,
8109 softime 8989 $conf["query_ct_from"],
8110     $conf["query_ct_where"],
8111     $conf["query_ct_where_datd_filter"],
8112 softime 10573 $query_ct_orderby
8113 softime 8989 );
8114    
8115     /**
8116 softime 10573 * Template nécessaires à l'affichage du widget
8117 softime 8989 */
8118 softime 10573 if ($conf["arguments"]["affichage"] === "nombre") {
8119     // Exécution de la requête
8120     $res = $this->f->db->getone($query);
8121     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
8122     $this->f->isDatabaseError($res);
8123    
8124 softime 8989 // Affichage du message d'informations
8125 softime 10573 printf(
8126     $this->template_help,
8127     $conf["message_help"]
8128     );
8129     // Si il n'y a aucun dossier à afficher
8130     if (intval($res) == 0) {
8131     // Affichage du message d'informations
8132     echo __("Vous n'avez aucun dossier d'instruction à qualifier dont la date limite de notification du délai au pétitionnaire arrive bientôt à échéance.");
8133     // Exit
8134     return;
8135     }
8136    
8137     $this->display_resultat_bulle($res, "Non lu", "bg-info", "");
8138     } else {
8139     // Exécution de la requête
8140     $res = $this->f->db->query($query);
8141     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
8142     $this->f->isDatabaseError($res);
8143    
8144     // Affichage du message d'informations
8145     printf(
8146     $this->template_help,
8147     $conf["message_help"]
8148     );
8149     // Si il n'y a aucun dossier à afficher
8150     if ($res->numrows() == 0) {
8151     // Affichage du message d'informations
8152     echo __("Vous n'avez aucun dossier d'instruction à qualifier dont la date limite de notification du délai au pétitionnaire arrive bientôt à échéance.");
8153     // Exit
8154     return;
8155     }
8156     //
8157     $template_table = '
8158     <table class="tab-tab">
8159     <thead>
8160     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
8161     <th class="title col-0 firstcol">
8162     <span class="name">
8163     %s
8164     </span>
8165     </th>
8166     <th class="title col-1">
8167     <span class="name">
8168     %s
8169     </span>
8170     </th>
8171     <th class="title col-2">
8172     <span class="name">
8173     %s
8174     </span>
8175     </th>
8176     <th class="title col-3 lastcol">
8177     <span class="name">
8178     %s
8179     </span>
8180     </th>
8181     </tr>
8182     </thead>
8183     <tbody>
8184     %s
8185     </tbody>
8186     </table>
8187     ';
8188     //
8189     $template_line = '
8190     <tr id="dossier_dossiers_pre_instruction_%s" class="tab-data odd">
8191     <td class="col-0 firstcol">
8192     %s
8193     </td>
8194     <td class="col-1 ">
8195     %s
8196     </td>
8197     <td class="col-2">
8198     %s
8199     </td>
8200     <td class="col-3 lastcol">
8201     %s
8202     </td>
8203     </tr>
8204     ';
8205 softime 8989
8206 softime 10573 // Bouton consulter
8207     $template_btn_consulter = '
8208     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
8209     ._('Consulter')
8210     .'</span>
8211     ';
8212     //
8213     $template_href = OM_ROUTE_FORM.'&obj=%s&amp;action=3&amp;idx=%s';
8214     //
8215     $template_link = '
8216     <a class="lienTable" href="%s">
8217 softime 8989 %s
8218 softime 10573 </a>
8219     ';
8220 softime 8989
8221 softime 10573 /**
8222     * Si il y a des dossiers à afficher, alors on affiche le widget.
8223     */
8224     // On construit le contenu du tableau
8225     $ct_tbody = '';
8226     $compteur = 0;
8227     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
8228     // On construit l'attribut href du lien
8229     $ct_href = sprintf(
8230     $template_href,
8231     // obj
8232     $obj,
8233     // idx
8234     $row["dossier"]
8235     );
8236     // On construit la ligne
8237     $ct_tbody .= sprintf(
8238     $template_line,
8239     //Numero des id html
8240     $compteur,
8241     // Colonne 1 - Numéro de dossier
8242     sprintf(
8243     $template_link,
8244     $ct_href,
8245     $template_btn_consulter
8246     ),
8247     // Colonne 2 - Numéro de dossier
8248     sprintf(
8249     $template_link,
8250     $ct_href,
8251     $row["dossier_libelle"]
8252     ),
8253     // Colonne 3 - Demandeur
8254     sprintf(
8255     $template_link,
8256     $ct_href,
8257     $row["nom_petitionnaire"]
8258     ),
8259     // Colonne 4 - Date de Notification de délai
8260     sprintf(
8261     $template_link,
8262     $ct_href,
8263     $this->f->formatDate($row["date_notification_delai"])
8264     )
8265     );
8266     $compteur++;
8267     }
8268     // Affichage du tableau listant les dossiers
8269     printf(
8270     $template_table,
8271     // Colonne 1 - Consulter
8272     '',
8273     // Colonne 2 - Libellé du dossier
8274     __('dossier'),
8275 softime 8989 // Colonne 3 - Demandeur
8276 softime 10573 __('nom_petitionnaire'),
8277     // Colonne 4 - Date de notification de delai
8278     __("date de notification limite"),
8279     // Le Contenu
8280     $ct_tbody
8281 softime 8989 );
8282     }
8283     /**
8284     * Affichage du footer
8285     */
8286     //
8287     $template_link_footer = OM_ROUTE_TAB.'&obj=%s';
8288     //
8289     $link_footer = sprintf(
8290     $template_link_footer,
8291     "dossiers_pre_instruction"
8292     );
8293     //
8294     printf(
8295     $this->template_footer,
8296     // href (avec les paramètres du widget)
8297     sprintf(
8298     "%s&filtre=%s&codes_datd=%s",
8299     $link_footer,
8300     $filtre,
8301     (is_null($codes_datd) ? "" : implode(";",$codes_datd))
8302     ),
8303     // titre
8304     __("Voir +")
8305     );
8306     }
8307    
8308     /**
8309     * Cette méthode permet de récupérer la configuration du widget
8310     * 'Dossiers à qualifier (limite de la notification du délai)'.
8311     *
8312     * @return array
8313     */
8314     function get_config_dossiers_pre_instruction($arguments) {
8315     // Initialisation du tableau des paramètres avec ses valeur par défaut
8316     $arguments_default = array(
8317     "filtre" => "instructeur",
8318 softime 10573 "codes_datd" => null,
8319     "affichage" => "liste"
8320 softime 8989 );
8321     // Vérification des arguments
8322     foreach ($arguments_default as $key => $value) {
8323     //
8324     if (isset($arguments[$key])) {
8325     //
8326     $elem = trim($arguments[$key]);
8327     //
8328     if ($key === "filtre"
8329     && in_array($elem, array("instructeur", "division", "aucun"))) {
8330     // La valeur doit être dans cette liste
8331     $arguments[$key] = $elem;
8332     continue;
8333     } elseif ($key === "codes_datd"
8334     && $elem != "") {
8335     // Ce doit être un tableau
8336     $arguments[$key] = explode(";", $elem);
8337     continue;
8338 softime 10573 } elseif ($key === "affichage"
8339     && in_array($elem, array('liste', 'nombre'))) {
8340     // La valeur doit être dans cette liste
8341     $arguments[$key] = $elem;
8342     continue;
8343 softime 8989 }
8344     }
8345     //
8346     $arguments[$key] = $value;
8347     }
8348    
8349     $filtre = $arguments["filtre"];
8350     $codes_datd = $arguments["codes_datd"];
8351     /**
8352     * Construction de la requête
8353     */
8354     //
8355     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
8356     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
8357     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
8358     END";
8359     // SELECT
8360     $query_ct_select = "
8361     dossier.dossier,
8362     dossier.dossier_libelle,
8363     $case_demandeur as nom_petitionnaire,
8364     dossier.date_notification_delai
8365     ";
8366    
8367     // SELECT - CHAMPAFFICHE
8368     $query_ct_select_champaffiche = array(
8369     'dossier.dossier as "'._("dossier").'"',
8370     'dossier.dossier_libelle as "'._("dossier").'"',
8371     $case_demandeur.' as "'._("nom_petitionnaire").'"',
8372     'to_char(dossier.date_notification_delai ,\'DD/MM/YYYY\') as "'._("date de notification limite").'"',
8373     );
8374    
8375     // FROM
8376     $query_ct_from = "
8377     ".DB_PREFIXE."dossier
8378     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
8379     ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
8380     LEFT JOIN ".DB_PREFIXE."demandeur
8381     ON lien_dossier_demandeur.demandeur = demandeur.demandeur
8382     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
8383     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
8384     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
8385     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
8386     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
8387     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
8388     LEFT JOIN ".DB_PREFIXE."etat
8389     ON dossier.etat = etat.etat
8390     %s
8391     %s
8392     %s
8393     ";
8394    
8395     $query_ct_where_instructeur_filter = "";
8396     $query_ct_where_division_filter = "";
8397     $query_ct_where_collectivite_filter = "";
8398     // Filtre sur les dossiers qui concernent l'utilisateur
8399     if ($filtre == "instructeur") {
8400     //
8401     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
8402     ON dossier.instructeur=instructeur.instructeur
8403     OR dossier.instructeur_2=instructeur.instructeur
8404     JOIN ".DB_PREFIXE."om_utilisateur
8405     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
8406     AND om_utilisateur.login='".$_SESSION['login']."'
8407     ";
8408     } else {
8409     $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
8410     ON dossier.instructeur=instructeur.instructeur
8411     LEFT JOIN ".DB_PREFIXE."om_utilisateur
8412     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
8413     }
8414     // Filtre sur les dossier de la division
8415     if ($filtre == "division") {
8416     //
8417     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
8418     ON dossier.division=division.division
8419     AND division.division = ".$_SESSION['division']."
8420     ";
8421     } else {
8422     $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
8423     ON dossier.division=division.division";
8424     }
8425    
8426     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
8427     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
8428     // collectivité
8429     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
8430     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
8431     ON dossier.om_collectivite=om_collectivite.om_collectivite
8432     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
8433     ";
8434     } else {
8435     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
8436     ON dossier.om_collectivite=om_collectivite.om_collectivite
8437     ";
8438     }
8439    
8440     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
8441    
8442     $query_ct_where ="
8443     dossier.a_qualifier IS TRUE
8444     AND dossier.date_notification_delai >= DATE(NOW())
8445     AND etat.statut = 'encours'
8446     ";
8447    
8448     $query_ct_where_datd_filter = "";
8449     if (!is_null($codes_datd)
8450     && is_array($codes_datd)
8451     && count($codes_datd) != 0) {
8452     //
8453     $sql_codes = "";
8454     //
8455     foreach ($codes_datd as $code) {
8456     $sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR ";
8457     }
8458 softime 9282 $sql_codes = substr($sql_codes, 0, strlen($sql_codes) - 4);
8459 softime 8989 //
8460     $query_ct_where_datd_filter = " AND ( ".$sql_codes." ) ";
8461     }
8462    
8463     $query_ct_orderby ="
8464     dossier.date_notification_delai ASC NULLS LAST, dossier.dossier ASC NULLS LAST
8465     ";
8466    
8467     $query_ct_where_groupe = "";
8468     // Gestion des groupes et confidentialité
8469     include('../sql/pgsql/filter_group_widgets.inc.php');
8470    
8471     /**
8472     * Message d'aide
8473     */
8474     // Filtre
8475     $message_filtre = "";
8476     //
8477     switch ($filtre) {
8478     case "instructeur":
8479     $message_filtre = " ".__("dont je suis l'instructeur");
8480     break;
8481     case "aucun":
8482     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
8483     $message_filtre = " ".__("situés dans ma collectivité");
8484     } else {
8485     $message_filtre = " ".__("situés dans toutes les collectivités");
8486     }
8487     break;
8488     }
8489     //
8490     $message_help = sprintf(
8491     __("Les dossiers d'instruction%s%s, qui sont à qualifier, non clôturés et sur lesquels la date limite de notification du délai au pétitionnaire arrive bientôt à échéance."),
8492     (is_null($codes_datd) ? "": " (".implode(", ",$codes_datd).")"),
8493     $message_filtre
8494     );
8495    
8496     /**
8497     * Return
8498     */
8499     //
8500     return array(
8501     "arguments" => $arguments,
8502     "message_help" => $message_help,
8503     "query_ct_select" => $query_ct_select,
8504     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
8505     "query_ct_where_datd_filter" => $query_ct_where_datd_filter,
8506     "query_ct_from" => $query_ct_from,
8507     "query_ct_where" => $query_ct_where,
8508     "query_ct_where_groupe" => $query_ct_where_groupe,
8509     "query_ct_orderby" => $query_ct_orderby
8510     );
8511     }
8512 softime 10573
8513     protected function display_resultat_bulle($resultat, $legende, $classe, $autre = "") {
8514     // Panel
8515     $template_panel = '
8516     <div class="panel panel-box">
8517     <div class="list-justified-container">
8518     <ul class="list-justified text-center">
8519     %s
8520     </ul>
8521     </div>
8522     </div>';
8523     $panel = "";
8524     // Bulle
8525     $template_elem = '
8526     <li>
8527     <span class="size-h3 box-icon rounded %s">%s</span>
8528     <p class="text-muted">%s %s</p>
8529     </li>
8530     ';
8531     // Remplissage de la bulle
8532     $panel_elem = sprintf(
8533     $template_elem,
8534     $classe,
8535     intval($resultat),
8536     _($legende),
8537     $autre
8538     );
8539     // Remplissage du panel
8540     $panel .= sprintf(
8541     $template_panel,
8542     $panel_elem
8543     );
8544     // Affichage du panel
8545     echo $panel;
8546    
8547     }
8548    
8549     /**
8550     * Cette méthode permet de récupérer la configuration du widget 'Dossiers
8551     * limites'.
8552     *
8553     * @return array
8554     */
8555     function get_config_dossier_non_transmis_platau($arguments) {
8556     // Initialisation du tableau des paramètres avec ses valeur par défaut
8557     $arguments_default = array(
8558     "filtre" => "instructeur",
8559 softime 10713 "affichage" => "liste",
8560     "date_depot_debut" => null,
8561 softime 10573 );
8562     // Vérification des arguments
8563     foreach ($arguments_default as $key => $value) {
8564     if (isset($arguments[$key])) {
8565     $elem = trim($arguments[$key]);
8566     if ($key === "filtre"
8567     && in_array($elem, array("instructeur", "division", "aucun"))) {
8568     // La valeur doit être dans cette liste
8569     $arguments[$key] = $elem;
8570     continue;
8571     } elseif ($key === "affichage"
8572     && in_array($elem, array('liste', 'nombre'))) {
8573     // La valeur doit être dans cette liste
8574     $arguments[$key] = $elem;
8575     continue;
8576 softime 10713 } elseif ($key === "date_depot_debut"
8577 softime 11057 && $elem !== null
8578     && $elem !== ''
8579     && $this->f->check_date($elem) === true) {
8580     //
8581     $arguments[$key] = $elem;
8582     continue;
8583 softime 10573 }
8584     }
8585     //
8586     $arguments[$key] = $value;
8587     }
8588    
8589     if ($arguments['affichage'] == 'nombre') {
8590     $query_ct_select = "COUNT(*)";
8591     $query_ct_orderby = '';
8592     $query_limit = '';
8593     } else {
8594     $query_ct_select = sprintf(
8595 softime 11057 "dossier.dossier,
8596 softime 10713 dossier.dossier_libelle,
8597 softime 11057 dossier.date_depot,
8598     CASE
8599     WHEN demandeur.qualite='particulier'
8600     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
8601     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
8602     END AS demandeur
8603 softime 10573 ");
8604    
8605     $query_ct_orderby = sprintf("ORDER BY dossier.dossier");
8606     $query_limit = "LIMIT 5";
8607     }
8608    
8609     $query_ct_from = sprintf(
8610     '%1$sdossier
8611     INNER JOIN %1$slien_dossier_demandeur
8612     ON dossier.dossier=lien_dossier_demandeur.dossier
8613     INNER JOIN %1$sdemandeur
8614     ON lien_dossier_demandeur.demandeur=demandeur.demandeur
8615     INNER JOIN %1$sdossier_autorisation
8616     ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
8617     INNER JOIN %1$sdossier_autorisation_type_detaille
8618     ON dossier_autorisation.dossier_autorisation_type_detaille=dossier_autorisation_type_detaille.dossier_autorisation_type_detaille',
8619     DB_PREFIXE
8620     );
8621    
8622     $filtre = $arguments["filtre"];
8623     // Filtre sur les dossiers qui concernent l'utilisateur
8624     if ($filtre == "instructeur") {
8625     $query_ct_from .= sprintf("
8626     JOIN %1\$sinstructeur
8627     ON dossier.instructeur=instructeur.instructeur
8628     JOIN %1\$som_utilisateur
8629     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
8630     AND om_utilisateur.login='%2\$s'",
8631     DB_PREFIXE,
8632     $_SESSION['login']
8633     );
8634     }
8635     // Filtre sur les dossier de la division
8636     if ($filtre == "division") {
8637     $query_ct_from .= sprintf("
8638     JOIN %1\$sdivision
8639     ON dossier.division=division.division AND division.division = %2\$s",
8640     DB_PREFIXE,
8641     $_SESSION['division']
8642     );
8643     }
8644    
8645 softime 11057 $query_ct_where = sprintf(
8646     " dossier_autorisation_type_detaille.dossier_platau = TRUE AND
8647     (etat_transmission_platau='non_transmissible' OR
8648     etat_transmission_platau='transmis_mais_non_transmissible') "
8649     );
8650    
8651     //
8652     $date_depot_debut = $arguments["date_depot_debut"];
8653     if ($date_depot_debut !== null
8654     && $date_depot_debut !== '') {
8655     //
8656     // $date_depot = $this->f->is_option_date_depot_mairie_enabled() === true ? 'dossier.date_depot_mairie' : 'dossier.date_depot';
8657     $date_depot = 'dossier.date_depot';
8658     $query_ct_where .= sprintf(
8659     " AND %s >= '%s' ",
8660     $date_depot,
8661     $date_depot_debut
8662     );
8663     }
8664    
8665 softime 10573 // Champ à afficher dans le listing
8666     $query_ct_select_champaffiche = array(
8667     'dossier.dossier as "'._("dossier").'"',
8668 softime 10713 'dossier.dossier_libelle as "'._("dossier").'"',
8669 softime 10573 'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',
8670     'CASE
8671     WHEN demandeur.qualite=\'particulier\'
8672     THEN TRIM(CONCAT(demandeur.particulier_nom, \' \', demandeur.particulier_prenom))
8673     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, \' \', demandeur.personne_morale_denomination))
8674     END AS "'._("demandeur").'"'
8675     );
8676    
8677     $message_help = "Dossier non transmis à Plat'Au car ayant des élements manquants.";
8678    
8679     return array(
8680     "arguments" => $arguments,
8681     "message_help" => $message_help,
8682     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
8683     "query_ct_select" => $query_ct_select,
8684     "query_ct_from" => $query_ct_from,
8685     "query_ct_where" => $query_ct_where,
8686     "query_ct_orderby" => $query_ct_orderby,
8687     "query_ct_limit" => $query_limit,
8688     );
8689     }
8690    
8691     /**
8692     * Méthode servant à afficher le contenu du widget servant
8693     * à afficher la liste ou le nombre de dossier non transmis à plat'Au
8694     *
8695     * @param array content
8696     */
8697     function view_widget_dossier_non_transmis_platau($content = null) {
8698     // Liste des paramètres
8699 softime 10713 $params = array("affichage", "filtre", "date_depot_debut", );
8700 softime 10573 // Formatage des arguments reçus en paramètres
8701     $arguments = $this->get_arguments($content, $params);
8702     // Récupération de la configuration du widget
8703     $conf = $this->get_config_dossier_non_transmis_platau($arguments);
8704     $sql = sprintf(
8705     "SELECT
8706     %s
8707     FROM
8708     %s
8709     WHERE
8710     %s
8711     %s
8712     %s",
8713     $conf["query_ct_select"],
8714     $conf["query_ct_from"],
8715     $conf["query_ct_where"],
8716     $conf["query_ct_orderby"],
8717     $conf["query_ct_limit"]
8718     );
8719    
8720     $template_table = '
8721     <table class="tab-tab">
8722     <thead>
8723     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
8724     <th class="title col-0 firstcol">
8725     <span class="name">
8726     %s
8727     </span>
8728     </th>
8729     <th class="title col-1">
8730     <span class="name">
8731     %s
8732     </span>
8733     </th>
8734     <th class="title col-2">
8735     <span class="name">
8736     %s
8737     </span>
8738     </th>
8739     </tr>
8740     </thead>
8741     <tbody>
8742     %s
8743     </tbody>
8744     </table>
8745     ';
8746     //
8747     $template_line = '
8748     <tr class="tab-data odd">
8749     <td class="col-1 firstcol">
8750     %s
8751     </td>
8752     <td class="col-1">
8753     %s
8754     </td>
8755     <td class="col-2">
8756     %s
8757     </td>
8758     </tr>
8759     ';
8760     //
8761     $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
8762     //
8763     $template_link = '
8764     <a class="lienTable" href="%s">
8765     %s
8766     </a>
8767     ';
8768    
8769     // Affichage du widget avec une bulle
8770     if ($conf["arguments"]["affichage"] === "nombre") {
8771     // Execution de la requête
8772     $res = $this->f->db->getone($sql);
8773     $this->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE);
8774     $this->f->isDatabaseError($res);
8775    
8776     // Affichage du message d'informations
8777     printf(
8778     $this->template_help,
8779     $conf["message_help"]
8780     );
8781    
8782     // Si il n'y a aucun dossier à afficher
8783     if (intval($res) == 0) {
8784     // Affichage du message d'informations
8785     echo _("Aucun dossier non transmis pour le moment.");
8786     // Exit
8787     return;
8788     }
8789     $this->display_resultat_bulle($res, "Non transmis", "bg-info", "");
8790     // Affichage du footer
8791     printf(
8792     $this->template_footer,
8793     sprintf(
8794 softime 10713 OM_ROUTE_TAB."&obj=dossier_non_transmis&filtre=%s&date_depot_debut=%s",
8795     $conf["arguments"]["filtre"],
8796     $conf["arguments"]["date_depot_debut"]
8797     ),
8798    
8799 softime 10573 // titre
8800     _("Voir +")
8801     );
8802     } else {
8803     // Affichage du widget avec un listing de 5 éléments
8804     $res = $this->f->db->query($sql);
8805     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
8806     $this->f->isDatabaseError($res);
8807    
8808     if ($res->numrows() == 0) {
8809     echo _("Aucun dossier non transmis pour le moment.");
8810     } else {
8811    
8812     // Affichage du message d'informations
8813     printf(
8814     $this->template_help,
8815     $conf["message_help"]
8816     );
8817    
8818     $contenu_tableau="";
8819     while ($row = $res->fetchRow(DB_FETCHMODE_ASSOC)) {
8820     $href_dossier=sprintf(
8821     $template_href,
8822 softime 11057 $row['dossier']
8823 softime 10573
8824     );
8825    
8826 softime 11057 $contenu_case_dossier=sprintf($template_link,
8827 softime 10573 $href_dossier,
8828 softime 11057 $row['dossier_libelle']
8829 softime 10573 );
8830    
8831     $contenu_case_nom=sprintf($template_link,
8832     $href_dossier,
8833     $row['demandeur']
8834     );
8835     $contenu_case_date=sprintf($template_link,
8836     $href_dossier,
8837     $row['date_depot']
8838     );
8839     $contenu_tableau.=sprintf(
8840     $template_line,
8841     $contenu_case_dossier,
8842     $contenu_case_nom,
8843     $contenu_case_date
8844     );
8845     }
8846    
8847     $contenu_widget=sprintf(
8848     $template_table,
8849     "dossier",
8850     "demandeur",
8851     "date de dépôt",
8852     $contenu_tableau
8853     );
8854    
8855     echo $contenu_widget;
8856     // Affichage du footer
8857     printf(
8858     $this->template_footer,
8859     sprintf(
8860 softime 10713 OM_ROUTE_TAB."&obj=dossier_non_transmis&filtre=%s&date_depot_debut=%s",
8861     $conf["arguments"]["filtre"],
8862     $conf["arguments"]["date_depot_debut"]
8863     ),
8864 softime 10573 // titre
8865     _("Voir +")
8866     );
8867     }
8868     }
8869     }
8870 mbroquet 3730 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26