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

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10868 by softime, Thu Nov 4 13:35:54 2021 UTC revision 10869 by softime, Fri Dec 3 18:46:03 2021 UTC
# Line 235  class om_widget extends om_widget_core { Line 235  class om_widget extends om_widget_core {
235          echo "\t</form>\n";          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.       * WIDGET DASHBOARD - widget_recherche_dossier_par_type.

Legend:
Removed from v.10868  
changed lines
  Added in v.10869

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26