/[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 10869 - (show annotations)
Fri Dec 3 18:46:03 2021 UTC (3 years, 1 month ago) by softime
File size: 338129 byte(s)
* Fusion de la branche d'intégration 5.3.0-develop dans le trunk

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

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26