diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fdf3395956d9739e842ba8ea39ec6155d1a926e..f9abeaf4363c9e9ec20f4f75b1fa09275ec8c31e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ * Il est possible de rentrer une date de retour sur un contrat après avoir téléversé le contrat sans avoir besoin de recharger la page * Impossibilité de saisir des heures hors établissement (#51483) * Paris 1 : modification de la formule de calcul (#48148) +* Rennes 2 : modification de la formule de calcul (#51135) * Filtrage des types d'intervention pour la saisie de service hors établissement (#51512) diff --git a/data/ddl/package/FORMULE_RENNES2/body.sql b/data/ddl/package/FORMULE_RENNES2/body.sql index 30d193fa6f4461e6f845d59fef94439e29721c7d..96019d3addf3a662fa79ae9236b09614500dc281 100644 --- a/data/ddl/package/FORMULE_RENNES2/body.sql +++ b/data/ddl/package/FORMULE_RENNES2/body.sql @@ -186,12 +186,12 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AA=IF([.$I20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.H20]) + -- AA=IF([.$I20]="Référentiel";0;([.$AN20]+[.$AT20]+[.$AZ20]+[.$BF20])*[.H20]) WHEN 'AA' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE - RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fc; + RETURN (cell('AN',l) + cell('AT',l) + cell('AZ',l) + cell('BF',l)) * vh.taux_fc; END IF; @@ -202,10 +202,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AC=IF([.$I20]="Référentiel";[.$AM20]+[.$AS20]+[.$AY20]+[.$BE20];0) + -- AC=IF([.$I20]="Référentiel";([.$AN20]+[.$AT20]+[.$AZ20]+[.$BF20]);0) WHEN 'AC' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN - RETURN cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l); + RETURN (cell('AN',l) + cell('AT',l) + cell('AZ',l) + cell('BF',l)); ELSE RETURN 0; END IF; @@ -264,7 +264,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AI16=[.AI15]>=[.AH16] + -- AI16=IF([.AI15]>=[.AH16];1;0) WHEN 'AI16' THEN IF cell('AI15') >= cell('AH16') THEN RETURN 1; @@ -274,7 +274,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AJ=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) + -- AJ=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) WHEN 'AJ' THEN IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND vh.structure_is_affectation AND vh.param_1 = 'Oui' THEN IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN @@ -342,7 +342,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AP=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) + -- AP=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) WHEN 'AP' THEN IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND NOT vh.structure_is_affectation AND vh.param_1 = 'Oui' THEN IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN @@ -410,7 +410,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- AV=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$O20]<>"Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) + -- AV=IF(AND([.$E20]="Oui";[.$D20]<>"Oui";[.$O20]<>"Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) WHEN 'AV' THEN IF vh.service_statutaire AND NOT vh.structure_is_exterieur AND vh.param_1 <> 'Oui' THEN IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN @@ -478,7 +478,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS - -- BB=IF(AND([.$E20]="Oui";[.$D20]="Oui");IF(OR([.$AI$16];[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) + -- BB=IF(AND([.$E20]="Oui";[.$D20]="Oui");IF(OR([.$AI$16]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AF20];0);0) WHEN 'BB' THEN IF vh.service_statutaire AND vh.structure_is_exterieur THEN IF cell('AI16') = 1 OR vh.volume_horaire_ref_id IS NULL THEN diff --git a/data/ddl/package/OSE_PARAMETRE/body.sql b/data/ddl/package/OSE_PARAMETRE/body.sql index 8364160fc05f9578e3067d16dc0296a89ae73f1b..9218a01e864e1a23aa56ecc4ff78d1214b165dbe 100644 --- a/data/ddl/package/OSE_PARAMETRE/body.sql +++ b/data/ddl/package/OSE_PARAMETRE/body.sql @@ -9,6 +9,9 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PARAMETRE" AS pourc_s1_pour_annee_civile FLOAT; taux_conges_payes FLOAT; horaire_nocturne VARCHAR2(5); + domaine_fonc_ens_ext NUMERIC; + regle_repart_annee_civ VARCHAR2(50); + taux_remu NUMERIC; @@ -117,6 +120,47 @@ CREATE OR REPLACE PACKAGE BODY "OSE_PARAMETRE" AS + FUNCTION get_domaine_fonc_ens_ext RETURN NUMERIC IS + BEGIN + IF domaine_fonc_ens_ext IS NULL THEN + SELECT to_number(valeur) INTO domaine_fonc_ens_ext FROM parametre WHERE nom = 'domaine_fonctionnel_ens_ext'; + END IF; + + IF domaine_fonc_ens_ext = 0 THEN + RETURN NULL; + ELSE + RETURN domaine_fonc_ens_ext; + END IF; + END; + + + + FUNCTION get_regle_repart_annee_civ RETURN VARCHAR2 IS + BEGIN + IF regle_repart_annee_civ IS NULL THEN + SELECT valeur INTO regle_repart_annee_civ FROM parametre WHERE nom = 'regle_repartition_annee_civile'; + END IF; + + RETURN regle_repart_annee_civ; + END; + + + + FUNCTION get_taux_remu RETURN NUMERIC IS + BEGIN + IF taux_remu IS NULL THEN + SELECT to_number(valeur) INTO taux_remu FROM parametre WHERE nom = 'taux-remu'; + END IF; + + IF taux_remu = 0 THEN + RETURN NULL; + ELSE + RETURN taux_remu; + END IF; + END; + + + PROCEDURE CLEAR_CACHE IS BEGIN annee := NULL; diff --git a/data/ddl/package/OSE_PARAMETRE/definition.sql b/data/ddl/package/OSE_PARAMETRE/definition.sql index 8175d148b24e364cc30ee4163aa94ef6ef9047a9..451f0238efa6c6fb27c57d01ed881613990ec8de 100644 --- a/data/ddl/package/OSE_PARAMETRE/definition.sql +++ b/data/ddl/package/OSE_PARAMETRE/definition.sql @@ -9,6 +9,9 @@ CREATE OR REPLACE PACKAGE "OSE_PARAMETRE" AS FUNCTION get_pourc_s1_annee_civ RETURN FLOAT; FUNCTION get_taux_conges_payes RETURN FLOAT; FUNCTION get_horaire_nocturne RETURN VARCHAR2; + FUNCTION get_domaine_fonc_ens_ext RETURN NUMERIC; + FUNCTION get_regle_repart_annee_civ RETURN VARCHAR2; + FUNCTION get_taux_remu RETURN NUMERIC; PROCEDURE CLEAR_CACHE; diff --git a/data/ddl/package/UNICAEN_TBL/body.sql b/data/ddl/package/UNICAEN_TBL/body.sql index 5d89630027ff67a249f704a9ffe78fb30ed43184..62952fc8eee260532142b6b94ddafa680461ed1a 100644 --- a/data/ddl/package/UNICAEN_TBL/body.sql +++ b/data/ddl/package/UNICAEN_TBL/body.sql @@ -1476,7 +1476,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS 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, + COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, ose_parametre.get_domaine_fonc_ens_ext) 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, COALESCE(mep.heures,0) heures_demandees, @@ -1485,22 +1485,19 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS 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 COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA( + CASE WHEN ose_parametre.get_regle_repart_annee_civ = ''prorata'' THEN COALESCE(mep.heures,0) * 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, - COALESCE(si.taux_remu_id, to_number(p3.valeur)) taux_remu_id, - OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, + COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id, + OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, 1 taux_conges_payes 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 parametre p3 ON p3.nom = ''taux-remu'' 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 @@ -1554,21 +1551,19 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS 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 COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA( + CASE WHEN ose_parametre.get_regle_repart_annee_civ = ''prorata'' THEN COALESCE(mep.heures,0) * 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, - COALESCE(si.taux_remu_id, to_number(p3.valeur)) taux_remu_id, - OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, + COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id, + OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, 1 taux_conges_payes 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 parametre p3 ON p3.nom = ''taux-remu'' 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 @@ -1669,7 +1664,7 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS m.taux_remu_id END, vhm.horaire_debut) taux_horaire, - ose_parametre.get_taux_conges_payes taux_conges_payes + ose_parametre.get_taux_conges_payes+1 taux_conges_payes FROM tbl_mission tm JOIN mission m ON m.id = tm.mission_id @@ -2253,64 +2248,99 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 10 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT - i.annee_id annee_id, - type_volume_horaire_id, - intervenant_id, - heures, - plafond + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + fr.intervenant_id intervenant_id, + fr.heures_compl_fi + fr.heures_compl_fc + fr.heures_compl_fa + fr.heures_compl_referentiel heures FROM - ( - SELECT - intervenant_id, - type_volume_horaire_id, - tranche, - sum(heures) heures, - least(min(plafond_tranche_mission), min(plafond_tranche)) plafond - FROM - ( - SELECT - m.intervenant_id intervenant_id, - vhm.type_volume_horaire_id type_volume_horaire_id, - to_char( vhm.horaire_debut, ''YYYY-mm'' ) tranche, - vhm.heures heures, - ROUND(CASE to_char( vhm.horaire_debut, ''mm'' ) WHEN ''07'' THEN 150 WHEN ''08'' THEN 150 ELSE 67 END / 30 * (m.date_fin - m.date_debut),2) plafond_tranche_mission, - CASE to_char( vhm.horaire_debut, ''mm'' ) WHEN ''07'' THEN 150 WHEN ''08'' THEN 150 ELSE 67 END plafond_tranche - FROM - volume_horaire_mission vhm - JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code = ''REALISE'' - JOIN mission m ON m.id = vhm.mission_id AND m.histo_destruction IS NULL - WHERE - vhm.histo_destruction IS NULL - ) t - GROUP BY - intervenant_id, - type_volume_horaire_id, - tranche - ) t - JOIN intervenant i ON i.id = t.intervenant_id + intervenant i + JOIN statut 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 + ) p + + UNION ALL + + SELECT 2 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + 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 si ON si.id = i.statut_id + ) p + + UNION ALL + + SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(frvh.heures_compl_fi) 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 formule_resultat_vh frvh ON frvh.formule_resultat_id = fr.id + JOIN volume_horaire vh ON vh.id = frvh.volume_horaire_id + JOIN type_intervention ti ON ti.id = vh.type_intervention_id + JOIN statut si ON si.id = i.statut_id WHERE - heures > plafond - AND rownum = 1 + ti.regle_foad = 0 + GROUP BY + fr.type_volume_horaire_id, + i.annee_id, + i.id, + i.statut_id + ) p + + UNION ALL + + SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.service_referentiel + fr.heures_compl_referentiel 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 si ON si.id = i.statut_id ) p UNION ALL SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT - i.annee_id annee_id, - vhm.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - SUM(vhm.heures) heures + i.annee_id annee_id, + vh.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(vh.heures) heures FROM - volume_horaire_mission vhm - JOIN mission m ON m.histo_destruction IS NULL AND m.id = vhm.mission_id - JOIN intervenant i ON i.id = m.intervenant_id + volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN intervenant i ON i.id = s.intervenant_id + JOIN statut si ON si.id = i.statut_id WHERE - vhm.histo_destruction IS NULL + vh.histo_destruction IS NULL + AND i.histo_destruction IS NULL + AND vh.motif_non_paiement_id IS NULL + AND si.code IN (''IMP'') GROUP BY - i.annee_id, vhm.type_volume_horaire_id, i.id + i.annee_id, + vh.type_volume_horaire_id, + i.id, + i.statut_id + HAVING + SUM(vh.heures) >= 0 ) p ) p JOIN intervenant i ON i.id = p.intervenant_id @@ -2500,7 +2530,42 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL FONCTION_REFERENTIEL_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 7 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.id fonction_referentiel_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN fonction_referentiel fr ON fr.id = sr.fonction_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id + + UNION ALL + + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.id fonction_referentiel_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN fonction_referentiel frf ON frf.id = sr.fonction_id + JOIN fonction_referentiel fr ON fr.id = frf.parent_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_referentiel ps ON ps.plafond_id = p.plafond_id AND ps.fonction_referentiel_id = p.fonction_referentiel_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL @@ -2597,7 +2662,23 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL STRUCTURE_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 6 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + s.id structure_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN structure s ON s.id = sr.structure_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, s.id + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_structure ps ON ps.plafond_id = p.plafond_id AND ps.structure_id = p.structure_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL @@ -2691,7 +2772,64 @@ CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + WITH c AS ( + SELECT + vhe.element_pedagogique_id, + vhe.type_intervention_id, + MAX(vhe.heures) heures, + COALESCE( MAX(vhe.groupes), ROUND(SUM(t.groupes),10) ) groupes + + FROM + volume_horaire_ens vhe + JOIN parametre p ON p.nom = ''scenario_charges_services'' + LEFT JOIN tbl_chargens t ON t.element_pedagogique_id = vhe.element_pedagogique_id + AND t.type_intervention_id = vhe.type_intervention_id + AND t.scenario_id = to_number(p.valeur) + GROUP BY + vhe.element_pedagogique_id, + vhe.type_intervention_id + ), s AS ( + SELECT + i.annee_id, + vh.type_volume_horaire_id, + s.intervenant_id, + s.element_pedagogique_id, + vh.type_intervention_id, + SUM(vh.heures) heures + FROM + volume_horaire vh + JOIN service s ON s.id = vh.service_id + AND s.element_pedagogique_id IS NOT NULL + AND s.histo_destruction IS NULL + JOIN intervenant i ON i.id = s.intervenant_id + AND i.histo_destruction IS NULL + WHERE + vh.histo_destruction IS NULL + GROUP BY + i.annee_id, + vh.type_volume_horaire_id, + s.intervenant_id, + s.element_pedagogique_id, + vh.type_intervention_id + ) + SELECT + s.annee_id annee_id, + s.type_volume_horaire_id type_volume_horaire_id, + s.intervenant_id intervenant_id, + s.element_pedagogique_id element_pedagogique_id, + s.type_intervention_id type_intervention_id, + s.heures heures, + COALESCE(c.heures * c.groupes,0) plafond + FROM + s + JOIN type_intervention ti ON ti.id = s.type_intervention_id + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + LEFT JOIN c ON c.element_pedagogique_id = s.element_pedagogique_id + AND c.type_intervention_id = COALESCE(ti.type_intervention_maquette_id,ti.id) + WHERE + s.heures - COALESCE(c.heures * c.groupes,0) > 0 + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_statut ps ON 1 = 0 diff --git a/data/ddl/table/MISSION.php b/data/ddl/table/MISSION.php index 6d5765a690f719c533cfa86df4256b7476ff0cb5..b0fc95eb35d402da372b069e3dd2bef9bdcb8ecd 100644 --- a/data/ddl/table/MISSION.php +++ b/data/ddl/table/MISSION.php @@ -57,18 +57,6 @@ return [ 'position' => 6, 'commentaire' => NULL, ], - 'LIBELLE_MISSION' => [ - 'name' => 'LIBELLE_MISSION', - 'type' => 'string', - 'bdd-type' => 'VARCHAR2', - 'length' => 4000, - 'scale' => NULL, - 'precision' => NULL, - 'nullable' => TRUE, - 'default' => NULL, - 'position' => 19, - 'commentaire' => NULL, - ], 'ETUDIANTS_SUIVIS' => [ 'name' => 'ETUDIANTS_SUIVIS', 'type' => 'string', @@ -189,6 +177,18 @@ return [ 'position' => 2, 'commentaire' => NULL, ], + 'LIBELLE_MISSION' => [ + 'name' => 'LIBELLE_MISSION', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 4000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 19, + 'commentaire' => NULL, + ], 'STRUCTURE_ID' => [ 'name' => 'STRUCTURE_ID', 'type' => 'int', diff --git a/data/ddl/table/STATUT.php b/data/ddl/table/STATUT.php index 749f8de61a5d073e9f431d85c39691d6beb6d14a..1eef3f827fa78a085837f3d860e5fb2988cfa290 100644 --- a/data/ddl/table/STATUT.php +++ b/data/ddl/table/STATUT.php @@ -105,6 +105,30 @@ return [ 'position' => 70, 'commentaire' => NULL, ], + 'CODE_INDEMNITE' => [ + 'name' => 'CODE_INDEMNITE', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 1000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 96, + 'commentaire' => NULL, + ], + 'CODE_INDEMNITE_PRIME' => [ + 'name' => 'CODE_INDEMNITE_PRIME', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 1000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 97, + 'commentaire' => NULL, + ], 'CONSEIL_ACA' => [ 'name' => 'CONSEIL_ACA', 'type' => 'bool', @@ -741,6 +765,30 @@ return [ 'position' => 88, 'commentaire' => NULL, ], + 'MODE_CALCUL' => [ + 'name' => 'MODE_CALCUL', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 1000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 94, + 'commentaire' => NULL, + ], + 'MODE_CALCUL_PRIME' => [ + 'name' => 'MODE_CALCUL_PRIME', + 'type' => 'string', + 'bdd-type' => 'VARCHAR2', + 'length' => 1000, + 'scale' => NULL, + 'precision' => NULL, + 'nullable' => TRUE, + 'default' => NULL, + 'position' => 95, + 'commentaire' => NULL, + ], 'MODE_ENSEIGNEMENT_PREVISIONNEL' => [ 'name' => 'MODE_ENSEIGNEMENT_PREVISIONNEL', 'type' => 'string', @@ -1125,55 +1173,7 @@ return [ 'position' => 4, 'commentaire' => NULL, ], - 'MODE_CALCUL' => [ - 'name' => 'MODE_CALCUL', - 'type' => 'string', - 'bdd-type' => 'VARCHAR2', - 'length' => 1000, - 'scale' => NULL, - 'precision' => NULL, - 'nullable' => TRUE, - 'default' => NULL, - 'position' => 86, - 'commentaire' => NULL, - ], - 'MODE_CALCUL_PRIME' => [ - 'name' => 'MODE_CALCUL_PRIME', - 'type' => 'string', - 'bdd-type' => 'VARCHAR2', - 'length' => 1000, - 'scale' => NULL, - 'precision' => NULL, - 'nullable' => TRUE, - 'default' => NULL, - 'position' => 86, - 'commentaire' => NULL, - ], - 'CODE_INDEMNITE' => [ - 'name' => 'CODE_INDEMNITE', - 'type' => 'string', - 'bdd-type' => 'VARCHAR2', - 'length' => 1000, - 'scale' => NULL, - 'precision' => NULL, - 'nullable' => TRUE, - 'default' => NULL, - 'position' => 86, - 'commentaire' => NULL, - ], - 'CODE_INDEMNITE_PRIME' => [ - 'name' => 'CODE_INDEMNITE_PRIME', - 'type' => 'string', - 'bdd-type' => 'VARCHAR2', - 'length' => 1000, - 'scale' => NULL, - 'precision' => NULL, - 'nullable' => TRUE, - 'default' => NULL, - 'position' => 86, - 'commentaire' => NULL, - ], - 'TYPE_PAIE' => [ + 'TYPE_PAIE' => [ 'name' => 'TYPE_PAIE', 'type' => 'string', 'bdd-type' => 'VARCHAR2', @@ -1182,7 +1182,7 @@ return [ 'precision' => NULL, 'nullable' => TRUE, 'default' => NULL, - 'position' => 86, + 'position' => 98, 'commentaire' => NULL, ], 'TYPE_PAIE_PRIME' => [ @@ -1194,7 +1194,7 @@ return [ 'precision' => NULL, 'nullable' => TRUE, 'default' => NULL, - 'position' => 86, + 'position' => 99, 'commentaire' => NULL, ], ], diff --git a/data/ddl/view/V_TBL_PAIEMENT.sql b/data/ddl/view/V_TBL_PAIEMENT.sql index 5d0666f8649f932a6316df761b9cbf26506cae38..ea7feedb12bb7a8977689e0ea947a50e6a5af51f 100644 --- a/data/ddl/view/V_TBL_PAIEMENT.sql +++ b/data/ddl/view/V_TBL_PAIEMENT.sql @@ -34,7 +34,7 @@ SELECT 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, + COALESCE(mep.domaine_fonctionnel_id, e.domaine_fonctionnel_id, ose_parametre.get_domaine_fonc_ens_ext) 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, COALESCE(mep.heures,0) heures_demandees, @@ -43,22 +43,19 @@ SELECT 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 COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA( + CASE WHEN ose_parametre.get_regle_repart_annee_civ = 'prorata' THEN COALESCE(mep.heures,0) * 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, - COALESCE(si.taux_remu_id, to_number(p3.valeur)) taux_remu_id, - OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, + COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id, + OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(ep.taux_remu_id, si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, 1 taux_conges_payes 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 parametre p3 ON p3.nom = 'taux-remu' 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 @@ -112,21 +109,19 @@ SELECT 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 COALESCE(mep.heures,0) * pea.pourc_exercice_aa ELSE ose_divers.CALC_HEURES_AA( + CASE WHEN ose_parametre.get_regle_repart_annee_civ = 'prorata' THEN COALESCE(mep.heures,0) * 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, - COALESCE(si.taux_remu_id, to_number(p3.valeur)) taux_remu_id, - OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, to_number(p3.valeur)),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, + COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu) taux_remu_id, + OSE_PAIEMENT.GET_TAUX_HORAIRE(COALESCE(si.taux_remu_id, ose_parametre.get_taux_remu),COALESCE(pea.horaire_debut, a.date_debut)) taux_horaire, 1 taux_conges_payes 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 parametre p3 ON p3.nom = 'taux-remu' 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 @@ -157,99 +152,4 @@ FROM 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 -) t - -UNION ALL - -SELECT - t.annee_id, - NULL service_id, - NULL service_referentiel_id, - NULL formule_res_service_id, - NULL formule_res_service_ref_id, - t.mission_id, - t.intervenant_id, - t.structure_id, - mep.id mise_en_paiement_id, - mep.periode_paiement_id periode_paiement_id, - mep.domaine_fonctionnel_id domaine_fonctionnel_id, - t.heures_a_payer, - COUNT(*) OVER(PARTITION BY t.mission_id, t.taux_remu_id, t.taux_horaire) 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, - ROUND(t.heures_aa / t.heures_a_payer,2) pourc_exercice_aa, - 1 - ROUND(t.heures_aa / t.heures_a_payer,2) pourc_exercice_ac, - t.heures_aa, - t.heures_ac, - t.taux_remu_id, - t.taux_horaire, - t.taux_conges_payes -FROM - ( - SELECT - t.annee_id, - t.mission_id, - t.intervenant_id, - t.structure_id, - SUM(t.heures_a_payer) heures_a_payer, - --CASE WHEN t.aa = 1 THEN SUM(t.heures_a_payer) / SUM(t.heures_a_payer) ELSE 0 END pourc_exercice_aa, - -- SUM(t.heures_a_payer) / SUM(CASE WHEN t.aa = 0 THEN t.heures_a_payer ELSE 0 END) pourc_exercice_ac, - SUM(CASE WHEN t.aa = 1 THEN t.heures_a_payer ELSE 0 END) heures_aa, - SUM(CASE WHEN t.aa = 0 THEN t.heures_a_payer ELSE 0 END) heures_ac, - t.taux_remu_id, - t.taux_horaire, - t.taux_conges_payes - FROM - ( - SELECT - tm.annee_id annee_id, - tm.mission_id mission_id, - tm.intervenant_id intervenant_id, - tm.structure_id structure_id, - vhm.heures heures_a_payer, - CASE WHEN to_number(TO_CHAR( vhm.horaire_debut, 'YYYY' )) = tm.annee_id THEN 1 ELSE 0 END aa, - CASE WHEN - TO_CHAR( vhm.horaire_debut, 'HH24:MI' ) >= ose_parametre.get_horaire_nocturne -- horaire nocturne - OR jf.id IS NOT NULL -- jour ferie - OR TO_CHAR(vhm.horaire_debut, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH') = 'DIMANCHE' -- dimanche - THEN - COALESCE(m.taux_remu_majore_id, m.taux_remu_id) - ELSE - m.taux_remu_id - END taux_remu_id, - ose_paiement.get_taux_horaire(CASE WHEN - TO_CHAR( vhm.horaire_debut, 'HH24:MI' ) >= ose_parametre.get_horaire_nocturne -- horaire nocturne - OR jf.id IS NOT NULL -- jour ferie - OR TO_CHAR(vhm.horaire_debut, 'DAY', 'NLS_DATE_LANGUAGE=FRENCH') = 'DIMANCHE' -- dimanche - THEN - COALESCE(m.taux_remu_majore_id, m.taux_remu_id) - ELSE - m.taux_remu_id - END, vhm.horaire_debut) taux_horaire, - - ose_parametre.get_taux_conges_payes+1 taux_conges_payes - FROM - tbl_mission tm - JOIN mission m ON m.id = tm.mission_id - JOIN volume_horaire_mission vhm ON vhm.histo_destruction IS NULL AND vhm.mission_id = tm.mission_id - JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code ='REALISE' - LEFT JOIN validation_vol_horaire_miss vvhm ON vvhm.volume_horaire_mission_id = vhm.id - LEFT JOIN validation v ON v.id = vvhm.validation_id AND v.histo_destruction IS NULL - LEFT JOIN jour_ferie jf ON TO_CHAR( jf.date_jour, 'dd/mm/YYYY' ) = TO_CHAR( vhm.horaire_debut, 'dd/mm/YYYY' ) - WHERE - tm.valide = 1 - /*@INTERVENANT_ID=tm.intervenant_id*/ /*@ANNEE_ID=tm.annee_id*/ - AND (vhm.auto_validation = 1 OR v.id IS NOT NULL) - ORDER BY - vhm.horaire_debut - ) t - GROUP BY - t.annee_id, - t.mission_id, - t.intervenant_id, - t.structure_id, - t.taux_remu_id, - t.taux_horaire, - t.taux_conges_payes - ) t - LEFT JOIN mise_en_paiement mep ON mep.mission_id = t.mission_id AND mep.histo_destruction IS NULL \ No newline at end of file +) t \ No newline at end of file diff --git a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql index 7e3a713bfc0fd9806bbdd95c2ead3a2f85d36265..9eb56b25bd468c92ffe340514f62472fab5952b8 100644 --- a/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql +++ b/data/ddl/view/V_TBL_PLAFOND_INTERVENANT.sql @@ -15,64 +15,99 @@ SELECT CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT 10 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT 1 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT - i.annee_id annee_id, - type_volume_horaire_id, - intervenant_id, - heures, - plafond + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + fr.intervenant_id intervenant_id, + fr.heures_compl_fi + fr.heures_compl_fc + fr.heures_compl_fa + fr.heures_compl_referentiel heures FROM - ( - SELECT - intervenant_id, - type_volume_horaire_id, - tranche, - sum(heures) heures, - least(min(plafond_tranche_mission), min(plafond_tranche)) plafond - FROM - ( - SELECT - m.intervenant_id intervenant_id, - vhm.type_volume_horaire_id type_volume_horaire_id, - to_char( vhm.horaire_debut, 'YYYY-mm' ) tranche, - vhm.heures heures, - ROUND(CASE to_char( vhm.horaire_debut, 'mm' ) WHEN '07' THEN 150 WHEN '08' THEN 150 ELSE 67 END / 30 * (m.date_fin - m.date_debut),2) plafond_tranche_mission, - CASE to_char( vhm.horaire_debut, 'mm' ) WHEN '07' THEN 150 WHEN '08' THEN 150 ELSE 67 END plafond_tranche - FROM - volume_horaire_mission vhm - JOIN type_volume_horaire tvh ON tvh.id = vhm.type_volume_horaire_id AND tvh.code = 'REALISE' - JOIN mission m ON m.id = vhm.mission_id AND m.histo_destruction IS NULL - WHERE - vhm.histo_destruction IS NULL - ) t - GROUP BY - intervenant_id, - type_volume_horaire_id, - tranche - ) t - JOIN intervenant i ON i.id = t.intervenant_id + intervenant i + JOIN statut 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 + ) p + + UNION ALL + + SELECT 2 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + 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 si ON si.id = i.statut_id + ) p + + UNION ALL + + SELECT 4 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(frvh.heures_compl_fi) 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 formule_resultat_vh frvh ON frvh.formule_resultat_id = fr.id + JOIN volume_horaire vh ON vh.id = frvh.volume_horaire_id + JOIN type_intervention ti ON ti.id = vh.type_intervention_id + JOIN statut si ON si.id = i.statut_id WHERE - heures > plafond - AND rownum = 1 + ti.regle_foad = 0 + GROUP BY + fr.type_volume_horaire_id, + i.annee_id, + i.id, + i.statut_id + ) p + + UNION ALL + + SELECT 8 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + fr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.service_referentiel + fr.heures_compl_referentiel 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 si ON si.id = i.statut_id ) p UNION ALL SELECT 9 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( SELECT - i.annee_id annee_id, - vhm.type_volume_horaire_id type_volume_horaire_id, - i.id intervenant_id, - SUM(vhm.heures) heures + i.annee_id annee_id, + vh.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + SUM(vh.heures) heures FROM - volume_horaire_mission vhm - JOIN mission m ON m.histo_destruction IS NULL AND m.id = vhm.mission_id - JOIN intervenant i ON i.id = m.intervenant_id + volume_horaire vh + JOIN service s ON s.id = vh.service_id + JOIN intervenant i ON i.id = s.intervenant_id + JOIN statut si ON si.id = i.statut_id WHERE - vhm.histo_destruction IS NULL + vh.histo_destruction IS NULL + AND i.histo_destruction IS NULL + AND vh.motif_non_paiement_id IS NULL + AND si.code IN ('IMP') GROUP BY - i.annee_id, vhm.type_volume_horaire_id, i.id + i.annee_id, + vh.type_volume_horaire_id, + i.id, + i.statut_id + HAVING + SUM(vh.heures) >= 0 ) p ) p JOIN intervenant i ON i.id = p.intervenant_id diff --git a/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql b/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql index 91e06882d0700d0f31c0e2936e2407255be9a3f9..8e0f9a00e33821a340bbfa925196ffa235a7cb27 100644 --- a/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql +++ b/data/ddl/view/V_TBL_PLAFOND_REFERENTIEL.sql @@ -16,7 +16,42 @@ SELECT CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL FONCTION_REFERENTIEL_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 7 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.id fonction_referentiel_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN fonction_referentiel fr ON fr.id = sr.fonction_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id + + UNION ALL + + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + fr.id fonction_referentiel_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN fonction_referentiel frf ON frf.id = sr.fonction_id + JOIN fonction_referentiel fr ON fr.id = frf.parent_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, fr.id + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_referentiel ps ON ps.plafond_id = p.plafond_id AND ps.fonction_referentiel_id = p.fonction_referentiel_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL diff --git a/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql b/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql index aa66f5f2403c57d34d6bab0f4ee053f26f6a849c..bcc562a00897ec9377914945254482cac0570425 100644 --- a/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql +++ b/data/ddl/view/V_TBL_PLAFOND_STRUCTURE.sql @@ -16,7 +16,23 @@ SELECT CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL STRUCTURE_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 6 PLAFOND_ID, NULL PLAFOND, NULL PLAFOND_ETAT_ID, p.* FROM ( + SELECT + i.annee_id annee_id, + vhr.type_volume_horaire_id type_volume_horaire_id, + i.id intervenant_id, + s.id structure_id, + SUM(vhr.heures) heures + FROM + service_referentiel sr + JOIN intervenant i ON i.id = sr.intervenant_id + JOIN structure s ON s.id = sr.structure_id + JOIN volume_horaire_ref vhr ON vhr.service_referentiel_id = sr.id AND vhr.histo_destruction IS NULL + WHERE + sr.histo_destruction IS NULL + GROUP BY + i.annee_id, vhr.type_volume_horaire_id, i.id, s.id + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_structure ps ON ps.plafond_id = p.plafond_id AND ps.structure_id = p.structure_id AND ps.annee_id = i.annee_id AND ps.histo_destruction IS NULL diff --git a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql index c7cd9ee5463f82f4950af3e307c93186f477e99a..6e2e8171bddb6107e9538adc52579baeb9930901 100644 --- a/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql +++ b/data/ddl/view/V_TBL_PLAFOND_VOLUME_HORAIRE.sql @@ -13,7 +13,64 @@ SELECT CASE WHEN p.heures > COALESCE(p.PLAFOND,ps.heures,0) + COALESCE(pd.heures, 0) + 0.05 THEN 1 ELSE 0 END depassement FROM ( - SELECT NULL PLAFOND_ID,NULL ANNEE_ID,NULL TYPE_VOLUME_HORAIRE_ID,NULL INTERVENANT_ID,NULL ELEMENT_PEDAGOGIQUE_ID,NULL TYPE_INTERVENTION_ID,NULL HEURES,NULL PLAFOND,NULL PLAFOND_ETAT_ID,NULL DEROGATION FROM dual WHERE 0 = 1 + SELECT 5 PLAFOND_ID, NULL PLAFOND_ETAT_ID, p.* FROM ( + WITH c AS ( + SELECT + vhe.element_pedagogique_id, + vhe.type_intervention_id, + MAX(vhe.heures) heures, + COALESCE( MAX(vhe.groupes), ROUND(SUM(t.groupes),10) ) groupes + + FROM + volume_horaire_ens vhe + JOIN parametre p ON p.nom = 'scenario_charges_services' + LEFT JOIN tbl_chargens t ON t.element_pedagogique_id = vhe.element_pedagogique_id + AND t.type_intervention_id = vhe.type_intervention_id + AND t.scenario_id = to_number(p.valeur) + GROUP BY + vhe.element_pedagogique_id, + vhe.type_intervention_id + ), s AS ( + SELECT + i.annee_id, + vh.type_volume_horaire_id, + s.intervenant_id, + s.element_pedagogique_id, + vh.type_intervention_id, + SUM(vh.heures) heures + FROM + volume_horaire vh + JOIN service s ON s.id = vh.service_id + AND s.element_pedagogique_id IS NOT NULL + AND s.histo_destruction IS NULL + JOIN intervenant i ON i.id = s.intervenant_id + AND i.histo_destruction IS NULL + WHERE + vh.histo_destruction IS NULL + GROUP BY + i.annee_id, + vh.type_volume_horaire_id, + s.intervenant_id, + s.element_pedagogique_id, + vh.type_intervention_id + ) + SELECT + s.annee_id annee_id, + s.type_volume_horaire_id type_volume_horaire_id, + s.intervenant_id intervenant_id, + s.element_pedagogique_id element_pedagogique_id, + s.type_intervention_id type_intervention_id, + s.heures heures, + COALESCE(c.heures * c.groupes,0) plafond + FROM + s + JOIN type_intervention ti ON ti.id = s.type_intervention_id + JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id + LEFT JOIN c ON c.element_pedagogique_id = s.element_pedagogique_id + AND c.type_intervention_id = COALESCE(ti.type_intervention_maquette_id,ti.id) + WHERE + s.heures - COALESCE(c.heures * c.groupes,0) > 0 + ) p ) p JOIN intervenant i ON i.id = p.intervenant_id LEFT JOIN plafond_statut ps ON 1 = 0 diff --git a/data/ddl_columns_pos.php b/data/ddl_columns_pos.php index 8334dc41019755bb60d9972b9ce823801eb8f19c..8b4f6ca8347b7fd064b08bdcee4a3a23c6481e31 100644 --- a/data/ddl_columns_pos.php +++ b/data/ddl_columns_pos.php @@ -1335,6 +1335,12 @@ return [ 'MODE_ENSEIGNEMENT_PREVISIONNEL', 'MODE_ENSEIGNEMENT_REALISE', 'PAIEMENT', + 'MODE_CALCUL', + 'MODE_CALCUL_PRIME', + 'CODE_INDEMNITE', + 'CODE_INDEMNITE_PRIME', + 'TYPE_PAIE', + 'TYPE_PAIE_PRIME', ], 'STRUCTURE' => [ 'ID', @@ -2209,6 +2215,7 @@ return [ 'ETUDIANTS_SUIVIS', 'TAUX_REMU_MAJORE_ID', 'HEURES_FORMATION', + 'LIBELLE_MISSION', ], 'MISSION_ETUDIANT' => [ 'MISSION_ID', diff --git a/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml index 1d6219f959723458a113f079f2ff117197a8b570..5cabbf8a3e2b21ebbf761941781bc628cc952ad1 100755 --- a/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml +++ b/module/Paiement/view/paiement/taux-remu/saisir-valeur.phtml @@ -3,5 +3,6 @@ * @var $this \Application\View\Renderer\PhpRenderer */ +echo '<h1 class="page-header">Modification de la valeur du taux</h1>'; echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); echo $this->form($form); \ No newline at end of file diff --git a/module/Paiement/view/paiement/taux-remu/saisir.phtml b/module/Paiement/view/paiement/taux-remu/saisir.phtml index ac28762d2c392f055cf83ceaa86f7de06e74155e..288710e050a0613f1ecc296fd0969447be04b785 100755 --- a/module/Paiement/view/paiement/taux-remu/saisir.phtml +++ b/module/Paiement/view/paiement/taux-remu/saisir.phtml @@ -3,5 +3,6 @@ * @var $this \Application\View\Renderer\PhpRenderer */ +echo '<h1 class="page-header">Saisie du taux</h1>'; echo $this->messenger()->addCurrentMessagesFromFlashMessenger(); echo $this->form($form); diff --git a/module/Referentiel/src/Controller/ServiceReferentielController.php b/module/Referentiel/src/Controller/ServiceReferentielController.php index d1c15c842c0d42936a3be72105d03baeb76867dc..0f85d965ae4aafbd023e65a90f51caf6f4abc836 100755 --- a/module/Referentiel/src/Controller/ServiceReferentielController.php +++ b/module/Referentiel/src/Controller/ServiceReferentielController.php @@ -150,7 +150,7 @@ class ServiceReferentielController extends AbstractController } $hFin = $entity->getVolumeHoraireReferentielListe()->getHeures(); $this->updateTableauxBord($intervenant); - if (!$this->getProcessusPlafond()->endTransaction($service, $typeVolumeHoraire, $hFin < $hDeb)) { + if (!$this->getProcessusPlafond()->endTransaction($entity, $typeVolumeHoraire, $hFin < $hDeb)) { $this->updateTableauxBord($intervenant); } } else {