/[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 9282 - (hide annotations)
Fri Apr 10 16:44:23 2020 UTC (4 years, 8 months ago) by softime
File size: 289956 byte(s)
* Merge de la branche de développement compat-php dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26