Commit f08e66fe authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'release-1.3.2'

parents a18936e9 4f44f7c2
Pipeline #6195 passed with stage
in 16 seconds
Journal des modifications
=========================
1.3.2 (24/01/2020)
------------------
- Thèses : ajout des dates d'abandon et de transfert.
- Les dates d'insertion des données dans les tables `SYGAL_*` sont désormais retournées par le web service ;
cela permettra côté SyGAL de détecter un problème dans le CRONage du script de remplissage de ces tables).
1.3.1 (17/01/2020)
------------------
......
......@@ -2,9 +2,9 @@
return [
'unicaen-app' => [
'app_infos' => [
'version' => '1.3.0',
'date' => '20/11/2019',
'version' => '1.3.2',
'date' => '24/01/2020',
],
],
'comment' => 'Fichier généré le 20/11/2019 à 09:43:55 avec /home/gauthierb/workspace/sygal-import-ws/bump-version',
'comment' => 'Fichier généré le 24/01/2020 à 11:44:25 avec /home/gauthierb/workspace/sygal-import-ws/bump-version',
];
......@@ -26,7 +26,7 @@ create table SYGAL_ACTEUR
LIB_CPS VARCHAR2(40),
TEM_HAB_RCH_PER VARCHAR2(1) not null,
TEM_RAP_RECU VARCHAR2(1),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -36,7 +36,7 @@ create table SYGAL_DOCTORANT
ID NUMBER(8),
INDIVIDU_ID NUMBER(8),
INE VARCHAR2(12),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -45,7 +45,7 @@ create table SYGAL_ECOLE_DOCT
SOURCE_ID VARCHAR2(50 char),
STRUCTURE_ID VARCHAR2(4),
ID VARCHAR2(4),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -55,7 +55,7 @@ create table SYGAL_ETABLISSEMENT
STRUCTURE_ID VARCHAR2(8),
ID VARCHAR2(8),
CODE VARCHAR2(8),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -70,7 +70,7 @@ create table SYGAL_FINANCEMENT
QUOTITE_FINANCEMENT NUMBER(3),
DATE_DEBUT_FINANCEMENT DATE,
DATE_FIN_FINANCEMENT DATE,
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -90,7 +90,7 @@ create table SYGAL_INDIVIDU
DATE_NAI_IND DATE,
COD_PAY_NAT VARCHAR2(3),
LIB_NAT VARCHAR2(40),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -101,7 +101,7 @@ create table SYGAL_ORIGINE_FINANCEMENT
COD_OFI CHAR(2),
LIC_OFI VARCHAR2(10),
LIB_OFI VARCHAR2(40),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -111,7 +111,7 @@ create table SYGAL_ROLE
ID CHAR,
LIB_ROJ VARCHAR2(21),
LIC_ROJ VARCHAR2(10),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -124,7 +124,7 @@ create table SYGAL_STRUCTURE
LIBELLE VARCHAR2(100),
CODE_PAYS VARCHAR2(3),
LIBELLE_PAYS VARCHAR2(40),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -134,7 +134,7 @@ create table SYGAL_THESE_ANNEE_UNIV
ID VARCHAR2(45),
THESE_ID NUMBER(8) not null,
ANNEE_UNIV VARCHAR2(4) not null,
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -149,7 +149,7 @@ create table SYGAL_TITRE_ACCES
LIBELLE_ETB_TITRE_ACCES VARCHAR2(100),
CODE_DEPT_TITRE_ACCES VARCHAR2(100),
CODE_PAYS_TITRE_ACCES VARCHAR2(3),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -158,7 +158,7 @@ create table SYGAL_UNITE_RECH
SOURCE_ID VARCHAR2(50 char),
STRUCTURE_ID VARCHAR2(10) not null,
ID VARCHAR2(10) not null,
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -171,7 +171,7 @@ create table SYGAL_VARIABLE
PAR_VAP VARCHAR2(100),
DATE_DEB_VALIDITE DATE,
DATE_FIN_VALIDITE DATE,
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -200,7 +200,7 @@ create table SYGAL_THESE
ETA_RPD_THS VARCHAR2(1),
CORRECTION_POSSIBLE VARCHAR2(11),
COD_ANU_PRM_IAE VARCHAR2(20),
INSERTED_ON DATE default sysdate not null
SOURCE_INSERT_DATE DATE default sysdate not null
)
/
......@@ -201,104 +201,105 @@ select distinct
and cod_etu is not null
/
create view V_SYGAL_THESE as
with inscription_administrative as (
create or replace view V_SYGAL_THESE as
with inscription_administrative as (
select distinct
ths.cod_ind,
iae.cod_dip,
iae.cod_vrs_vdi
ths.cod_ind,
iae.cod_dip,
iae.cod_vrs_vdi
from these_hdr_sout ths
join ins_adm_etp iae on iae.cod_ind = ths.cod_ind and ( iae.cod_dip, iae.cod_vrs_vdi ) in ( ( ths.cod_dip, ths.cod_vrs_vdi ), ( ths.cod_dip_anc, ths.cod_vrs_vdi_anc ) )
join diplome dip on dip.cod_dip = iae.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
join ins_adm_etp iae on iae.cod_ind = ths.cod_ind and ( iae.cod_dip, iae.cod_vrs_vdi ) in ( ( ths.cod_dip, ths.cod_vrs_vdi ), ( ths.cod_dip_anc, ths.cod_vrs_vdi_anc ) )
join diplome dip on dip.cod_dip = iae.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
where ths.cod_ths_trv = '1' -- Exclusion des travaux
and iae.eta_iae = 'E' -- Inscription administrative non annulee
and iae.eta_pmt_iae = 'P' -- Inscription administrative payee
and dip.cod_tpd_etb in ( '39', '40' )
and tpd.eta_ths_hdr_drt = 'T' -- Inscription en these
and tpd.tem_sante = 'N' -- Exclusion des theses d exercice
),
hierarchie_structures as (
select
cod_cmp_inf,
cod_cmp_sup
from cmp_cmp
where connect_by_isleaf = 1
connect by prior cod_cmp_sup = cod_cmp_inf
),
ancienne_these as (
select distinct
cod_ind,
cod_dip_anc,
cod_vrs_vdi_anc,
'A' eta_ths
from these_hdr_sout
where cod_ths_trv = '1'
and cod_dip_anc is not null
)
),
hierarchie_structures as (
select
cod_cmp_inf,
cod_cmp_sup
from cmp_cmp
where connect_by_isleaf = 1
connect by prior cod_cmp_sup = cod_cmp_inf
),
ancienne_these as (
select distinct
cod_ind,
cod_dip_anc,
cod_vrs_vdi_anc,
'A' eta_ths
from these_hdr_sout
where cod_ths_trv = '1'
and cod_dip_anc is not null
)
select
'apogee' as source_id, -- Id de la source
select
'apogee' as source_id, -- Id de la source
---------- Enregistrement de la these --------
ths.cod_ths as id, -- Identifiant de la these
case when ths.eta_ths = 'S' and nvl ( ths.dat_sou_ths, sysdate + 1 ) > sysdate
---------- Enregistrement de la these --------
ths.cod_ths as id, -- Identifiant de la these
case when ths.eta_ths = 'S' and nvl ( ths.dat_sou_ths, sysdate + 1 ) > sysdate
then 'E' else ths.eta_ths end eta_ths, -- Etat de la these (E=En cours, A=Abandonnee, S=Soutenue, U=Transferee)
ind.cod_etu as doctorant_id, -- Identifiant du doctorant
ths.cod_dis, -- Code discipline
dis.lib_int1_dis, -- Libellé discipline
ths.lib_ths, -- Titre de la these
ths.cod_lng, -- Code langue etrangere du titre
ths.dat_deb_ths, -- Date de 1ere inscription
null as cod_anu_prm_iae, -- DEPRECATED (cf. V_SYGAL_THESE_ANNEE_UNIV)
ind.cod_etu as doctorant_id, -- Identifiant du doctorant
ths.cod_dis, -- Code discipline
dis.lib_int1_dis, -- Libellé discipline
ths.lib_ths, -- Titre de la these
ths.cod_lng, -- Code langue etrangere du titre
ths.dat_deb_ths, -- Date de 1ere inscription
ths.dat_abandon, -- Date d'abandon
ths.dat_transfert_dep, -- Date de transfert
edo.cod_nat_edo as ecole_doct_id, -- Identifiant de l'ecole doctorale
ths.cod_eqr as unite_rech_id, -- Identifiant de l'unité de recherche principale
edo.cod_nat_edo as ecole_doct_id, -- Identifiant de l'ecole doctorale
ths.cod_eqr as unite_rech_id, -- Identifiant de l'unité de recherche principale
----------- Cotutelle ----------
pay.lib_pay, -- Denomination pays de cotutelle
nvl ( etb.lib_web_etb, etb.lib_etb ) lib_etb_cot, -- Denomination etablissement de cotutelle
ths.tem_avenant, -- Avenant a la convention de cotutelle (O/N)
----------- Cotutelle ----------
pay.lib_pay, -- Denomination pays de cotutelle
nvl ( etb.lib_web_etb, etb.lib_etb ) lib_etb_cot, -- Denomination etablissement de cotutelle
ths.tem_avenant, -- Avenant a la convention de cotutelle (O/N)
------- Organisation de la soutenance ------
ths.dat_prev_sou, -- Date previsionnelle de soutenance
ths.tem_sou_aut_ths, -- Soutenance autorisee (O/N/null)
ths.dat_aut_sou_ths, -- Date d autorisation de soutenance
ths.dat_sou_ths, -- Date de soutenance de la these
------- Organisation de la soutenance ------
ths.dat_prev_sou, -- Date previsionnelle de soutenance
ths.tem_sou_aut_ths, -- Soutenance autorisee (O/N/null)
ths.dat_aut_sou_ths, -- Date d autorisation de soutenance
ths.dat_sou_ths, -- Date de soutenance de la these
---------- Confidentialite --------
ths.dat_fin_cfd_ths, -- Date de fin de confidentialite de la these
---------- Confidentialite --------
ths.dat_fin_cfd_ths, -- Date de fin de confidentialite de la these
---------- Jury et resultats --------
tre.cod_neg_tre, -- Resultat positif (1) ou non (0)
ths.eta_rpd_ths, -- Reproduction de la these ( O=Oui / C=Oui avec corrections / N=Non )
decode(ths.eta_rpd_ths,
'N', 'obligatoire',
'C', 'facultative',
null) as correction_possible -- Témoin de corrections attendues
---------- Jury et resultats --------
tre.cod_neg_tre, -- Resultat positif (1) ou non (0)
ths.eta_rpd_ths, -- Reproduction de la these ( O=Oui / C=Oui avec corrections / N=Non )
decode(ths.eta_rpd_ths,
'N', 'obligatoire',
'C', 'facultative',
null) as correction_possible -- Témoin de corrections attendues
from inscription_administrative iae
join individu ind on ind.cod_ind = iae.cod_ind
join version_diplome vdi on vdi.cod_dip = iae.cod_dip and vdi.cod_vrs_vdi = iae.cod_vrs_vdi
join these_hdr_sout ths on ths.cod_ind = iae.cod_ind and ths.cod_dip = iae.cod_dip and ths.cod_vrs_vdi = iae.cod_vrs_vdi
left join ancienne_these anc on anc.cod_ind = ths.cod_ind and anc.cod_dip_anc = ths.cod_dip and anc.cod_vrs_vdi_anc = ths.cod_vrs_vdi and anc.eta_ths = ths.eta_ths
left join annee_uni ans on ans.cod_anu = ths.daa_fin_ths
left join ecole_doctorale edo on edo.cod_edo = ths.cod_edo
left join secteur_rch ser on ser.cod_ser = ths.cod_ser
left join equipe_rch eqr on eqr.cod_eqr = ths.cod_eqr
left join resultat_vdi rvi on rvi.cod_ind = iae.cod_ind and rvi.cod_dip = iae.cod_dip and rvi.cod_vrs_vdi = iae.cod_vrs_vdi and rvi.cod_ses = '0' and rvi.cod_adm = '1' and rvi.cod_tre is not null
left join annee_uni anr on anr.cod_anu = rvi.cod_anu
left join typ_resultat tre on tre.cod_tre = rvi.cod_tre
left join mention men on men.cod_men = rvi.cod_men
left join hierarchie_structures ccm on ccm.cod_cmp_inf = ths.cod_cmp
left join composante cmp on cmp.cod_cmp = nvl ( ccm.cod_cmp_sup, ths.cod_cmp )
left join diplome_sise dis on dis.cod_dis = ths.cod_dis
left join etablissement etb on etb.cod_etb = ths.cod_etb
left join pays pay on pay.cod_pay = ths.cod_pay
left join etablissement sou on sou.cod_etb = ths.cod_etb_sou
left join etablissement ori on ori.cod_etb = ths.cod_etb_origine
left join langue lng on lng.cod_lng = ths.cod_lng
where
from inscription_administrative iae
join individu ind on ind.cod_ind = iae.cod_ind
join version_diplome vdi on vdi.cod_dip = iae.cod_dip and vdi.cod_vrs_vdi = iae.cod_vrs_vdi
join these_hdr_sout ths on ths.cod_ind = iae.cod_ind and ths.cod_dip = iae.cod_dip and ths.cod_vrs_vdi = iae.cod_vrs_vdi
left join ancienne_these anc on anc.cod_ind = ths.cod_ind and anc.cod_dip_anc = ths.cod_dip and anc.cod_vrs_vdi_anc = ths.cod_vrs_vdi and anc.eta_ths = ths.eta_ths
left join annee_uni ans on ans.cod_anu = ths.daa_fin_ths
left join ecole_doctorale edo on edo.cod_edo = ths.cod_edo
left join secteur_rch ser on ser.cod_ser = ths.cod_ser
left join equipe_rch eqr on eqr.cod_eqr = ths.cod_eqr
left join resultat_vdi rvi on rvi.cod_ind = iae.cod_ind and rvi.cod_dip = iae.cod_dip and rvi.cod_vrs_vdi = iae.cod_vrs_vdi and rvi.cod_ses = '0' and rvi.cod_adm = '1' and rvi.cod_tre is not null
left join annee_uni anr on anr.cod_anu = rvi.cod_anu
left join typ_resultat tre on tre.cod_tre = rvi.cod_tre
left join mention men on men.cod_men = rvi.cod_men
left join hierarchie_structures ccm on ccm.cod_cmp_inf = ths.cod_cmp
left join composante cmp on cmp.cod_cmp = nvl ( ccm.cod_cmp_sup, ths.cod_cmp )
left join diplome_sise dis on dis.cod_dis = ths.cod_dis
left join etablissement etb on etb.cod_etb = ths.cod_etb
left join pays pay on pay.cod_pay = ths.cod_pay
left join etablissement sou on sou.cod_etb = ths.cod_etb_sou
left join etablissement ori on ori.cod_etb = ths.cod_etb_origine
left join langue lng on lng.cod_lng = ths.cod_lng
where
ths.cod_ths_trv = '1' and -- Exclusion des travaux
anc.cod_dip_anc is null
/
......
Utiliser l'interface d'admin Apigility
======================================
Ouvrir l'interface d'admin
--------------------------
- Lancer si besoin le web service dans Docker :
`docker-compose up sygal-import-ws`
- Passer en mode développement :
`docker-compose exec sygal-import-ws vendor/bin/zf-development-mode enable`
- Ouvrir l'interface d'admin dans un navigateur, exemple :
`https://localhost:8443`
NB: le numéro de port dépend de la config `docker-compose.yml`, faites un `docker ps` pour le connaître.
- Autoriser l'interface d'admin à écrire dans les fichiers de config
du web service :
`docker-compose exec sygal-import-ws chown -R www-data:www-data module/ImportData/config`
Modification de l'API
---------------------
- Le cas échéant, faire les modifications nécessaires sur l'API.
Fermer l'interface d'admin
--------------------------
- Rétablir les autorisations d'accès au fichiers :
`sudo chown -R ${USER}:${USER} module/ImportData/config`
- Ne pas oublier de désactiver le mode développement :
`docker-compose exec sygal-import-ws vendor/bin/zf-development-mode disable`
Test
----
- Interroger l'API pour vérifier les modifs, exemple :
`curl --insecure --header "Accept: application/json" --header "Authorization: Basic c3lnYWwtYXBwOmF6ZXJ0eQ==" https://localhost:8443/doctorant`
......@@ -8,52 +8,35 @@ Ajouter un champ dans un service
Exemple : ajouter l'INE des doctorants.
Marche à suivre :
### Marche à suivre
- Dans la base de données :
- Dans la base de données source (ex: Apogée) :
- Modifier dans la base de données source (ex: Apogée) la vue `SYGAL_DOCTORANT` pour ajouter la
colonne.
- Modifier la vue `V_SYGAL_DOCTORANT` pour ajouter la nouvelle colonne.
- Modifier la vue `SYGAL_DOCTORANT` pour ajouter la nouvelle colonne, exemple :
`alter table SYGAL_DOCTORANT add INE VARCHAR(20);`
- Dans les sources PHP :
- Mettre à jour le mapping Doctorant dans le fichier
`module/ImportData/src/V1/Entity/Db/Mapping/ImportData.V1.Entity.Db.Doctorant.dcm.xml`
- Mettre à jour l'entité Doctorant dans le fichier
- Ajouter la nouvelle propriété `$ine` ainsi que son getter associé `getIne()` dans la classe d'entité
`module/ImportData/src/V1/Entity/Db/Doctorant.php`
NB: pas besoin d'accesseurs, les colonnes étant découvertes automatiquement
via le mapping.
NB: pas besoin de setter puisqu'il s'agit d'une vue en base de données.
- Via l'interface graphique d'admin Apigility
- Lancer le web service dans Docker :
`docker-compose up sygal-import-ws`
- Passer en mode développement :
`docker-compose exec sygal-import-ws vendor/bin/zf-development-mode enable`
- Ouvrir l'interface d'admin dans un navigateur :
`https://localhost:8443`
NB: le numéro de port dépend de la config `docker-compose.yml`.
- Autoriser l'interface d'admin à écrire dans les fichiers de config
du web service :
`sudo chown -R www-data:ww-data module/ImportData/config`
- Sélectionner le service "Doctorant" et aller dans l'onglet "Fields"
pour ajouter le champ `ine`.
- Rétablir les autorisations d'accès au fichiers :
`sudo chown -R gauthierb:gauthierb module/ImportData/config`
- Ne pas oublier de désactiver le mode développement :
`docker-compose exec sygal-import-ws vendor/bin/zf-development-mode disable`
### Tests
- En ligne de commande :
- Lancer si besoin le web service dans Docker :
`docker-compose up sygal-import-ws`
- Lancer le script PHP de remplissage des tables `SYGAL_*` à partir des vues `V_SYGAL_*` :
`docker-compose exec sygal-import-ws php public/index.php update-service-tables --services=these --verbose`
- Vérifier que le nouveau champ figure dans la réponse du web service, ex :
`curl --insecure --header "Accept: application/json" --header "Authorization: Basic c3lnYWwtYXBwOmF6ZXJ0eQ==" https://localhost:8443/doctorant`
......
Version 1.3.2
=============
Sources PHP
-----------
Sur le serveur, placez-vous dans le répertoire du web service (sans doute `/var/www/sygal-import-ws`)
puis lancez les commandes suivantes pour installer la nouvelle version :
```bash
git fetch && git fetch --tags && git checkout --force 1.3.2 && bash install.sh
```
Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
- php7.0-fpm : `service php7.0-fpm reload`
- apache2-mod-php7.0 : `service apache2 reload`
Base de données
---------------
### Dates d'abandon et de transfert des thèses
Il faut corriger la vue `V_SYGAL_THESE` ainsi que la table `SYGAL_THESE` pour inclure ces 2 dates.
#### Apogée
- Voici le nouveau script de la vue `V_SYGAL_THESE` :
```sql
create or replace view V_SYGAL_THESE as
with inscription_administrative as (
select distinct
ths.cod_ind,
iae.cod_dip,
iae.cod_vrs_vdi
from these_hdr_sout ths
join ins_adm_etp iae on iae.cod_ind = ths.cod_ind and ( iae.cod_dip, iae.cod_vrs_vdi ) in ( ( ths.cod_dip, ths.cod_vrs_vdi ), ( ths.cod_dip_anc, ths.cod_vrs_vdi_anc ) )
join diplome dip on dip.cod_dip = iae.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
where ths.cod_ths_trv = '1' -- Exclusion des travaux
and iae.eta_iae = 'E' -- Inscription administrative non annulee
and iae.eta_pmt_iae = 'P' -- Inscription administrative payee
and dip.cod_tpd_etb in ( '39', '40' )
and tpd.eta_ths_hdr_drt = 'T' -- Inscription en these
and tpd.tem_sante = 'N' -- Exclusion des theses d exercice
),
hierarchie_structures as (
select
cod_cmp_inf,
cod_cmp_sup
from cmp_cmp
where connect_by_isleaf = 1
connect by prior cod_cmp_sup = cod_cmp_inf
),
ancienne_these as (
select distinct
cod_ind,
cod_dip_anc,
cod_vrs_vdi_anc,
'A' eta_ths
from these_hdr_sout
where cod_ths_trv = '1'
and cod_dip_anc is not null
)
select
'apogee' as source_id, -- Id de la source
---------- Enregistrement de la these --------
ths.cod_ths as id, -- Identifiant de la these
case when ths.eta_ths = 'S' and nvl ( ths.dat_sou_ths, sysdate + 1 ) > sysdate
then 'E' else ths.eta_ths end eta_ths, -- Etat de la these (E=En cours, A=Abandonnee, S=Soutenue, U=Transferee)
ind.cod_etu as doctorant_id, -- Identifiant du doctorant
ths.cod_dis, -- Code discipline
dis.lib_int1_dis, -- Libellé discipline
ths.lib_ths, -- Titre de la these
ths.cod_lng, -- Code langue etrangere du titre
ths.dat_deb_ths, -- Date de 1ere inscription
ths.dat_abandon, -- Date d'abandon
ths.dat_transfert_dep, -- Date de transfert
edo.cod_nat_edo as ecole_doct_id, -- Identifiant de l'ecole doctorale
ths.cod_eqr as unite_rech_id, -- Identifiant de l'unité de recherche principale
----------- Cotutelle ----------
pay.lib_pay, -- Denomination pays de cotutelle
nvl ( etb.lib_web_etb, etb.lib_etb ) lib_etb_cot, -- Denomination etablissement de cotutelle
ths.tem_avenant, -- Avenant a la convention de cotutelle (O/N)
------- Organisation de la soutenance ------
ths.dat_prev_sou, -- Date previsionnelle de soutenance
ths.tem_sou_aut_ths, -- Soutenance autorisee (O/N/null)
ths.dat_aut_sou_ths, -- Date d autorisation de soutenance
ths.dat_sou_ths, -- Date de soutenance de la these
---------- Confidentialite --------
ths.dat_fin_cfd_ths, -- Date de fin de confidentialite de la these
---------- Jury et resultats --------
tre.cod_neg_tre, -- Resultat positif (1) ou non (0)
ths.eta_rpd_ths, -- Reproduction de la these ( O=Oui / C=Oui avec corrections / N=Non )
decode(ths.eta_rpd_ths,
'N', 'obligatoire',
'C', 'facultative',
null) as correction_possible -- Témoin de corrections attendues
from inscription_administrative iae
join individu ind on ind.cod_ind = iae.cod_ind
join version_diplome vdi on vdi.cod_dip = iae.cod_dip and vdi.cod_vrs_vdi = iae.cod_vrs_vdi
join these_hdr_sout ths on ths.cod_ind = iae.cod_ind and ths.cod_dip = iae.cod_dip and ths.cod_vrs_vdi = iae.cod_vrs_vdi
left join ancienne_these anc on anc.cod_ind = ths.cod_ind and anc.cod_dip_anc = ths.cod_dip and anc.cod_vrs_vdi_anc = ths.cod_vrs_vdi and anc.eta_ths = ths.eta_ths
left join annee_uni ans on ans.cod_anu = ths.daa_fin_ths
left join ecole_doctorale edo on edo.cod_edo = ths.cod_edo
left join secteur_rch ser on ser.cod_ser = ths.cod_ser
left join equipe_rch eqr on eqr.cod_eqr = ths.cod_eqr
left join resultat_vdi rvi on rvi.cod_ind = iae.cod_ind and rvi.cod_dip = iae.cod_dip and rvi.cod_vrs_vdi = iae.cod_vrs_vdi and rvi.cod_ses = '0' and rvi.cod_adm = '1' and rvi.cod_tre is not null
left join annee_uni anr on anr.cod_anu = rvi.cod_anu
left join typ_resultat tre on tre.cod_tre = rvi.cod_tre
left join mention men on men.cod_men = rvi.cod_men
left join hierarchie_structures ccm on ccm.cod_cmp_inf = ths.cod_cmp
left join composante cmp on cmp.cod_cmp = nvl ( ccm.cod_cmp_sup, ths.cod_cmp )
left join diplome_sise dis on dis.cod_dis = ths.cod_dis
left join etablissement etb on etb.cod_etb = ths.cod_etb
left join pays pay on pay.cod_pay = ths.cod_pay
left join etablissement sou on sou.cod_etb = ths.cod_etb_sou
left join etablissement ori on ori.cod_etb = ths.cod_etb_origine
left join langue lng on lng.cod_lng = ths.cod_lng
where
ths.cod_ths_trv = '1' and -- Exclusion des travaux
anc.cod_dip_anc is null
/
```
- Et voici de quoi mettre à jour la table `SYGAL_THESE` :
```sql
alter table SYGAL_THESE add DAT_ABANDON DATE
/
alter table SYGAL_THESE add DAT_TRANSFERT_DEP DATE
/
```
#### Physalis
- Concernant la vue `V_SYGAL_THESE`, les colonnes à ajouter doivent se nommer `DAT_ABANDON` et `DAT_TRANSFERT_DEP`.
- Et voici de quoi mettre à jour la table `SYGAL_THESE` :
```sql
alter table SYGAL_THESE add DAT_ABANDON DATE