Loading code/Créateur de formule.php +3 −4 Changes for code/Créateur de formule.php: 3 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -82,9 +82,7 @@ switch ($action) { $bdd->exec($def); $bdd->exec($body); echo '<div class="alert alert-success">Package de formule correctement implanté dans la BDD</div>'; affCreateData($fc); } catch (\Exception $e) { } catch (\Exception $e) { ?> <div class="alert alert-danger"> <?php Loading @@ -96,9 +94,10 @@ switch ($action) { </div> <?php } } affCreateData($fc); echo '<h2>Code généré</h2>'; } Util::highlight($def, 'plsql', true, ['show-line-numbers' => true]); Util::highlight($body, 'plsql', true, ['show-line-numbers' => true]); Loading code/test1.php +4 −1 Changes for code/test1.php: 4 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -26,7 +26,10 @@ $f = 'IF([.AJ$15]>0;[.AI20]/[.AJ$15];0)'; //xmlDump($fc->getSheet()->getNode()); $fc->testFormule($f); //$fc->testFormule($f); $c = $fc->getSheet()->getCell('AG16'); var_dump($c->getDeps()); //echo $fc->getSheet(1)->html(); Loading data/ddl/package/FORMULE_RENNES2/body.sql +309 −99 Changes for data/ddl/package/FORMULE_RENNES2/body.sql: 309 added lines, 99 removed lines. Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS decalageLigne NUMERIC DEFAULT 20; 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_RENNES2 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 Loading @@ -94,7 +80,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 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,130 +108,120 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS END; FUNCTION calcVersion RETURN NUMERIC IS BEGIN RETURN 1; END; FUNCTION notInStructs( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN COALESCE(v,' ') NOT IN ('KE8','UP10'); 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 vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- T=SI($H20="Référentiel";0;$AI20*E20) WHEN c = 'T' AND v >= 1 THEN -- T=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.E20]) WHEN 'T' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fi; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fi; END IF; -- U=SI($H20="Référentiel";0;$AI20*F20) WHEN c = 'U' AND v >= 1 THEN -- U=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fa; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fa; END IF; -- V=SI($H20="Référentiel";0;$AI20*G20) WHEN c = 'V' AND v >= 1 THEN -- V=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fc; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fc; END IF; -- W=SI($H20="Référentiel";$AI20;0) WHEN c = 'W' AND v >= 1 THEN -- W=IF([.$H20]="Référentiel";[.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20];0) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AI',l); RETURN cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l); ELSE RETURN 0; END IF; -- X=SI($H20="Référentiel";0;$AN20*E20) WHEN c = 'X' AND v >= 1 THEN -- X=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.E20]) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fi; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fi; END IF; -- Y=SI($H20="Référentiel";0;$AN20*F20) WHEN c = 'Y' AND v >= 1 THEN -- Y=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fa; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fa; END IF; -- Z=SI($H20="Référentiel";0;$AN20*G20) WHEN c = 'Z' AND v >= 1 THEN -- Z=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fc; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fc; END IF; -- AA=0 WHEN c = 'AA' AND v >= 1 THEN WHEN 'AA' THEN RETURN 0; -- AB=SI($H20="Référentiel";$AN20;0) WHEN c = 'AB' AND v >= 1 THEN -- AB=IF([.$H20]="Référentiel";[.$AM20]+[.$AS20]+[.$AY20]+[.$BE20];0) WHEN 'AB' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AN',l); RETURN cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l); ELSE RETURN 0; END IF; -- AD=SI(ESTERREUR(I20);1;I20*K20) WHEN c = 'AD' AND v >= 1 THEN RETURN vh.taux_service_du * vh.ponderation_service_du; -- AD=IF(ISERROR([.I20]);1;[.I20]) WHEN 'AD' THEN RETURN vh.taux_service_du; -- AE=SI(ET($D20="Oui";$H20<>"Référentiel");$M20*$AD20;0) WHEN c = 'AE' AND v >= 1 THEN -- AE=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AE' THEN RETURN vh.taux_service_compl; -- AF=IF(AND([.$D20]="Oui";[.$H20]<>"Référentiel");[.$M20]*[.$AD20];0) WHEN 'AF' THEN IF vh.service_statutaire AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AD',l); ELSE Loading @@ -254,81 +230,307 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS -- AF19=SOMME(AE:AE) WHEN c = 'AF19' AND v >= 1 THEN RETURN calcFnc('total', 'AE'); -- AG15=SUM([.AF$1:.AF$1048576]) WHEN 'AG15' THEN RETURN calcFnc('somme','AF'); -- AG=SI(ET($D20="Oui";OU($H20<>"Référentiel";$AF$19>=64));$M20*$AD20;0) WHEN c = 'AG' AND v >= 1 THEN IF vh.service_statutaire AND (vh.volume_horaire_ref_id IS NULL OR cell('AF19') >= 64) THEN -- AG16=[.AG15]>=[.AF16] WHEN 'AG16' THEN IF cell('AG15') >= cell('AF16') THEN RETURN 1; ELSE RETURN 0; END IF; -- AI=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AI' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND vh.structure_is_affectation AND vh.param_2 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE RETURN 0; END IF; -- AJ15=SUM([.AI$1:.AI$1048576]) WHEN 'AJ15' THEN RETURN calcFnc('somme','AI'); -- AJ16=MIN([.AJ15];i_service_du) WHEN 'AJ16' THEN RETURN LEAST(cell('AJ15'), i.service_du); -- AJ17=i_service_du-[.AJ16] WHEN 'AJ17' THEN RETURN i.service_du - cell('AJ16'); -- AJ=IF([.AJ$15]>0;[.AI20]/[.AJ$15];0) WHEN 'AJ' THEN IF cell('AJ15') > 0 THEN RETURN cell('AI',l) / cell('AJ15'); ELSE RETURN 0; END IF; -- AK=[.AJ$16]*[.AJ20] WHEN 'AK' THEN RETURN cell('AJ16') * cell('AJ',l); -- AL=IF([.AJ$17]=0;([.AI20]-[.AK20])/[.$AD20];0) WHEN 'AL' THEN IF cell('AJ17') = 0 THEN RETURN (cell('AI',l) - cell('AK',l)) / cell('AD',l); ELSE RETURN 0; END IF; -- AM=IF(i_depassement_service_du_sans_hc="Non";[.AL20]*[.$AE20];0) WHEN 'AM' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AL',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AH=SI(AH19+AG20>i_service_du;i_service_du;AH19+AG20) WHEN c = 'AH' AND v >= 1 THEN IF l < 1 THEN -- AO=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AO' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND NOT vh.structure_is_affectation AND vh.param_2 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; IF cell('AH',l-1) + cell('AG',l) > i.service_du THEN RETURN i.service_du; ELSE RETURN cell('AH',l-1) + cell('AG',l); RETURN 0; END IF; -- AI=AH20-AH19 WHEN c = 'AI' AND v >= 1 THEN RETURN cell('AH',l) - cell('AH',l-1); -- AP15=SUM([.AO$1:.AO$1048576]) WHEN 'AP15' THEN RETURN calcFnc('somme','AO'); -- AP16=MIN([.AP15];[.AJ17]) WHEN 'AP16' THEN RETURN LEAST(cell('AP15'), cell('AJ17')); -- AJ19=SOMME(AI:AI) WHEN c = 'AJ19' AND v >= 1 THEN RETURN calcFnc('total', 'AI'); -- AP17=[.AJ17]-[.AP16] WHEN 'AP17' THEN RETURN cell('AJ17') - cell('AP16'); -- AL=SI(AH19+AG20<i_service_du;0;((AH19+AG20)-i_service_du)/AD20) WHEN c = 'AL' AND v >= 1 THEN IF cell('AH',l-1) + cell('AG',l) < i.service_du THEN -- AP=IF([.AP$15]>0;[.AO20]/[.AP$15];0) WHEN 'AP' THEN IF cell('AP15') > 0 THEN RETURN cell('AO',l) / cell('AP15'); ELSE RETURN 0; END IF; -- AQ=[.AP$16]*[.AP20] WHEN 'AQ' THEN RETURN cell('AP16') * cell('AP',l); -- AR=IF([.AP$17]=0;([.AO20]-[.AQ20])/[.$AD20];0) WHEN 'AR' THEN IF cell('AP17') = 0 THEN RETURN (cell('AO',l) - cell('AQ',l)) / cell('AD',l); ELSE RETURN ((cell('AH',l-1)+ cell('AG',l))-i.service_du) / cell('AD',l); RETURN 0; END IF; -- AM=SI(ESTERREUR(J20);1;J20*L20) WHEN c = 'AM' AND v >= 1 THEN RETURN vh.taux_service_compl * vh.ponderation_service_compl; -- AS=IF(i_depassement_service_du_sans_hc="Non";[.AR20]*[.$AE20];0) WHEN 'AS' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AR',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AN=SI(OU($AJ$19<i_service_du;i_depassement_service_du_sans_hc="Oui");0;(AL20+SI(D20<>"Oui";M20;0))*AM20) WHEN c = 'AN' AND v >= 1 THEN IF cell('AJ19') < i.service_du OR i.depassement_service_du_sans_hc THEN -- AU=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$O20]<>"Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AU' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND vh.param_2 <> 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE -- (AL20+SI(D20<>"Oui";M20;0))*AM20 IF NOT vh.service_statutaire THEN RETURN (cell('AL',l) + vh.heures) * cell('AM', l); RETURN 0; END IF; -- AV15=SUM([.AU$1:.AU$1048576]) WHEN 'AV15' THEN RETURN calcFnc('somme','AU'); -- AV16=MIN([.AV15];[.AP17]) WHEN 'AV16' THEN RETURN LEAST(cell('AV15'), cell('AP17')); -- AV17=[.AP17]-[.AV16] WHEN 'AV17' THEN RETURN cell('AP17') - cell('AV16'); -- AV=IF([.AV$15]>0;[.AU20]/[.AV$15];0) WHEN 'AV' THEN IF cell('AV15') > 0 THEN RETURN cell('AU',l) / cell('AV15'); ELSE RETURN 0; END IF; -- AW=[.AV$16]*[.AV20] WHEN 'AW' THEN RETURN cell('AV16') * cell('AV',l); -- AX=IF([.AV$17]=0;([.AU20]-[.AW20])/[.$AD20];0) WHEN 'AX' THEN IF cell('AV17') = 0 THEN RETURN (cell('AU',l) - cell('AW',l)) / cell('AD',l); ELSE RETURN (cell('AL',l) + 0) * cell('AM', l); RETURN 0; END IF; -- AY=IF(i_depassement_service_du_sans_hc="Non";[.AX20]*[.$AE20];0) WHEN 'AY' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AX',l) * cell('AE',l); ELSE RETURN 0; END IF; -- BA=IF(AND([.$D20]="Oui";[.$N20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'BA' THEN IF vh.service_statutaire AND vh.param_1 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE RETURN 0; END IF; -- BB15=SUM([.BA$1:.BA$1048576]) WHEN 'BB15' THEN RETURN calcFnc('somme','BA'); -- BB16=MIN([.BB15];[.AV17]) WHEN 'BB16' THEN RETURN LEAST(cell('BB15'), cell('AV17')); -- BB17=[.AV17]-[.BB16] WHEN 'BB17' THEN RETURN cell('AV17') - cell('BB16'); -- BB=IF([.BB$15]>0;[.BA20]/[.BB$15];0) WHEN 'BB' THEN IF cell('BB15') > 0 THEN RETURN cell('BA',l) / cell('BB15'); ELSE RETURN 0; END IF; -- BC=[.BB$16]*[.BB20] WHEN 'BC' THEN RETURN cell('BB16') * cell('BB',l); -- BD=IF([.BB$17]=0;([.BA20]-[.BC20])/[.$AD20];0) WHEN 'BD' THEN IF cell('BB17') = 0 THEN RETURN (cell('BA',l) - cell('BC',l)) / cell('AD',l); ELSE RETURN 0; END IF; -- BE=IF(i_depassement_service_du_sans_hc="Non";[.BD20]*[.$AE20];0) WHEN 'BE' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BD',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AF16 WHEN 'AF16' THEN RETURN 64; ELSE 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 @@ -336,6 +538,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 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', 'T',l); Loading Loading @@ -374,15 +580,19 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS RETURN ' SELECT fvh.*, NULL param_1, NULL param_2, CASE WHEN fvh.structure_is_exterieur = 1 THEN ''Oui'' ELSE ''Non'' END param_1, CASE WHEN src.id IS NOT NULL THEN ''Oui'' ELSE ''Non'' END param_2, NULL param_3, NULL param_4, NULL param_5 FROM V_FORMULE_VOLUME_HORAIRE fvh LEFT JOIN service s ON s.id = fvh.service_id LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id LEFT JOIN source src ON src.id = ep.source_id AND LOWER(src.code) = ''apogee'' ORDER BY ordre'; ordre '; END; END FORMULE_RENNES2; No newline at end of file data/formules.php +2 −0 Changes for data/formules.php: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ return [ 10 => [ 'LIBELLE' => 'Université Rennes 2', 'PACKAGE_NAME' => 'FORMULE_RENNES2', 'VH_PARAM_1_LIBELLE' => 'Autre établissement', 'VH_PARAM_2_LIBELLE' => 'Maquettes Apogée', ], 11 => [ 'LIBELLE' => 'INSA de Lyon', Loading Loading
code/Créateur de formule.php +3 −4 Changes for code/Créateur de formule.php: 3 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -82,9 +82,7 @@ switch ($action) { $bdd->exec($def); $bdd->exec($body); echo '<div class="alert alert-success">Package de formule correctement implanté dans la BDD</div>'; affCreateData($fc); } catch (\Exception $e) { } catch (\Exception $e) { ?> <div class="alert alert-danger"> <?php Loading @@ -96,9 +94,10 @@ switch ($action) { </div> <?php } } affCreateData($fc); echo '<h2>Code généré</h2>'; } Util::highlight($def, 'plsql', true, ['show-line-numbers' => true]); Util::highlight($body, 'plsql', true, ['show-line-numbers' => true]); Loading
code/test1.php +4 −1 Changes for code/test1.php: 4 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -26,7 +26,10 @@ $f = 'IF([.AJ$15]>0;[.AI20]/[.AJ$15];0)'; //xmlDump($fc->getSheet()->getNode()); $fc->testFormule($f); //$fc->testFormule($f); $c = $fc->getSheet()->getCell('AG16'); var_dump($c->getDeps()); //echo $fc->getSheet(1)->html(); Loading
data/ddl/package/FORMULE_RENNES2/body.sql +309 −99 Changes for data/ddl/package/FORMULE_RENNES2/body.sql: 309 added lines, 99 removed lines. Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS decalageLigne NUMERIC DEFAULT 20; 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_RENNES2 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 Loading @@ -94,7 +80,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 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,130 +108,120 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS END; FUNCTION calcVersion RETURN NUMERIC IS BEGIN RETURN 1; END; FUNCTION notInStructs( v VARCHAR2 DEFAULT NULL ) RETURN BOOLEAN IS BEGIN RETURN COALESCE(v,' ') NOT IN ('KE8','UP10'); 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 vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- T=SI($H20="Référentiel";0;$AI20*E20) WHEN c = 'T' AND v >= 1 THEN -- T=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.E20]) WHEN 'T' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fi; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fi; END IF; -- U=SI($H20="Référentiel";0;$AI20*F20) WHEN c = 'U' AND v >= 1 THEN -- U=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fa; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fa; END IF; -- V=SI($H20="Référentiel";0;$AI20*G20) WHEN c = 'V' AND v >= 1 THEN -- V=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20])*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AI',l) * vh.taux_fc; RETURN (cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l)) * vh.taux_fc; END IF; -- W=SI($H20="Référentiel";$AI20;0) WHEN c = 'W' AND v >= 1 THEN -- W=IF([.$H20]="Référentiel";[.$AK20]+[.$AQ20]+[.$AW20]+[.$BC20];0) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AI',l); RETURN cell('AK',l) + cell('AQ',l) + cell('AW',l) + cell('BC',l); ELSE RETURN 0; END IF; -- X=SI($H20="Référentiel";0;$AN20*E20) WHEN c = 'X' AND v >= 1 THEN -- X=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.E20]) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fi; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fi; END IF; -- Y=SI($H20="Référentiel";0;$AN20*F20) WHEN c = 'Y' AND v >= 1 THEN -- Y=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fa; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fa; END IF; -- Z=SI($H20="Référentiel";0;$AN20*G20) WHEN c = 'Z' AND v >= 1 THEN -- Z=IF([.$H20]="Référentiel";0;([.$AM20]+[.$AS20]+[.$AY20]+[.$BE20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AN',l) * vh.taux_fc; RETURN (cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l)) * vh.taux_fc; END IF; -- AA=0 WHEN c = 'AA' AND v >= 1 THEN WHEN 'AA' THEN RETURN 0; -- AB=SI($H20="Référentiel";$AN20;0) WHEN c = 'AB' AND v >= 1 THEN -- AB=IF([.$H20]="Référentiel";[.$AM20]+[.$AS20]+[.$AY20]+[.$BE20];0) WHEN 'AB' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AN',l); RETURN cell('AM',l) + cell('AS',l) + cell('AY',l) + cell('BE',l); ELSE RETURN 0; END IF; -- AD=SI(ESTERREUR(I20);1;I20*K20) WHEN c = 'AD' AND v >= 1 THEN RETURN vh.taux_service_du * vh.ponderation_service_du; -- AD=IF(ISERROR([.I20]);1;[.I20]) WHEN 'AD' THEN RETURN vh.taux_service_du; -- AE=SI(ET($D20="Oui";$H20<>"Référentiel");$M20*$AD20;0) WHEN c = 'AE' AND v >= 1 THEN -- AE=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AE' THEN RETURN vh.taux_service_compl; -- AF=IF(AND([.$D20]="Oui";[.$H20]<>"Référentiel");[.$M20]*[.$AD20];0) WHEN 'AF' THEN IF vh.service_statutaire AND vh.volume_horaire_ref_id IS NULL THEN RETURN vh.heures * cell('AD',l); ELSE Loading @@ -254,81 +230,307 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS -- AF19=SOMME(AE:AE) WHEN c = 'AF19' AND v >= 1 THEN RETURN calcFnc('total', 'AE'); -- AG15=SUM([.AF$1:.AF$1048576]) WHEN 'AG15' THEN RETURN calcFnc('somme','AF'); -- AG=SI(ET($D20="Oui";OU($H20<>"Référentiel";$AF$19>=64));$M20*$AD20;0) WHEN c = 'AG' AND v >= 1 THEN IF vh.service_statutaire AND (vh.volume_horaire_ref_id IS NULL OR cell('AF19') >= 64) THEN -- AG16=[.AG15]>=[.AF16] WHEN 'AG16' THEN IF cell('AG15') >= cell('AF16') THEN RETURN 1; ELSE RETURN 0; END IF; -- AI=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AI' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND vh.structure_is_affectation AND vh.param_2 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE RETURN 0; END IF; -- AJ15=SUM([.AI$1:.AI$1048576]) WHEN 'AJ15' THEN RETURN calcFnc('somme','AI'); -- AJ16=MIN([.AJ15];i_service_du) WHEN 'AJ16' THEN RETURN LEAST(cell('AJ15'), i.service_du); -- AJ17=i_service_du-[.AJ16] WHEN 'AJ17' THEN RETURN i.service_du - cell('AJ16'); -- AJ=IF([.AJ$15]>0;[.AI20]/[.AJ$15];0) WHEN 'AJ' THEN IF cell('AJ15') > 0 THEN RETURN cell('AI',l) / cell('AJ15'); ELSE RETURN 0; END IF; -- AK=[.AJ$16]*[.AJ20] WHEN 'AK' THEN RETURN cell('AJ16') * cell('AJ',l); -- AL=IF([.AJ$17]=0;([.AI20]-[.AK20])/[.$AD20];0) WHEN 'AL' THEN IF cell('AJ17') = 0 THEN RETURN (cell('AI',l) - cell('AK',l)) / cell('AD',l); ELSE RETURN 0; END IF; -- AM=IF(i_depassement_service_du_sans_hc="Non";[.AL20]*[.$AE20];0) WHEN 'AM' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AL',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AH=SI(AH19+AG20>i_service_du;i_service_du;AH19+AG20) WHEN c = 'AH' AND v >= 1 THEN IF l < 1 THEN -- AO=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]<>i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AO' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND NOT vh.structure_is_affectation AND vh.param_2 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; IF cell('AH',l-1) + cell('AG',l) > i.service_du THEN RETURN i.service_du; ELSE RETURN cell('AH',l-1) + cell('AG',l); RETURN 0; END IF; -- AI=AH20-AH19 WHEN c = 'AI' AND v >= 1 THEN RETURN cell('AH',l) - cell('AH',l-1); -- AP15=SUM([.AO$1:.AO$1048576]) WHEN 'AP15' THEN RETURN calcFnc('somme','AO'); -- AP16=MIN([.AP15];[.AJ17]) WHEN 'AP16' THEN RETURN LEAST(cell('AP15'), cell('AJ17')); -- AJ19=SOMME(AI:AI) WHEN c = 'AJ19' AND v >= 1 THEN RETURN calcFnc('total', 'AI'); -- AP17=[.AJ17]-[.AP16] WHEN 'AP17' THEN RETURN cell('AJ17') - cell('AP16'); -- AL=SI(AH19+AG20<i_service_du;0;((AH19+AG20)-i_service_du)/AD20) WHEN c = 'AL' AND v >= 1 THEN IF cell('AH',l-1) + cell('AG',l) < i.service_du THEN -- AP=IF([.AP$15]>0;[.AO20]/[.AP$15];0) WHEN 'AP' THEN IF cell('AP15') > 0 THEN RETURN cell('AO',l) / cell('AP15'); ELSE RETURN 0; END IF; -- AQ=[.AP$16]*[.AP20] WHEN 'AQ' THEN RETURN cell('AP16') * cell('AP',l); -- AR=IF([.AP$17]=0;([.AO20]-[.AQ20])/[.$AD20];0) WHEN 'AR' THEN IF cell('AP17') = 0 THEN RETURN (cell('AO',l) - cell('AQ',l)) / cell('AD',l); ELSE RETURN ((cell('AH',l-1)+ cell('AG',l))-i.service_du) / cell('AD',l); RETURN 0; END IF; -- AM=SI(ESTERREUR(J20);1;J20*L20) WHEN c = 'AM' AND v >= 1 THEN RETURN vh.taux_service_compl * vh.ponderation_service_compl; -- AS=IF(i_depassement_service_du_sans_hc="Non";[.AR20]*[.$AE20];0) WHEN 'AS' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AR',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AN=SI(OU($AJ$19<i_service_du;i_depassement_service_du_sans_hc="Oui");0;(AL20+SI(D20<>"Oui";M20;0))*AM20) WHEN c = 'AN' AND v >= 1 THEN IF cell('AJ19') < i.service_du OR i.depassement_service_du_sans_hc THEN -- AU=IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$O20]<>"Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'AU' THEN IF vh.service_statutaire AND vh.param_1 <> 'Oui' AND vh.param_2 <> 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE -- (AL20+SI(D20<>"Oui";M20;0))*AM20 IF NOT vh.service_statutaire THEN RETURN (cell('AL',l) + vh.heures) * cell('AM', l); RETURN 0; END IF; -- AV15=SUM([.AU$1:.AU$1048576]) WHEN 'AV15' THEN RETURN calcFnc('somme','AU'); -- AV16=MIN([.AV15];[.AP17]) WHEN 'AV16' THEN RETURN LEAST(cell('AV15'), cell('AP17')); -- AV17=[.AP17]-[.AV16] WHEN 'AV17' THEN RETURN cell('AP17') - cell('AV16'); -- AV=IF([.AV$15]>0;[.AU20]/[.AV$15];0) WHEN 'AV' THEN IF cell('AV15') > 0 THEN RETURN cell('AU',l) / cell('AV15'); ELSE RETURN 0; END IF; -- AW=[.AV$16]*[.AV20] WHEN 'AW' THEN RETURN cell('AV16') * cell('AV',l); -- AX=IF([.AV$17]=0;([.AU20]-[.AW20])/[.$AD20];0) WHEN 'AX' THEN IF cell('AV17') = 0 THEN RETURN (cell('AU',l) - cell('AW',l)) / cell('AD',l); ELSE RETURN (cell('AL',l) + 0) * cell('AM', l); RETURN 0; END IF; -- AY=IF(i_depassement_service_du_sans_hc="Non";[.AX20]*[.$AE20];0) WHEN 'AY' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('AX',l) * cell('AE',l); ELSE RETURN 0; END IF; -- BA=IF(AND([.$D20]="Oui";[.$N20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0) WHEN 'BA' THEN IF vh.service_statutaire AND vh.param_1 = 'Oui' THEN IF cell('AG16') = 1 THEN RETURN vh.heures * cell('AD',l); ELSE RETURN 0; END IF; ELSE RETURN 0; END IF; -- BB15=SUM([.BA$1:.BA$1048576]) WHEN 'BB15' THEN RETURN calcFnc('somme','BA'); -- BB16=MIN([.BB15];[.AV17]) WHEN 'BB16' THEN RETURN LEAST(cell('BB15'), cell('AV17')); -- BB17=[.AV17]-[.BB16] WHEN 'BB17' THEN RETURN cell('AV17') - cell('BB16'); -- BB=IF([.BB$15]>0;[.BA20]/[.BB$15];0) WHEN 'BB' THEN IF cell('BB15') > 0 THEN RETURN cell('BA',l) / cell('BB15'); ELSE RETURN 0; END IF; -- BC=[.BB$16]*[.BB20] WHEN 'BC' THEN RETURN cell('BB16') * cell('BB',l); -- BD=IF([.BB$17]=0;([.BA20]-[.BC20])/[.$AD20];0) WHEN 'BD' THEN IF cell('BB17') = 0 THEN RETURN (cell('BA',l) - cell('BC',l)) / cell('AD',l); ELSE RETURN 0; END IF; -- BE=IF(i_depassement_service_du_sans_hc="Non";[.BD20]*[.$AE20];0) WHEN 'BE' THEN IF NOT i.depassement_service_du_sans_hc THEN RETURN cell('BD',l) * cell('AE',l); ELSE RETURN 0; END IF; -- AF16 WHEN 'AF16' THEN RETURN 64; ELSE 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 @@ -336,6 +538,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 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', 'T',l); Loading Loading @@ -374,15 +580,19 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_RENNES2 AS RETURN ' SELECT fvh.*, NULL param_1, NULL param_2, CASE WHEN fvh.structure_is_exterieur = 1 THEN ''Oui'' ELSE ''Non'' END param_1, CASE WHEN src.id IS NOT NULL THEN ''Oui'' ELSE ''Non'' END param_2, NULL param_3, NULL param_4, NULL param_5 FROM V_FORMULE_VOLUME_HORAIRE fvh LEFT JOIN service s ON s.id = fvh.service_id LEFT JOIN element_pedagogique ep ON ep.id = s.element_pedagogique_id LEFT JOIN source src ON src.id = ep.source_id AND LOWER(src.code) = ''apogee'' ORDER BY ordre'; ordre '; END; END FORMULE_RENNES2; No newline at end of file
data/formules.php +2 −0 Changes for data/formules.php: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -43,6 +43,8 @@ return [ 10 => [ 'LIBELLE' => 'Université Rennes 2', 'PACKAGE_NAME' => 'FORMULE_RENNES2', 'VH_PARAM_1_LIBELLE' => 'Autre établissement', 'VH_PARAM_2_LIBELLE' => 'Maquettes Apogée', ], 11 => [ 'LIBELLE' => 'INSA de Lyon', Loading