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

Répartition AA/AC : nouveau paramètre prorata/MEP PAPS

parent 9ffd67dd
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS
          RETURN 1;
        END IF;

        RETURN ROUND(nbjaa / (nbjaa + nbjac), 2);
        RETURN nbjaa / (nbjaa + nbjac);
      END IF;
    END IF;

@@ -74,6 +74,21 @@ CREATE OR REPLACE PACKAGE BODY "OSE_DIVERS" AS



  FUNCTION CALC_HEURES_AA(heures FLOAT, pourc_exercice_aa FLOAT, total_heures FLOAT, cumul_heures FLOAT) RETURN FLOAT IS
  BEGIN
    IF cumul_heures <= total_heures * pourc_exercice_aa THEN
      RETURN heures;
    END IF;

    IF total_heures * pourc_exercice_aa - cumul_heures + heures > 0 THEN
      RETURN total_heures * pourc_exercice_aa - cumul_heures + heures;
    END IF;

    RETURN 0;
  END;



  PROCEDURE CALCULER_TABLEAUX_BORD IS
  BEGIN
    FOR d IN (
+1 −0
Original line number Diff line number Diff line
CREATE OR REPLACE PACKAGE "OSE_DIVERS" AS

  FUNCTION CALC_POURC_AA( periode_id NUMERIC, horaire_debut DATE, horaire_fin DATE, annee_id NUMERIC ) RETURN FLOAT;
  FUNCTION CALC_HEURES_AA(heures FLOAT, pourc_exercice_aa FLOAT, total_heures FLOAT, cumul_heures FLOAT) RETURN FLOAT;

  PROCEDURE CALCULER_TABLEAUX_BORD;
  PROCEDURE CALCUL_FEUILLE_DE_ROUTE( INTERVENANT_ID NUMERIC );
+56 −12
Original line number Diff line number Diff line
@@ -1172,27 +1172,57 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  viewQuery CLOB;
  BEGIN
    viewQuery := 'SELECT
          annee_id,
          service_id,
          service_referentiel_id,
          formule_res_service_id,
          formule_res_service_ref_id,
          intervenant_id,
          structure_id,
          mise_en_paiement_id,
          periode_paiement_id,
          domaine_fonctionnel_id,
          heures_a_payer,
          heures_a_payer_pond,
          heures_demandees,
          heures_payees,
          ROUND(pourc_exercice_aa,2)            pourc_exercice_aa,
          1 - ROUND(pourc_exercice_aa,2)        pourc_exercice_ac,
          ROUND(heures_aa,2)                    heures_aa,
          heures_demandees - ROUND(heures_aa,2) heures_ac
        FROM
        (
        SELECT
          i.annee_id                                  annee_id,
          frs.service_id                              service_id,
          null                                        service_referentiel_id,
          NULL                                        service_referentiel_id,
          frs.id                                      formule_res_service_id,
          null                                        formule_res_service_ref_id,
          NULL                                        formule_res_service_ref_id,
          i.id                                        intervenant_id,
          COALESCE( ep.structure_id, i.structure_id ) structure_id,
          mep.id                                      mise_en_paiement_id,
          mep.periode_paiement_id                     periode_paiement_id,
          COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, to_number(p.valeur)) domaine_fonctionnel_id,
          frs.heures_compl_fi + frs.heures_compl_fc + frs.heures_compl_fa + frs.heures_compl_fc_majorees heures_a_payer,
          count(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
          NVL(mep.heures,0)                           heures_demandees,
          COUNT(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
          COALESCE(mep.heures,0)                      heures_demandees,
          CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees,
          pea.pourc_exercice_aa                       pourc_exercice_aa,
          1 - pea.pourc_exercice_aa                   pourc_exercice_ac
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
          CASE WHEN p2.valeur = ''prorata'' THEN mep.heures * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
            COALESCE(mep.heures,0), -- heures
            pea.pourc_exercice_aa, -- pourc_exercice_aa
            SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
            SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
          ) END heures_aa
        FROM
                    formule_resultat_service        frs
               JOIN type_volume_horaire             tvh ON tvh.code = ''REALISE''
               JOIN etat_volume_horaire             evh ON evh.code = ''valide''
               JOIN parametre                         p ON p.nom = ''domaine_fonctionnel_ens_ext''
               JOIN parametre                        p2 ON p2.nom = ''regle_repartition_annee_civile''
               JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                       AND fr.type_volume_horaire_id = tvh.id
                                                       AND fr.etat_volume_horaire_id = evh.id
@@ -1226,9 +1256,9 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS

        SELECT
          i.annee_id                                  annee_id,
          null                                        service_id,
          NULL                                        service_id,
          frs.service_referentiel_id                  service_referentiel_id,
          null                                        formule_res_service_id,
          NULL                                        formule_res_service_id,
          frs.id                                      formule_res_service_ref_id,
          i.id                                        intervenant_id,
          sr.structure_id                             structure_id,
@@ -1236,15 +1266,24 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
          mep.periode_paiement_id                     periode_paiement_id,
          COALESCE(mep.domaine_fonctionnel_id, fncr.domaine_fonctionnel_id) domaine_fonctionnel_id,
          frs.heures_compl_referentiel                heures_a_payer,
          count(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
          NVL(mep.heures,0)                           heures_demandees,
          COUNT(*) OVER(PARTITION BY frs.id)          heures_a_payer_pond,
          COALESCE(mep.heures,0)                           heures_demandees,
          CASE WHEN mep.periode_paiement_id IS NULL THEN 0 ELSE mep.heures END heures_payees,
          pea.pourc_exercice_aa                       pourc_exercice_aa,
          1 - pea.pourc_exercice_aa                   pourc_exercice_ac
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id)  total_heures,
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id) * pea.pourc_exercice_aa  total_heures_aa,
          SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) cumul_heures,
          CASE WHEN p2.valeur = ''prorata'' THEN mep.heures * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA(
            COALESCE(mep.heures,0), -- heures
            pea.pourc_exercice_aa, -- pourc_exercice_aa
            SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id), -- total_heures
            SUM(COALESCE(mep.heures,0)) OVER (partition BY frs.id ORDER BY mep.id) -- cumul_heures
          ) END heures_aa
        FROM
                    formule_resultat_service_ref    frs
               JOIN type_volume_horaire             tvh ON tvh.code = ''REALISE''
               JOIN etat_volume_horaire             evh ON evh.code = ''valide''
               JOIN parametre                        p2 ON p2.nom = ''regle_repartition_annee_civile''
               JOIN formule_resultat                 fr ON fr.id = frs.formule_resultat_id
                                                       AND fr.type_volume_horaire_id = tvh.id
                                                       AND fr.etat_volume_horaire_id = evh.id
@@ -1271,7 +1310,8 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
                 ) pea ON pea.formule_resultat_id = fr.id AND pea.service_referentiel_id = sr.id
               JOIN fonction_referentiel           fncr ON fncr.id = sr.fonction_id
          LEFT JOIN mise_en_paiement                mep ON mep.formule_res_service_ref_id = frs.id
                                                       AND mep.histo_destruction IS NULL';
                                                       AND mep.histo_destruction IS NULL
        ) t';

    IF param IS NULL THEN
      filter := '1=1';
@@ -1300,6 +1340,8 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
        AND t.HEURES_PAYEES                          = v.HEURES_PAYEES
        AND t.POURC_EXERCICE_AA                      = v.POURC_EXERCICE_AA
        AND t.POURC_EXERCICE_AC                      = v.POURC_EXERCICE_AC
        AND t.HEURES_AA                              = v.HEURES_AA
        AND t.HEURES_AC                              = v.HEURES_AC
      THEN -1 ELSE t.ID END ID,
      v.ANNEE_ID,
      v.SERVICE_ID,
@@ -1316,7 +1358,9 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
      v.HEURES_DEMANDEES,
      v.HEURES_PAYEES,
      v.POURC_EXERCICE_AA,
      v.POURC_EXERCICE_AC
      v.POURC_EXERCICE_AC,
      v.HEURES_AA,
      v.HEURES_AC
    FROM
      (' || QUERY_APPLY_PARAM(viewQuery,param,value) || ') v
      FULL JOIN TBL_PAIEMENT t ON
+24 −0
Original line number Diff line number Diff line
@@ -57,6 +57,30 @@ return [
            'position'    => 6,
            'commentaire' => NULL,
        ],
        'HEURES_AA'                  => [
            'name'        => 'HEURES_AA',
            'type'        => 'float',
            'bdd-type'    => 'FLOAT',
            'length'      => 0,
            'scale'       => NULL,
            'precision'   => 126,
            'nullable'    => FALSE,
            'default'     => '0',
            'position'    => 18,
            'commentaire' => NULL,
        ],
        'HEURES_AC'                  => [
            'name'        => 'HEURES_AC',
            'type'        => 'float',
            'bdd-type'    => 'FLOAT',
            'length'      => 0,
            'scale'       => NULL,
            'precision'   => 126,
            'nullable'    => FALSE,
            'default'     => '0',
            'position'    => 19,
            'commentaire' => NULL,
        ],
        'HEURES_A_PAYER'             => [
            'name'        => 'HEURES_A_PAYER',
            'type'        => 'float',
+2 −2
Original line number Diff line number Diff line
@@ -106,8 +106,8 @@ SELECT
                                df.libelle                                                          domaine_fonctionnel_libelle,
                                CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END        hetd,
                                CASE WHEN th.code = 'fc_majorees' THEN mep.heures ELSE 0 END        fc_majorees,
                                mep.heures * mis.pourc_exercice_aa                                  exercice_aa,
                                mep.heures * mis.pourc_exercice_ac                                  exercice_ac,
                                mis.heures_aa                                                       exercice_aa,
                                mis.heures_ac                                                       exercice_ac,
                             --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 4 / 10                                                 exercice_aa,
                             --CASE WHEN th.code = 'fc_majorees' THEN 0 ELSE mep.heures END * 6 / 10                                                 exercice_ac,
                                OSE_FORMULE.GET_TAUX_HORAIRE_HETD( NVL(mep.date_mise_en_paiement,SYSDATE) )      taux_horaire
Loading