/[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 7996 - (hide annotations)
Fri Jul 20 17:12:33 2018 UTC (6 years, 6 months ago) by softime
File size: 231709 byte(s)
* Merge de la branche d'intégration 4.7.0 vers le trunk

1 mbroquet 3730 <?php
2     /**
3     * OM_WIDGET - Surcharge du core
4     *
5     * L'objectif de la surcharge est de coder les vues spécifiques des widgets
6     * de type 'file'.
7     *
8     * @package openads
9     * @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $
10     */
11    
12 softime 7996 require_once PATH_OPENMAIRIE."obj/om_widget.class.php";
13 mbroquet 3730
14     class om_widget extends om_widget_core {
15    
16 fmichon 4479 /**
17 jymadier 4132 *
18     */
19     var $template_help = '<div class="widget-help"><span class="info-16" title="%s"></span></div>';
20    
21     /**
22     *
23     */
24     var $template_footer = '
25     <div class="widget-footer">
26     <a href="%s">
27     %s
28     </a>
29     </div>
30     ';
31    
32     /**
33 fmichon 3799 * Cette méthode retourne un arbre html représentant un raccourci.
34     *
35     * Un raccourci est composé d'un lien, d'une image et d'une description.
36     * Voir les widgets :
37     * - widget_nouvelle_demande_autre_dossier
38     * - widget_nouvelle_demande_dossier_encours
39     * - widget_nouvelle_demande_nouveau_dossier
40     */
41     function get_display_widget_shortlink($config) {
42     return sprintf (
43     '<a href="%s"><span><img src="%s" align="left" alt="%s" />%s</span></a>',
44     $config["a_href"],
45     $config["img_src"],
46     $config["img_alt"],
47     $config["a_content"]
48     );
49     }
50    
51     /**
52     * WIDGET DASHBOARD - widget_nouvelle_demande_autre_dossier.
53     */
54     function view_widget_nouvelle_demande_autre_dossier($content = null) {
55     echo $this->get_display_widget_shortlink(array(
56 softime 7996 "a_href" => OM_ROUTE_TAB."&obj=demande_autre_dossier",
57 fmichon 3799 "img_src" => "../app/img/dossier-existant.png",
58     "img_alt" => _("Autres dossiers"),
59     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours ou une autorisation existante"),
60     ));
61     }
62    
63     /**
64     * WIDGET DASHBOARD - widget_nouvelle_demande_dossier_encours.
65     */
66     function view_widget_nouvelle_demande_dossier_encours($content = null) {
67     echo $this->get_display_widget_shortlink(array(
68 softime 7996 "a_href" => OM_ROUTE_TAB."&obj=demande_dossier_encours",
69 fmichon 3799 "img_src" => "../app/img/dossier-existant.png",
70     "img_alt" => _("Dossier en cours"),
71     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours"),
72     ));
73     }
74    
75     /**
76     * WIDGET DASHBOARD - widget_nouvelle_demande_nouveau_dossier.
77     */
78     function view_widget_nouvelle_demande_nouveau_dossier($content = null) {
79 softime 6565 $params = array("contexte");
80     // Formatage des arguments reçus en paramètres
81     $arguments = $this->get_arguments($content, $params);
82     $arguments_default = array(
83     "contexte" => "standard"
84     );
85     // Vérification des arguments
86     foreach ($arguments_default as $key => $value) {
87     //
88     if (isset($arguments[$key])) {
89     //
90     $elem = trim($arguments[$key]);
91     //
92     if ($key === "contexte"
93     && in_array($elem, array("standard", "contentieux"))) {
94     // La valeur doit être dans cette liste
95     $arguments[$key] = $elem;
96     continue;
97     }
98     }
99     //
100     $arguments[$key] = $value;
101     }
102     $contexte = $arguments["contexte"];
103     $widget_config = array(
104 softime 7996 "a_href" => OM_ROUTE_FORM."&obj=demande_nouveau_dossier&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
105 fmichon 3799 "img_src" => "../app/img/dossier-nouveau.png",
106     "img_alt" => _("Nouveau dossier"),
107     "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant le depot d'un nouveau dossier"),
108 softime 6565 );
109     if ($contexte == "contentieux") {
110 softime 7996 $widget_config["a_href"] = OM_ROUTE_FORM."&obj=demande_nouveau_dossier_contentieux&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=";
111 softime 6565 }
112     echo $this->get_display_widget_shortlink($widget_config);
113 fmichon 3799 }
114    
115     /**
116 mbroquet 3730 * WIDGET DASHBOARD - widget_recherche_dossier.
117     *
118     * Quatre cas d'utilisation :
119     * - 1 - La valeur recherchée correspond exactement au code d'un DI,
120     * alors on accède directement à la fiche de visualisation du DI.
121     * - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au
122     * listing des dossiers d'instruction avec le formulaire de
123     * recherche avancée pré-rempli avec la valeur saisie.
124     * - 3 - La valeur recherchée renvoi aucun enregistrement, alors on
125     * affiche un message en ce sens directement dans le widget.
126     * - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce
127     * sens directement dans le widget.
128     *
129     * @return void
130     */
131     function view_widget_recherche_dossier($content = null) {
132    
133     /**
134     * Traitement de la validation du formulaire
135     */
136     //
137     if ($this->f->get_submitted_post_value("validation") != null
138 softime 6565 && $this->f->get_submitted_post_value("dossier") === '') {
139 mbroquet 3730
140     //
141 softime 6565 // AUCUNE VALEUR SAISIE
142 mbroquet 3730 //
143    
144 softime 6565 // Cas d'utilisation n°4
145     // Affiche un message d'erreur
146     $erreur = _("Veuillez saisir un No de dossier.");
147     }
148     //
149     if ($this->f->get_submitted_post_value("validation") != null
150     && $this->f->get_submitted_post_value("dossier") !== null
151     && $this->f->get_submitted_post_value("dossier") !== '') {
152     //
153     $list_dossiers = $this->execute_recherche_dossier();
154 mbroquet 3730
155 softime 6565 $total_dossiers = count($list_dossiers);
156 mbroquet 3730 // Si on obtient un seul résultat
157     if ($total_dossiers == 1) {
158     // On reformate le dossier
159 softime 6565 $dossier = strtoupper(str_replace(' ', '', $list_dossiers[0]));
160 mbroquet 3730 // On redirige vers le listing des DI
161     echo '
162     <script type="text/javascript" >
163 softime 6565 widget_recherche_dossier(\''.$dossier.'\', 1, \'dossier_instruction\');
164 mbroquet 3730 </script>
165     ';
166     // On arrête l'exécution du script car l'utilisateur a été
167     // redirigé vers un autre script
168     exit();
169     }
170     // Si on obtient plusieurs résultats
171     if ($total_dossiers > 1) {
172 softime 6565 // Mémorisation de la recherche
173     $search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier"));
174     // Ajout d'une étoile au début s'il n'y en n'a pas.
175     // Par defaut * est toujours ajouté à la fin des recherches.
176     if (substr($search, 0, 1) != '*') {
177     $search = '*'.$search;
178     }
179 mbroquet 3730 // On redirige vers le listing des DI
180 softime 6565 //
181 mbroquet 3730 echo '
182     <script type="text/javascript" >
183 softime 6565 widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.', \'dossier_instruction\');
184 mbroquet 3730 </script>
185     ';
186     // On arrête l'exécution du script car l'utilisateur a été
187     // redirigé vers un autre script
188     exit();
189     }
190     // Cas d'utilisation n°3
191     // Si aucun dossier trouve
192     // Affiche un message d'erreur
193 softime 6565 $erreur = _("Aucun dossier trouvé.");
194     }
195 mbroquet 3730
196 softime 6565 /**
197     * Affichage du widget
198     */
199     // Affichage du message d'informations
200     printf(
201     '<div class="widget-help"><span class="info-16" title="%s"></span></div>',
202     _("Permet la recherche directe de dossiers d'instruction.\n\n".
203     "Deux modes de saisie sont possibles :\n".
204     "- Code de dossier intégral 'PC0130551300027P0' ou 'PC 013055 13 00027P0' pour un accès direct à la fiche de visualisation du dossier d'instruction,\n".
205     "- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.")
206     );
207     // Ouverture du form
208 softime 7996 echo "\t<form method=\"post\" id=\"widget_recherche_dossier_form\" action=\"".OM_ROUTE_DASHBOARD."\">\n";
209 softime 6565 // Affichage d'un éventuel message d'erreur
210     if (isset($erreur) && $erreur != "") {
211     $class = "error";
212     $this->f->displayMessage($class, $erreur);
213     }
214     // Configuration du formulaire de recherche
215     $champs = array("dossier");
216 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
217     "validation" => 0,
218     "maj" => 0,
219     "champs" => $champs,
220     ));
221 softime 6565 $form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>');
222     $form->setType("dossier", "text");
223     $form->setTaille("dossier", 20);
224     $form->setMax("dossier", 250);
225     // Affichage du formulaire
226     $form->entete();
227     $form->afficher($champs, 0, false, false);
228     $form->enpied();
229     // Affichage des contrôles du formulaire
230     echo "\t<div class=\"formControls\">\n";
231     echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
232     value=\""._("Valider")."\" name=\"validation\" />\n";
233     echo "\t</div>\n";
234     // Fermeture du form
235     echo "\t</form>\n";
236     }
237    
238    
239     /**
240     * WIDGET DASHBOARD - widget_recherche_dossier_par_type.
241     *
242     * Le widget de recherche accès direct par type est similaire au widget de recherche
243     * accès direct classique. Il permet en plus de choisir la portée de la recherche par
244 softime 6864 * le biais d'un select : ADS ou RE* ou IN.
245 softime 6565 * Selon le type de dossier choisi, lors de la recherche la redirection se fera vers
246     * le menu Instruction ou Contentieux.
247     *
248     * @return void
249     */
250     function view_widget_recherche_dossier_par_type($content = null) {
251    
252     /**
253     * Traitement de la validation du formulaire
254     */
255     if ($this->f->get_submitted_post_value("validation") != null
256 mbroquet 3730 && $this->f->get_submitted_post_value("dossier") !== null
257     && $this->f->get_submitted_post_value("dossier") == '') {
258    
259     // AUCUNE VALEUR SAISIE
260     // Affiche un message d'erreur
261     $erreur = _("Veuillez saisir un No de dossier.");
262     }
263 softime 6565 //
264     if ($this->f->get_submitted_post_value("validation") != null
265     && $this->f->get_submitted_post_value("dossier") !== null
266     && $this->f->get_submitted_post_value("dossier") != '') {
267     //
268     $list_dossiers = $this->execute_recherche_dossier("type");
269     $posted_type_dossier = $this->f->get_submitted_post_value("type_dossier_recherche");
270     // Définition des objets sur lesquels la redirection se fera
271 softime 6864 if ($posted_type_dossier === "ADS") {
272 softime 6565 $obj = "dossier_instruction";
273     }
274     if ($posted_type_dossier === "RE*") {
275     $obj = "dossier_contentieux_tous_recours";
276     }
277     if ($posted_type_dossier === "IN") {
278     $obj = "dossier_contentieux_toutes_infractions";
279     }
280     $total_dossiers = count($list_dossiers);
281     // Si on obtient un seul résultat
282     if ($total_dossiers == 1) {
283     // On reformate le dossier
284     $dossier = strtoupper(str_replace(' ', '', $list_dossiers[0]));
285     // On redirige vers le listing des DI
286     echo '
287     <script type="text/javascript" >
288     widget_recherche_dossier(\'' . $dossier . '\', 1, \'' . $obj . '\');
289     </script>
290     ';
291     // On arrête l'exécution du script car l'utilisateur a été
292     // redirigé vers un autre script
293     exit();
294     }
295     // Si on obtient plusieurs résultats
296     if ($total_dossiers > 1) {
297     // Mémorisation de la recherche
298     $search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier"));
299     // Ajout d'une étoile au début s'il n'y en n'a pas.
300     // Par defaut * est toujours ajouté à la fin des recherches.
301     if (substr($search, 0, 1) != '*') {
302     $search = '*'.$search;
303     }
304     // On redirige vers le listing des DI
305     //
306     echo '
307     <script type="text/javascript" >
308     widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.', \'' . $obj . '\');
309     </script>
310     ';
311     // On arrête l'exécution du script car l'utilisateur a été
312     // redirigé vers un autre script
313     exit();
314     }
315     // Si aucun dossier trouve
316     // Affiche un message d'erreur
317     $erreur = _("Aucun dossier trouvé.");
318     }
319 mbroquet 3730
320     /**
321     * Affichage du widget
322     */
323 softime 6565 // Liste des paramètres
324     $params = array("type_defaut", );
325     // Initialisation du tableau des paramètres avec ses valeur par défaut
326     $arguments_default = array(
327 softime 6864 "type_defaut" => "ADS",
328 softime 6565 );
329     $arguments = $this->get_arguments($content, $params);
330    
331     // Vérification des arguments
332     foreach ($arguments_default as $key => $value) {
333     //
334     if (isset($arguments[$key])) {
335     //
336     $elem = trim($arguments[$key]);
337     //
338     if ($key === "type_defaut"
339 softime 6864 && in_array($elem, array("ADS", "RE*", "IN"))) {
340 softime 6565 // La valeur doit être dans cette liste
341     $arguments[$key] = $elem;
342     continue;
343     }
344     }
345     //
346     $arguments[$key] = $value;
347     }
348     //
349     $type_defaut = $arguments["type_defaut"];
350    
351 mbroquet 3730 // Affichage du message d'informations
352     printf(
353     '<div class="widget-help"><span class="info-16" title="%s"></span></div>',
354 softime 6864 _("Permet la recherche directe de dossiers d'instruction, avec choix de la portée de la recherche : ADS ou RE* ou IN.\n".
355 softime 6565 "La sélection de la famille de dossier filtre les résultats et conditionne la redirection de l'utilisateur :\n".
356 softime 6864 "- ADS : Instruction > Dossiers d'instruction > Recherche\n".
357 softime 6565 "- RE* : Contentieux > Recours > Tous les Recours \n".
358     "- IN : Contentieux > Infractions > Toutes les Infractions\n\n".
359 mbroquet 3730 "Deux modes de saisie sont possibles :\n".
360     "- 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".
361     "- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.")
362     );
363     // Ouverture du form
364 softime 7996 echo "\t<form method=\"post\" id=\"widget_recherche_dossier_par_type_form\" action=\"".OM_ROUTE_DASHBOARD."\">\n";
365 mbroquet 3730 // Affichage d'un éventuel message d'erreur
366     if (isset($erreur) && $erreur != "") {
367     $class = "error";
368     $this->f->displayMessage($class, $erreur);
369     }
370     // Configuration du formulaire de recherche
371 softime 6565 $champs = array("dossier", "type_dossier_recherche");
372 softime 7996 $form = $this->f->get_inst__om_formulaire(array(
373     "validation" => 0,
374     "maj" => 0,
375     "champs" => $champs,
376     ));
377 mbroquet 3730 $form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>');
378     $form->setType("dossier", "text");
379     $form->setTaille("dossier", 20);
380     $form->setMax("dossier", 250);
381 softime 6565
382     // Définition des types de dossiers visibles dans le select
383 softime 6864 $options[0] = array("ADS",
384 softime 6565 "RE*",
385     "IN");
386     $options[1] = array(
387 softime 6864 _("ADS"),
388 softime 6565 _("RE*"),
389     _("IN"));
390    
391     $form->setType("type_dossier_recherche", "select");
392     $form->setLib("om_profil", _("Tableau de bord pour le profil"));
393     $form->setSelect('type_dossier_recherche', $options);
394     $form->setVal('type_dossier_recherche', $type_defaut);
395     $form->setLib('type_dossier_recherche', 'Type de dossier');
396    
397 mbroquet 3730 // Affichage du formulaire
398     $form->entete();
399     $form->afficher($champs, 0, false, false);
400     $form->enpied();
401     // Affichage des contrôles du formulaire
402     echo "\t<div class=\"formControls\">\n";
403     echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
404     value=\""._("Valider")."\" name=\"validation\" />\n";
405     echo "\t</div>\n";
406     // Fermeture du form
407     echo "\t</form>\n";
408     }
409    
410 softime 6565
411 mbroquet 3730 /**
412 softime 6565 * Méthode générique exécutant une recherche par numéro de dossier dans 2 contextes
413     * différents :
414     * - le widget de recherche classique
415     * - le widget de recherche avec choix du type/groupe de dossier
416     *
417     * @param string $filtre Indique si un filtre supplémentaire doit être appliqué à la
418     * recherche de dossier. Seule valeur possible : "type".
419     *
420     * @return string $error_message Le message d'erreur s'il y en a un, sinon chaîne vide
421     */
422     protected function execute_recherche_dossier($filtre = null) {
423    
424     // Traitement des valeurs postées
425     $posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier"))));
426     $posted_dossiers = str_replace(';', ',', $posted_dossiers);
427    
428     //
429     // UNE VALEUR SAISIE
430     //
431    
432     // WHERE - Filtre Collectivité
433     $query_ct_where_collectivite = "";
434     // Si collectivité utilisateur mono alors filtre sur celle-ci
435     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
436     //
437     $query_ct_where_collectivite = " AND dossier.om_collectivite=".$_SESSION['collectivite'];
438     }
439    
440     // WHERE - Filtre par groupe
441     $query_ct_where_groupe = "";
442     $query_ct_where_type_da = "";
443     $query_ct_from = "";
444     $query_ct_where_common = "";
445     $posted_type_dossier = $this->f->get_submitted_post_value("type_dossier_recherche");
446     // La variable $posted_type_dossier vaut null si on est dans le contexte du widget
447     // de recherche de dossier classique (sans choix du type)
448 softime 6864 if ($posted_type_dossier === null OR $posted_type_dossier === "ADS") {
449 softime 6565 $query_ct_from = "
450     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
451     ON dossier.dossier_autorisation =
452     dossier_autorisation.dossier_autorisation
453     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
454     ON dossier_autorisation.dossier_autorisation_type_detaille =
455     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
456     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
457     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
458     dossier_autorisation_type.dossier_autorisation_type
459     LEFT JOIN ".DB_PREFIXE."groupe
460     ON dossier_autorisation_type.groupe = groupe.groupe";
461     //
462     $query_ct_where_groupe = "
463     AND groupe.code != 'CTX'
464     ";
465     }
466     if ($posted_type_dossier === "RE*" OR $posted_type_dossier === "IN") {
467     $query_ct_from = "
468     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
469     ON dossier.dossier_autorisation =
470     dossier_autorisation.dossier_autorisation
471     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
472     ON dossier_autorisation.dossier_autorisation_type_detaille =
473     dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
474     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
475     ON dossier_autorisation_type_detaille.dossier_autorisation_type =
476     dossier_autorisation_type.dossier_autorisation_type
477     ";
478     if ($posted_type_dossier === "RE*") {
479     $posted_type_dossier = "RE";
480     }
481     $query_ct_where_type_da = "
482     AND dossier_autorisation_type.code = '". $posted_type_dossier . "'
483     ";
484     }
485    
486     // Gestion des groupes et confidentialité
487     include('../sql/pgsql/filter_group_widgets.inc.php');
488    
489     // Construction de la requête
490     // Pour chaque dossier on cherche sur les deux champs du code du
491     // dossier (un avec et un sans espaces)
492     $posted_dossiers = explode(',', $posted_dossiers);
493     $liste_dossiers = array();
494     foreach ($posted_dossiers as $posted_dossier) {
495     $sql = "
496     SELECT
497     dossier
498     FROM
499     " . DB_PREFIXE . "dossier
500     " . $query_ct_from . "
501     WHERE
502     (LOWER(dossier.dossier) LIKE '%".$posted_dossier."%'
503     OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' )
504     ";
505     $sql .= $query_ct_where_collectivite . $query_ct_where_type_da . $query_ct_where_groupe;
506     // Exécution de la requête
507     $res = $this->f->db->query($sql);
508     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
509     $this->f->isDatabaseError($res);
510     // On récupère les numéros de dossier dans les résultats
511     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
512     $liste_dossiers[] = $row['dossier'];
513     }
514     }
515    
516     return $liste_dossiers;
517     }
518    
519    
520     /**
521 mbroquet 3730 * Cette méthode permet de récupérer la configuration du widget 'Dossiers
522     * limites'.
523     *
524     * @return array
525     */
526     function get_config_dossiers_limites($arguments) {
527     // Initialisation du tableau des paramètres avec ses valeur par défaut
528     $arguments_default = array(
529     "nombre_de_jours" => 15,
530     "codes_datd" => null,
531     "filtre" => "instructeur",
532 softime 7717 "restreindre_aux_tacites" => null,
533 mbroquet 3730 );
534     // Vérification des arguments
535     foreach ($arguments_default as $key => $value) {
536     //
537     if (isset($arguments[$key])) {
538     //
539     $elem = trim($arguments[$key]);
540     //
541     if ($key === "nombre_de_jours"
542     && intval($elem) > 0) {
543     // Ce doit être un entier
544     $arguments[$key] = intval($elem);
545     continue;
546     } elseif ($key === "codes_datd"
547     && $elem != "") {
548     // Ce doit être un tableau
549     $arguments[$key] = explode(";", $elem);
550     continue;
551     } elseif ($key === "filtre"
552     && in_array($elem, array("instructeur", "division", "aucun"))) {
553     // La valeur doit être dans cette liste
554     $arguments[$key] = $elem;
555     continue;
556 softime 7717 } elseif ($key === "restreindre_aux_tacites"
557     && in_array($elem, array("true", "false"))) {
558     // La valeur doit être dans cette liste
559     $arguments[$key] = $elem;
560     continue;
561 mbroquet 3730 }
562     }
563     //
564     $arguments[$key] = $value;
565     }
566     //
567     $nombre_de_jours = $arguments["nombre_de_jours"];
568     $codes_datd = $arguments["codes_datd"];
569     $filtre = $arguments["filtre"];
570 softime 7717 $restreindre_aux_tacites = $arguments["restreindre_aux_tacites"];
571 mbroquet 3730
572     /**
573     * Construction de la requête
574     */
575     // SELECT
576     $query_ct_select = "
577     dossier.dossier,
578     dossier.dossier_libelle,
579     dossier.date_limite,
580     dossier.date_limite_incompletude,
581     CASE
582     WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
583     THEN to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY')
584     ELSE
585     to_char(dossier.date_limite, 'DD/MM/YYYY')
586     END as date_limite_na,
587     COALESCE(
588     demandeur.particulier_nom,
589     demandeur.personne_morale_denomination
590     ) AS nom_petitionnaire,
591     CASE
592     WHEN dossier.enjeu_erp is TRUE
593     THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>'
594     ELSE
595     ''
596     END
597     ||
598     CASE
599     WHEN dossier.enjeu_urba is TRUE
600     THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>'
601     ELSE
602     ''
603     END AS enjeu
604     ";
605     // SELECT - CHAMPAFFICHE
606     $query_ct_select_champaffiche = array(
607     'dossier.dossier as "'._("dossier").'"',
608     'dossier.dossier_libelle as "'._("dossier").'"',
609     'COALESCE(
610     demandeur.particulier_nom,
611     demandeur.personne_morale_denomination
612     ) AS "'._("nom_petitionnaire").'"',
613     'CASE
614     WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
615     THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\')
616     ELSE
617     to_char(dossier.date_limite, \'DD/MM/YYYY\')
618     END as "'._("date_limite").'"',
619     'CASE
620     WHEN dossier.enjeu_erp is TRUE
621     THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\'
622     ELSE
623     \'\'
624     END
625     ||
626     CASE
627     WHEN dossier.enjeu_urba is TRUE
628     THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\'
629     ELSE
630     \'\'
631     END AS "'._("enjeu").'"',
632     // XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau
633     'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
634     dossier.date_limite_incompletude ELSE
635     dossier.date_limite END as date_limite_na',
636     );
637     // FROM
638     $query_ct_from = "
639     ".DB_PREFIXE."dossier
640 fmichon 3890 LEFT JOIN ".DB_PREFIXE."etat
641     ON dossier.etat = etat.etat
642 mbroquet 3730 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
643     ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
644     LEFT JOIN ".DB_PREFIXE."demandeur
645     ON lien_dossier_demandeur.demandeur = demandeur.demandeur
646     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
647     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
648     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
649     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
650     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
651     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
652 nhaye 4791 %s
653     %s
654     %s
655 mbroquet 3730 ";
656 nhaye 4791
657     $query_ct_where_instructeur_filter = "";
658     $query_ct_where_division_filter = "";
659     $query_ct_where_collectivite_filter = "";
660     // Filtre sur les dossiers qui concernent l'utilisateur
661     if ($filtre == "instructeur") {
662     //
663     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
664     ON dossier.instructeur=instructeur.instructeur
665     JOIN ".DB_PREFIXE."om_utilisateur
666     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
667     AND om_utilisateur.login='".$_SESSION['login']."'
668     ";
669 nhaye 4793 } else {
670 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
671 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
672     LEFT JOIN ".DB_PREFIXE."om_utilisateur
673     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
674 nhaye 4791 }
675     // Filtre sur les dossier de la division
676     if ($filtre == "division") {
677     //
678     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
679     ON dossier.division=division.division
680     AND division.division = ".$_SESSION['division']."
681     ";
682 nhaye 4793 } else {
683 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
684 nhaye 4793 ON dossier.division=division.division";
685 nhaye 4791 }
686     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
687     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
688     // collectivité
689     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
690     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
691     ON dossier.om_collectivite=om_collectivite.om_collectivite
692     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
693     ";
694 nmeucci 4799 } else {
695     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
696     ON dossier.om_collectivite=om_collectivite.om_collectivite
697     ";
698 nhaye 4791 }
699    
700     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
701 mbroquet 3730 // WHERE - COMMON
702     $query_ct_where_common = "
703 softime 6565 groupe.code != 'CTX'
704     AND
705 mbroquet 3730 (
706     (
707     dossier.incomplet_notifie IS FALSE
708     AND date_limite <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day'
709     )
710     OR
711     (
712     dossier.incomplet_notifie IS TRUE
713     AND dossier.incompletude IS TRUE
714     AND date_limite_incompletude <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day'
715     )
716     )
717 fmichon 3890 AND etat.statut != 'cloture'
718 softime 7521 AND dossier.avis_decision IS NULL
719 mbroquet 3730 ";
720 softime 7717 // WHERE - TACITE
721     // Filtre sur le caractère tacite
722     $query_ct_where_tacite_filter = '';
723     if (is_null($restreindre_aux_tacites) === false
724     && $restreindre_aux_tacites === 'true') {
725     //
726     //
727     $query_ct_where_tacite_filter = " AND LOWER(dossier.accord_tacite) = 'oui' ";
728     }
729 mbroquet 3730 // WHERE - DATD
730     // Filtre sur le type détaillé des dossiers
731     $query_ct_where_datd_filter = "";
732     if (!is_null($codes_datd)
733     && is_array($codes_datd)
734     && count($codes_datd) != 0) {
735     //
736     $sql_codes = "";
737     //
738     foreach ($codes_datd as $code) {
739     $sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR ";
740     }
741     $sql_codes = substr($sql_codes, 0, count($sql_codes) - 4);
742     //
743     $query_ct_where_datd_filter = " AND ( ".$sql_codes." ) ";
744     }
745     // ORDER BY
746     $query_ct_orderby = "
747     date_limite_na
748     ";
749    
750 softime 6565 $query_ct_where_groupe = "";
751     // Gestion des groupes et confidentialité
752     include('../sql/pgsql/filter_group_widgets.inc.php');
753    
754 mbroquet 3730 /**
755     * Message d'aide
756     */
757     //
758 softime 7717 $message_restreindre_aux_tacites = '';
759     //
760     if (is_null($restreindre_aux_tacites) === false
761     && $restreindre_aux_tacites === 'true') {
762     //
763     $message_restreindre_aux_tacites = " "._("avec tacite automatique");
764     }
765     //
766 mbroquet 3730 $message_filtre = "";
767     //
768     switch($filtre) {
769     case "instructeur" :
770     $message_filtre = " "._("(filtrés par instructeur)");
771     break;
772     case "division" :
773     $message_filtre = " "._("(filtrés par division)");
774     break;
775     }
776     //
777     $message_help = sprintf(
778 softime 7717 _("Les dossiers%s%s sur lesquels aucune décision n'a été prise et dont la date limite est dans moins de %s jours%s."),
779 mbroquet 3730 (is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"),
780 softime 7717 $message_restreindre_aux_tacites,
781 mbroquet 3730 $nombre_de_jours,
782     $message_filtre
783     );
784    
785     /**
786     * Return
787     */
788     //
789     return array(
790     "arguments" => $arguments,
791     "message_help" => $message_help,
792     "query_ct_select" => $query_ct_select,
793     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
794     "query_ct_from" => $query_ct_from,
795     "query_ct_where_common" => $query_ct_where_common,
796 softime 7717 "query_ct_where_tacite_filter" => $query_ct_where_tacite_filter,
797 mbroquet 3730 "query_ct_where_datd_filter" => $query_ct_where_datd_filter,
798 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
799 mbroquet 3730 "query_ct_orderby" => $query_ct_orderby,
800     );
801     }
802    
803     /**
804     * WIDGET DASHBOARD - Dossiers limites
805     *
806     * @return void
807     */
808     function view_widget_dossiers_limites($content = null) {
809    
810     /**
811     * Ce widget est configurable via l'interface Web. Lors de la création
812     * du widget dans le paramétrage il est possible de spécifier la ou les
813     * options suivantes :
814     *
815     * - nombre_de_jours : c'est le délai en jours avant la date limite à
816     * partir duquel on souhaite voir apparaître les dossiers dans le
817     * widget.
818     * (default) Par défaut la valeur est 15 jours.
819     *
820     * - codes_datd : la liste des types de dossiers à afficher. exemple :
821     * "PCI;PCA;DPS;CUa;CUb".
822     * (default) Par défaut tous les types sont affichés. [null]
823     *
824     * - filtre :
825     * = instructeur
826     * = division
827     * = aucun
828     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
829 softime 7717 *
830     * - restreindre_aux_tacites : permet d'afficher seulement les dossiers
831     * d'instruction dont le caractère tacite est actif.
832 mbroquet 3730 */
833     // Liste des paramètres
834 softime 7717 $params = array("nombre_de_jours", "codes_datd", "filtre", "restreindre_aux_tacites", );
835 mbroquet 3730 // Formatage des arguments reçus en paramètres
836     $arguments = $this->get_arguments($content, $params);
837     // Récupération de la configuration du widget
838     $conf = $this->get_config_dossiers_limites($arguments);
839     //
840     $nombre_de_jours = $conf["arguments"]["nombre_de_jours"];
841     $codes_datd = $conf["arguments"]["codes_datd"];
842     $filtre = $conf["arguments"]["filtre"];
843 softime 7717 $restreindre_aux_tacites = $conf['arguments']['restreindre_aux_tacites'];
844 mbroquet 3730
845     /**
846     * Composition de la requête
847     */
848     //
849     $query = sprintf("
850     SELECT
851     %s
852     FROM
853     %s
854     WHERE
855     %s
856     %s
857 softime 6565 %s
858 softime 7717 %s
859 mbroquet 3730 ORDER BY
860     %s
861     LIMIT 10",
862     $conf["query_ct_select"],
863     $conf["query_ct_from"],
864     $conf["query_ct_where_common"],
865 softime 7717 $conf["query_ct_where_tacite_filter"],
866 mbroquet 3730 $conf["query_ct_where_datd_filter"],
867 softime 6565 $conf["query_ct_where_groupe"],
868 mbroquet 3730 $conf["query_ct_orderby"]
869     );
870    
871     /**
872     * Exécution de la requête
873     */
874     //
875     $res = $this->f->db->query($query);
876     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
877     $this->f->isDatabaseError($res);
878    
879     // Affichage du message d'informations
880     printf(
881 jymadier 4132 $this->template_help,
882 mbroquet 3730 $conf["message_help"]
883     );
884    
885     /**
886     * Si il n'y a aucun dossier à afficher, alors on affiche un message
887     * clair à l'utilisateur et on sort de la vue.
888     */
889     // Si il n'y a aucun dossier à afficher
890     if ($res->numrows() == 0) {
891     // Affichage du message d'informations
892     echo _("Vous n'avez pas de dossiers limites pour le moment.");
893     // Exit
894     return;
895     }
896    
897     /**
898     * Template nécessaires à l'affichage du widget
899     */
900     //
901     $template_table = '
902     <table class="tab-tab">
903     <thead>
904     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
905     <th class="title col-0 firstcol">
906     <span class="name">
907     %s
908     </span>
909     </th>
910     <th class="title col-1">
911     <span class="name">
912     %s
913     </span>
914     </th>
915     <th class="title col-2">
916     <span class="name">
917     %s
918     </span>
919     </th>
920     <th class="title col-3 lastcol">
921     <span class="name">
922     %s
923     </span>
924     </th>
925     </tr>
926     </thead>
927     <tbody>
928     %s
929     </tbody>
930     </table>
931     ';
932     //
933     $template_line = '
934     <tr class="tab-data odd">
935     <td class="col-1 firstcol">
936     %s
937     </td>
938     <td class="col-1">
939     %s
940     </td>
941     <td class="col-2">
942     %s
943     </td>
944     <td class="col-3 lastcol">
945     %s
946     </td>
947     </tr>
948     ';
949     //
950 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
951 mbroquet 3730 //
952     $template_link = '
953     <a class="lienTable" href="%s">
954     %s
955     </a>
956     ';
957    
958     /**
959     * Si il y a des dossiers à afficher, alors on affiche le widget.
960     */
961     // On construit le contenu du tableau
962     $ct_tbody = '';
963     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
964     // On construit l'attribut href du lien
965     $ct_href = sprintf(
966     $template_href,
967     // idx
968     $row["dossier"]
969     );
970     // On construit la ligne
971     $ct_tbody .= sprintf(
972     $template_line,
973     // Colonne 1 - Numéro de dossier
974     sprintf(
975     $template_link,
976     $ct_href,
977     $row["dossier_libelle"]
978     ),
979     // Colonne 2 - Nom du pétitionnaire
980     sprintf(
981     $template_link,
982     $ct_href,
983     $row["nom_petitionnaire"]
984     ),
985     // Colonne 3 - Date limite
986     sprintf(
987     $template_link,
988     $ct_href,
989     $this->f->formatDate($row["date_limite_na"])
990     ),
991     // Colonne 4 - Enjeu
992     sprintf(
993     $template_link,
994     $ct_href,
995     $row["enjeu"]
996     )
997     );
998     }
999     // Affichage du tableau listant les dossiers
1000     printf(
1001     $template_table,
1002     // Colonne 1 - Numéro de dossier
1003     _('dossier'),
1004     // Colonne 2 - Nom du pétitionnaire
1005     _('nom_petitionnaire'),
1006     // Colonne 3 - Date limite
1007     _('date_limite'),
1008     // Colonne 4 - Enjeu
1009     _('enjeu'),
1010     // Contenu du tableau
1011     $ct_tbody
1012     );
1013     // Affichage du footer
1014     printf(
1015 jymadier 4132 $this->template_footer,
1016 mbroquet 3730 // href (avec les paramètres du widget)
1017     sprintf(
1018 softime 7996 OM_ROUTE_TAB."&obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s&restreindre_aux_tacites=%s",
1019 mbroquet 3730 $nombre_de_jours,
1020     (is_null($codes_datd) ? "" : implode(";",$codes_datd)),
1021 softime 7717 $filtre,
1022     $restreindre_aux_tacites
1023 mbroquet 3730 ),
1024     // titre
1025     _("Voir +")
1026     );
1027     }
1028    
1029 softime 6565
1030 mbroquet 3730 /**
1031 softime 6565 * Cette méthode permet de récupérer la configuration du widget 'Mes
1032     * recours'.
1033     *
1034     * @return array
1035     */
1036     function get_config_dossier_contentieux_recours($arguments) {
1037     // Initialisation du tableau des paramètres avec ses valeur par défaut
1038     $arguments_default = array(
1039     "filtre" => "instructeur"
1040     );
1041     // Vérification des arguments
1042     foreach ($arguments_default as $key => $value) {
1043     //
1044     if (isset($arguments[$key])) {
1045     //
1046     $elem = trim($arguments[$key]);
1047     //
1048     if ($key === "filtre"
1049     && in_array($elem, array("instructeur", "aucun"))) {
1050     // La valeur doit être dans cette liste
1051     $arguments[$key] = $elem;
1052     continue;
1053     }
1054     }
1055     //
1056     $arguments[$key] = $value;
1057     }
1058     $filtre = $arguments["filtre"];
1059    
1060     // SELECT - CHAMPAFFICHE
1061     //
1062     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
1063     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
1064     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
1065     END";
1066     //
1067     $trim_concat_terrain ='TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
1068     dossier.terrain_adresse_voie,\' \',
1069     dossier.terrain_adresse_lieu_dit,\' \',
1070     dossier.terrain_adresse_code_postal,\' \',
1071     dossier.terrain_adresse_localite,\' \',
1072     dossier.terrain_adresse_bp,\' \',
1073     dossier.terrain_adresse_cedex
1074 softime 7067 )) as "'._("localisation").'"';
1075 softime 6565 //
1076     $case_requerant = "
1077     CASE WHEN demandeur_requerant.qualite = 'particulier'
1078     THEN TRIM(CONCAT(demandeur_requerant.particulier_nom, ' ', demandeur_requerant.particulier_prenom))
1079     ELSE TRIM(CONCAT(demandeur_requerant.personne_morale_raison_sociale, ' ', demandeur_requerant.personne_morale_denomination))
1080     END
1081     ";
1082     //
1083     $query_ct_select_champaffiche = array(
1084     'dossier.dossier as "'._("dossier").'"',
1085     'dossier.dossier_libelle as "'._("dossier").'"',
1086     'dossier_autorisation_type_detaille.libelle as "'._("type de dossier").'"',
1087     'dossier_autorisation_contestee.dossier_libelle as "'._("autorisation").'"',
1088     $case_demandeur.' as "'._("petitionnaire").'"',
1089     $trim_concat_terrain,
1090     $case_requerant.' as "'._("requerant").'"',
1091     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date de recours").'"',
1092     'avis_decision.libelle as "'._("decision").'"',
1093     'etat.libelle as "'._("etat").'"',
1094     );
1095    
1096     /**
1097     * Construction de la requête
1098     */
1099     // SELECT
1100     $query_ct_select = "
1101     dossier.dossier,
1102     dossier.dossier_libelle,
1103     dossier.date_depot
1104     ";
1105    
1106     // FROM
1107     $query_ct_from =
1108     DB_PREFIXE."dossier
1109     LEFT JOIN (
1110     SELECT *
1111     FROM ".DB_PREFIXE."lien_dossier_demandeur
1112     INNER JOIN ".DB_PREFIXE."demandeur
1113     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1114     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1115     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
1116     ) as demandeur
1117     ON demandeur.dossier = dossier.dossier
1118     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1119     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1120     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1121     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1122     LEFT JOIN ".DB_PREFIXE."etat
1123     ON dossier.etat = etat.etat
1124     LEFT JOIN ".DB_PREFIXE."division
1125     ON dossier.division = division.division
1126     LEFT JOIN ".DB_PREFIXE."avis_decision
1127     ON avis_decision.avis_decision=dossier.avis_decision
1128     LEFT OUTER JOIN ".DB_PREFIXE."arrondissement
1129     ON arrondissement.code_postal = dossier.terrain_adresse_code_postal
1130     LEFT JOIN (
1131     SELECT *
1132     FROM ".DB_PREFIXE."lien_dossier_demandeur
1133     INNER JOIN ".DB_PREFIXE."demandeur
1134     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1135     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1136     AND LOWER(demandeur.type_demandeur) = LOWER('requerant')
1137     ) as demandeur_requerant
1138     ON demandeur_requerant.dossier = dossier.dossier
1139     LEFT JOIN ".DB_PREFIXE."dossier as dossier_autorisation_contestee
1140     ON dossier.autorisation_contestee = dossier_autorisation_contestee.dossier
1141     %s
1142     %s
1143     ";
1144    
1145     $query_ct_from_collectivite_filter = "";
1146     $query_ct_from_instructeur_filter = "";
1147     // Filtre sur les dossiers qui concernent l'utilisateur
1148     if ($filtre == "instructeur") {
1149     $query_ct_from_instructeur_filter = "
1150     JOIN ".DB_PREFIXE."instructeur
1151     ON dossier.instructeur=instructeur.instructeur
1152     OR dossier.instructeur_2=instructeur.instructeur
1153     JOIN ".DB_PREFIXE."om_utilisateur
1154     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
1155     AND om_utilisateur.login='".$_SESSION['login']."'
1156     ";
1157     }
1158     else {
1159     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
1160     ON dossier.instructeur=instructeur.instructeur
1161     LEFT JOIN ".DB_PREFIXE."om_utilisateur
1162     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
1163     }
1164    
1165     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1166     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1167     // collectivité
1168     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1169     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
1170     ON dossier.om_collectivite=om_collectivite.om_collectivite
1171     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
1172     ";
1173     }
1174     else {
1175     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
1176     ON dossier.om_collectivite=om_collectivite.om_collectivite
1177     ";
1178     }
1179    
1180     $query_ct_from = sprintf($query_ct_from, $query_ct_from_instructeur_filter, $query_ct_from_collectivite_filter);
1181    
1182     // WHERE - COMMON
1183     $query_ct_where_common = "
1184     LOWER(dossier_autorisation_type.code) = LOWER('RE')
1185     ";
1186    
1187     // ORDER BY
1188     $query_ct_orderby = "
1189     dossier.dossier DESC
1190     ";
1191    
1192     $query_ct_where_groupe = "";
1193     // Gestion des groupes et confidentialité
1194     include('../sql/pgsql/filter_group_widgets.inc.php');
1195    
1196     /**
1197     * Message d'aide
1198     */
1199     //
1200     $message_filtre = "";
1201     //
1202     switch ($filtre) {
1203     case "instructeur":
1204     $message_filtre = " "._("dont je suis l'instructeur");
1205     break;
1206     case "aucun":
1207     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1208     $message_filtre = " "._("situés dans ma collectivité");
1209     } else {
1210     $message_filtre = " "._("situés dans toutes les collectivités");
1211     }
1212     break;
1213     }
1214     //
1215     $message_help = sprintf(
1216     _("Les derniers recours%s."),
1217     $message_filtre
1218     );
1219    
1220     /**
1221     * Return
1222     */
1223     //
1224     return array(
1225     "arguments" => $arguments,
1226     "message_help" => $message_help,
1227     "query_ct_select" => $query_ct_select,
1228     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
1229     "query_ct_from" => $query_ct_from,
1230     "query_ct_where" => $query_ct_where_common,
1231     "query_ct_where_groupe" => $query_ct_where_groupe,
1232     "query_ct_orderby" => $query_ct_orderby
1233     );
1234     }
1235    
1236    
1237     /**
1238     * WIDGET DASHBOARD - Mes recours
1239     * @return void
1240     */
1241     function view_widget_dossier_contentieux_recours($content = null) {
1242     /**
1243     * Ce widget est configurable via l'interface Web. Lors de la création
1244     * du widget dans le paramétrage il est possible de spécifier la ou les
1245     * options suivantes :
1246     * - filtre :
1247     * = instructeur
1248     * = aucun
1249     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1250     */
1251     // Liste des paramètres
1252     $params = array("filtre");
1253     // Formatage des arguments reçus en paramètres
1254     $arguments = $this->get_arguments($content, $params);
1255     // Récupération de la configuration du widget
1256     $conf = $this->get_config_dossier_contentieux_recours($arguments);
1257     // Récupération du filtre
1258     $filtre = $conf["arguments"]["filtre"];
1259     // Définit l'objet cible
1260     $obj = 'dossier_contentieux_tous_recours';
1261     if ($filtre === 'instructeur') {
1262     //
1263     $obj = 'dossier_contentieux_mes_recours';
1264     }
1265    
1266     /**
1267     * Composition de la requête
1268     */
1269     //
1270     $query = sprintf("
1271     SELECT
1272     %s
1273     FROM
1274     %s
1275     WHERE
1276     %s
1277     ORDER BY
1278     %s
1279     LIMIT 5",
1280     $conf["query_ct_select"],
1281     $conf["query_ct_from"],
1282     $conf["query_ct_where"],
1283     $conf["query_ct_orderby"]
1284     );
1285    
1286     /**
1287     * Exécution de la requête
1288     */
1289     //
1290     $res = $this->f->db->query($query);
1291     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
1292     $this->f->isDatabaseError($res);
1293    
1294     // Affichage du message d'informations
1295     printf(
1296     $this->template_help,
1297     $conf["message_help"]
1298     );
1299     /**
1300     * Si il n'y a aucun dossier à afficher, alors on affiche un message
1301     * clair à l'utilisateur et on sort de la vue.
1302     */
1303     // Si il n'y a aucun dossier à afficher
1304     if ($res->numrows() == 0) {
1305     echo _("Vous n'avez pas de recours.");
1306     return;
1307     }
1308    
1309     /**
1310     * Template nécessaires à l'affichage du widget
1311     */
1312     //
1313     $template_table = '
1314     <table class="tab-tab">
1315     <thead>
1316     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
1317     <th class="title col-0 firstcol">
1318     <span class="name">
1319     %s
1320     </span>
1321     </th>
1322     <th class="title col-1">
1323     <span class="name">
1324     %s
1325     </span>
1326     </th>
1327     <th class="title col-2 lastcol">
1328     <span class="name">
1329     %s
1330     </span>
1331     </th>
1332     </tr>
1333     </thead>
1334     <tbody>
1335     %s
1336     </tbody>
1337     </table>
1338     ';
1339     //
1340     $template_line = '
1341     <tr class="tab-data odd">
1342     <td class="col-0 firstcol">
1343     %s
1344     </td>
1345     <td class="col-1 ">
1346     %s
1347     </td>
1348     <td class="col-2 lastcol">
1349     %s
1350     </td>
1351     </tr>
1352     ';
1353     //
1354 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=%s&amp;action=3&amp;idx=%s';
1355 softime 6565 //
1356     $template_link = '
1357     <a class="lienTable" href="%s">
1358     %s
1359     </a>
1360     ';
1361     // Bouton consulter
1362     $template_btn_consulter = '
1363     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
1364     ._('Consulter')
1365     .'</span>
1366     ';
1367     //
1368    
1369     /**
1370     * Si il y a des dossiers à afficher, alors on affiche le widget.
1371     */
1372     // On construit le contenu du tableau
1373     $ct_tbody = '';
1374     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1375     // On construit l'attribut href du lien
1376     $ct_href = sprintf(
1377     $template_href,
1378     // obj
1379     $obj,
1380     // idx
1381     $row["dossier"]
1382     );
1383     // On construit la ligne
1384     $ct_tbody .= sprintf(
1385     $template_line,
1386     // Colonne 1 - Numéro de dossier
1387     sprintf(
1388     $template_link,
1389     $ct_href,
1390     $template_btn_consulter
1391     ),
1392     // Colonne 2 - Numéro de dossier
1393     sprintf(
1394     $template_link,
1395     $ct_href,
1396     $row["dossier_libelle"]
1397     ),
1398     // Colonne 3 - Date de depot
1399     sprintf(
1400     $template_link,
1401     $ct_href,
1402     $this->f->formatDate($row["date_depot"])
1403     )
1404     );
1405     }
1406     // Affichage du tableau listant les dossiers
1407     printf(
1408     $template_table,
1409     // Colonne 1 - Consulter
1410     '',
1411     // Colonne 2 - Numéro de dossier
1412     _('dossier'),
1413     // Colonne 3 - Date de depot
1414     _("Date de recours"),
1415     // Le Contenu
1416     $ct_tbody
1417     );
1418    
1419     /**
1420     * Affichage du footer
1421     */
1422     //
1423 softime 7996 $template_link_footer = OM_ROUTE_TAB.'&obj=%s';
1424 softime 6565 //
1425     $link_footer = sprintf(
1426     $template_link_footer,
1427     $obj
1428     );
1429     //
1430     printf(
1431     $this->template_footer,
1432     $link_footer,
1433     _("Voir +")
1434     );
1435     }
1436    
1437    
1438     /**
1439     * Cette méthode permet de récupérer la configuration du widget 'Mes
1440     * infractions'.
1441     *
1442     * @return array
1443     */
1444     function get_config_dossier_contentieux_infraction($arguments) {
1445     // Initialisation du tableau des paramètres avec ses valeur par défaut
1446     $arguments_default = array(
1447     "filtre" => "instructeur"
1448     );
1449     // Vérification des arguments
1450     foreach ($arguments_default as $key => $value) {
1451     //
1452     if (isset($arguments[$key])) {
1453     //
1454     $elem = trim($arguments[$key]);
1455     //
1456     if ($key === "filtre"
1457     && in_array($elem, array("instructeur", "aucun"))) {
1458     // La valeur doit être dans cette liste
1459     $arguments[$key] = $elem;
1460     continue;
1461     }
1462     }
1463     //
1464     $arguments[$key] = $value;
1465     }
1466     $filtre = $arguments["filtre"];
1467    
1468     // SELECT - CHAMPAFFICHE
1469     //
1470     $trim_concat_terrain ='TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
1471     dossier.terrain_adresse_voie,\' \',
1472     dossier.terrain_adresse_lieu_dit,\' \',
1473     dossier.terrain_adresse_code_postal,\' \',
1474     dossier.terrain_adresse_localite,\' \',
1475     dossier.terrain_adresse_bp,\' \',
1476     dossier.terrain_adresse_cedex
1477 softime 7067 )) as "'._("localisation").'"';
1478 softime 6565 //
1479     $case_contrevenant = "
1480     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
1481     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
1482     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
1483     END
1484     ";
1485     //
1486     $query_ct_select_champaffiche = array(
1487     'dossier.dossier as "'._("dossier").'"',
1488     'dossier.dossier_libelle as "'._("dossier").'"',
1489     $trim_concat_terrain,
1490     $case_contrevenant.' as "'._("contrevenant").'"',
1491     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
1492     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
1493     'etat.libelle as "'._("etat").'"',
1494     );
1495    
1496     /**
1497     * Construction de la requête
1498     */
1499     // SELECT
1500     $query_ct_select = "
1501     dossier.dossier,
1502     dossier.dossier_libelle,
1503     dossier.date_depot
1504     ";
1505    
1506     // FROM
1507     $query_ct_from =
1508     DB_PREFIXE."dossier
1509     LEFT JOIN (
1510     SELECT *
1511     FROM ".DB_PREFIXE."lien_dossier_demandeur
1512     INNER JOIN ".DB_PREFIXE."demandeur
1513     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1514     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1515     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
1516     ) as demandeur
1517     ON demandeur.dossier = dossier.dossier
1518     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
1519     ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation
1520     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
1521     ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille
1522     LEFT JOIN ".DB_PREFIXE."etat
1523     ON dossier.etat = etat.etat
1524     LEFT JOIN ".DB_PREFIXE."division
1525     ON dossier.division = division.division
1526     LEFT JOIN ".DB_PREFIXE."avis_decision
1527     ON avis_decision.avis_decision=dossier.avis_decision
1528     LEFT OUTER JOIN ".DB_PREFIXE."arrondissement
1529     ON arrondissement.code_postal = dossier.terrain_adresse_code_postal
1530     LEFT JOIN (
1531     SELECT *
1532     FROM ".DB_PREFIXE."lien_dossier_demandeur
1533     INNER JOIN ".DB_PREFIXE."demandeur
1534     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
1535     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
1536     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
1537     ) as demandeur_contrevenant
1538     ON demandeur_contrevenant.dossier = dossier.dossier
1539     %s
1540     %s
1541     ";
1542    
1543     $query_ct_from_collectivite_filter = "";
1544     $query_ct_from_instructeur_filter = "";
1545     // Filtre sur les dossiers qui concernent l'utilisateur
1546     if ($filtre == "instructeur") {
1547     $query_ct_from_instructeur_filter = "
1548     JOIN ".DB_PREFIXE."instructeur
1549     ON dossier.instructeur=instructeur.instructeur
1550     OR dossier.instructeur_2=instructeur.instructeur
1551     JOIN ".DB_PREFIXE."om_utilisateur
1552     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
1553     AND om_utilisateur.login='".$_SESSION['login']."'
1554     ";
1555     }
1556     else {
1557     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
1558     ON dossier.instructeur=instructeur.instructeur
1559     LEFT JOIN ".DB_PREFIXE."om_utilisateur
1560     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
1561     }
1562    
1563     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1564     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1565     // collectivité
1566     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1567     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
1568     ON dossier.om_collectivite=om_collectivite.om_collectivite
1569     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
1570     ";
1571     }
1572     else {
1573     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
1574     ON dossier.om_collectivite=om_collectivite.om_collectivite
1575     ";
1576     }
1577    
1578     $query_ct_from = sprintf($query_ct_from, $query_ct_from_instructeur_filter, $query_ct_from_collectivite_filter);
1579    
1580     // WHERE - COMMON
1581     $query_ct_where_common = "
1582     LOWER(dossier_autorisation_type.code) = LOWER('IN')
1583     ";
1584    
1585     // ORDER BY
1586     $query_ct_orderby = "
1587     dossier.dossier DESC
1588     ";
1589    
1590     $query_ct_where_groupe = "";
1591     // Gestion des groupes et confidentialité
1592     include('../sql/pgsql/filter_group_widgets.inc.php');
1593    
1594     /**
1595     * Message d'aide
1596     */
1597     //
1598     $message_filtre = "";
1599     //
1600     switch ($filtre) {
1601     case "instructeur":
1602     $message_filtre = " "._("dont je suis l'instructeur");
1603     break;
1604     case "aucun":
1605     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1606     $message_filtre = " "._("situés dans ma collectivité");
1607     } else {
1608     $message_filtre = " "._("situés dans toutes les collectivités");
1609     }
1610     break;
1611     }
1612     //
1613     $message_help = sprintf(
1614     _("Les dernières infractions%s."),
1615     $message_filtre
1616     );
1617    
1618     /**
1619     * Return
1620     */
1621     //
1622     return array(
1623     "arguments" => $arguments,
1624     "message_help" => $message_help,
1625     "query_ct_select" => $query_ct_select,
1626     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
1627     "query_ct_from" => $query_ct_from,
1628     "query_ct_where" => $query_ct_where_common,
1629     "query_ct_orderby" => $query_ct_orderby
1630     );
1631     }
1632    
1633 softime 7996 /**
1634     * WIDGET DASHBOARD - RSS
1635     *
1636     * Cette fonction gère l'affichage du widget RSS.
1637     *
1638     * Elle récupère trois arguments :
1639     * - urls (l'urls des flux rss séparé par une virgule)
1640     * - mode (le mode utilisé par le widget, soit "server_side" donc uniquement
1641     * sur server, soit "client_side" avec une récuperation des informations en
1642     * javascript)
1643     * - max_item (le nombre d'information provenant du flux, à afficher)
1644     *
1645     * Si mode = "server_side" alors
1646     * le DOM est construit dans la méthode view_widget_rss() de cette classe
1647     *
1648     * Si mode = client_side alors
1649     * le DOM est construit en javascript dans script.js::bind_widget_rss()
1650     *
1651     * @param string $content Contenu du champ "texte" ou "arguments" du widget
1652     * @param string $id Identifiant de l'enregistrement "om_dashboard"
1653     *
1654     * @return void
1655     */
1656     function display_widget_rss($content = null, $id) {
1657     // Liste des paramètres
1658     $params = array("urls", "mode", "max_item");
1659     // Formatage des arguments reçus en paramètres
1660     $arguments = $this->get_arguments($content, $params);
1661 softime 6565
1662 softime 7996 // Requête SQL
1663     $sql_template = "
1664     SELECT om_dashboard.om_widget
1665     FROM %som_dashboard
1666     WHERE om_dashboard.om_dashboard=%s;
1667     ";
1668     $sql = sprintf($sql_template, DB_PREFIXE, $id);
1669     $row = $this->f->db->getone($sql);
1670     $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
1671     $this->f->isDatabaseError($row);
1672    
1673     if ($arguments["mode"] === "client_side") {
1674     $widget_template = "
1675     <div class='widget-rss-marker' data-id_widget='%d' data-mode='%s' data-urls='%s' data-max_item='%s'/></div>
1676     ";
1677     echo sprintf($widget_template, $row, "client_side", $arguments['urls'], $arguments['max_item']);
1678     } else {
1679     $widget_template = "
1680     <div class='widget-rss-marker' data-id_widget='%d' data-mode='%s'/></div>
1681     ";
1682     echo sprintf($widget_template, $row, "server_side");
1683     }
1684     }
1685    
1686    
1687    
1688 softime 6565 /**
1689 softime 7996 * WIDGET DASHBOARD
1690     *
1691     * Création du DOM du widget RSS dans le cas server_side.
1692     *
1693     * @return void
1694     */
1695     function view_widget_rss() {
1696     // Liste des paramètres
1697     $params = array("urls", "mode", "max_item");
1698     // Formatage des arguments reçus en paramètres
1699     $arguments = $this->get_arguments($this->getVal('arguments'), $params);
1700     // Récupère les URLs des différents flux dans un tableau
1701     $urls = explode(',', $arguments['urls']);
1702    
1703     // On retire 1 à la valeur de max_item car nous bouclons à partir de 0
1704     $real_max_item = $arguments['max_item'] - 1;
1705    
1706     //Pour chaque url
1707     foreach ($urls as $url) {
1708     // Instanciation de la classe DOMDocument
1709     $xmlDoc = new DOMDocument();
1710     $xmlDoc->load($url);
1711    
1712     // Initialise le contenu vide
1713     $content = "";
1714    
1715     // Template de l'affichage en liste
1716     $render = "
1717     <ul>
1718     <h4>%s</h4>
1719     %s
1720     </ul>
1721     ";
1722    
1723     // Tempalte de l'affichage du contenu
1724     $content_flux_template = "
1725     <li>
1726     <a href=%s target=_blank>
1727     <h5>%s</h5>
1728     </a>
1729     <p>%s</>
1730     </li>
1731     ";
1732    
1733     // Récupération du nom du flux
1734     $channel_title = $xmlDoc->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
1735    
1736     // Pour chaque item du flux
1737     $x = $xmlDoc->getElementsByTagName('item');
1738     if ($x->length > 0) {
1739     for ($i=0; $i<=$real_max_item; $i++) {
1740     $item_title = $x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
1741     $item_link = $x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
1742     $item_desc = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
1743     // Contenu
1744     $content .= sprintf($content_flux_template, $item_link, $item_title, $item_desc);
1745     }
1746     } else {
1747     $content = "Aucune donnée disponible";
1748     }
1749    
1750     // Affiche le contenu du widget
1751     echo sprintf($render, $channel_title, $content);
1752     }
1753     }
1754    
1755     /**
1756     * Définition des actions disponibles sur la classe.
1757     *
1758     * @return void
1759     */
1760     function init_class_actions() {
1761    
1762     // On récupère les actions génériques définies dans la méthode
1763     // d'initialisation de la classe parente
1764     parent::init_class_actions();
1765    
1766     // ACTION - 004 - view_widget_rss
1767     // Permet d'accéder au widget RSS "server_side" depuis une URL
1768     $this->class_actions[4] = array(
1769     "identifier" => "widget-rss",
1770     "view" => "view_widget_rss",
1771     "permission_suffix" => "widget_rss",
1772     );
1773    
1774     }
1775    
1776     /**
1777 softime 6565 * WIDGET DASHBOARD - Mes infractions
1778     * @return void
1779     */
1780     function view_widget_dossier_contentieux_infraction($content = null) {
1781     /**
1782     * Ce widget est configurable via l'interface Web. Lors de la création
1783     * du widget dans le paramétrage il est possible de spécifier la ou les
1784     * options suivantes :
1785     * - filtre :
1786     * = instructeur
1787     * = aucun
1788     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1789     */
1790     // Liste des paramètres
1791     $params = array("filtre");
1792     // Formatage des arguments reçus en paramètres
1793     $arguments = $this->get_arguments($content, $params);
1794     // Récupération de la configuration du widget
1795     $conf = $this->get_config_dossier_contentieux_infraction($arguments);
1796     // Récupération du filtre
1797     $filtre = $conf["arguments"]["filtre"];
1798     // Définit l'objet cible
1799     $obj = 'dossier_contentieux_toutes_infractions';
1800     if ($filtre === 'instructeur') {
1801     //
1802     $obj = 'dossier_contentieux_mes_infractions';
1803     }
1804    
1805     /**
1806     * Composition de la requête
1807     */
1808     //
1809     $query = sprintf("
1810     SELECT
1811     %s
1812     FROM
1813     %s
1814     WHERE
1815     %s
1816     ORDER BY
1817     %s
1818     LIMIT 5",
1819     $conf["query_ct_select"],
1820     $conf["query_ct_from"],
1821     $conf["query_ct_where"],
1822     $conf["query_ct_orderby"]
1823     );
1824    
1825     /**
1826     * Exécution de la requête
1827     */
1828     //
1829     $res = $this->f->db->query($query);
1830     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
1831     $this->f->isDatabaseError($res);
1832    
1833     // Affichage du message d'informations
1834     printf(
1835     $this->template_help,
1836     $conf["message_help"]
1837     );
1838     /**
1839     * Si il n'y a aucun dossier à afficher, alors on affiche un message
1840     * clair à l'utilisateur et on sort de la vue.
1841     */
1842     // Si il n'y a aucun dossier à afficher
1843     if ($res->numrows() == 0) {
1844     // Affichage du message d'informations
1845     echo _("Vous n'avez pas d'infraction.");
1846     // Exit
1847     return;
1848     }
1849    
1850     /**
1851     * Template nécessaires à l'affichage du widget
1852     */
1853     //
1854     $template_table = '
1855     <table class="tab-tab">
1856     <thead>
1857     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
1858     <th class="title col-0 firstcol">
1859     <span class="name">
1860     %s
1861     </span>
1862     </th>
1863     <th class="title col-1">
1864     <span class="name">
1865     %s
1866     </span>
1867     </th>
1868     <th class="title col-2 lastcol">
1869     <span class="name">
1870     %s
1871     </span>
1872     </th>
1873     </tr>
1874     </thead>
1875     <tbody>
1876     %s
1877     </tbody>
1878     </table>
1879     ';
1880     //
1881     $template_line = '
1882     <tr class="tab-data odd">
1883     <td class="col-0 firstcol">
1884     %s
1885     </td>
1886     <td class="col-1 ">
1887     %s
1888     </td>
1889     <td class="col-2 lastcol">
1890     %s
1891     </td>
1892     </tr>
1893     ';
1894    
1895     // Bouton consulter
1896     $template_btn_consulter = '
1897     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
1898     ._('Consulter')
1899     .'</span>
1900     ';
1901     //
1902 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=%s&amp;action=3&amp;idx=%s';
1903 softime 6565 //
1904     $template_link = '
1905     <a class="lienTable" href="%s">
1906     %s
1907     </a>
1908     ';
1909    
1910     /**
1911     * Si il y a des dossiers à afficher, alors on affiche le widget.
1912     */
1913     // On construit le contenu du tableau
1914     $ct_tbody = '';
1915     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1916     // On construit l'attribut href du lien
1917     $ct_href = sprintf(
1918     $template_href,
1919     // obj
1920     $obj,
1921     // idx
1922     $row["dossier"]
1923     );
1924     // On construit la ligne
1925     $ct_tbody .= sprintf(
1926     $template_line,
1927     // Colonne 1 - Numéro de dossier
1928     sprintf(
1929     $template_link,
1930     $ct_href,
1931     $template_btn_consulter
1932     ),
1933     // Colonne 2 - Numéro de dossier
1934     sprintf(
1935     $template_link,
1936     $ct_href,
1937     $row["dossier_libelle"]
1938     ),
1939     // Colonne 3 - Date de depot
1940     sprintf(
1941     $template_link,
1942     $ct_href,
1943     $this->f->formatDate($row["date_depot"])
1944     )
1945     );
1946     }
1947     // Affichage du tableau listant les dossiers
1948     printf(
1949     $template_table,
1950     // Colonne 1 - Consulter
1951     '',
1952     // Colonne 2 - Numéro de dossier
1953     _('dossier'),
1954     // Colonne 3 - Date de depot
1955     _("Date de réception"),
1956     // Le Contenu
1957     $ct_tbody
1958     );
1959    
1960     /**
1961     * Affichage du footer
1962     */
1963     //
1964 softime 7996 $template_link_footer = OM_ROUTE_TAB.'&obj=%s';
1965 softime 6565 //
1966     $link_footer = sprintf(
1967     $template_link_footer,
1968     $obj
1969     );
1970     //
1971     printf(
1972     $this->template_footer,
1973     $link_footer,
1974     _("Voir +")
1975     );
1976     }
1977    
1978     /**
1979 mbroquet 3730 * Cet méthode permet de formater, la chaîne de caractères reçue du
1980     * paramétrage du widget en un tableau de valeurs dont les clés
1981     * correspondent aux clés passées en paramètre.
1982     *
1983     * @param string $content
1984     * @param array $params
1985     *
1986     * @return array
1987     */
1988     function get_arguments($content = null, $params = array()) {
1989     //
1990     $arguments = array();
1991     // On explose les paramètres reçus avec un élément par ligne
1992     $params_tmp1 = explode("\n", $content);
1993     // On boucle sur chaque ligne de paramètre
1994     foreach ($params_tmp1 as $key => $value) {
1995     // On explose le paramètre de sa valeur avec le séparateur '='
1996     $params_tmp2[] = explode("=", $value);
1997     }
1998     // On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue
1999     // est acceptable ou non
2000     foreach ($params_tmp2 as $key => $value) {
2001     //
2002     if (!isset($value[0]) || !isset($value[1])) {
2003     continue;
2004     }
2005     //
2006     if (in_array(trim($value[0]), $params)) {
2007     $arguments[trim($value[0])] = trim($value[1]);
2008     }
2009     }
2010     //
2011     return $arguments;
2012     }
2013    
2014 jymadier 4132 /**
2015 fmichon 4138 * WIDGET DASHBOARD - Retours de messages
2016     *
2017     * @return void
2018     */
2019     function view_widget_messages_retours($content = null) {
2020    
2021     /**
2022     * Ce widget est configurable via l'interface Web. Lors de la création
2023     * du widget dans le paramétrage il est possible de spécifier la ou les
2024     * options suivantes :
2025     *
2026     * - filtre :
2027     * = instructeur
2028     * = division
2029     * = aucun
2030     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2031 softime 6565 *
2032     * - contexte :
2033     * = standard
2034     * = contentieux
2035     * (defaut) Par défaut le contexte est standard.
2036 fmichon 4138 */
2037     // Liste des paramètres
2038 softime 6565 $params = array("filtre", "contexte");
2039 fmichon 4138 // Formatage des arguments reçus en paramètres
2040     $arguments = $this->get_arguments($content, $params);
2041     // Récupération de la configuration du widget
2042     $conf = $this->get_config_messages_retours($arguments);
2043     //
2044     $filtre = $conf["arguments"]["filtre"];
2045 softime 6565 //
2046     $contexte = $conf["arguments"]["contexte"];
2047 fmichon 4138
2048     /**
2049     * Composition de la requête
2050     */
2051     //
2052     $query = sprintf(
2053     "SELECT
2054     count(*)
2055     FROM
2056     %s
2057     WHERE
2058     %s",
2059     $conf["query_ct_from"],
2060 softime 6565 $conf["query_ct_where_common"],
2061     $conf["query_ct_where_groupe"]
2062 fmichon 4138 );
2063    
2064     /**
2065     * Exécution de la requête
2066     */
2067     //
2068     $res = $this->f->db->getone($query);
2069     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
2070     $this->f->isDatabaseError($res);
2071    
2072     // Affichage du message d'informations
2073     printf(
2074     $this->template_help,
2075     $conf["message_help"]
2076     );
2077    
2078     //
2079     if (intval($res) === 0) {
2080     //
2081     echo _("Aucun message non lu.");
2082     return;
2083     }
2084    
2085    
2086     /**
2087     *
2088     */
2089     $template_panel = '
2090     <div class="panel panel-box">
2091     <div class="list-justified-container">
2092     <ul class="list-justified text-center">
2093     %s
2094     </ul>
2095     </div>
2096     </div>';
2097     /**
2098     *
2099     */
2100     //
2101     $panel = "";
2102     //
2103     $template_elem = '
2104     <li>
2105     <span class="size-h3 box-icon rounded %s">%s</span>
2106     <p class="text-muted">%s %s</p>
2107     </li>
2108     ';
2109     $panel_elem = sprintf(
2110     $template_elem,
2111     "bg-info",
2112     intval($res),
2113     _("Non lu"),
2114     ""
2115     );
2116     //
2117     $panel .= sprintf(
2118     $template_panel,
2119     $panel_elem
2120     );
2121     echo $panel;
2122    
2123 softime 6565 // Définit le lien de redirection vers le listing en fonction du
2124     // contexte et du filtre
2125     if ($contexte === 'standard') {
2126     //
2127     switch ($filtre) {
2128     case 'instructeur':
2129     $obj_href_more_link = 'messages_mes_retours';
2130     break;
2131     case 'division':
2132     $obj_href_more_link = 'messages_retours_ma_division';
2133     break;
2134     case 'aucun':
2135     $obj_href_more_link = 'messages_tous_retours';
2136     break;
2137     }
2138 fmichon 4138 }
2139 softime 6565 //
2140     if ($contexte === 'contentieux') {
2141     //
2142     switch ($filtre) {
2143     case 'instructeur':
2144     $obj_href_more_link = 'messages_contentieux_mes_retours';
2145     break;
2146     case 'division':
2147     $obj_href_more_link = 'messages_contentieux_retours_ma_division';
2148     break;
2149     case 'aucun':
2150     $obj_href_more_link = 'messages_contentieux_tous_retours';
2151     break;
2152     }
2153     }
2154 fmichon 4138
2155     //
2156     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
2157     return;
2158     }
2159     // Affichage du footer
2160     printf(
2161     $this->template_footer,
2162     // href
2163     sprintf(
2164 softime 7996 OM_ROUTE_TAB.'&obj=%s',
2165 fmichon 4138 $obj_href_more_link
2166     ),
2167     // titre
2168     _("Voir +")
2169     );
2170    
2171     }
2172    
2173    
2174     /**
2175     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2176     * messages'.
2177     *
2178     * @return array
2179     */
2180     function get_config_messages_retours($arguments) {
2181     // Initialisation du tableau des paramètres avec ses valeur par défaut
2182     $arguments_default = array(
2183     "filtre" => "instructeur",
2184 softime 6565 "contexte" => "standard",
2185 fmichon 4138 );
2186     // Vérification des arguments
2187     foreach ($arguments_default as $key => $value) {
2188     //
2189     if (isset($arguments[$key])) {
2190     //
2191     $elem = trim($arguments[$key]);
2192     //
2193     if ($key === "filtre"
2194     && in_array($elem, array("instructeur", "division", "aucun"))) {
2195     // La valeur doit être dans cette liste
2196     $arguments[$key] = $elem;
2197     continue;
2198     }
2199 softime 6565 //
2200     if ($key === "contexte"
2201     && in_array($elem, array("standard", "contentieux"))) {
2202     // La valeur doit être dans cette liste
2203     $arguments[$key] = $elem;
2204     continue;
2205     }
2206 fmichon 4138 }
2207     //
2208     $arguments[$key] = $value;
2209     }
2210     //
2211     $filtre = $arguments["filtre"];
2212 softime 6565 //
2213     $contexte = $arguments["contexte"];
2214 fmichon 4138
2215     /**
2216     * Construction de la requête
2217     */
2218 softime 6565 //
2219     $query_ct_from_instructeur_filter = "";
2220     $query_ct_from_division_filter = "";
2221     $query_ct_from_collectivite_filter = "";
2222     //
2223     $query_ct_from_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
2224     ON dossier.instructeur=instructeur.instructeur
2225     LEFT JOIN ".DB_PREFIXE."om_utilisateur
2226     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2227     LEFT JOIN ".DB_PREFIXE."instructeur as instructeur_2
2228     ON dossier.instructeur_2=instructeur_2.instructeur ";
2229     //
2230     if ($filtre == "instructeur") {
2231     $query_ct_from_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
2232     ON dossier.instructeur=instructeur.instructeur
2233     OR dossier.instructeur_2=instructeur.instructeur
2234     JOIN ".DB_PREFIXE."om_utilisateur
2235     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2236     ";
2237     }
2238     //
2239     $query_ct_from_division_filter = " JOIN ".DB_PREFIXE."division
2240     ON dossier.division=division.division
2241     ";
2242     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2243     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2244     // collectivité
2245     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2246     $query_ct_from_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
2247     ON dossier.om_collectivite=om_collectivite.om_collectivite
2248     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
2249     ";
2250     } else {
2251     $query_ct_from_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
2252     ON dossier.om_collectivite=om_collectivite.om_collectivite
2253     ";
2254     }
2255    
2256 fmichon 4138 // FROM
2257     $query_ct_from = "
2258     ".DB_PREFIXE."dossier_message
2259     LEFT JOIN ".DB_PREFIXE."dossier
2260     ON dossier_message.dossier=dossier.dossier
2261 nhaye 4791 %s
2262     %s
2263     %s";
2264    
2265 softime 6565 //
2266     $query_ct_from = sprintf($query_ct_from, $query_ct_from_instructeur_filter, $query_ct_from_division_filter, $query_ct_from_collectivite_filter);
2267    
2268     //
2269 nhaye 4791 $query_ct_where_instructeur_filter = "";
2270     $query_ct_where_division_filter = "";
2271     $query_ct_where_collectivite_filter = "";
2272 fmichon 4138 // Filtre sur les dossiers qui concernent l'utilisateur
2273     if ($filtre == "instructeur") {
2274     //
2275 softime 6565 $query_ct_where_instructeur_filter = " AND om_utilisateur.login='".$_SESSION['login']."'
2276     AND dossier_message.destinataire = 'instructeur'
2277 fmichon 4138 ";
2278 softime 6565 //
2279     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2280     $query_ct_where_instructeur_filter = " AND (om_utilisateur.login='".$_SESSION['login']."'
2281     OR dossier_message.destinataire = 'commune')
2282     ";
2283     }
2284 nhaye 4791 }
2285     // Filtre sur les dossier de la division
2286     if ($filtre == "division") {
2287 fmichon 4138 //
2288 softime 6565 $query_ct_where_division_filter = " AND division.division = ".$_SESSION['division']."
2289     AND dossier_message.destinataire = 'instructeur'
2290 fmichon 4138 ";
2291 softime 6565 //
2292     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2293     $query_ct_where_division_filter = " AND (division.division = ".$_SESSION['division']."
2294     OR dossier_message.destinataire = 'commune')
2295     ";
2296     }
2297 fmichon 4138 }
2298 softime 6565
2299     // Filtre les dossiers par contexte
2300     $query_ct_where_groupe_filter = " AND LOWER(groupe.code) != 'ctx'";
2301     if ($contexte === 'contentieux') {
2302     //
2303     $query_ct_where_groupe_filter = " AND LOWER(groupe.code) = 'ctx'";
2304 fmichon 4138 }
2305    
2306 nhaye 4791 // WHERE - COMMON
2307     $query_ct_where_common = "
2308     dossier_message.lu IS FALSE
2309 softime 6565 %s
2310     %s
2311     %s
2312     %s
2313 nhaye 4791 ";
2314    
2315 softime 6565 //
2316     $query_ct_where_common = sprintf($query_ct_where_common, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter, $query_ct_where_groupe_filter);
2317    
2318     // Filtre du groupe
2319     $query_ct_where_groupe = "";
2320     // Gestion des groupes et confidentialité
2321     include('../sql/pgsql/filter_group_widgets.inc.php');
2322    
2323 fmichon 4138 /**
2324     * Message d'aide
2325     */
2326     //
2327     $message_filtre = "";
2328     //
2329     switch ($filtre) {
2330     case "instructeur":
2331 softime 6565 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2332     $message_filtre = " "._("dont je suis l'instructeur ou dont le destinataire est 'commune'");
2333     } else {
2334     $message_filtre = " "._("dont je suis l'instructeur et dont le destinataire est 'instructeur'");
2335     }
2336 fmichon 4138 break;
2337     case "division":
2338 softime 6565 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2339     $message_filtre = " "._("situés dans ma division ou dont le destinataire est 'commune'");
2340     } else {
2341     $message_filtre = " "._("situés dans ma division et dont le destinataire est 'instructeur'");
2342     }
2343 fmichon 4138 break;
2344     case "aucun":
2345     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2346     $message_filtre = " "._("situés dans ma collectivité");
2347     } else {
2348     $message_filtre = " "._("situés dans toutes les collectivités");
2349     }
2350     break;
2351     }
2352     //
2353 softime 6565 $template_message_help = _("Les messages marqués comme 'non lu' qui concernent des dossiers d'instruction%s.");
2354     //
2355     if ($contexte === 'contentieux') {
2356     //
2357     $template_message_help = _("Les messages marqués comme 'non lu' qui concernent des dossiers contentieux%s.");
2358     }
2359     //
2360 fmichon 4138 $message_help = sprintf(
2361 softime 6565 $template_message_help,
2362 fmichon 4138 $message_filtre
2363     );
2364    
2365     /**
2366     * Return
2367     */
2368     //
2369     return array(
2370     "arguments" => $arguments,
2371     "message_help" => $message_help,
2372     "query_ct_from" => $query_ct_from,
2373     "query_ct_where_common" => $query_ct_where_common,
2374 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
2375 fmichon 4138 );
2376     }
2377    
2378     /**
2379 jymadier 4132 * WIDGET DASHBOARD - Retours de consultation
2380     *
2381     * @return void
2382     */
2383     function view_widget_consultation_retours($content = null) {
2384    
2385     /**
2386     * Ce widget est configurable via l'interface Web. Lors de la création
2387     * du widget dans le paramétrage il est possible de spécifier la ou les
2388     * options suivantes :
2389     *
2390     * - filtre :
2391     * = instructeur
2392     * = division
2393     * = aucun
2394     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2395     */
2396     // Liste des paramètres
2397     $params = array("filtre", );
2398     // Formatage des arguments reçus en paramètres
2399     $arguments = $this->get_arguments($content, $params);
2400     // Récupération de la configuration du widget
2401     $conf = $this->get_config_consultation_retours($arguments);
2402     //
2403     $filtre = $conf["arguments"]["filtre"];
2404    
2405     /**
2406     * Composition de la requête
2407     */
2408     //
2409     $query = sprintf(
2410     "SELECT
2411     count(*)
2412     FROM
2413     %s
2414     WHERE
2415     %s",
2416     $conf["query_ct_from"],
2417 nhaye 4791 $conf["query_ct_where_common"]
2418 jymadier 4132 );
2419    
2420     /**
2421     * Exécution de la requête
2422     */
2423     //
2424     $res = $this->f->db->getone($query);
2425     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
2426     $this->f->isDatabaseError($res);
2427    
2428     // Affichage du message d'informations
2429     printf(
2430     $this->template_help,
2431     $conf["message_help"]
2432     );
2433    
2434     //
2435     if (intval($res) === 0) {
2436     //
2437     echo _("Aucun retour de consultation non lu.");
2438     return;
2439     }
2440    
2441    
2442     /**
2443     *
2444     */
2445     $template_panel = '
2446     <div class="panel panel-box">
2447     <div class="list-justified-container">
2448     <ul class="list-justified text-center">
2449     %s
2450     </ul>
2451     </div>
2452     </div>';
2453     /**
2454     *
2455     */
2456     //
2457     $panel = "";
2458     //
2459     $template_elem = '
2460     <li>
2461     <span class="size-h3 box-icon rounded %s">%s</span>
2462 softime 7366 <p class="text-muted">%s %s</p>
2463 jymadier 4132 </li>
2464     ';
2465     $panel_elem = sprintf(
2466     $template_elem,
2467     "bg-info",
2468     intval($res),
2469     _("Non lu"),
2470     ""
2471     );
2472     //
2473     $panel .= sprintf(
2474     $template_panel,
2475     $panel_elem
2476     );
2477     echo $panel;
2478    
2479     /**
2480     *
2481     */
2482     if ($filtre === "aucun") {
2483     $obj_href_more_link = "consultation_tous_retours";
2484     } elseif ($filtre === "division") {
2485     $obj_href_more_link = "consultation_retours_ma_division";
2486     } else {
2487     $obj_href_more_link = "consultation_mes_retours";
2488     }
2489    
2490     //
2491     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
2492     return;
2493     }
2494     // Affichage du footer
2495     printf(
2496     $this->template_footer,
2497     // href
2498     sprintf(
2499 softime 7996 OM_ROUTE_TAB.'&obj=%s',
2500 jymadier 4132 $obj_href_more_link
2501     ),
2502     // titre
2503     _("Voir +")
2504     );
2505    
2506     }
2507    
2508    
2509     /**
2510     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2511     * consultation'.
2512     *
2513     * @return array
2514     */
2515     function get_config_consultation_retours($arguments) {
2516 softime 7366 // Initialisation du tableau des paramètres avec ses valeurs par défaut
2517 jymadier 4132 $arguments_default = array(
2518     "filtre" => "instructeur",
2519     );
2520     // Vérification des arguments
2521     foreach ($arguments_default as $key => $value) {
2522     //
2523     if (isset($arguments[$key])) {
2524     //
2525     $elem = trim($arguments[$key]);
2526     //
2527     if ($key === "filtre"
2528     && in_array($elem, array("instructeur", "division", "aucun"))) {
2529     // La valeur doit être dans cette liste
2530     $arguments[$key] = $elem;
2531     continue;
2532     }
2533     }
2534     //
2535     $arguments[$key] = $value;
2536     }
2537     //
2538     $filtre = $arguments["filtre"];
2539    
2540     /**
2541     * Construction de la requête
2542     */
2543     // FROM
2544     $query_ct_from = "
2545     ".DB_PREFIXE."consultation
2546     LEFT JOIN ".DB_PREFIXE."avis_consultation
2547     ON consultation.avis_consultation=avis_consultation.avis_consultation
2548     LEFT JOIN ".DB_PREFIXE."dossier
2549     ON consultation.dossier=dossier.dossier
2550     LEFT JOIN ".DB_PREFIXE."service
2551     ON consultation.service=service.service
2552 nhaye 4791 %s
2553     %s
2554     %s";
2555    
2556     $query_ct_where_instructeur_filter = "";
2557     $query_ct_where_division_filter = "";
2558     $query_ct_where_collectivite_filter = "";
2559 jymadier 4132 // Filtre sur les dossiers qui concernent l'utilisateur
2560 softime 7366 if ($filtre === "instructeur") {
2561 jymadier 4132 //
2562 nhaye 4791 $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
2563     ON dossier.instructeur=instructeur.instructeur
2564     JOIN ".DB_PREFIXE."om_utilisateur
2565     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2566     AND om_utilisateur.login='".$_SESSION['login']."'
2567 jymadier 4132 ";
2568 nhaye 4793 } else {
2569 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
2570 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
2571     LEFT JOIN ".DB_PREFIXE."om_utilisateur
2572     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
2573 nhaye 4791 }
2574     // Filtre sur les dossier de la division
2575 softime 7366 if ($filtre === "division") {
2576 jymadier 4132 //
2577 nhaye 4791 $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
2578     ON dossier.division=division.division
2579     AND division.division = ".$_SESSION['division']."
2580 jymadier 4132 ";
2581 nhaye 4793 } else {
2582 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
2583 nhaye 4793 ON dossier.division=division.division";
2584 jymadier 4132 }
2585     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2586     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2587     // collectivité
2588     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2589 nhaye 4791 $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
2590     ON dossier.om_collectivite=om_collectivite.om_collectivite
2591     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
2592 jymadier 4132 ";
2593 nmeucci 4799 } else {
2594     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
2595     ON dossier.om_collectivite=om_collectivite.om_collectivite
2596     ";
2597 jymadier 4132 }
2598    
2599 nhaye 4791 $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
2600    
2601     // WHERE - COMMON
2602     $query_ct_where_common = "
2603     consultation.lu IS FALSE
2604     ";
2605    
2606 jymadier 4132 /**
2607     * Message d'aide
2608     */
2609     //
2610     $message_filtre = "";
2611     //
2612     switch ($filtre) {
2613     case "instructeur":
2614     $message_filtre = " "._("dont je suis l'instructeur");
2615     break;
2616     case "division":
2617     $message_filtre = " "._("situés dans ma division");
2618     break;
2619     case "aucun":
2620     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2621     $message_filtre = " "._("situés dans ma collectivité");
2622     } else {
2623     $message_filtre = " "._("situés dans toutes les collectivités");
2624     }
2625     break;
2626     }
2627     //
2628     $message_help = sprintf(
2629     _("Les consultations marquées comme 'non lu' qui concernent des ".
2630     "dossiers d'instruction%s."),
2631     $message_filtre
2632     );
2633    
2634     /**
2635     * Return
2636     */
2637     //
2638     return array(
2639     "arguments" => $arguments,
2640     "message_help" => $message_help,
2641     "query_ct_from" => $query_ct_from,
2642     "query_ct_where_common" => $query_ct_where_common,
2643     );
2644     }
2645    
2646 softime 4291
2647     /**
2648 softime 7366 * WIDGET DASHBOARD - widget_commission_retours
2649     *
2650     * Ce widget est configurable via l'interface Web. Lors de la création
2651     * du widget dans le paramétrage il est possible de spécifier la ou les
2652     * options suivantes :
2653     *
2654     * - filtre :
2655     * = instructeur
2656     * = division
2657     * = aucun
2658     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2659     *
2660     * @param string $content Arguments pour le widget, ici les filtres.
2661     * @return void
2662     */
2663     function view_widget_commission_retours($content = null) {
2664     // Liste des paramètres
2665     $params = array("filtre", );
2666     // Formatage des arguments reçus en paramètres
2667     $arguments = $this->get_arguments($content, $params);
2668     // Récupération de la configuration du widget
2669     $conf = $this->get_config_commission_retours($arguments);
2670     //
2671     $filtre = $conf["arguments"]["filtre"];
2672    
2673     /**
2674     * Composition de la requête
2675     */
2676     //
2677     $query = sprintf(
2678     "SELECT
2679     count(*)
2680     FROM
2681     %s
2682     WHERE
2683     %s",
2684     $conf["query_ct_from"],
2685     $conf["query_ct_where_common"]
2686     );
2687    
2688     /**
2689     * Exécution de la requête
2690     */
2691     //
2692     $res = $this->f->db->getone($query);
2693     $this->addToLog(__METHOD__ . "(): db->getone(\"" . $query . "\");", VERBOSE_MODE);
2694     $this->f->isDatabaseError($res);
2695    
2696     // Affichage du message d'informations
2697     printf(
2698     $this->template_help,
2699     $conf["message_help"]
2700     );
2701    
2702     if (intval($res) === 0) {
2703     //
2704     echo _("Aucun retour de commission non lu.");
2705     return;
2706     }
2707    
2708    
2709     /**
2710     * Panel
2711     */
2712     $template_panel = '
2713     <div class="panel panel-box">
2714     <div class="list-justified-container">
2715     <ul class="list-justified text-center">
2716     %s
2717     </ul>
2718     </div>
2719     </div>';
2720     $panel = "";
2721     //
2722     $template_elem = '
2723     <li>
2724     <span class="size-h3 box-icon rounded %s">%s</span>
2725     <p class="text-muted">%s %s</p>
2726     </li>
2727     ';
2728     $panel_elem = sprintf(
2729     $template_elem,
2730     "bg-info",
2731     intval($res),
2732     _("Non lu"),
2733     ""
2734     );
2735     $panel .= sprintf(
2736     $template_panel,
2737     $panel_elem
2738     );
2739     echo $panel;
2740    
2741     /**
2742     * Widget footer
2743     */
2744     if ($filtre === "aucun") {
2745     $obj_href_more_link = "commission_tous_retours";
2746     } elseif ($filtre === "division") {
2747     $obj_href_more_link = "commission_retours_ma_division";
2748     } else {
2749     $obj_href_more_link = "commission_mes_retours";
2750     }
2751    
2752     //
2753     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link . "_tab"), "OR")) {
2754     return;
2755     }
2756     // Affichage du footer
2757     printf(
2758     $this->template_footer,
2759     // href
2760     sprintf(
2761 softime 7996 OM_ROUTE_TAB.'&obj=%s',
2762 softime 7366 $obj_href_more_link
2763     ),
2764     // titre
2765     _("Voir +")
2766     );
2767     }
2768    
2769     /**
2770     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2771     * consultation'.
2772     *
2773     * @return array
2774     */
2775     function get_config_commission_retours($arguments) {
2776     // Initialisation du tableau des paramètres avec ses valeurs par défaut
2777     $arguments_default = array(
2778     "filtre" => "instructeur",
2779     );
2780     // Vérification des arguments
2781     foreach ($arguments_default as $key => $value) {
2782     //
2783     if (isset($arguments[$key])) {
2784     //
2785     $elem = trim($arguments[$key]);
2786     //
2787     if ($key === "filtre"
2788     && in_array($elem, array("instructeur", "division", "aucun"))) {
2789     // La valeur doit être dans cette liste
2790     $arguments[$key] = $elem;
2791     continue;
2792     }
2793     }
2794     //
2795     $arguments[$key] = $value;
2796     }
2797     //
2798     $filtre = $arguments["filtre"];
2799    
2800     /**
2801     * Construction de la requête
2802     */
2803     // FROM
2804     $query_ct_from ="
2805     " . DB_PREFIXE . "dossier_commission
2806     LEFT JOIN " . DB_PREFIXE . "dossier
2807     ON dossier_commission.dossier=dossier.dossier
2808     LEFT JOIN " . DB_PREFIXE . "commission
2809     ON dossier_commission.commission=commission.commission
2810     %s
2811     %s
2812     %s";
2813    
2814     $query_ct_where_instructeur_filter = "";
2815     $query_ct_where_division_filter = "";
2816     $query_ct_where_collectivite_filter = "";
2817    
2818     // Filtre sur les dossiers qui concernent l'utilisateur
2819     if ($filtre === "instructeur") {
2820     //
2821     $query_ct_where_instructeur_filter = " JOIN " . DB_PREFIXE . "instructeur
2822     ON dossier.instructeur=instructeur.instructeur
2823     JOIN " . DB_PREFIXE . "om_utilisateur
2824     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2825     AND om_utilisateur.login='" . $_SESSION['login'] . "'
2826     ";
2827     } else {
2828     $query_ct_where_instructeur_filter = " LEFT JOIN " . DB_PREFIXE . "instructeur
2829     ON dossier.instructeur=instructeur.instructeur
2830     LEFT JOIN " . DB_PREFIXE . "om_utilisateur
2831     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
2832     }
2833     // Filtre sur les dossier de la division
2834     if ($filtre === "division") {
2835     //
2836     $query_ct_where_division_filter = " JOIN " . DB_PREFIXE . "division
2837     ON dossier.division=division.division
2838     AND division.division = " . $_SESSION['division'] . "
2839     ";
2840     } else {
2841     $query_ct_where_division_filter = " LEFT JOIN " . DB_PREFIXE . "division
2842     ON dossier.division=division.division";
2843     }
2844     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2845     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2846     // collectivité
2847     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2848     $query_ct_where_collectivite_filter = " JOIN " . DB_PREFIXE . "om_collectivite
2849     ON dossier.om_collectivite=om_collectivite.om_collectivite
2850     AND om_collectivite.om_collectivite=" . $_SESSION['collectivite'] . "
2851     ";
2852     } else {
2853     $query_ct_where_collectivite_filter = " LEFT JOIN " . DB_PREFIXE . "om_collectivite
2854     ON dossier.om_collectivite=om_collectivite.om_collectivite
2855     ";
2856     }
2857    
2858     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
2859    
2860     // WHERE - COMMON
2861     $query_ct_where_common = "
2862     dossier_commission.lu IS FALSE
2863     ";
2864    
2865     /**
2866     * Message d'aide
2867     */
2868     //
2869     $message_filtre = "";
2870     //
2871     switch ($filtre) {
2872     case "instructeur":
2873     $message_filtre = " " . _("dont je suis l'instructeur");
2874     break;
2875     case "division":
2876     $message_filtre = " " . _("situés dans ma division");
2877     break;
2878     case "aucun":
2879     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2880     $message_filtre = " " . _("situés dans ma collectivité");
2881     } else {
2882     $message_filtre = " " . _("situés dans toutes les collectivités");
2883     }
2884     break;
2885     }
2886     //
2887     $message_help = sprintf(
2888     _("Les retours de commission marqués comme 'non lu' qui concernent des " .
2889     "dossiers d'instruction%s."),
2890     $message_filtre
2891     );
2892    
2893     return array(
2894     "arguments" => $arguments,
2895     "message_help" => $message_help,
2896     "query_ct_from" => $query_ct_from,
2897     "query_ct_where_common" => $query_ct_where_common,
2898     );
2899    
2900     }
2901    
2902    
2903     /**
2904 softime 4291 * WIDGET DASHBOARD - Dossiers en incomplet ou majoration sans retour RAR
2905     *
2906     * @return void
2907     */
2908     function view_widget_dossiers_evenement_incomplet_majoration($content = null) {
2909    
2910     /**
2911     * Ce widget est configurable via l'interface Web. Lors de la création
2912     * du widget dans le paramétrage il est possible de spécifier la ou les
2913     * options suivantes :
2914     *
2915     * - filtre :
2916     * = instructeur
2917     * = division
2918     * = aucun
2919     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2920     */
2921     // Liste des paramètres
2922     $params = array("filtre", );
2923     // Formatage des arguments reçus en paramètres
2924     $arguments = $this->get_arguments($content, $params);
2925     // Récupération de la configuration du widget
2926     $conf = $this->get_config_dossiers_evenement_incomplet_majoration($arguments);
2927     //
2928     $filtre = $conf["arguments"]["filtre"];
2929    
2930     /**
2931     * Composition de la requête
2932     */
2933     //
2934     $query = sprintf("
2935     SELECT
2936     %s
2937     FROM
2938     %s
2939     WHERE
2940     %s
2941 softime 6565 %s
2942 softime 4291 ORDER BY
2943     %s
2944     LIMIT 10",
2945     $conf["query_ct_select"],
2946     $conf["query_ct_from"],
2947     $conf["query_ct_where_common"],
2948 softime 6565 $conf["query_ct_where_groupe"],
2949 softime 4291 $conf["query_ct_orderby"]
2950     );
2951    
2952     // Exécution de la requête
2953     $res = $this->f->db->query($query);
2954     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
2955     $this->f->isDatabaseError($res);
2956    
2957     // Affichage du message d'informations
2958     printf(
2959     $this->template_help,
2960     $conf["message_help"]
2961     );
2962    
2963     /**
2964     * Si il n'y a aucun dossier à afficher, alors on affiche un message
2965     * clair à l'utilisateur et on sort de la vue.
2966     */
2967     // Si il n'y a aucun dossier à afficher
2968     if ($res->numrows() == 0) {
2969     // Affichage du message d'informations
2970     echo _("Vous n'avez pas de dossiers avec un evenement incomplet ou majoration sans RAR pour le moment.");
2971     // Exit
2972     return;
2973     }
2974    
2975     /**
2976     * Template nécessaires à l'affichage du widget
2977     */
2978     // Lien vers le dossier d'instructions
2979    
2980     // Bouton consulter
2981     $template_btn_consulter = '
2982     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
2983     ._('Consulter')
2984     .'</span>
2985     ';
2986    
2987     $template_table = '
2988     <table class="tab-tab">
2989     <thead>
2990     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
2991     <th class="title col-0 firstcol">
2992     <span class="name">
2993     %s
2994     </span>
2995     </th>
2996     <th class="title col-1">
2997     <span class="name">
2998     %s
2999     </span>
3000     </th>
3001     <th class="title col-2 lastcol">
3002     <span class="name">
3003     %s
3004     </span>
3005     </th>
3006     </tr>
3007     </thead>
3008     <tbody>
3009     %s
3010     </tbody>
3011     </table>
3012     ';
3013    
3014     // Données dans le tableau
3015     //
3016     $template_line = '
3017     <tr class="tab-data odd">
3018     <td class="col-1 firstcol">
3019     %s
3020     </td>
3021     <td class="col-1">
3022     %s
3023     </td>
3024     <td class="col-2 lastcol">
3025     %s
3026     </td>
3027     </tr>
3028     ';
3029     //
3030 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&amp;action=3&amp;idx=%s';
3031 softime 4291 //
3032     $template_link = '
3033     <a class="lienTable" href="%s">
3034     %s
3035     </a>
3036     ';
3037    
3038     /**
3039     * Si il y a des dossiers à afficher, alors on affiche le widget.
3040     */
3041     // On construit le contenu du tableau
3042     $ct_tbody = '';
3043     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3044     // On construit l'attribut href du lien
3045     $ct_href = sprintf(
3046     $template_href,
3047     // idx
3048     $row["dossier"]
3049     );
3050     // On construit la ligne
3051     $ct_tbody .= sprintf(
3052     $template_line,
3053     // Colonne 1 - Bouton consulter
3054     sprintf(
3055     $template_link,
3056     $ct_href,
3057     $template_btn_consulter
3058     ),
3059     // Colonne 2 - Numéro de dossier
3060     sprintf(
3061     $template_link,
3062     $ct_href,
3063     $row["dossier_libelle"]
3064     ),
3065     // Colonne 3 - Date de dépôt
3066     sprintf(
3067     $template_link,
3068     $ct_href,
3069     $this->f->formatDate($row["date_depot"])
3070     )
3071     );
3072     }
3073     // Affichage du tableau listant les dossiers
3074     printf(
3075     $template_table,
3076     // Colonne 1 - Bouton consulter
3077     '',
3078     // Colonne 2 - Numéro de dossier
3079     _('dossier'),
3080     // Colonne 3 - Date de dépôt du dossier
3081     _('date_depot'),
3082     // Contenu du tableau
3083     $ct_tbody
3084     );
3085    
3086     // Affichage du footer
3087     printf(
3088     $this->template_footer,
3089     // href (avec les paramètres du widget)
3090     sprintf(
3091 softime 7996 OM_ROUTE_TAB."&obj=dossiers_evenement_incomplet_majoration&filtre=%s",
3092 softime 4291 $filtre
3093     ),
3094     // titre
3095     _("Voir tous les dossiers evenement incomplet ou majoration sans RAR")
3096     );
3097     }
3098    
3099    
3100     /**
3101     * Cette méthode permet de récupérer la configuration du widget 'Retours de
3102     * consultation'.
3103     *
3104     * @return array
3105     */
3106     function get_config_dossiers_evenement_incomplet_majoration($arguments) {
3107     // Initialisation du tableau des paramètres avec ses valeur par défaut
3108     $arguments_default = array(
3109     "filtre" => "instructeur",
3110     );
3111     // Vérification des arguments
3112     foreach ($arguments_default as $key => $value) {
3113     //
3114     if (isset($arguments[$key])) {
3115     //
3116     $elem = trim($arguments[$key]);
3117     //
3118     if ($key === "filtre"
3119     && in_array($elem, array("instructeur", "division", "aucun"))) {
3120     // La valeur doit être dans cette liste
3121     $arguments[$key] = $elem;
3122     continue;
3123     }
3124     }
3125     //
3126     $arguments[$key] = $value;
3127     }
3128     //
3129     $filtre = $arguments["filtre"];
3130    
3131     /**
3132     * Construction de la requête
3133     */
3134     // SELECT
3135     $query_ct_select = "
3136     dossier.dossier,
3137     dossier.dossier_libelle,
3138     dossier.date_depot
3139     ";
3140     // SELECT - CHAMPAFFICHE
3141     $query_ct_select_champaffiche = array(
3142     'dossier.dossier as "'._("dossier").'"',
3143     'dossier.dossier_libelle as "'._("dossier").'"',
3144     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"'
3145     );
3146     // FROM
3147     $query_ct_from = "
3148     ".DB_PREFIXE."dossier
3149     LEFT JOIN
3150     ".DB_PREFIXE."instruction
3151     ON
3152     dossier.dossier = instruction.dossier
3153     LEFT JOIN
3154     ".DB_PREFIXE."evenement
3155     ON
3156     instruction.evenement = evenement.evenement
3157 nhaye 4791 %s
3158     %s
3159     %s
3160 softime 4291 ";
3161 nhaye 4791
3162     $query_ct_where_instructeur_filter = "";
3163     $query_ct_where_division_filter = "";
3164     $query_ct_where_collectivite_filter = "";
3165     // Filtre sur les dossiers qui concernent l'utilisateur
3166     if ($filtre == "instructeur") {
3167     //
3168     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3169     ON dossier.instructeur=instructeur.instructeur
3170     JOIN ".DB_PREFIXE."om_utilisateur
3171     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3172     AND om_utilisateur.login='".$_SESSION['login']."'
3173     ";
3174 nhaye 4793 } else {
3175 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
3176 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
3177     LEFT JOIN ".DB_PREFIXE."om_utilisateur
3178     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
3179 nhaye 4791 }
3180     // Filtre sur les dossier de la division
3181     if ($filtre == "division") {
3182     //
3183     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3184     ON dossier.division=division.division
3185     AND division.division = ".$_SESSION['division']."
3186     ";
3187 nhaye 4793 } else {
3188 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
3189 nhaye 4793 ON dossier.division=division.division";
3190 nhaye 4791 }
3191     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3192     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3193     // collectivité
3194     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3195     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3196     ON dossier.om_collectivite=om_collectivite.om_collectivite
3197     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3198     ";
3199 nmeucci 4799 } else {
3200     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3201     ON dossier.om_collectivite=om_collectivite.om_collectivite
3202     ";
3203 nhaye 4791 }
3204    
3205     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3206    
3207 softime 4291 // WHERE - COMMON
3208     $query_ct_where_common = "
3209     (
3210     LOWER(evenement.type) = 'incompletude' OR
3211     LOWER(evenement.type) = 'majoration_delai'
3212     ) AND
3213     (
3214     instruction.date_envoi_rar > CURRENT_TIMESTAMP - interval '1 month' AND
3215     instruction.date_envoi_rar <= CURRENT_TIMESTAMP
3216     ) AND
3217     instruction.date_retour_rar IS NULL AND
3218     evenement.retour = 'f'
3219     ";
3220    
3221     // ORDER BY
3222     $query_ct_orderby = "
3223     dossier.date_depot desc
3224     ";
3225    
3226 softime 6565 $query_ct_where_groupe = "";
3227     // Gestion des groupes et confidentialité
3228     include('../sql/pgsql/filter_group_widgets.inc.php');
3229    
3230 softime 4291 /**
3231     * Message d'aide
3232     */
3233     //
3234     $message_filtre = "";
3235     //
3236     switch ($filtre) {
3237     case "instructeur":
3238     $message_filtre = " "._("dont je suis l'instructeur");
3239     break;
3240     case "division":
3241     $message_filtre = " "._("situés dans ma division");
3242     break;
3243     case "aucun":
3244     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3245     $message_filtre = " "._("situés dans ma collectivité");
3246     } else {
3247     $message_filtre = " "._("situés dans toutes les collectivités");
3248     }
3249     break;
3250     }
3251     //
3252     $message_help = sprintf(
3253     _("Les dossiers d'instruction%s qui ont un evenement incomplet ou majoration".
3254     " avec une date d'envoi RAR, mais pas de date de retour RAR."),
3255     $message_filtre
3256     );
3257    
3258     /**
3259     * Return
3260     */
3261     //
3262     return array(
3263     "arguments" => $arguments,
3264     "message_help" => $message_help,
3265     "query_ct_select" => $query_ct_select,
3266     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3267     "query_ct_from" => $query_ct_from,
3268     "query_ct_where_common" => $query_ct_where_common,
3269 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
3270 softime 4291 "query_ct_orderby" => $query_ct_orderby,
3271     );
3272     }
3273    
3274 softime 6565
3275     /**
3276     * WIDGET DASHBOARD - widget_infos_profil.
3277     */
3278     function view_widget_infos_profil($content = null) {
3279    
3280     /**
3281     * Template nécessaires à l'affichage du widget
3282     */
3283     //
3284     $template_table = '
3285     </br>
3286     <h4>Liste des accès</h4>
3287     <table class="tab-tab">
3288     <thead>
3289     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3290     <th class="title col-0 firstcol">
3291     <span class="name">
3292     %s
3293     </span>
3294     </th>
3295     <th class="title col-1">
3296     <span class="name">
3297     %s
3298     </span>
3299     </th>
3300     <th class="title col-2 lastcol">
3301     <span class="name">
3302     %s
3303     </span>
3304     </th>
3305     </tr>
3306     </thead>
3307     <tbody>
3308     %s
3309     </tbody>
3310     </table>
3311     ';
3312     //
3313     $template_line = '
3314     <tr class="tab-data odd">
3315     <td class="col-1 firstcol">
3316     %s
3317     </td>
3318     <td class="col-1">
3319     %s
3320     </td>
3321     <td class="col-2 lastcol">
3322     %s
3323     </td>
3324     </tr>
3325     ';
3326    
3327    
3328     // Récupère les informations sur l'utilisateur
3329     $this->f->getUserInfos();
3330    
3331     // Si l'utilisateur est loggé $_SESSION existe
3332     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
3333    
3334     // On compose le bloc html d'affichage des informations de l'utilisateur
3335     $bloc_infos_profil = "
3336     %s
3337     <div class=\"profil-infos\">
3338     <h4>Utilisateur</h4>
3339     <div class=\"profil-infos-profil\">
3340     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3341     </div>
3342     <div class=\"profil-infos-nom\">
3343     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3344     </div>
3345     ";
3346    
3347     // Si l'utilisateur connecté est un instructeur
3348     if ($this->f->isUserInstructeur() === true) {
3349    
3350     // On compose le bloc html d'affichage des informations de l'utilisateur
3351     $bloc_infos_profil .= "
3352     <div class=\"profil-infos-division\">
3353     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3354     </div>
3355     ";
3356    
3357     // Requête de récupération de la qualité de l'instructeur
3358     $query = sprintf(
3359     "SELECT
3360     instructeur_qualite.libelle
3361     FROM
3362     " . DB_PREFIXE. "instructeur
3363     INNER JOIN " . DB_PREFIXE . "instructeur_qualite
3364     ON instructeur.instructeur_qualite=instructeur_qualite.instructeur_qualite
3365     WHERE
3366     instructeur.om_utilisateur = " . intval($this->f->om_utilisateur["om_utilisateur"])
3367     );
3368     $instr_qualite_lib = $this->f->db->getone($query);
3369     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
3370     $this->f->isDatabaseError($instr_qualite_lib);
3371     // S'il y a un résultat
3372     if ($instr_qualite_lib !== null) {
3373     $bloc_infos_profil .= "
3374     <div class=\"profil-infos-instructeur_qualite\">
3375     <span class=\"libelle\">" . _("Qualité") . "</span> : <span class=\"value\">" . $instr_qualite_lib . "</span>
3376     </div>
3377     ";
3378     }
3379     } else {
3380     // Pour éviter une NOTICE
3381     $this->f->om_utilisateur["code"] = '';
3382     }
3383     //
3384     $bloc_infos_profil .= "</div>";
3385    
3386     // Ajout d'un tableau listant les groupes de l'utilisateur ainsi que ses
3387     // accès aux groupes
3388     $msg_erreur_groupe = '';
3389     $bloc_tableau_droits = '';
3390     // Si le profil et l'utilisateur n'ont pas de groupe défini
3391     if (isset($_SESSION['groupe']) === false) {
3392     $msg_erreur_groupe = '
3393     <div class="message ui-widget ui-corner-all ui-state-highlight ui-state-error borderless">
3394     <p>
3395     <span class="ui-icon ui-icon-info"></span>
3396     <span class="text">Problème de paramétrage : vous n\'avez pas de groupe associé.</span>
3397     </p>
3398     </div>
3399     ';
3400     } else {
3401     $ct_tbody = '';
3402     // On construit le contenu du tableau
3403     foreach ($_SESSION['groupe'] as $key => $value) {
3404     if ($value['confidentiel'] === true) {
3405     $value['confidentiel'] = _('Oui');
3406     }
3407     else {
3408     $value['confidentiel'] = _('Non');
3409     }
3410     if ($value['enregistrement_demande'] === true) {
3411     $value['enregistrement_demande'] = _('Oui');
3412     }
3413     else {
3414     $value['enregistrement_demande'] = _('Non');
3415     }
3416     // On construit la ligne
3417     $ct_tbody .= sprintf(
3418     $template_line,
3419     // Colonne 1 - Libellé du groupe
3420     $value["libelle"],
3421     // Colonne 2 - A accès aux dossiers confidentiels
3422     $value["confidentiel"],
3423     // Colonne 3 - Peut créer une demande
3424     $value["enregistrement_demande"]
3425     );
3426     }
3427     // Affichage du tableau listant les dossiers
3428     $bloc_infos_profil .= sprintf(
3429     $template_table,
3430     // Colonne 1 - Libellé du groupe
3431     _('groupe'),
3432     // Colonne 2 - A accès aux dossiers confidentiels
3433     _('dossiers confidentiels'),
3434     // Colonne 3 - Peut créer une demande
3435     _('enregistrement demande'),
3436     // Contenu du tableau
3437     $ct_tbody
3438     );
3439     }
3440     // Affichage du bloc html avec les variables associées
3441     printf(
3442     $bloc_infos_profil,
3443     $msg_erreur_groupe,
3444     _('Profil'), $this->f->om_utilisateur["libelle_profil"],
3445     _('Nom'), $this->f->om_utilisateur["nom"],
3446     _('Division'), $this->f->om_utilisateur["code"]
3447     );
3448     }
3449     }
3450    
3451    
3452     /**
3453     * Cette méthode permet de récupérer la configuration du widget
3454     * 'Mes contradictoires' ou 'Les contradictoires'.
3455     *
3456     * @return array
3457     */
3458     function get_config_dossier_contentieux_contradictoire($arguments) {
3459     // Initialisation du tableau des paramètres avec ses valeur par défaut
3460     $arguments_default = array(
3461     "filtre" => "instructeur"
3462     );
3463     // Vérification des arguments
3464     foreach ($arguments_default as $key => $value) {
3465     //
3466     if (isset($arguments[$key])) {
3467     //
3468     $elem = trim($arguments[$key]);
3469     //
3470     if ($key === "filtre"
3471     && in_array($elem, array("instructeur", "division", "aucun"))) {
3472     // La valeur doit être dans cette liste
3473     $arguments[$key] = $elem;
3474     continue;
3475     }
3476     }
3477     //
3478     $arguments[$key] = $value;
3479     }
3480     $filtre = $arguments["filtre"];
3481    
3482     // SELECT - CHAMPAFFICHE
3483     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
3484     dossier.terrain_adresse_voie,\' \',
3485     dossier.terrain_adresse_lieu_dit,\' \',
3486     dossier.terrain_adresse_code_postal,\' \',
3487     dossier.terrain_adresse_localite,\' \',
3488     dossier.terrain_adresse_bp,\' \',
3489     dossier.terrain_adresse_cedex
3490 softime 7067 )) as "'._("localisation").'"';
3491 softime 6565 //
3492     $case_contrevenant = "
3493     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
3494     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
3495     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
3496     END
3497     ";
3498     //
3499     $query_ct_select_champaffiche = array(
3500     'dossier.dossier as "'._("dossier").'"',
3501     'dossier.dossier_libelle as "'._("dossier").'"',
3502     $trim_concat_terrain,
3503     $case_contrevenant.' as "'._("contrevenant").'"',
3504     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
3505     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
3506     'etat.libelle as "'._("etat").'"',
3507     'to_char(dossier.date_contradictoire, \'DD/MM/YYYY\') as "'._("date_contradictoire").'"',
3508     'to_char(dossier.date_retour_contradictoire, \'DD/MM/YYYY\') as "'._("date_retour_contradictoire").'"',
3509     );
3510    
3511     /**
3512     * Construction de la requête
3513     */
3514     // SELECT
3515     $query_ct_select = "
3516     dossier.dossier,
3517     dossier.dossier_libelle,
3518     dossier.date_contradictoire,
3519     dossier.date_retour_contradictoire
3520     ";
3521    
3522     // FROM
3523     $query_ct_from = "
3524     ".DB_PREFIXE."dossier
3525     LEFT JOIN ".DB_PREFIXE."etat
3526     ON dossier.etat = etat.etat
3527     LEFT JOIN (
3528     SELECT *
3529     FROM ".DB_PREFIXE."lien_dossier_demandeur
3530     INNER JOIN ".DB_PREFIXE."demandeur
3531     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
3532     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
3533     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
3534     ) as demandeur_contrevenant
3535     ON demandeur_contrevenant.dossier = dossier.dossier
3536     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3537     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3538     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3539     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3540     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3541     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3542     LEFT JOIN ".DB_PREFIXE."avis_decision
3543     ON avis_decision.avis_decision=dossier.avis_decision
3544     %s
3545     %s
3546     %s
3547     ";
3548    
3549     $query_ct_where_instructeur_filter = "";
3550     $query_ct_where_division_filter = "";
3551     $query_ct_where_collectivite_filter = "";
3552     // Filtre sur les dossiers qui concernent l'utilisateur
3553     if ($filtre == "instructeur") {
3554     //
3555     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3556     ON dossier.instructeur=instructeur.instructeur
3557     OR dossier.instructeur_2=instructeur.instructeur
3558     JOIN ".DB_PREFIXE."om_utilisateur
3559     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3560     AND om_utilisateur.login='".$_SESSION['login']."'
3561     ";
3562     }
3563    
3564     // Filtre sur les dossier de la division
3565     if ($filtre == "division") {
3566     //
3567     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3568     ON dossier.division=division.division
3569     AND division.division = ".$_SESSION['division']."
3570     ";
3571     }
3572    
3573     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3574     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3575     // collectivité
3576     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3577     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3578     ON dossier.om_collectivite=om_collectivite.om_collectivite
3579     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3580     ";
3581     } else {
3582     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3583     ON dossier.om_collectivite=om_collectivite.om_collectivite
3584     ";
3585     }
3586    
3587     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3588    
3589     // WHERE - COMMON
3590     $query_ct_where_common = "
3591     LOWER(dossier_autorisation_type.code) = LOWER('IN')
3592     AND NOT EXISTS
3593     (SELECT NULL
3594     FROM ".DB_PREFIXE."instruction
3595     INNER JOIN ".DB_PREFIXE."evenement
3596     ON instruction.evenement = evenement.evenement
3597     WHERE instruction.dossier = dossier.dossier
3598     AND evenement.type = 'annul_contradictoire')
3599     AND (dossier.date_contradictoire >= CURRENT_DATE + interval '3 weeks'
3600     OR (dossier.date_contradictoire IS NOT NULL
3601     AND dossier.date_retour_contradictoire IS NULL))
3602     AND date_ait IS NULL
3603     ";
3604    
3605     // ORDER BY
3606     $query_ct_orderby = "
3607     dossier.date_depot ASC
3608     ";
3609    
3610     $query_ct_where_groupe = "";
3611     // Gestion des groupes et confidentialité
3612     include('../sql/pgsql/filter_group_widgets.inc.php');
3613    
3614     /**
3615     * Message d'aide
3616     */
3617     //
3618     $message_filtre = "";
3619     //
3620     switch ($filtre) {
3621     case "instructeur":
3622     $message_filtre = " "._("dont je suis l'instructeur");
3623     break;
3624     case "division":
3625     $message_filtre = " "._("situés dans ma division");
3626     break;
3627     case "aucun":
3628     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3629     $message_filtre = " "._("situés dans ma collectivité");
3630     } else {
3631     $message_filtre = " "._("situés dans toutes les collectivités");
3632     }
3633     break;
3634     }
3635     //
3636     $message_help = sprintf(
3637     _("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éé."),
3638     $message_filtre
3639     );
3640    
3641     /**
3642     * Return
3643     */
3644     //
3645     return array(
3646     "arguments" => $arguments,
3647     "message_help" => $message_help,
3648     "query_ct_select" => $query_ct_select,
3649     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3650     "query_ct_from" => $query_ct_from,
3651     "query_ct_where" => $query_ct_where_common,
3652     "query_ct_where_groupe" => $query_ct_where_groupe,
3653     "query_ct_orderby" => $query_ct_orderby,
3654     );
3655     }
3656    
3657     /**
3658     * WIDGET DASHBOARD - Les ou Mes dossiers contradictoires
3659     * @return void
3660     */
3661     function view_widget_dossier_contentieux_contradictoire($content = null) {
3662     /**
3663     * Ce widget est configurable via l'interface Web. Lors de la création
3664     * du widget dans le paramétrage il est possible de spécifier la ou les
3665     * options suivantes :
3666     * - filtre :
3667     * = instructeur
3668     * = division
3669     * = aucun
3670     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
3671     */
3672     // Liste des paramètres
3673     $params = array("filtre");
3674     // Formatage des arguments reçus en paramètres
3675     $arguments = $this->get_arguments($content, $params);
3676     // Récupération de la configuration du widget
3677     $conf = $this->get_config_dossier_contentieux_contradictoire($arguments);
3678    
3679     $filtre = $conf["arguments"]["filtre"];
3680     //
3681    
3682    
3683     /**
3684     * Composition de la requête
3685     */
3686     //
3687     $query = sprintf("
3688     SELECT
3689     %s
3690     FROM
3691     %s
3692     WHERE
3693     %s
3694     %s
3695     ORDER BY
3696     %s
3697     LIMIT 5",
3698     $conf["query_ct_select"],
3699     $conf["query_ct_from"],
3700     $conf["query_ct_where"],
3701     $conf["query_ct_where_groupe"],
3702     $conf["query_ct_orderby"]
3703     );
3704    
3705     /**
3706     * Exécution de la requête
3707     */
3708     //
3709     $res = $this->f->db->query($query);
3710     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
3711     $this->f->isDatabaseError($res);
3712    
3713     // Affichage du message d'informations
3714     printf(
3715     $this->template_help,
3716     $conf["message_help"]
3717     );
3718     /**
3719     * Si il n'y a aucun dossier à afficher, alors on affiche un message
3720     * clair à l'utilisateur et on sort de la vue.
3721     */
3722     // Si il n'y a aucun dossier à afficher
3723     if ($res->numrows() == 0) {
3724     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éé.");
3725     return;
3726     }
3727    
3728     /**
3729     * Template nécessaires à l'affichage du widget
3730     */
3731     //
3732     $template_table = '
3733     <table class="tab-tab">
3734     <thead>
3735     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3736     <th class="title col-0 firstcol">
3737     <span class="name">
3738     %s
3739     </span>
3740     </th>
3741     <th class="title col-1">
3742     <span class="name">
3743     %s
3744     </span>
3745     </th>
3746     <th class="title col-2">
3747     <span class="name">
3748     %s
3749     </span>
3750     </th>
3751     <th class="title col-3 lastcol">
3752     <span class="name">
3753     %s
3754     </span>
3755     </th>
3756     </tr>
3757     </thead>
3758     <tbody>
3759     %s
3760     </tbody>
3761     </table>
3762     ';
3763     //
3764     $template_line = '
3765     <tr class="tab-data odd">
3766     <td class="col-0 firstcol">
3767     %s
3768     </td>
3769     <td class="col-1 ">
3770     %s
3771     </td>
3772     <td class="col-2">
3773     %s
3774     </td>
3775     <td class="col-3 lastcol">
3776     %s
3777     </td>
3778     </tr>
3779     ';
3780     //
3781 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
3782 softime 6565 //
3783     $template_link = '
3784     <a class="lienTable" href="%s">
3785     %s
3786     </a>
3787     ';
3788     // Bouton consulter
3789     $template_btn_consulter = '
3790     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
3791     ._('Consulter')
3792     .'</span>
3793     ';
3794     //
3795    
3796     /**
3797     * Si il y a des dossiers à afficher, alors on affiche le widget.
3798     */
3799     // On construit le contenu du tableau
3800     $ct_tbody = '';
3801     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3802     // On construit l'attribut href du lien
3803     $ct_href = sprintf(
3804     $template_href,
3805     // idx
3806     $row["dossier"]
3807     );
3808     // On construit la ligne
3809     $ct_tbody .= sprintf(
3810     $template_line,
3811     // Colonne 1 - Numéro de dossier
3812     sprintf(
3813     $template_link,
3814     $ct_href,
3815     $template_btn_consulter
3816     ),
3817     // Colonne 2 - Numéro de dossier
3818     sprintf(
3819     $template_link,
3820     $ct_href,
3821     $row["dossier_libelle"]
3822     ),
3823     // Colonne 3 - Date contradictoire
3824     sprintf(
3825     $template_link,
3826     $ct_href,
3827     $this->f->formatDate($row["date_contradictoire"])
3828     ),
3829     // Colonne 4 - Date retour contradictoire
3830     sprintf(
3831     $template_link,
3832     $ct_href,
3833     $this->f->formatDate($row["date_retour_contradictoire"])
3834     )
3835     );
3836     }
3837     // Affichage du tableau listant les dossiers
3838     printf(
3839     $template_table,
3840     // Colonne 1 - Consulter
3841     '',
3842     // Colonne 2 - Numéro de dossier
3843     _('dossier'),
3844     // Colonne 3 - Date contradictoire
3845     _('date_contradictoire'),
3846     // Colonne 4 - Date retour contradictoire
3847     _('date_retour_contradictoire'),
3848     // Le Contenu
3849     $ct_tbody
3850     );
3851     // Affichage du footer
3852     printf(
3853     $this->template_footer,
3854 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_contradictoire&filtre=" . $filtre,
3855 softime 6565 _("Voir +")
3856     );
3857     }
3858    
3859    
3860     /**
3861     * Cette méthode permet de récupérer la configuration du widget 'Mes AIT'
3862     * ou 'Les AIT'.
3863     *
3864     * @return array
3865     */
3866     function get_config_dossier_contentieux_ait($arguments) {
3867     // Initialisation du tableau des paramètres avec ses valeur par défaut
3868     $arguments_default = array(
3869     "filtre" => "instructeur"
3870     );
3871     // Vérification des arguments
3872     foreach ($arguments_default as $key => $value) {
3873     //
3874     if (isset($arguments[$key])) {
3875     //
3876     $elem = trim($arguments[$key]);
3877     //
3878     if ($key === "filtre"
3879     && in_array($elem, array("instructeur", "division", "aucun"))) {
3880     // La valeur doit être dans cette liste
3881     $arguments[$key] = $elem;
3882     continue;
3883     }
3884     }
3885     //
3886     $arguments[$key] = $value;
3887     }
3888     $filtre = $arguments["filtre"];
3889    
3890     // SELECT - CHAMPAFFICHE
3891     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
3892     dossier.terrain_adresse_voie,\' \',
3893     dossier.terrain_adresse_lieu_dit,\' \',
3894     dossier.terrain_adresse_code_postal,\' \',
3895     dossier.terrain_adresse_localite,\' \',
3896     dossier.terrain_adresse_bp,\' \',
3897     dossier.terrain_adresse_cedex
3898 softime 7067 )) as "'._("localisation").'"';
3899 softime 6565 //
3900     $case_contrevenant = "
3901     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
3902     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
3903     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
3904     END
3905     ";
3906     //
3907     $query_ct_select_champaffiche = array(
3908     'dossier.dossier as "'._("dossier").'"',
3909     'dossier.dossier_libelle as "'._("dossier").'"',
3910     $trim_concat_terrain,
3911     $case_contrevenant.' as "'._("contrevenant").'"',
3912     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
3913     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
3914     'etat.libelle as "'._("etat").'"',
3915     'to_char(dossier.date_ait, \'DD/MM/YYYY\') as "'._("date_ait").'"',
3916     'to_char(instruction.date_retour_signature, \'DD/MM/YYYY\') as "'._("date_retour_signature").'"',
3917     );
3918    
3919     /**
3920     * Construction de la requête
3921     */
3922     // SELECT
3923     $query_ct_select = "
3924     dossier.dossier,
3925     dossier.dossier_libelle,
3926     dossier.date_ait,
3927     instruction.date_retour_signature
3928     ";
3929    
3930     // FROM
3931     $query_ct_from = "
3932     ".DB_PREFIXE."dossier
3933     LEFT JOIN ".DB_PREFIXE."etat
3934     ON dossier.etat = etat.etat
3935     LEFT JOIN (
3936     SELECT *
3937     FROM ".DB_PREFIXE."lien_dossier_demandeur
3938     INNER JOIN ".DB_PREFIXE."demandeur
3939     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
3940     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
3941     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
3942     ) as demandeur_contrevenant
3943     ON demandeur_contrevenant.dossier = dossier.dossier
3944     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3945     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3946     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3947     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3948     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3949     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3950     LEFT JOIN ".DB_PREFIXE."avis_decision
3951     ON avis_decision.avis_decision=dossier.avis_decision
3952     INNER JOIN ".DB_PREFIXE."instruction
3953     ON dossier.dossier = instruction.dossier
3954     AND date_retour_signature IS NOT NULL
3955     INNER JOIN ".DB_PREFIXE."evenement
3956     ON instruction.evenement = evenement.evenement
3957     AND LOWER(evenement.type) LIKE 'ait'
3958     %s
3959     %s
3960     %s
3961     ";
3962    
3963     $query_ct_where_instructeur_filter = "";
3964     $query_ct_where_division_filter = "";
3965     $query_ct_where_collectivite_filter = "";
3966     // Filtre sur les dossiers qui concernent l'utilisateur
3967     if ($filtre == "instructeur") {
3968     //
3969     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3970     ON dossier.instructeur=instructeur.instructeur
3971     OR dossier.instructeur_2=instructeur.instructeur
3972     JOIN ".DB_PREFIXE."om_utilisateur
3973     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3974     AND om_utilisateur.login='".$_SESSION['login']."'
3975     ";
3976     }
3977    
3978     // Filtre sur les dossier de la division
3979     if ($filtre == "division") {
3980     //
3981     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3982     ON dossier.division=division.division
3983     AND division.division = ".$_SESSION['division']."
3984     ";
3985     }
3986    
3987     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3988     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3989     // collectivité
3990     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3991     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3992     ON dossier.om_collectivite=om_collectivite.om_collectivite
3993     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3994     ";
3995     } else {
3996     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3997     ON dossier.om_collectivite=om_collectivite.om_collectivite
3998     ";
3999     }
4000    
4001     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4002    
4003     // WHERE
4004     $query_ct_where_common = "
4005     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4006     ";
4007    
4008     // ORDER BY
4009     $query_ct_orderby = "
4010     dossier.date_depot DESC
4011     ";
4012    
4013     $query_ct_where_groupe = "";
4014     // Gestion des groupes et confidentialité
4015     include('../sql/pgsql/filter_group_widgets.inc.php');
4016    
4017     /**
4018     * Message d'aide
4019     */
4020     //
4021     $message_filtre = "";
4022     //
4023     switch ($filtre) {
4024     case "instructeur":
4025     $message_filtre = " "._("dont je suis l'instructeur");
4026     break;
4027     case "division":
4028     $message_filtre = " "._("situés dans ma division");
4029     break;
4030     case "aucun":
4031     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4032     $message_filtre = " "._("situés dans ma collectivité");
4033     } else {
4034     $message_filtre = " "._("situés dans toutes les collectivités");
4035     }
4036     break;
4037     }
4038     //
4039     $message_help = sprintf(
4040     _("Les infractions%s les plus récentes pour lesquelles il y a un AIT signé."),
4041     $message_filtre
4042     );
4043    
4044     /**
4045     * Return
4046     */
4047     //
4048     return array(
4049     "arguments" => $arguments,
4050     "message_help" => $message_help,
4051     "query_ct_select" => $query_ct_select,
4052     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4053     "query_ct_from" => $query_ct_from,
4054     "query_ct_where" => $query_ct_where_common,
4055     "query_ct_where_groupe" => $query_ct_where_groupe,
4056     "query_ct_orderby" => $query_ct_orderby
4057     );
4058     }
4059    
4060    
4061     /**
4062     * WIDGET DASHBOARD - Les ou Mes dossiers AIT
4063     * @return void
4064     */
4065     function view_widget_dossier_contentieux_ait($content = null) {
4066     /**
4067     * Ce widget est configurable via l'interface Web. Lors de la création
4068     * du widget dans le paramétrage il est possible de spécifier la ou les
4069     * options suivantes :
4070     * - filtre :
4071     * = instructeur
4072     * = division
4073     * = aucun
4074     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4075     */
4076     // Liste des paramètres
4077     $params = array("filtre");
4078     // Formatage des arguments reçus en paramètres
4079     $arguments = $this->get_arguments($content, $params);
4080     // Récupération de la configuration du widget
4081     $conf = $this->get_config_dossier_contentieux_ait($arguments);
4082     $filtre = $conf["arguments"]["filtre"];
4083    
4084    
4085     /**
4086     * Composition de la requête
4087     */
4088     //
4089     $query = sprintf("
4090     SELECT
4091     %s
4092     FROM
4093     %s
4094     WHERE
4095     %s
4096     %s
4097     ORDER BY
4098     %s
4099     LIMIT 5",
4100     $conf["query_ct_select"],
4101     $conf["query_ct_from"],
4102     $conf["query_ct_where"],
4103     $conf["query_ct_where_groupe"],
4104     $conf["query_ct_orderby"]
4105     );
4106    
4107     /**
4108     * Exécution de la requête
4109     */
4110     //
4111     $res = $this->f->db->query($query);
4112     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4113     $this->f->isDatabaseError($res);
4114    
4115     // Affichage du message d'informations
4116     printf(
4117     $this->template_help,
4118     $conf["message_help"]
4119     );
4120     /**
4121     * Si il n'y a aucun dossier à afficher, alors on affiche un message
4122     * clair à l'utilisateur et on sort de la vue.
4123     */
4124     // Si il n'y a aucun dossier à afficher
4125     if ($res->numrows() == 0) {
4126     echo _("Il n'y a pas d'infractions pour lesquelles il y a un AIT signé.");
4127     return;
4128     }
4129    
4130     /**
4131     * Template nécessaires à l'affichage du widget
4132     */
4133     //
4134     $template_table = '
4135     <table class="tab-tab">
4136     <thead>
4137     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4138     <th class="title col-0 firstcol">
4139     <span class="name">
4140     %s
4141     </span>
4142     </th>
4143     <th class="title col-1">
4144     <span class="name">
4145     %s
4146     </span>
4147     </th>
4148     <th class="title col-2">
4149     <span class="name">
4150     %s
4151     </span>
4152     </th>
4153     <th class="title col-3 lastcol">
4154     <span class="name">
4155     %s
4156     </span>
4157     </th>
4158     </tr>
4159     </thead>
4160     <tbody>
4161     %s
4162     </tbody>
4163     </table>
4164     ';
4165     //
4166     $template_line = '
4167     <tr class="tab-data odd">
4168     <td class="col-0 firstcol">
4169     %s
4170     </td>
4171     <td class="col-1 ">
4172     %s
4173     </td>
4174     <td class="col-2">
4175     %s
4176     </td>
4177     <td class="col-3 lastcol">
4178     %s
4179     </td>
4180     </tr>
4181     ';
4182     //
4183 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4184 softime 6565 //
4185     $template_link = '
4186     <a class="lienTable" href="%s">
4187     %s
4188     </a>
4189     ';
4190     // Bouton consulter
4191     $template_btn_consulter = '
4192     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4193     ._('Consulter')
4194     .'</span>
4195     ';
4196     //
4197    
4198     /**
4199     * Si il y a des dossiers à afficher, alors on affiche le widget.
4200     */
4201     // On construit le contenu du tableau
4202     $ct_tbody = '';
4203     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4204     // On construit l'attribut href du lien
4205     $ct_href = sprintf(
4206     $template_href,
4207     // idx
4208     $row["dossier"]
4209     );
4210     // On construit la ligne
4211     $ct_tbody .= sprintf(
4212     $template_line,
4213     // Colonne 1 - Numéro de dossier
4214     sprintf(
4215     $template_link,
4216     $ct_href,
4217     $template_btn_consulter
4218     ),
4219     // Colonne 2 - Numéro de dossier
4220     sprintf(
4221     $template_link,
4222     $ct_href,
4223     $row["dossier_libelle"]
4224     ),
4225     // Colonne 3 - Date AIT
4226     sprintf(
4227     $template_link,
4228     $ct_href,
4229     $this->f->formatDate($row["date_ait"])
4230     ),
4231     // Colonne 4 - Date retour signature
4232     sprintf(
4233     $template_link,
4234     $ct_href,
4235     $this->f->formatDate($row["date_retour_signature"])
4236     )
4237     );
4238     }
4239     // Affichage du tableau listant les dossiers
4240     printf(
4241     $template_table,
4242     // Colonne 1 - Consulter
4243     '',
4244     // Colonne 2 - Numéro de dossier
4245     _('dossier'),
4246     // Colonne 3 - Date AIT
4247     _('date_ait'),
4248     // Colonne 4 - Date retour signature
4249     _('date_retour_signature'),
4250     // Le Contenu
4251     $ct_tbody
4252     );
4253     // Affichage du footer
4254     printf(
4255     $this->template_footer,
4256 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_ait&filtre=" . $filtre,
4257 softime 6565 _("Voir +")
4258     );
4259     }
4260    
4261    
4262     /**
4263     * Cette méthode permet de récupérer la configuration du widget 'Les infractions
4264     * non affectées'.
4265     *
4266     * @return array
4267     */
4268     function get_config_dossier_contentieux_inaffectes($arguments) {
4269     // Initialisation du tableau des paramètres avec ses valeur par défaut
4270     $arguments_default = array(
4271     "filtre" => "division"
4272     );
4273     // Vérification des arguments
4274     foreach ($arguments_default as $key => $value) {
4275     //
4276     if (isset($arguments[$key])) {
4277     //
4278     $elem = trim($arguments[$key]);
4279     //
4280     if ($key === "filtre"
4281     && in_array($elem, array("division", "aucun"))) {
4282     // La valeur doit être dans cette liste
4283     $arguments[$key] = $elem;
4284     continue;
4285     }
4286     }
4287     //
4288     $arguments[$key] = $value;
4289     }
4290     $filtre = $arguments["filtre"];
4291    
4292     // SELECT - CHAMPAFFICHE
4293     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
4294     dossier.terrain_adresse_voie,\' \',
4295     dossier.terrain_adresse_lieu_dit,\' \',
4296     dossier.terrain_adresse_code_postal,\' \',
4297     dossier.terrain_adresse_localite,\' \',
4298     dossier.terrain_adresse_bp,\' \',
4299     dossier.terrain_adresse_cedex
4300 softime 7067 )) as "'._("localisation").'"';
4301 softime 6565 //
4302     $case_contrevenant = "
4303     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4304     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4305     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4306     END
4307     ";
4308     //
4309     $query_ct_select_champaffiche = array(
4310     'dossier.dossier as "'._("dossier").'"',
4311     'dossier.dossier_libelle as "'._("dossier").'"',
4312     $trim_concat_terrain,
4313     $case_contrevenant.' as "'._("contrevenant").'"',
4314     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4315     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4316     'etat.libelle as "'._("etat").'"',
4317     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4318     );
4319    
4320     /**
4321     * Construction de la requête
4322     */
4323     // SELECT
4324     $query_ct_select = "
4325     dossier.dossier,
4326     dossier.dossier_libelle,
4327     dossier.date_depot
4328     ";
4329    
4330     // FROM
4331     $query_ct_from = "
4332     ".DB_PREFIXE."dossier
4333     LEFT JOIN ".DB_PREFIXE."etat
4334     ON dossier.etat = etat.etat
4335     LEFT JOIN (
4336     SELECT *
4337     FROM ".DB_PREFIXE."lien_dossier_demandeur
4338     INNER JOIN ".DB_PREFIXE."demandeur
4339     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4340     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4341     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4342     ) as demandeur_contrevenant
4343     ON demandeur_contrevenant.dossier = dossier.dossier
4344     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4345     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4346     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4347     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4348     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4349     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4350     LEFT JOIN ".DB_PREFIXE."avis_decision
4351     ON avis_decision.avis_decision=dossier.avis_decision
4352     %s
4353     %s
4354     ";
4355    
4356     $query_ct_where_division_filter = "";
4357     $query_ct_where_collectivite_filter = "";
4358     // Filtre sur les dossier de la division
4359     if ($filtre == "division") {
4360     //
4361     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4362     ON dossier.division=division.division
4363     AND division.division = ".$_SESSION['division']."
4364     ";
4365     } else {
4366     $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
4367     ON dossier.division=division.division";
4368     }
4369    
4370     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4371     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4372     // collectivité
4373     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4374     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4375     ON dossier.om_collectivite=om_collectivite.om_collectivite
4376     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4377     ";
4378     } else {
4379     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4380     ON dossier.om_collectivite=om_collectivite.om_collectivite
4381     ";
4382     }
4383    
4384     $query_ct_from = sprintf($query_ct_from, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4385    
4386     // WHERE - COMMON
4387     $query_ct_where_common = "
4388     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4389     AND dossier.instructeur_2 IS NULL
4390     ";
4391    
4392     // ORDER BY
4393    
4394     $query_ct_orderby = "
4395     dossier.date_depot ASC
4396     ";
4397    
4398     $query_ct_where_groupe = "";
4399     // Gestion des groupes et confidentialité
4400     include('../sql/pgsql/filter_group_widgets.inc.php');
4401    
4402     /**
4403     * Message d'aide
4404     */
4405     //
4406     $message_filtre = "";
4407     //
4408     switch ($filtre) {
4409     case "division":
4410     $message_filtre = " "._("situés dans ma division");
4411     break;
4412     case "aucun":
4413     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4414     $message_filtre = " "._("situés dans ma collectivité");
4415     } else {
4416     $message_filtre = " "._("situés dans toutes les collectivités");
4417     }
4418     break;
4419     }
4420     //
4421     $message_help = sprintf(
4422     _("Les infractions%s les plus anciennes non-affectées à un technicien."),
4423     $message_filtre
4424     );
4425    
4426     /**
4427     * Return
4428     */
4429     //
4430     return array(
4431     "arguments" => $arguments,
4432     "message_help" => $message_help,
4433     "query_ct_select" => $query_ct_select,
4434     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4435     "query_ct_from" => $query_ct_from,
4436     "query_ct_where" => $query_ct_where_common,
4437     "query_ct_where_groupe" => $query_ct_where_groupe,
4438     "query_ct_orderby" => $query_ct_orderby
4439     );
4440     }
4441    
4442     /**
4443     * WIDGET DASHBOARD - Les infractions non affectées
4444     * @return void
4445     */
4446     function view_widget_dossier_contentieux_inaffectes($content = null) {
4447     /**
4448     * Ce widget est configurable via l'interface Web. Lors de la création
4449     * du widget dans le paramétrage il est possible de spécifier la ou les
4450     * options suivantes :
4451     * - filtre :
4452     * = instructeur
4453     * = division
4454     * = aucun
4455     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4456     */
4457     // Liste des paramètres
4458     $params = array("filtre");
4459     // Formatage des arguments reçus en paramètres
4460     $arguments = $this->get_arguments($content, $params);
4461     // Récupération de la configuration du widget
4462     $conf = $this->get_config_dossier_contentieux_inaffectes($arguments);
4463    
4464     $filtre = $conf["arguments"]["filtre"];
4465     //
4466    
4467    
4468     /**
4469     * Composition de la requête
4470     */
4471     //
4472     $query = sprintf("
4473     SELECT
4474     %s
4475     FROM
4476     %s
4477     WHERE
4478     %s
4479     %s
4480     ORDER BY
4481     %s
4482     LIMIT 5",
4483     $conf["query_ct_select"],
4484     $conf["query_ct_from"],
4485     $conf["query_ct_where"],
4486     $conf["query_ct_where_groupe"],
4487     $conf["query_ct_orderby"]
4488     );
4489    
4490     /**
4491     * Exécution de la requête
4492     */
4493     //
4494     $res = $this->f->db->query($query);
4495     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4496     $this->f->isDatabaseError($res);
4497    
4498     // Affichage du message d'informations
4499     printf(
4500     $this->template_help,
4501     $conf["message_help"]
4502     );
4503     /**
4504     * Si il n'y a aucun dossier à afficher, alors on affiche un message
4505     * clair à l'utilisateur et on sort de la vue.
4506     */
4507     // Si il n'y a aucun dossier à afficher
4508     if ($res->numrows() == 0) {
4509     echo _("Il n'y a pas d'infractions non-affectées à un technicien.");
4510     return;
4511     }
4512    
4513     /**
4514     * Template nécessaires à l'affichage du widget
4515     */
4516     //
4517     $template_table = '
4518     <table class="tab-tab">
4519     <thead>
4520     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4521     <th class="title col-0 firstcol">
4522     <span class="name">
4523     %s
4524     </span>
4525     </th>
4526     <th class="title col-1">
4527     <span class="name">
4528     %s
4529     </span>
4530     </th>
4531     <th class="title col-2 lastcol">
4532     <span class="name">
4533     %s
4534     </span>
4535     </th>
4536     </tr>
4537     </thead>
4538     <tbody>
4539     %s
4540     </tbody>
4541     </table>
4542     ';
4543     //
4544     $template_line = '
4545     <tr class="tab-data odd">
4546     <td class="col-0 firstcol">
4547     %s
4548     </td>
4549     <td class="col-1 ">
4550     %s
4551     </td>
4552     <td class="col-2 lastcol">
4553     %s
4554     </td>
4555     </tr>
4556     ';
4557     //
4558 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4559 softime 6565 //
4560     $template_link = '
4561     <a class="lienTable" href="%s">
4562     %s
4563     </a>
4564     ';
4565     // Bouton consulter
4566     $template_btn_consulter = '
4567     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4568     ._('Consulter')
4569     .'</span>
4570     ';
4571     //
4572    
4573     /**
4574     * Si il y a des dossiers à afficher, alors on affiche le widget.
4575     */
4576     // On construit le contenu du tableau
4577     $ct_tbody = '';
4578     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4579     // On construit l'attribut href du lien
4580     $ct_href = sprintf(
4581     $template_href,
4582     // idx
4583     $row["dossier"]
4584     );
4585     // On construit la ligne
4586     $ct_tbody .= sprintf(
4587     $template_line,
4588     // Colonne 1 - Numéro de dossier
4589     sprintf(
4590     $template_link,
4591     $ct_href,
4592     $template_btn_consulter
4593     ),
4594     // Colonne 2 - Numéro de dossier
4595     sprintf(
4596     $template_link,
4597     $ct_href,
4598     $row["dossier_libelle"]
4599     ),
4600     // Colonne 3 - Date de réception
4601     sprintf(
4602     $template_link,
4603     $ct_href,
4604     $this->f->formatDate($row["date_depot"])
4605     )
4606     );
4607     }
4608     // Affichage du tableau listant les dossiers
4609     printf(
4610     $template_table,
4611     // Colonne 1 - Consulter
4612     '',
4613     // Colonne 2 - Numéro de dossier
4614     _('dossier'),
4615     // Colonne 3 - Date de réception
4616     _('Date de réception'),
4617     // Le Contenu
4618     $ct_tbody
4619     );
4620     // Affichage du footer
4621     printf(
4622     $this->template_footer,
4623 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_inaffectes&filtre=" . $filtre,
4624 softime 6565 _("Voir +")
4625     );
4626     }
4627    
4628    
4629     /**
4630     * Cette méthode permet de récupérer la configuration du widget 'Alerte Visite'.
4631     *
4632     * @return array
4633     */
4634     function get_config_dossier_contentieux_alerte_visite($arguments) {
4635     // Initialisation du tableau des paramètres avec ses valeur par défaut
4636     $arguments_default = array(
4637     "filtre" => "instructeur"
4638     );
4639     // Vérification des arguments
4640     foreach ($arguments_default as $key => $value) {
4641     //
4642     if (isset($arguments[$key])) {
4643     //
4644     $elem = trim($arguments[$key]);
4645     //
4646     if ($key === "filtre"
4647     && in_array($elem, array("instructeur", "division", "aucun"))) {
4648     // La valeur doit être dans cette liste
4649     $arguments[$key] = $elem;
4650     continue;
4651     }
4652     }
4653     //
4654     $arguments[$key] = $value;
4655     }
4656     $filtre = $arguments["filtre"];
4657    
4658     // SELECT - CHAMPAFFICHE
4659     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
4660     dossier.terrain_adresse_voie,\' \',
4661     dossier.terrain_adresse_lieu_dit,\' \',
4662     dossier.terrain_adresse_code_postal,\' \',
4663     dossier.terrain_adresse_localite,\' \',
4664     dossier.terrain_adresse_bp,\' \',
4665     dossier.terrain_adresse_cedex
4666 softime 7067 )) as "'._("localisation").'"';
4667 softime 6565 //
4668     $case_contrevenant = "
4669     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4670     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4671     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4672     END
4673     ";
4674     //
4675     $query_ct_select_champaffiche = array(
4676     'dossier.dossier as "'._("dossier").'"',
4677     'dossier.dossier_libelle as "'._("dossier").'"',
4678     $trim_concat_terrain,
4679     $case_contrevenant.' as "'._("contrevenant").'"',
4680     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4681     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4682     'etat.libelle as "'._("etat").'"',
4683     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4684     );
4685    
4686     /**
4687     * Construction de la requête
4688     */
4689     // SELECT
4690     $query_ct_select = "
4691     dossier.dossier,
4692     dossier.dossier_libelle,
4693     dossier.date_depot
4694     ";
4695    
4696     // FROM
4697     $query_ct_from = "
4698     ".DB_PREFIXE."dossier
4699     LEFT JOIN ".DB_PREFIXE."etat
4700     ON dossier.etat = etat.etat
4701     LEFT JOIN (
4702     SELECT *
4703     FROM ".DB_PREFIXE."lien_dossier_demandeur
4704     INNER JOIN ".DB_PREFIXE."demandeur
4705     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4706     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4707     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4708     ) as demandeur_contrevenant
4709     ON demandeur_contrevenant.dossier = dossier.dossier
4710     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4711     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4712     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4713     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4714     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4715     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4716     LEFT JOIN ".DB_PREFIXE."avis_decision
4717     ON avis_decision.avis_decision=dossier.avis_decision
4718     %s
4719     %s
4720     %s
4721     ";
4722    
4723     $query_ct_where_instructeur_filter = "";
4724     $query_ct_where_division_filter = "";
4725     $query_ct_where_collectivite_filter = "";
4726     // Filtre sur les dossiers qui concernent l'utilisateur
4727     if ($filtre == "instructeur") {
4728     //
4729     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
4730     ON dossier.instructeur=instructeur.instructeur
4731     OR dossier.instructeur_2=instructeur.instructeur
4732     JOIN ".DB_PREFIXE."om_utilisateur
4733     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4734     AND om_utilisateur.login='".$_SESSION['login']."'
4735     ";
4736     }
4737    
4738     // Filtre sur les dossier de la division
4739     if ($filtre == "division") {
4740     //
4741     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4742     ON dossier.division=division.division
4743     AND division.division = ".$_SESSION['division']."
4744     ";
4745     }
4746    
4747     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4748     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4749     // collectivité
4750     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4751     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4752     ON dossier.om_collectivite=om_collectivite.om_collectivite
4753     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4754     ";
4755     } else {
4756     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4757     ON dossier.om_collectivite=om_collectivite.om_collectivite
4758     ";
4759     }
4760    
4761     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4762    
4763     // WHERE - COMMON
4764     $query_ct_where_common = "
4765     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4766     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '3 months'
4767     AND dossier.date_premiere_visite IS NULL
4768     ";
4769     // ORDER BY
4770    
4771     $query_ct_orderby = "
4772     dossier.date_depot ASC
4773     ";
4774    
4775     $query_ct_where_groupe = "";
4776     // Gestion des groupes et confidentialité
4777     include('../sql/pgsql/filter_group_widgets.inc.php');
4778    
4779     /**
4780     * Message d'aide
4781     */
4782     //
4783     $message_filtre = "";
4784     //
4785     switch ($filtre) {
4786     case "instructeur":
4787     $message_filtre = " "._("dont je suis l'instructeur");
4788     break;
4789     case "division":
4790     $message_filtre = " "._("situés dans ma division");
4791     break;
4792     case "aucun":
4793     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4794     $message_filtre = " "._("situés dans ma collectivité");
4795     } else {
4796     $message_filtre = " "._("situés dans toutes les collectivités");
4797     }
4798     break;
4799     }
4800    
4801     //
4802     $message_help = sprintf(
4803     _("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."),
4804     $message_filtre
4805     );
4806    
4807     /**
4808     * Return
4809     */
4810     //
4811     return array(
4812     "arguments" => $arguments,
4813     "message_help" => $message_help,
4814     "query_ct_select" => $query_ct_select,
4815     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4816     "query_ct_from" => $query_ct_from,
4817     "query_ct_where" => $query_ct_where_common,
4818     "query_ct_where_groupe" => $query_ct_where_groupe,
4819     "query_ct_orderby" => $query_ct_orderby
4820     );
4821     }
4822    
4823     /**
4824     * WIDGET DASHBOARD - Alerte Visite
4825     * @return void
4826     */
4827     function view_widget_dossier_contentieux_alerte_visite($content = null) {
4828     /**
4829     * Ce widget est configurable via l'interface Web. Lors de la création
4830     * du widget dans le paramétrage il est possible de spécifier la ou les
4831     * options suivantes :
4832     * - filtre :
4833     * = instructeur
4834     * = division
4835     * = aucun
4836     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4837     */
4838     // Liste des paramètres
4839     $params = array("filtre");
4840     // Formatage des arguments reçus en paramètres
4841     $arguments = $this->get_arguments($content, $params);
4842     // Récupération de la configuration du widget
4843     $conf = $this->get_config_dossier_contentieux_alerte_visite($arguments);
4844    
4845     //
4846     $filtre = $conf["arguments"]["filtre"];
4847     //
4848    
4849    
4850     /**
4851     * Composition de la requête
4852     */
4853     //
4854     $query = sprintf("
4855     SELECT
4856     %s
4857     FROM
4858     %s
4859     WHERE
4860     %s
4861     %s
4862     ORDER BY
4863     %s
4864     LIMIT 5",
4865     $conf["query_ct_select"],
4866     $conf["query_ct_from"],
4867     $conf["query_ct_where"],
4868     $conf["query_ct_where_groupe"],
4869     $conf["query_ct_orderby"]
4870     );
4871    
4872     /**
4873     * Exécution de la requête
4874     */
4875     //
4876     $res = $this->f->db->query($query);
4877     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4878     $this->f->isDatabaseError($res);
4879    
4880     // Affichage du message d'informations
4881     printf(
4882     $this->template_help,
4883     $conf["message_help"]
4884     );
4885     /**
4886     * Si il n'y a aucun dossier à afficher, alors on affiche un message
4887     * clair à l'utilisateur et on sort de la vue.
4888     */
4889     // Si il n'y a aucun dossier à afficher
4890     if ($res->numrows() == 0) {
4891     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.");
4892     return;
4893     }
4894    
4895     /**
4896     * Template nécessaires à l'affichage du widget
4897     */
4898     //
4899     $template_table = '
4900     <table class="tab-tab">
4901     <thead>
4902     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4903     <th class="title col-0 firstcol">
4904     <span class="name">
4905     %s
4906     </span>
4907     </th>
4908     <th class="title col-1">
4909     <span class="name">
4910     %s
4911     </span>
4912     </th>
4913     <th class="title col-2 lastcol">
4914     <span class="name">
4915     %s
4916     </span>
4917     </th>
4918     </tr>
4919     </thead>
4920     <tbody>
4921     %s
4922     </tbody>
4923     </table>
4924     ';
4925     //
4926     $template_line = '
4927     <tr class="tab-data odd">
4928     <td class="col-0 firstcol">
4929     %s
4930     </td>
4931     <td class="col-1 ">
4932     %s
4933     </td>
4934     <td class="col-2 lastcol">
4935     %s
4936     </td>
4937     </tr>
4938     ';
4939     //
4940 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4941 softime 6565 //
4942     $template_link = '
4943     <a class="lienTable" href="%s">
4944     %s
4945     </a>
4946     ';
4947     // Bouton consulter
4948     $template_btn_consulter = '
4949     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4950     ._('Consulter')
4951     .'</span>
4952     ';
4953     //
4954    
4955     /**
4956     * Si il y a des dossiers à afficher, alors on affiche le widget.
4957     */
4958     // On construit le contenu du tableau
4959     $ct_tbody = '';
4960     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4961     // On construit l'attribut href du lien
4962     $ct_href = sprintf(
4963     $template_href,
4964     // idx
4965     $row["dossier"]
4966     );
4967     // On construit la ligne
4968     $ct_tbody .= sprintf(
4969     $template_line,
4970     // Colonne 1 - Numéro de dossier
4971     sprintf(
4972     $template_link,
4973     $ct_href,
4974     $template_btn_consulter
4975     ),
4976     // Colonne 2 - Numéro de dossier
4977     sprintf(
4978     $template_link,
4979     $ct_href,
4980     $row["dossier_libelle"]
4981     ),
4982     // Colonne 3 - Date de réception
4983     sprintf(
4984     $template_link,
4985     $ct_href,
4986     $this->f->formatDate($row["date_depot"])
4987     )
4988     );
4989     }
4990     // Affichage du tableau listant les dossiers
4991     printf(
4992     $template_table,
4993     // Colonne 1 - Consulter
4994     '',
4995     // Colonne 2 - Numéro de dossier
4996     _('dossier'),
4997     // Colonne 3 - Date de réception
4998     _('Date de réception'),
4999     // Le Contenu
5000     $ct_tbody
5001     );
5002     // Affichage du footer
5003     printf(
5004     $this->template_footer,
5005 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_alerte_visite&filtre=" . $filtre,
5006 softime 6565 _("Voir +")
5007     );
5008     }
5009    
5010     /**
5011     * Cette méthode permet de récupérer la configuration du widget 'Alerte Parquet'.
5012     *
5013     * @return array
5014     */
5015     function get_config_dossier_contentieux_alerte_parquet($arguments) {
5016     // Initialisation du tableau des paramètres avec ses valeur par défaut
5017     $arguments_default = array(
5018     "filtre" => "instructeur"
5019     );
5020     // Vérification des arguments
5021     foreach ($arguments_default as $key => $value) {
5022     //
5023     if (isset($arguments[$key])) {
5024     //
5025     $elem = trim($arguments[$key]);
5026     //
5027     if ($key === "filtre"
5028     && in_array($elem, array("instructeur", "division", "aucun"))) {
5029     // La valeur doit être dans cette liste
5030     $arguments[$key] = $elem;
5031     continue;
5032     }
5033     }
5034     //
5035     $arguments[$key] = $value;
5036     }
5037     $filtre = $arguments["filtre"];
5038    
5039     // SELECT - CHAMPAFFICHE
5040     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
5041     dossier.terrain_adresse_voie,\' \',
5042     dossier.terrain_adresse_lieu_dit,\' \',
5043     dossier.terrain_adresse_code_postal,\' \',
5044     dossier.terrain_adresse_localite,\' \',
5045     dossier.terrain_adresse_bp,\' \',
5046     dossier.terrain_adresse_cedex
5047 softime 7067 )) as "'._("localisation").'"';
5048 softime 6565 //
5049     $case_contrevenant = "
5050     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
5051     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
5052     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
5053     END
5054     ";
5055     //
5056     $query_ct_select_champaffiche = array(
5057     'dossier.dossier as "'._("dossier").'"',
5058     'dossier.dossier_libelle as "'._("dossier").'"',
5059     $trim_concat_terrain,
5060     $case_contrevenant.' as "'._("contrevenant").'"',
5061     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
5062     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
5063     'etat.libelle as "'._("etat").'"',
5064     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
5065     );
5066    
5067     /**
5068     * Construction de la requête
5069     */
5070     // SELECT
5071     $query_ct_select = "
5072     dossier.dossier,
5073     dossier.dossier_libelle,
5074     dossier.date_depot
5075     ";
5076    
5077     // FROM
5078     $query_ct_from = "
5079     ".DB_PREFIXE."dossier
5080     LEFT JOIN ".DB_PREFIXE."etat
5081     ON dossier.etat = etat.etat
5082     LEFT JOIN (
5083     SELECT *
5084     FROM ".DB_PREFIXE."lien_dossier_demandeur
5085     INNER JOIN ".DB_PREFIXE."demandeur
5086     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5087     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5088     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
5089     ) as demandeur_contrevenant
5090     ON demandeur_contrevenant.dossier = dossier.dossier
5091     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5092     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5093     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5094     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5095     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5096     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5097     LEFT JOIN ".DB_PREFIXE."avis_decision
5098     ON avis_decision.avis_decision=dossier.avis_decision
5099     %s
5100     %s
5101     %s
5102     ";
5103    
5104     $query_ct_where_instructeur_filter = "";
5105     $query_ct_where_division_filter = "";
5106     $query_ct_where_collectivite_filter = "";
5107     // Filtre sur les dossiers qui concernent l'utilisateur
5108     if ($filtre == "instructeur") {
5109     //
5110     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5111     ON dossier.instructeur=instructeur.instructeur
5112     OR dossier.instructeur_2=instructeur.instructeur
5113     JOIN ".DB_PREFIXE."om_utilisateur
5114     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5115     AND om_utilisateur.login='".$_SESSION['login']."'
5116     ";
5117     }
5118    
5119     // Filtre sur les dossier de la division
5120     if ($filtre == "division") {
5121     //
5122     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5123     ON dossier.division=division.division
5124     AND division.division = ".$_SESSION['division']."
5125     ";
5126     }
5127    
5128     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5129     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5130     // collectivité
5131     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5132     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5133     ON dossier.om_collectivite=om_collectivite.om_collectivite
5134     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5135     ";
5136     } else {
5137     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5138     ON dossier.om_collectivite=om_collectivite.om_collectivite
5139     ";
5140     }
5141    
5142     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
5143    
5144     // WHERE - COMMON
5145     $query_ct_where_common = "
5146     LOWER(dossier_autorisation_type.code) = LOWER('IN')
5147     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '9 months'
5148     AND dossier.date_transmission_parquet IS NULL
5149     ";
5150    
5151     // ORDER BY
5152     $query_ct_orderby = "
5153     dossier.date_depot ASC
5154     ";
5155    
5156     $query_ct_where_groupe = "";
5157     // Gestion des groupes et confidentialité
5158     include('../sql/pgsql/filter_group_widgets.inc.php');
5159    
5160     /**
5161     * Message d'aide
5162     */
5163     //
5164     $message_filtre = "";
5165     //
5166     switch ($filtre) {
5167     case "instructeur":
5168     $message_filtre = " "._("dont je suis l'instructeur");
5169     break;
5170     case "division":
5171     $message_filtre = " "._("situés dans ma division");
5172     break;
5173     case "aucun":
5174     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5175     $message_filtre = " "._("situés dans ma collectivité");
5176     } else {
5177     $message_filtre = " "._("situés dans toutes les collectivités");
5178     }
5179     break;
5180     }
5181     //
5182     $message_help = sprintf(
5183     _("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."),
5184     $message_filtre
5185     );
5186    
5187     /**
5188     * Return
5189     */
5190     //
5191     return array(
5192     "arguments" => $arguments,
5193     "message_help" => $message_help,
5194     "query_ct_select" => $query_ct_select,
5195     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5196     "query_ct_from" => $query_ct_from,
5197     "query_ct_where" => $query_ct_where_common,
5198     "query_ct_where_groupe" => $query_ct_where_groupe,
5199     "query_ct_orderby" => $query_ct_orderby
5200     );
5201     }
5202    
5203     /**
5204     * WIDGET DASHBOARD - Alerte Parquet
5205     * @return void
5206     */
5207     function view_widget_dossier_contentieux_alerte_parquet($content = null) {
5208     /**
5209     * Ce widget est configurable via l'interface Web. Lors de la création
5210     * du widget dans le paramétrage il est possible de spécifier la ou les
5211     * options suivantes :
5212     * - filtre :
5213     * = instructeur
5214     * = division
5215     * = aucun
5216     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5217     */
5218     // Liste des paramètres
5219     $params = array("filtre");
5220     // Formatage des arguments reçus en paramètres
5221     $arguments = $this->get_arguments($content, $params);
5222     // Récupération de la configuration du widget
5223     $conf = $this->get_config_dossier_contentieux_alerte_parquet($arguments);
5224    
5225     //
5226     $filtre = $conf["arguments"]["filtre"];
5227     //
5228    
5229    
5230     /**
5231     * Composition de la requête
5232     */
5233     //
5234     $query = sprintf("
5235     SELECT
5236     %s
5237     FROM
5238     %s
5239     WHERE
5240     %s
5241     %s
5242     ORDER BY
5243     %s
5244     LIMIT 5",
5245     $conf["query_ct_select"],
5246     $conf["query_ct_from"],
5247     $conf["query_ct_where"],
5248     $conf["query_ct_where_groupe"],
5249     $conf["query_ct_orderby"]
5250     );
5251    
5252     /**
5253     * Exécution de la requête
5254     */
5255     //
5256     $res = $this->f->db->query($query);
5257     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5258     $this->f->isDatabaseError($res);
5259    
5260     // Affichage du message d'informations
5261     printf(
5262     $this->template_help,
5263     $conf["message_help"]
5264     );
5265     /**
5266     * Si il n'y a aucun dossier à afficher, alors on affiche un message
5267     * clair à l'utilisateur et on sort de la vue.
5268     */
5269     // Si il n'y a aucun dossier à afficher
5270     if ($res->numrows() == 0) {
5271     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.");
5272     return;
5273     }
5274    
5275     /**
5276     * Template nécessaires à l'affichage du widget
5277     */
5278     //
5279     $template_table = '
5280     <table class="tab-tab">
5281     <thead>
5282     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5283     <th class="title col-0 firstcol">
5284     <span class="name">
5285     %s
5286     </span>
5287     </th>
5288     <th class="title col-1">
5289     <span class="name">
5290     %s
5291     </span>
5292     </th>
5293     <th class="title col-2 lastcol">
5294     <span class="name">
5295     %s
5296     </span>
5297     </th>
5298     </tr>
5299     </thead>
5300     <tbody>
5301     %s
5302     </tbody>
5303     </table>
5304     ';
5305     //
5306     $template_line = '
5307     <tr class="tab-data odd">
5308     <td class="col-0 firstcol">
5309     %s
5310     </td>
5311     <td class="col-1 ">
5312     %s
5313     </td>
5314     <td class="col-2 lastcol">
5315     %s
5316     </td>
5317     </tr>
5318     ';
5319     //
5320 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
5321 softime 6565 //
5322     $template_link = '
5323     <a class="lienTable" href="%s">
5324     %s
5325     </a>
5326     ';
5327     // Bouton consulter
5328     $template_btn_consulter = '
5329     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5330     ._('Consulter')
5331     .'</span>
5332     ';
5333     //
5334    
5335     /**
5336     * Si il y a des dossiers à afficher, alors on affiche le widget.
5337     */
5338     // On construit le contenu du tableau
5339     $ct_tbody = '';
5340     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5341     // On construit l'attribut href du lien
5342     $ct_href = sprintf(
5343     $template_href,
5344     // idx
5345     $row["dossier"]
5346     );
5347     // On construit la ligne
5348     $ct_tbody .= sprintf(
5349     $template_line,
5350     // Colonne 1 - Numéro de dossier
5351     sprintf(
5352     $template_link,
5353     $ct_href,
5354     $template_btn_consulter
5355     ),
5356     // Colonne 2 - Numéro de dossier
5357     sprintf(
5358     $template_link,
5359     $ct_href,
5360     $row["dossier_libelle"]
5361     ),
5362     // Colonne 3 - Date de réception
5363     sprintf(
5364     $template_link,
5365     $ct_href,
5366     $this->f->formatDate($row["date_depot"])
5367     )
5368     );
5369     }
5370     // Affichage du tableau listant les dossiers
5371     printf(
5372     $template_table,
5373     // Colonne 1 - Consulter
5374     '',
5375     // Colonne 2 - Numéro de dossier
5376     _('dossier'),
5377     // Colonne 3 - Date de réception
5378     _('Date de réception'),
5379     // Le Contenu
5380     $ct_tbody
5381     );
5382     // Affichage du footer
5383     printf(
5384     $this->template_footer,
5385 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_alerte_parquet&filtre=" . $filtre,
5386 softime 6565 _("Voir +")
5387     );
5388     }
5389    
5390     /**
5391     * Cette méthode permet de récupérer la configuration du widget 'Mes clôtures'.
5392     *
5393     * @return array
5394     */
5395     function get_config_dossier_contentieux_clotures($arguments) {
5396     // Initialisation du tableau des paramètres avec ses valeur par défaut
5397     $arguments_default = array(
5398     "filtre" => "instructeur",
5399     );
5400     // Vérification des arguments
5401     foreach ($arguments_default as $key => $value) {
5402     //
5403     if (isset($arguments[$key])) {
5404     //
5405     $elem = trim($arguments[$key]);
5406     //
5407     if ($key === "filtre"
5408     && in_array($elem, array("instructeur", "division", "aucun"))) {
5409     // La valeur doit être dans cette liste
5410     $arguments[$key] = $elem;
5411     continue;
5412     }
5413     }
5414     //
5415     $arguments[$key] = $value;
5416     }
5417    
5418     $filtre = $arguments["filtre"];
5419    
5420     // SELECT - CHAMPAFFICHE
5421     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
5422     dossier.terrain_adresse_voie,\' \',
5423     dossier.terrain_adresse_lieu_dit,\' \',
5424     dossier.terrain_adresse_code_postal,\' \',
5425     dossier.terrain_adresse_localite,\' \',
5426     dossier.terrain_adresse_bp,\' \',
5427     dossier.terrain_adresse_cedex
5428 softime 7067 )) as "'._("localisation").'"';
5429 softime 6565 //
5430     $case_requerant = "
5431     CASE WHEN demandeur_requerant.qualite = 'particulier'
5432     THEN TRIM(CONCAT(demandeur_requerant.particulier_nom, ' ', demandeur_requerant.particulier_prenom))
5433     ELSE TRIM(CONCAT(demandeur_requerant.personne_morale_raison_sociale, ' ', demandeur_requerant.personne_morale_denomination))
5434     END
5435     ";
5436     //
5437     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
5438     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
5439     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
5440     END";
5441     //
5442     $query_ct_select_champaffiche = array(
5443     'dossier.dossier as "'._("dossier").'"',
5444     'dossier.dossier_libelle as "'._("dossier").'"',
5445     'dossier_autorisation_type_detaille.libelle as "'._("type de dossier").'"',
5446     'dossier_autorisation_contestee.dossier_libelle as "'._("autorisation").'"',
5447     $case_demandeur.' as "'._("petitionnaire").'"',
5448     $trim_concat_terrain,
5449     $case_requerant.' as "'._("requerant").'"',
5450     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',
5451     'avis_decision.libelle as "'._("decision").'"',
5452     'etat.libelle as "'._("etat").'"',
5453     'to_char(dossier.date_cloture_instruction, \'DD/MM/YYYY\') as "'._("date_cloture_instruction").'"',
5454     );
5455    
5456     /**
5457     * Construction de la requête
5458     */
5459     // SELECT
5460     $query_ct_select = "
5461     dossier.dossier,
5462     dossier.dossier_libelle,
5463     dossier.date_cloture_instruction
5464     ";
5465    
5466     // FROM
5467     $query_ct_from = "
5468     ".DB_PREFIXE."dossier
5469     LEFT JOIN ".DB_PREFIXE."etat
5470     ON dossier.etat = etat.etat
5471     LEFT JOIN (
5472     SELECT *
5473     FROM ".DB_PREFIXE."lien_dossier_demandeur
5474     INNER JOIN ".DB_PREFIXE."demandeur
5475     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5476     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5477     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
5478     ) as demandeur
5479     ON demandeur.dossier = dossier.dossier
5480     LEFT JOIN (
5481     SELECT *
5482     FROM ".DB_PREFIXE."lien_dossier_demandeur
5483     INNER JOIN ".DB_PREFIXE."demandeur
5484     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5485     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5486     AND LOWER(demandeur.type_demandeur) = LOWER('requerant')
5487     ) as demandeur_requerant
5488     ON demandeur_requerant.dossier = dossier.dossier
5489     LEFT JOIN ".DB_PREFIXE."dossier as dossier_autorisation_contestee
5490     ON dossier.autorisation_contestee = dossier_autorisation_contestee.dossier
5491     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5492     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5493     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5494     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5495     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5496     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5497     LEFT JOIN ".DB_PREFIXE."avis_decision
5498     ON avis_decision.avis_decision=dossier.avis_decision
5499     %s
5500     %s
5501     %s
5502     ";
5503    
5504     $query_ct_where_instructeur_filter = "";
5505     $query_ct_where_division_filter = "";
5506     $query_ct_where_collectivite_filter = "";
5507     // Filtre sur les dossiers qui concernent l'utilisateur
5508     if ($filtre == "instructeur") {
5509     //
5510     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5511     ON dossier.instructeur=instructeur.instructeur
5512     OR dossier.instructeur_2=instructeur.instructeur
5513     JOIN ".DB_PREFIXE."om_utilisateur
5514     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5515     AND om_utilisateur.login='".$_SESSION['login']."'
5516     ";
5517     }
5518    
5519     // Filtre sur les dossier de la division
5520     if ($filtre == "division") {
5521     //
5522     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5523     ON dossier.division=division.division
5524     AND division.division = ".$_SESSION['division']."
5525     ";
5526     }
5527    
5528     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5529     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5530     // collectivité
5531     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5532     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5533     ON dossier.om_collectivite=om_collectivite.om_collectivite
5534     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5535     ";
5536     } else {
5537     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5538     ON dossier.om_collectivite=om_collectivite.om_collectivite
5539     ";
5540     }
5541    
5542     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
5543    
5544     // WHERE - COMMON
5545     $query_ct_where_common = "
5546     LOWER(dossier_autorisation_type.code) = LOWER('RE')
5547     AND dossier.date_cloture_instruction >= CURRENT_TIMESTAMP
5548     AND dossier.date_cloture_instruction <= CURRENT_TIMESTAMP + interval '1 month'
5549     ";
5550    
5551     // ORDER BY
5552    
5553     $query_ct_orderby = "
5554     dossier.date_cloture_instruction ASC
5555     ";
5556    
5557     $query_ct_where_groupe = "";
5558     // Gestion des groupes et confidentialité
5559     include('../sql/pgsql/filter_group_widgets.inc.php');
5560    
5561     /**
5562     * Message d'aide
5563     */
5564     //
5565     $message_filtre = "";
5566     //
5567     switch ($filtre) {
5568     case "instructeur":
5569     $message_filtre = " "._("dont je suis l'instructeur");
5570     break;
5571     case "division":
5572     $message_filtre = " "._("situés dans ma division");
5573     break;
5574     case "aucun":
5575     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5576     $message_filtre = " "._("situés dans ma collectivité");
5577     } else {
5578     $message_filtre = " "._("situés dans toutes les collectivités");
5579     }
5580     break;
5581     }
5582     //
5583     $message_help = sprintf(
5584     _("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."),
5585     $message_filtre
5586     );
5587    
5588     /**
5589     * Return
5590     */
5591     //
5592     return array(
5593     "arguments" => $arguments,
5594     "message_help" => $message_help,
5595     "query_ct_select" => $query_ct_select,
5596     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5597     "query_ct_from" => $query_ct_from,
5598     "query_ct_where" => $query_ct_where_common,
5599     "query_ct_where_groupe" => $query_ct_where_groupe,
5600     "query_ct_orderby" => $query_ct_orderby
5601     );
5602     }
5603    
5604     /**
5605     * WIDGET DASHBOARD - Les clôtures
5606     * @return void
5607     */
5608     function view_widget_dossier_contentieux_clotures($content = null) {
5609    
5610     /**
5611     * Ce widget est configurable via l'interface Web. Lors de la création
5612     * du widget dans le paramétrage il est possible de spécifier la ou les
5613     * options suivantes :
5614     * - filtre :
5615     * = instructeur
5616     * = division
5617     * = aucun
5618     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5619     */
5620     // Liste des paramètres
5621     $params = array("filtre");
5622     // Formatage des arguments reçus en paramètres
5623     $arguments = $this->get_arguments($content, $params);
5624     // Récupération de la configuration du widget
5625     $conf = $this->get_config_dossier_contentieux_clotures($arguments);
5626    
5627     $filtre = $conf["arguments"]["filtre"];
5628     //
5629    
5630    
5631     /**
5632     * Composition de la requête
5633     */
5634     //
5635     $query = sprintf("
5636     SELECT
5637     %s
5638     FROM
5639     %s
5640     WHERE
5641     %s
5642     %s
5643     ORDER BY
5644     %s
5645     LIMIT 5",
5646     $conf["query_ct_select"],
5647     $conf["query_ct_from"],
5648     $conf["query_ct_where"],
5649     $conf["query_ct_where_groupe"],
5650     $conf["query_ct_orderby"]
5651     );
5652    
5653     /**
5654     * Exécution de la requête
5655     */
5656     //
5657     $res = $this->f->db->query($query);
5658     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5659     $this->f->isDatabaseError($res);
5660    
5661     // Affichage du message d'informations
5662     printf(
5663     $this->template_help,
5664     $conf["message_help"]
5665     );
5666     /**
5667     * Si il n'y a aucun dossier à afficher, alors on affiche un message
5668     * clair à l'utilisateur et on sort de la vue.
5669     */
5670     // Si il n'y a aucun dossier à afficher
5671     if ($res->numrows() == 0) {
5672     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.");
5673     return;
5674     }
5675    
5676     /**
5677     * Template nécessaires à l'affichage du widget
5678     */
5679     //
5680     $template_table = '
5681     <table class="tab-tab">
5682     <thead>
5683     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5684     <th class="title col-0 firstcol">
5685     <span class="name">
5686     %s
5687     </span>
5688     </th>
5689     <th class="title col-1">
5690     <span class="name">
5691     %s
5692     </span>
5693     </th>
5694     <th class="title col-2 lastcol">
5695     <span class="name">
5696     %s
5697     </span>
5698     </th>
5699     </tr>
5700     </thead>
5701     <tbody>
5702     %s
5703     </tbody>
5704     </table>
5705     ';
5706     //
5707     $template_line = '
5708     <tr class="tab-data odd">
5709     <td class="col-0 firstcol">
5710     %s
5711     </td>
5712     <td class="col-1 ">
5713     %s
5714     </td>
5715     <td class="col-2 lastcol">
5716     %s
5717     </td>
5718     </tr>
5719     ';
5720     //
5721 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_tous_recours&amp;action=3&amp;idx=%s';
5722 softime 6565 //
5723     $template_link = '
5724     <a class="lienTable" href="%s">
5725     %s
5726     </a>
5727     ';
5728     // Bouton consulter
5729     $template_btn_consulter = '
5730     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5731     ._('Consulter')
5732     .'</span>
5733     ';
5734     //
5735    
5736     /**
5737     * Si il y a des dossiers à afficher, alors on affiche le widget.
5738     */
5739     // On construit le contenu du tableau
5740     $ct_tbody = '';
5741     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5742     // On construit l'attribut href du lien
5743     $ct_href = sprintf(
5744     $template_href,
5745     // idx
5746     $row["dossier"]
5747     );
5748     // On construit la ligne
5749     $ct_tbody .= sprintf(
5750     $template_line,
5751     // Colonne 1 - Numéro de dossier
5752     sprintf(
5753     $template_link,
5754     $ct_href,
5755     $template_btn_consulter
5756     ),
5757     // Colonne 2 - Numéro de dossier
5758     sprintf(
5759     $template_link,
5760     $ct_href,
5761     $row["dossier_libelle"]
5762     ),
5763     // Colonne 3 - Date de clôture d'instruction
5764     sprintf(
5765     $template_link,
5766     $ct_href,
5767     $this->f->formatDate($row["date_cloture_instruction"])
5768     )
5769     );
5770     }
5771     // Affichage du tableau listant les dossiers
5772     printf(
5773     $template_table,
5774     // Colonne 1 - Consulter
5775     '',
5776     // Colonne 2 - Numéro de dossier
5777     _('dossier'),
5778     // Colonne 3 - Date de clôture d'instruction
5779     _("date_cloture_instruction"),
5780     // Le Contenu
5781     $ct_tbody
5782     );
5783     // Affichage du footer
5784     printf(
5785     $this->template_footer,
5786 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_clotures&filtre=" . $filtre,
5787 softime 6565 _("Voir +")
5788     );
5789     }
5790    
5791     /**
5792     * Cette méthode permet de récupérer la configuration du widget 'Les audience'.
5793     *
5794     * @return array
5795     */
5796     function get_config_dossier_contentieux_audience($arguments) {
5797     // Initialisation du tableau des paramètres avec ses valeur par défaut
5798     $arguments_default = array(
5799     "filtre" => "instructeur"
5800     );
5801     // Vérification des arguments
5802     foreach ($arguments_default as $key => $value) {
5803     //
5804     if (isset($arguments[$key])) {
5805     //
5806     $elem = trim($arguments[$key]);
5807     //
5808     if ($key === "filtre"
5809     && in_array($elem, array("instructeur", "division", "aucun"))) {
5810     // La valeur doit être dans cette liste
5811     $arguments[$key] = $elem;
5812     continue;
5813     }
5814     }
5815     //
5816     $arguments[$key] = $value;
5817     }
5818    
5819     $filtre = $arguments["filtre"];
5820    
5821     // SELECT - CHAMPAFFICHE
5822     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
5823     dossier.terrain_adresse_voie,\' \',
5824     dossier.terrain_adresse_lieu_dit,\' \',
5825     dossier.terrain_adresse_code_postal,\' \',
5826     dossier.terrain_adresse_localite,\' \',
5827     dossier.terrain_adresse_bp,\' \',
5828     dossier.terrain_adresse_cedex
5829 softime 7067 )) as "'._("localisation").'"';
5830 softime 6565 //
5831     $case_contrevenant = "
5832     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
5833     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
5834     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
5835     END
5836     ";
5837     //
5838     $query_ct_select_champaffiche = array(
5839     'dossier.dossier as "'._("dossier").'"',
5840     'dossier.dossier_libelle as "'._("dossier").'"',
5841     $trim_concat_terrain,
5842     $case_contrevenant.' as "'._("contrevenant").'"',
5843     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
5844     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
5845     'etat.libelle as "'._("etat").'"',
5846     'to_char(donnees_techniques.ctx_date_audience, \'DD/MM/YYYY\') as "'._("ctx_date_audience").'"',
5847     );
5848    
5849     /**
5850     * Construction de la requête
5851     */
5852     // SELECT
5853     $query_ct_select = "
5854     dossier.dossier,
5855     dossier.dossier_libelle,
5856     donnees_techniques.ctx_date_audience
5857     ";
5858    
5859     // FROM
5860     $query_ct_from = "
5861     ".DB_PREFIXE."dossier
5862     LEFT JOIN ".DB_PREFIXE."etat
5863     ON dossier.etat = etat.etat
5864     LEFT JOIN (
5865     SELECT *
5866     FROM ".DB_PREFIXE."lien_dossier_demandeur
5867     INNER JOIN ".DB_PREFIXE."demandeur
5868     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5869     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5870     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
5871     ) as demandeur_contrevenant
5872     ON demandeur_contrevenant.dossier = dossier.dossier
5873     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5874     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5875     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5876     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5877     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5878     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5879     LEFT JOIN ".DB_PREFIXE."avis_decision
5880     ON avis_decision.avis_decision=dossier.avis_decision
5881     LEFT JOIN ".DB_PREFIXE."donnees_techniques
5882     ON donnees_techniques.dossier_instruction = dossier.dossier
5883     %s
5884     %s
5885     %s
5886     ";
5887    
5888     $query_ct_where_instructeur_filter = "";
5889     $query_ct_where_division_filter = "";
5890     $query_ct_where_collectivite_filter = "";
5891     // Filtre sur les dossiers qui concernent l'utilisateur
5892     if ($filtre == "instructeur") {
5893     //
5894     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5895     ON dossier.instructeur=instructeur.instructeur
5896     OR dossier.instructeur_2=instructeur.instructeur
5897     JOIN ".DB_PREFIXE."om_utilisateur
5898     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5899     AND om_utilisateur.login='".$_SESSION['login']."'
5900     ";
5901     }
5902    
5903     // Filtre sur les dossier de la division
5904     if ($filtre == "division") {
5905     //
5906     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5907     ON dossier.division=division.division
5908     AND division.division = ".$_SESSION['division']."
5909     ";
5910     }
5911    
5912     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5913     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5914     // collectivité
5915     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5916     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5917     ON dossier.om_collectivite=om_collectivite.om_collectivite
5918     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5919     ";
5920     } else {
5921     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5922     ON dossier.om_collectivite=om_collectivite.om_collectivite
5923     ";
5924     }
5925    
5926     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
5927    
5928     // WHERE - COMMON
5929     $query_ct_where_common = "
5930     LOWER(dossier_autorisation_type.code) = LOWER('IN')
5931     AND donnees_techniques.ctx_date_audience IS NOT NULL
5932     AND donnees_techniques.ctx_date_audience >= CURRENT_TIMESTAMP
5933     AND donnees_techniques.ctx_date_audience <= CURRENT_TIMESTAMP + interval '1 month'
5934     ";
5935     // ORDER BY
5936    
5937     $query_ct_orderby = "
5938     donnees_techniques.ctx_date_audience ASC
5939     ";
5940    
5941     $query_ct_where_groupe = "";
5942     // Gestion des groupes et confidentialité
5943     include('../sql/pgsql/filter_group_widgets.inc.php');
5944    
5945     /**
5946     * Message d'aide
5947     */
5948     //
5949     $message_filtre = "";
5950     //
5951     switch ($filtre) {
5952     case "instructeur":
5953     $message_filtre = " "._("dont je suis l'instructeur");
5954     break;
5955     case "division":
5956     $message_filtre = " "._("situés dans ma division");
5957     break;
5958     case "aucun":
5959     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5960     $message_filtre = " "._("situés dans ma collectivité");
5961     } else {
5962     $message_filtre = " "._("situés dans toutes les collectivités");
5963     }
5964     break;
5965     }
5966     //
5967     $message_help = sprintf(
5968     _("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."),
5969     $message_filtre
5970     );
5971    
5972     /**
5973     * Return
5974     */
5975     //
5976     return array(
5977     "arguments" => $arguments,
5978     "message_help" => $message_help,
5979     "query_ct_select" => $query_ct_select,
5980     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5981     "query_ct_from" => $query_ct_from,
5982     "query_ct_where" => $query_ct_where_common,
5983     "query_ct_where_groupe" => $query_ct_where_groupe,
5984     "query_ct_orderby" => $query_ct_orderby,
5985     );
5986     }
5987    
5988     /**
5989     * WIDGET DASHBOARD - Les audiences
5990     * @return void
5991     */
5992     function view_widget_dossier_contentieux_audience($content = null) {
5993     /**
5994     * Ce widget est configurable via l'interface Web. Lors de la création
5995     * du widget dans le paramétrage il est possible de spécifier la ou les
5996     * options suivantes :
5997     * - filtre :
5998     * = instructeur
5999     * = division
6000     * = aucun
6001     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
6002     */
6003     // Liste des paramètres
6004     $params = array("filtre");
6005     // Formatage des arguments reçus en paramètres
6006     $arguments = $this->get_arguments($content, $params);
6007     // Récupération de la configuration du widget
6008     $conf = $this->get_config_dossier_contentieux_audience($arguments);
6009    
6010     //
6011     $filtre = $conf["arguments"]["filtre"];
6012     //
6013    
6014     /**
6015     * Composition de la requête
6016     */
6017     //
6018     $query = sprintf("
6019     SELECT
6020     %s
6021     FROM
6022     %s
6023     WHERE
6024     %s
6025     %s
6026     ORDER BY
6027     %s
6028     LIMIT 5",
6029     $conf["query_ct_select"],
6030     $conf["query_ct_from"],
6031     $conf["query_ct_where"],
6032     $conf["query_ct_where_groupe"],
6033     $conf["query_ct_orderby"]
6034     );
6035    
6036     /**
6037     * Exécution de la requête
6038     */
6039     //
6040     $res = $this->f->db->query($query);
6041     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
6042     $this->f->isDatabaseError($res);
6043    
6044     // Affichage du message d'informations
6045     printf(
6046     $this->template_help,
6047     $conf["message_help"]
6048     );
6049     /**
6050     * Si il n'y a aucun dossier à afficher, alors on affiche un message
6051     * clair à l'utilisateur et on sort de la vue.
6052     */
6053     // Si il n'y a aucun dossier à afficher
6054     if ($res->numrows() == 0) {
6055     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.");
6056     return;
6057     }
6058    
6059     /**
6060     * Template nécessaires à l'affichage du widget
6061     */
6062     //
6063     $template_table = '
6064     <table class="tab-tab">
6065     <thead>
6066     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
6067     <th class="title col-0 firstcol">
6068     <span class="name">
6069     %s
6070     </span>
6071     </th>
6072     <th class="title col-1">
6073     <span class="name">
6074     %s
6075     </span>
6076     </th>
6077     <th class="title col-2 lastcol">
6078     <span class="name">
6079     %s
6080     </span>
6081     </th>
6082     </tr>
6083     </thead>
6084     <tbody>
6085     %s
6086     </tbody>
6087     </table>
6088     ';
6089     //
6090     $template_line = '
6091     <tr class="tab-data odd">
6092     <td class="col-0 firstcol">
6093     %s
6094     </td>
6095     <td class="col-1 ">
6096     %s
6097     </td>
6098     <td class="col-2 lastcol">
6099     %s
6100     </td>
6101     </tr>
6102     ';
6103     //
6104 softime 7996 $template_href = OM_ROUTE_FORM.'&obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
6105 softime 6565 //
6106     $template_link = '
6107     <a class="lienTable" href="%s">
6108     %s
6109     </a>
6110     ';
6111     // Bouton consulter
6112     $template_btn_consulter = '
6113     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
6114     ._('Consulter')
6115     .'</span>
6116     ';
6117     //
6118    
6119     /**
6120     * Si il y a des dossiers à afficher, alors on affiche le widget.
6121     */
6122     // On construit le contenu du tableau
6123     $ct_tbody = '';
6124     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
6125     // On construit l'attribut href du lien
6126     $ct_href = sprintf(
6127     $template_href,
6128     // idx
6129     $row["dossier"]
6130     );
6131     // On construit la ligne
6132     $ct_tbody .= sprintf(
6133     $template_line,
6134     // Colonne 1 - Numéro de dossier
6135     sprintf(
6136     $template_link,
6137     $ct_href,
6138     $template_btn_consulter
6139     ),
6140     // Colonne 2 - Numéro de dossier
6141     sprintf(
6142     $template_link,
6143     $ct_href,
6144     $row["dossier_libelle"]
6145     ),
6146     // Colonne 3 - Date d'audience
6147     sprintf(
6148     $template_link,
6149     $ct_href,
6150     $this->f->formatDate($row["ctx_date_audience"])
6151     )
6152     );
6153     }
6154     // Affichage du tableau listant les dossiers
6155     printf(
6156     $template_table,
6157     // Colonne 1 - Consulter
6158     '',
6159     // Colonne 2 - Numéro de dossier
6160     _('dossier'),
6161     // Colonne 3 - Date d'audience
6162     _('ctx_date_audience'),
6163     // Le Contenu
6164     $ct_tbody
6165     );
6166     // Affichage du footer
6167     printf(
6168     $this->template_footer,
6169 softime 7996 OM_ROUTE_TAB."&obj=dossier_contentieux_audience&filtre=" . $filtre,
6170 softime 6565 _("Voir +")
6171     );
6172     }
6173    
6174    
6175 softime 7996 /**
6176     * Cette méthode permet de récupérer la configuration du widget 'Dossier consulter'.
6177     *
6178     * @return array
6179     */
6180     function get_config_dossier_consulter($idx) {
6181     /**
6182     * Construction de la requête
6183     */
6184     // SELECT
6185     $query_ct_select = "
6186     dossier.dossier,
6187     dossier.dossier_libelle,
6188     COALESCE(
6189     demandeur.particulier_nom,
6190     demandeur.personne_morale_denomination
6191     ) AS nom_petitionnaire,
6192     dossier.date_depot,
6193     dossier_autorisation_type.code
6194     ";
6195    
6196     // FROM
6197     $query_ct_from = "
6198     ".DB_PREFIXE."dossier
6199     LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
6200     ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
6201     LEFT JOIN ".DB_PREFIXE."demandeur
6202     ON lien_dossier_demandeur.demandeur = demandeur.demandeur
6203     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
6204     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
6205     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
6206     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
6207     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
6208     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
6209     ";
6210    
6211     $query_ct_where_id_dossier_consulte ="
6212     dossier.dossier ='".$idx."'
6213     ";
6214    
6215     /**
6216     * Return
6217     */
6218     //
6219     return array(
6220     "query_ct_select" => $query_ct_select,
6221     "query_ct_from" => $query_ct_from,
6222     "query_ct_where_id_dossier_consulte" => $query_ct_where_id_dossier_consulte,
6223     );
6224     }
6225    
6226     /**
6227     * WIDGET DASHBOARD - widget_dossier_consulter
6228     * @return void
6229     */
6230     function view_widget_dossier_consulter($content = null) {
6231     /**
6232     * Ce widget est configurable via l'interface Web. Lors de la création
6233     * du widget dans le paramétrage il est possible de spécifier l'options suivantes :
6234     *
6235     * - nb_dossiers : le nombre de dossiers récemment consultés visibile dans le
6236     * widget.
6237     * (default) Par défaut la valeur est 5 derniers dossiers.
6238     **/
6239    
6240     // Liste des paramètres
6241     $params = array("nb_dossiers");
6242     // Formatage des arguments reçus en paramètres
6243     $arguments = $this->get_arguments($content, $params);
6244    
6245     //On retire 1 à la valeur de nb_dossiers car $i boucle à partir de 0
6246     if(isset($arguments['nb_dossiers']) == false) {
6247     $nb_dossiers = 4;
6248     } else {
6249     $nb_dossiers = $arguments['nb_dossiers']-1;
6250     }
6251    
6252    
6253     $dossier_brut = null;
6254     if (isset($_SESSION['dossiers_consulte']) === false) {
6255     $dossiers_consulte = array();
6256     } else {
6257     $dossier_brut = $_SESSION['dossiers_consulte'];
6258     $dossiers_consulte = array_reverse($dossier_brut);
6259     }
6260    
6261     /**
6262     * Template nécessaires à l'affichage du widget
6263     */
6264     //
6265     $template_table = '
6266     <table class="tab-tab widget_dossier_consulter">
6267     <thead>
6268     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
6269     <th class="title col-0 firstcol">
6270     <span class="name">
6271     %s
6272     </span>
6273     </th>
6274     <th class="title col-1">
6275     <span class="name">
6276     %s
6277     </span>
6278     </th>
6279     <th class="title col-2">
6280     <span class="name">
6281     %s
6282     </span>
6283     </th>
6284     </tr>
6285     </thead>
6286     <tbody>
6287     %s
6288     </tbody>
6289     </table>
6290     ';
6291     //
6292     $template_line = '
6293     <tr class="tab-data odd">
6294     <td class="col-1 firstcol">
6295     %s
6296     </td>
6297     <td class="col-1">
6298     %s
6299     </td>
6300     <td class="col-2">
6301     %s
6302     </td>
6303     </tr>
6304     ';
6305    
6306     //
6307     $template_line_hidden = '
6308     <tr class="tab-data odd" hidden>
6309     <td class="col-1 firstcol">
6310     %s
6311     </td>
6312     <td class="col-1">
6313     %s
6314     </td>
6315     <td class="col-2">
6316     %s
6317     </td>
6318     </tr>
6319     ';
6320     // Récupererle type du dossier pour bien rediriger et son id.
6321     $template_href = OM_ROUTE_FORM.'&obj=%s&action=3&idx=%s';
6322    
6323     $template_link = '
6324     <a class="lienTable" href="%s">
6325     %s
6326     </a>
6327     ';
6328     //
6329     $template_footer_consulter = '
6330     <div class="widget-footer">
6331     <a class="simple-btn" onClick="%s">
6332     %s
6333     </a>
6334     </div>
6335     ';
6336    
6337     if ($dossier_brut === null) {
6338     // Affichage du message d'information
6339     echo _("Vous n'avez pas consulté de dossier pour le moment.");
6340     // Exit
6341     return;
6342     }
6343    
6344     $ct_tbody = '';
6345    
6346     $i = 0;
6347     // On construit le contenu du tableau
6348     foreach ($dossiers_consulte as $key => $value) {
6349    
6350     // Récupération en bdd des données necessaire par idx
6351     $conf = $this->get_config_dossier_consulter($value);
6352    
6353     // Composition de la requête
6354     $query = sprintf("
6355     SELECT
6356     %s
6357     FROM
6358     %s
6359     WHERE
6360     %s",
6361     $conf["query_ct_select"],
6362     $conf["query_ct_from"],
6363     $conf["query_ct_where_id_dossier_consulte"]
6364     );
6365    
6366     // Exécution de la requête
6367     $res = $this->f->db->query($query);
6368     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
6369     $this->f->isDatabaseError($res);
6370     $row = $res->fetchRow(DB_FETCHMODE_ASSOC);
6371    
6372     // Determination de la route à utiliser.
6373     switch ($row['code']) {
6374     case 'IN':
6375     $route="dossier_contentieux_toutes_infractions";
6376     break;
6377     case 'RE':
6378     $route="dossier_contentieux_tous_recours";
6379     break;
6380     default: $route="dossier_instruction";
6381     }
6382    
6383     // On construit l'attribut href du lien
6384     $ct_href = sprintf(
6385     $template_href,
6386     $route,
6387     // idx
6388     $row['dossier']
6389     );
6390    
6391     if ($i > $nb_dossiers){
6392     $good_template_line = $template_line_hidden;
6393     } else {
6394     $good_template_line = $template_line;
6395     }
6396     // Construction d'une ligne
6397     $ct_tbody .= sprintf(
6398     $good_template_line,
6399     // Colonne 1 - Numéro de dossier
6400     sprintf(
6401     $template_link,
6402     $ct_href,
6403     $row['dossier_libelle']
6404     ),
6405     // Colonne 2 - Nom du pétitionnaire
6406     sprintf(
6407     $template_link,
6408     $ct_href,
6409     $row["nom_petitionnaire"]
6410     ),
6411     // Colonne 3 - Date depot
6412     sprintf(
6413     $template_link,
6414     $ct_href,
6415     $this->f->formatDate($row["date_depot"])
6416     )
6417     );
6418    
6419     $i++;
6420     }
6421     // Affichage du tableau listant les dossiers
6422     printf(
6423     $template_table,
6424     // Colonne 1 - Numéro de dossier
6425     _('dossier'),
6426     // Colonne 2 - petitionnaire
6427     _('nom_petitionnaire'),
6428     // Colonne 3 - date depot
6429     _('date_depot'),
6430     // Contenu du tableau
6431     $ct_tbody
6432     );
6433    
6434     // On affiche le footer seulement si l'utilisateur à consulté plus de
6435     // dossier que le nombre de dossier affiché par défaut (paramétrage)
6436     if ($i > $nb_dossiers) {
6437     // Affichage du footer
6438     printf(
6439     $template_footer_consulter,
6440     "get_all_dossier_consulte($(this).parent().parent().parent().parent().attr('id'))",
6441     _("Afficher +")
6442     );
6443     }
6444     }
6445    
6446 mbroquet 3730 }

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26