Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
open-source
OSE
Commits
84fe986a
Commit
84fe986a
authored
Mar 26, 2021
by
Laurent Lécluse
Browse files
Formule d'Artois
parent
fb00f8da
Changes
3
Hide whitespace changes
Inline
Side-by-side
data/ddl/package/FORMULE_ARTOIS/body.sql
0 → 100644
View file @
84fe986a
create
or
replace
PACKAGE
BODY
FORMULE_ARTOIS
AS
decalageLigne
NUMERIC
DEFAULT
20
;
/* Stockage des valeurs intermédiaires */
TYPE
t_cell
IS
RECORD
(
valeur
FLOAT
,
enCalcul
BOOLEAN
DEFAULT
FALSE
);
TYPE
t_cells
IS
TABLE
OF
t_cell
INDEX
BY
PLS_INTEGER
;
TYPE
t_coll
IS
RECORD
(
cells
t_cells
);
TYPE
t_colls
IS
TABLE
OF
t_coll
INDEX
BY
VARCHAR2
(
50
);
feuille
t_colls
;
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
ligne
:
=
l
;
IF
l
<>
0
THEN
ligne
:
=
ligne
+
decalageLigne
;
END
IF
;
dbgi
(
'[cell|'
||
c
||
'|'
||
ligne
||
'|'
||
val
);
END
;
PROCEDURE
dbgCalc
(
fncName
VARCHAR2
,
c
VARCHAR2
,
res
FLOAT
)
IS
BEGIN
dbgi
(
'[calc|'
||
fncName
||
'|'
||
c
||
'|'
||
res
);
END
;
FUNCTION
cell
(
c
VARCHAR2
,
l
NUMERIC
DEFAULT
0
)
RETURN
FLOAT
IS
val
FLOAT
;
BEGIN
IF
feuille
.
exists
(
c
)
THEN
IF
feuille
(
c
).
cells
.
exists
(
l
)
THEN
IF
feuille
(
c
).
cells
(
l
).
enCalcul
THEN
raise_application_error
(
-
20001
,
'Dépendance cyclique : la cellule ['
||
c
||
';'
||
l
||
'] est déjà en cours de calcul'
);
END
IF
;
RETURN
feuille
(
c
).
cells
(
l
).
valeur
;
END
IF
;
END
IF
;
feuille
(
c
).
cells
(
l
).
enCalcul
:
=
true
;
val
:
=
calcCell
(
c
,
l
);
IF
ose_formule
.
debug_actif
THEN
dbgCell
(
c
,
l
,
val
);
END
IF
;
feuille
(
c
).
cells
(
l
).
valeur
:
=
val
;
feuille
(
c
).
cells
(
l
).
enCalcul
:
=
false
;
RETURN
val
;
END
;
FUNCTION
mainCell
(
libelle
VARCHAR2
,
c
VARCHAR2
,
l
NUMERIC
)
RETURN
FLOAT
IS
val
FLOAT
;
BEGIN
debugLine
:
=
l
;
val
:
=
cell
(
c
,
l
);
RETURN
val
;
END
;
FUNCTION
calcFnc
(
fncName
VARCHAR2
,
c
VARCHAR2
)
RETURN
FLOAT
IS
val
FLOAT
;
cellRes
FLOAT
;
BEGIN
IF
feuille
.
exists
(
'__'
||
fncName
||
'__'
||
c
||
'__'
)
THEN
IF
feuille
(
'__'
||
fncName
||
'__'
||
c
||
'__'
).
cells
.
exists
(
1
)
THEN
RETURN
feuille
(
'__'
||
fncName
||
'__'
||
c
||
'__'
).
cells
(
1
).
valeur
;
END
IF
;
END
IF
;
CASE
-- Liste des fonctions supportées
WHEN
fncName
=
'total'
THEN
val
:
=
0
;
FOR
l
IN
1
..
ose_formule
.
volumes_horaires
.
length
LOOP
val
:
=
val
+
COALESCE
(
cell
(
c
,
l
),
0
);
END
LOOP
;
WHEN
fncName
=
'max'
THEN
val
:
=
NULL
;
FOR
l
IN
1
..
ose_formule
.
volumes_horaires
.
length
LOOP
cellRes
:
=
cell
(
c
,
l
);
IF
val
IS
NULL
OR
val
<
cellRes
THEN
val
:
=
cellRes
;
END
IF
;
END
LOOP
;
-- fin de la liste des fonctions supportées
ELSE
raise_application_error
(
-
20001
,
'La formule "'
||
fncName
||
'" n
''
existe pas!'
);
END
CASE
;
IF
ose_formule
.
debug_actif
THEN
dbgCalc
(
fncName
,
c
,
val
);
END
IF
;
feuille
(
'__'
||
fncName
||
'__'
||
c
||
'__'
).
cells
(
1
).
valeur
:
=
val
;
RETURN
val
;
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
-- T=SI($H20="Référentiel";0;$AH20*E20)
WHEN
c
=
'T'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AH'
,
l
)
*
vh
.
taux_fi
;
END
IF
;
-- U=SI($H20="Référentiel";0;$AH20*F20)
WHEN
c
=
'U'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AH'
,
l
)
*
vh
.
taux_fa
;
END
IF
;
-- V=SI($H20="Référentiel";0;$AH20*G20)
WHEN
c
=
'V'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AH'
,
l
)
*
vh
.
taux_fc
;
END
IF
;
-- W=SI($H20="Référentiel";$AH20;0)
WHEN
c
=
'W'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
cell
(
'AH'
,
l
);
ELSE
RETURN
0
;
END
IF
;
-- X=SI($H20="Référentiel";0;$AL20*E20)
WHEN
c
=
'X'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AL'
,
l
)
*
vh
.
taux_fi
;
END
IF
;
-- Y=SI($H20="Référentiel";0;$AL20*F20)
WHEN
c
=
'Y'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AL'
,
l
)
*
vh
.
taux_fa
;
END
IF
;
-- Z=SI($H20="Référentiel";0;$AL20*G20)
WHEN
c
=
'Z'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
0
;
ELSE
RETURN
cell
(
'AL'
,
l
)
*
vh
.
taux_fc
;
END
IF
;
-- AA=0
WHEN
c
=
'AA'
AND
v
>=
1
THEN
RETURN
0
;
-- AB=SI($H20="Référentiel";$AL20;0)
WHEN
c
=
'AB'
AND
v
>=
1
THEN
IF
vh
.
volume_horaire_ref_id
IS
NOT
NULL
THEN
RETURN
cell
(
'AL'
,
l
);
ELSE
RETURN
0
;
END
IF
;
-- AD=SI(ESTERREUR(I20);1;I20)
WHEN
c
=
'AD'
AND
v
>=
1
THEN
RETURN
vh
.
taux_service_du
;
-- AE=SI(D20="Oui";M20;0)
WHEN
c
=
'AE'
AND
v
>=
1
THEN
IF
vh
.
service_statutaire
THEN
RETURN
vh
.
heures
;
ELSE
RETURN
0
;
END
IF
;
-- AF=AD20*AE20*K20
WHEN
c
=
'AF'
AND
v
>=
1
THEN
RETURN
cell
(
'AD'
,
l
)
*
cell
(
'AE'
,
l
)
*
vh
.
ponderation_service_du
;
-- AG=SI(AF20+AG19>i_service_du;i_service_du;AF20+AG19)
WHEN
c
=
'AG'
AND
v
>=
1
THEN
IF
l
<
1
THEN
RETURN
0
;
ELSE
IF
cell
(
'AF'
,
l
)
+
cell
(
'AG'
,
l
-
1
)
>
i
.
service_du
THEN
RETURN
i
.
service_du
;
ELSE
RETURN
cell
(
'AF'
,
l
)
+
cell
(
'AG'
,
l
-
1
);
END
IF
;
END
IF
;
-- AH=AG20-AG19
WHEN
c
=
'AH'
AND
v
>=
1
THEN
RETURN
cell
(
'AG'
,
l
)
-
cell
(
'AG'
,
l
-
1
);
-- AI=(AF20-AH20)/AD20
WHEN
c
=
'AI'
AND
v
>=
1
THEN
RETURN
cell
(
'AF'
,
l
)
-
cell
(
'AH'
,
l
);
-- AJ=SI(D20="Oui";0;M20)
WHEN
c
=
'AJ'
AND
v
>=
1
THEN
IF
vh
.
service_statutaire
THEN
RETURN
0
;
ELSE
RETURN
vh
.
heures
;
END
IF
;
-- AK=SI(ESTERREUR(J20);1;SI(i_depassement_service_du_sans_hc="Oui";0;J20))
WHEN
c
=
'AK'
AND
v
>=
1
THEN
IF
i
.
depassement_service_du_sans_hc
THEN
RETURN
0
;
ELSE
RETURN
vh
.
taux_service_compl
;
END
IF
;
-- AL=AK20*(AI20+AJ20)*L20
WHEN
c
=
'AL'
AND
v
>=
1
THEN
RETURN
cell
(
'AK'
,
l
)
*
(
cell
(
'AI'
,
l
)
+
cell
(
'AJ'
,
l
))
*
vh
.
ponderation_service_compl
;
-- AG19=0
WHEN
c
=
'AG19'
AND
v
>=
1
THEN
RETURN
0
;
-- AH19=MAX(AG20:AG500)
WHEN
c
=
'AH19'
AND
v
>=
1
THEN
RETURN
calcFnc
(
'max'
,
'AG'
);
ELSE
OSE_TEST
.
echo
(
c
);
raise_application_error
(
-
20001
,
'La colonne c='
||
c
||
', l='
||
l
||
' n
''
existe pas!'
);
END
CASE
;
END
;
PROCEDURE
CALCUL_RESULTAT
IS
BEGIN
feuille
.
delete
;
-- 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
);
ose_formule
.
volumes_horaires
.
items
(
l
).
service_fa
:
=
mainCell
(
'Service FA'
,
'U'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
service_fc
:
=
mainCell
(
'Service FC'
,
'V'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
service_referentiel
:
=
mainCell
(
'Service référentiel'
,
'W'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
heures_compl_fi
:
=
mainCell
(
'Heures compl. FI'
,
'X'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
heures_compl_fa
:
=
mainCell
(
'Heures compl. FA'
,
'Y'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
heures_compl_fc
:
=
mainCell
(
'Heures compl. FC'
,
'Z'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
heures_compl_fc_majorees
:
=
mainCell
(
'Heures compl. FC Maj.'
,
'AA'
,
l
);
ose_formule
.
volumes_horaires
.
items
(
l
).
heures_compl_referentiel
:
=
mainCell
(
'Heures compl. référentiel'
,
'AB'
,
l
);
END
LOOP
;
END
;
FUNCTION
INTERVENANT_QUERY
RETURN
CLOB
IS
BEGIN
RETURN
'
SELECT
fi.*,
NULL param_1,
NULL param_2,
NULL param_3,
NULL param_4,
NULL param_5
FROM
V_FORMULE_INTERVENANT fi
'
;
END
;
FUNCTION
VOLUME_HORAIRE_QUERY
RETURN
CLOB
IS
BEGIN
RETURN
'
SELECT
fvh.*,
NULL param_1,
NULL param_2,
NULL param_3,
NULL param_4,
NULL param_5
FROM
V_FORMULE_VOLUME_HORAIRE fvh
ORDER BY
ordre'
;
END
;
END
FORMULE_ARTOIS
;
\ No newline at end of file
data/ddl/package/FORMULE_ARTOIS/definition.sql
0 → 100644
View file @
84fe986a
CREATE
OR
REPLACE
PACKAGE
FORMULE_ARTOIS
AS
PROCEDURE
CALCUL_RESULTAT
;
FUNCTION
calcCell
(
c
VARCHAR2
,
l
NUMERIC
)
RETURN
FLOAT
;
FUNCTION
INTERVENANT_QUERY
RETURN
CLOB
;
FUNCTION
VOLUME_HORAIRE_QUERY
RETURN
CLOB
;
END
FORMULE_ARTOIS
;
\ No newline at end of file
data/nomenclatures.php
View file @
84fe986a
...
...
@@ -192,6 +192,10 @@ return [
'LIBELLE'
=>
'Université Paris 8'
,
'PACKAGE_NAME'
=>
'FORMULE_PARIS8'
,
],
14
=>
[
'LIBELLE'
=>
'Université d\'Artois'
,
'PACKAGE_NAME'
=>
'FORMULE_ARTOIS'
,
],
],
'MODELE_CONTRAT'
=>
[
...
...
Laurent Lécluse
@lecluse
mentioned in commit
fddf65a0
·
Apr 09, 2021
mentioned in commit
fddf65a0
mentioned in commit fddf65a07b29b9e083d75baade21bbec1a2d9167
Toggle commit list
Laurent Lécluse
@lecluse
mentioned in merge request
!57 (merged)
·
Apr 09, 2021
mentioned in merge request
!57 (merged)
mentioned in merge request !57
Toggle commit list
Laurent Lécluse
@lecluse
mentioned in commit
3ae9417b
·
Apr 09, 2021
mentioned in commit
3ae9417b
mentioned in commit 3ae9417b3ab54679465e7de23161ab22ef7f892e
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment