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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26