/[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 7067 - (hide annotations)
Wed Jul 5 14:42:38 2017 UTC (7 years, 7 months ago) by softime
File size: 207855 byte(s)
* Merge depuis la branche d'intégration evol_contentieux (4.3.0)

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26