Loading CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ * Budget/Liquidation : afficher le nombre de HETD uniquement des HCO et non les HETD des HCO + Heures de service * Notes : Afficher le bon utilisateur pour la validation de service (#45413). * Forcer l'activiation de l'étape pièces justificatives même si il n'y a pas de service prévisionnel de renseigné. * Choix du bon modèle de contrat dans le cas de plusieurs modèles de contrat (par structure et/ou par statut) (#45520) # OSE 18.2 (15/06/2022) Loading code/Créateur de formule.php→code/Formulator.php +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ switch ($action) { if (str_starts_with($msg, 'ORA-24344')) { $msg = 'ERREUR : Le package ne compile pas'; } echo $msg ?> echo nl2br($msg) ?> </div> <?php } Loading Loading @@ -152,7 +152,7 @@ function affCreateData(\Application\Model\FormuleCalcul $fc) $pad = str_pad('', $kl - strlen($k), ' '); echo "\t'$k'$pad => '$v',\n"; } echo "];"; echo "],"; echo '</pre>'; if (!empty($params)) { Loading code/test1.php +5 −13 Original line number Diff line number Diff line Loading @@ -10,31 +10,23 @@ use UnicaenCode\Util; $file = getcwd() . '/cache/OSE-calculHC-Rennes2-20211101.xlsx'; $file = getcwd() . '/cache/t.xlsx'; $fc = new \Application\Model\FormuleCalcul($file, 'TEST'); $f = 'IF(ISERROR([.J20]);1;[.J20])*IF(AND([.$A20]="ES3";i_structure_code<>"ES3";[.$AE$15]>=12);4/3;1)'; $cell = 'AN20'; $f = 'SUM([.AD$1:.AD$1048576])'; $formule = 'IF(AND([.$E20]="Oui";[.$I20]<>"Référentiel";[.$I20]<>"ETD";[.$G20]=1;OR([.$A20]="I2000";[.$A20]="I2300"));[.$N20]*[.$AE20];0)'; $f = 'IF([.AJ$15]>0;[.AI20]/[.AJ$15];0)'; //$f = 'IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0)'; $fc->testFormule($cell, $formule); //xmlDump($fc->getSheet()->getCell($cell)->getNode()); //xmlDump($fc->getSheet()->getNode()); //$fc->testFormule($f); $c = $fc->getSheet()->getCell('AG16'); var_dump($c->getDeps()); //echo $fc->getSheet(1)->html(); //Util::highlight($fc->makePackageBody(), 'plsql', true, ['show-line-numbers' => true]); //xmlDump($fc->getSheet()->getNode()); code/test2.php +9 −23 Original line number Diff line number Diff line <?php use Unicaen\OpenDocument\Calc; /** * @var $this \Application\View\Renderer\PhpRenderer * @var $controller \Laminas\Mvc\Controller\AbstractController Loading @@ -8,29 +10,13 @@ * @var $viewFile string */ $file = getcwd() . '/cache/t.xlsx'; $file = getcwd() . '/cache/Téléchargement/OSE-calculHC-Rennes2-20211101.xlsx'; $sheet = 1; //$file = getcwd() . '/cache/test.ods'; //$sheet = 0; /* $document = new \Unicaen\OpenDocument\Document(); $document->loadFromFile($file); $s = $document->getCalc()->getSheet($sheet); //xmlDump($document->getContent()); $c = $s->getCell('BG15'); $rc = array_keys($s->getRefCells($c)); var_dump($rc); //echo $s->html(); */ $formule = '[.AG15]>=[.AF16]'; $fc = new \Application\Model\FormuleCalcul($file, 'TEST'); $d = $fc->getFormuleCells(); foreach ($formules as $f) { $formule = new \Unicaen\OpenDocument\Calc\Formule($f); $formule->analyse(); $formule->displayTerms(); $formule->displayExprs(); echo '<table class="table table-bordered">'; foreach ($d as $name => $cell) { echo '<tr><th>' . $name . '</th><td>' . htmlentities($cell->getFormule() ?? $cell->getValue()) . '</td></tr>'; } echo '</table>'; data/ddl/package/FORMULE_COTE_AZUR/body.sql +108 −83 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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_COTE_AZUR 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_COTE_AZUR 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_COTE_AZUR 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,38 +112,22 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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 IF l > 0 AND l <> 9999 THEN vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- T=SI($H20="Référentiel";0;$AG20*E20) WHEN c = 'T' AND v >= 1 THEN -- T=IF([.$H20]="Référentiel";0;[.$AG20]*[.E20]) WHEN 'T' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -162,8 +136,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- U=SI($H20="Référentiel";0;$AG20*F20) WHEN c = 'U' AND v >= 1 THEN -- U=IF([.$H20]="Référentiel";0;[.$AG20]*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -172,8 +146,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- V=SI($H20="Référentiel";0;$AG20*G20) WHEN c = 'V' AND v >= 1 THEN -- V=IF([.$H20]="Référentiel";0;[.$AG20]*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -182,8 +156,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- W=SI($H20="Référentiel";$AG20;0) WHEN c = 'W' AND v >= 1 THEN -- W=IF([.$H20]="Référentiel";[.$AG20];0) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AG',l); ELSE Loading @@ -192,60 +166,60 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- X=SI($H20="Référentiel";0;$AK20*E20) WHEN c = 'X' AND v >= 1 THEN -- X=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.E20]) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fi; RETURN (cell('AK',l) + cell('AN',l)) * vh.taux_fi; END IF; -- Y=SI($H20="Référentiel";0;$AK20*F20) WHEN c = 'Y' AND v >= 1 THEN -- Y=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fa; RETURN (cell('AK',l) + cell('AN',l)) * vh.taux_fa; END IF; -- Z=SI($H20="Référentiel";0;$AK20*G20) WHEN c = 'Z' AND v >= 1 THEN -- Z=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fc; RETURN (cell('AK',l) + cell('AN',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";$AK20;0) WHEN c = 'AB' AND v >= 1 THEN -- AB=IF([.$H20]="Référentiel";[.$AK20]+[.$AN20];0) WHEN 'AB' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AK',l); RETURN cell('AK',l) + cell('AN',l); ELSE RETURN 0; END IF; -- AD=SI(ESTERREUR(I20);1;I20) WHEN c = 'AD' AND v >= 1 THEN -- AD=IF(ISERROR([.I20]);1;[.I20]) WHEN 'AD' THEN RETURN vh.taux_service_du; -- AE=SI($D20="Oui";$M20*$AD20;0) WHEN c = 'AE' AND v >= 1 THEN -- AE=IF([.$D20]="Oui";[.$M20]*[.$AD20];0) WHEN 'AE' THEN IF vh.service_statutaire THEN RETURN vh.heures * cell('AD',l); ELSE Loading @@ -254,11 +228,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- AF=SI(AF19+AE20>i_service_du;i_service_du;AF19+AE20) WHEN c = 'AF' AND v >= 1 THEN IF l < 1 THEN RETURN 0; END IF; -- AF=IF([.AF19]+[.AE20]>i_service_du;i_service_du;[.AF19]+[.AE20]) WHEN 'AF' THEN IF cell('AF',l-1) + cell('AE',l) > i.service_du THEN RETURN i.service_du; ELSE Loading @@ -267,53 +238,102 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- AG=AF20-AF19 WHEN c = 'AG' AND v >= 1 THEN -- AG=[.AF20]-[.AF19] WHEN 'AG' THEN RETURN cell('AF',l) - cell('AF',l-1); -- AH19=SOMME(AG:AG) WHEN c = 'AH19' AND v >= 1 THEN RETURN calcFnc('total', 'AG'); -- AH19=SUM([.AG$1:.AG$1048576]) WHEN 'AH19' THEN RETURN calcFnc('somme','AG'); -- AI=SI(AF19+AE20<i_service_du;0;((AF19+AE20)-i_service_du)/AD20) WHEN c = 'AI' AND v >= 1 THEN -- AI=IF([.AF19]+[.AE20]<i_service_du;0;(([.AF19]+[.AE20])-i_service_du)/[.AD20]) WHEN 'AI' THEN IF cell('AF',l-1) + cell('AE',l) < i.service_du THEN RETURN 0; ELSE RETURN (cell('AF',l-1) + cell('AE',l) - i.service_du) / cell('AD',l); RETURN ((cell('AF',l-1) + cell('AE',l)) - i.service_du) / cell('AD',l); END IF; -- AJ=SI(ESTERREUR(J20);1;J20) WHEN c = 'AJ' AND v >= 1 THEN -- AJ=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AJ' THEN RETURN vh.taux_service_compl; -- AK=SI(OU($AH$19<i_service_du;i_depassement_service_du_sans_hc="Oui");0;(AI20+SI(D20<>"Oui";M20;0))*AJ20) WHEN c = 'AK' AND v >= 1 THEN -- AK=IF(OR([.$AH$19]<i_service_du;i_depassement_service_du_sans_hc="Oui");0;[.AI20]*[.AJ20]) WHEN 'AK' THEN IF cell('AH19') < i.service_du OR i.depassement_service_du_sans_hc THEN RETURN 0; ELSE IF NOT vh.service_statutaire THEN RETURN (cell('AI',l) + vh.heures) * cell('AJ',l); RETURN cell('AI',l) * cell('AJ',l); END IF; -- AL17=[.AH19]/5 WHEN 'AL17' THEN RETURN cell('AH19') / 5; -- AL=IF(OR([.$AH$19]<i_service_du;i_depassement_service_du_sans_hc="Oui";[.$D20]="Oui");0;[.M20]*[.AJ20]) WHEN 'AL' THEN IF cell('AH19') < i.service_du OR i.depassement_service_du_sans_hc OR vh.service_statutaire THEN RETURN 0; ELSE RETURN (cell('AI',l) + 0) * cell('AJ',l); RETURN vh.heures * cell('AJ',l); END IF; -- AM17=[.AH19]/5 WHEN 'AM17' THEN RETURN cell('AH19') / 5; -- AM=IF([.AM19]+[.AL20]>[.$AL$17];[.$AL$17];[.AM19]+[.AL20]) WHEN 'AM' THEN IF cell('AM',l-1) + cell('AL',l) > cell('AL17') THEN RETURN cell('AL17'); ELSE RETURN cell('AM',l-1) + cell('AL',l); END IF; -- AN=[.AM20]-[.AM19] WHEN 'AN' THEN RETURN cell('AM',l) - cell('AM',l-1); -- AF19 WHEN 'AF19' THEN RETURN 0; -- AM19 WHEN 'AM19' THEN RETURN 0; 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; END; END CASE; raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END; Loading @@ -321,6 +341,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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 @@ -367,7 +391,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS FROM V_FORMULE_VOLUME_HORAIRE fvh ORDER BY ordre'; ordre '; END; END FORMULE_COTE_AZUR; No newline at end of file Loading
CHANGELOG.md +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ * Budget/Liquidation : afficher le nombre de HETD uniquement des HCO et non les HETD des HCO + Heures de service * Notes : Afficher le bon utilisateur pour la validation de service (#45413). * Forcer l'activiation de l'étape pièces justificatives même si il n'y a pas de service prévisionnel de renseigné. * Choix du bon modèle de contrat dans le cas de plusieurs modèles de contrat (par structure et/ou par statut) (#45520) # OSE 18.2 (15/06/2022) Loading
code/Créateur de formule.php→code/Formulator.php +2 −2 Original line number Diff line number Diff line Loading @@ -90,7 +90,7 @@ switch ($action) { if (str_starts_with($msg, 'ORA-24344')) { $msg = 'ERREUR : Le package ne compile pas'; } echo $msg ?> echo nl2br($msg) ?> </div> <?php } Loading Loading @@ -152,7 +152,7 @@ function affCreateData(\Application\Model\FormuleCalcul $fc) $pad = str_pad('', $kl - strlen($k), ' '); echo "\t'$k'$pad => '$v',\n"; } echo "];"; echo "],"; echo '</pre>'; if (!empty($params)) { Loading
code/test1.php +5 −13 Original line number Diff line number Diff line Loading @@ -10,31 +10,23 @@ use UnicaenCode\Util; $file = getcwd() . '/cache/OSE-calculHC-Rennes2-20211101.xlsx'; $file = getcwd() . '/cache/t.xlsx'; $fc = new \Application\Model\FormuleCalcul($file, 'TEST'); $f = 'IF(ISERROR([.J20]);1;[.J20])*IF(AND([.$A20]="ES3";i_structure_code<>"ES3";[.$AE$15]>=12);4/3;1)'; $cell = 'AN20'; $f = 'SUM([.AD$1:.AD$1048576])'; $formule = 'IF(AND([.$E20]="Oui";[.$I20]<>"Référentiel";[.$I20]<>"ETD";[.$G20]=1;OR([.$A20]="I2000";[.$A20]="I2300"));[.$N20]*[.$AE20];0)'; $f = 'IF([.AJ$15]>0;[.AI20]/[.AJ$15];0)'; //$f = 'IF(AND([.$D20]="Oui";[.$N20]<>"Oui";[.$A20]=i_structure_code;[.$O20]="Oui");IF([.$AG$16];[.$M20]*[.$AD20];0);0)'; $fc->testFormule($cell, $formule); //xmlDump($fc->getSheet()->getCell($cell)->getNode()); //xmlDump($fc->getSheet()->getNode()); //$fc->testFormule($f); $c = $fc->getSheet()->getCell('AG16'); var_dump($c->getDeps()); //echo $fc->getSheet(1)->html(); //Util::highlight($fc->makePackageBody(), 'plsql', true, ['show-line-numbers' => true]); //xmlDump($fc->getSheet()->getNode());
code/test2.php +9 −23 Original line number Diff line number Diff line <?php use Unicaen\OpenDocument\Calc; /** * @var $this \Application\View\Renderer\PhpRenderer * @var $controller \Laminas\Mvc\Controller\AbstractController Loading @@ -8,29 +10,13 @@ * @var $viewFile string */ $file = getcwd() . '/cache/t.xlsx'; $file = getcwd() . '/cache/Téléchargement/OSE-calculHC-Rennes2-20211101.xlsx'; $sheet = 1; //$file = getcwd() . '/cache/test.ods'; //$sheet = 0; /* $document = new \Unicaen\OpenDocument\Document(); $document->loadFromFile($file); $s = $document->getCalc()->getSheet($sheet); //xmlDump($document->getContent()); $c = $s->getCell('BG15'); $rc = array_keys($s->getRefCells($c)); var_dump($rc); //echo $s->html(); */ $formule = '[.AG15]>=[.AF16]'; $fc = new \Application\Model\FormuleCalcul($file, 'TEST'); $d = $fc->getFormuleCells(); foreach ($formules as $f) { $formule = new \Unicaen\OpenDocument\Calc\Formule($f); $formule->analyse(); $formule->displayTerms(); $formule->displayExprs(); echo '<table class="table table-bordered">'; foreach ($d as $name => $cell) { echo '<tr><th>' . $name . '</th><td>' . htmlentities($cell->getFormule() ?? $cell->getValue()) . '</td></tr>'; } echo '</table>';
data/ddl/package/FORMULE_COTE_AZUR/body.sql +108 −83 Original line number Diff line number Diff line CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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_COTE_AZUR 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_COTE_AZUR 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_COTE_AZUR 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,38 +112,22 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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 IF l > 0 AND l <> 9999 THEN vh := ose_formule.volumes_horaires.items(l); END IF; CASE CASE c -- T=SI($H20="Référentiel";0;$AG20*E20) WHEN c = 'T' AND v >= 1 THEN -- T=IF([.$H20]="Référentiel";0;[.$AG20]*[.E20]) WHEN 'T' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -162,8 +136,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- U=SI($H20="Référentiel";0;$AG20*F20) WHEN c = 'U' AND v >= 1 THEN -- U=IF([.$H20]="Référentiel";0;[.$AG20]*[.F20]) WHEN 'U' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -172,8 +146,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- V=SI($H20="Référentiel";0;$AG20*G20) WHEN c = 'V' AND v >= 1 THEN -- V=IF([.$H20]="Référentiel";0;[.$AG20]*[.G20]) WHEN 'V' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE Loading @@ -182,8 +156,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- W=SI($H20="Référentiel";$AG20;0) WHEN c = 'W' AND v >= 1 THEN -- W=IF([.$H20]="Référentiel";[.$AG20];0) WHEN 'W' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AG',l); ELSE Loading @@ -192,60 +166,60 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- X=SI($H20="Référentiel";0;$AK20*E20) WHEN c = 'X' AND v >= 1 THEN -- X=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.E20]) WHEN 'X' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fi; RETURN (cell('AK',l) + cell('AN',l)) * vh.taux_fi; END IF; -- Y=SI($H20="Référentiel";0;$AK20*F20) WHEN c = 'Y' AND v >= 1 THEN -- Y=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.F20]) WHEN 'Y' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fa; RETURN (cell('AK',l) + cell('AN',l)) * vh.taux_fa; END IF; -- Z=SI($H20="Référentiel";0;$AK20*G20) WHEN c = 'Z' AND v >= 1 THEN -- Z=IF([.$H20]="Référentiel";0;([.$AK20]+[.$AN20])*[.G20]) WHEN 'Z' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN 0; ELSE RETURN cell('AK',l) * vh.taux_fc; RETURN (cell('AK',l) + cell('AN',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";$AK20;0) WHEN c = 'AB' AND v >= 1 THEN -- AB=IF([.$H20]="Référentiel";[.$AK20]+[.$AN20];0) WHEN 'AB' THEN IF vh.volume_horaire_ref_id IS NOT NULL THEN RETURN cell('AK',l); RETURN cell('AK',l) + cell('AN',l); ELSE RETURN 0; END IF; -- AD=SI(ESTERREUR(I20);1;I20) WHEN c = 'AD' AND v >= 1 THEN -- AD=IF(ISERROR([.I20]);1;[.I20]) WHEN 'AD' THEN RETURN vh.taux_service_du; -- AE=SI($D20="Oui";$M20*$AD20;0) WHEN c = 'AE' AND v >= 1 THEN -- AE=IF([.$D20]="Oui";[.$M20]*[.$AD20];0) WHEN 'AE' THEN IF vh.service_statutaire THEN RETURN vh.heures * cell('AD',l); ELSE Loading @@ -254,11 +228,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- AF=SI(AF19+AE20>i_service_du;i_service_du;AF19+AE20) WHEN c = 'AF' AND v >= 1 THEN IF l < 1 THEN RETURN 0; END IF; -- AF=IF([.AF19]+[.AE20]>i_service_du;i_service_du;[.AF19]+[.AE20]) WHEN 'AF' THEN IF cell('AF',l-1) + cell('AE',l) > i.service_du THEN RETURN i.service_du; ELSE Loading @@ -267,53 +238,102 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS -- AG=AF20-AF19 WHEN c = 'AG' AND v >= 1 THEN -- AG=[.AF20]-[.AF19] WHEN 'AG' THEN RETURN cell('AF',l) - cell('AF',l-1); -- AH19=SOMME(AG:AG) WHEN c = 'AH19' AND v >= 1 THEN RETURN calcFnc('total', 'AG'); -- AH19=SUM([.AG$1:.AG$1048576]) WHEN 'AH19' THEN RETURN calcFnc('somme','AG'); -- AI=SI(AF19+AE20<i_service_du;0;((AF19+AE20)-i_service_du)/AD20) WHEN c = 'AI' AND v >= 1 THEN -- AI=IF([.AF19]+[.AE20]<i_service_du;0;(([.AF19]+[.AE20])-i_service_du)/[.AD20]) WHEN 'AI' THEN IF cell('AF',l-1) + cell('AE',l) < i.service_du THEN RETURN 0; ELSE RETURN (cell('AF',l-1) + cell('AE',l) - i.service_du) / cell('AD',l); RETURN ((cell('AF',l-1) + cell('AE',l)) - i.service_du) / cell('AD',l); END IF; -- AJ=SI(ESTERREUR(J20);1;J20) WHEN c = 'AJ' AND v >= 1 THEN -- AJ=IF(ISERROR([.J20]);1;[.J20]) WHEN 'AJ' THEN RETURN vh.taux_service_compl; -- AK=SI(OU($AH$19<i_service_du;i_depassement_service_du_sans_hc="Oui");0;(AI20+SI(D20<>"Oui";M20;0))*AJ20) WHEN c = 'AK' AND v >= 1 THEN -- AK=IF(OR([.$AH$19]<i_service_du;i_depassement_service_du_sans_hc="Oui");0;[.AI20]*[.AJ20]) WHEN 'AK' THEN IF cell('AH19') < i.service_du OR i.depassement_service_du_sans_hc THEN RETURN 0; ELSE IF NOT vh.service_statutaire THEN RETURN (cell('AI',l) + vh.heures) * cell('AJ',l); RETURN cell('AI',l) * cell('AJ',l); END IF; -- AL17=[.AH19]/5 WHEN 'AL17' THEN RETURN cell('AH19') / 5; -- AL=IF(OR([.$AH$19]<i_service_du;i_depassement_service_du_sans_hc="Oui";[.$D20]="Oui");0;[.M20]*[.AJ20]) WHEN 'AL' THEN IF cell('AH19') < i.service_du OR i.depassement_service_du_sans_hc OR vh.service_statutaire THEN RETURN 0; ELSE RETURN (cell('AI',l) + 0) * cell('AJ',l); RETURN vh.heures * cell('AJ',l); END IF; -- AM17=[.AH19]/5 WHEN 'AM17' THEN RETURN cell('AH19') / 5; -- AM=IF([.AM19]+[.AL20]>[.$AL$17];[.$AL$17];[.AM19]+[.AL20]) WHEN 'AM' THEN IF cell('AM',l-1) + cell('AL',l) > cell('AL17') THEN RETURN cell('AL17'); ELSE RETURN cell('AM',l-1) + cell('AL',l); END IF; -- AN=[.AM20]-[.AM19] WHEN 'AN' THEN RETURN cell('AM',l) - cell('AM',l-1); -- AF19 WHEN 'AF19' THEN RETURN 0; -- AM19 WHEN 'AM19' THEN RETURN 0; 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; END; END CASE; raise_application_error( -20001, 'La colonne c=' || c || ', l=' || l || ' n''existe pas!'); END; Loading @@ -321,6 +341,10 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR 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 @@ -367,7 +391,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_COTE_AZUR AS FROM V_FORMULE_VOLUME_HORAIRE fvh ORDER BY ordre'; ordre '; END; END FORMULE_COTE_AZUR; No newline at end of file