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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26