Commit 4a721ecd authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Nouvelles corrections de bugs au niveau du calcul des charges, optimisation &...

Nouvelles corrections de bugs au niveau du calcul des charges, optimisation & suppression d'une vue devenue obsolète
parent 0af1409a
Loading
Loading
Loading
Loading
+69 −63
Changes for data/ddl/package/UNICAEN_TBL/body.sql: 69 added lines, 63 removed lines.
Original line number Diff line number Diff line
@@ -358,7 +358,56 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  filter VARCHAR2(150);
  viewQuery CLOB;
  BEGIN
    viewQuery := 'WITH t AS (
    viewQuery := 'SELECT
          annee_id,
          noeud_id,
          scenario_id,
          type_heures_id,
          type_intervention_id,

          element_pedagogique_id,
          etape_id,
          etape_ens_id,
          structure_id,
          groupe_type_formation_id,

          ouverture,
          dedoublement,
          assiduite,
          effectif,
          heures_ens,
          --t_effectif,t_dedoublement,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            (CEIL(t_effectif / dedoublement) * effectif) / t_effectif
          END groupes,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            ((CEIL(t_effectif / dedoublement) * effectif) / t_effectif) * heures_ens
          END heures,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            ((CEIL(t_effectif / dedoublement) * effectif) / t_effectif) * hetd
          END  hetd

        FROM
          (
          WITH seuils_perso AS (
          SELECT
            n.element_pedagogique_id,
            n.etape_id,
            sn.scenario_id,
            sns.type_intervention_id,
            sns.ouverture,
            sns.dedoublement,
            sns.assiduite
          FROM
            scenario_noeud_seuil sns
            JOIN scenario_noeud sn ON sn.id = sns.scenario_noeud_id AND sn.histo_destruction IS NULL
            JOIN noeud n ON n.id = sn.noeud_id
          WHERE
            sns.dedoublement IS NOT NULL
        )
          SELECT
            n.annee_id                                                                       annee_id,
            n.noeud_id                                                                       noeud_id,
@@ -372,22 +421,17 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
            n.structure_id                                                                   structure_id,
            n.groupe_type_formation_id                                                       groupe_type_formation_id,

          vhe.heures                                                                       heures,
            vhe.heures                                                                       heures_ens,
            vhe.heures * ti.taux_hetd_service                                                hetd,

          GREATEST(COALESCE(sns.ouverture, 1),1)                                           ouverture,
          GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1) dedoublement,
          COALESCE(sns.assiduite,1)                                                        assiduite,
          sne.effectif*COALESCE(sns.assiduite,1)                                           effectif,
          SUM(sne.effectif*COALESCE(sns.assiduite,1))
            OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_effectif,
          AVG(GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1))
            OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_dedoublement

            COALESCE(sep.ouverture, se.ouverture,1)                                          ouverture,
            COALESCE(sep.dedoublement, se.dedoublement, sd.dedoublement,1)                   dedoublement,
            COALESCE(sep.assiduite,1)                                                        assiduite,
            sne.effectif*COALESCE(sep.assiduite,1)                                           effectif,
            SUM(sne.effectif*COALESCE(sep.assiduite,1))
              OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_effectif
        FROM
                      scenario_noeud_effectif sne
               JOIN etape                        e ON e.id = sne.etape_id
                                                  AND e.histo_destruction IS NULL

                 JOIN scenario_noeud           sn ON sn.id = sne.scenario_noeud_id
                                                 AND sn.histo_destruction IS NULL
@@ -405,61 +449,23 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS

                 JOIN type_intervention        ti ON ti.id = vhe.type_intervention_id

          LEFT JOIN tbl_noeud                 netp ON netp.etape_id = e.id

          LEFT JOIN scenario_noeud           snetp ON snetp.scenario_id = sn.scenario_id
                                                  AND snetp.noeud_id = netp.noeud_id
                                                  AND snetp.histo_destruction IS NULL

          LEFT JOIN scenario_noeud_seuil    snsetp ON snsetp.scenario_noeud_id = snetp.id
                                                  AND snsetp.type_intervention_id = ti.id
            LEFT JOIN seuils_perso            sep ON sep.element_pedagogique_id = n.element_pedagogique_id
                                                 AND sep.scenario_id = sn.scenario_id
                                                 AND sep.type_intervention_id = ti.id

          LEFT JOIN tbl_chargens_seuils_def   csdd ON csdd.annee_id = n.annee_id
                                                  AND csdd.scenario_id = sn.scenario_id
                                                  AND csdd.type_intervention_id = ti.id
                                                  AND csdd.groupe_type_formation_id = n.groupe_type_formation_id
                                                  AND csdd.structure_id = n.structure_id
            LEFT JOIN seuils_perso             se ON se.etape_id = n.element_pedagogique_etape_id
                                                 AND sep.scenario_id = sn.scenario_id
                                                 AND sep.type_intervention_id = ti.id

          LEFT JOIN scenario_noeud_seuil       sns ON sns.scenario_noeud_id = sn.id
                                                  AND sns.type_intervention_id = ti.id
            LEFT JOIN tbl_chargens_seuils_def  sd ON sd.annee_id = n.annee_id
                                                 AND sd.scenario_id = sn.scenario_id
                                                 AND sd.structure_id = n.structure_etape_id
                                                 AND sd.groupe_type_formation_id = n.groupe_type_formation_id
                                                 AND sd.type_intervention_id = ti.id
          WHERE
            1=1
            /*@ETAPE_ENS_ID=sne.etape_id*/
        )
        SELECT
          annee_id,
          noeud_id,
          scenario_id,
          type_heures_id,
          type_intervention_id,

          element_pedagogique_id,
          etape_id,
          etape_ens_id,
          structure_id,
          groupe_type_formation_id,

          ouverture,
          dedoublement,
          assiduite,
          effectif,
          heures heures_ens,
          --t_effectif,t_dedoublement,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            (CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif
          END groupes,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            ((CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif) * heures
          END heures,

          CASE WHEN t_effectif < ouverture THEN 0 ELSE
            ((CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif) * hetd
          END  hetd

        FROM
          t';
          ) t';

    IF param IS NULL THEN
      filter := '1=1';
+0 −41
Changes for data/ddl/view/V_CHARGENS_SEUILS_DED_DEF.sql: 0 added lines, 41 removed lines.
Original line number Diff line number Diff line
CREATE OR REPLACE FORCE VIEW V_CHARGENS_SEUILS_DED_DEF AS
WITH seuils_perso AS (
  SELECT
    n.element_pedagogique_id,
    n.etape_id,
    sn.scenario_id,
    sns.type_intervention_id,
    sns.ouverture,
    sns.dedoublement,
    sns.assiduite
  FROM
    scenario_noeud_seuil sns
    JOIN scenario_noeud sn ON sn.id = sns.scenario_noeud_id AND sn.histo_destruction IS NULL
    JOIN noeud n ON n.id = sn.noeud_id
  WHERE
    sns.dedoublement IS NOT NULL
)
SELECT
  n.noeud_id                                                   noeud_id,
  s.id                                                         scenario_id,
  ti.id                                                        type_intervention_id,
  COALESCE(sep.ouverture, se.ouverture)                        ouverture,
  COALESCE(sep.dedoublement, se.dedoublement, sd.dedoublement) dedoublement,
  sep.assiduite                                                assiduite
FROM
            tbl_noeud n
       JOIN scenario                  s ON s.histo_destruction IS NULL
       JOIN type_intervention        ti ON ti.histo_destruction IS NULL
  LEFT JOIN seuils_perso            sep ON sep.element_pedagogique_id = n.element_pedagogique_id
                                       AND sep.scenario_id = s.id
                                       AND sep.type_intervention_id = ti.id

  LEFT JOIN seuils_perso             se ON se.etape_id = n.element_pedagogique_etape_id
                                       AND sep.scenario_id = s.id
                                       AND sep.type_intervention_id = ti.id

  LEFT JOIN tbl_chargens_seuils_def  sd ON sd.annee_id = n.annee_id
                                       AND sd.scenario_id = s.id
                                       AND sd.structure_id = n.structure_etape_id
                                       AND sd.groupe_type_formation_id = n.groupe_type_formation_id
                                       AND sd.type_intervention_id = ti.id
 No newline at end of file
+69 −61
Changes for data/ddl/view/V_TBL_CHARGENS.sql: 69 added lines, 61 removed lines.
Original line number Diff line number Diff line
CREATE OR REPLACE FORCE VIEW V_TBL_CHARGENS AS
WITH t AS (
SELECT
  annee_id,
  noeud_id,
  scenario_id,
  type_heures_id,
  type_intervention_id,

  element_pedagogique_id,
  etape_id,
  etape_ens_id,
  structure_id,
  groupe_type_formation_id,

  ouverture,
  dedoublement,
  assiduite,
  effectif,
  heures_ens,
  --t_effectif,t_dedoublement,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    (CEIL(t_effectif / dedoublement) * effectif) / t_effectif
  END groupes,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    ((CEIL(t_effectif / dedoublement) * effectif) / t_effectif) * heures_ens
  END heures,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    ((CEIL(t_effectif / dedoublement) * effectif) / t_effectif) * hetd
  END  hetd

FROM
  (
  WITH seuils_perso AS (
  SELECT
    n.element_pedagogique_id,
    n.etape_id,
    sn.scenario_id,
    sns.type_intervention_id,
    sns.ouverture,
    sns.dedoublement,
    sns.assiduite
  FROM
    scenario_noeud_seuil sns
    JOIN scenario_noeud sn ON sn.id = sns.scenario_noeud_id AND sn.histo_destruction IS NULL
    JOIN noeud n ON n.id = sn.noeud_id
  WHERE
    sns.dedoublement IS NOT NULL
)
  SELECT
    n.annee_id                                                                       annee_id,
    n.noeud_id                                                                       noeud_id,
@@ -13,22 +62,17 @@ WITH t AS (
    n.structure_id                                                                   structure_id,
    n.groupe_type_formation_id                                                       groupe_type_formation_id,

    vhe.heures                                                                       heures,
    vhe.heures                                                                       heures_ens,
    vhe.heures * ti.taux_hetd_service                                                hetd,

    GREATEST(COALESCE(sns.ouverture, 1),1)                                           ouverture,
    GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1) dedoublement,
    COALESCE(sns.assiduite,1)                                                        assiduite,
    sne.effectif*COALESCE(sns.assiduite,1)                                           effectif,
    SUM(sne.effectif*COALESCE(sns.assiduite,1))
      OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_effectif,
    AVG(GREATEST(COALESCE(sns.dedoublement, snsetp.dedoublement, csdd.dedoublement,1),1))
      OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_dedoublement

    COALESCE(sep.ouverture, se.ouverture,1)                                          ouverture,
    COALESCE(sep.dedoublement, se.dedoublement, sd.dedoublement,1)                   dedoublement,
    COALESCE(sep.assiduite,1)                                                        assiduite,
    sne.effectif*COALESCE(sep.assiduite,1)                                           effectif,
    SUM(sne.effectif*COALESCE(sep.assiduite,1))
      OVER (PARTITION BY n.noeud_id, sn.scenario_id, ti.id)                          t_effectif
FROM
              scenario_noeud_effectif sne
         JOIN etape                        e ON e.id = sne.etape_id
                                            AND e.histo_destruction IS NULL

         JOIN scenario_noeud           sn ON sn.id = sne.scenario_noeud_id
                                         AND sn.histo_destruction IS NULL
@@ -46,56 +90,20 @@ WITH t AS (

         JOIN type_intervention        ti ON ti.id = vhe.type_intervention_id

    LEFT JOIN scenario_noeud           snetp ON snetp.scenario_id = sn.scenario_id
                                            AND snetp.noeud_id = n.noeud_etape_id
                                            AND snetp.histo_destruction IS NULL

    LEFT JOIN scenario_noeud_seuil    snsetp ON snsetp.scenario_noeud_id = snetp.id
                                            AND snsetp.type_intervention_id = ti.id
    LEFT JOIN seuils_perso            sep ON sep.element_pedagogique_id = n.element_pedagogique_id
                                         AND sep.scenario_id = sn.scenario_id
                                         AND sep.type_intervention_id = ti.id

    LEFT JOIN tbl_chargens_seuils_def   csdd ON csdd.annee_id = n.annee_id
                                            AND csdd.scenario_id = sn.scenario_id
                                            AND csdd.type_intervention_id = ti.id
                                            AND csdd.groupe_type_formation_id = n.groupe_type_formation_id
                                            AND csdd.structure_id = n.structure_etape_id
    LEFT JOIN seuils_perso             se ON se.etape_id = n.element_pedagogique_etape_id
                                         AND sep.scenario_id = sn.scenario_id
                                         AND sep.type_intervention_id = ti.id

    LEFT JOIN scenario_noeud_seuil       sns ON sns.scenario_noeud_id = sn.id
                                            AND sns.type_intervention_id = ti.id
    LEFT JOIN tbl_chargens_seuils_def  sd ON sd.annee_id = n.annee_id
                                         AND sd.scenario_id = sn.scenario_id
                                         AND sd.structure_id = n.structure_etape_id
                                         AND sd.groupe_type_formation_id = n.groupe_type_formation_id
                                         AND sd.type_intervention_id = ti.id
  WHERE
    1=1
    /*@ETAPE_ENS_ID=sne.etape_id*/
)
SELECT
  annee_id,
  noeud_id,
  scenario_id,
  type_heures_id,
  type_intervention_id,

  element_pedagogique_id,
  etape_id,
  etape_ens_id,
  structure_id,
  groupe_type_formation_id,

  ouverture,
  dedoublement,
  assiduite,
  effectif,
  heures heures_ens,
  --t_effectif,t_dedoublement,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    (CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif
  END groupes,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    ((CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif) * heures
  END heures,

  CASE WHEN t_effectif < ouverture THEN 0 ELSE
    ((CEIL(t_effectif / t_dedoublement) * effectif) / t_effectif) * hetd
  END  hetd

FROM
  t
 No newline at end of file
  ) t
 No newline at end of file
+1 −0
Changes for data/ddl_config.php: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ return [
        'includes' => [
            'V_INDIC_DIFF_DOSSIER',
            'V_MEP_INTERVENANT_STRUCTURE',
            'V_CHARGENS_SEUILS_DED_DEF',
        ],
    ],
    'package'           => [
+1 −1
Changes for module/Application/src/Application/Provider/Chargens/NoeudProvider.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@ class NoeudProvider
          csdd.type_intervention_id,
          csdd.dedoublement
        FROM
          V_CHARGENS_SEUILS_DED_DEF csdd
          tbl_chargens csdd
        WHERE
          csdd.noeud_id IN (" . $ids . ")
        ";