/[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 7366 - (hide annotations)
Tue Aug 8 09:19:57 2017 UTC (7 years, 6 months ago) by softime
File size: 216226 byte(s)
* Merge de la branche d'intégration 4.4.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 softime 7366 <p class="text-muted">%s %s</p>
2288 jymadier 4132 </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 softime 7366 // Initialisation du tableau des paramètres avec ses valeurs par défaut
2342 jymadier 4132 $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 softime 7366 if ($filtre === "instructeur") {
2386 jymadier 4132 //
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 softime 7366 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 softime 7366 * WIDGET DASHBOARD - widget_commission_retours
2474     *
2475     * Ce widget est configurable via l'interface Web. Lors de la création
2476     * du widget dans le paramétrage il est possible de spécifier la ou les
2477     * options suivantes :
2478     *
2479     * - filtre :
2480     * = instructeur
2481     * = division
2482     * = aucun
2483     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2484     *
2485     * @param string $content Arguments pour le widget, ici les filtres.
2486     * @return void
2487     */
2488     function view_widget_commission_retours($content = null) {
2489     // Liste des paramètres
2490     $params = array("filtre", );
2491     // Formatage des arguments reçus en paramètres
2492     $arguments = $this->get_arguments($content, $params);
2493     // Récupération de la configuration du widget
2494     $conf = $this->get_config_commission_retours($arguments);
2495     //
2496     $filtre = $conf["arguments"]["filtre"];
2497    
2498     /**
2499     * Composition de la requête
2500     */
2501     //
2502     $query = sprintf(
2503     "SELECT
2504     count(*)
2505     FROM
2506     %s
2507     WHERE
2508     %s",
2509     $conf["query_ct_from"],
2510     $conf["query_ct_where_common"]
2511     );
2512    
2513     /**
2514     * Exécution de la requête
2515     */
2516     //
2517     $res = $this->f->db->getone($query);
2518     $this->addToLog(__METHOD__ . "(): db->getone(\"" . $query . "\");", VERBOSE_MODE);
2519     $this->f->isDatabaseError($res);
2520    
2521     // Affichage du message d'informations
2522     printf(
2523     $this->template_help,
2524     $conf["message_help"]
2525     );
2526    
2527     if (intval($res) === 0) {
2528     //
2529     echo _("Aucun retour de commission non lu.");
2530     return;
2531     }
2532    
2533    
2534     /**
2535     * Panel
2536     */
2537     $template_panel = '
2538     <div class="panel panel-box">
2539     <div class="list-justified-container">
2540     <ul class="list-justified text-center">
2541     %s
2542     </ul>
2543     </div>
2544     </div>';
2545     $panel = "";
2546     //
2547     $template_elem = '
2548     <li>
2549     <span class="size-h3 box-icon rounded %s">%s</span>
2550     <p class="text-muted">%s %s</p>
2551     </li>
2552     ';
2553     $panel_elem = sprintf(
2554     $template_elem,
2555     "bg-info",
2556     intval($res),
2557     _("Non lu"),
2558     ""
2559     );
2560     $panel .= sprintf(
2561     $template_panel,
2562     $panel_elem
2563     );
2564     echo $panel;
2565    
2566     /**
2567     * Widget footer
2568     */
2569     if ($filtre === "aucun") {
2570     $obj_href_more_link = "commission_tous_retours";
2571     } elseif ($filtre === "division") {
2572     $obj_href_more_link = "commission_retours_ma_division";
2573     } else {
2574     $obj_href_more_link = "commission_mes_retours";
2575     }
2576    
2577     //
2578     if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link . "_tab"), "OR")) {
2579     return;
2580     }
2581     // Affichage du footer
2582     printf(
2583     $this->template_footer,
2584     // href
2585     sprintf(
2586     '../scr/tab.php?obj=%s',
2587     $obj_href_more_link
2588     ),
2589     // titre
2590     _("Voir +")
2591     );
2592     }
2593    
2594     /**
2595     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2596     * consultation'.
2597     *
2598     * @return array
2599     */
2600     function get_config_commission_retours($arguments) {
2601     // Initialisation du tableau des paramètres avec ses valeurs par défaut
2602     $arguments_default = array(
2603     "filtre" => "instructeur",
2604     );
2605     // Vérification des arguments
2606     foreach ($arguments_default as $key => $value) {
2607     //
2608     if (isset($arguments[$key])) {
2609     //
2610     $elem = trim($arguments[$key]);
2611     //
2612     if ($key === "filtre"
2613     && in_array($elem, array("instructeur", "division", "aucun"))) {
2614     // La valeur doit être dans cette liste
2615     $arguments[$key] = $elem;
2616     continue;
2617     }
2618     }
2619     //
2620     $arguments[$key] = $value;
2621     }
2622     //
2623     $filtre = $arguments["filtre"];
2624    
2625     /**
2626     * Construction de la requête
2627     */
2628     // FROM
2629     $query_ct_from ="
2630     " . DB_PREFIXE . "dossier_commission
2631     LEFT JOIN " . DB_PREFIXE . "dossier
2632     ON dossier_commission.dossier=dossier.dossier
2633     LEFT JOIN " . DB_PREFIXE . "commission
2634     ON dossier_commission.commission=commission.commission
2635     %s
2636     %s
2637     %s";
2638    
2639     $query_ct_where_instructeur_filter = "";
2640     $query_ct_where_division_filter = "";
2641     $query_ct_where_collectivite_filter = "";
2642    
2643     // Filtre sur les dossiers qui concernent l'utilisateur
2644     if ($filtre === "instructeur") {
2645     //
2646     $query_ct_where_instructeur_filter = " JOIN " . DB_PREFIXE . "instructeur
2647     ON dossier.instructeur=instructeur.instructeur
2648     JOIN " . DB_PREFIXE . "om_utilisateur
2649     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2650     AND om_utilisateur.login='" . $_SESSION['login'] . "'
2651     ";
2652     } else {
2653     $query_ct_where_instructeur_filter = " LEFT JOIN " . DB_PREFIXE . "instructeur
2654     ON dossier.instructeur=instructeur.instructeur
2655     LEFT JOIN " . DB_PREFIXE . "om_utilisateur
2656     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
2657     }
2658     // Filtre sur les dossier de la division
2659     if ($filtre === "division") {
2660     //
2661     $query_ct_where_division_filter = " JOIN " . DB_PREFIXE . "division
2662     ON dossier.division=division.division
2663     AND division.division = " . $_SESSION['division'] . "
2664     ";
2665     } else {
2666     $query_ct_where_division_filter = " LEFT JOIN " . DB_PREFIXE . "division
2667     ON dossier.division=division.division";
2668     }
2669     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
2670     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
2671     // collectivité
2672     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2673     $query_ct_where_collectivite_filter = " JOIN " . DB_PREFIXE . "om_collectivite
2674     ON dossier.om_collectivite=om_collectivite.om_collectivite
2675     AND om_collectivite.om_collectivite=" . $_SESSION['collectivite'] . "
2676     ";
2677     } else {
2678     $query_ct_where_collectivite_filter = " LEFT JOIN " . DB_PREFIXE . "om_collectivite
2679     ON dossier.om_collectivite=om_collectivite.om_collectivite
2680     ";
2681     }
2682    
2683     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
2684    
2685     // WHERE - COMMON
2686     $query_ct_where_common = "
2687     dossier_commission.lu IS FALSE
2688     ";
2689    
2690     /**
2691     * Message d'aide
2692     */
2693     //
2694     $message_filtre = "";
2695     //
2696     switch ($filtre) {
2697     case "instructeur":
2698     $message_filtre = " " . _("dont je suis l'instructeur");
2699     break;
2700     case "division":
2701     $message_filtre = " " . _("situés dans ma division");
2702     break;
2703     case "aucun":
2704     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
2705     $message_filtre = " " . _("situés dans ma collectivité");
2706     } else {
2707     $message_filtre = " " . _("situés dans toutes les collectivités");
2708     }
2709     break;
2710     }
2711     //
2712     $message_help = sprintf(
2713     _("Les retours de commission marqués comme 'non lu' qui concernent des " .
2714     "dossiers d'instruction%s."),
2715     $message_filtre
2716     );
2717    
2718     return array(
2719     "arguments" => $arguments,
2720     "message_help" => $message_help,
2721     "query_ct_from" => $query_ct_from,
2722     "query_ct_where_common" => $query_ct_where_common,
2723     );
2724    
2725     }
2726    
2727    
2728     /**
2729 softime 4291 * WIDGET DASHBOARD - Dossiers en incomplet ou majoration sans retour RAR
2730     *
2731     * @return void
2732     */
2733     function view_widget_dossiers_evenement_incomplet_majoration($content = null) {
2734    
2735     /**
2736     * Ce widget est configurable via l'interface Web. Lors de la création
2737     * du widget dans le paramétrage il est possible de spécifier la ou les
2738     * options suivantes :
2739     *
2740     * - filtre :
2741     * = instructeur
2742     * = division
2743     * = aucun
2744     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
2745     */
2746     // Liste des paramètres
2747     $params = array("filtre", );
2748     // Formatage des arguments reçus en paramètres
2749     $arguments = $this->get_arguments($content, $params);
2750     // Récupération de la configuration du widget
2751     $conf = $this->get_config_dossiers_evenement_incomplet_majoration($arguments);
2752     //
2753     $filtre = $conf["arguments"]["filtre"];
2754    
2755     /**
2756     * Composition de la requête
2757     */
2758     //
2759     $query = sprintf("
2760     SELECT
2761     %s
2762     FROM
2763     %s
2764     WHERE
2765     %s
2766 softime 6565 %s
2767 softime 4291 ORDER BY
2768     %s
2769     LIMIT 10",
2770     $conf["query_ct_select"],
2771     $conf["query_ct_from"],
2772     $conf["query_ct_where_common"],
2773 softime 6565 $conf["query_ct_where_groupe"],
2774 softime 4291 $conf["query_ct_orderby"]
2775     );
2776    
2777     // Exécution de la requête
2778     $res = $this->f->db->query($query);
2779     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
2780     $this->f->isDatabaseError($res);
2781    
2782     // Affichage du message d'informations
2783     printf(
2784     $this->template_help,
2785     $conf["message_help"]
2786     );
2787    
2788     /**
2789     * Si il n'y a aucun dossier à afficher, alors on affiche un message
2790     * clair à l'utilisateur et on sort de la vue.
2791     */
2792     // Si il n'y a aucun dossier à afficher
2793     if ($res->numrows() == 0) {
2794     // Affichage du message d'informations
2795     echo _("Vous n'avez pas de dossiers avec un evenement incomplet ou majoration sans RAR pour le moment.");
2796     // Exit
2797     return;
2798     }
2799    
2800     /**
2801     * Template nécessaires à l'affichage du widget
2802     */
2803     // Lien vers le dossier d'instructions
2804    
2805     // Bouton consulter
2806     $template_btn_consulter = '
2807     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
2808     ._('Consulter')
2809     .'</span>
2810     ';
2811    
2812     $template_table = '
2813     <table class="tab-tab">
2814     <thead>
2815     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
2816     <th class="title col-0 firstcol">
2817     <span class="name">
2818     %s
2819     </span>
2820     </th>
2821     <th class="title col-1">
2822     <span class="name">
2823     %s
2824     </span>
2825     </th>
2826     <th class="title col-2 lastcol">
2827     <span class="name">
2828     %s
2829     </span>
2830     </th>
2831     </tr>
2832     </thead>
2833     <tbody>
2834     %s
2835     </tbody>
2836     </table>
2837     ';
2838    
2839     // Données dans le tableau
2840     //
2841     $template_line = '
2842     <tr class="tab-data odd">
2843     <td class="col-1 firstcol">
2844     %s
2845     </td>
2846     <td class="col-1">
2847     %s
2848     </td>
2849     <td class="col-2 lastcol">
2850     %s
2851     </td>
2852     </tr>
2853     ';
2854     //
2855     $template_href = '../scr/form.php?obj=dossier_instruction&amp;action=3&amp;idx=%s';
2856     //
2857     $template_link = '
2858     <a class="lienTable" href="%s">
2859     %s
2860     </a>
2861     ';
2862    
2863     /**
2864     * Si il y a des dossiers à afficher, alors on affiche le widget.
2865     */
2866     // On construit le contenu du tableau
2867     $ct_tbody = '';
2868     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
2869     // On construit l'attribut href du lien
2870     $ct_href = sprintf(
2871     $template_href,
2872     // idx
2873     $row["dossier"]
2874     );
2875     // On construit la ligne
2876     $ct_tbody .= sprintf(
2877     $template_line,
2878     // Colonne 1 - Bouton consulter
2879     sprintf(
2880     $template_link,
2881     $ct_href,
2882     $template_btn_consulter
2883     ),
2884     // Colonne 2 - Numéro de dossier
2885     sprintf(
2886     $template_link,
2887     $ct_href,
2888     $row["dossier_libelle"]
2889     ),
2890     // Colonne 3 - Date de dépôt
2891     sprintf(
2892     $template_link,
2893     $ct_href,
2894     $this->f->formatDate($row["date_depot"])
2895     )
2896     );
2897     }
2898     // Affichage du tableau listant les dossiers
2899     printf(
2900     $template_table,
2901     // Colonne 1 - Bouton consulter
2902     '',
2903     // Colonne 2 - Numéro de dossier
2904     _('dossier'),
2905     // Colonne 3 - Date de dépôt du dossier
2906     _('date_depot'),
2907     // Contenu du tableau
2908     $ct_tbody
2909     );
2910    
2911     // Affichage du footer
2912     printf(
2913     $this->template_footer,
2914     // href (avec les paramètres du widget)
2915     sprintf(
2916     "../scr/tab.php?obj=dossiers_evenement_incomplet_majoration&filtre=%s",
2917     $filtre
2918     ),
2919     // titre
2920     _("Voir tous les dossiers evenement incomplet ou majoration sans RAR")
2921     );
2922     }
2923    
2924    
2925     /**
2926     * Cette méthode permet de récupérer la configuration du widget 'Retours de
2927     * consultation'.
2928     *
2929     * @return array
2930     */
2931     function get_config_dossiers_evenement_incomplet_majoration($arguments) {
2932     // Initialisation du tableau des paramètres avec ses valeur par défaut
2933     $arguments_default = array(
2934     "filtre" => "instructeur",
2935     );
2936     // Vérification des arguments
2937     foreach ($arguments_default as $key => $value) {
2938     //
2939     if (isset($arguments[$key])) {
2940     //
2941     $elem = trim($arguments[$key]);
2942     //
2943     if ($key === "filtre"
2944     && in_array($elem, array("instructeur", "division", "aucun"))) {
2945     // La valeur doit être dans cette liste
2946     $arguments[$key] = $elem;
2947     continue;
2948     }
2949     }
2950     //
2951     $arguments[$key] = $value;
2952     }
2953     //
2954     $filtre = $arguments["filtre"];
2955    
2956     /**
2957     * Construction de la requête
2958     */
2959     // SELECT
2960     $query_ct_select = "
2961     dossier.dossier,
2962     dossier.dossier_libelle,
2963     dossier.date_depot
2964     ";
2965     // SELECT - CHAMPAFFICHE
2966     $query_ct_select_champaffiche = array(
2967     'dossier.dossier as "'._("dossier").'"',
2968     'dossier.dossier_libelle as "'._("dossier").'"',
2969     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"'
2970     );
2971     // FROM
2972     $query_ct_from = "
2973     ".DB_PREFIXE."dossier
2974     LEFT JOIN
2975     ".DB_PREFIXE."instruction
2976     ON
2977     dossier.dossier = instruction.dossier
2978     LEFT JOIN
2979     ".DB_PREFIXE."evenement
2980     ON
2981     instruction.evenement = evenement.evenement
2982 nhaye 4791 %s
2983     %s
2984     %s
2985 softime 4291 ";
2986 nhaye 4791
2987     $query_ct_where_instructeur_filter = "";
2988     $query_ct_where_division_filter = "";
2989     $query_ct_where_collectivite_filter = "";
2990     // Filtre sur les dossiers qui concernent l'utilisateur
2991     if ($filtre == "instructeur") {
2992     //
2993     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
2994     ON dossier.instructeur=instructeur.instructeur
2995     JOIN ".DB_PREFIXE."om_utilisateur
2996     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
2997     AND om_utilisateur.login='".$_SESSION['login']."'
2998     ";
2999 nhaye 4793 } else {
3000 nmeucci 4799 $query_ct_where_instructeur_filter = " LEFT JOIN ".DB_PREFIXE."instructeur
3001 nhaye 4793 ON dossier.instructeur=instructeur.instructeur
3002     LEFT JOIN ".DB_PREFIXE."om_utilisateur
3003     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur ";
3004 nhaye 4791 }
3005     // Filtre sur les dossier de la division
3006     if ($filtre == "division") {
3007     //
3008     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3009     ON dossier.division=division.division
3010     AND division.division = ".$_SESSION['division']."
3011     ";
3012 nhaye 4793 } else {
3013 nmeucci 4799 $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
3014 nhaye 4793 ON dossier.division=division.division";
3015 nhaye 4791 }
3016     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3017     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3018     // collectivité
3019     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3020     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3021     ON dossier.om_collectivite=om_collectivite.om_collectivite
3022     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3023     ";
3024 nmeucci 4799 } else {
3025     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3026     ON dossier.om_collectivite=om_collectivite.om_collectivite
3027     ";
3028 nhaye 4791 }
3029    
3030     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3031    
3032 softime 4291 // WHERE - COMMON
3033     $query_ct_where_common = "
3034     (
3035     LOWER(evenement.type) = 'incompletude' OR
3036     LOWER(evenement.type) = 'majoration_delai'
3037     ) AND
3038     (
3039     instruction.date_envoi_rar > CURRENT_TIMESTAMP - interval '1 month' AND
3040     instruction.date_envoi_rar <= CURRENT_TIMESTAMP
3041     ) AND
3042     instruction.date_retour_rar IS NULL AND
3043     evenement.retour = 'f'
3044     ";
3045    
3046     // ORDER BY
3047     $query_ct_orderby = "
3048     dossier.date_depot desc
3049     ";
3050    
3051 softime 6565 $query_ct_where_groupe = "";
3052     // Gestion des groupes et confidentialité
3053     include('../sql/pgsql/filter_group_widgets.inc.php');
3054    
3055 softime 4291 /**
3056     * Message d'aide
3057     */
3058     //
3059     $message_filtre = "";
3060     //
3061     switch ($filtre) {
3062     case "instructeur":
3063     $message_filtre = " "._("dont je suis l'instructeur");
3064     break;
3065     case "division":
3066     $message_filtre = " "._("situés dans ma division");
3067     break;
3068     case "aucun":
3069     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3070     $message_filtre = " "._("situés dans ma collectivité");
3071     } else {
3072     $message_filtre = " "._("situés dans toutes les collectivités");
3073     }
3074     break;
3075     }
3076     //
3077     $message_help = sprintf(
3078     _("Les dossiers d'instruction%s qui ont un evenement incomplet ou majoration".
3079     " avec une date d'envoi RAR, mais pas de date de retour RAR."),
3080     $message_filtre
3081     );
3082    
3083     /**
3084     * Return
3085     */
3086     //
3087     return array(
3088     "arguments" => $arguments,
3089     "message_help" => $message_help,
3090     "query_ct_select" => $query_ct_select,
3091     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3092     "query_ct_from" => $query_ct_from,
3093     "query_ct_where_common" => $query_ct_where_common,
3094 softime 6565 "query_ct_where_groupe" => $query_ct_where_groupe,
3095 softime 4291 "query_ct_orderby" => $query_ct_orderby,
3096     );
3097     }
3098    
3099 softime 6565
3100     /**
3101     * WIDGET DASHBOARD - widget_infos_profil.
3102     */
3103     function view_widget_infos_profil($content = null) {
3104    
3105     /**
3106     * Template nécessaires à l'affichage du widget
3107     */
3108     //
3109     $template_table = '
3110     </br>
3111     <h4>Liste des accès</h4>
3112     <table class="tab-tab">
3113     <thead>
3114     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3115     <th class="title col-0 firstcol">
3116     <span class="name">
3117     %s
3118     </span>
3119     </th>
3120     <th class="title col-1">
3121     <span class="name">
3122     %s
3123     </span>
3124     </th>
3125     <th class="title col-2 lastcol">
3126     <span class="name">
3127     %s
3128     </span>
3129     </th>
3130     </tr>
3131     </thead>
3132     <tbody>
3133     %s
3134     </tbody>
3135     </table>
3136     ';
3137     //
3138     $template_line = '
3139     <tr class="tab-data odd">
3140     <td class="col-1 firstcol">
3141     %s
3142     </td>
3143     <td class="col-1">
3144     %s
3145     </td>
3146     <td class="col-2 lastcol">
3147     %s
3148     </td>
3149     </tr>
3150     ';
3151    
3152    
3153     // Récupère les informations sur l'utilisateur
3154     $this->f->getUserInfos();
3155    
3156     // Si l'utilisateur est loggé $_SESSION existe
3157     if(isset($_SESSION['login']) AND !empty($_SESSION['login'])) {
3158    
3159     // On compose le bloc html d'affichage des informations de l'utilisateur
3160     $bloc_infos_profil = "
3161     %s
3162     <div class=\"profil-infos\">
3163     <h4>Utilisateur</h4>
3164     <div class=\"profil-infos-profil\">
3165     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3166     </div>
3167     <div class=\"profil-infos-nom\">
3168     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3169     </div>
3170     ";
3171    
3172     // Si l'utilisateur connecté est un instructeur
3173     if ($this->f->isUserInstructeur() === true) {
3174    
3175     // On compose le bloc html d'affichage des informations de l'utilisateur
3176     $bloc_infos_profil .= "
3177     <div class=\"profil-infos-division\">
3178     <span class=\"libelle\">%s</span> : <span class=\"value\">%s</span>
3179     </div>
3180     ";
3181    
3182     // Requête de récupération de la qualité de l'instructeur
3183     $query = sprintf(
3184     "SELECT
3185     instructeur_qualite.libelle
3186     FROM
3187     " . DB_PREFIXE. "instructeur
3188     INNER JOIN " . DB_PREFIXE . "instructeur_qualite
3189     ON instructeur.instructeur_qualite=instructeur_qualite.instructeur_qualite
3190     WHERE
3191     instructeur.om_utilisateur = " . intval($this->f->om_utilisateur["om_utilisateur"])
3192     );
3193     $instr_qualite_lib = $this->f->db->getone($query);
3194     $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
3195     $this->f->isDatabaseError($instr_qualite_lib);
3196     // S'il y a un résultat
3197     if ($instr_qualite_lib !== null) {
3198     $bloc_infos_profil .= "
3199     <div class=\"profil-infos-instructeur_qualite\">
3200     <span class=\"libelle\">" . _("Qualité") . "</span> : <span class=\"value\">" . $instr_qualite_lib . "</span>
3201     </div>
3202     ";
3203     }
3204     } else {
3205     // Pour éviter une NOTICE
3206     $this->f->om_utilisateur["code"] = '';
3207     }
3208     //
3209     $bloc_infos_profil .= "</div>";
3210    
3211     // Ajout d'un tableau listant les groupes de l'utilisateur ainsi que ses
3212     // accès aux groupes
3213     $msg_erreur_groupe = '';
3214     $bloc_tableau_droits = '';
3215     // Si le profil et l'utilisateur n'ont pas de groupe défini
3216     if (isset($_SESSION['groupe']) === false) {
3217     $msg_erreur_groupe = '
3218     <div class="message ui-widget ui-corner-all ui-state-highlight ui-state-error borderless">
3219     <p>
3220     <span class="ui-icon ui-icon-info"></span>
3221     <span class="text">Problème de paramétrage : vous n\'avez pas de groupe associé.</span>
3222     </p>
3223     </div>
3224     ';
3225     } else {
3226     $ct_tbody = '';
3227     // On construit le contenu du tableau
3228     foreach ($_SESSION['groupe'] as $key => $value) {
3229     if ($value['confidentiel'] === true) {
3230     $value['confidentiel'] = _('Oui');
3231     }
3232     else {
3233     $value['confidentiel'] = _('Non');
3234     }
3235     if ($value['enregistrement_demande'] === true) {
3236     $value['enregistrement_demande'] = _('Oui');
3237     }
3238     else {
3239     $value['enregistrement_demande'] = _('Non');
3240     }
3241     // On construit la ligne
3242     $ct_tbody .= sprintf(
3243     $template_line,
3244     // Colonne 1 - Libellé du groupe
3245     $value["libelle"],
3246     // Colonne 2 - A accès aux dossiers confidentiels
3247     $value["confidentiel"],
3248     // Colonne 3 - Peut créer une demande
3249     $value["enregistrement_demande"]
3250     );
3251     }
3252     // Affichage du tableau listant les dossiers
3253     $bloc_infos_profil .= sprintf(
3254     $template_table,
3255     // Colonne 1 - Libellé du groupe
3256     _('groupe'),
3257     // Colonne 2 - A accès aux dossiers confidentiels
3258     _('dossiers confidentiels'),
3259     // Colonne 3 - Peut créer une demande
3260     _('enregistrement demande'),
3261     // Contenu du tableau
3262     $ct_tbody
3263     );
3264     }
3265     // Affichage du bloc html avec les variables associées
3266     printf(
3267     $bloc_infos_profil,
3268     $msg_erreur_groupe,
3269     _('Profil'), $this->f->om_utilisateur["libelle_profil"],
3270     _('Nom'), $this->f->om_utilisateur["nom"],
3271     _('Division'), $this->f->om_utilisateur["code"]
3272     );
3273     }
3274     }
3275    
3276    
3277     /**
3278     * Cette méthode permet de récupérer la configuration du widget
3279     * 'Mes contradictoires' ou 'Les contradictoires'.
3280     *
3281     * @return array
3282     */
3283     function get_config_dossier_contentieux_contradictoire($arguments) {
3284     // Initialisation du tableau des paramètres avec ses valeur par défaut
3285     $arguments_default = array(
3286     "filtre" => "instructeur"
3287     );
3288     // Vérification des arguments
3289     foreach ($arguments_default as $key => $value) {
3290     //
3291     if (isset($arguments[$key])) {
3292     //
3293     $elem = trim($arguments[$key]);
3294     //
3295     if ($key === "filtre"
3296     && in_array($elem, array("instructeur", "division", "aucun"))) {
3297     // La valeur doit être dans cette liste
3298     $arguments[$key] = $elem;
3299     continue;
3300     }
3301     }
3302     //
3303     $arguments[$key] = $value;
3304     }
3305     $filtre = $arguments["filtre"];
3306    
3307     // SELECT - CHAMPAFFICHE
3308     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
3309     dossier.terrain_adresse_voie,\' \',
3310     dossier.terrain_adresse_lieu_dit,\' \',
3311     dossier.terrain_adresse_code_postal,\' \',
3312     dossier.terrain_adresse_localite,\' \',
3313     dossier.terrain_adresse_bp,\' \',
3314     dossier.terrain_adresse_cedex
3315 softime 7067 )) as "'._("localisation").'"';
3316 softime 6565 //
3317     $case_contrevenant = "
3318     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
3319     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
3320     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
3321     END
3322     ";
3323     //
3324     $query_ct_select_champaffiche = array(
3325     'dossier.dossier as "'._("dossier").'"',
3326     'dossier.dossier_libelle as "'._("dossier").'"',
3327     $trim_concat_terrain,
3328     $case_contrevenant.' as "'._("contrevenant").'"',
3329     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
3330     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
3331     'etat.libelle as "'._("etat").'"',
3332     'to_char(dossier.date_contradictoire, \'DD/MM/YYYY\') as "'._("date_contradictoire").'"',
3333     'to_char(dossier.date_retour_contradictoire, \'DD/MM/YYYY\') as "'._("date_retour_contradictoire").'"',
3334     );
3335    
3336     /**
3337     * Construction de la requête
3338     */
3339     // SELECT
3340     $query_ct_select = "
3341     dossier.dossier,
3342     dossier.dossier_libelle,
3343     dossier.date_contradictoire,
3344     dossier.date_retour_contradictoire
3345     ";
3346    
3347     // FROM
3348     $query_ct_from = "
3349     ".DB_PREFIXE."dossier
3350     LEFT JOIN ".DB_PREFIXE."etat
3351     ON dossier.etat = etat.etat
3352     LEFT JOIN (
3353     SELECT *
3354     FROM ".DB_PREFIXE."lien_dossier_demandeur
3355     INNER JOIN ".DB_PREFIXE."demandeur
3356     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
3357     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
3358     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
3359     ) as demandeur_contrevenant
3360     ON demandeur_contrevenant.dossier = dossier.dossier
3361     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3362     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3363     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3364     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3365     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3366     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3367     LEFT JOIN ".DB_PREFIXE."avis_decision
3368     ON avis_decision.avis_decision=dossier.avis_decision
3369     %s
3370     %s
3371     %s
3372     ";
3373    
3374     $query_ct_where_instructeur_filter = "";
3375     $query_ct_where_division_filter = "";
3376     $query_ct_where_collectivite_filter = "";
3377     // Filtre sur les dossiers qui concernent l'utilisateur
3378     if ($filtre == "instructeur") {
3379     //
3380     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3381     ON dossier.instructeur=instructeur.instructeur
3382     OR dossier.instructeur_2=instructeur.instructeur
3383     JOIN ".DB_PREFIXE."om_utilisateur
3384     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3385     AND om_utilisateur.login='".$_SESSION['login']."'
3386     ";
3387     }
3388    
3389     // Filtre sur les dossier de la division
3390     if ($filtre == "division") {
3391     //
3392     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3393     ON dossier.division=division.division
3394     AND division.division = ".$_SESSION['division']."
3395     ";
3396     }
3397    
3398     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3399     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3400     // collectivité
3401     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3402     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3403     ON dossier.om_collectivite=om_collectivite.om_collectivite
3404     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3405     ";
3406     } else {
3407     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3408     ON dossier.om_collectivite=om_collectivite.om_collectivite
3409     ";
3410     }
3411    
3412     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3413    
3414     // WHERE - COMMON
3415     $query_ct_where_common = "
3416     LOWER(dossier_autorisation_type.code) = LOWER('IN')
3417     AND NOT EXISTS
3418     (SELECT NULL
3419     FROM ".DB_PREFIXE."instruction
3420     INNER JOIN ".DB_PREFIXE."evenement
3421     ON instruction.evenement = evenement.evenement
3422     WHERE instruction.dossier = dossier.dossier
3423     AND evenement.type = 'annul_contradictoire')
3424     AND (dossier.date_contradictoire >= CURRENT_DATE + interval '3 weeks'
3425     OR (dossier.date_contradictoire IS NOT NULL
3426     AND dossier.date_retour_contradictoire IS NULL))
3427     AND date_ait IS NULL
3428     ";
3429    
3430     // ORDER BY
3431     $query_ct_orderby = "
3432     dossier.date_depot ASC
3433     ";
3434    
3435     $query_ct_where_groupe = "";
3436     // Gestion des groupes et confidentialité
3437     include('../sql/pgsql/filter_group_widgets.inc.php');
3438    
3439     /**
3440     * Message d'aide
3441     */
3442     //
3443     $message_filtre = "";
3444     //
3445     switch ($filtre) {
3446     case "instructeur":
3447     $message_filtre = " "._("dont je suis l'instructeur");
3448     break;
3449     case "division":
3450     $message_filtre = " "._("situés dans ma division");
3451     break;
3452     case "aucun":
3453     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3454     $message_filtre = " "._("situés dans ma collectivité");
3455     } else {
3456     $message_filtre = " "._("situés dans toutes les collectivités");
3457     }
3458     break;
3459     }
3460     //
3461     $message_help = sprintf(
3462     _("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éé."),
3463     $message_filtre
3464     );
3465    
3466     /**
3467     * Return
3468     */
3469     //
3470     return array(
3471     "arguments" => $arguments,
3472     "message_help" => $message_help,
3473     "query_ct_select" => $query_ct_select,
3474     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3475     "query_ct_from" => $query_ct_from,
3476     "query_ct_where" => $query_ct_where_common,
3477     "query_ct_where_groupe" => $query_ct_where_groupe,
3478     "query_ct_orderby" => $query_ct_orderby,
3479     );
3480     }
3481    
3482     /**
3483     * WIDGET DASHBOARD - Les ou Mes dossiers contradictoires
3484     * @return void
3485     */
3486     function view_widget_dossier_contentieux_contradictoire($content = null) {
3487     /**
3488     * Ce widget est configurable via l'interface Web. Lors de la création
3489     * du widget dans le paramétrage il est possible de spécifier la ou les
3490     * options suivantes :
3491     * - filtre :
3492     * = instructeur
3493     * = division
3494     * = aucun
3495     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
3496     */
3497     // Liste des paramètres
3498     $params = array("filtre");
3499     // Formatage des arguments reçus en paramètres
3500     $arguments = $this->get_arguments($content, $params);
3501     // Récupération de la configuration du widget
3502     $conf = $this->get_config_dossier_contentieux_contradictoire($arguments);
3503    
3504     $filtre = $conf["arguments"]["filtre"];
3505     //
3506    
3507    
3508     /**
3509     * Composition de la requête
3510     */
3511     //
3512     $query = sprintf("
3513     SELECT
3514     %s
3515     FROM
3516     %s
3517     WHERE
3518     %s
3519     %s
3520     ORDER BY
3521     %s
3522     LIMIT 5",
3523     $conf["query_ct_select"],
3524     $conf["query_ct_from"],
3525     $conf["query_ct_where"],
3526     $conf["query_ct_where_groupe"],
3527     $conf["query_ct_orderby"]
3528     );
3529    
3530     /**
3531     * Exécution de la requête
3532     */
3533     //
3534     $res = $this->f->db->query($query);
3535     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
3536     $this->f->isDatabaseError($res);
3537    
3538     // Affichage du message d'informations
3539     printf(
3540     $this->template_help,
3541     $conf["message_help"]
3542     );
3543     /**
3544     * Si il n'y a aucun dossier à afficher, alors on affiche un message
3545     * clair à l'utilisateur et on sort de la vue.
3546     */
3547     // Si il n'y a aucun dossier à afficher
3548     if ($res->numrows() == 0) {
3549     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éé.");
3550     return;
3551     }
3552    
3553     /**
3554     * Template nécessaires à l'affichage du widget
3555     */
3556     //
3557     $template_table = '
3558     <table class="tab-tab">
3559     <thead>
3560     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3561     <th class="title col-0 firstcol">
3562     <span class="name">
3563     %s
3564     </span>
3565     </th>
3566     <th class="title col-1">
3567     <span class="name">
3568     %s
3569     </span>
3570     </th>
3571     <th class="title col-2">
3572     <span class="name">
3573     %s
3574     </span>
3575     </th>
3576     <th class="title col-3 lastcol">
3577     <span class="name">
3578     %s
3579     </span>
3580     </th>
3581     </tr>
3582     </thead>
3583     <tbody>
3584     %s
3585     </tbody>
3586     </table>
3587     ';
3588     //
3589     $template_line = '
3590     <tr class="tab-data odd">
3591     <td class="col-0 firstcol">
3592     %s
3593     </td>
3594     <td class="col-1 ">
3595     %s
3596     </td>
3597     <td class="col-2">
3598     %s
3599     </td>
3600     <td class="col-3 lastcol">
3601     %s
3602     </td>
3603     </tr>
3604     ';
3605     //
3606     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
3607     //
3608     $template_link = '
3609     <a class="lienTable" href="%s">
3610     %s
3611     </a>
3612     ';
3613     // Bouton consulter
3614     $template_btn_consulter = '
3615     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
3616     ._('Consulter')
3617     .'</span>
3618     ';
3619     //
3620    
3621     /**
3622     * Si il y a des dossiers à afficher, alors on affiche le widget.
3623     */
3624     // On construit le contenu du tableau
3625     $ct_tbody = '';
3626     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
3627     // On construit l'attribut href du lien
3628     $ct_href = sprintf(
3629     $template_href,
3630     // idx
3631     $row["dossier"]
3632     );
3633     // On construit la ligne
3634     $ct_tbody .= sprintf(
3635     $template_line,
3636     // Colonne 1 - Numéro de dossier
3637     sprintf(
3638     $template_link,
3639     $ct_href,
3640     $template_btn_consulter
3641     ),
3642     // Colonne 2 - Numéro de dossier
3643     sprintf(
3644     $template_link,
3645     $ct_href,
3646     $row["dossier_libelle"]
3647     ),
3648     // Colonne 3 - Date contradictoire
3649     sprintf(
3650     $template_link,
3651     $ct_href,
3652     $this->f->formatDate($row["date_contradictoire"])
3653     ),
3654     // Colonne 4 - Date retour contradictoire
3655     sprintf(
3656     $template_link,
3657     $ct_href,
3658     $this->f->formatDate($row["date_retour_contradictoire"])
3659     )
3660     );
3661     }
3662     // Affichage du tableau listant les dossiers
3663     printf(
3664     $template_table,
3665     // Colonne 1 - Consulter
3666     '',
3667     // Colonne 2 - Numéro de dossier
3668     _('dossier'),
3669     // Colonne 3 - Date contradictoire
3670     _('date_contradictoire'),
3671     // Colonne 4 - Date retour contradictoire
3672     _('date_retour_contradictoire'),
3673     // Le Contenu
3674     $ct_tbody
3675     );
3676     // Affichage du footer
3677     printf(
3678     $this->template_footer,
3679     "../scr/tab.php?obj=dossier_contentieux_contradictoire&filtre=" . $filtre,
3680     _("Voir +")
3681     );
3682     }
3683    
3684    
3685     /**
3686     * Cette méthode permet de récupérer la configuration du widget 'Mes AIT'
3687     * ou 'Les AIT'.
3688     *
3689     * @return array
3690     */
3691     function get_config_dossier_contentieux_ait($arguments) {
3692     // Initialisation du tableau des paramètres avec ses valeur par défaut
3693     $arguments_default = array(
3694     "filtre" => "instructeur"
3695     );
3696     // Vérification des arguments
3697     foreach ($arguments_default as $key => $value) {
3698     //
3699     if (isset($arguments[$key])) {
3700     //
3701     $elem = trim($arguments[$key]);
3702     //
3703     if ($key === "filtre"
3704     && in_array($elem, array("instructeur", "division", "aucun"))) {
3705     // La valeur doit être dans cette liste
3706     $arguments[$key] = $elem;
3707     continue;
3708     }
3709     }
3710     //
3711     $arguments[$key] = $value;
3712     }
3713     $filtre = $arguments["filtre"];
3714    
3715     // SELECT - CHAMPAFFICHE
3716     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
3717     dossier.terrain_adresse_voie,\' \',
3718     dossier.terrain_adresse_lieu_dit,\' \',
3719     dossier.terrain_adresse_code_postal,\' \',
3720     dossier.terrain_adresse_localite,\' \',
3721     dossier.terrain_adresse_bp,\' \',
3722     dossier.terrain_adresse_cedex
3723 softime 7067 )) as "'._("localisation").'"';
3724 softime 6565 //
3725     $case_contrevenant = "
3726     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
3727     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
3728     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
3729     END
3730     ";
3731     //
3732     $query_ct_select_champaffiche = array(
3733     'dossier.dossier as "'._("dossier").'"',
3734     'dossier.dossier_libelle as "'._("dossier").'"',
3735     $trim_concat_terrain,
3736     $case_contrevenant.' as "'._("contrevenant").'"',
3737     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
3738     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
3739     'etat.libelle as "'._("etat").'"',
3740     'to_char(dossier.date_ait, \'DD/MM/YYYY\') as "'._("date_ait").'"',
3741     'to_char(instruction.date_retour_signature, \'DD/MM/YYYY\') as "'._("date_retour_signature").'"',
3742     );
3743    
3744     /**
3745     * Construction de la requête
3746     */
3747     // SELECT
3748     $query_ct_select = "
3749     dossier.dossier,
3750     dossier.dossier_libelle,
3751     dossier.date_ait,
3752     instruction.date_retour_signature
3753     ";
3754    
3755     // FROM
3756     $query_ct_from = "
3757     ".DB_PREFIXE."dossier
3758     LEFT JOIN ".DB_PREFIXE."etat
3759     ON dossier.etat = etat.etat
3760     LEFT JOIN (
3761     SELECT *
3762     FROM ".DB_PREFIXE."lien_dossier_demandeur
3763     INNER JOIN ".DB_PREFIXE."demandeur
3764     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
3765     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
3766     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
3767     ) as demandeur_contrevenant
3768     ON demandeur_contrevenant.dossier = dossier.dossier
3769     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
3770     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
3771     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
3772     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
3773     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
3774     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
3775     LEFT JOIN ".DB_PREFIXE."avis_decision
3776     ON avis_decision.avis_decision=dossier.avis_decision
3777     INNER JOIN ".DB_PREFIXE."instruction
3778     ON dossier.dossier = instruction.dossier
3779     AND date_retour_signature IS NOT NULL
3780     INNER JOIN ".DB_PREFIXE."evenement
3781     ON instruction.evenement = evenement.evenement
3782     AND LOWER(evenement.type) LIKE 'ait'
3783     %s
3784     %s
3785     %s
3786     ";
3787    
3788     $query_ct_where_instructeur_filter = "";
3789     $query_ct_where_division_filter = "";
3790     $query_ct_where_collectivite_filter = "";
3791     // Filtre sur les dossiers qui concernent l'utilisateur
3792     if ($filtre == "instructeur") {
3793     //
3794     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
3795     ON dossier.instructeur=instructeur.instructeur
3796     OR dossier.instructeur_2=instructeur.instructeur
3797     JOIN ".DB_PREFIXE."om_utilisateur
3798     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
3799     AND om_utilisateur.login='".$_SESSION['login']."'
3800     ";
3801     }
3802    
3803     // Filtre sur les dossier de la division
3804     if ($filtre == "division") {
3805     //
3806     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
3807     ON dossier.division=division.division
3808     AND division.division = ".$_SESSION['division']."
3809     ";
3810     }
3811    
3812     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
3813     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
3814     // collectivité
3815     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3816     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
3817     ON dossier.om_collectivite=om_collectivite.om_collectivite
3818     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
3819     ";
3820     } else {
3821     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
3822     ON dossier.om_collectivite=om_collectivite.om_collectivite
3823     ";
3824     }
3825    
3826     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
3827    
3828     // WHERE
3829     $query_ct_where_common = "
3830     LOWER(dossier_autorisation_type.code) = LOWER('IN')
3831     ";
3832    
3833     // ORDER BY
3834     $query_ct_orderby = "
3835     dossier.date_depot DESC
3836     ";
3837    
3838     $query_ct_where_groupe = "";
3839     // Gestion des groupes et confidentialité
3840     include('../sql/pgsql/filter_group_widgets.inc.php');
3841    
3842     /**
3843     * Message d'aide
3844     */
3845     //
3846     $message_filtre = "";
3847     //
3848     switch ($filtre) {
3849     case "instructeur":
3850     $message_filtre = " "._("dont je suis l'instructeur");
3851     break;
3852     case "division":
3853     $message_filtre = " "._("situés dans ma division");
3854     break;
3855     case "aucun":
3856     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
3857     $message_filtre = " "._("situés dans ma collectivité");
3858     } else {
3859     $message_filtre = " "._("situés dans toutes les collectivités");
3860     }
3861     break;
3862     }
3863     //
3864     $message_help = sprintf(
3865     _("Les infractions%s les plus récentes pour lesquelles il y a un AIT signé."),
3866     $message_filtre
3867     );
3868    
3869     /**
3870     * Return
3871     */
3872     //
3873     return array(
3874     "arguments" => $arguments,
3875     "message_help" => $message_help,
3876     "query_ct_select" => $query_ct_select,
3877     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
3878     "query_ct_from" => $query_ct_from,
3879     "query_ct_where" => $query_ct_where_common,
3880     "query_ct_where_groupe" => $query_ct_where_groupe,
3881     "query_ct_orderby" => $query_ct_orderby
3882     );
3883     }
3884    
3885    
3886     /**
3887     * WIDGET DASHBOARD - Les ou Mes dossiers AIT
3888     * @return void
3889     */
3890     function view_widget_dossier_contentieux_ait($content = null) {
3891     /**
3892     * Ce widget est configurable via l'interface Web. Lors de la création
3893     * du widget dans le paramétrage il est possible de spécifier la ou les
3894     * options suivantes :
3895     * - filtre :
3896     * = instructeur
3897     * = division
3898     * = aucun
3899     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
3900     */
3901     // Liste des paramètres
3902     $params = array("filtre");
3903     // Formatage des arguments reçus en paramètres
3904     $arguments = $this->get_arguments($content, $params);
3905     // Récupération de la configuration du widget
3906     $conf = $this->get_config_dossier_contentieux_ait($arguments);
3907     $filtre = $conf["arguments"]["filtre"];
3908    
3909    
3910     /**
3911     * Composition de la requête
3912     */
3913     //
3914     $query = sprintf("
3915     SELECT
3916     %s
3917     FROM
3918     %s
3919     WHERE
3920     %s
3921     %s
3922     ORDER BY
3923     %s
3924     LIMIT 5",
3925     $conf["query_ct_select"],
3926     $conf["query_ct_from"],
3927     $conf["query_ct_where"],
3928     $conf["query_ct_where_groupe"],
3929     $conf["query_ct_orderby"]
3930     );
3931    
3932     /**
3933     * Exécution de la requête
3934     */
3935     //
3936     $res = $this->f->db->query($query);
3937     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
3938     $this->f->isDatabaseError($res);
3939    
3940     // Affichage du message d'informations
3941     printf(
3942     $this->template_help,
3943     $conf["message_help"]
3944     );
3945     /**
3946     * Si il n'y a aucun dossier à afficher, alors on affiche un message
3947     * clair à l'utilisateur et on sort de la vue.
3948     */
3949     // Si il n'y a aucun dossier à afficher
3950     if ($res->numrows() == 0) {
3951     echo _("Il n'y a pas d'infractions pour lesquelles il y a un AIT signé.");
3952     return;
3953     }
3954    
3955     /**
3956     * Template nécessaires à l'affichage du widget
3957     */
3958     //
3959     $template_table = '
3960     <table class="tab-tab">
3961     <thead>
3962     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
3963     <th class="title col-0 firstcol">
3964     <span class="name">
3965     %s
3966     </span>
3967     </th>
3968     <th class="title col-1">
3969     <span class="name">
3970     %s
3971     </span>
3972     </th>
3973     <th class="title col-2">
3974     <span class="name">
3975     %s
3976     </span>
3977     </th>
3978     <th class="title col-3 lastcol">
3979     <span class="name">
3980     %s
3981     </span>
3982     </th>
3983     </tr>
3984     </thead>
3985     <tbody>
3986     %s
3987     </tbody>
3988     </table>
3989     ';
3990     //
3991     $template_line = '
3992     <tr class="tab-data odd">
3993     <td class="col-0 firstcol">
3994     %s
3995     </td>
3996     <td class="col-1 ">
3997     %s
3998     </td>
3999     <td class="col-2">
4000     %s
4001     </td>
4002     <td class="col-3 lastcol">
4003     %s
4004     </td>
4005     </tr>
4006     ';
4007     //
4008     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4009     //
4010     $template_link = '
4011     <a class="lienTable" href="%s">
4012     %s
4013     </a>
4014     ';
4015     // Bouton consulter
4016     $template_btn_consulter = '
4017     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4018     ._('Consulter')
4019     .'</span>
4020     ';
4021     //
4022    
4023     /**
4024     * Si il y a des dossiers à afficher, alors on affiche le widget.
4025     */
4026     // On construit le contenu du tableau
4027     $ct_tbody = '';
4028     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4029     // On construit l'attribut href du lien
4030     $ct_href = sprintf(
4031     $template_href,
4032     // idx
4033     $row["dossier"]
4034     );
4035     // On construit la ligne
4036     $ct_tbody .= sprintf(
4037     $template_line,
4038     // Colonne 1 - Numéro de dossier
4039     sprintf(
4040     $template_link,
4041     $ct_href,
4042     $template_btn_consulter
4043     ),
4044     // Colonne 2 - Numéro de dossier
4045     sprintf(
4046     $template_link,
4047     $ct_href,
4048     $row["dossier_libelle"]
4049     ),
4050     // Colonne 3 - Date AIT
4051     sprintf(
4052     $template_link,
4053     $ct_href,
4054     $this->f->formatDate($row["date_ait"])
4055     ),
4056     // Colonne 4 - Date retour signature
4057     sprintf(
4058     $template_link,
4059     $ct_href,
4060     $this->f->formatDate($row["date_retour_signature"])
4061     )
4062     );
4063     }
4064     // Affichage du tableau listant les dossiers
4065     printf(
4066     $template_table,
4067     // Colonne 1 - Consulter
4068     '',
4069     // Colonne 2 - Numéro de dossier
4070     _('dossier'),
4071     // Colonne 3 - Date AIT
4072     _('date_ait'),
4073     // Colonne 4 - Date retour signature
4074     _('date_retour_signature'),
4075     // Le Contenu
4076     $ct_tbody
4077     );
4078     // Affichage du footer
4079     printf(
4080     $this->template_footer,
4081     "../scr/tab.php?obj=dossier_contentieux_ait&filtre=" . $filtre,
4082     _("Voir +")
4083     );
4084     }
4085    
4086    
4087     /**
4088     * Cette méthode permet de récupérer la configuration du widget 'Les infractions
4089     * non affectées'.
4090     *
4091     * @return array
4092     */
4093     function get_config_dossier_contentieux_inaffectes($arguments) {
4094     // Initialisation du tableau des paramètres avec ses valeur par défaut
4095     $arguments_default = array(
4096     "filtre" => "division"
4097     );
4098     // Vérification des arguments
4099     foreach ($arguments_default as $key => $value) {
4100     //
4101     if (isset($arguments[$key])) {
4102     //
4103     $elem = trim($arguments[$key]);
4104     //
4105     if ($key === "filtre"
4106     && in_array($elem, array("division", "aucun"))) {
4107     // La valeur doit être dans cette liste
4108     $arguments[$key] = $elem;
4109     continue;
4110     }
4111     }
4112     //
4113     $arguments[$key] = $value;
4114     }
4115     $filtre = $arguments["filtre"];
4116    
4117     // SELECT - CHAMPAFFICHE
4118     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
4119     dossier.terrain_adresse_voie,\' \',
4120     dossier.terrain_adresse_lieu_dit,\' \',
4121     dossier.terrain_adresse_code_postal,\' \',
4122     dossier.terrain_adresse_localite,\' \',
4123     dossier.terrain_adresse_bp,\' \',
4124     dossier.terrain_adresse_cedex
4125 softime 7067 )) as "'._("localisation").'"';
4126 softime 6565 //
4127     $case_contrevenant = "
4128     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4129     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4130     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4131     END
4132     ";
4133     //
4134     $query_ct_select_champaffiche = array(
4135     'dossier.dossier as "'._("dossier").'"',
4136     'dossier.dossier_libelle as "'._("dossier").'"',
4137     $trim_concat_terrain,
4138     $case_contrevenant.' as "'._("contrevenant").'"',
4139     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4140     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4141     'etat.libelle as "'._("etat").'"',
4142     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4143     );
4144    
4145     /**
4146     * Construction de la requête
4147     */
4148     // SELECT
4149     $query_ct_select = "
4150     dossier.dossier,
4151     dossier.dossier_libelle,
4152     dossier.date_depot
4153     ";
4154    
4155     // FROM
4156     $query_ct_from = "
4157     ".DB_PREFIXE."dossier
4158     LEFT JOIN ".DB_PREFIXE."etat
4159     ON dossier.etat = etat.etat
4160     LEFT JOIN (
4161     SELECT *
4162     FROM ".DB_PREFIXE."lien_dossier_demandeur
4163     INNER JOIN ".DB_PREFIXE."demandeur
4164     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4165     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4166     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4167     ) as demandeur_contrevenant
4168     ON demandeur_contrevenant.dossier = dossier.dossier
4169     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4170     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4171     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4172     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4173     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4174     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4175     LEFT JOIN ".DB_PREFIXE."avis_decision
4176     ON avis_decision.avis_decision=dossier.avis_decision
4177     %s
4178     %s
4179     ";
4180    
4181     $query_ct_where_division_filter = "";
4182     $query_ct_where_collectivite_filter = "";
4183     // Filtre sur les dossier de la division
4184     if ($filtre == "division") {
4185     //
4186     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4187     ON dossier.division=division.division
4188     AND division.division = ".$_SESSION['division']."
4189     ";
4190     } else {
4191     $query_ct_where_division_filter = " LEFT JOIN ".DB_PREFIXE."division
4192     ON dossier.division=division.division";
4193     }
4194    
4195     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4196     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4197     // collectivité
4198     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4199     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4200     ON dossier.om_collectivite=om_collectivite.om_collectivite
4201     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4202     ";
4203     } else {
4204     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4205     ON dossier.om_collectivite=om_collectivite.om_collectivite
4206     ";
4207     }
4208    
4209     $query_ct_from = sprintf($query_ct_from, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4210    
4211     // WHERE - COMMON
4212     $query_ct_where_common = "
4213     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4214     AND dossier.instructeur_2 IS NULL
4215     ";
4216    
4217     // ORDER BY
4218    
4219     $query_ct_orderby = "
4220     dossier.date_depot ASC
4221     ";
4222    
4223     $query_ct_where_groupe = "";
4224     // Gestion des groupes et confidentialité
4225     include('../sql/pgsql/filter_group_widgets.inc.php');
4226    
4227     /**
4228     * Message d'aide
4229     */
4230     //
4231     $message_filtre = "";
4232     //
4233     switch ($filtre) {
4234     case "division":
4235     $message_filtre = " "._("situés dans ma division");
4236     break;
4237     case "aucun":
4238     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4239     $message_filtre = " "._("situés dans ma collectivité");
4240     } else {
4241     $message_filtre = " "._("situés dans toutes les collectivités");
4242     }
4243     break;
4244     }
4245     //
4246     $message_help = sprintf(
4247     _("Les infractions%s les plus anciennes non-affectées à un technicien."),
4248     $message_filtre
4249     );
4250    
4251     /**
4252     * Return
4253     */
4254     //
4255     return array(
4256     "arguments" => $arguments,
4257     "message_help" => $message_help,
4258     "query_ct_select" => $query_ct_select,
4259     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4260     "query_ct_from" => $query_ct_from,
4261     "query_ct_where" => $query_ct_where_common,
4262     "query_ct_where_groupe" => $query_ct_where_groupe,
4263     "query_ct_orderby" => $query_ct_orderby
4264     );
4265     }
4266    
4267     /**
4268     * WIDGET DASHBOARD - Les infractions non affectées
4269     * @return void
4270     */
4271     function view_widget_dossier_contentieux_inaffectes($content = null) {
4272     /**
4273     * Ce widget est configurable via l'interface Web. Lors de la création
4274     * du widget dans le paramétrage il est possible de spécifier la ou les
4275     * options suivantes :
4276     * - filtre :
4277     * = instructeur
4278     * = division
4279     * = aucun
4280     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4281     */
4282     // Liste des paramètres
4283     $params = array("filtre");
4284     // Formatage des arguments reçus en paramètres
4285     $arguments = $this->get_arguments($content, $params);
4286     // Récupération de la configuration du widget
4287     $conf = $this->get_config_dossier_contentieux_inaffectes($arguments);
4288    
4289     $filtre = $conf["arguments"]["filtre"];
4290     //
4291    
4292    
4293     /**
4294     * Composition de la requête
4295     */
4296     //
4297     $query = sprintf("
4298     SELECT
4299     %s
4300     FROM
4301     %s
4302     WHERE
4303     %s
4304     %s
4305     ORDER BY
4306     %s
4307     LIMIT 5",
4308     $conf["query_ct_select"],
4309     $conf["query_ct_from"],
4310     $conf["query_ct_where"],
4311     $conf["query_ct_where_groupe"],
4312     $conf["query_ct_orderby"]
4313     );
4314    
4315     /**
4316     * Exécution de la requête
4317     */
4318     //
4319     $res = $this->f->db->query($query);
4320     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4321     $this->f->isDatabaseError($res);
4322    
4323     // Affichage du message d'informations
4324     printf(
4325     $this->template_help,
4326     $conf["message_help"]
4327     );
4328     /**
4329     * Si il n'y a aucun dossier à afficher, alors on affiche un message
4330     * clair à l'utilisateur et on sort de la vue.
4331     */
4332     // Si il n'y a aucun dossier à afficher
4333     if ($res->numrows() == 0) {
4334     echo _("Il n'y a pas d'infractions non-affectées à un technicien.");
4335     return;
4336     }
4337    
4338     /**
4339     * Template nécessaires à l'affichage du widget
4340     */
4341     //
4342     $template_table = '
4343     <table class="tab-tab">
4344     <thead>
4345     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4346     <th class="title col-0 firstcol">
4347     <span class="name">
4348     %s
4349     </span>
4350     </th>
4351     <th class="title col-1">
4352     <span class="name">
4353     %s
4354     </span>
4355     </th>
4356     <th class="title col-2 lastcol">
4357     <span class="name">
4358     %s
4359     </span>
4360     </th>
4361     </tr>
4362     </thead>
4363     <tbody>
4364     %s
4365     </tbody>
4366     </table>
4367     ';
4368     //
4369     $template_line = '
4370     <tr class="tab-data odd">
4371     <td class="col-0 firstcol">
4372     %s
4373     </td>
4374     <td class="col-1 ">
4375     %s
4376     </td>
4377     <td class="col-2 lastcol">
4378     %s
4379     </td>
4380     </tr>
4381     ';
4382     //
4383     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4384     //
4385     $template_link = '
4386     <a class="lienTable" href="%s">
4387     %s
4388     </a>
4389     ';
4390     // Bouton consulter
4391     $template_btn_consulter = '
4392     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4393     ._('Consulter')
4394     .'</span>
4395     ';
4396     //
4397    
4398     /**
4399     * Si il y a des dossiers à afficher, alors on affiche le widget.
4400     */
4401     // On construit le contenu du tableau
4402     $ct_tbody = '';
4403     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4404     // On construit l'attribut href du lien
4405     $ct_href = sprintf(
4406     $template_href,
4407     // idx
4408     $row["dossier"]
4409     );
4410     // On construit la ligne
4411     $ct_tbody .= sprintf(
4412     $template_line,
4413     // Colonne 1 - Numéro de dossier
4414     sprintf(
4415     $template_link,
4416     $ct_href,
4417     $template_btn_consulter
4418     ),
4419     // Colonne 2 - Numéro de dossier
4420     sprintf(
4421     $template_link,
4422     $ct_href,
4423     $row["dossier_libelle"]
4424     ),
4425     // Colonne 3 - Date de réception
4426     sprintf(
4427     $template_link,
4428     $ct_href,
4429     $this->f->formatDate($row["date_depot"])
4430     )
4431     );
4432     }
4433     // Affichage du tableau listant les dossiers
4434     printf(
4435     $template_table,
4436     // Colonne 1 - Consulter
4437     '',
4438     // Colonne 2 - Numéro de dossier
4439     _('dossier'),
4440     // Colonne 3 - Date de réception
4441     _('Date de réception'),
4442     // Le Contenu
4443     $ct_tbody
4444     );
4445     // Affichage du footer
4446     printf(
4447     $this->template_footer,
4448     "../scr/tab.php?obj=dossier_contentieux_inaffectes&filtre=" . $filtre,
4449     _("Voir +")
4450     );
4451     }
4452    
4453    
4454     /**
4455     * Cette méthode permet de récupérer la configuration du widget 'Alerte Visite'.
4456     *
4457     * @return array
4458     */
4459     function get_config_dossier_contentieux_alerte_visite($arguments) {
4460     // Initialisation du tableau des paramètres avec ses valeur par défaut
4461     $arguments_default = array(
4462     "filtre" => "instructeur"
4463     );
4464     // Vérification des arguments
4465     foreach ($arguments_default as $key => $value) {
4466     //
4467     if (isset($arguments[$key])) {
4468     //
4469     $elem = trim($arguments[$key]);
4470     //
4471     if ($key === "filtre"
4472     && in_array($elem, array("instructeur", "division", "aucun"))) {
4473     // La valeur doit être dans cette liste
4474     $arguments[$key] = $elem;
4475     continue;
4476     }
4477     }
4478     //
4479     $arguments[$key] = $value;
4480     }
4481     $filtre = $arguments["filtre"];
4482    
4483     // SELECT - CHAMPAFFICHE
4484     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
4485     dossier.terrain_adresse_voie,\' \',
4486     dossier.terrain_adresse_lieu_dit,\' \',
4487     dossier.terrain_adresse_code_postal,\' \',
4488     dossier.terrain_adresse_localite,\' \',
4489     dossier.terrain_adresse_bp,\' \',
4490     dossier.terrain_adresse_cedex
4491 softime 7067 )) as "'._("localisation").'"';
4492 softime 6565 //
4493     $case_contrevenant = "
4494     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4495     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4496     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4497     END
4498     ";
4499     //
4500     $query_ct_select_champaffiche = array(
4501     'dossier.dossier as "'._("dossier").'"',
4502     'dossier.dossier_libelle as "'._("dossier").'"',
4503     $trim_concat_terrain,
4504     $case_contrevenant.' as "'._("contrevenant").'"',
4505     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4506     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4507     'etat.libelle as "'._("etat").'"',
4508     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4509     );
4510    
4511     /**
4512     * Construction de la requête
4513     */
4514     // SELECT
4515     $query_ct_select = "
4516     dossier.dossier,
4517     dossier.dossier_libelle,
4518     dossier.date_depot
4519     ";
4520    
4521     // FROM
4522     $query_ct_from = "
4523     ".DB_PREFIXE."dossier
4524     LEFT JOIN ".DB_PREFIXE."etat
4525     ON dossier.etat = etat.etat
4526     LEFT JOIN (
4527     SELECT *
4528     FROM ".DB_PREFIXE."lien_dossier_demandeur
4529     INNER JOIN ".DB_PREFIXE."demandeur
4530     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4531     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4532     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4533     ) as demandeur_contrevenant
4534     ON demandeur_contrevenant.dossier = dossier.dossier
4535     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4536     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4537     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4538     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4539     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4540     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4541     LEFT JOIN ".DB_PREFIXE."avis_decision
4542     ON avis_decision.avis_decision=dossier.avis_decision
4543     %s
4544     %s
4545     %s
4546     ";
4547    
4548     $query_ct_where_instructeur_filter = "";
4549     $query_ct_where_division_filter = "";
4550     $query_ct_where_collectivite_filter = "";
4551     // Filtre sur les dossiers qui concernent l'utilisateur
4552     if ($filtre == "instructeur") {
4553     //
4554     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
4555     ON dossier.instructeur=instructeur.instructeur
4556     OR dossier.instructeur_2=instructeur.instructeur
4557     JOIN ".DB_PREFIXE."om_utilisateur
4558     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4559     AND om_utilisateur.login='".$_SESSION['login']."'
4560     ";
4561     }
4562    
4563     // Filtre sur les dossier de la division
4564     if ($filtre == "division") {
4565     //
4566     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4567     ON dossier.division=division.division
4568     AND division.division = ".$_SESSION['division']."
4569     ";
4570     }
4571    
4572     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4573     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4574     // collectivité
4575     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4576     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4577     ON dossier.om_collectivite=om_collectivite.om_collectivite
4578     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4579     ";
4580     } else {
4581     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4582     ON dossier.om_collectivite=om_collectivite.om_collectivite
4583     ";
4584     }
4585    
4586     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4587    
4588     // WHERE - COMMON
4589     $query_ct_where_common = "
4590     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4591     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '3 months'
4592     AND dossier.date_premiere_visite IS NULL
4593     ";
4594     // ORDER BY
4595    
4596     $query_ct_orderby = "
4597     dossier.date_depot ASC
4598     ";
4599    
4600     $query_ct_where_groupe = "";
4601     // Gestion des groupes et confidentialité
4602     include('../sql/pgsql/filter_group_widgets.inc.php');
4603    
4604     /**
4605     * Message d'aide
4606     */
4607     //
4608     $message_filtre = "";
4609     //
4610     switch ($filtre) {
4611     case "instructeur":
4612     $message_filtre = " "._("dont je suis l'instructeur");
4613     break;
4614     case "division":
4615     $message_filtre = " "._("situés dans ma division");
4616     break;
4617     case "aucun":
4618     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4619     $message_filtre = " "._("situés dans ma collectivité");
4620     } else {
4621     $message_filtre = " "._("situés dans toutes les collectivités");
4622     }
4623     break;
4624     }
4625    
4626     //
4627     $message_help = sprintf(
4628     _("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."),
4629     $message_filtre
4630     );
4631    
4632     /**
4633     * Return
4634     */
4635     //
4636     return array(
4637     "arguments" => $arguments,
4638     "message_help" => $message_help,
4639     "query_ct_select" => $query_ct_select,
4640     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
4641     "query_ct_from" => $query_ct_from,
4642     "query_ct_where" => $query_ct_where_common,
4643     "query_ct_where_groupe" => $query_ct_where_groupe,
4644     "query_ct_orderby" => $query_ct_orderby
4645     );
4646     }
4647    
4648     /**
4649     * WIDGET DASHBOARD - Alerte Visite
4650     * @return void
4651     */
4652     function view_widget_dossier_contentieux_alerte_visite($content = null) {
4653     /**
4654     * Ce widget est configurable via l'interface Web. Lors de la création
4655     * du widget dans le paramétrage il est possible de spécifier la ou les
4656     * options suivantes :
4657     * - filtre :
4658     * = instructeur
4659     * = division
4660     * = aucun
4661     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
4662     */
4663     // Liste des paramètres
4664     $params = array("filtre");
4665     // Formatage des arguments reçus en paramètres
4666     $arguments = $this->get_arguments($content, $params);
4667     // Récupération de la configuration du widget
4668     $conf = $this->get_config_dossier_contentieux_alerte_visite($arguments);
4669    
4670     //
4671     $filtre = $conf["arguments"]["filtre"];
4672     //
4673    
4674    
4675     /**
4676     * Composition de la requête
4677     */
4678     //
4679     $query = sprintf("
4680     SELECT
4681     %s
4682     FROM
4683     %s
4684     WHERE
4685     %s
4686     %s
4687     ORDER BY
4688     %s
4689     LIMIT 5",
4690     $conf["query_ct_select"],
4691     $conf["query_ct_from"],
4692     $conf["query_ct_where"],
4693     $conf["query_ct_where_groupe"],
4694     $conf["query_ct_orderby"]
4695     );
4696    
4697     /**
4698     * Exécution de la requête
4699     */
4700     //
4701     $res = $this->f->db->query($query);
4702     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
4703     $this->f->isDatabaseError($res);
4704    
4705     // Affichage du message d'informations
4706     printf(
4707     $this->template_help,
4708     $conf["message_help"]
4709     );
4710     /**
4711     * Si il n'y a aucun dossier à afficher, alors on affiche un message
4712     * clair à l'utilisateur et on sort de la vue.
4713     */
4714     // Si il n'y a aucun dossier à afficher
4715     if ($res->numrows() == 0) {
4716     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.");
4717     return;
4718     }
4719    
4720     /**
4721     * Template nécessaires à l'affichage du widget
4722     */
4723     //
4724     $template_table = '
4725     <table class="tab-tab">
4726     <thead>
4727     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
4728     <th class="title col-0 firstcol">
4729     <span class="name">
4730     %s
4731     </span>
4732     </th>
4733     <th class="title col-1">
4734     <span class="name">
4735     %s
4736     </span>
4737     </th>
4738     <th class="title col-2 lastcol">
4739     <span class="name">
4740     %s
4741     </span>
4742     </th>
4743     </tr>
4744     </thead>
4745     <tbody>
4746     %s
4747     </tbody>
4748     </table>
4749     ';
4750     //
4751     $template_line = '
4752     <tr class="tab-data odd">
4753     <td class="col-0 firstcol">
4754     %s
4755     </td>
4756     <td class="col-1 ">
4757     %s
4758     </td>
4759     <td class="col-2 lastcol">
4760     %s
4761     </td>
4762     </tr>
4763     ';
4764     //
4765     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
4766     //
4767     $template_link = '
4768     <a class="lienTable" href="%s">
4769     %s
4770     </a>
4771     ';
4772     // Bouton consulter
4773     $template_btn_consulter = '
4774     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
4775     ._('Consulter')
4776     .'</span>
4777     ';
4778     //
4779    
4780     /**
4781     * Si il y a des dossiers à afficher, alors on affiche le widget.
4782     */
4783     // On construit le contenu du tableau
4784     $ct_tbody = '';
4785     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
4786     // On construit l'attribut href du lien
4787     $ct_href = sprintf(
4788     $template_href,
4789     // idx
4790     $row["dossier"]
4791     );
4792     // On construit la ligne
4793     $ct_tbody .= sprintf(
4794     $template_line,
4795     // Colonne 1 - Numéro de dossier
4796     sprintf(
4797     $template_link,
4798     $ct_href,
4799     $template_btn_consulter
4800     ),
4801     // Colonne 2 - Numéro de dossier
4802     sprintf(
4803     $template_link,
4804     $ct_href,
4805     $row["dossier_libelle"]
4806     ),
4807     // Colonne 3 - Date de réception
4808     sprintf(
4809     $template_link,
4810     $ct_href,
4811     $this->f->formatDate($row["date_depot"])
4812     )
4813     );
4814     }
4815     // Affichage du tableau listant les dossiers
4816     printf(
4817     $template_table,
4818     // Colonne 1 - Consulter
4819     '',
4820     // Colonne 2 - Numéro de dossier
4821     _('dossier'),
4822     // Colonne 3 - Date de réception
4823     _('Date de réception'),
4824     // Le Contenu
4825     $ct_tbody
4826     );
4827     // Affichage du footer
4828     printf(
4829     $this->template_footer,
4830     "../scr/tab.php?obj=dossier_contentieux_alerte_visite&filtre=" . $filtre,
4831     _("Voir +")
4832     );
4833     }
4834    
4835     /**
4836     * Cette méthode permet de récupérer la configuration du widget 'Alerte Parquet'.
4837     *
4838     * @return array
4839     */
4840     function get_config_dossier_contentieux_alerte_parquet($arguments) {
4841     // Initialisation du tableau des paramètres avec ses valeur par défaut
4842     $arguments_default = array(
4843     "filtre" => "instructeur"
4844     );
4845     // Vérification des arguments
4846     foreach ($arguments_default as $key => $value) {
4847     //
4848     if (isset($arguments[$key])) {
4849     //
4850     $elem = trim($arguments[$key]);
4851     //
4852     if ($key === "filtre"
4853     && in_array($elem, array("instructeur", "division", "aucun"))) {
4854     // La valeur doit être dans cette liste
4855     $arguments[$key] = $elem;
4856     continue;
4857     }
4858     }
4859     //
4860     $arguments[$key] = $value;
4861     }
4862     $filtre = $arguments["filtre"];
4863    
4864     // SELECT - CHAMPAFFICHE
4865     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
4866     dossier.terrain_adresse_voie,\' \',
4867     dossier.terrain_adresse_lieu_dit,\' \',
4868     dossier.terrain_adresse_code_postal,\' \',
4869     dossier.terrain_adresse_localite,\' \',
4870     dossier.terrain_adresse_bp,\' \',
4871     dossier.terrain_adresse_cedex
4872 softime 7067 )) as "'._("localisation").'"';
4873 softime 6565 //
4874     $case_contrevenant = "
4875     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
4876     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
4877     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
4878     END
4879     ";
4880     //
4881     $query_ct_select_champaffiche = array(
4882     'dossier.dossier as "'._("dossier").'"',
4883     'dossier.dossier_libelle as "'._("dossier").'"',
4884     $trim_concat_terrain,
4885     $case_contrevenant.' as "'._("contrevenant").'"',
4886     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
4887     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
4888     'etat.libelle as "'._("etat").'"',
4889     'to_char(dossier.date_depot, \'DD/MM/YYYY\') as "'._("Date de réception").'"',
4890     );
4891    
4892     /**
4893     * Construction de la requête
4894     */
4895     // SELECT
4896     $query_ct_select = "
4897     dossier.dossier,
4898     dossier.dossier_libelle,
4899     dossier.date_depot
4900     ";
4901    
4902     // FROM
4903     $query_ct_from = "
4904     ".DB_PREFIXE."dossier
4905     LEFT JOIN ".DB_PREFIXE."etat
4906     ON dossier.etat = etat.etat
4907     LEFT JOIN (
4908     SELECT *
4909     FROM ".DB_PREFIXE."lien_dossier_demandeur
4910     INNER JOIN ".DB_PREFIXE."demandeur
4911     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
4912     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
4913     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
4914     ) as demandeur_contrevenant
4915     ON demandeur_contrevenant.dossier = dossier.dossier
4916     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
4917     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
4918     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
4919     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
4920     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
4921     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
4922     LEFT JOIN ".DB_PREFIXE."avis_decision
4923     ON avis_decision.avis_decision=dossier.avis_decision
4924     %s
4925     %s
4926     %s
4927     ";
4928    
4929     $query_ct_where_instructeur_filter = "";
4930     $query_ct_where_division_filter = "";
4931     $query_ct_where_collectivite_filter = "";
4932     // Filtre sur les dossiers qui concernent l'utilisateur
4933     if ($filtre == "instructeur") {
4934     //
4935     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
4936     ON dossier.instructeur=instructeur.instructeur
4937     OR dossier.instructeur_2=instructeur.instructeur
4938     JOIN ".DB_PREFIXE."om_utilisateur
4939     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
4940     AND om_utilisateur.login='".$_SESSION['login']."'
4941     ";
4942     }
4943    
4944     // Filtre sur les dossier de la division
4945     if ($filtre == "division") {
4946     //
4947     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
4948     ON dossier.division=division.division
4949     AND division.division = ".$_SESSION['division']."
4950     ";
4951     }
4952    
4953     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
4954     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
4955     // collectivité
4956     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
4957     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
4958     ON dossier.om_collectivite=om_collectivite.om_collectivite
4959     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
4960     ";
4961     } else {
4962     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
4963     ON dossier.om_collectivite=om_collectivite.om_collectivite
4964     ";
4965     }
4966    
4967     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
4968    
4969     // WHERE - COMMON
4970     $query_ct_where_common = "
4971     LOWER(dossier_autorisation_type.code) = LOWER('IN')
4972     AND dossier.date_depot < CURRENT_TIMESTAMP - interval '9 months'
4973     AND dossier.date_transmission_parquet IS NULL
4974     ";
4975    
4976     // ORDER BY
4977     $query_ct_orderby = "
4978     dossier.date_depot ASC
4979     ";
4980    
4981     $query_ct_where_groupe = "";
4982     // Gestion des groupes et confidentialité
4983     include('../sql/pgsql/filter_group_widgets.inc.php');
4984    
4985     /**
4986     * Message d'aide
4987     */
4988     //
4989     $message_filtre = "";
4990     //
4991     switch ($filtre) {
4992     case "instructeur":
4993     $message_filtre = " "._("dont je suis l'instructeur");
4994     break;
4995     case "division":
4996     $message_filtre = " "._("situés dans ma division");
4997     break;
4998     case "aucun":
4999     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5000     $message_filtre = " "._("situés dans ma collectivité");
5001     } else {
5002     $message_filtre = " "._("situés dans toutes les collectivités");
5003     }
5004     break;
5005     }
5006     //
5007     $message_help = sprintf(
5008     _("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."),
5009     $message_filtre
5010     );
5011    
5012     /**
5013     * Return
5014     */
5015     //
5016     return array(
5017     "arguments" => $arguments,
5018     "message_help" => $message_help,
5019     "query_ct_select" => $query_ct_select,
5020     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5021     "query_ct_from" => $query_ct_from,
5022     "query_ct_where" => $query_ct_where_common,
5023     "query_ct_where_groupe" => $query_ct_where_groupe,
5024     "query_ct_orderby" => $query_ct_orderby
5025     );
5026     }
5027    
5028     /**
5029     * WIDGET DASHBOARD - Alerte Parquet
5030     * @return void
5031     */
5032     function view_widget_dossier_contentieux_alerte_parquet($content = null) {
5033     /**
5034     * Ce widget est configurable via l'interface Web. Lors de la création
5035     * du widget dans le paramétrage il est possible de spécifier la ou les
5036     * options suivantes :
5037     * - filtre :
5038     * = instructeur
5039     * = division
5040     * = aucun
5041     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5042     */
5043     // Liste des paramètres
5044     $params = array("filtre");
5045     // Formatage des arguments reçus en paramètres
5046     $arguments = $this->get_arguments($content, $params);
5047     // Récupération de la configuration du widget
5048     $conf = $this->get_config_dossier_contentieux_alerte_parquet($arguments);
5049    
5050     //
5051     $filtre = $conf["arguments"]["filtre"];
5052     //
5053    
5054    
5055     /**
5056     * Composition de la requête
5057     */
5058     //
5059     $query = sprintf("
5060     SELECT
5061     %s
5062     FROM
5063     %s
5064     WHERE
5065     %s
5066     %s
5067     ORDER BY
5068     %s
5069     LIMIT 5",
5070     $conf["query_ct_select"],
5071     $conf["query_ct_from"],
5072     $conf["query_ct_where"],
5073     $conf["query_ct_where_groupe"],
5074     $conf["query_ct_orderby"]
5075     );
5076    
5077     /**
5078     * Exécution de la requête
5079     */
5080     //
5081     $res = $this->f->db->query($query);
5082     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5083     $this->f->isDatabaseError($res);
5084    
5085     // Affichage du message d'informations
5086     printf(
5087     $this->template_help,
5088     $conf["message_help"]
5089     );
5090     /**
5091     * Si il n'y a aucun dossier à afficher, alors on affiche un message
5092     * clair à l'utilisateur et on sort de la vue.
5093     */
5094     // Si il n'y a aucun dossier à afficher
5095     if ($res->numrows() == 0) {
5096     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.");
5097     return;
5098     }
5099    
5100     /**
5101     * Template nécessaires à l'affichage du widget
5102     */
5103     //
5104     $template_table = '
5105     <table class="tab-tab">
5106     <thead>
5107     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5108     <th class="title col-0 firstcol">
5109     <span class="name">
5110     %s
5111     </span>
5112     </th>
5113     <th class="title col-1">
5114     <span class="name">
5115     %s
5116     </span>
5117     </th>
5118     <th class="title col-2 lastcol">
5119     <span class="name">
5120     %s
5121     </span>
5122     </th>
5123     </tr>
5124     </thead>
5125     <tbody>
5126     %s
5127     </tbody>
5128     </table>
5129     ';
5130     //
5131     $template_line = '
5132     <tr class="tab-data odd">
5133     <td class="col-0 firstcol">
5134     %s
5135     </td>
5136     <td class="col-1 ">
5137     %s
5138     </td>
5139     <td class="col-2 lastcol">
5140     %s
5141     </td>
5142     </tr>
5143     ';
5144     //
5145     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
5146     //
5147     $template_link = '
5148     <a class="lienTable" href="%s">
5149     %s
5150     </a>
5151     ';
5152     // Bouton consulter
5153     $template_btn_consulter = '
5154     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5155     ._('Consulter')
5156     .'</span>
5157     ';
5158     //
5159    
5160     /**
5161     * Si il y a des dossiers à afficher, alors on affiche le widget.
5162     */
5163     // On construit le contenu du tableau
5164     $ct_tbody = '';
5165     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5166     // On construit l'attribut href du lien
5167     $ct_href = sprintf(
5168     $template_href,
5169     // idx
5170     $row["dossier"]
5171     );
5172     // On construit la ligne
5173     $ct_tbody .= sprintf(
5174     $template_line,
5175     // Colonne 1 - Numéro de dossier
5176     sprintf(
5177     $template_link,
5178     $ct_href,
5179     $template_btn_consulter
5180     ),
5181     // Colonne 2 - Numéro de dossier
5182     sprintf(
5183     $template_link,
5184     $ct_href,
5185     $row["dossier_libelle"]
5186     ),
5187     // Colonne 3 - Date de réception
5188     sprintf(
5189     $template_link,
5190     $ct_href,
5191     $this->f->formatDate($row["date_depot"])
5192     )
5193     );
5194     }
5195     // Affichage du tableau listant les dossiers
5196     printf(
5197     $template_table,
5198     // Colonne 1 - Consulter
5199     '',
5200     // Colonne 2 - Numéro de dossier
5201     _('dossier'),
5202     // Colonne 3 - Date de réception
5203     _('Date de réception'),
5204     // Le Contenu
5205     $ct_tbody
5206     );
5207     // Affichage du footer
5208     printf(
5209     $this->template_footer,
5210     "../scr/tab.php?obj=dossier_contentieux_alerte_parquet&filtre=" . $filtre,
5211     _("Voir +")
5212     );
5213     }
5214    
5215     /**
5216     * Cette méthode permet de récupérer la configuration du widget 'Mes clôtures'.
5217     *
5218     * @return array
5219     */
5220     function get_config_dossier_contentieux_clotures($arguments) {
5221     // Initialisation du tableau des paramètres avec ses valeur par défaut
5222     $arguments_default = array(
5223     "filtre" => "instructeur",
5224     );
5225     // Vérification des arguments
5226     foreach ($arguments_default as $key => $value) {
5227     //
5228     if (isset($arguments[$key])) {
5229     //
5230     $elem = trim($arguments[$key]);
5231     //
5232     if ($key === "filtre"
5233     && in_array($elem, array("instructeur", "division", "aucun"))) {
5234     // La valeur doit être dans cette liste
5235     $arguments[$key] = $elem;
5236     continue;
5237     }
5238     }
5239     //
5240     $arguments[$key] = $value;
5241     }
5242    
5243     $filtre = $arguments["filtre"];
5244    
5245     // SELECT - CHAMPAFFICHE
5246     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
5247     dossier.terrain_adresse_voie,\' \',
5248     dossier.terrain_adresse_lieu_dit,\' \',
5249     dossier.terrain_adresse_code_postal,\' \',
5250     dossier.terrain_adresse_localite,\' \',
5251     dossier.terrain_adresse_bp,\' \',
5252     dossier.terrain_adresse_cedex
5253 softime 7067 )) as "'._("localisation").'"';
5254 softime 6565 //
5255     $case_requerant = "
5256     CASE WHEN demandeur_requerant.qualite = 'particulier'
5257     THEN TRIM(CONCAT(demandeur_requerant.particulier_nom, ' ', demandeur_requerant.particulier_prenom))
5258     ELSE TRIM(CONCAT(demandeur_requerant.personne_morale_raison_sociale, ' ', demandeur_requerant.personne_morale_denomination))
5259     END
5260     ";
5261     //
5262     $case_demandeur = "CASE WHEN demandeur.qualite='particulier'
5263     THEN TRIM(CONCAT(demandeur.particulier_nom, ' ', demandeur.particulier_prenom))
5264     ELSE TRIM(CONCAT(demandeur.personne_morale_raison_sociale, ' ', demandeur.personne_morale_denomination))
5265     END";
5266     //
5267     $query_ct_select_champaffiche = array(
5268     'dossier.dossier as "'._("dossier").'"',
5269     'dossier.dossier_libelle as "'._("dossier").'"',
5270     'dossier_autorisation_type_detaille.libelle as "'._("type de dossier").'"',
5271     'dossier_autorisation_contestee.dossier_libelle as "'._("autorisation").'"',
5272     $case_demandeur.' as "'._("petitionnaire").'"',
5273     $trim_concat_terrain,
5274     $case_requerant.' as "'._("requerant").'"',
5275     'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',
5276     'avis_decision.libelle as "'._("decision").'"',
5277     'etat.libelle as "'._("etat").'"',
5278     'to_char(dossier.date_cloture_instruction, \'DD/MM/YYYY\') as "'._("date_cloture_instruction").'"',
5279     );
5280    
5281     /**
5282     * Construction de la requête
5283     */
5284     // SELECT
5285     $query_ct_select = "
5286     dossier.dossier,
5287     dossier.dossier_libelle,
5288     dossier.date_cloture_instruction
5289     ";
5290    
5291     // FROM
5292     $query_ct_from = "
5293     ".DB_PREFIXE."dossier
5294     LEFT JOIN ".DB_PREFIXE."etat
5295     ON dossier.etat = etat.etat
5296     LEFT JOIN (
5297     SELECT *
5298     FROM ".DB_PREFIXE."lien_dossier_demandeur
5299     INNER JOIN ".DB_PREFIXE."demandeur
5300     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5301     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5302     AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')
5303     ) as demandeur
5304     ON demandeur.dossier = dossier.dossier
5305     LEFT JOIN (
5306     SELECT *
5307     FROM ".DB_PREFIXE."lien_dossier_demandeur
5308     INNER JOIN ".DB_PREFIXE."demandeur
5309     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5310     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5311     AND LOWER(demandeur.type_demandeur) = LOWER('requerant')
5312     ) as demandeur_requerant
5313     ON demandeur_requerant.dossier = dossier.dossier
5314     LEFT JOIN ".DB_PREFIXE."dossier as dossier_autorisation_contestee
5315     ON dossier.autorisation_contestee = dossier_autorisation_contestee.dossier
5316     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5317     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5318     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5319     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5320     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5321     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5322     LEFT JOIN ".DB_PREFIXE."avis_decision
5323     ON avis_decision.avis_decision=dossier.avis_decision
5324     %s
5325     %s
5326     %s
5327     ";
5328    
5329     $query_ct_where_instructeur_filter = "";
5330     $query_ct_where_division_filter = "";
5331     $query_ct_where_collectivite_filter = "";
5332     // Filtre sur les dossiers qui concernent l'utilisateur
5333     if ($filtre == "instructeur") {
5334     //
5335     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5336     ON dossier.instructeur=instructeur.instructeur
5337     OR dossier.instructeur_2=instructeur.instructeur
5338     JOIN ".DB_PREFIXE."om_utilisateur
5339     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5340     AND om_utilisateur.login='".$_SESSION['login']."'
5341     ";
5342     }
5343    
5344     // Filtre sur les dossier de la division
5345     if ($filtre == "division") {
5346     //
5347     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5348     ON dossier.division=division.division
5349     AND division.division = ".$_SESSION['division']."
5350     ";
5351     }
5352    
5353     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5354     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5355     // collectivité
5356     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5357     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5358     ON dossier.om_collectivite=om_collectivite.om_collectivite
5359     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5360     ";
5361     } else {
5362     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5363     ON dossier.om_collectivite=om_collectivite.om_collectivite
5364     ";
5365     }
5366    
5367     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
5368    
5369     // WHERE - COMMON
5370     $query_ct_where_common = "
5371     LOWER(dossier_autorisation_type.code) = LOWER('RE')
5372     AND dossier.date_cloture_instruction >= CURRENT_TIMESTAMP
5373     AND dossier.date_cloture_instruction <= CURRENT_TIMESTAMP + interval '1 month'
5374     ";
5375    
5376     // ORDER BY
5377    
5378     $query_ct_orderby = "
5379     dossier.date_cloture_instruction ASC
5380     ";
5381    
5382     $query_ct_where_groupe = "";
5383     // Gestion des groupes et confidentialité
5384     include('../sql/pgsql/filter_group_widgets.inc.php');
5385    
5386     /**
5387     * Message d'aide
5388     */
5389     //
5390     $message_filtre = "";
5391     //
5392     switch ($filtre) {
5393     case "instructeur":
5394     $message_filtre = " "._("dont je suis l'instructeur");
5395     break;
5396     case "division":
5397     $message_filtre = " "._("situés dans ma division");
5398     break;
5399     case "aucun":
5400     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5401     $message_filtre = " "._("situés dans ma collectivité");
5402     } else {
5403     $message_filtre = " "._("situés dans toutes les collectivités");
5404     }
5405     break;
5406     }
5407     //
5408     $message_help = sprintf(
5409     _("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."),
5410     $message_filtre
5411     );
5412    
5413     /**
5414     * Return
5415     */
5416     //
5417     return array(
5418     "arguments" => $arguments,
5419     "message_help" => $message_help,
5420     "query_ct_select" => $query_ct_select,
5421     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5422     "query_ct_from" => $query_ct_from,
5423     "query_ct_where" => $query_ct_where_common,
5424     "query_ct_where_groupe" => $query_ct_where_groupe,
5425     "query_ct_orderby" => $query_ct_orderby
5426     );
5427     }
5428    
5429     /**
5430     * WIDGET DASHBOARD - Les clôtures
5431     * @return void
5432     */
5433     function view_widget_dossier_contentieux_clotures($content = null) {
5434    
5435     /**
5436     * Ce widget est configurable via l'interface Web. Lors de la création
5437     * du widget dans le paramétrage il est possible de spécifier la ou les
5438     * options suivantes :
5439     * - filtre :
5440     * = instructeur
5441     * = division
5442     * = aucun
5443     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5444     */
5445     // Liste des paramètres
5446     $params = array("filtre");
5447     // Formatage des arguments reçus en paramètres
5448     $arguments = $this->get_arguments($content, $params);
5449     // Récupération de la configuration du widget
5450     $conf = $this->get_config_dossier_contentieux_clotures($arguments);
5451    
5452     $filtre = $conf["arguments"]["filtre"];
5453     //
5454    
5455    
5456     /**
5457     * Composition de la requête
5458     */
5459     //
5460     $query = sprintf("
5461     SELECT
5462     %s
5463     FROM
5464     %s
5465     WHERE
5466     %s
5467     %s
5468     ORDER BY
5469     %s
5470     LIMIT 5",
5471     $conf["query_ct_select"],
5472     $conf["query_ct_from"],
5473     $conf["query_ct_where"],
5474     $conf["query_ct_where_groupe"],
5475     $conf["query_ct_orderby"]
5476     );
5477    
5478     /**
5479     * Exécution de la requête
5480     */
5481     //
5482     $res = $this->f->db->query($query);
5483     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5484     $this->f->isDatabaseError($res);
5485    
5486     // Affichage du message d'informations
5487     printf(
5488     $this->template_help,
5489     $conf["message_help"]
5490     );
5491     /**
5492     * Si il n'y a aucun dossier à afficher, alors on affiche un message
5493     * clair à l'utilisateur et on sort de la vue.
5494     */
5495     // Si il n'y a aucun dossier à afficher
5496     if ($res->numrows() == 0) {
5497     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.");
5498     return;
5499     }
5500    
5501     /**
5502     * Template nécessaires à l'affichage du widget
5503     */
5504     //
5505     $template_table = '
5506     <table class="tab-tab">
5507     <thead>
5508     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5509     <th class="title col-0 firstcol">
5510     <span class="name">
5511     %s
5512     </span>
5513     </th>
5514     <th class="title col-1">
5515     <span class="name">
5516     %s
5517     </span>
5518     </th>
5519     <th class="title col-2 lastcol">
5520     <span class="name">
5521     %s
5522     </span>
5523     </th>
5524     </tr>
5525     </thead>
5526     <tbody>
5527     %s
5528     </tbody>
5529     </table>
5530     ';
5531     //
5532     $template_line = '
5533     <tr class="tab-data odd">
5534     <td class="col-0 firstcol">
5535     %s
5536     </td>
5537     <td class="col-1 ">
5538     %s
5539     </td>
5540     <td class="col-2 lastcol">
5541     %s
5542     </td>
5543     </tr>
5544     ';
5545     //
5546     $template_href = '../scr/form.php?obj=dossier_contentieux_tous_recours&amp;action=3&amp;idx=%s';
5547     //
5548     $template_link = '
5549     <a class="lienTable" href="%s">
5550     %s
5551     </a>
5552     ';
5553     // Bouton consulter
5554     $template_btn_consulter = '
5555     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5556     ._('Consulter')
5557     .'</span>
5558     ';
5559     //
5560    
5561     /**
5562     * Si il y a des dossiers à afficher, alors on affiche le widget.
5563     */
5564     // On construit le contenu du tableau
5565     $ct_tbody = '';
5566     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5567     // On construit l'attribut href du lien
5568     $ct_href = sprintf(
5569     $template_href,
5570     // idx
5571     $row["dossier"]
5572     );
5573     // On construit la ligne
5574     $ct_tbody .= sprintf(
5575     $template_line,
5576     // Colonne 1 - Numéro de dossier
5577     sprintf(
5578     $template_link,
5579     $ct_href,
5580     $template_btn_consulter
5581     ),
5582     // Colonne 2 - Numéro de dossier
5583     sprintf(
5584     $template_link,
5585     $ct_href,
5586     $row["dossier_libelle"]
5587     ),
5588     // Colonne 3 - Date de clôture d'instruction
5589     sprintf(
5590     $template_link,
5591     $ct_href,
5592     $this->f->formatDate($row["date_cloture_instruction"])
5593     )
5594     );
5595     }
5596     // Affichage du tableau listant les dossiers
5597     printf(
5598     $template_table,
5599     // Colonne 1 - Consulter
5600     '',
5601     // Colonne 2 - Numéro de dossier
5602     _('dossier'),
5603     // Colonne 3 - Date de clôture d'instruction
5604     _("date_cloture_instruction"),
5605     // Le Contenu
5606     $ct_tbody
5607     );
5608     // Affichage du footer
5609     printf(
5610     $this->template_footer,
5611     "../scr/tab.php?obj=dossier_contentieux_clotures&filtre=" . $filtre,
5612     _("Voir +")
5613     );
5614     }
5615    
5616     /**
5617     * Cette méthode permet de récupérer la configuration du widget 'Les audience'.
5618     *
5619     * @return array
5620     */
5621     function get_config_dossier_contentieux_audience($arguments) {
5622     // Initialisation du tableau des paramètres avec ses valeur par défaut
5623     $arguments_default = array(
5624     "filtre" => "instructeur"
5625     );
5626     // Vérification des arguments
5627     foreach ($arguments_default as $key => $value) {
5628     //
5629     if (isset($arguments[$key])) {
5630     //
5631     $elem = trim($arguments[$key]);
5632     //
5633     if ($key === "filtre"
5634     && in_array($elem, array("instructeur", "division", "aucun"))) {
5635     // La valeur doit être dans cette liste
5636     $arguments[$key] = $elem;
5637     continue;
5638     }
5639     }
5640     //
5641     $arguments[$key] = $value;
5642     }
5643    
5644     $filtre = $arguments["filtre"];
5645    
5646     // SELECT - CHAMPAFFICHE
5647     $trim_concat_terrain = 'TRIM(CONCAT(dossier.terrain_adresse_voie_numero,\' \',
5648     dossier.terrain_adresse_voie,\' \',
5649     dossier.terrain_adresse_lieu_dit,\' \',
5650     dossier.terrain_adresse_code_postal,\' \',
5651     dossier.terrain_adresse_localite,\' \',
5652     dossier.terrain_adresse_bp,\' \',
5653     dossier.terrain_adresse_cedex
5654 softime 7067 )) as "'._("localisation").'"';
5655 softime 6565 //
5656     $case_contrevenant = "
5657     CASE WHEN demandeur_contrevenant.qualite = 'particulier'
5658     THEN TRIM(CONCAT(demandeur_contrevenant.particulier_nom, ' ', demandeur_contrevenant.particulier_prenom))
5659     ELSE TRIM(CONCAT(demandeur_contrevenant.personne_morale_raison_sociale, ' ', demandeur_contrevenant.personne_morale_denomination))
5660     END
5661     ";
5662     //
5663     $query_ct_select_champaffiche = array(
5664     'dossier.dossier as "'._("dossier").'"',
5665     'dossier.dossier_libelle as "'._("dossier").'"',
5666     $trim_concat_terrain,
5667     $case_contrevenant.' as "'._("contrevenant").'"',
5668     'to_char(dossier.date_premiere_visite ,\'DD/MM/YYYY\') as "'._("date_premiere_visite").'"',
5669     'to_char(dossier.date_derniere_visite ,\'DD/MM/YYYY\') as "'._("date_derniere_visite").'"',
5670     'etat.libelle as "'._("etat").'"',
5671     'to_char(donnees_techniques.ctx_date_audience, \'DD/MM/YYYY\') as "'._("ctx_date_audience").'"',
5672     );
5673    
5674     /**
5675     * Construction de la requête
5676     */
5677     // SELECT
5678     $query_ct_select = "
5679     dossier.dossier,
5680     dossier.dossier_libelle,
5681     donnees_techniques.ctx_date_audience
5682     ";
5683    
5684     // FROM
5685     $query_ct_from = "
5686     ".DB_PREFIXE."dossier
5687     LEFT JOIN ".DB_PREFIXE."etat
5688     ON dossier.etat = etat.etat
5689     LEFT JOIN (
5690     SELECT *
5691     FROM ".DB_PREFIXE."lien_dossier_demandeur
5692     INNER JOIN ".DB_PREFIXE."demandeur
5693     ON demandeur.demandeur = lien_dossier_demandeur.demandeur
5694     WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE
5695     AND LOWER(demandeur.type_demandeur) = LOWER('contrevenant')
5696     ) as demandeur_contrevenant
5697     ON demandeur_contrevenant.dossier = dossier.dossier
5698     LEFT JOIN ".DB_PREFIXE."dossier_autorisation
5699     ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
5700     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
5701     ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
5702     LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
5703     ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
5704     LEFT JOIN ".DB_PREFIXE."avis_decision
5705     ON avis_decision.avis_decision=dossier.avis_decision
5706     LEFT JOIN ".DB_PREFIXE."donnees_techniques
5707     ON donnees_techniques.dossier_instruction = dossier.dossier
5708     %s
5709     %s
5710     %s
5711     ";
5712    
5713     $query_ct_where_instructeur_filter = "";
5714     $query_ct_where_division_filter = "";
5715     $query_ct_where_collectivite_filter = "";
5716     // Filtre sur les dossiers qui concernent l'utilisateur
5717     if ($filtre == "instructeur") {
5718     //
5719     $query_ct_where_instructeur_filter = " JOIN ".DB_PREFIXE."instructeur
5720     ON dossier.instructeur=instructeur.instructeur
5721     OR dossier.instructeur_2=instructeur.instructeur
5722     JOIN ".DB_PREFIXE."om_utilisateur
5723     ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
5724     AND om_utilisateur.login='".$_SESSION['login']."'
5725     ";
5726     }
5727    
5728     // Filtre sur les dossier de la division
5729     if ($filtre == "division") {
5730     //
5731     $query_ct_where_division_filter = " JOIN ".DB_PREFIXE."division
5732     ON dossier.division=division.division
5733     AND division.division = ".$_SESSION['division']."
5734     ";
5735     }
5736    
5737     // Dans tous les cas si l'utilisateur fait partie d'une collectivité
5738     // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
5739     // collectivité
5740     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5741     $query_ct_where_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite
5742     ON dossier.om_collectivite=om_collectivite.om_collectivite
5743     AND om_collectivite.om_collectivite=".$_SESSION['collectivite']."
5744     ";
5745     } else {
5746     $query_ct_where_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite
5747     ON dossier.om_collectivite=om_collectivite.om_collectivite
5748     ";
5749     }
5750    
5751     $query_ct_from = sprintf($query_ct_from, $query_ct_where_instructeur_filter, $query_ct_where_division_filter, $query_ct_where_collectivite_filter);
5752    
5753     // WHERE - COMMON
5754     $query_ct_where_common = "
5755     LOWER(dossier_autorisation_type.code) = LOWER('IN')
5756     AND donnees_techniques.ctx_date_audience IS NOT NULL
5757     AND donnees_techniques.ctx_date_audience >= CURRENT_TIMESTAMP
5758     AND donnees_techniques.ctx_date_audience <= CURRENT_TIMESTAMP + interval '1 month'
5759     ";
5760     // ORDER BY
5761    
5762     $query_ct_orderby = "
5763     donnees_techniques.ctx_date_audience ASC
5764     ";
5765    
5766     $query_ct_where_groupe = "";
5767     // Gestion des groupes et confidentialité
5768     include('../sql/pgsql/filter_group_widgets.inc.php');
5769    
5770     /**
5771     * Message d'aide
5772     */
5773     //
5774     $message_filtre = "";
5775     //
5776     switch ($filtre) {
5777     case "instructeur":
5778     $message_filtre = " "._("dont je suis l'instructeur");
5779     break;
5780     case "division":
5781     $message_filtre = " "._("situés dans ma division");
5782     break;
5783     case "aucun":
5784     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
5785     $message_filtre = " "._("situés dans ma collectivité");
5786     } else {
5787     $message_filtre = " "._("situés dans toutes les collectivités");
5788     }
5789     break;
5790     }
5791     //
5792     $message_help = sprintf(
5793     _("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."),
5794     $message_filtre
5795     );
5796    
5797     /**
5798     * Return
5799     */
5800     //
5801     return array(
5802     "arguments" => $arguments,
5803     "message_help" => $message_help,
5804     "query_ct_select" => $query_ct_select,
5805     "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
5806     "query_ct_from" => $query_ct_from,
5807     "query_ct_where" => $query_ct_where_common,
5808     "query_ct_where_groupe" => $query_ct_where_groupe,
5809     "query_ct_orderby" => $query_ct_orderby,
5810     );
5811     }
5812    
5813     /**
5814     * WIDGET DASHBOARD - Les audiences
5815     * @return void
5816     */
5817     function view_widget_dossier_contentieux_audience($content = null) {
5818     /**
5819     * Ce widget est configurable via l'interface Web. Lors de la création
5820     * du widget dans le paramétrage il est possible de spécifier la ou les
5821     * options suivantes :
5822     * - filtre :
5823     * = instructeur
5824     * = division
5825     * = aucun
5826     * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
5827     */
5828     // Liste des paramètres
5829     $params = array("filtre");
5830     // Formatage des arguments reçus en paramètres
5831     $arguments = $this->get_arguments($content, $params);
5832     // Récupération de la configuration du widget
5833     $conf = $this->get_config_dossier_contentieux_audience($arguments);
5834    
5835     //
5836     $filtre = $conf["arguments"]["filtre"];
5837     //
5838    
5839     /**
5840     * Composition de la requête
5841     */
5842     //
5843     $query = sprintf("
5844     SELECT
5845     %s
5846     FROM
5847     %s
5848     WHERE
5849     %s
5850     %s
5851     ORDER BY
5852     %s
5853     LIMIT 5",
5854     $conf["query_ct_select"],
5855     $conf["query_ct_from"],
5856     $conf["query_ct_where"],
5857     $conf["query_ct_where_groupe"],
5858     $conf["query_ct_orderby"]
5859     );
5860    
5861     /**
5862     * Exécution de la requête
5863     */
5864     //
5865     $res = $this->f->db->query($query);
5866     $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
5867     $this->f->isDatabaseError($res);
5868    
5869     // Affichage du message d'informations
5870     printf(
5871     $this->template_help,
5872     $conf["message_help"]
5873     );
5874     /**
5875     * Si il n'y a aucun dossier à afficher, alors on affiche un message
5876     * clair à l'utilisateur et on sort de la vue.
5877     */
5878     // Si il n'y a aucun dossier à afficher
5879     if ($res->numrows() == 0) {
5880     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.");
5881     return;
5882     }
5883    
5884     /**
5885     * Template nécessaires à l'affichage du widget
5886     */
5887     //
5888     $template_table = '
5889     <table class="tab-tab">
5890     <thead>
5891     <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
5892     <th class="title col-0 firstcol">
5893     <span class="name">
5894     %s
5895     </span>
5896     </th>
5897     <th class="title col-1">
5898     <span class="name">
5899     %s
5900     </span>
5901     </th>
5902     <th class="title col-2 lastcol">
5903     <span class="name">
5904     %s
5905     </span>
5906     </th>
5907     </tr>
5908     </thead>
5909     <tbody>
5910     %s
5911     </tbody>
5912     </table>
5913     ';
5914     //
5915     $template_line = '
5916     <tr class="tab-data odd">
5917     <td class="col-0 firstcol">
5918     %s
5919     </td>
5920     <td class="col-1 ">
5921     %s
5922     </td>
5923     <td class="col-2 lastcol">
5924     %s
5925     </td>
5926     </tr>
5927     ';
5928     //
5929     $template_href = '../scr/form.php?obj=dossier_contentieux_toutes_infractions&amp;action=3&amp;idx=%s';
5930     //
5931     $template_link = '
5932     <a class="lienTable" href="%s">
5933     %s
5934     </a>
5935     ';
5936     // Bouton consulter
5937     $template_btn_consulter = '
5938     <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
5939     ._('Consulter')
5940     .'</span>
5941     ';
5942     //
5943    
5944     /**
5945     * Si il y a des dossiers à afficher, alors on affiche le widget.
5946     */
5947     // On construit le contenu du tableau
5948     $ct_tbody = '';
5949     while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
5950     // On construit l'attribut href du lien
5951     $ct_href = sprintf(
5952     $template_href,
5953     // idx
5954     $row["dossier"]
5955     );
5956     // On construit la ligne
5957     $ct_tbody .= sprintf(
5958     $template_line,
5959     // Colonne 1 - Numéro de dossier
5960     sprintf(
5961     $template_link,
5962     $ct_href,
5963     $template_btn_consulter
5964     ),
5965     // Colonne 2 - Numéro de dossier
5966     sprintf(
5967     $template_link,
5968     $ct_href,
5969     $row["dossier_libelle"]
5970     ),
5971     // Colonne 3 - Date d'audience
5972     sprintf(
5973     $template_link,
5974     $ct_href,
5975     $this->f->formatDate($row["ctx_date_audience"])
5976     )
5977     );
5978     }
5979     // Affichage du tableau listant les dossiers
5980     printf(
5981     $template_table,
5982     // Colonne 1 - Consulter
5983     '',
5984     // Colonne 2 - Numéro de dossier
5985     _('dossier'),
5986     // Colonne 3 - Date d'audience
5987     _('ctx_date_audience'),
5988     // Le Contenu
5989     $ct_tbody
5990     );
5991     // Affichage du footer
5992     printf(
5993     $this->template_footer,
5994     "../scr/tab.php?obj=dossier_contentieux_audience&filtre=" . $filtre,
5995     _("Voir +")
5996     );
5997     }
5998    
5999    
6000 mbroquet 3730 }
6001    
6002     ?>

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26