1 |
mbroquet |
3730 |
<?php |
2 |
|
|
/** |
3 |
|
|
* OM_WIDGET - Surcharge du core |
4 |
|
|
* |
5 |
|
|
* L'objectif de la surcharge est de coder les vues spécifiques des widgets |
6 |
|
|
* de type 'file'. |
7 |
|
|
* |
8 |
|
|
* @package openads |
9 |
|
|
* @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $ |
10 |
|
|
*/ |
11 |
|
|
|
12 |
|
|
require_once "../core/obj/om_widget.class.php"; |
13 |
|
|
|
14 |
|
|
class om_widget extends om_widget_core { |
15 |
|
|
|
16 |
|
|
function __construct($id, &$dnu1 = null, $dnu2 = null) { |
17 |
|
|
$this->constructeur($id); |
18 |
|
|
} |
19 |
|
|
|
20 |
|
|
/** |
21 |
fmichon |
3799 |
* Cette méthode retourne un arbre html représentant un raccourci. |
22 |
|
|
* |
23 |
|
|
* Un raccourci est composé d'un lien, d'une image et d'une description. |
24 |
|
|
* Voir les widgets : |
25 |
|
|
* - widget_nouvelle_demande_autre_dossier |
26 |
|
|
* - widget_nouvelle_demande_dossier_encours |
27 |
|
|
* - widget_nouvelle_demande_nouveau_dossier |
28 |
|
|
*/ |
29 |
|
|
function get_display_widget_shortlink($config) { |
30 |
|
|
return sprintf ( |
31 |
|
|
'<a href="%s"><span><img src="%s" align="left" alt="%s" />%s</span></a>', |
32 |
|
|
$config["a_href"], |
33 |
|
|
$config["img_src"], |
34 |
|
|
$config["img_alt"], |
35 |
|
|
$config["a_content"] |
36 |
|
|
); |
37 |
|
|
} |
38 |
|
|
|
39 |
|
|
/** |
40 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_autre_dossier. |
41 |
|
|
*/ |
42 |
|
|
function view_widget_nouvelle_demande_autre_dossier($content = null) { |
43 |
|
|
echo $this->get_display_widget_shortlink(array( |
44 |
|
|
"a_href" => "../scr/tab.php?obj=demande_autre_dossier", |
45 |
|
|
"img_src" => "../app/img/dossier-existant.png", |
46 |
|
|
"img_alt" => _("Autres dossiers"), |
47 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours ou une autorisation existante"), |
48 |
|
|
)); |
49 |
|
|
} |
50 |
|
|
|
51 |
|
|
/** |
52 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_dossier_encours. |
53 |
|
|
*/ |
54 |
|
|
function view_widget_nouvelle_demande_dossier_encours($content = null) { |
55 |
|
|
echo $this->get_display_widget_shortlink(array( |
56 |
|
|
"a_href" => "../scr/tab.php?obj=demande_dossier_encours", |
57 |
|
|
"img_src" => "../app/img/dossier-existant.png", |
58 |
|
|
"img_alt" => _("Dossier en cours"), |
59 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant un dossier en cours"), |
60 |
|
|
)); |
61 |
|
|
} |
62 |
|
|
|
63 |
|
|
/** |
64 |
|
|
* WIDGET DASHBOARD - widget_nouvelle_demande_nouveau_dossier. |
65 |
|
|
*/ |
66 |
|
|
function view_widget_nouvelle_demande_nouveau_dossier($content = null) { |
67 |
|
|
echo $this->get_display_widget_shortlink(array( |
68 |
|
|
"a_href" => "../scr/form.php?obj=demande_nouveau_dossier&action=0&advs_id=&tricol=&valide=&retour=tab&new=", |
69 |
|
|
"img_src" => "../app/img/dossier-nouveau.png", |
70 |
|
|
"img_alt" => _("Nouveau dossier"), |
71 |
|
|
"a_content" => _("Cliquer ici pour saisir une nouvelle demande concernant le depot d'un nouveau dossier"), |
72 |
|
|
)); |
73 |
|
|
} |
74 |
|
|
|
75 |
|
|
/** |
76 |
mbroquet |
3730 |
* WIDGET DASHBOARD - widget_recherche_dossier. |
77 |
|
|
* |
78 |
|
|
* Quatre cas d'utilisation : |
79 |
|
|
* - 1 - La valeur recherchée correspond exactement au code d'un DI, |
80 |
|
|
* alors on accède directement à la fiche de visualisation du DI. |
81 |
|
|
* - 2 - La valeur recherchée renvoi plusieurs DI, alors on accède au |
82 |
|
|
* listing des dossiers d'instruction avec le formulaire de |
83 |
|
|
* recherche avancée pré-rempli avec la valeur saisie. |
84 |
|
|
* - 3 - La valeur recherchée renvoi aucun enregistrement, alors on |
85 |
|
|
* affiche un message en ce sens directement dans le widget. |
86 |
|
|
* - 4 - Aucune valeur n'est saisie, alors on affiche un message en ce |
87 |
|
|
* sens directement dans le widget. |
88 |
|
|
* |
89 |
|
|
* @return void |
90 |
|
|
*/ |
91 |
|
|
function view_widget_recherche_dossier($content = null) { |
92 |
|
|
|
93 |
|
|
/** |
94 |
|
|
* Traitement de la validation du formulaire |
95 |
|
|
*/ |
96 |
|
|
// |
97 |
|
|
if ($this->f->get_submitted_post_value("validation") != null |
98 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
99 |
|
|
&& $this->f->get_submitted_post_value("dossier") != "") { |
100 |
|
|
// Mémorisation de la recherche |
101 |
|
|
$search = $this->f->db->escapesimple($this->f->get_submitted_post_value("dossier")); |
102 |
|
|
// Ajout d'une étoile au début s'il n'y en n'a pas. |
103 |
|
|
// Par defaut * est toujours ajouté à la fin des recherches. |
104 |
|
|
if (substr($search, 0, 1) != '*') { |
105 |
|
|
$search = '*'.$search; |
106 |
|
|
} |
107 |
|
|
// Traitement des valeurs postées |
108 |
|
|
$posted_dossiers = $this->f->db->escapesimple(strtolower(str_replace("*", "%", $this->f->get_submitted_post_value("dossier")))); |
109 |
|
|
$posted_dossiers = str_replace(';', ',', $posted_dossiers); |
110 |
|
|
|
111 |
|
|
// |
112 |
|
|
// UNE VALEUR SAISIE |
113 |
|
|
// |
114 |
|
|
|
115 |
|
|
// WHERE - Filtre Collectivité |
116 |
|
|
$where_collectivite = ""; |
117 |
|
|
// Si collectivité utilisateur mono alors filtre sur celle-ci |
118 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
119 |
|
|
// |
120 |
|
|
$where_collectivite = " |
121 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
122 |
|
|
"; |
123 |
|
|
} |
124 |
|
|
|
125 |
|
|
// Construction de la requête |
126 |
|
|
// Pour chaque dossier on cherche sur les deux champs du code du |
127 |
|
|
// dossier (un avec et un sans espaces) |
128 |
|
|
$posted_dossiers = explode(',', $posted_dossiers); |
129 |
|
|
$liste_dossiers = array(); |
130 |
|
|
foreach ($posted_dossiers as $posted_dossier) { |
131 |
|
|
$sql = " |
132 |
|
|
SELECT |
133 |
|
|
dossier |
134 |
|
|
FROM |
135 |
|
|
".DB_PREFIXE."dossier |
136 |
|
|
WHERE |
137 |
|
|
(LOWER(dossier.dossier) LIKE '%".$posted_dossier."%' |
138 |
|
|
OR LOWER(dossier.dossier_libelle) LIKE '%".$posted_dossier."%' ) |
139 |
|
|
"; |
140 |
|
|
$sql .= $where_collectivite; |
141 |
|
|
// Exécution de la requête |
142 |
|
|
$res = $this->f->db->query($sql); |
143 |
|
|
$this->f->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE); |
144 |
|
|
$this->f->isDatabaseError($res); |
145 |
|
|
// On récupère les numéros de dossier dans les résultats |
146 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
147 |
|
|
$liste_dossiers[] = $row['dossier']; |
148 |
|
|
} |
149 |
|
|
} |
150 |
|
|
$total_dossiers = count($liste_dossiers); |
151 |
|
|
// Si on obtient un seul résultat |
152 |
|
|
if ($total_dossiers == 1) { |
153 |
|
|
// On reformate le dossier |
154 |
|
|
$dossier = strtoupper(str_replace(' ', '', $liste_dossiers[0])); |
155 |
|
|
// On redirige vers le listing des DI |
156 |
|
|
echo ' |
157 |
|
|
<script type="text/javascript" > |
158 |
|
|
widget_recherche_dossier(\''.$dossier.'\', 1); |
159 |
|
|
</script> |
160 |
|
|
'; |
161 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
162 |
|
|
// redirigé vers un autre script |
163 |
|
|
exit(); |
164 |
|
|
} |
165 |
|
|
// Si on obtient plusieurs résultats |
166 |
|
|
if ($total_dossiers > 1) { |
167 |
|
|
// On redirige vers le listing des DI |
168 |
|
|
echo ' |
169 |
|
|
<script type="text/javascript" > |
170 |
|
|
widget_recherche_dossier(\''.$search.'\', '.$total_dossiers.'); |
171 |
|
|
</script> |
172 |
|
|
'; |
173 |
|
|
// On arrête l'exécution du script car l'utilisateur a été |
174 |
|
|
// redirigé vers un autre script |
175 |
|
|
exit(); |
176 |
|
|
} |
177 |
|
|
// Cas d'utilisation n°3 |
178 |
|
|
// Si aucun dossier trouve |
179 |
|
|
// Affiche un message d'erreur |
180 |
|
|
$erreur = _("Aucun dossier trouve"); |
181 |
|
|
|
182 |
|
|
} elseif ($this->f->get_submitted_post_value("validation") != null |
183 |
|
|
&& $this->f->get_submitted_post_value("dossier") !== null |
184 |
|
|
&& $this->f->get_submitted_post_value("dossier") == '') { |
185 |
|
|
|
186 |
|
|
// |
187 |
|
|
// AUCUNE VALEUR SAISIE |
188 |
|
|
// |
189 |
|
|
|
190 |
|
|
// Cas d'utilisation n°4 |
191 |
|
|
// Affiche un message d'erreur |
192 |
|
|
$erreur = _("Veuillez saisir un No de dossier."); |
193 |
|
|
|
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=\"../scr/dashboard.php\">\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 = new $this->om_formulaire(null, 0, 0, $champs); |
217 |
|
|
$form->setLib("dossier", '<span class="om-icon om-icon-16 om-icon-fix loupe-16">Recherche</span>'); |
218 |
|
|
$form->setType("dossier", "text"); |
219 |
|
|
$form->setTaille("dossier", 20); |
220 |
|
|
$form->setMax("dossier", 250); |
221 |
|
|
// Affichage du formulaire |
222 |
|
|
$form->entete(); |
223 |
|
|
$form->afficher($champs, 0, false, false); |
224 |
|
|
$form->enpied(); |
225 |
|
|
// Affichage des contrôles du formulaire |
226 |
|
|
echo "\t<div class=\"formControls\">\n"; |
227 |
|
|
echo "\t\t<input type=\"submit\" class=\"om-button ui-button ui-widget ui-state-default ui-corner-all\" |
228 |
|
|
value=\""._("Valider")."\" name=\"validation\" />\n"; |
229 |
|
|
echo "\t</div>\n"; |
230 |
|
|
// Fermeture du form |
231 |
|
|
echo "\t</form>\n"; |
232 |
|
|
} |
233 |
|
|
|
234 |
|
|
/** |
235 |
|
|
* Cette méthode permet de récupérer la configuration du widget 'Dossiers |
236 |
|
|
* limites'. |
237 |
|
|
* |
238 |
|
|
* @return array |
239 |
|
|
*/ |
240 |
|
|
function get_config_dossiers_limites($arguments) { |
241 |
|
|
// Initialisation du tableau des paramètres avec ses valeur par défaut |
242 |
|
|
$arguments_default = array( |
243 |
|
|
"nombre_de_jours" => 15, |
244 |
|
|
"codes_datd" => null, |
245 |
|
|
"filtre" => "instructeur", |
246 |
|
|
); |
247 |
|
|
// Vérification des arguments |
248 |
|
|
foreach ($arguments_default as $key => $value) { |
249 |
|
|
// |
250 |
|
|
if (isset($arguments[$key])) { |
251 |
|
|
// |
252 |
|
|
$elem = trim($arguments[$key]); |
253 |
|
|
// |
254 |
|
|
if ($key === "nombre_de_jours" |
255 |
|
|
&& intval($elem) > 0) { |
256 |
|
|
// Ce doit être un entier |
257 |
|
|
$arguments[$key] = intval($elem); |
258 |
|
|
continue; |
259 |
|
|
} elseif ($key === "codes_datd" |
260 |
|
|
&& $elem != "") { |
261 |
|
|
// Ce doit être un tableau |
262 |
|
|
$arguments[$key] = explode(";", $elem); |
263 |
|
|
continue; |
264 |
|
|
} elseif ($key === "filtre" |
265 |
|
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
266 |
|
|
// La valeur doit être dans cette liste |
267 |
|
|
$arguments[$key] = $elem; |
268 |
|
|
continue; |
269 |
|
|
} |
270 |
|
|
} |
271 |
|
|
// |
272 |
|
|
$arguments[$key] = $value; |
273 |
|
|
} |
274 |
|
|
// |
275 |
|
|
$nombre_de_jours = $arguments["nombre_de_jours"]; |
276 |
|
|
$codes_datd = $arguments["codes_datd"]; |
277 |
|
|
$filtre = $arguments["filtre"]; |
278 |
|
|
|
279 |
|
|
/** |
280 |
|
|
* Construction de la requête |
281 |
|
|
*/ |
282 |
|
|
// SELECT |
283 |
|
|
$query_ct_select = " |
284 |
|
|
dossier.dossier, |
285 |
|
|
dossier.dossier_libelle, |
286 |
|
|
dossier.date_limite, |
287 |
|
|
dossier.date_limite_incompletude, |
288 |
|
|
CASE |
289 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
290 |
|
|
THEN to_char(dossier.date_limite_incompletude, 'DD/MM/YYYY') |
291 |
|
|
ELSE |
292 |
|
|
to_char(dossier.date_limite, 'DD/MM/YYYY') |
293 |
|
|
END as date_limite_na, |
294 |
|
|
COALESCE( |
295 |
|
|
demandeur.particulier_nom, |
296 |
|
|
demandeur.personne_morale_denomination |
297 |
|
|
) AS nom_petitionnaire, |
298 |
|
|
CASE |
299 |
|
|
WHEN dossier.enjeu_erp is TRUE |
300 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_erp-16'' title=''"._('Enjeu ERP')."''>ERP</span>' |
301 |
|
|
ELSE |
302 |
|
|
'' |
303 |
|
|
END |
304 |
|
|
|| |
305 |
|
|
CASE |
306 |
|
|
WHEN dossier.enjeu_urba is TRUE |
307 |
|
|
THEN '<span class=''om-icon om-icon-16 om-icon-fix enjeu_urba-16'' title=''"._('Enjeu Urba')."''>URBA</span>' |
308 |
|
|
ELSE |
309 |
|
|
'' |
310 |
|
|
END AS enjeu |
311 |
|
|
"; |
312 |
|
|
// SELECT - CHAMPAFFICHE |
313 |
|
|
$query_ct_select_champaffiche = array( |
314 |
|
|
'dossier.dossier as "'._("dossier").'"', |
315 |
|
|
'dossier.dossier_libelle as "'._("dossier").'"', |
316 |
|
|
'COALESCE( |
317 |
|
|
demandeur.particulier_nom, |
318 |
|
|
demandeur.personne_morale_denomination |
319 |
|
|
) AS "'._("nom_petitionnaire").'"', |
320 |
|
|
'CASE |
321 |
|
|
WHEN dossier.incomplet_notifie IS TRUE AND dossier.incompletude IS TRUE |
322 |
|
|
THEN to_char(dossier.date_limite_incompletude, \'DD/MM/YYYY\') |
323 |
|
|
ELSE |
324 |
|
|
to_char(dossier.date_limite, \'DD/MM/YYYY\') |
325 |
|
|
END as "'._("date_limite").'"', |
326 |
|
|
'CASE |
327 |
|
|
WHEN dossier.enjeu_erp is TRUE |
328 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_erp-16" title="'._('Enjeu ERP').'">ERP</span>\' |
329 |
|
|
ELSE |
330 |
|
|
\'\' |
331 |
|
|
END |
332 |
|
|
|| |
333 |
|
|
CASE |
334 |
|
|
WHEN dossier.enjeu_urba is TRUE |
335 |
|
|
THEN \'<span class="om-icon om-icon-16 om-icon-fix enjeu_urba-16" title="'._('Enjeu Urba').'">URBA</span>\' |
336 |
|
|
ELSE |
337 |
|
|
\'\' |
338 |
|
|
END AS "'._("enjeu").'"', |
339 |
|
|
// XXX Attention cette colonne est cachée en css est doit donc restée la dernière du tableau |
340 |
|
|
'CASE WHEN incomplet_notifie IS TRUE AND incompletude IS TRUE THEN |
341 |
|
|
dossier.date_limite_incompletude ELSE |
342 |
|
|
dossier.date_limite END as date_limite_na', |
343 |
|
|
); |
344 |
|
|
// FROM |
345 |
|
|
$query_ct_from = " |
346 |
|
|
".DB_PREFIXE."dossier |
347 |
fmichon |
3890 |
LEFT JOIN ".DB_PREFIXE."etat |
348 |
|
|
ON dossier.etat = etat.etat |
349 |
mbroquet |
3730 |
LEFT JOIN ".DB_PREFIXE."lien_dossier_demandeur |
350 |
|
|
ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE |
351 |
|
|
LEFT JOIN ".DB_PREFIXE."demandeur |
352 |
|
|
ON lien_dossier_demandeur.demandeur = demandeur.demandeur |
353 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation |
354 |
|
|
ON dossier.dossier_autorisation = dossier_autorisation.dossier_autorisation |
355 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille |
356 |
|
|
ON dossier_autorisation.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille |
357 |
|
|
LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type |
358 |
|
|
ON dossier_autorisation_type_detaille.dossier_autorisation_type = dossier_autorisation_type.dossier_autorisation_type |
359 |
|
|
LEFT JOIN ".DB_PREFIXE."instructeur |
360 |
|
|
ON dossier.instructeur=instructeur.instructeur |
361 |
|
|
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
362 |
|
|
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur |
363 |
|
|
"; |
364 |
|
|
// WHERE - COMMON |
365 |
|
|
$query_ct_where_common = " |
366 |
|
|
( |
367 |
|
|
( |
368 |
|
|
dossier.incomplet_notifie IS FALSE |
369 |
|
|
AND date_limite <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
370 |
|
|
) |
371 |
|
|
OR |
372 |
|
|
( |
373 |
|
|
dossier.incomplet_notifie IS TRUE |
374 |
|
|
AND dossier.incompletude IS TRUE |
375 |
|
|
AND date_limite_incompletude <= CURRENT_TIMESTAMP + ".$nombre_de_jours." * interval '1 day' |
376 |
|
|
) |
377 |
|
|
) |
378 |
fmichon |
3890 |
AND etat.statut != 'cloture' |
379 |
mbroquet |
3730 |
AND dossier.avis_decision IS NULL |
380 |
|
|
AND LOWER(dossier.accord_tacite) = 'oui' |
381 |
|
|
"; |
382 |
|
|
// WHERE - DATD |
383 |
|
|
// Filtre sur le type détaillé des dossiers |
384 |
|
|
$query_ct_where_datd_filter = ""; |
385 |
|
|
if (!is_null($codes_datd) |
386 |
|
|
&& is_array($codes_datd) |
387 |
|
|
&& count($codes_datd) != 0) { |
388 |
|
|
// |
389 |
|
|
$sql_codes = ""; |
390 |
|
|
// |
391 |
|
|
foreach ($codes_datd as $code) { |
392 |
|
|
$sql_codes .= " LOWER(dossier_autorisation_type_detaille.code) = '".$this->f->db->escapesimple(strtolower($code))."' OR "; |
393 |
|
|
} |
394 |
|
|
$sql_codes = substr($sql_codes, 0, count($sql_codes) - 4); |
395 |
|
|
// |
396 |
|
|
$query_ct_where_datd_filter = " AND ( ".$sql_codes." ) "; |
397 |
|
|
} |
398 |
|
|
// WHERE - USER |
399 |
|
|
// Filtre sur les dossiers qui concernent l'utilisateur |
400 |
|
|
$query_ct_where_user_filter = ""; |
401 |
|
|
// |
402 |
|
|
if ($filtre == "instructeur") { |
403 |
|
|
// |
404 |
|
|
$query_ct_where_user_filter = " |
405 |
|
|
AND om_utilisateur.login='".$_SESSION['login']."' |
406 |
|
|
"; |
407 |
|
|
} elseif ($filtre == "division") { |
408 |
|
|
// |
409 |
|
|
$query_ct_where_user_filter .= " |
410 |
|
|
AND dossier.division = ".$_SESSION['division']." |
411 |
|
|
"; |
412 |
|
|
} elseif ($filtre == "aucun") { |
413 |
|
|
// |
414 |
|
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
415 |
|
|
$query_ct_where_user_filter = " |
416 |
|
|
AND dossier.om_collectivite=".$_SESSION['collectivite']." |
417 |
|
|
"; |
418 |
|
|
} |
419 |
|
|
} |
420 |
|
|
// ORDER BY |
421 |
|
|
$query_ct_orderby = " |
422 |
|
|
date_limite_na |
423 |
|
|
"; |
424 |
|
|
|
425 |
|
|
/** |
426 |
|
|
* Message d'aide |
427 |
|
|
*/ |
428 |
|
|
// |
429 |
|
|
$message_filtre = ""; |
430 |
|
|
// |
431 |
|
|
switch($filtre) { |
432 |
|
|
case "instructeur" : |
433 |
|
|
$message_filtre = " "._("(filtrés par instructeur)"); |
434 |
|
|
break; |
435 |
|
|
case "division" : |
436 |
|
|
$message_filtre = " "._("(filtrés par division)"); |
437 |
|
|
break; |
438 |
|
|
} |
439 |
|
|
// |
440 |
|
|
$message_help = sprintf( |
441 |
|
|
_("Les dossiers%s avec acceptation tacite sur lesquels aucune décision n'a été prise et dont la date limite est dans moins de %s jours%s."), |
442 |
|
|
(is_null($codes_datd) ? "": " (".implode(";",$codes_datd).")"), |
443 |
|
|
$nombre_de_jours, |
444 |
|
|
$message_filtre |
445 |
|
|
); |
446 |
|
|
|
447 |
|
|
/** |
448 |
|
|
* Return |
449 |
|
|
*/ |
450 |
|
|
// |
451 |
|
|
return array( |
452 |
|
|
"arguments" => $arguments, |
453 |
|
|
"message_help" => $message_help, |
454 |
|
|
"query_ct_select" => $query_ct_select, |
455 |
|
|
"query_ct_select_champaffiche" => $query_ct_select_champaffiche, |
456 |
|
|
"query_ct_from" => $query_ct_from, |
457 |
|
|
"query_ct_where_common" => $query_ct_where_common, |
458 |
|
|
"query_ct_where_datd_filter" => $query_ct_where_datd_filter, |
459 |
|
|
"query_ct_where_user_filter" => $query_ct_where_user_filter, |
460 |
|
|
"query_ct_orderby" => $query_ct_orderby, |
461 |
|
|
); |
462 |
|
|
} |
463 |
|
|
|
464 |
|
|
/** |
465 |
|
|
* WIDGET DASHBOARD - Dossiers limites |
466 |
|
|
* |
467 |
|
|
* @return void |
468 |
|
|
*/ |
469 |
|
|
function view_widget_dossiers_limites($content = null) { |
470 |
|
|
|
471 |
|
|
/** |
472 |
|
|
* Ce widget est configurable via l'interface Web. Lors de la création |
473 |
|
|
* du widget dans le paramétrage il est possible de spécifier la ou les |
474 |
|
|
* options suivantes : |
475 |
|
|
* |
476 |
|
|
* - nombre_de_jours : c'est le délai en jours avant la date limite à |
477 |
|
|
* partir duquel on souhaite voir apparaître les dossiers dans le |
478 |
|
|
* widget. |
479 |
|
|
* (default) Par défaut la valeur est 15 jours. |
480 |
|
|
* |
481 |
|
|
* - codes_datd : la liste des types de dossiers à afficher. exemple : |
482 |
|
|
* "PCI;PCA;DPS;CUa;CUb". |
483 |
|
|
* (default) Par défaut tous les types sont affichés. [null] |
484 |
|
|
* |
485 |
|
|
* - filtre : |
486 |
|
|
* = instructeur |
487 |
|
|
* = division |
488 |
|
|
* = aucun |
489 |
|
|
* (default) Par défaut les dossiers sont filtrés sur l'instructeur. |
490 |
|
|
*/ |
491 |
|
|
// Liste des paramètres |
492 |
|
|
$params = array("nombre_de_jours", "codes_datd", "filtre", ); |
493 |
|
|
// Formatage des arguments reçus en paramètres |
494 |
|
|
$arguments = $this->get_arguments($content, $params); |
495 |
|
|
// Récupération de la configuration du widget |
496 |
|
|
$conf = $this->get_config_dossiers_limites($arguments); |
497 |
|
|
// |
498 |
|
|
$nombre_de_jours = $conf["arguments"]["nombre_de_jours"]; |
499 |
|
|
$codes_datd = $conf["arguments"]["codes_datd"]; |
500 |
|
|
$filtre = $conf["arguments"]["filtre"]; |
501 |
|
|
|
502 |
|
|
/** |
503 |
|
|
* Composition de la requête |
504 |
|
|
*/ |
505 |
|
|
// |
506 |
|
|
$query = sprintf(" |
507 |
|
|
SELECT |
508 |
|
|
%s |
509 |
|
|
FROM |
510 |
|
|
%s |
511 |
|
|
WHERE |
512 |
|
|
%s |
513 |
|
|
%s |
514 |
|
|
%s |
515 |
|
|
ORDER BY |
516 |
|
|
%s |
517 |
|
|
LIMIT 10", |
518 |
|
|
$conf["query_ct_select"], |
519 |
|
|
$conf["query_ct_from"], |
520 |
|
|
$conf["query_ct_where_common"], |
521 |
|
|
$conf["query_ct_where_datd_filter"], |
522 |
|
|
$conf["query_ct_where_user_filter"], |
523 |
|
|
$conf["query_ct_orderby"] |
524 |
|
|
); |
525 |
|
|
|
526 |
|
|
/** |
527 |
|
|
* Exécution de la requête |
528 |
|
|
*/ |
529 |
|
|
// |
530 |
|
|
$res = $this->f->db->query($query); |
531 |
|
|
$this->addToLog(__METHOD__."(): db->query(\"".$query."\");", VERBOSE_MODE); |
532 |
|
|
$this->f->isDatabaseError($res); |
533 |
|
|
|
534 |
|
|
// Affichage du message d'informations |
535 |
|
|
printf( |
536 |
|
|
'<div class="widget-help"><span class="info-16" title="%s"></span></div>', |
537 |
|
|
$conf["message_help"] |
538 |
|
|
); |
539 |
|
|
|
540 |
|
|
/** |
541 |
|
|
* Si il n'y a aucun dossier à afficher, alors on affiche un message |
542 |
|
|
* clair à l'utilisateur et on sort de la vue. |
543 |
|
|
*/ |
544 |
|
|
// Si il n'y a aucun dossier à afficher |
545 |
|
|
if ($res->numrows() == 0) { |
546 |
|
|
// Affichage du message d'informations |
547 |
|
|
echo _("Vous n'avez pas de dossiers limites pour le moment."); |
548 |
|
|
// Exit |
549 |
|
|
return; |
550 |
|
|
} |
551 |
|
|
|
552 |
|
|
/** |
553 |
|
|
* Template nécessaires à l'affichage du widget |
554 |
|
|
*/ |
555 |
|
|
// |
556 |
|
|
$template_table = ' |
557 |
|
|
<table class="tab-tab"> |
558 |
|
|
<thead> |
559 |
|
|
<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title"> |
560 |
|
|
<th class="title col-0 firstcol"> |
561 |
|
|
<span class="name"> |
562 |
|
|
%s |
563 |
|
|
</span> |
564 |
|
|
</th> |
565 |
|
|
<th class="title col-1"> |
566 |
|
|
<span class="name"> |
567 |
|
|
%s |
568 |
|
|
</span> |
569 |
|
|
</th> |
570 |
|
|
<th class="title col-2"> |
571 |
|
|
<span class="name"> |
572 |
|
|
%s |
573 |
|
|
</span> |
574 |
|
|
</th> |
575 |
|
|
<th class="title col-3 lastcol"> |
576 |
|
|
<span class="name"> |
577 |
|
|
%s |
578 |
|
|
</span> |
579 |
|
|
</th> |
580 |
|
|
</tr> |
581 |
|
|
</thead> |
582 |
|
|
<tbody> |
583 |
|
|
%s |
584 |
|
|
</tbody> |
585 |
|
|
</table> |
586 |
|
|
'; |
587 |
|
|
// |
588 |
|
|
$template_line = ' |
589 |
|
|
<tr class="tab-data odd"> |
590 |
|
|
<td class="col-1 firstcol"> |
591 |
|
|
%s |
592 |
|
|
</td> |
593 |
|
|
<td class="col-1"> |
594 |
|
|
%s |
595 |
|
|
</td> |
596 |
|
|
<td class="col-2"> |
597 |
|
|
%s |
598 |
|
|
</td> |
599 |
|
|
<td class="col-3 lastcol"> |
600 |
|
|
%s |
601 |
|
|
</td> |
602 |
|
|
</tr> |
603 |
|
|
'; |
604 |
|
|
// |
605 |
|
|
$template_href = '../scr/form.php?obj=dossier_instruction&action=3&idx=%s'; |
606 |
|
|
// |
607 |
|
|
$template_link = ' |
608 |
|
|
<a class="lienTable" href="%s"> |
609 |
|
|
%s |
610 |
|
|
</a> |
611 |
|
|
'; |
612 |
|
|
// |
613 |
|
|
$template_footer = ' |
614 |
|
|
<div class="widget-footer"> |
615 |
|
|
<a href="%s"> |
616 |
|
|
%s |
617 |
|
|
</a> |
618 |
|
|
</div> |
619 |
|
|
'; |
620 |
|
|
|
621 |
|
|
/** |
622 |
|
|
* Si il y a des dossiers à afficher, alors on affiche le widget. |
623 |
|
|
*/ |
624 |
|
|
// On construit le contenu du tableau |
625 |
|
|
$ct_tbody = ''; |
626 |
|
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
627 |
|
|
// On construit l'attribut href du lien |
628 |
|
|
$ct_href = sprintf( |
629 |
|
|
$template_href, |
630 |
|
|
// idx |
631 |
|
|
$row["dossier"] |
632 |
|
|
); |
633 |
|
|
// On construit la ligne |
634 |
|
|
$ct_tbody .= sprintf( |
635 |
|
|
$template_line, |
636 |
|
|
// Colonne 1 - Numéro de dossier |
637 |
|
|
sprintf( |
638 |
|
|
$template_link, |
639 |
|
|
$ct_href, |
640 |
|
|
$row["dossier_libelle"] |
641 |
|
|
), |
642 |
|
|
// Colonne 2 - Nom du pétitionnaire |
643 |
|
|
sprintf( |
644 |
|
|
$template_link, |
645 |
|
|
$ct_href, |
646 |
|
|
$row["nom_petitionnaire"] |
647 |
|
|
), |
648 |
|
|
// Colonne 3 - Date limite |
649 |
|
|
sprintf( |
650 |
|
|
$template_link, |
651 |
|
|
$ct_href, |
652 |
|
|
$this->f->formatDate($row["date_limite_na"]) |
653 |
|
|
), |
654 |
|
|
// Colonne 4 - Enjeu |
655 |
|
|
sprintf( |
656 |
|
|
$template_link, |
657 |
|
|
$ct_href, |
658 |
|
|
$row["enjeu"] |
659 |
|
|
) |
660 |
|
|
); |
661 |
|
|
} |
662 |
|
|
// Affichage du tableau listant les dossiers |
663 |
|
|
printf( |
664 |
|
|
$template_table, |
665 |
|
|
// Colonne 1 - Numéro de dossier |
666 |
|
|
_('dossier'), |
667 |
|
|
// Colonne 2 - Nom du pétitionnaire |
668 |
|
|
_('nom_petitionnaire'), |
669 |
|
|
// Colonne 3 - Date limite |
670 |
|
|
_('date_limite'), |
671 |
|
|
// Colonne 4 - Enjeu |
672 |
|
|
_('enjeu'), |
673 |
|
|
// Contenu du tableau |
674 |
|
|
$ct_tbody |
675 |
|
|
); |
676 |
|
|
// Affichage du footer |
677 |
|
|
printf( |
678 |
|
|
$template_footer, |
679 |
|
|
// href (avec les paramètres du widget) |
680 |
|
|
sprintf( |
681 |
|
|
"../scr/tab.php?obj=dossiers_limites&nombre_de_jours=%s&codes_datd=%s&filtre=%s", |
682 |
|
|
$nombre_de_jours, |
683 |
|
|
(is_null($codes_datd) ? "" : implode(";",$codes_datd)), |
684 |
|
|
$filtre |
685 |
|
|
), |
686 |
|
|
// titre |
687 |
|
|
_("Voir +") |
688 |
|
|
); |
689 |
|
|
} |
690 |
|
|
|
691 |
|
|
/** |
692 |
|
|
* Cet méthode permet de formater, la chaîne de caractères reçue du |
693 |
|
|
* paramétrage du widget en un tableau de valeurs dont les clés |
694 |
|
|
* correspondent aux clés passées en paramètre. |
695 |
|
|
* |
696 |
|
|
* @param string $content |
697 |
|
|
* @param array $params |
698 |
|
|
* |
699 |
|
|
* @return array |
700 |
|
|
*/ |
701 |
|
|
function get_arguments($content = null, $params = array()) { |
702 |
|
|
// |
703 |
|
|
$arguments = array(); |
704 |
|
|
// On explose les paramètres reçus avec un élément par ligne |
705 |
|
|
$params_tmp1 = explode("\n", $content); |
706 |
|
|
// On boucle sur chaque ligne de paramètre |
707 |
|
|
foreach ($params_tmp1 as $key => $value) { |
708 |
|
|
// On explose le paramètre de sa valeur avec le séparateur '=' |
709 |
|
|
$params_tmp2[] = explode("=", $value); |
710 |
|
|
} |
711 |
|
|
// On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue |
712 |
|
|
// est acceptable ou non |
713 |
|
|
foreach ($params_tmp2 as $key => $value) { |
714 |
|
|
// |
715 |
|
|
if (!isset($value[0]) || !isset($value[1])) { |
716 |
|
|
continue; |
717 |
|
|
} |
718 |
|
|
// |
719 |
|
|
if (in_array(trim($value[0]), $params)) { |
720 |
|
|
$arguments[trim($value[0])] = trim($value[1]); |
721 |
|
|
} |
722 |
|
|
} |
723 |
|
|
// |
724 |
|
|
return $arguments; |
725 |
|
|
} |
726 |
|
|
|
727 |
|
|
} |
728 |
|
|
|
729 |
|
|
?> |