Skip to content
Snippets Groups Projects
Commit 641c92d7 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Merge branch 'cherry-pick-3ae4380c' into 'master'

Doc changement d'années

See merge request !44
parents 8d87abf8 b88b8d76
Branches
Tags
1 merge request!44Doc changement d'années
File moved
# Changement d'année universitaire
Lors du changement d'année universitaire, il est parfois nécessaire de prolonger une offre de formation
ou bien de transférer des paramétrages de l'année courante vers la future année.
Une interface de configuration sera proposée à terme dans OSE pour réaliser ces tâches.
Pour le moment, le transfert de données d'une année sur l'autre doit se faire par le biais des requêtes fournies ci-dessous.
```sql
-- Liste des éléments et étapes concernées
WITH v AS (SELECT
-- année à reverser (=2017 pour 2017/2018)
2018 annee,
-- Source à dupliquer
'OSE' source,
-- Eléments
--NULL elements_codes -- à utiliser si pas de filtre par code
'
CODE.1
CODE.2
AUTRE_CODE
' elements_codes -- à utiliser pour ne transférer que certains codes
FROM dual)
SELECT
str.libelle_court composante,
e.code etape_code,
e.libelle etape_libelle,
ep.code element_code,
ep.libelle element_libelle
FROM
v
JOIN source s ON s.code = v.source
JOIN element_pedagogique ep ON ep.source_id = s.id AND ep.annee_id = v.annee AND ep.histo_destruction IS NULL
JOIN etape e ON e.id = ep.etape_id
JOIN structure str ON str.id = ep.structure_id
WHERE
v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
ORDER BY
composante, etape_code, element_code
;
-- activer l'année
-- MAJ des paramètres généraux
-- Opération à répéter plusieurs fois, tant que des requêtes sont générées, car des dépendances entre données
--
WITH v AS (SELECT p.*, p.annee annee_id, u.id utilisateur_id, s.id source_id FROM (SELECT
-- année à reverser (=2017 pour 2017/2018)
2018 annee,
-- Source à dupliquer
'OSE' source,
-- Utilisateur créateur
'lecluse' utilisateur,
-- filtres (1 ou 0)
1 etapes,
1 elements,
1 chemins,
1 volumes_horaires_ens,
0 modulateurs,
0 centres_couts,
-- Eléments
-- NULL elements_codes -- à utiliser si pas de filtre par code
'
CODE.1
CODE.2
AUTRE_CODE
' elements_codes -- à utiliser pour ne transférer que certains codes
FROM dual) p JOIN utilisateur u ON u.username = p.utilisateur JOIN source s ON s.code = p.source)
SELECT * FROM (
SELECT '-- Passage de ' || v.annee_id || ' à ' || (v.annee_id+1) || ' --' isql FROM v
UNION ALL SELECT '------------------------- étapes -------------------------' isql FROM dual UNION ALL
SELECT DISTINCT CASE WHEN e2.id IS NULL THEN '
INSERT INTO etape (
id,
libelle,
type_formation_id,
niveau,
specifique_echanges,
structure_id,
source_id, source_code,
histo_creation, histo_createur_id,
histo_modification, histo_modificateur_id,
domaine_fonctionnel_id,
annee_id,
code
) VALUES (
etape_id_seq.nextval,
q''[' || e.libelle || ']'',
' || COALESCE(to_char(e.type_formation_id),'NULL') || ',
' || COALESCE(to_char(e.niveau),'NULL') || ',
' || COALESCE(to_char(e.specifique_echanges),'NULL') || ',
' || COALESCE(to_char(e.structure_id),'NULL') || ',
' || e.source_id || ', q''[' || e.source_code || ']'',
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || ',
' || COALESCE(to_char(e.domaine_fonctionnel_id),'NULL') || ',
' || (v.annee_id + 1) || ',
q''[' || e.code || ']''
);' ELSE '-- CODE ' || e2.code || ' existant' END isql
FROM
v
JOIN etape e ON e.annee_id = v.annee_id AND e.source_id = v.source_id AND e.histo_destruction IS NULL
JOIN element_pedagogique ep ON ep.etape_id = e.id AND ep.histo_destruction IS NULL AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
LEFT JOIN etape e2 ON e2.code = e.code AND e2.annee_id = e.annee_id+1 AND e2.histo_destruction IS NULL
WHERE
v.etapes = 1
UNION ALL SELECT '------------------------- éléments pédagogiques -------------------------' isql FROM dual UNION ALL
SELECT CASE WHEN ep2.id IS NULL THEN '
INSERT INTO element_pedagogique (
ID,
CODE,
LIBELLE,
ETAPE_ID,
STRUCTURE_ID,
PERIODE_ID,
TAUX_FI, TAUX_FC, TAUX_FA,
TAUX_FOAD,
FI, FC, FA,
SOURCE_ID, SOURCE_CODE,
HISTO_CREATION, HISTO_CREATEUR_ID,
HISTO_MODIFICATION, HISTO_MODIFICATEUR_ID,
ANNEE_ID,
DISCIPLINE_ID
) VALUES (
element_pedagogique_id_seq.nextval,
q''[' || ep.code || ']'',
q''[' || ep.libelle || ']'',
' || e2.id || ',
' || ep.structure_id || ',
' || NVL(to_char(ep.periode_id), 'NULL') || ',
' || TRIM(TO_CHAR(ep.taux_fi, '999.99')) || ', ' || TRIM(TO_CHAR(ep.taux_fc, '999.99')) || ', ' || TRIM(TO_CHAR(ep.taux_fa, '999.99')) || ',
' || TRIM(TO_CHAR(ep.taux_foad, '999.99')) || ',
' || TRIM(TO_CHAR(ep.fi, '999.99')) || ', ' || TRIM(TO_CHAR(ep.fc, '999.99')) || ', ' || TRIM(TO_CHAR(ep.fa, '999.99')) || ',
' || v.source_id || ', q''[' || ep.source_code || ']'',
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || ',
' || (v.annee_id + 1) || ',
' || NVL(to_char(ep.discipline_id), 'NULL') || '
);
' ELSE '-- CODE ' || ep2.code || ' existant' END isql
FROM
v
JOIN element_pedagogique ep ON ep.annee_id = v.annee_id AND ep.source_id = v.source_id AND ep.histo_destruction IS NULL
JOIN etape e ON e.id = ep.etape_id
JOIN etape e2 ON e2.code = e.code AND e2.annee_id = e.annee_id+1 AND e2.histo_destruction IS NULL
LEFT JOIN element_pedagogique ep2 ON ep2.code = ep.code AND ep2.annee_id = ep.annee_id+1 AND ep2.histo_destruction IS NULL
WHERE
v.elements = 1
AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
UNION ALL SELECT '------------------------- chemins pédagogiques -------------------------' isql FROM dual UNION ALL
SELECT CASE WHEN cp2.id IS NULL THEN '
INSERT INTO chemin_pedagogique(
ID,
ELEMENT_PEDAGOGIQUE_ID,
ETAPE_ID,
ORDRE,
SOURCE_ID, SOURCE_CODE,
HISTO_CREATION, HISTO_CREATEUR_ID,
HISTO_MODIFICATION, HISTO_MODIFICATEUR_ID
) VALUES (
chemin_pedagogique_id_seq.nextval,
' || ep2.id || ',
' || e2.id || ',
' || rownum || ',
' || v.source_id || ', q''[' || e2.source_code || '_' || ep2.source_code || '_' || (v.annee_id + 1) || ']'',
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || '
);
' ELSE '-- chemin d''élément CODE ' || ep2.code || ', étape CODE ' || e2.code || ' existant' END isql
FROM
v
JOIN chemin_pedagogique cp ON cp.source_id = v.source_id AND cp.histo_destruction IS NULL
JOIN element_pedagogique ep ON ep.id = cp.element_pedagogique_id AND ep.annee_id = v.annee_id
JOIN etape e ON e.id = cp.etape_id
JOIN element_pedagogique ep2 ON ep2.code = ep.code AND ep2.annee_id = ep.annee_id+1 AND ep2.histo_destruction IS NULL
JOIN etape e2 ON e2.code = e.code AND e2.annee_id = e.annee_id+1 AND e2.histo_destruction IS NULL
LEFT JOIN chemin_pedagogique cp2 ON cp2.etape_id = e2.id AND cp2.element_pedagogique_id = ep2.id AND cp2.histo_destruction IS NULL
WHERE
v.chemins = 1
AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
UNION ALL SELECT '------------------------- volumes_horaire_ens -------------------------' isql FROM dual UNION ALL
SELECT CASE WHEN vhe2.id IS NULL THEN '
INSERT INTO volume_horaire_ens (
id,
type_intervention_id,
heures,
source_id, source_code,
histo_creation, histo_createur_id,
histo_modification, histo_modificateur_id,
element_pedagogique_id,
groupes
) VALUES (
volume_horaire_ens_id_seq.nextval,
' || vhe.type_intervention_id || ',
' || vhe.heures || ',
' || v.source_id || ', q''[' || ep2.source_code || '_' || vhe.type_intervention_id || '_' || (v.annee_id + 1) || ']'',
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || ',
' || ep2.id || ',
' || COALESCE(to_char(vhe.groupes),'NULL') || '
);
' ELSE '-- VHE d''élément CODE ' || ep2.code || ', TI ID ' || vhe.type_intervention_id || ' existant' END isql
FROM
v
JOIN volume_horaire_ens vhe ON vhe.source_id = v.source_id AND vhe.histo_destruction IS NULL
JOIN element_pedagogique ep ON ep.id = vhe.element_pedagogique_id AND ep.annee_id = v.annee_id
JOIN element_pedagogique ep2 ON ep2.code = ep.code AND ep2.annee_id = ep.annee_id+1 AND ep2.histo_destruction IS NULL
LEFT JOIN volume_horaire_ens vhe2 ON vhe2.element_pedagogique_id = ep2.id AND vhe2.type_intervention_id = vhe.type_intervention_id AND vhe2.histo_destruction IS NULL
WHERE
v.volumes_horaires_ens = 1
AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
UNION ALL SELECT '------------------------- modulateurs -------------------------' isql FROM dual UNION ALL
SELECT CASE WHEN em2.id IS NULL THEN '
INSERT INTO ELEMENT_MODULATEUR(
ID,
ELEMENT_ID,
MODULATEUR_ID,
HISTO_CREATION, HISTO_CREATEUR_ID,
HISTO_MODIFICATION, HISTO_MODIFICATEUR_ID
)VALUES(
ELEMENT_MODULATEUR_ID_SEQ.NEXTVAL,
' || ep2.id || ',
' || em.modulateur_id || ',
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || '
);' ELSE '-- EM d''élément CODE ' || ep2.code || ', Modulateur ID ' || em.modulateur_id || ' existant' END isql
FROM
v
JOIN element_modulateur em ON em.histo_destruction IS NULL
JOIN element_pedagogique ep ON ep.id = em.element_id AND ep.annee_id = v.annee_id
JOIN element_pedagogique ep2 ON ep2.code = ep.code AND ep2.annee_id = ep.annee_id + 1 AND ep2.histo_destruction IS NULL
LEFT JOIN element_modulateur em2 ON em2.element_id = ep2.id AND em2.modulateur_id = em.modulateur_id AND em2.histo_destruction IS NULL
WHERE
v.modulateurs = 1
AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
UNION ALL SELECT '------------------------- centres de coûts -------------------------' isql FROM dual UNION ALL
SELECT CASE WHEN cce2.id IS NULL THEN '
INSERT INTO CENTRE_COUT_EP(
ID,
CENTRE_COUT_ID,
ELEMENT_PEDAGOGIQUE_ID,
TYPE_HEURES_ID,
SOURCE_ID,
SOURCE_CODE,
HISTO_CREATION, HISTO_CREATEUR_ID,
HISTO_MODIFICATION, HISTO_MODIFICATEUR_ID
)VALUES(
CENTRE_COUT_EP_ID_SEQ.NEXTVAL,
' || cce.centre_cout_id || ',
' || ep2.id || ',
' || CCE.type_heures_id || ',
' || CCE.source_id || ',
''N-1toN_'' || CENTRE_COUT_EP_ID_SEQ.CURRVAL,
SYSDATE, ' || v.utilisateur_id || ',
SYSDATE, ' || v.utilisateur_id || '
);' ELSE '-- EM d''élément CODE ' || ep2.code || ', Centre coûts ID ' || cce.centre_cout_id || ' existant' END isql
FROM
v
JOIN centre_cout_ep cce ON cce.histo_destruction IS NULL
JOIN element_pedagogique ep ON ep.id = cce.element_pedagogique_id AND ep.annee_id = v.annee_id
JOIN element_pedagogique ep2 ON ep2.code = ep.code AND ep2.annee_id = ep.annee_id+1 AND ep2.histo_destruction IS NULL
LEFT JOIN centre_cout_ep cce2 ON cce2.centre_cout_id = cce.centre_cout_id
AND cce2.element_pedagogique_id = cce.element_pedagogique_id
AND cce2.type_heures_id = cce.type_heures_id
AND cce2.histo_destruction IS NULL
WHERE
v.centres_couts = 1
AND (v.elements_codes IS NULL OR '
' || v.elements_codes || '
' LIKE '%
' || ep.code || '
%'
)
) t
```
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment