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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26