Commit 33ea6567 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

MAJ plafonds

parent 325e0c6d
Loading
Loading
Loading
Loading
+123 −152
Changes for data/ddl/package/UNICAEN_TBL/body.sql: 123 added lines, 152 removed lines.
Original line number Diff line number Diff line
@@ -1747,24 +1747,24 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          p.PLAFOND_ID,
          p.ANNEE_ID,
          p.ELEMENT_PEDAGOGIQUE_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.PLAFOND,
          p.ELEMENT_PEDAGOGIQUE_ID,
          p.HEURES,
          p.DEROGATION,
          p.PLAFOND_ID
          p.PLAFOND,
          p.DEROGATION
        FROM
        (
          SELECT NULL ANNEE_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL PLAFOND,NULL HEURES, 0 DEROGATION, NULL PLAFOND_ID FROM dual WHERE 0 = 1
          SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL HEURES,NULL PLAFOND,NULL DEROGATION FROM dual WHERE 0 = 1
        ) p
        JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
        WHERE
          1=1
          /*@PLAFOND_ID=p.PLAFOND_ID*/
          /*@ANNEE_ID=p.ANNEE_ID*/
          /*@ELEMENT_PEDAGOGIQUE_ID=p.ELEMENT_PEDAGOGIQUE_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/';
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/
          /*@ELEMENT_PEDAGOGIQUE_ID=p.ELEMENT_PEDAGOGIQUE_ID*/';

    IF param IS NULL THEN
      filter := '1=1';
@@ -1777,28 +1777,28 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
    OPEN c FOR '
    SELECT
      CASE WHEN
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
        AND t.HEURES                             = v.HEURES
        AND t.PLAFOND                            = v.PLAFOND
        AND t.DEROGATION                         = v.DEROGATION
      THEN -1 ELSE t.ID END ID,
      v.ANNEE_ID,
      v.ELEMENT_PEDAGOGIQUE_ID,
      v.PLAFOND_ID,
      v.ANNEE_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.DEROGATION,
      v.ELEMENT_PEDAGOGIQUE_ID,
      v.HEURES,
      v.PLAFOND
      v.PLAFOND,
      v.DEROGATION
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PLAFOND_ELEMENT t ON
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
    WHERE ' || filter;
    LOOP
      FETCH c INTO d; EXIT WHEN c%NOTFOUND;
@@ -1807,10 +1807,10 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        d.id := TBL_PLAFOND_ELEMENT_ID_SEQ.NEXTVAL;
        INSERT INTO TBL_PLAFOND_ELEMENT values d;
      ELSIF
            d.ANNEE_ID IS NULL
        AND d.ELEMENT_PEDAGOGIQUE_ID IS NULL
        AND d.PLAFOND_ID IS NULL
            d.PLAFOND_ID IS NULL
        AND d.ANNEE_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.ELEMENT_PEDAGOGIQUE_ID IS NULL
      THEN
        DELETE FROM TBL_PLAFOND_ELEMENT WHERE id = d.id;
      ELSIF d.id <> -1 THEN
@@ -1831,13 +1831,13 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          p.PLAFOND_ID,
          p.ANNEE_ID,
          p.INTERVENANT_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.PLAFOND,
          p.INTERVENANT_ID,
          p.HEURES,
          p.DEROGATION,
          p.PLAFOND_ID
          p.PLAFOND,
          p.DEROGATION
        FROM
        (
          SELECT 6 PLAFOND_ID, 0 DEROGATION, p.* FROM (
@@ -1869,9 +1869,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                  fr.id
              ) t
                JOIN intervenant i ON i.id = t.intervenant_id
            WHERE
                t.heures > t.plafond + 0.05
              /*@INTERVENANT_ID=i.id*/
            GROUP BY
              t.type_volume_horaire_id,
              i.annee_id,
@@ -1908,9 +1905,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                fr.id
              ) t
              JOIN intervenant i ON i.id = t.intervenant_id
            WHERE
              t.heures > t.plafond + 0.05
              /*@INTERVENANT_ID=i.id*/
            GROUP BY
              t.type_volume_horaire_id,
              i.annee_id,
@@ -1931,41 +1925,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
              JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
              JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
              JOIN statut_intervenant        si ON si.id = i.statut_id
            WHERE
              fr.SERVICE_REFERENTIEL + fr.HEURES_COMPL_REFERENTIEL > si.plafond_referentiel + 0.05
              /*@INTERVENANT_ID=i.id*/
          ) p

          UNION ALL

          SELECT 7 PLAFOND_ID, 0 DEROGATION, p.* FROM (
            SELECT
              t.type_volume_horaire_id,
              t.annee_id,
              t.intervenant_id,
              t.plafond           plafond,
              t.heures            heures
            FROM
              (
                SELECT DISTINCT
                  vhr.type_volume_horaire_id        type_volume_horaire_id,
                  i.annee_id                        annee_id,
                  i.id                              intervenant_id,
                  s.plafond_referentiel             plafond,
                  s.id                              structure_id,
                  s.libelle_court                   structure_libelle,
                  SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id,i.annee_id) heures
                FROM
                         service_referentiel       sr
                    JOIN intervenant                i ON i.id = sr.intervenant_id
                    JOIN structure                  s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
                    JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
                WHERE
                    sr.histo_destruction IS NULL
              ) t
            WHERE
                t.heures > t.plafond + 0.05
              /*@INTERVENANT_ID=i.id*/
          ) p

          UNION ALL
@@ -1996,7 +1955,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                  JOIN statut_intervenant        si ON si.id = i.statut_id
                WHERE
                  ti.regle_foad = 0
                  /*@INTERVENANT_ID=i.id*/
                GROUP BY
                  fr.type_volume_horaire_id,
                  i.annee_id,
@@ -2005,8 +1963,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                  si.plafond_hc_fi_hors_ead
              ) t
                JOIN statut_intervenant si ON si.id = t.statut_intervenant_id
            WHERE
              t.heures > si.plafond_hc_fi_hors_ead + 0.05
          ) p

          UNION ALL
@@ -2017,15 +1973,12 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
              i.annee_id                             annee_id,
              i.id                                   intervenant_id,
              si.maximum_hetd                        plafond,
              fr.total                            heures
              fr.total - fr.heures_compl_fc_majorees heures
            FROM
              intervenant                     i
              JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
              JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
              JOIN statut_intervenant        si ON si.id = i.statut_id
            WHERE
              fr.total - fr.heures_compl_fc_majorees > si.maximum_hetd + 0.05
              /*@INTERVENANT_ID=i.id*/
          ) p

          UNION ALL
@@ -2043,9 +1996,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
              JOIN statut_intervenant        si ON si.id = i.statut_id
              JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
              JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
            WHERE
              fr.heures_compl_fc_majorees > ROUND( (COALESCE(si.plafond_hc_remu_fc,0) - COALESCE(i.montant_indemnite_fc,0)) / a.taux_hetd, 2 ) + 0.05
              /*@INTERVENANT_ID=i.id*/
          ) p

          UNION ALL
@@ -2062,9 +2012,6 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
              JOIN statut_intervenant        si ON si.id = i.statut_id
              JOIN etat_volume_horaire      evh ON evh.code = ''saisi''
              JOIN formule_resultat          fr ON fr.intervenant_id = i.id AND fr.etat_volume_horaire_id = evh.id
            WHERE
              (fr.heures_compl_fi + fr.heures_compl_fc + fr.heures_compl_fa + fr.heures_compl_referentiel) > si.plafond_hc_hors_remu_fc + 0.05
              /*@INTERVENANT_ID=i.id*/
          ) p
        ) p
        JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
@@ -2072,8 +2019,8 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
          1=1
          /*@PLAFOND_ID=p.PLAFOND_ID*/
          /*@ANNEE_ID=p.ANNEE_ID*/
          /*@INTERVENANT_ID=p.INTERVENANT_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/';
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/
          /*@INTERVENANT_ID=p.INTERVENANT_ID*/';

    IF param IS NULL THEN
      filter := '1=1';
@@ -2086,28 +2033,28 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
    OPEN c FOR '
    SELECT
      CASE WHEN
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.INTERVENANT_ID                     = v.INTERVENANT_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
        AND t.INTERVENANT_ID                     = v.INTERVENANT_ID
        AND t.HEURES                             = v.HEURES
        AND t.PLAFOND                            = v.PLAFOND
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
      THEN -1 ELSE t.ID END ID,
      v.PLAFOND_ID,
      v.ANNEE_ID,
      v.INTERVENANT_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.DEROGATION,
      v.INTERVENANT_ID,
      v.HEURES,
      v.PLAFOND,
      v.PLAFOND_ID
      v.DEROGATION
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PLAFOND_INTERVENANT t ON
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.INTERVENANT_ID                     = v.INTERVENANT_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.INTERVENANT_ID                     = v.INTERVENANT_ID
    WHERE ' || filter;
    LOOP
      FETCH c INTO d; EXIT WHEN c%NOTFOUND;
@@ -2116,10 +2063,10 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        d.id := TBL_PLAFOND_INTERVENANT_ID_SEQ.NEXTVAL;
        INSERT INTO TBL_PLAFOND_INTERVENANT values d;
      ELSIF
            d.ANNEE_ID IS NULL
        AND d.INTERVENANT_ID IS NULL
            d.PLAFOND_ID IS NULL
        AND d.ANNEE_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.PLAFOND_ID IS NULL
        AND d.INTERVENANT_ID IS NULL
      THEN
        DELETE FROM TBL_PLAFOND_INTERVENANT WHERE id = d.id;
      ELSIF d.id <> -1 THEN
@@ -2140,24 +2087,24 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          p.PLAFOND_ID,
          p.ANNEE_ID,
          p.FONCTION_REFERENTIEL_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.PLAFOND,
          p.FONCTION_REFERENTIEL_ID,
          p.HEURES,
          p.DEROGATION,
          p.PLAFOND_ID
          p.PLAFOND,
          p.DEROGATION
        FROM
        (
          SELECT NULL ANNEE_ID,NULL FONCTION_REFERENTIEL_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL PLAFOND,NULL HEURES, 0 DEROGATION, NULL PLAFOND_ID FROM dual WHERE 0 = 1
          SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL FONCTION_REFERENTIEL_ID,NULL HEURES,NULL PLAFOND,NULL DEROGATION FROM dual WHERE 0 = 1
        ) p
        JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
        WHERE
          1=1
          /*@PLAFOND_ID=p.PLAFOND_ID*/
          /*@ANNEE_ID=p.ANNEE_ID*/
          /*@FONCTION_REFERENTIEL_ID=p.FONCTION_REFERENTIEL_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/';
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/
          /*@FONCTION_REFERENTIEL_ID=p.FONCTION_REFERENTIEL_ID*/';

    IF param IS NULL THEN
      filter := '1=1';
@@ -2170,28 +2117,28 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
    OPEN c FOR '
    SELECT
      CASE WHEN
            t.ANNEE_ID                            = v.ANNEE_ID
        AND t.FONCTION_REFERENTIEL_ID             = v.FONCTION_REFERENTIEL_ID
            COALESCE(t.PLAFOND_ID,0)              = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                            = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0)  = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.DEROGATION                          = v.DEROGATION
        AND t.FONCTION_REFERENTIEL_ID             = v.FONCTION_REFERENTIEL_ID
        AND t.HEURES                              = v.HEURES
        AND t.PLAFOND                             = v.PLAFOND
        AND COALESCE(t.PLAFOND_ID,0)              = COALESCE(v.PLAFOND_ID,0)
        AND t.DEROGATION                          = v.DEROGATION
      THEN -1 ELSE t.ID END ID,
      v.PLAFOND_ID,
      v.ANNEE_ID,
      v.FONCTION_REFERENTIEL_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.DEROGATION,
      v.FONCTION_REFERENTIEL_ID,
      v.HEURES,
      v.PLAFOND,
      v.PLAFOND_ID
      v.DEROGATION
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PLAFOND_REFERENTIEL t ON
            t.ANNEE_ID                            = v.ANNEE_ID
        AND t.FONCTION_REFERENTIEL_ID             = v.FONCTION_REFERENTIEL_ID
            COALESCE(t.PLAFOND_ID,0)              = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                            = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0)  = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND COALESCE(t.PLAFOND_ID,0)              = COALESCE(v.PLAFOND_ID,0)
        AND t.FONCTION_REFERENTIEL_ID             = v.FONCTION_REFERENTIEL_ID
    WHERE ' || filter;
    LOOP
      FETCH c INTO d; EXIT WHEN c%NOTFOUND;
@@ -2200,10 +2147,10 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        d.id := TBL_PLAFOND_REFERENTIEL_ID_SEQ.NEXTVAL;
        INSERT INTO TBL_PLAFOND_REFERENTIEL values d;
      ELSIF
            d.ANNEE_ID IS NULL
        AND d.FONCTION_REFERENTIEL_ID IS NULL
            d.PLAFOND_ID IS NULL
        AND d.ANNEE_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.PLAFOND_ID IS NULL
        AND d.FONCTION_REFERENTIEL_ID IS NULL
      THEN
        DELETE FROM TBL_PLAFOND_REFERENTIEL WHERE id = d.id;
      ELSIF d.id <> -1 THEN
@@ -2224,24 +2171,48 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          p.PLAFOND_ID,
          p.ANNEE_ID,
          p.STRUCTURE_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.PLAFOND,
          p.STRUCTURE_ID,
          p.HEURES,
          p.DEROGATION,
          p.PLAFOND_ID
          p.PLAFOND,
          p.DEROGATION
        FROM
        (
          SELECT 7 PLAFOND_ID, 0 DEROGATION, p.* FROM (
            SELECT
              t.type_volume_horaire_id,
              t.annee_id,
              t.structure_id,
              t.plafond,
              t.heures
            FROM
              (
          SELECT NULL ANNEE_ID,NULL STRUCTURE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL PLAFOND,NULL HEURES, 0 DEROGATION, NULL PLAFOND_ID FROM dual WHERE 0 = 1
                SELECT DISTINCT
                  vhr.type_volume_horaire_id        type_volume_horaire_id,
                  i.annee_id                        annee_id,
                  s.plafond_referentiel             plafond,
                  s.id                              structure_id,
                  s.libelle_court                   structure_libelle,
                  SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id,i.annee_id) heures
                FROM
                         service_referentiel       sr
                    JOIN intervenant                i ON i.id = sr.intervenant_id
                    JOIN structure                  s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
                    JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
                WHERE
                    sr.histo_destruction IS NULL
              ) t
          ) p
        ) p
        JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
        WHERE
          1=1
          /*@PLAFOND_ID=p.PLAFOND_ID*/
          /*@ANNEE_ID=p.ANNEE_ID*/
          /*@STRUCTURE_ID=p.STRUCTURE_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/';
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/
          /*@STRUCTURE_ID=p.STRUCTURE_ID*/';

    IF param IS NULL THEN
      filter := '1=1';
@@ -2254,28 +2225,28 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
    OPEN c FOR '
    SELECT
      CASE WHEN
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.STRUCTURE_ID                       = v.STRUCTURE_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.STRUCTURE_ID                       = v.STRUCTURE_ID
        AND t.HEURES                             = v.HEURES
        AND t.PLAFOND                            = v.PLAFOND
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
      THEN -1 ELSE t.ID END ID,
      v.PLAFOND_ID,
      v.ANNEE_ID,
      v.STRUCTURE_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.STRUCTURE_ID,
      v.HEURES,
      v.PLAFOND,
      v.PLAFOND_ID,
      v.DEROGATION
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PLAFOND_STRUCTURE t ON
            t.ANNEE_ID                           = v.ANNEE_ID
        AND t.STRUCTURE_ID                       = v.STRUCTURE_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.STRUCTURE_ID                       = v.STRUCTURE_ID
    WHERE ' || filter;
    LOOP
      FETCH c INTO d; EXIT WHEN c%NOTFOUND;
@@ -2284,10 +2255,10 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        d.id := TBL_PLAFOND_STRUCTURE_ID_SEQ.NEXTVAL;
        INSERT INTO TBL_PLAFOND_STRUCTURE values d;
      ELSIF
            d.ANNEE_ID IS NULL
        AND d.STRUCTURE_ID IS NULL
            d.PLAFOND_ID IS NULL
        AND d.ANNEE_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.PLAFOND_ID IS NULL
        AND d.STRUCTURE_ID IS NULL
      THEN
        DELETE FROM TBL_PLAFOND_STRUCTURE WHERE id = d.id;
      ELSIF d.id <> -1 THEN
@@ -2308,26 +2279,26 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          p.PLAFOND_ID,
          p.ANNEE_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.ELEMENT_PEDAGOGIQUE_ID,
          p.TYPE_INTERVENTION_ID,
          p.TYPE_VOLUME_HORAIRE_ID,
          p.PLAFOND,
          p.HEURES,
          p.DEROGATION,
          p.PLAFOND_ID
          p.PLAFOND,
          p.DEROGATION
        FROM
        (
          SELECT NULL ANNEE_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL PLAFOND,NULL HEURES, 0 DEROGATION, NULL PLAFOND_ID FROM dual WHERE 0 = 1
          SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL HEURES,NULL PLAFOND,NULL DEROGATION FROM dual WHERE 0 = 1
        ) p
        JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
        WHERE
          1=1
          /*@PLAFOND_ID=p.PLAFOND_ID*/
          /*@ANNEE_ID=p.ANNEE_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/
          /*@ELEMENT_PEDAGOGIQUE_ID=p.ELEMENT_PEDAGOGIQUE_ID*/
          /*@TYPE_INTERVENTION_ID=p.TYPE_INTERVENTION_ID*/
          /*@TYPE_VOLUME_HORAIRE_ID=p.TYPE_VOLUME_HORAIRE_ID*/';
          /*@TYPE_INTERVENTION_ID=p.TYPE_INTERVENTION_ID*/';

    IF param IS NULL THEN
      filter := '1=1';
@@ -2340,31 +2311,31 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
    OPEN c FOR '
    SELECT
      CASE WHEN
            t.ANNEE_ID                           = v.ANNEE_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
        AND COALESCE(t.TYPE_INTERVENTION_ID,0)   = COALESCE(v.TYPE_INTERVENTION_ID,0)
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
        AND t.HEURES                             = v.HEURES
        AND t.PLAFOND                            = v.PLAFOND
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.DEROGATION                         = v.DEROGATION
      THEN -1 ELSE t.ID END ID,
      v.PLAFOND_ID,
      v.ANNEE_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.ELEMENT_PEDAGOGIQUE_ID,
      v.TYPE_INTERVENTION_ID,
      v.TYPE_VOLUME_HORAIRE_ID,
      v.DEROGATION,
      v.HEURES,
      v.PLAFOND,
      v.PLAFOND_ID
      v.DEROGATION
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PLAFOND_VOLUME_HORAIRE t ON
            t.ANNEE_ID                           = v.ANNEE_ID
            COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
        AND t.ANNEE_ID                           = v.ANNEE_ID
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND t.ELEMENT_PEDAGOGIQUE_ID             = v.ELEMENT_PEDAGOGIQUE_ID
        AND COALESCE(t.TYPE_INTERVENTION_ID,0)   = COALESCE(v.TYPE_INTERVENTION_ID,0)
        AND COALESCE(t.TYPE_VOLUME_HORAIRE_ID,0) = COALESCE(v.TYPE_VOLUME_HORAIRE_ID,0)
        AND COALESCE(t.PLAFOND_ID,0)             = COALESCE(v.PLAFOND_ID,0)
    WHERE ' || filter;
    LOOP
      FETCH c INTO d; EXIT WHEN c%NOTFOUND;
@@ -2373,11 +2344,11 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        d.id := TBL_PLAFOND_VOLUME_HORA_ID_SEQ.NEXTVAL;
        INSERT INTO TBL_PLAFOND_VOLUME_HORAIRE values d;
      ELSIF
            d.ANNEE_ID IS NULL
            d.PLAFOND_ID IS NULL
        AND d.ANNEE_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.ELEMENT_PEDAGOGIQUE_ID IS NULL
        AND d.TYPE_INTERVENTION_ID IS NULL
        AND d.TYPE_VOLUME_HORAIRE_ID IS NULL
        AND d.PLAFOND_ID IS NULL
      THEN
        DELETE FROM TBL_PLAFOND_VOLUME_HORAIRE WHERE id = d.id;
      ELSIF d.id <> -1 THEN
+1 −54

File changed.

Preview size limit exceeded, changes collapsed.

+25 −1
Changes for data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql: 25 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -9,7 +9,31 @@ SELECT
  p.DEROGATION
FROM
(
  SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL STRUCTURE_ID,NULL HEURES,NULL PLAFOND,NULL DEROGATION FROM dual WHERE 0 = 1
  SELECT 7 PLAFOND_ID, 0 DEROGATION, p.* FROM (
    SELECT
      t.type_volume_horaire_id,
      t.annee_id,
      t.structure_id,
      t.plafond,
      t.heures
    FROM
      (
        SELECT DISTINCT
          vhr.type_volume_horaire_id        type_volume_horaire_id,
          i.annee_id                        annee_id,
          s.plafond_referentiel             plafond,
          s.id                              structure_id,
          s.libelle_court                   structure_libelle,
          SUM(vhr.heures) OVER (PARTITION BY s.id,vhr.type_volume_horaire_id,i.annee_id) heures
        FROM
                 service_referentiel       sr
            JOIN intervenant                i ON i.id = sr.intervenant_id
            JOIN structure                  s ON s.id = sr.structure_id AND s.plafond_referentiel IS NOT NULL
            JOIN volume_horaire_ref       vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL
        WHERE
            sr.histo_destruction IS NULL
      ) t
  ) p
) p
JOIN plafond_application pa ON pa.plafond_id = p.plafond_id AND pa.type_volume_horaire_id = p.type_volume_horaire_id AND p.annee_id BETWEEN COALESCE(pa.annee_debut_id,p.annee_id) AND COALESCE(pa.annee_fin_id,p.annee_id)
WHERE