/[openfoncier]/trunk/sql/pgsql/dossier_instruction.inc.php
ViewVC logotype

Diff of /trunk/sql/pgsql/dossier_instruction.inc.php

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

revision 10968 by softime, Wed Dec 15 00:06:28 2021 UTC revision 13137 by softime, Thu Oct 27 20:34:03 2022 UTC
# Line 7  Line 7 
7    
8  /*Etend la classe dossier*/  /*Etend la classe dossier*/
9  include('../sql/pgsql/dossier.inc.php');  include('../sql/pgsql/dossier.inc.php');
10    include "../sql/pgsql/app_om_tab_common_select.inc.php";
11    
12  /*Titre de la page*/  /*Titre de la page*/
13  $ent = _("instruction")." -> "._("dossiers d'instruction");  $ent = _("instruction")." -> "._("dossiers d'instruction");
# Line 31  END"; Line 32  END";
32   * mettrent dans une seule colonne*/   * mettrent dans une seule colonne*/
33  $trim_concat_terrain = '  $trim_concat_terrain = '
34  TRIM(  TRIM(
35      COALESCE(      CASE
36          dossier.adresse_normalisee,          WHEN dossier.adresse_normalisee IS NULL
37          CONCAT_WS(              OR TRIM(dossier.adresse_normalisee) = \'\'
38              \' \',          THEN
39              dossier.terrain_adresse_voie_numero,              CONCAT_WS(
40              dossier.terrain_adresse_voie,                  \' \',
41              dossier.terrain_adresse_lieu_dit,                  dossier.terrain_adresse_voie_numero,
42              dossier.terrain_adresse_code_postal,                  dossier.terrain_adresse_voie,
43              dossier.terrain_adresse_localite,                  dossier.terrain_adresse_code_postal
44              dossier.terrain_adresse_bp,              )
45              dossier.terrain_adresse_cedex          ELSE
46          )              dossier.adresse_normalisee
47      )      END
48  ) as "'.__("localisation").'"';  ) as "'.__("localisation").'"';
49    
50  /*Tables sur lesquels la requête va s'effectuer*/  /*Tables sur lesquels la requête va s'effectuer*/
51  $table = DB_PREFIXE."dossier  $table = sprintf(
52  LEFT JOIN (      '%1$sdossier
53      SELECT *      -- Recherche le pétitionnaire principal du dossier (unique !)
54      FROM ".DB_PREFIXE."lien_dossier_demandeur      LEFT JOIN %1$slien_dossier_demandeur
55      INNER JOIN ".DB_PREFIXE."demandeur          ON lien_dossier_demandeur.dossier = dossier.dossier
56          ON demandeur.demandeur = lien_dossier_demandeur.demandeur              AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
57      WHERE lien_dossier_demandeur.petitionnaire_principal IS TRUE      LEFT JOIN %1$sdemandeur
58      AND LOWER(demandeur.type_demandeur) = LOWER('petitionnaire')          ON lien_dossier_demandeur.demandeur = demandeur.demandeur
59  ) as demandeur      -- Recherche le type de DATD
60      ON demandeur.dossier = dossier.dossier      LEFT JOIN %1$sdossier_instruction_type
61  LEFT JOIN ".DB_PREFIXE."dossier_autorisation          ON dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type
62      ON dossier_autorisation.dossier_autorisation = dossier.dossier_autorisation      LEFT JOIN %1$sdossier_autorisation_type_detaille
63  LEFT JOIN ".DB_PREFIXE."dossier_autorisation_type_detaille          ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_instruction_type.dossier_autorisation_type_detaille
64      ON dossier_autorisation_type_detaille.dossier_autorisation_type_detaille = dossier_autorisation.dossier_autorisation_type_detaille      -- Recherche l instructeur du dossier
65  LEFT JOIN ".DB_PREFIXE."instructeur      LEFT JOIN %1$sinstructeur
66      ON dossier.instructeur = instructeur.instructeur          ON dossier.instructeur = instructeur.instructeur
67  LEFT JOIN ".DB_PREFIXE."om_utilisateur      LEFT JOIN %1$som_utilisateur
68      ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur          ON instructeur.om_utilisateur = om_utilisateur.om_utilisateur
69  LEFT JOIN ".DB_PREFIXE."instructeur as instructeur2      -- Recherche l instructeur 2 du dossier
70      ON dossier.instructeur_2 = instructeur2.instructeur      LEFT JOIN %1$sinstructeur as instructeur_secondaire
71  LEFT JOIN ".DB_PREFIXE."om_utilisateur as om_utilisateur2          ON dossier.instructeur_2 = instructeur_secondaire.instructeur
72      ON instructeur2.om_utilisateur = om_utilisateur2.om_utilisateur      LEFT JOIN %1$som_utilisateur as utilisateur_2
73  LEFT JOIN ".DB_PREFIXE."etat          ON instructeur_secondaire.om_utilisateur = utilisateur_2.om_utilisateur
74      ON dossier.etat = etat.etat      -- Recherche l etat du dossier
75  LEFT JOIN ".DB_PREFIXE."division      LEFT JOIN %1$setat
76      ON dossier.division = division.division          ON dossier.etat = etat.etat
77  LEFT JOIN ".DB_PREFIXE."avis_decision        -- Recherche la division de rattachement du dossier (différente de celle de l instructeur)
78     ON avis_decision.avis_decision=dossier.avis_decision      LEFT JOIN %1$sdivision
79  LEFT JOIN ".DB_PREFIXE."om_collectivite          ON dossier.division = division.division
80      ON dossier.om_collectivite=om_collectivite.om_collectivite      -- Recherche l avis de décision
81  LEFT OUTER JOIN ".DB_PREFIXE."arrondissement      LEFT JOIN %1$savis_decision  
82      ON arrondissement.code_postal = dossier.terrain_adresse_code_postal          ON avis_decision.avis_decision=dossier.avis_decision
83  ";      -- Recherche la collectivite de rattachement du dossier
84        LEFT JOIN %1$som_collectivite
85            ON dossier.om_collectivite=om_collectivite.om_collectivite
86        -- Recherche l arrondissement du dossier
87        LEFT JOIN %1$sarrondissement
88            ON arrondissement.code_postal = dossier.terrain_adresse_code_postal
89        -- Récupère la demande qui a créé le type dossier du dossier
90        LEFT JOIN (%1$sdemande
91            JOIN %1$sdemande_type
92                ON demande.demande_type = demande_type.demande_type
93        )
94            ON demande.dossier_instruction = dossier.dossier
95                AND demande_type.dossier_instruction_type = dossier.dossier_instruction_type
96        ',
97        DB_PREFIXE
98    );
99  if ($f->is_option_dossier_commune_enabled()) {  if ($f->is_option_dossier_commune_enabled()) {
100      $table .= "      $table .= "
101          LEFT OUTER JOIN ".DB_PREFIXE."commune          LEFT OUTER JOIN ".DB_PREFIXE."commune
# Line 88  if ($f->is_option_dossier_commune_enable Line 104  if ($f->is_option_dossier_commune_enable
104  }  }
105    
106  // Ajout des colonnes concernant la demat  // Ajout des colonnes concernant la demat
107  $table .=  if ($f->get_submitted_get_value('mode') === 'export_csv') {
108      "LEFT JOIN      $table .=
109          (SELECT          "LEFT JOIN
110              dossier,              (SELECT
111              external_uid                  dossier,
112          FROM                  external_uid
113              ".DB_PREFIXE."lien_id_interne_uid_externe              FROM
114          WHERE object = 'dossier'                  ".DB_PREFIXE."lien_id_interne_uid_externe
115              AND category = 'platau'              WHERE object = 'dossier'
116          ) AS dossier_platau                  AND category = 'platau'
117          ON              ) AS dossier_platau
118              dossier_platau.dossier = dossier.dossier              ON
119      LEFT JOIN                  dossier_platau.dossier = dossier.dossier
120          (SELECT          LEFT JOIN
121              dossier,              (SELECT
122              external_uid                  dossier,
123          FROM                  external_uid
124              ".DB_PREFIXE."lien_id_interne_uid_externe              FROM
125          WHERE object = 'dossier_consultation'                  ".DB_PREFIXE."lien_id_interne_uid_externe
126              AND category = 'platau'              WHERE object = 'dossier_consultation'
127          ) AS consultation_platau                  AND category = 'platau'
128          ON              ) AS consultation_platau
129              consultation_platau.dossier = dossier.dossier              ON
130      LEFT JOIN                  consultation_platau.dossier = dossier.dossier
131          (SELECT          LEFT JOIN
132              dossier,              (SELECT
133              ARRAY_TO_STRING(ARRAY_AGG(external_uid ORDER BY external_uid ASC), ', ') AS external_uid                  dossier,
134          FROM                  ARRAY_TO_STRING(ARRAY_AGG(external_uid ORDER BY external_uid ASC), ', ') AS external_uid
135              ".DB_PREFIXE."lien_id_interne_uid_externe              FROM
136          WHERE                  ".DB_PREFIXE."lien_id_interne_uid_externe
137              object = 'piece'              WHERE
138              AND category = 'platau'                  object = 'piece'
139          GROUP BY                  AND category = 'platau'
140              dossier) AS pieces_platau              GROUP BY
141          ON                  dossier) AS pieces_platau
142              pieces_platau.dossier = dossier.dossier              ON
143      LEFT JOIN                  pieces_platau.dossier = dossier.dossier
144          (SELECT          LEFT JOIN
145              dossier,              (SELECT
146              ARRAY_TO_STRING(ARRAY_AGG(object || ' : ' || external_uid), ', ') AS external_uid                  dossier,
147          FROM                  ARRAY_TO_STRING(ARRAY_AGG(object || ' : ' || external_uid), ', ') AS external_uid
148              ".DB_PREFIXE."lien_id_interne_uid_externe              FROM
149          WHERE                  ".DB_PREFIXE."lien_id_interne_uid_externe
150              object != 'piece'              WHERE
151              AND object != 'dossier'                  object != 'piece'
152              AND object != 'dossier_consultation'                  AND object != 'dossier'
153              AND category = 'platau'                  AND object != 'dossier_consultation'
154          GROUP BY                  AND category = 'platau'
155              dossier) AS autres_platau              GROUP BY
156          ON                  dossier) AS autres_platau
157              autres_platau.dossier = dossier.dossier              ON
158      LEFT JOIN                  autres_platau.dossier = dossier.dossier
159          (SELECT DISTINCT(dossier_instruction), source_depot              ";
160              FROM ".DB_PREFIXE."demande) AS demande  }
         ON demande.dossier_instruction = dossier.dossier  
         ";  
161    
162  $champ_date_depot_mairie = 'to_char(dossier.date_depot_mairie ,\'DD/MM/YYYY\') as "'._("date_depot_mairie").'"';  $champ_date_depot_mairie = 'to_char(dossier.date_depot_mairie ,\'DD/MM/YYYY\') as "'._("date_depot_mairie").'"';
163    
164  /*Champs du début de la requête*/  /*Champs du début de la requête*/
165  $champAffiche_debut_commun = array(  $champAffiche_debut_commun = array(
166      'dossier.dossier as "'._("dossier").'"',      'dossier.dossier as "'._("dossier").'"',
167      'dossier.dossier_libelle as "'._("dossier").'"'      'dossier.geom as "geom_picto"',
168        'demande.source_depot as "demat_picto"',
169        $select__dossier_libelle__column_as,
170  );  );
171  if ($f->is_option_dossier_commune_enabled()) {  if ($f->is_option_dossier_commune_enabled()) {
172      $champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"';      $champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"';
# Line 250  if ($is_in_obj_whitelist === true && $re Line 266  if ($is_in_obj_whitelist === true && $re
266      // Modifie les colonnes à afficher en début du tableau      // Modifie les colonnes à afficher en début du tableau
267      $champAffiche_debut_commun = array(      $champAffiche_debut_commun = array(
268          'dossier.dossier as "'._("dossier").'"',          'dossier.dossier as "'._("dossier").'"',
269          'dossier.dossier_libelle as "'._("dossier").'"'          'dossier.geom as "geom_picto"',
270            'demande.source_depot as "demat_picto"',
271            $select__dossier_libelle__column_as,
272      );      );
273      if ($f->is_option_dossier_commune_enabled()) {      if ($f->is_option_dossier_commune_enabled()) {
274          $champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"';          $champAffiche_debut_commun[] = 'commune.libelle as "'.__("commune").'"';
# Line 293  if ($_SESSION['niveau'] == '2') { Line 311  if ($_SESSION['niveau'] == '2') {
311      array_push($champAffiche_fin_commun, "om_collectivite.libelle as \""._("collectivite")."\"");      array_push($champAffiche_fin_commun, "om_collectivite.libelle as \""._("collectivite")."\"");
312  }  }
313    
314  $selection .= "AND groupe.code != 'CTX'";  // Identifie s'il y a déjà un WHERE dans la requête
315    if (stripos($selection, "WHERE") === false) {
316        $selection .= " WHERE ";
317    } else {
318        $selection .= " AND ";
319    }
320    // Les dossiers des contentieux sont gérés dans un autre listing, il ne doivent
321    // pas apparaître dans la liste des dossiers d'instruction de l'onglet instruction -> recherche
322    // /!\ l'opérateur != exclus les valeurs null. Il faut donc préciser que les groupe ayant un
323    // code NULL doivent bien être récupérés.
324    $selection .= " (groupe.code IS NULL OR groupe.code != 'CTX')";
325    
326  /*Liste des champs affichés dans le tableau de résultat*/  /*Liste des champs affichés dans le tableau de résultat*/
327  $champAffiche = array_merge(  $champAffiche = array_merge(
# Line 320  if (isset($_GET['message_help']) Line 348  if (isset($_GET['message_help'])
348  // Liste des autres dossiers d'instructions  // Liste des autres dossiers d'instructions
349  if ($retourformulaire== 'dossier_instruction'){  if ($retourformulaire== 'dossier_instruction'){
350      $champAffiche = array(      $champAffiche = array(
351          'b.dossier as "'._("dossier_instruction").'"',          'dossier.dossier as "'._("dossier_instruction").'"',
352          'b.dossier_libelle as "'._("dossier").'"'          'dossier.geom as "geom_picto"',
353            'demande.source_depot as "demat_picto"',
354            $select__dossier_libelle__column_as,
355      );      );
356      if ($f->is_option_dossier_commune_enabled()) {      if ($f->is_option_dossier_commune_enabled()) {
357          $champAffiche[] = 'c.libelle as "'._("commune").'"';          $champAffiche[] = 'c.libelle as "'._("commune").'"';
358      }      }
359      array_push($champAffiche,      array_push($champAffiche,
360          'dossier_instruction_type.libelle as "'._("demande_type").'"',          'dossier_instruction_type.libelle as "'._("demande_type").'"',
361          'to_char(b.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',          'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"',
362          'b.etat as "'._("etat").'"'          'dossier.etat as "'._("etat").'"'
363      );      );
364    
365      $table =DB_PREFIXE.'dossier as a      $table =DB_PREFIXE.'dossier as a
366              JOIN '.DB_PREFIXE.'dossier_autorisation              JOIN '.DB_PREFIXE.'dossier_autorisation
367              ON a.dossier_autorisation=dossier_autorisation.dossier_autorisation              ON a.dossier_autorisation=dossier_autorisation.dossier_autorisation
368              JOIN '.DB_PREFIXE.'dossier as b              JOIN '.DB_PREFIXE.'dossier as dossier
369              ON b.dossier_autorisation=dossier_autorisation.dossier_autorisation              ON dossier.dossier_autorisation=dossier_autorisation.dossier_autorisation
370              JOIN '.DB_PREFIXE.'dossier_instruction_type              JOIN '.DB_PREFIXE.'dossier_instruction_type
371              ON dossier_instruction_type.dossier_instruction_type = b.dossier_instruction_type';              ON dossier_instruction_type.dossier_instruction_type = dossier.dossier_instruction_type';
372      if ($f->is_option_dossier_commune_enabled()) {      if ($f->is_option_dossier_commune_enabled()) {
373          $table .= '          $table .= '
374              JOIN '.DB_PREFIXE.'commune as c              JOIN '.DB_PREFIXE.'commune as c
375                  ON c.commune = dossier.commune';                  ON c.commune = dossier.commune';
376      }      }
377      $selection = 'WHERE a.dossier=\''.$f->db->escapeSimple($idxformulaire).'\'';      $selection = 'WHERE a.dossier=\''.$f->db->escapeSimple($idxformulaire).'\'';
378      $tri= "order by b.date_depot ASC";      $tri= "order by dossier.date_depot ASC";
379    
380      //      //
381      $tab_actions['left']["consulter"] =      $tab_actions['left']["consulter"] =
# Line 391  if($f->getParameter('option_sig') == 'si Line 421  if($f->getParameter('option_sig') == 'si
421  }  }
422    
423  // Si filtre DI auxquels on peut proposer une autre décision  // Si filtre DI auxquels on peut proposer une autre décision
424    // /!\ Requête lié à celles permettant de savoir si l'instructeur peut changer la
425    // décision et à l'affichage du widgets des dossiers éligibles au changement :
426    //   * instruction.class.php : isInstrCanChangeDecision()
427    //   * dossier_instruction.class.php : view_widget_dossiers_evenement_retour_finalise()
428    // TODO ; faire évoluer cette affichage pour reprendre celui des DI (avec la recherche avancée)
429  if (isset($extra_parameters["filtre_decision"])  if (isset($extra_parameters["filtre_decision"])
430      && $extra_parameters["filtre_decision"] == true) {      && $extra_parameters["filtre_decision"] == true) {
431    
# Line 407  if (isset($extra_parameters["filtre_deci Line 442  if (isset($extra_parameters["filtre_deci
442          'type' => 'pagination_select',          'type' => 'pagination_select',
443          'display' => false);          'display' => false);
444      // Ajout jointure      // Ajout jointure
445      $table .= "JOIN ".DB_PREFIXE."instruction ON instruction.instruction = (      $table = sprintf(
446                  SELECT instruction          '%1$sdossier
447                  FROM ".DB_PREFIXE."instruction          JOIN %1$setat
448                  JOIN ".DB_PREFIXE."evenement on instruction.evenement=evenement.evenement              ON dossier.etat = etat.etat AND etat.statut = \'encours\'
449                  WHERE instruction.dossier = dossier.dossier          JOIN %1$slien_dossier_demandeur
450                  AND evenement.retour IS FALSE              ON dossier.dossier = lien_dossier_demandeur.dossier AND lien_dossier_demandeur.petitionnaire_principal IS TRUE
451                  ORDER BY date_evenement DESC, instruction DESC          JOIN %1$sdossier_instruction_type
452                  LIMIT 1              ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type
453              )          JOIN %1$sdossier_autorisation_type_detaille
454              JOIN ".DB_PREFIXE."evenement ON instruction.evenement=evenement.evenement              ON dossier_instruction_type.dossier_autorisation_type_detaille = dossier_autorisation_type_detaille.dossier_autorisation_type_detaille
455              JOIN ".DB_PREFIXE."dossier_instruction_type ON dossier.dossier_instruction_type=dossier_instruction_type.dossier_instruction_type AND dossier_instruction_type.code IN ('P', 'T', 'M')";              -- Récupère la demande qui a créé le type dossier du dossier
456            LEFT JOIN (%1$sdemande
457                JOIN %1$sdemande_type
458                    ON demande.demande_type = demande_type.demande_type
459            )
460                ON demande.dossier_instruction = dossier.dossier
461                    AND demande_type.dossier_instruction_type = dossier.dossier_instruction_type
462            JOIN %1$sinstruction
463                -- Recherche de la dernière instruction qui ne soit pas liée à un événement retour
464                    ON instruction.instruction = (
465                            SELECT instruction
466                            FROM %1$sinstruction
467                            JOIN %1$sevenement ON instruction.evenement=evenement.evenement
468                            AND evenement.retour IS FALSE
469                            WHERE instruction.dossier = dossier.dossier
470                            ORDER BY date_evenement DESC, instruction DESC
471                            LIMIT 1
472                        )
473                        -- On ne garde que les dossiers pour lesquels la dernière instruction est finalisée
474                        -- ou alors pour laquelle l instruction a été ajouté par la commune et est
475                        -- non signée, non notifié, etc.
476                        AND (instruction.om_final_instruction IS TRUE
477                            OR instruction.created_by_commune IS TRUE)
478                        AND instruction.date_retour_signature IS NULL
479                        AND instruction.date_envoi_rar IS NULL
480                        AND instruction.date_retour_rar IS NULL
481                        AND instruction.date_envoi_controle_legalite IS NULL
482                        AND instruction.date_retour_controle_legalite IS NULL
483                -- On vérifie que l instruction soit un arrêté ou un changement de décision
484                JOIN %1$sevenement
485                    ON instruction.evenement=evenement.evenement
486                        AND (evenement.type = \'arrete\'
487                            OR evenement.type = \'changement_decision\')
488                -- Recherche les informations du pétitionnaire principal pour l affichage
489                JOIN %1$sdemandeur
490                    ON lien_dossier_demandeur.demandeur = demandeur.demandeur
491                -- Recherche la collectivité rattachée à l instructeur
492                JOIN %1$sinstructeur
493                    ON dossier.instructeur=instructeur.instructeur
494                JOIN %1$sdivision
495                    ON instructeur.division=division.division
496                JOIN %1$sdirection
497                    ON division.direction=direction.direction
498                JOIN %1$som_collectivite
499                    ON direction.om_collectivite=om_collectivite.om_collectivite
500                %2$s
501            ',
502            DB_PREFIXE,
503            $nature_des_travaux_from
504        );
505      // Modification sélection      // Modification sélection
506      $selection = "WHERE      $selection = "WHERE dossier_instruction_type.sous_dossier IS NOT TRUE AND
507                  groupe.code != 'CTX'          om_collectivite.niveau = '2'";
                 AND ((evenement.type = 'arrete' AND instruction.om_final_instruction IS TRUE) OR evenement.type = 'changement_decision')  
                 AND evenement.retour IS FALSE  
                 AND instruction.date_retour_signature IS NULL  
                 AND instruction.date_envoi_rar IS NULL  
                 AND instruction.date_retour_rar IS NULL  
                 AND instruction.date_envoi_controle_legalite IS NULL  
                 AND instruction.date_retour_controle_legalite IS NULL  
                 AND etat.statut = 'encours'  
                 AND om_utilisateur.login != '".$_SESSION['login']."'";  
508      // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci      // Si collectivité de l'utilisateur niveau mono alors filtre sur celle-ci
509      if ($f->isCollectiviteMono($_SESSION['collectivite']) === true) {      if ($f->isCollectiviteMono($_SESSION['collectivite']) === true) {
510          $selection .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];          $selection .= " AND dossier.om_collectivite=".$_SESSION['collectivite'];
# Line 438  if (isset($extra_parameters["filtre_deci Line 513  if (isset($extra_parameters["filtre_deci
513      $tri = " ORDER BY dossier.dossier ";      $tri = " ORDER BY dossier.dossier ";
514  }  }
515    
 // Gestion des groupes et confidentialité  
 include ('../sql/pgsql/filter_group.inc.php');  
516    
517    // Ajout de la gestion des groupes et confidentialité à la requête du listing
518    $sqlFiltreGroup = $this->get_sql_filtre_groupe($table.$selection);
519    $selection .= $sqlFiltreGroup['WHERE'];
520    $table .= $sqlFiltreGroup['FROM'];
521    // Ajout du filtrage des sous dossier à la requête d'affichage du listing
522    $sqlFiltreSD = $this->get_sql_filtre_sous_dossier($table.$selection);
523    $selection .= $sqlFiltreSD['WHERE'];
524    $table .= $sqlFiltreSD['FROM'];
525  ?>  ?>

Legend:
Removed from v.10968  
changed lines
  Added in v.13137

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26