/[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 10573 - (hide annotations)
Thu Oct 14 12:43:35 2021 UTC (3 years, 3 months ago) by softime
File size: 322386 byte(s)
* Fusion de la branche d'intégration 5.0.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26