Commit a5b8dbc7 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Optimisation des calculs de validation de volumes horaires

(cherry picked from commit 2472b03c)
parent 9f1c2284
Loading
Loading
Loading
Loading
+13 −7
Original line number Diff line number Diff line
CREATE OR REPLACE FORCE VIEW V_VOLUME_HORAIRE_ETAT AS
SELECT
  vh.id volume_horaire_id,
  evh.id etat_volume_horaire_id
  vh.id volume_horaire_id, evh.id etat_volume_horaire_id
FROM
  volume_horaire vh
  LEFT JOIN contrat c ON c.id = vh.contrat_id AND c.histo_destruction IS NULL
  LEFT JOIN validation cv ON cv.id = c.validation_id AND cv.histo_destruction IS NULL
  LEFT JOIN (
    SELECT
      vvh.volume_horaire_id
    FROM
      type_validation tv
      JOIN validation v ON v.type_validation_id = tv.id AND v.histo_destruction IS NULL
      JOIN validation_vol_horaire vvh ON vvh.validation_id = v.id
    WHERE
      tv.code = 'SERVICES_PAR_COMP'
  ) t ON t.volume_horaire_id = vh.id
  JOIN etat_volume_horaire evh ON evh.code = CASE
    WHEN c.date_retour_signe IS NOT NULL THEN 'contrat-signe'
    WHEN cv.id IS NOT NULL THEN 'contrat-edite'
    WHEN vh.auto_validation = 1 OR EXISTS(
      SELECT * FROM validation v JOIN validation_vol_horaire vvh ON vvh.validation_id = v.id
      WHERE vvh.volume_horaire_id = vh.id AND v.histo_destruction IS NULL
    ) THEN 'valide'
    WHEN vh.auto_validation = 1 OR t.volume_horaire_id IS NOT NULL THEN 'valide'
    ELSE 'saisi'
  END
 No newline at end of file
+15 −9
Original line number Diff line number Diff line
CREATE OR REPLACE FORCE VIEW V_VOLUME_HORAIRE_REF_ETAT AS
SELECT
  vh.id volume_horaire_ref_id,
  evh.id etat_volume_horaire_id
  vhr.id volume_horaire_ref_id, evh.id etat_volume_horaire_id
FROM
  volume_horaire_ref vh
  LEFT JOIN contrat c ON c.id = vh.contrat_id AND c.histo_destruction IS NULL
  volume_horaire_ref vhr
  LEFT JOIN contrat c ON c.id = vhr.contrat_id AND c.histo_destruction IS NULL
  LEFT JOIN validation cv ON cv.id = c.validation_id AND cv.histo_destruction IS NULL
  LEFT JOIN (
    SELECT
      vvhr.volume_horaire_ref_id
    FROM
      type_validation tv
      JOIN validation v ON v.type_validation_id = tv.id AND v.histo_destruction IS NULL
      JOIN validation_vol_horaire_ref vvhr ON vvhr.validation_id = v.id
    WHERE
      tv.code = 'REFERENTIEL'
  ) t ON t.volume_horaire_ref_id = vhr.id
  JOIN etat_volume_horaire evh ON evh.code = CASE
    WHEN c.date_retour_signe IS NOT NULL THEN 'contrat-signe'
    WHEN cv.id IS NOT NULL THEN 'contrat-edite'
    WHEN vh.auto_validation = 1 OR EXISTS(
      SELECT * FROM validation v JOIN validation_vol_horaire_ref vvh ON vvh.validation_id = v.id
      WHERE vvh.volume_horaire_ref_id = vh.id AND v.histo_destruction IS NULL
    ) THEN 'valide'
    WHEN vhr.auto_validation = 1 OR t.volume_horaire_ref_id IS NOT NULL THEN 'valide'
    ELSE 'saisi'
  END
 No newline at end of file
+12 −6
Original line number Diff line number Diff line
@@ -5,15 +5,21 @@ select vh.id VOLUME_HORAIRE_ID, evh.id ETAT_VOLUME_HORAIRE_ID
  join etat_volume_horaire evh on evh.code = 'saisi'
  where vh.histo_destruction IS NULL
union all
  select vh.id, evh.id
  select vh.id VOLUME_HORAIRE_ID, evh.id ETAT_VOLUME_HORAIRE_ID
  from volume_horaire vh
  join service s on s.id = vh.service_id and s.histo_destruction IS NULL
  join etat_volume_horaire evh on evh.code = 'valide'
  where vh.histo_destruction IS NULL
  and EXISTS(
    SELECT * FROM validation v JOIN validation_vol_horaire vvh ON vvh.validation_id = v.id
    WHERE vvh.volume_horaire_id = vh.id AND v.histo_destruction IS NULL
  ) OR vh.auto_validation = 1
  LEFT JOIN (
    SELECT DISTINCT
      vvh.volume_horaire_id
    FROM
      type_validation tv
      JOIN validation v ON v.type_validation_id = tv.id AND v.histo_destruction IS NULL
      JOIN validation_vol_horaire vvh ON vvh.validation_id = v.id
    WHERE
      tv.code = 'SERVICES_PAR_COMP'
  ) t ON t.volume_horaire_id = vh.id
  where vh.histo_destruction IS NULL AND (vh.auto_validation = 1 OR t.volume_horaire_id IS NOT NULL)
union all
  select vh.id, evh.id
  from volume_horaire vh
+11 −5
Original line number Diff line number Diff line
@@ -9,11 +9,17 @@ union all
  from volume_horaire_ref vh
  join service_referentiel s on s.id = vh.service_referentiel_id and s.histo_destruction IS NULL
  join etat_volume_horaire evh on evh.code = 'valide'
  where vh.histo_destruction IS NULL
  and vh.auto_validation=1 OR EXISTS(
    SELECT * FROM validation v JOIN validation_vol_horaire_ref vvh ON vvh.validation_id = v.id
    WHERE vvh.volume_horaire_ref_id = vh.id AND v.histo_destruction IS NULL
  )
  LEFT JOIN (
    SELECT DISTINCT
      vvh.volume_horaire_ref_id
    FROM
      type_validation tv
      JOIN validation v ON v.type_validation_id = tv.id AND v.histo_destruction IS NULL
      JOIN validation_vol_horaire_ref vvh ON vvh.validation_id = v.id
    WHERE
      tv.code = 'REFERENTIEL'
  ) t ON t.volume_horaire_ref_id = vh.id
  where vh.histo_destruction IS NULL AND (vh.auto_validation = 1 OR t.volume_horaire_ref_id IS NOT NULL)
union all
  select vh.id VOLUME_HORAIRE_REF_ID, evh.id ETAT_VOLUME_HORAIRE_ID
  from volume_horaire_ref vh