/[openfoncier]/trunk/obj/om_widget.class.php
ViewVC logotype

Contents of /trunk/obj/om_widget.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 4479 - (show annotations)
Mon Jun 13 16:50:04 2016 UTC (8 years, 6 months ago) by fmichon
File size: 53860 byte(s)
* Coding : Mise à niveau des surcharges des classes du core (regénération,
  remplacement du constructeur, suppression de la définition de l'attribut
  permettant la gestion des nouvelles actions).
  

1 <?php
2 /**
3 * OM_WIDGET - Surcharge du core
4 *
5 * L'objectif de la surcharge est de coder les vues spécifiques des widgets
6 * de type 'file'.
7 *
8 * @package openads
9 * @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $
10 */
11
12 require_once "../core/obj/om_widget.class.php";
13
14 class om_widget extends om_widget_core {
15
16 /**
17 * Constructeur.
18 */
19 function __construct($id, &$dnu1 = null, $dnu2 = null) {
20 $this->constructeur($id);
21 }
22
23 /**
24 *
25 */
26 var $template_help = '<div class="widget-help"><span class="info-16" title="%s"></span></div>';
27
28 /**
29 *
30 */
31 var $template_footer = '
32 <div class="widget-footer">
33 <a href="%s">
34 %s
35 </a>
36 </div>
37 ';
38
39 /**
40 * Cette méthode retourne un arbre html représentant un raccourci.
41 *
42 * Un raccourci est composé d'un lien, d'une image et d'une description.
43 * Voir les widgets :
44 * - widget_nouvelle_demande_autre_dossier
45 * - widget_nouvelle_demande_dossier_encours
46 * - widget_nouvelle_demande_nouveau_dossier
47 */
48 function get_display_widget_shortlink($config) {
49 return sprintf (
50 '<a href="%s"><span><img src="%s" align="left" alt="%s" />%s</span></a>',
51 $config["a_href"],
52 $config["img_src"],
53 $config["img_alt"],
54 $config["a_content"]
55 );
56 }
57
58 /**
59 * WIDGET DASHBOARD - widget_nouvelle_demande_autre_dossier.
60 */
61 function view_widget_nouvelle_demande_autre_dossier($content = null) {
62 echo $this->get_display_widget_shortlink(array(
63 "a_href" => "../scr/tab.php?obj=demande_autre_dossier",
64 "img_src" => "../app/img/dossier-existant.png",
65 "img_alt" => _("Autres dossiers"),
66 "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours ou une autorisation existante"),
67 ));
68 }
69
70 /**
71 * WIDGET DASHBOARD - widget_nouvelle_demande_dossier_encours.
72 */
73 function view_widget_nouvelle_demande_dossier_encours($content = null) {
74 echo $this->get_display_widget_shortlink(array(
75 "a_href" => "../scr/tab.php?obj=demande_dossier_encours",
76 "img_src" => "../app/img/dossier-existant.png",
77 "img_alt" => _("Dossier en cours"),
78 "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours"),
79 ));
80 }
81
82 /**
83 * WIDGET DASHBOARD - widget_nouvelle_demande_nouveau_dossier.
84 */
85 function view_widget_nouvelle_demande_nouveau_dossier($content = null) {
86 echo $this->get_display_widget_shortlink(array(
87 "a_href" => "../scr/form.php?obj=demande_nouveau_dossier&amp;action=0&amp;advs_id=&amp;tricol=&amp;valide=&amp;retour=tab&amp;new=",
88 "img_src" => "../app/img/dossier-nouveau.png",
89 "img_alt" => _("Nouveau dossier"),
90 "a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant le depot d'un nouveau dossier"),
91 ));
92 }
93
94 /**
95 * WIDGET DASHBOARD - widget_recherche_dossier.
96 *
97 * Quatre cas d'utilisation :
98 * - 1 - La valeur recherchée correspond exactement au code d'un DI,
99 * alors on accède directement à la fiche de visualisation du DI.
100 * - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au
101 * listing des dossiers d'instruction avec le formulaire de
102 * recherche avancée pré-rempli avec la valeur saisie.
103 * - 3 - La valeur recherchée renvoi aucun enregistrement, alors on
104 * affiche un message en ce sens directement dans le widget.
105 * - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce
106 * sens directement dans le widget.
107 *
108 * @return void
109 */
110 function view_widget_recherche_dossier($content = null) {
111
112 /**
113 * Traitement de la validation du formulaire
114 */
115 //
116 if ($this->f->get_submitted_post_value("validation") != null
117 && $this->f->get_submitted_post_value("dossier") !== null
118 && $this->f->get_submitted_post_value("dossier") != "") {
119 // Mémorisation de la recherche
120 $search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier"));
121 // Ajout d'une étoile au début s'il n'y en n'a pas.
122 // Par defaut * est toujours ajouté à la fin des recherches.
123 if (substr($search, 0, 1) != '*') {
124 $search = '*'.$search;
125 }
126 // Traitement des valeurs postées
127 $posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier"))));
128 $posted_dossiers = str_replace(';', ',', $posted_dossiers);
129
130 //
131 // UNE VALEUR SAISIE
132 //
133
134 // WHERE - Filtre Collectivité
135 $where_collectivite = "";
136 // Si collectivité utilisateur mono alors filtre sur celle-ci
137 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
138 //
139 $where_collectivite = "
140 AND dossier.om_collectivite=".$_SESSION['collectivite']."
141 ";
142 }
143
144 // Construction de la requête
145 // Pour chaque dossier on cherche sur les deux champs du code du
146 // dossier (un avec et un sans espaces)
147 $posted_dossiers = explode(',', $posted_dossiers);
148 $liste_dossiers = array();
149 foreach ($posted_dossiers as $posted_dossier) {
150 $sql = "
151 SELECT
152 dossier
153 FROM
154 ".DB_PREFIXE."dossier
155 WHERE
156 (LOWER(dossier.dossier) LIKE '%".$posted_dossier."%'
157 OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' )
158 ";
159 $sql .= $where_collectivite;
160 // Exécution de la requête
161 $res = $this->f->db->query($sql);
162 $this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE);
163 $this->f->isDatabaseError($res);
164 // On récupère les numéros de dossier dans les résultats
165 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
166 $liste_dossiers[] = $row['dossier'];
167 }
168 }
169 $total_dossiers = count($liste_dossiers);
170 // Si on obtient un seul résultat
171 if ($total_dossiers == 1) {
172 // On reformate le dossier
173 $dossier = strtoupper(str_replace(' ', '', $liste_dossiers[0]));
174 // On redirige vers le listing des DI
175 echo '
176 <script type="text/javascript" >
177 widget_recherche_dossier(\''.$dossier.'\', 1);
178 </script>
179 ';
180 // On arrête l'exécution du script car l'utilisateur a été
181 // redirigé vers un autre script
182 exit();
183 }
184 // Si on obtient plusieurs résultats
185 if ($total_dossiers > 1) {
186 // On redirige vers le listing des DI
187 echo '
188 <script type="text/javascript" >
189 widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.');
190 </script>
191 ';
192 // On arrête l'exécution du script car l'utilisateur a été
193 // redirigé vers un autre script
194 exit();
195 }
196 // Cas d'utilisation n°3
197 // Si aucun dossier trouve
198 // Affiche un message d'erreur
199 $erreur = _("Aucun dossier trouve");
200
201 } elseif ($this->f->get_submitted_post_value("validation") != null
202 && $this->f->get_submitted_post_value("dossier") !== null
203 && $this->f->get_submitted_post_value("dossier") == '') {
204
205 //
206 // AUCUNE VALEUR SAISIE
207 //
208
209 // Cas d'utilisation n°4
210 // Affiche un message d'erreur
211 $erreur = _("Veuillez saisir un No de dossier.");
212
213 }
214
215 /**
216 * Affichage du widget
217 */
218 // Affichage du message d'informations
219 printf(
220 '<div class="widget-help"><span class="info-16" title="%s"></span></div>',
221 _("Permet la recherche directe de dossiers d'instruction.\n\n".
222 "Deux modes de saisie sont possibles :\n".
223 "- 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".
224 "- Code de dossier partiel 'DP' ou 'PC*P0' ou '*013055*' pour un accès au formulaire de recherche avancée des dossiers d'instruction.")
225 );
226 // Ouverture du form
227 echo "\t<form method=\"post\" id=\"widget_recherche_dossier_form\" action=\"../scr/dashboard.php\">\n";
228 // Affichage d'un éventuel message d'erreur
229 if (isset($erreur) && $erreur != "") {
230 $class = "error";
231 $this->f->displayMessage($class, $erreur);
232 }
233 // Configuration du formulaire de recherche
234 $champs = array("dossier");
235 $form = new $this->om_formulaire(null, 0, 0, $champs);
236 $form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>');
237 $form->setType("dossier", "text");
238 $form->setTaille("dossier", 20);
239 $form->setMax("dossier", 250);
240 // Affichage du formulaire
241 $form->entete();
242 $form->afficher($champs, 0, false, false);
243 $form->enpied();
244 // Affichage des contrôles du formulaire
245 echo "\t<div class=\"formControls\">\n";
246 echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\"
247 value=\""._("Valider")."\" name=\"validation\" />\n";
248 echo "\t</div>\n";
249 // Fermeture du form
250 echo "\t</form>\n";
251 }
252
253 /**
254 * Cette méthode permet de récupérer la configuration du widget 'Dossiers
255 * limites'.
256 *
257 * @return array
258 */
259 function get_config_dossiers_limites($arguments) {
260 // Initialisation du tableau des paramètres avec ses valeur par défaut
261 $arguments_default = array(
262 "nombre_de_jours" => 15,
263 "codes_datd" => null,
264 "filtre" => "instructeur",
265 );
266 // Vérification des arguments
267 foreach ($arguments_default as $key => $value) {
268 //
269 if (isset($arguments[$key])) {
270 //
271 $elem = trim($arguments[$key]);
272 //
273 if ($key === "nombre_de_jours"
274 && intval($elem) > 0) {
275 // Ce doit être un entier
276 $arguments[$key] = intval($elem);
277 continue;
278 } elseif ($key === "codes_datd"
279 && $elem != "") {
280 // Ce doit être un tableau
281 $arguments[$key] = explode(";", $elem);
282 continue;
283 } elseif ($key === "filtre"
284 && in_array($elem, array("instructeur", "division", "aucun"))) {
285 // La valeur doit être dans cette liste
286 $arguments[$key] = $elem;
287 continue;
288 }
289 }
290 //
291 $arguments[$key] = $value;
292 }
293 //
294 $nombre_de_jours = $arguments["nombre_de_jours"];
295 $codes_datd = $arguments["codes_datd"];
296 $filtre = $arguments["filtre"];
297
298 /**
299 * Construction de la requête
300 */
301 // SELECT
302 $query_ct_select = "
303 dossier.dossier,
304 dossier.dossier_libelle,
305 dossier.date_limite,
306 dossier.date_limite_incompletude,
307 CASE
308 WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
309 THEN to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY')
310 ELSE
311 to_char(dossier.date_limite, 'DD/MM/YYYY')
312 END as date_limite_na,
313 COALESCE(
314 demandeur.particulier_nom,
315 demandeur.personne_morale_denomination
316 ) AS nom_petitionnaire,
317 CASE
318 WHEN dossier.enjeu_erp is TRUE
319 THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>'
320 ELSE
321 ''
322 END
323 ||
324 CASE
325 WHEN dossier.enjeu_urba is TRUE
326 THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>'
327 ELSE
328 ''
329 END AS enjeu
330 ";
331 // SELECT - CHAMPAFFICHE
332 $query_ct_select_champaffiche = array(
333 'dossier.dossier as "'._("dossier").'"',
334 'dossier.dossier_libelle as "'._("dossier").'"',
335 'COALESCE(
336 demandeur.particulier_nom,
337 demandeur.personne_morale_denomination
338 ) AS "'._("nom_petitionnaire").'"',
339 'CASE
340 WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE
341 THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\')
342 ELSE
343 to_char(dossier.date_limite, \'DD/MM/YYYY\')
344 END as "'._("date_limite").'"',
345 'CASE
346 WHEN dossier.enjeu_erp is TRUE
347 THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\'
348 ELSE
349 \'\'
350 END
351 ||
352 CASE
353 WHEN dossier.enjeu_urba is TRUE
354 THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\'
355 ELSE
356 \'\'
357 END AS "'._("enjeu").'"',
358 // XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau
359 'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN
360 dossier.date_limite_incompletude ELSE
361 dossier.date_limite END as date_limite_na',
362 );
363 // FROM
364 $query_ct_from = "
365 ".DB_PREFIXE."dossier
366 LEFT JOIN ".DB_PREFIXE."etat
367 ON dossier.etat = etat.etat
368 LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur
369 ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
370 LEFT JOIN ".DB_PREFIXE."demandeur
371 ON lien_dossier_demandeur.demandeur = demandeur.demandeur
372 LEFT JOIN ".DB_PREFIXE."dossier_autorisation
373 ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation
374 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille
375 ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
376 LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type
377 ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type
378 LEFT JOIN ".DB_PREFIXE."instructeur
379 ON dossier.instructeur=instructeur.instructeur
380 LEFT JOIN ".DB_PREFIXE."om_utilisateur
381 ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur
382 ";
383 // WHERE - COMMON
384 $query_ct_where_common = "
385 (
386 (
387 dossier.incomplet_notifie IS FALSE
388 AND date_limite <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day'
389 )
390 OR
391 (
392 dossier.incomplet_notifie IS TRUE
393 AND dossier.incompletude IS TRUE
394 AND date_limite_incompletude <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day'
395 )
396 )
397 AND etat.statut != 'cloture'
398 AND dossier.avis_decision IS NULL
399 AND LOWER(dossier.accord_tacite) = 'oui'
400 ";
401 // WHERE - DATD
402 // Filtre sur le type détaillé des dossiers
403 $query_ct_where_datd_filter = "";
404 if (!is_null($codes_datd)
405 && is_array($codes_datd)
406 && count($codes_datd) != 0) {
407 //
408 $sql_codes = "";
409 //
410 foreach ($codes_datd as $code) {
411 $sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR ";
412 }
413 $sql_codes = substr($sql_codes, 0, count($sql_codes) - 4);
414 //
415 $query_ct_where_datd_filter = " AND ( ".$sql_codes." ) ";
416 }
417 // WHERE - USER
418 // Filtre sur les dossiers qui concernent l'utilisateur
419 $query_ct_where_user_filter = "";
420 //
421 if ($filtre == "instructeur") {
422 //
423 $query_ct_where_user_filter = "
424 AND om_utilisateur.login='".$_SESSION['login']."'
425 ";
426 } elseif ($filtre == "division") {
427 //
428 $query_ct_where_user_filter .= "
429 AND dossier.division = ".$_SESSION['division']."
430 ";
431 } elseif ($filtre == "aucun") {
432 //
433 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
434 $query_ct_where_user_filter = "
435 AND dossier.om_collectivite=".$_SESSION['collectivite']."
436 ";
437 }
438 }
439 // ORDER BY
440 $query_ct_orderby = "
441 date_limite_na
442 ";
443
444 /**
445 * Message d'aide
446 */
447 //
448 $message_filtre = "";
449 //
450 switch($filtre) {
451 case "instructeur" :
452 $message_filtre = " "._("(filtrés par instructeur)");
453 break;
454 case "division" :
455 $message_filtre = " "._("(filtrés par division)");
456 break;
457 }
458 //
459 $message_help = sprintf(
460 _("Les dossiers%s avec acceptation tacite sur lesquels aucune décision n'a été prise et dont la date limite est dans moins de %s jours%s."),
461 (is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"),
462 $nombre_de_jours,
463 $message_filtre
464 );
465
466 /**
467 * Return
468 */
469 //
470 return array(
471 "arguments" => $arguments,
472 "message_help" => $message_help,
473 "query_ct_select" => $query_ct_select,
474 "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
475 "query_ct_from" => $query_ct_from,
476 "query_ct_where_common" => $query_ct_where_common,
477 "query_ct_where_datd_filter" => $query_ct_where_datd_filter,
478 "query_ct_where_user_filter" => $query_ct_where_user_filter,
479 "query_ct_orderby" => $query_ct_orderby,
480 );
481 }
482
483 /**
484 * WIDGET DASHBOARD - Dossiers limites
485 *
486 * @return void
487 */
488 function view_widget_dossiers_limites($content = null) {
489
490 /**
491 * Ce widget est configurable via l'interface Web. Lors de la création
492 * du widget dans le paramétrage il est possible de spécifier la ou les
493 * options suivantes :
494 *
495 * - nombre_de_jours : c'est le délai en jours avant la date limite à
496 * partir duquel on souhaite voir apparaître les dossiers dans le
497 * widget.
498 * (default) Par défaut la valeur est 15 jours.
499 *
500 * - codes_datd : la liste des types de dossiers à afficher. exemple :
501 * "PCI;PCA;DPS;CUa;CUb".
502 * (default) Par défaut tous les types sont affichés. [null]
503 *
504 * - filtre :
505 * = instructeur
506 * = division
507 * = aucun
508 * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
509 */
510 // Liste des paramètres
511 $params = array("nombre_de_jours", "codes_datd", "filtre", );
512 // Formatage des arguments reçus en paramètres
513 $arguments = $this->get_arguments($content, $params);
514 // Récupération de la configuration du widget
515 $conf = $this->get_config_dossiers_limites($arguments);
516 //
517 $nombre_de_jours = $conf["arguments"]["nombre_de_jours"];
518 $codes_datd = $conf["arguments"]["codes_datd"];
519 $filtre = $conf["arguments"]["filtre"];
520
521 /**
522 * Composition de la requête
523 */
524 //
525 $query = sprintf("
526 SELECT
527 %s
528 FROM
529 %s
530 WHERE
531 %s
532 %s
533 %s
534 ORDER BY
535 %s
536 LIMIT 10",
537 $conf["query_ct_select"],
538 $conf["query_ct_from"],
539 $conf["query_ct_where_common"],
540 $conf["query_ct_where_datd_filter"],
541 $conf["query_ct_where_user_filter"],
542 $conf["query_ct_orderby"]
543 );
544
545 /**
546 * Exécution de la requête
547 */
548 //
549 $res = $this->f->db->query($query);
550 $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
551 $this->f->isDatabaseError($res);
552
553 // Affichage du message d'informations
554 printf(
555 $this->template_help,
556 $conf["message_help"]
557 );
558
559 /**
560 * Si il n'y a aucun dossier à afficher, alors on affiche un message
561 * clair à l'utilisateur et on sort de la vue.
562 */
563 // Si il n'y a aucun dossier à afficher
564 if ($res->numrows() == 0) {
565 // Affichage du message d'informations
566 echo _("Vous n'avez pas de dossiers limites pour le moment.");
567 // Exit
568 return;
569 }
570
571 /**
572 * Template nécessaires à l'affichage du widget
573 */
574 //
575 $template_table = '
576 <table class="tab-tab">
577 <thead>
578 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
579 <th class="title col-0 firstcol">
580 <span class="name">
581 %s
582 </span>
583 </th>
584 <th class="title col-1">
585 <span class="name">
586 %s
587 </span>
588 </th>
589 <th class="title col-2">
590 <span class="name">
591 %s
592 </span>
593 </th>
594 <th class="title col-3 lastcol">
595 <span class="name">
596 %s
597 </span>
598 </th>
599 </tr>
600 </thead>
601 <tbody>
602 %s
603 </tbody>
604 </table>
605 ';
606 //
607 $template_line = '
608 <tr class="tab-data odd">
609 <td class="col-1 firstcol">
610 %s
611 </td>
612 <td class="col-1">
613 %s
614 </td>
615 <td class="col-2">
616 %s
617 </td>
618 <td class="col-3 lastcol">
619 %s
620 </td>
621 </tr>
622 ';
623 //
624 $template_href = '../scr/form.php?obj=dossier_instruction&amp;action=3&amp;idx=%s';
625 //
626 $template_link = '
627 <a class="lienTable" href="%s">
628 %s
629 </a>
630 ';
631
632 /**
633 * Si il y a des dossiers à afficher, alors on affiche le widget.
634 */
635 // On construit le contenu du tableau
636 $ct_tbody = '';
637 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
638 // On construit l'attribut href du lien
639 $ct_href = sprintf(
640 $template_href,
641 // idx
642 $row["dossier"]
643 );
644 // On construit la ligne
645 $ct_tbody .= sprintf(
646 $template_line,
647 // Colonne 1 - Numéro de dossier
648 sprintf(
649 $template_link,
650 $ct_href,
651 $row["dossier_libelle"]
652 ),
653 // Colonne 2 - Nom du pétitionnaire
654 sprintf(
655 $template_link,
656 $ct_href,
657 $row["nom_petitionnaire"]
658 ),
659 // Colonne 3 - Date limite
660 sprintf(
661 $template_link,
662 $ct_href,
663 $this->f->formatDate($row["date_limite_na"])
664 ),
665 // Colonne 4 - Enjeu
666 sprintf(
667 $template_link,
668 $ct_href,
669 $row["enjeu"]
670 )
671 );
672 }
673 // Affichage du tableau listant les dossiers
674 printf(
675 $template_table,
676 // Colonne 1 - Numéro de dossier
677 _('dossier'),
678 // Colonne 2 - Nom du pétitionnaire
679 _('nom_petitionnaire'),
680 // Colonne 3 - Date limite
681 _('date_limite'),
682 // Colonne 4 - Enjeu
683 _('enjeu'),
684 // Contenu du tableau
685 $ct_tbody
686 );
687 // Affichage du footer
688 printf(
689 $this->template_footer,
690 // href (avec les paramètres du widget)
691 sprintf(
692 "../scr/tab.php?obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s",
693 $nombre_de_jours,
694 (is_null($codes_datd) ? "" : implode(";",$codes_datd)),
695 $filtre
696 ),
697 // titre
698 _("Voir +")
699 );
700 }
701
702 /**
703 * Cet méthode permet de formater, la chaîne de caractères reçue du
704 * paramétrage du widget en un tableau de valeurs dont les clés
705 * correspondent aux clés passées en paramètre.
706 *
707 * @param string $content
708 * @param array $params
709 *
710 * @return array
711 */
712 function get_arguments($content = null, $params = array()) {
713 //
714 $arguments = array();
715 // On explose les paramètres reçus avec un élément par ligne
716 $params_tmp1 = explode("\n", $content);
717 // On boucle sur chaque ligne de paramètre
718 foreach ($params_tmp1 as $key => $value) {
719 // On explose le paramètre de sa valeur avec le séparateur '='
720 $params_tmp2[] = explode("=", $value);
721 }
722 // On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue
723 // est acceptable ou non
724 foreach ($params_tmp2 as $key => $value) {
725 //
726 if (!isset($value[0]) || !isset($value[1])) {
727 continue;
728 }
729 //
730 if (in_array(trim($value[0]), $params)) {
731 $arguments[trim($value[0])] = trim($value[1]);
732 }
733 }
734 //
735 return $arguments;
736 }
737
738 /**
739 * WIDGET DASHBOARD - Retours de messages
740 *
741 * @return void
742 */
743 function view_widget_messages_retours($content = null) {
744
745 /**
746 * Ce widget est configurable via l'interface Web. Lors de la création
747 * du widget dans le paramétrage il est possible de spécifier la ou les
748 * options suivantes :
749 *
750 * - filtre :
751 * = instructeur
752 * = division
753 * = aucun
754 * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
755 */
756 // Liste des paramètres
757 $params = array("filtre", );
758 // Formatage des arguments reçus en paramètres
759 $arguments = $this->get_arguments($content, $params);
760 // Récupération de la configuration du widget
761 $conf = $this->get_config_messages_retours($arguments);
762 //
763 $filtre = $conf["arguments"]["filtre"];
764
765 /**
766 * Composition de la requête
767 */
768 //
769 $query = sprintf(
770 "SELECT
771 count(*)
772 FROM
773 %s
774 WHERE
775 %s
776 %s",
777 $conf["query_ct_from"],
778 $conf["query_ct_where_common"],
779 $conf["query_ct_where_user_filter"]
780 );
781
782 /**
783 * Exécution de la requête
784 */
785 //
786 $res = $this->f->db->getone($query);
787 $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
788 $this->f->isDatabaseError($res);
789
790 // Affichage du message d'informations
791 printf(
792 $this->template_help,
793 $conf["message_help"]
794 );
795
796 //
797 if (intval($res) === 0) {
798 //
799 echo _("Aucun message non lu.");
800 return;
801 }
802
803
804 /**
805 *
806 */
807 $template_panel = '
808 <div class="panel panel-box">
809 <div class="list-justified-container">
810 <ul class="list-justified text-center">
811 %s
812 </ul>
813 </div>
814 </div>';
815 /**
816 *
817 */
818 //
819 $panel = "";
820 //
821 $template_elem = '
822 <li>
823 <span class="size-h3 box-icon rounded %s">%s</span>
824 <p class="text-muted">%s %s</p>
825 </li>
826 ';
827 $panel_elem = sprintf(
828 $template_elem,
829 "bg-info",
830 intval($res),
831 _("Non lu"),
832 ""
833 );
834 //
835 $panel .= sprintf(
836 $template_panel,
837 $panel_elem
838 );
839 echo $panel;
840
841 /**
842 *
843 */
844 if ($filtre === "aucun") {
845 $obj_href_more_link = "messages_tous_retours";
846 } elseif ($filtre === "division") {
847 $obj_href_more_link = "messages_retours_ma_division";
848 } else {
849 $obj_href_more_link = "messages_mes_retours";
850 }
851
852 //
853 if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
854 return;
855 }
856 // Affichage du footer
857 printf(
858 $this->template_footer,
859 // href
860 sprintf(
861 '../scr/tab.php?obj=%s',
862 $obj_href_more_link
863 ),
864 // titre
865 _("Voir +")
866 );
867
868 }
869
870
871 /**
872 * Cette méthode permet de récupérer la configuration du widget 'Retours de
873 * messages'.
874 *
875 * @return array
876 */
877 function get_config_messages_retours($arguments) {
878 // Initialisation du tableau des paramètres avec ses valeur par défaut
879 $arguments_default = array(
880 "filtre" => "instructeur",
881 );
882 // Vérification des arguments
883 foreach ($arguments_default as $key => $value) {
884 //
885 if (isset($arguments[$key])) {
886 //
887 $elem = trim($arguments[$key]);
888 //
889 if ($key === "filtre"
890 && in_array($elem, array("instructeur", "division", "aucun"))) {
891 // La valeur doit être dans cette liste
892 $arguments[$key] = $elem;
893 continue;
894 }
895 }
896 //
897 $arguments[$key] = $value;
898 }
899 //
900 $filtre = $arguments["filtre"];
901
902 /**
903 * Construction de la requête
904 */
905 // FROM
906 $query_ct_from = "
907 ".DB_PREFIXE."dossier_message
908 LEFT JOIN ".DB_PREFIXE."dossier
909 ON dossier_message.dossier=dossier.dossier
910 INNER JOIN ".DB_PREFIXE."instructeur
911 ON instructeur.instructeur=dossier.instructeur
912 INNER JOIN ".DB_PREFIXE."om_utilisateur
913 ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur
914 LEFT JOIN ".DB_PREFIXE."division
915 ON dossier.division=division.division
916 LEFT JOIN ".DB_PREFIXE."om_collectivite
917 ON dossier.om_collectivite=om_collectivite.om_collectivite";
918 // WHERE - COMMON
919 $query_ct_where_common = "
920 dossier_message.lu IS FALSE
921 ";
922 // WHERE - USER
923 // Filtre sur les dossiers qui concernent l'utilisateur
924 $query_ct_where_user_filter = "";
925 //
926 if ($filtre == "instructeur") {
927 //
928 $query_ct_where_user_filter .= "
929 AND om_utilisateur.login='".$_SESSION['login']."'
930 ";
931 } elseif ($filtre == "division") {
932 //
933 $query_ct_where_user_filter .= "
934 AND dossier.division = ".$_SESSION['division']."
935 ";
936 }
937 // Dans tous les cas si l'utilisateur fait partie d'une collectivité
938 // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
939 // collectivité
940 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
941 $query_ct_where_user_filter .= "
942 AND dossier.om_collectivite=".$_SESSION['collectivite']."
943 ";
944 }
945
946 /**
947 * Message d'aide
948 */
949 //
950 $message_filtre = "";
951 //
952 switch ($filtre) {
953 case "instructeur":
954 $message_filtre = " "._("dont je suis l'instructeur");
955 break;
956 case "division":
957 $message_filtre = " "._("situés dans ma division");
958 break;
959 case "aucun":
960 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
961 $message_filtre = " "._("situés dans ma collectivité");
962 } else {
963 $message_filtre = " "._("situés dans toutes les collectivités");
964 }
965 break;
966 }
967 //
968 $message_help = sprintf(
969 _("Les messages marqués comme 'non lu' qui concernent des ".
970 "dossiers d'instruction%s."),
971 $message_filtre
972 );
973
974 /**
975 * Return
976 */
977 //
978 return array(
979 "arguments" => $arguments,
980 "message_help" => $message_help,
981 "query_ct_from" => $query_ct_from,
982 "query_ct_where_common" => $query_ct_where_common,
983 "query_ct_where_user_filter" => $query_ct_where_user_filter,
984 );
985 }
986
987 /**
988 * WIDGET DASHBOARD - Retours de consultation
989 *
990 * @return void
991 */
992 function view_widget_consultation_retours($content = null) {
993
994 /**
995 * Ce widget est configurable via l'interface Web. Lors de la création
996 * du widget dans le paramétrage il est possible de spécifier la ou les
997 * options suivantes :
998 *
999 * - filtre :
1000 * = instructeur
1001 * = division
1002 * = aucun
1003 * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1004 */
1005 // Liste des paramètres
1006 $params = array("filtre", );
1007 // Formatage des arguments reçus en paramètres
1008 $arguments = $this->get_arguments($content, $params);
1009 // Récupération de la configuration du widget
1010 $conf = $this->get_config_consultation_retours($arguments);
1011 //
1012 $filtre = $conf["arguments"]["filtre"];
1013
1014 /**
1015 * Composition de la requête
1016 */
1017 //
1018 $query = sprintf(
1019 "SELECT
1020 count(*)
1021 FROM
1022 %s
1023 WHERE
1024 %s
1025 %s",
1026 $conf["query_ct_from"],
1027 $conf["query_ct_where_common"],
1028 $conf["query_ct_where_user_filter"]
1029 );
1030
1031 /**
1032 * Exécution de la requête
1033 */
1034 //
1035 $res = $this->f->db->getone($query);
1036 $this->addToLog(__METHOD__."(): db->getone(\"".$query."\");", VERBOSE_MODE);
1037 $this->f->isDatabaseError($res);
1038
1039 // Affichage du message d'informations
1040 printf(
1041 $this->template_help,
1042 $conf["message_help"]
1043 );
1044
1045 //
1046 if (intval($res) === 0) {
1047 //
1048 echo _("Aucun retour de consultation non lu.");
1049 return;
1050 }
1051
1052
1053 /**
1054 *
1055 */
1056 $template_panel = '
1057 <div class="panel panel-box">
1058 <div class="list-justified-container">
1059 <ul class="list-justified text-center">
1060 %s
1061 </ul>
1062 </div>
1063 </div>';
1064 /**
1065 *
1066 */
1067 //
1068 $panel = "";
1069 //
1070 $template_elem = '
1071 <li>
1072 <span class="size-h3 box-icon rounded %s">%s</span>
1073 <p class="text-muted">%s %s</p>
1074 </li>
1075 ';
1076 $panel_elem = sprintf(
1077 $template_elem,
1078 "bg-info",
1079 intval($res),
1080 _("Non lu"),
1081 ""
1082 );
1083 //
1084 $panel .= sprintf(
1085 $template_panel,
1086 $panel_elem
1087 );
1088 echo $panel;
1089
1090 /**
1091 *
1092 */
1093 if ($filtre === "aucun") {
1094 $obj_href_more_link = "consultation_tous_retours";
1095 } elseif ($filtre === "division") {
1096 $obj_href_more_link = "consultation_retours_ma_division";
1097 } else {
1098 $obj_href_more_link = "consultation_mes_retours";
1099 }
1100
1101 //
1102 if (!$this->f->isAccredited(array($obj_href_more_link, $obj_href_more_link."_tab"), "OR")) {
1103 return;
1104 }
1105 // Affichage du footer
1106 printf(
1107 $this->template_footer,
1108 // href
1109 sprintf(
1110 '../scr/tab.php?obj=%s',
1111 $obj_href_more_link
1112 ),
1113 // titre
1114 _("Voir +")
1115 );
1116
1117 }
1118
1119
1120 /**
1121 * Cette méthode permet de récupérer la configuration du widget 'Retours de
1122 * consultation'.
1123 *
1124 * @return array
1125 */
1126 function get_config_consultation_retours($arguments) {
1127 // Initialisation du tableau des paramètres avec ses valeur par défaut
1128 $arguments_default = array(
1129 "filtre" => "instructeur",
1130 );
1131 // Vérification des arguments
1132 foreach ($arguments_default as $key => $value) {
1133 //
1134 if (isset($arguments[$key])) {
1135 //
1136 $elem = trim($arguments[$key]);
1137 //
1138 if ($key === "filtre"
1139 && in_array($elem, array("instructeur", "division", "aucun"))) {
1140 // La valeur doit être dans cette liste
1141 $arguments[$key] = $elem;
1142 continue;
1143 }
1144 }
1145 //
1146 $arguments[$key] = $value;
1147 }
1148 //
1149 $filtre = $arguments["filtre"];
1150
1151 /**
1152 * Construction de la requête
1153 */
1154 // FROM
1155 $query_ct_from = "
1156 ".DB_PREFIXE."consultation
1157 LEFT JOIN ".DB_PREFIXE."avis_consultation
1158 ON consultation.avis_consultation=avis_consultation.avis_consultation
1159 LEFT JOIN ".DB_PREFIXE."dossier
1160 ON consultation.dossier=dossier.dossier
1161 LEFT JOIN ".DB_PREFIXE."service
1162 ON consultation.service=service.service
1163 INNER JOIN ".DB_PREFIXE."instructeur
1164 ON instructeur.instructeur=dossier.instructeur
1165 INNER JOIN ".DB_PREFIXE."om_utilisateur
1166 ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur
1167 LEFT JOIN ".DB_PREFIXE."division
1168 ON dossier.division=division.division
1169 LEFT JOIN ".DB_PREFIXE."om_collectivite
1170 ON dossier.om_collectivite=om_collectivite.om_collectivite";
1171 // WHERE - COMMON
1172 $query_ct_where_common = "
1173 consultation.lu IS FALSE
1174 ";
1175 // WHERE - USER
1176 // Filtre sur les dossiers qui concernent l'utilisateur
1177 $query_ct_where_user_filter = "";
1178 //
1179 if ($filtre == "instructeur") {
1180 //
1181 $query_ct_where_user_filter .= "
1182 AND om_utilisateur.login='".$_SESSION['login']."'
1183 ";
1184 } elseif ($filtre == "division") {
1185 //
1186 $query_ct_where_user_filter .= "
1187 AND dossier.division = ".$_SESSION['division']."
1188 ";
1189 }
1190 // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1191 // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1192 // collectivité
1193 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1194 $query_ct_where_user_filter .= "
1195 AND dossier.om_collectivite=".$_SESSION['collectivite']."
1196 ";
1197 }
1198
1199 /**
1200 * Message d'aide
1201 */
1202 //
1203 $message_filtre = "";
1204 //
1205 switch ($filtre) {
1206 case "instructeur":
1207 $message_filtre = " "._("dont je suis l'instructeur");
1208 break;
1209 case "division":
1210 $message_filtre = " "._("situés dans ma division");
1211 break;
1212 case "aucun":
1213 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1214 $message_filtre = " "._("situés dans ma collectivité");
1215 } else {
1216 $message_filtre = " "._("situés dans toutes les collectivités");
1217 }
1218 break;
1219 }
1220 //
1221 $message_help = sprintf(
1222 _("Les consultations marquées comme 'non lu' qui concernent des ".
1223 "dossiers d'instruction%s."),
1224 $message_filtre
1225 );
1226
1227 /**
1228 * Return
1229 */
1230 //
1231 return array(
1232 "arguments" => $arguments,
1233 "message_help" => $message_help,
1234 "query_ct_from" => $query_ct_from,
1235 "query_ct_where_common" => $query_ct_where_common,
1236 "query_ct_where_user_filter" => $query_ct_where_user_filter,
1237 );
1238 }
1239
1240
1241 /**
1242 * WIDGET DASHBOARD - Dossiers en incomplet ou majoration sans retour RAR
1243 *
1244 * @return void
1245 */
1246 function view_widget_dossiers_evenement_incomplet_majoration($content = null) {
1247
1248 /**
1249 * Ce widget est configurable via l'interface Web. Lors de la création
1250 * du widget dans le paramétrage il est possible de spécifier la ou les
1251 * options suivantes :
1252 *
1253 * - filtre :
1254 * = instructeur
1255 * = division
1256 * = aucun
1257 * (default) Par défaut les dossiers sont filtrés sur l'instructeur.
1258 */
1259 // Liste des paramètres
1260 $params = array("filtre", );
1261 // Formatage des arguments reçus en paramètres
1262 $arguments = $this->get_arguments($content, $params);
1263 // Récupération de la configuration du widget
1264 $conf = $this->get_config_dossiers_evenement_incomplet_majoration($arguments);
1265 //
1266 $filtre = $conf["arguments"]["filtre"];
1267
1268 /**
1269 * Composition de la requête
1270 */
1271 //
1272 $query = sprintf("
1273 SELECT
1274 %s
1275 FROM
1276 %s
1277 WHERE
1278 %s
1279 %s
1280 ORDER BY
1281 %s
1282 LIMIT 10",
1283 $conf["query_ct_select"],
1284 $conf["query_ct_from"],
1285 $conf["query_ct_where_common"],
1286 $conf["query_ct_where_user_filter"],
1287 $conf["query_ct_orderby"]
1288 );
1289
1290 // Exécution de la requête
1291 $res = $this->f->db->query($query);
1292 $this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE);
1293 $this->f->isDatabaseError($res);
1294
1295 // Affichage du message d'informations
1296 printf(
1297 $this->template_help,
1298 $conf["message_help"]
1299 );
1300
1301 /**
1302 * Si il n'y a aucun dossier à afficher, alors on affiche un message
1303 * clair à l'utilisateur et on sort de la vue.
1304 */
1305 // Si il n'y a aucun dossier à afficher
1306 if ($res->numrows() == 0) {
1307 // Affichage du message d'informations
1308 echo _("Vous n'avez pas de dossiers avec un evenement incomplet ou majoration sans RAR pour le moment.");
1309 // Exit
1310 return;
1311 }
1312
1313 /**
1314 * Template nécessaires à l'affichage du widget
1315 */
1316 // Lien vers le dossier d'instructions
1317
1318 // Bouton consulter
1319 $template_btn_consulter = '
1320 <span class="om-icon om-icon-16 om-icon-fix consult-16" title="'._('Consulter').'">'
1321 ._('Consulter')
1322 .'</span>
1323 ';
1324
1325 $template_table = '
1326 <table class="tab-tab">
1327 <thead>
1328 <tr class="ui-tabs-nav ui-accordion ui-state-default tab-title">
1329 <th class="title col-0 firstcol">
1330 <span class="name">
1331 %s
1332 </span>
1333 </th>
1334 <th class="title col-1">
1335 <span class="name">
1336 %s
1337 </span>
1338 </th>
1339 <th class="title col-2 lastcol">
1340 <span class="name">
1341 %s
1342 </span>
1343 </th>
1344 </tr>
1345 </thead>
1346 <tbody>
1347 %s
1348 </tbody>
1349 </table>
1350 ';
1351
1352 // Données dans le tableau
1353 //
1354 $template_line = '
1355 <tr class="tab-data odd">
1356 <td class="col-1 firstcol">
1357 %s
1358 </td>
1359 <td class="col-1">
1360 %s
1361 </td>
1362 <td class="col-2 lastcol">
1363 %s
1364 </td>
1365 </tr>
1366 ';
1367 //
1368 $template_href = '../scr/form.php?obj=dossier_instruction&amp;action=3&amp;idx=%s';
1369 //
1370 $template_link = '
1371 <a class="lienTable" href="%s">
1372 %s
1373 </a>
1374 ';
1375
1376 /**
1377 * Si il y a des dossiers à afficher, alors on affiche le widget.
1378 */
1379 // On construit le contenu du tableau
1380 $ct_tbody = '';
1381 while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
1382 // On construit l'attribut href du lien
1383 $ct_href = sprintf(
1384 $template_href,
1385 // idx
1386 $row["dossier"]
1387 );
1388 // On construit la ligne
1389 $ct_tbody .= sprintf(
1390 $template_line,
1391 // Colonne 1 - Bouton consulter
1392 sprintf(
1393 $template_link,
1394 $ct_href,
1395 $template_btn_consulter
1396 ),
1397 // Colonne 2 - Numéro de dossier
1398 sprintf(
1399 $template_link,
1400 $ct_href,
1401 $row["dossier_libelle"]
1402 ),
1403 // Colonne 3 - Date de dépôt
1404 sprintf(
1405 $template_link,
1406 $ct_href,
1407 $this->f->formatDate($row["date_depot"])
1408 )
1409 );
1410 }
1411 // Affichage du tableau listant les dossiers
1412 printf(
1413 $template_table,
1414 // Colonne 1 - Bouton consulter
1415 '',
1416 // Colonne 2 - Numéro de dossier
1417 _('dossier'),
1418 // Colonne 3 - Date de dépôt du dossier
1419 _('date_depot'),
1420 // Contenu du tableau
1421 $ct_tbody
1422 );
1423
1424 // Affichage du footer
1425 printf(
1426 $this->template_footer,
1427 // href (avec les paramètres du widget)
1428 sprintf(
1429 "../scr/tab.php?obj=dossiers_evenement_incomplet_majoration&filtre=%s",
1430 $filtre
1431 ),
1432 // titre
1433 _("Voir tous les dossiers evenement incomplet ou majoration sans RAR")
1434 );
1435 }
1436
1437
1438 /**
1439 * Cette méthode permet de récupérer la configuration du widget 'Retours de
1440 * consultation'.
1441 *
1442 * @return array
1443 */
1444 function get_config_dossiers_evenement_incomplet_majoration($arguments) {
1445 // Initialisation du tableau des paramètres avec ses valeur par défaut
1446 $arguments_default = array(
1447 "filtre" => "instructeur",
1448 );
1449 // Vérification des arguments
1450 foreach ($arguments_default as $key => $value) {
1451 //
1452 if (isset($arguments[$key])) {
1453 //
1454 $elem = trim($arguments[$key]);
1455 //
1456 if ($key === "filtre"
1457 && in_array($elem, array("instructeur", "division", "aucun"))) {
1458 // La valeur doit être dans cette liste
1459 $arguments[$key] = $elem;
1460 continue;
1461 }
1462 }
1463 //
1464 $arguments[$key] = $value;
1465 }
1466 //
1467 $filtre = $arguments["filtre"];
1468
1469 /**
1470 * Construction de la requête
1471 */
1472 // SELECT
1473 $query_ct_select = "
1474 dossier.dossier,
1475 dossier.dossier_libelle,
1476 dossier.date_depot
1477 ";
1478 // SELECT - CHAMPAFFICHE
1479 $query_ct_select_champaffiche = array(
1480 'dossier.dossier as "'._("dossier").'"',
1481 'dossier.dossier_libelle as "'._("dossier").'"',
1482 'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"'
1483 );
1484 // FROM
1485 $query_ct_from = "
1486 ".DB_PREFIXE."dossier
1487 LEFT JOIN
1488 ".DB_PREFIXE."instruction
1489 ON
1490 dossier.dossier = instruction.dossier
1491 LEFT JOIN
1492 ".DB_PREFIXE."evenement
1493 ON
1494 instruction.evenement = evenement.evenement
1495 LEFT JOIN
1496 ".DB_PREFIXE."instructeur
1497 ON
1498 instructeur.instructeur = dossier.instructeur
1499 LEFT JOIN
1500 ".DB_PREFIXE."om_utilisateur
1501 ON
1502 instructeur.om_utilisateur=om_utilisateur.om_utilisateur
1503 ";
1504 // WHERE - COMMON
1505 $query_ct_where_common = "
1506 (
1507 LOWER(evenement.type) = 'incompletude' OR
1508 LOWER(evenement.type) = 'majoration_delai'
1509 ) AND
1510 (
1511 instruction.date_envoi_rar > CURRENT_TIMESTAMP - interval '1 month' AND
1512 instruction.date_envoi_rar <= CURRENT_TIMESTAMP
1513 ) AND
1514 instruction.date_retour_rar IS NULL AND
1515 evenement.retour = 'f'
1516 ";
1517
1518 // WHERE - USER
1519 // Filtre sur les dossiers qui concernent l'utilisateur
1520 $query_ct_where_user_filter = "";
1521 //
1522 if ($filtre == "instructeur") {
1523 //
1524 $query_ct_where_user_filter .= "
1525 AND om_utilisateur.login='".$_SESSION['login']."'
1526 ";
1527 } elseif ($filtre == "division") {
1528 //
1529 $query_ct_where_user_filter .= "
1530 AND dossier.division = ".$_SESSION['division']."
1531 ";
1532 } elseif ($filtre == "aucun") {
1533 // Dans tous les cas si l'utilisateur fait partie d'une collectivité
1534 // de niveau 1 (mono), on restreint le listing sur les dossiers de sa
1535 // collectivité
1536 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1537 $query_ct_where_user_filter = "
1538 AND dossier.om_collectivite=".$_SESSION['collectivite']."
1539 ";
1540 }
1541 }
1542 // ORDER BY
1543 $query_ct_orderby = "
1544 dossier.date_depot desc
1545 ";
1546
1547 /**
1548 * Message d'aide
1549 */
1550 //
1551 $message_filtre = "";
1552 //
1553 switch ($filtre) {
1554 case "instructeur":
1555 $message_filtre = " "._("dont je suis l'instructeur");
1556 break;
1557 case "division":
1558 $message_filtre = " "._("situés dans ma division");
1559 break;
1560 case "aucun":
1561 if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
1562 $message_filtre = " "._("situés dans ma collectivité");
1563 } else {
1564 $message_filtre = " "._("situés dans toutes les collectivités");
1565 }
1566 break;
1567 }
1568 //
1569 $message_help = sprintf(
1570 _("Les dossiers d'instruction%s qui ont un evenement incomplet ou majoration".
1571 " avec une date d'envoi RAR, mais pas de date de retour RAR."),
1572 $message_filtre
1573 );
1574
1575 /**
1576 * Return
1577 */
1578 //
1579 return array(
1580 "arguments" => $arguments,
1581 "message_help" => $message_help,
1582 "query_ct_select" => $query_ct_select,
1583 "query_ct_select_champaffiche" => $query_ct_select_champaffiche,
1584 "query_ct_from" => $query_ct_from,
1585 "query_ct_where_common" => $query_ct_where_common,
1586 "query_ct_where_user_filter" => $query_ct_where_user_filter,
1587 "query_ct_orderby" => $query_ct_orderby,
1588 );
1589 }
1590
1591 }
1592
1593 ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26