Loading data/ddl/package/FORMULE_LYON2/body.sql +356 −282 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS decalageLigne NUMERIC DEFAULT 21; decalageLigne NUMERIC DEFAULT 19; /* Stockage des valeurs intermédiaires */ TYPE t_cell IS RECORD ( Loading @@ -16,24 +15,11 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS debugLine NUMERIC; PROCEDURE dbg( val CLOB ) IS BEGIN ose_formule.volumes_horaires.items(debugLine).debug_info := ose_formule.volumes_horaires.items(debugLine).debug_info || val; END; PROCEDURE dbgi( val CLOB ) IS BEGIN ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; END; PROCEDURE dbgDump( val CLOB ) IS BEGIN dbg('<div class="dbg-dump">' || val || '</div>'); END; PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS ligne NUMERIC; BEGIN Loading @@ -50,9 +36,13 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS dbgi( '[calc|' || fncName || '|' || c || '|' || res ); END; FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS val FLOAT; BEGIN IF l = 0 THEN RETURN 0; END IF; IF feuille.exists(c) THEN IF feuille(c).cells.exists(l) THEN IF feuille(c).cells(l).enCalcul THEN Loading Loading @@ -94,7 +84,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS CASE -- Liste des fonctions supportées WHEN fncName = 'total' THEN WHEN fncName = 'somme' THEN val := 0; FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP val := val + COALESCE(cell(c, l),0); Loading Loading @@ -122,431 +112,510 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS END; FUNCTION calcVersion RETURN NUMERIC IS BEGIN RETURN 1; END; FUNCTION isOui( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN LOWER(v) IN ('1','oui','true'); END; FUNCTION isD4DAC10000( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN UPPER(v) IN ('D4DAC10000'); END; FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS vh ose_formule.t_volume_horaire; i ose_formule.t_intervenant; v NUMERIC; val FLOAT; BEGIN v := calcVersion; i := ose_formule.intervenant; IF l > 0 THEN IF l > 0 AND l <> 9999 THEN vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- J=H22*I22 WHEN c = 'J' AND v >= 1 THEN RETURN vh.heures * vh.taux_service_du; -- U=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fi; END IF; -- L=SI($H22="";0;SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'L' AND v >= 1 THEN --SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF vh.structure_is_affectation AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); ELSE -- V=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fa; END IF; -- M=SI(L$52>0;L22/L$52;0) WHEN c = 'M' AND v >= 1 THEN IF cell('L52') > 0 THEN RETURN cell('L', l) / cell('L52'); ELSE -- W=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.H20]) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fc; END IF; -- N=L$53*M22 WHEN c = 'N' AND v >= 1 THEN RETURN cell('L53') * cell('M', l); -- X=IF([.$I20]="Référentiel";[.$BH20];0) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('BH',l); ELSE RETURN 0; END IF; -- O=SI(ET(L$54=0;HC_autorisees="Oui");L22-N22;0) WHEN c = 'O' AND v >= 1 THEN IF cell('L54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('L', l) - cell('N', l); ELSE -- Y=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fi; END IF; -- Q=SI($H22="";0;SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'Q' AND v >= 1 THEN --SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF (NOT vh.structure_is_affectation) AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); ELSE -- Z=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fa; END IF; -- R=SI(Q$52>0;Q22/Q$52;0) WHEN c = 'R' AND v >= 1 THEN IF cell('Q52', l) > 0 THEN RETURN cell('Q', l) / cell('Q52'); ELSE -- AA=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.H20]) WHEN 'AA' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fc; END IF; -- S=Q$53*R22 WHEN c = 'S' AND v >= 1 THEN RETURN cell('Q53') * cell('R', l); -- AB=0 WHEN 'AB' THEN RETURN 0; -- T=SI(ET(Q$54=0;HC_autorisees="Oui");Q22-S22;0) WHEN c = 'T' AND v >= 1 THEN IF cell('Q54', l) = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('Q', l) - cell('S', l); -- AC=IF([.$I20]="Référentiel";[.$BJ20];0) WHEN 'AC' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('BJ',l); ELSE RETURN 0; END IF; -- V=SI($H22="";0;SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'V' AND v >= 1 THEN --SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF vh.taux_fc = 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); -- AE=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AE' THEN RETURN vh.taux_service_du; -- AF=IF(ISERROR([.K20]);1;[.K20]) WHEN 'AF' THEN RETURN vh.taux_service_compl; -- AH=IF(AND([.$A20]<>"D4DAC10000";[.$B20]="Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AH' THEN IF vh.structure_code <> 'D4DAC10000' AND vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- W=SI(V$52>0;V22/V$52;0) WHEN c = 'W' AND v >= 1 THEN IF cell('V52') > 0 THEN RETURN cell('V', l) / cell('V52'); -- AI15=SUM([.AH$1:.AH$1048576]) WHEN 'AI15' THEN RETURN calcFnc('somme','AH'); -- AI16=MIN([.AI15];i_service_du) WHEN 'AI16' THEN RETURN LEAST(cell('AI15'), i.service_du); -- AI17=i_service_du-[.AI16] WHEN 'AI17' THEN RETURN i.service_du - cell('AI16'); -- AI=IF([.AI$15]>0;[.AH20]/[.AI$15];0) WHEN 'AI' THEN IF cell('AI15') > 0 THEN RETURN cell('AH',l) / cell('AI15'); ELSE RETURN 0; END IF; -- X=V$53*W22 WHEN c = 'X' AND v >= 1 THEN RETURN cell('V53') * cell('W', l); -- AJ=[.AI$16]*[.AI20] WHEN 'AJ' THEN RETURN cell('AI16') * cell('AI',l); -- Y=SI(ET(V$54=0;HC_autorisees="Oui");V22-X22;0) WHEN c = 'Y' AND v >= 1 THEN IF cell('V54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('V', l) - cell('X', l); -- AK=IF([.AI$17]=0;([.AH20]-[.AJ20])/[.$AE20];0) WHEN 'AK' THEN IF cell('AI17') = 0 THEN RETURN (cell('AH',l) - cell('AJ',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AA=SI($H22="";0;SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'AA' AND v >= 1 THEN --SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF isD4DAC10000(vh.structure_code) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); -- AL=IF(i_depassement_service_du_sans_hc="Non";[.AK20]*[.$AF20];0) WHEN 'AL' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AK',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AB=SI(AA$52>0;AA22/AA$52;0) WHEN c = 'AB' AND v >= 1 THEN IF cell('AA52') > 0 THEN RETURN cell('AA', l) / cell('AA52'); -- AN=IF(AND([.$A20]<>"D4DAC10000";[.$B20]<>"Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AN' THEN IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AC=AA$53*AB22 WHEN c = 'AC' AND v >= 1 THEN RETURN cell('AA53') * cell('AB', l); -- AO15=SUM([.AN$1:.AN$1048576]) WHEN 'AO15' THEN RETURN calcFnc('somme','AN'); -- AD=SI(ET(AA$54=0;HC_autorisees="Oui");AA22-AC22;0) WHEN c = 'AD' AND v >= 1 THEN IF cell('AA54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AA', l) - cell('AC', l); ELSE RETURN 0; END IF; -- AO16=MIN([.AO15];[.AI17]) WHEN 'AO16' THEN RETURN LEAST(cell('AO15'), cell('AI17')); -- AF=SI($H22="";0;SI(ET($D22="Référentiel");$J22;0)) WHEN c = 'AF' AND v >= 1 THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('J', l); ELSE RETURN 0; END IF; -- AO17=[.AI17]-[.AO16] WHEN 'AO17' THEN RETURN cell('AI17') - cell('AO16'); -- AG=SI(AF$52>0;AF22/AF$52;0) WHEN c = 'AG' AND v >= 1 THEN IF cell('AF52') > 0 THEN RETURN cell('AF', l) / cell('AF52'); -- AO=IF([.AO$15]>0;[.AN20]/[.AO$15];0) WHEN 'AO' THEN IF cell('AO15') > 0 THEN RETURN cell('AN',l) / cell('AO15'); ELSE RETURN 0; END IF; -- AH=AF$53*AG22 WHEN c = 'AH' AND v >= 1 THEN RETURN cell('AF53') * cell('AG', l); -- AP=[.AO$16]*[.AO20] WHEN 'AP' THEN RETURN cell('AO16') * cell('AO',l); -- AI=SI(ET(AF$54=0;HC_autorisees="Oui");AF22-AH22;0) WHEN c = 'AI' AND v >= 1 THEN IF cell('AF54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AF', l) - cell('AH', l); -- AQ=IF([.AO$17]=0;([.AN20]-[.AP20])/[.$AE20];0) WHEN 'AQ' THEN IF cell('AO17') = 0 THEN RETURN (cell('AN',l) - cell('AP',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AK=SI($H22="";0;SI(ET($D22<>"Référentiel";$C22<>"Oui");$J22;0)) WHEN c = 'AK' AND v >= 1 THEN IF vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NULL THEN RETURN cell('J', l); -- AR=IF(i_depassement_service_du_sans_hc="Non";[.AQ20]*[.$AF20];0) WHEN 'AR' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AQ',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AL=SI(AK$52>0;AK22/AK$52;0) WHEN c = 'AL' AND v >= 1 THEN IF cell('AK52') > 0 THEN RETURN cell('AK', l) / cell('AK52'); -- AT=IF(AND([.$A20]<>"D4DAC10000";[.$D20]<>"Oui";[.$H20]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AT' THEN IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_exterieur AND vh.taux_fc = 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AM=AK$53*AL22 WHEN c = 'AM' AND v >= 1 THEN RETURN cell('AK53') * cell('AL', l); -- AU15=SUM([.AT$1:.AT$1048576]) WHEN 'AU15' THEN RETURN calcFnc('somme','AT'); -- AN=SI(ET(AK$54=0;HC_autorisees="Oui");AK22-AM22;0) WHEN c = 'AN' AND v >= 1 THEN IF cell('AK54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AK', l) - cell('AM', l); -- AU16=MIN([.AU15];[.AO17]) WHEN 'AU16' THEN RETURN LEAST(cell('AU15'), cell('AO17')); -- AU17=[.AO17]-[.AU16] WHEN 'AU17' THEN RETURN cell('AO17') - cell('AU16'); -- AU=IF([.AU$15]>0;[.AT20]/[.AU$15];0) WHEN 'AU' THEN IF cell('AU15') > 0 THEN RETURN cell('AT',l) / cell('AU15'); ELSE RETURN 0; END IF; -- AP=($N22+$S22+$AC22+$AM22)*SI(E22="";0;E22) WHEN c = 'AP' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fi; -- AV=[.AU$16]*[.AU20] WHEN 'AV' THEN RETURN cell('AU16') * cell('AU',l); -- AQ=($N22+$S22+$AC22+$AM22)*SI(F22="";0;F22) WHEN c = 'AQ' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fa; -- AW=IF([.AU$17]=0;([.AT20]-[.AV20])/[.$AE20];0) WHEN 'AW' THEN IF cell('AU17') = 0 THEN RETURN (cell('AT',l) - cell('AV',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AR=($N22+$S22+$X22+$AC22+$AM22)*SI(G22="";0;G22) WHEN c = 'AR' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('X', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fc; -- AX=IF(i_depassement_service_du_sans_hc="Non";[.AW20]*[.$AF20];0) WHEN 'AX' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AW',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AS=AH22 WHEN c = 'AS' AND v >= 1 THEN RETURN cell('AH', l); -- AZ=IF(AND([.$A20]="D4DAC10000";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AZ' THEN IF vh.structure_code = 'D4DAC10000' AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AT=($O22+$T22+$AD22+$AN22)*SI(E22="";0;E22) WHEN c = 'AT' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fi; -- BA15=SUM([.AZ$1:.AZ$1048576]) WHEN 'BA15' THEN RETURN calcFnc('somme','AZ'); -- AU=($O22+$T22+$AD22+$AN22)*SI(F22="";0;F22) WHEN c = 'AU' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fa; -- BA16=MIN([.BA15];[.AU17]) WHEN 'BA16' THEN RETURN LEAST(cell('BA15'), cell('AU17')); -- AV=($O22+$T22+$Y22+$AD22+$AN22)*SI(G22="";0;G22) WHEN c = 'AV' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('Y', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fc; -- BA17=[.AU17]-[.BA16] WHEN 'BA17' THEN RETURN cell('AU17') - cell('BA16'); -- AW=0 WHEN c = 'AW' AND v >= 1 THEN -- BA=IF([.BA$15]>0;[.AZ20]/[.BA$15];0) WHEN 'BA' THEN IF cell('BA15') > 0 THEN RETURN cell('AZ',l) / cell('BA15'); ELSE RETURN 0; END IF; -- BB=[.BA$16]*[.BA20] WHEN 'BB' THEN RETURN cell('BA16') * cell('BA',l); -- AX=AI22 WHEN c = 'AX' AND v >= 1 THEN RETURN cell('AI', l); -- BC=IF([.BA$17]=0;([.AZ20]-[.BB20])/[.$AE20];0) WHEN 'BC' THEN IF cell('BA17') = 0 THEN RETURN (cell('AZ',l) - cell('BB',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- L52=SOMME(L22:L51) WHEN c = 'L52' AND v >= 1 THEN RETURN calcFnc('total','L'); -- BD=IF(i_depassement_service_du_sans_hc="Non";[.BC20]*[.$AF20];0) WHEN 'BD' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BC',l) * cell('AF',l); ELSE RETURN 0; END IF; -- L53=MIN(L52;service_du) WHEN c = 'L53' AND v >= 1 THEN RETURN LEAST(cell('L52'), i.service_du); -- BF=IF([.$I20]="Référentiel";[.$N20]*[.$AE20];0) WHEN 'BF' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- L54=service_du-L53 WHEN c = 'L54' AND v >= 1 THEN RETURN i.service_du - cell('L53'); -- BG15=SUM([.BF$1:.BF$1048576]) WHEN 'BG15' THEN RETURN calcFnc('somme','BF'); -- Q52=SOMME(Q22:Q51) WHEN c = 'Q52' AND v >= 1 THEN RETURN calcFnc('total','Q'); -- BG16=MIN([.BG15];[.BA17]) WHEN 'BG16' THEN RETURN LEAST(cell('BG15'), cell('BA17')); -- Q53=MIN(Q52;L54) WHEN c = 'Q53' AND v >= 1 THEN RETURN LEAST(cell('Q52'), cell('L54')); -- BG17=[.BA17]-[.BG16] WHEN 'BG17' THEN RETURN cell('BA17') - cell('BG16'); -- Q54=L54-Q53 WHEN c = 'Q54' AND v >= 1 THEN RETURN cell('L54') - cell('Q53'); -- BG=IF([.BG$15]>0;[.BF20]/[.BG$15];0) WHEN 'BG' THEN IF cell('BG15') > 0 THEN RETURN cell('BF',l) / cell('BG15'); ELSE RETURN 0; END IF; -- V52=SOMME(V22:V51) WHEN c = 'V52' AND v >= 1 THEN RETURN calcFnc('total','V'); -- BH=[.BG$16]*[.BG20] WHEN 'BH' THEN RETURN cell('BG16') * cell('BG',l); -- V53=MIN(V52;Q54) WHEN c = 'V53' AND v >= 1 THEN RETURN LEAST(cell('V52'), cell('Q54')); -- BI=IF([.BG$17]=0;([.BF20]-[.BH20])/[.$AE20];0) WHEN 'BI' THEN IF cell('BG17') = 0 THEN RETURN (cell('BF',l) - cell('BH',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- V54=Q54-V53 WHEN c = 'V54' AND v >= 1 THEN RETURN cell('Q54') - cell('V53'); -- BJ=IF(i_depassement_service_du_sans_hc="Non";[.BI20]*[.$AF20];0) WHEN 'BJ' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BI',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AA52=SOMME(AA22:AA51) WHEN c = 'AA52' AND v >= 1 THEN RETURN calcFnc('total','AA'); -- BL=IF(AND([.$D20]="Oui";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'BL' THEN IF vh.structure_is_exterieur AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AA53=MIN(AA52;V54) WHEN c = 'AA53' AND v >= 1 THEN RETURN LEAST(cell('AA52'), cell('V54')); -- BM15=SUM([.BL$1:.BL$1048576]) WHEN 'BM15' THEN RETURN calcFnc('somme','BL'); -- AA54=V54-AA53 WHEN c = 'AA54' AND v >= 1 THEN RETURN cell('V54') - cell('AA53'); -- BM16=MIN([.BM15];[.BG17]) WHEN 'BM16' THEN RETURN LEAST(cell('BM15'), cell('BG17')); -- AF52=SOMME(AF22:AF51) WHEN c = 'AF52' AND v >= 1 THEN RETURN calcFnc('total','AF'); -- BM17=[.BG17]-[.BM16] WHEN 'BM17' THEN RETURN cell('BG17') - cell('BM16'); -- AF53=MIN(AF52;AA54) WHEN c = 'AF53' AND v >= 1 THEN RETURN LEAST(cell('AF52'), cell('AA54')); -- BM=IF([.BM$15]>0;[.BL20]/[.BM$15];0) WHEN 'BM' THEN IF cell('BM15') > 0 THEN RETURN cell('BL',l) / cell('BM15'); ELSE RETURN 0; END IF; -- AF54=AA54-AF53 WHEN c = 'AF54' AND v >= 1 THEN RETURN cell('AA54') - cell('AF53'); -- BN=[.BM$16]*[.BM20] WHEN 'BN' THEN RETURN cell('BM16') * cell('BM',l); -- AK52=SOMME(AK22:AK51) WHEN c = 'AK52' AND v >= 1 THEN RETURN calcFnc('total','AK'); -- BO=IF([.BM$17]=0;([.BL20]-[.BN20])/[.$AE20];0) WHEN 'BO' THEN IF cell('BM17') = 0 THEN RETURN (cell('BL',l) - cell('BN',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AK53=MIN(AK52;AF54) WHEN c = 'AK53' AND v >= 1 THEN RETURN LEAST(cell('AK52'), cell('AF54')); -- BP=IF(i_depassement_service_du_sans_hc="Non";[.BO20]*[.$AF20];0) WHEN 'BP' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BO',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AK54=AF54-AK53 WHEN c = 'AK54' AND v >= 1 THEN RETURN cell('AF54') - cell('AK53'); ELSE dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!'); raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END CASE; raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END CASE; END; END; Loading @@ -554,17 +623,21 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS BEGIN feuille.delete; IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie; END IF; -- transmission des résultats aux volumes horaires et volumes horaires référentiel FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'AP',l); ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'AQ',l); ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'AR',l); ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'AS',l); ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'AT',l); ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'AU',l); ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'AV',l); ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AW',l); ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AX',l); ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'U',l); ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'V',l); ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'W',l); ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'X',l); ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'Y',l); ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'Z',l); ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'AA',l); ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AB',l); ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AC',l); END LOOP; END; Loading Loading @@ -600,7 +673,8 @@ FUNCTION INTERVENANT_QUERY RETURN CLOB IS FROM V_FORMULE_VOLUME_HORAIRE fvh ORDER BY ordre'; ordre '; END; END FORMULE_LYON2; No newline at end of file Loading
data/ddl/package/FORMULE_LYON2/body.sql +356 −282 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS decalageLigne NUMERIC DEFAULT 21; decalageLigne NUMERIC DEFAULT 19; /* Stockage des valeurs intermédiaires */ TYPE t_cell IS RECORD ( Loading @@ -16,24 +15,11 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS debugLine NUMERIC; PROCEDURE dbg( val CLOB ) IS BEGIN ose_formule.volumes_horaires.items(debugLine).debug_info := ose_formule.volumes_horaires.items(debugLine).debug_info || val; END; PROCEDURE dbgi( val CLOB ) IS BEGIN ose_formule.intervenant.debug_info := ose_formule.intervenant.debug_info || val; END; PROCEDURE dbgDump( val CLOB ) IS BEGIN dbg('<div class="dbg-dump">' || val || '</div>'); END; PROCEDURE dbgCell( c VARCHAR2, l NUMERIC, val FLOAT ) IS ligne NUMERIC; BEGIN Loading @@ -50,9 +36,13 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS dbgi( '[calc|' || fncName || '|' || c || '|' || res ); END; FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 0 ) RETURN FLOAT IS FUNCTION cell( c VARCHAR2, l NUMERIC DEFAULT 9999 ) RETURN FLOAT IS val FLOAT; BEGIN IF l = 0 THEN RETURN 0; END IF; IF feuille.exists(c) THEN IF feuille(c).cells.exists(l) THEN IF feuille(c).cells(l).enCalcul THEN Loading Loading @@ -94,7 +84,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS CASE -- Liste des fonctions supportées WHEN fncName = 'total' THEN WHEN fncName = 'somme' THEN val := 0; FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP val := val + COALESCE(cell(c, l),0); Loading Loading @@ -122,431 +112,510 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS END; FUNCTION calcVersion RETURN NUMERIC IS BEGIN RETURN 1; END; FUNCTION isOui( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN LOWER(v) IN ('1','oui','true'); END; FUNCTION isD4DAC10000( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN UPPER(v) IN ('D4DAC10000'); END; FUNCTION calcCell( c VARCHAR2, l NUMERIC ) RETURN FLOAT IS vh ose_formule.t_volume_horaire; i ose_formule.t_intervenant; v NUMERIC; val FLOAT; BEGIN v := calcVersion; i := ose_formule.intervenant; IF l > 0 THEN IF l > 0 AND l <> 9999 THEN vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- J=H22*I22 WHEN c = 'J' AND v >= 1 THEN RETURN vh.heures * vh.taux_service_du; -- U=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fi; END IF; -- L=SI($H22="";0;SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'L' AND v >= 1 THEN --SI(ET($B22=composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF vh.structure_is_affectation AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); ELSE -- V=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fa; END IF; -- M=SI(L$52>0;L22/L$52;0) WHEN c = 'M' AND v >= 1 THEN IF cell('L52') > 0 THEN RETURN cell('L', l) / cell('L52'); ELSE -- W=IF([.$I20]="Référentiel";0;([.$AJ20]+[.$AP20]+[.$AV20]+[.$BB20]+[.$BN20])*[.H20]) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AJ',l) + cell('AP',l) + cell('AV',l) + cell('BB',l) + cell('BN',l)) * vh.taux_fc; END IF; -- N=L$53*M22 WHEN c = 'N' AND v >= 1 THEN RETURN cell('L53') * cell('M', l); -- X=IF([.$I20]="Référentiel";[.$BH20];0) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('BH',l); ELSE RETURN 0; END IF; -- O=SI(ET(L$54=0;HC_autorisees="Oui");L22-N22;0) WHEN c = 'O' AND v >= 1 THEN IF cell('L54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('L', l) - cell('N', l); ELSE -- Y=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fi; END IF; -- Q=SI($H22="";0;SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'Q' AND v >= 1 THEN --SI(ET($B22<>composante_affectation;$G22<>1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF (NOT vh.structure_is_affectation) AND vh.taux_fc <> 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); ELSE -- Z=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fa; END IF; -- R=SI(Q$52>0;Q22/Q$52;0) WHEN c = 'R' AND v >= 1 THEN IF cell('Q52', l) > 0 THEN RETURN cell('Q', l) / cell('Q52'); ELSE -- AA=IF([.$I20]="Référentiel";0;([.$AL20]+[.$AR20]+[.$AX20]+[.$BD20]+[.$BP20])*[.H20]) WHEN 'AA' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN (cell('AL',l) + cell('AR',l) + cell('AX',l) + cell('BD',l) + cell('BP',l)) * vh.taux_fc; END IF; -- S=Q$53*R22 WHEN c = 'S' AND v >= 1 THEN RETURN cell('Q53') * cell('R', l); -- AB=0 WHEN 'AB' THEN RETURN 0; -- T=SI(ET(Q$54=0;HC_autorisees="Oui");Q22-S22;0) WHEN c = 'T' AND v >= 1 THEN IF cell('Q54', l) = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('Q', l) - cell('S', l); -- AC=IF([.$I20]="Référentiel";[.$BJ20];0) WHEN 'AC' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('BJ',l); ELSE RETURN 0; END IF; -- V=SI($H22="";0;SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'V' AND v >= 1 THEN --SI(ET($G22=1;$B22<>"D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF vh.taux_fc = 1 AND (NOT isD4DAC10000(vh.structure_code)) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); -- AE=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AE' THEN RETURN vh.taux_service_du; -- AF=IF(ISERROR([.K20]);1;[.K20]) WHEN 'AF' THEN RETURN vh.taux_service_compl; -- AH=IF(AND([.$A20]<>"D4DAC10000";[.$B20]="Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AH' THEN IF vh.structure_code <> 'D4DAC10000' AND vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- W=SI(V$52>0;V22/V$52;0) WHEN c = 'W' AND v >= 1 THEN IF cell('V52') > 0 THEN RETURN cell('V', l) / cell('V52'); -- AI15=SUM([.AH$1:.AH$1048576]) WHEN 'AI15' THEN RETURN calcFnc('somme','AH'); -- AI16=MIN([.AI15];i_service_du) WHEN 'AI16' THEN RETURN LEAST(cell('AI15'), i.service_du); -- AI17=i_service_du-[.AI16] WHEN 'AI17' THEN RETURN i.service_du - cell('AI16'); -- AI=IF([.AI$15]>0;[.AH20]/[.AI$15];0) WHEN 'AI' THEN IF cell('AI15') > 0 THEN RETURN cell('AH',l) / cell('AI15'); ELSE RETURN 0; END IF; -- X=V$53*W22 WHEN c = 'X' AND v >= 1 THEN RETURN cell('V53') * cell('W', l); -- AJ=[.AI$16]*[.AI20] WHEN 'AJ' THEN RETURN cell('AI16') * cell('AI',l); -- Y=SI(ET(V$54=0;HC_autorisees="Oui");V22-X22;0) WHEN c = 'Y' AND v >= 1 THEN IF cell('V54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('V', l) - cell('X', l); -- AK=IF([.AI$17]=0;([.AH20]-[.AJ20])/[.$AE20];0) WHEN 'AK' THEN IF cell('AI17') = 0 THEN RETURN (cell('AH',l) - cell('AJ',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AA=SI($H22="";0;SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0)) WHEN c = 'AA' AND v >= 1 THEN --SI(ET($B22="D4DAC10000";$D22<>"Référentiel";$C22="Oui");$J22;0) IF isD4DAC10000(vh.structure_code) AND vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NOT NULL THEN RETURN cell('J', l); -- AL=IF(i_depassement_service_du_sans_hc="Non";[.AK20]*[.$AF20];0) WHEN 'AL' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AK',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AB=SI(AA$52>0;AA22/AA$52;0) WHEN c = 'AB' AND v >= 1 THEN IF cell('AA52') > 0 THEN RETURN cell('AA', l) / cell('AA52'); -- AN=IF(AND([.$A20]<>"D4DAC10000";[.$B20]<>"Oui";[.$D20]<>"Oui";[.$H20]<>1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AN' THEN IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_affectation AND NOT vh.structure_is_exterieur AND vh.taux_fc <> 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AC=AA$53*AB22 WHEN c = 'AC' AND v >= 1 THEN RETURN cell('AA53') * cell('AB', l); -- AO15=SUM([.AN$1:.AN$1048576]) WHEN 'AO15' THEN RETURN calcFnc('somme','AN'); -- AD=SI(ET(AA$54=0;HC_autorisees="Oui");AA22-AC22;0) WHEN c = 'AD' AND v >= 1 THEN IF cell('AA54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AA', l) - cell('AC', l); ELSE RETURN 0; END IF; -- AO16=MIN([.AO15];[.AI17]) WHEN 'AO16' THEN RETURN LEAST(cell('AO15'), cell('AI17')); -- AF=SI($H22="";0;SI(ET($D22="Référentiel");$J22;0)) WHEN c = 'AF' AND v >= 1 THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('J', l); ELSE RETURN 0; END IF; -- AO17=[.AI17]-[.AO16] WHEN 'AO17' THEN RETURN cell('AI17') - cell('AO16'); -- AG=SI(AF$52>0;AF22/AF$52;0) WHEN c = 'AG' AND v >= 1 THEN IF cell('AF52') > 0 THEN RETURN cell('AF', l) / cell('AF52'); -- AO=IF([.AO$15]>0;[.AN20]/[.AO$15];0) WHEN 'AO' THEN IF cell('AO15') > 0 THEN RETURN cell('AN',l) / cell('AO15'); ELSE RETURN 0; END IF; -- AH=AF$53*AG22 WHEN c = 'AH' AND v >= 1 THEN RETURN cell('AF53') * cell('AG', l); -- AP=[.AO$16]*[.AO20] WHEN 'AP' THEN RETURN cell('AO16') * cell('AO',l); -- AI=SI(ET(AF$54=0;HC_autorisees="Oui");AF22-AH22;0) WHEN c = 'AI' AND v >= 1 THEN IF cell('AF54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AF', l) - cell('AH', l); -- AQ=IF([.AO$17]=0;([.AN20]-[.AP20])/[.$AE20];0) WHEN 'AQ' THEN IF cell('AO17') = 0 THEN RETURN (cell('AN',l) - cell('AP',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AK=SI($H22="";0;SI(ET($D22<>"Référentiel";$C22<>"Oui");$J22;0)) WHEN c = 'AK' AND v >= 1 THEN IF vh.volume_horaire_ref_id IS NULL AND vh.structure_code IS NULL THEN RETURN cell('J', l); -- AR=IF(i_depassement_service_du_sans_hc="Non";[.AQ20]*[.$AF20];0) WHEN 'AR' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AQ',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AL=SI(AK$52>0;AK22/AK$52;0) WHEN c = 'AL' AND v >= 1 THEN IF cell('AK52') > 0 THEN RETURN cell('AK', l) / cell('AK52'); -- AT=IF(AND([.$A20]<>"D4DAC10000";[.$D20]<>"Oui";[.$H20]=1;[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AT' THEN IF vh.structure_code <> 'D4DAC10000' AND NOT vh.structure_is_exterieur AND vh.taux_fc = 1 AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AM=AK$53*AL22 WHEN c = 'AM' AND v >= 1 THEN RETURN cell('AK53') * cell('AL', l); -- AU15=SUM([.AT$1:.AT$1048576]) WHEN 'AU15' THEN RETURN calcFnc('somme','AT'); -- AN=SI(ET(AK$54=0;HC_autorisees="Oui");AK22-AM22;0) WHEN c = 'AN' AND v >= 1 THEN IF cell('AK54') = 0 AND NOT i.depassement_service_du_sans_hc THEN RETURN cell('AK', l) - cell('AM', l); -- AU16=MIN([.AU15];[.AO17]) WHEN 'AU16' THEN RETURN LEAST(cell('AU15'), cell('AO17')); -- AU17=[.AO17]-[.AU16] WHEN 'AU17' THEN RETURN cell('AO17') - cell('AU16'); -- AU=IF([.AU$15]>0;[.AT20]/[.AU$15];0) WHEN 'AU' THEN IF cell('AU15') > 0 THEN RETURN cell('AT',l) / cell('AU15'); ELSE RETURN 0; END IF; -- AP=($N22+$S22+$AC22+$AM22)*SI(E22="";0;E22) WHEN c = 'AP' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fi; -- AV=[.AU$16]*[.AU20] WHEN 'AV' THEN RETURN cell('AU16') * cell('AU',l); -- AQ=($N22+$S22+$AC22+$AM22)*SI(F22="";0;F22) WHEN c = 'AQ' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fa; -- AW=IF([.AU$17]=0;([.AT20]-[.AV20])/[.$AE20];0) WHEN 'AW' THEN IF cell('AU17') = 0 THEN RETURN (cell('AT',l) - cell('AV',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AR=($N22+$S22+$X22+$AC22+$AM22)*SI(G22="";0;G22) WHEN c = 'AR' AND v >= 1 THEN RETURN (cell('N', l) + cell('S', l) + cell('X', l) + cell('AC', l) + cell('AM', l)) * vh.taux_fc; -- AX=IF(i_depassement_service_du_sans_hc="Non";[.AW20]*[.$AF20];0) WHEN 'AX' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AW',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AS=AH22 WHEN c = 'AS' AND v >= 1 THEN RETURN cell('AH', l); -- AZ=IF(AND([.$A20]="D4DAC10000";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'AZ' THEN IF vh.structure_code = 'D4DAC10000' AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AT=($O22+$T22+$AD22+$AN22)*SI(E22="";0;E22) WHEN c = 'AT' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fi; -- BA15=SUM([.AZ$1:.AZ$1048576]) WHEN 'BA15' THEN RETURN calcFnc('somme','AZ'); -- AU=($O22+$T22+$AD22+$AN22)*SI(F22="";0;F22) WHEN c = 'AU' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fa; -- BA16=MIN([.BA15];[.AU17]) WHEN 'BA16' THEN RETURN LEAST(cell('BA15'), cell('AU17')); -- AV=($O22+$T22+$Y22+$AD22+$AN22)*SI(G22="";0;G22) WHEN c = 'AV' AND v >= 1 THEN RETURN (cell('O', l) + cell('T', l) + cell('Y', l) + cell('AD', l) + cell('AN', l)) * vh.taux_fc; -- BA17=[.AU17]-[.BA16] WHEN 'BA17' THEN RETURN cell('AU17') - cell('BA16'); -- AW=0 WHEN c = 'AW' AND v >= 1 THEN -- BA=IF([.BA$15]>0;[.AZ20]/[.BA$15];0) WHEN 'BA' THEN IF cell('BA15') > 0 THEN RETURN cell('AZ',l) / cell('BA15'); ELSE RETURN 0; END IF; -- BB=[.BA$16]*[.BA20] WHEN 'BB' THEN RETURN cell('BA16') * cell('BA',l); -- AX=AI22 WHEN c = 'AX' AND v >= 1 THEN RETURN cell('AI', l); -- BC=IF([.BA$17]=0;([.AZ20]-[.BB20])/[.$AE20];0) WHEN 'BC' THEN IF cell('BA17') = 0 THEN RETURN (cell('AZ',l) - cell('BB',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- L52=SOMME(L22:L51) WHEN c = 'L52' AND v >= 1 THEN RETURN calcFnc('total','L'); -- BD=IF(i_depassement_service_du_sans_hc="Non";[.BC20]*[.$AF20];0) WHEN 'BD' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BC',l) * cell('AF',l); ELSE RETURN 0; END IF; -- L53=MIN(L52;service_du) WHEN c = 'L53' AND v >= 1 THEN RETURN LEAST(cell('L52'), i.service_du); -- BF=IF([.$I20]="Référentiel";[.$N20]*[.$AE20];0) WHEN 'BF' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- L54=service_du-L53 WHEN c = 'L54' AND v >= 1 THEN RETURN i.service_du - cell('L53'); -- BG15=SUM([.BF$1:.BF$1048576]) WHEN 'BG15' THEN RETURN calcFnc('somme','BF'); -- Q52=SOMME(Q22:Q51) WHEN c = 'Q52' AND v >= 1 THEN RETURN calcFnc('total','Q'); -- BG16=MIN([.BG15];[.BA17]) WHEN 'BG16' THEN RETURN LEAST(cell('BG15'), cell('BA17')); -- Q53=MIN(Q52;L54) WHEN c = 'Q53' AND v >= 1 THEN RETURN LEAST(cell('Q52'), cell('L54')); -- BG17=[.BA17]-[.BG16] WHEN 'BG17' THEN RETURN cell('BA17') - cell('BG16'); -- Q54=L54-Q53 WHEN c = 'Q54' AND v >= 1 THEN RETURN cell('L54') - cell('Q53'); -- BG=IF([.BG$15]>0;[.BF20]/[.BG$15];0) WHEN 'BG' THEN IF cell('BG15') > 0 THEN RETURN cell('BF',l) / cell('BG15'); ELSE RETURN 0; END IF; -- V52=SOMME(V22:V51) WHEN c = 'V52' AND v >= 1 THEN RETURN calcFnc('total','V'); -- BH=[.BG$16]*[.BG20] WHEN 'BH' THEN RETURN cell('BG16') * cell('BG',l); -- V53=MIN(V52;Q54) WHEN c = 'V53' AND v >= 1 THEN RETURN LEAST(cell('V52'), cell('Q54')); -- BI=IF([.BG$17]=0;([.BF20]-[.BH20])/[.$AE20];0) WHEN 'BI' THEN IF cell('BG17') = 0 THEN RETURN (cell('BF',l) - cell('BH',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- V54=Q54-V53 WHEN c = 'V54' AND v >= 1 THEN RETURN cell('Q54') - cell('V53'); -- BJ=IF(i_depassement_service_du_sans_hc="Non";[.BI20]*[.$AF20];0) WHEN 'BJ' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BI',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AA52=SOMME(AA22:AA51) WHEN c = 'AA52' AND v >= 1 THEN RETURN calcFnc('total','AA'); -- BL=IF(AND([.$D20]="Oui";[.$I20]<>"Référentiel");[.$N20]*[.$AE20];0) WHEN 'BL' THEN IF vh.structure_is_exterieur AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AE',l); ELSE RETURN 0; END IF; -- AA53=MIN(AA52;V54) WHEN c = 'AA53' AND v >= 1 THEN RETURN LEAST(cell('AA52'), cell('V54')); -- BM15=SUM([.BL$1:.BL$1048576]) WHEN 'BM15' THEN RETURN calcFnc('somme','BL'); -- AA54=V54-AA53 WHEN c = 'AA54' AND v >= 1 THEN RETURN cell('V54') - cell('AA53'); -- BM16=MIN([.BM15];[.BG17]) WHEN 'BM16' THEN RETURN LEAST(cell('BM15'), cell('BG17')); -- AF52=SOMME(AF22:AF51) WHEN c = 'AF52' AND v >= 1 THEN RETURN calcFnc('total','AF'); -- BM17=[.BG17]-[.BM16] WHEN 'BM17' THEN RETURN cell('BG17') - cell('BM16'); -- AF53=MIN(AF52;AA54) WHEN c = 'AF53' AND v >= 1 THEN RETURN LEAST(cell('AF52'), cell('AA54')); -- BM=IF([.BM$15]>0;[.BL20]/[.BM$15];0) WHEN 'BM' THEN IF cell('BM15') > 0 THEN RETURN cell('BL',l) / cell('BM15'); ELSE RETURN 0; END IF; -- AF54=AA54-AF53 WHEN c = 'AF54' AND v >= 1 THEN RETURN cell('AA54') - cell('AF53'); -- BN=[.BM$16]*[.BM20] WHEN 'BN' THEN RETURN cell('BM16') * cell('BM',l); -- AK52=SOMME(AK22:AK51) WHEN c = 'AK52' AND v >= 1 THEN RETURN calcFnc('total','AK'); -- BO=IF([.BM$17]=0;([.BL20]-[.BN20])/[.$AE20];0) WHEN 'BO' THEN IF cell('BM17') = 0 THEN RETURN (cell('BL',l) - cell('BN',l)) / cell('AE',l); ELSE RETURN 0; END IF; -- AK53=MIN(AK52;AF54) WHEN c = 'AK53' AND v >= 1 THEN RETURN LEAST(cell('AK52'), cell('AF54')); -- BP=IF(i_depassement_service_du_sans_hc="Non";[.BO20]*[.$AF20];0) WHEN 'BP' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BO',l) * cell('AF',l); ELSE RETURN 0; END IF; -- AK54=AF54-AK53 WHEN c = 'AK54' AND v >= 1 THEN RETURN cell('AF54') - cell('AK53'); ELSE dbms_output.put_line('La colonne c=' || c || ', l=' || l || ' n''existe pas!'); raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END CASE; raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END CASE; END; END; Loading @@ -554,17 +623,21 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_LYON2 AS BEGIN feuille.delete; IF ose_formule.intervenant.depassement_service_du_sans_hc THEN -- HC traitées comme du service ose_formule.intervenant.service_du := ose_formule.intervenant.heures_service_statutaire + ose_formule.intervenant.heures_service_modifie; END IF; -- transmission des résultats aux volumes horaires et volumes horaires référentiel FOR l IN 1 .. ose_formule.volumes_horaires.length LOOP ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'AP',l); ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'AQ',l); ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'AR',l); ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'AS',l); ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'AT',l); ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'AU',l); ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'AV',l); ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AW',l); ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AX',l); ose_formule.volumes_horaires.items(l).service_fi := mainCell('Service FI', 'U',l); ose_formule.volumes_horaires.items(l).service_fa := mainCell('Service FA', 'V',l); ose_formule.volumes_horaires.items(l).service_fc := mainCell('Service FC', 'W',l); ose_formule.volumes_horaires.items(l).service_referentiel := mainCell('Service référentiel', 'X',l); ose_formule.volumes_horaires.items(l).heures_compl_fi := mainCell('Heures compl. FI', 'Y',l); ose_formule.volumes_horaires.items(l).heures_compl_fa := mainCell('Heures compl. FA', 'Z',l); ose_formule.volumes_horaires.items(l).heures_compl_fc := mainCell('Heures compl. FC', 'AA',l); ose_formule.volumes_horaires.items(l).heures_compl_fc_majorees := mainCell('Heures compl. FC Maj.', 'AB',l); ose_formule.volumes_horaires.items(l).heures_compl_referentiel := mainCell('Heures compl. référentiel', 'AC',l); END LOOP; END; Loading Loading @@ -600,7 +673,8 @@ FUNCTION INTERVENANT_QUERY RETURN CLOB IS FROM V_FORMULE_VOLUME_HORAIRE fvh ORDER BY ordre'; ordre '; END; END FORMULE_LYON2; No newline at end of file