Skip to content

Instantly share code, notes, and snippets.

@dattaz
Last active October 19, 2016 16:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dattaz/18c26e3ce4c4e2ff62087367f7395d2d to your computer and use it in GitHub Desktop.
Save dattaz/18c26e3ce4c4e2ff62087367f7395d2d to your computer and use it in GitHub Desktop.
-- Génération automatique de classements aléatoires en production, pour les FNS
-- ============================================================================
FUNCTION gen_class_alea_V1_relatif_grp(
o_etablissement_accueil_ins IN VARCHAR2,
o_code_confidentiel_inscription IN NUMBER,
o_c_gp_cod IN NUMBER,
o_g_tg_cod IN NUMBER,
login IN VARCHAR2,
type_login IN NUMBER,
mode_dev IN NUMBER,
confirm IN NUMBER,
saio IN NUMBER,
nip IN VARCHAR2,
indic IN NUMBER,
mess_err OUT VARCHAR2,
mess_aff OUT VARCHAR2
)
RETURN NUMBER IS
retour NUMBER;
X VARCHAR2(2);
dummy NUMBER;
dummy2 NUMBER;
l_c_gp_flg_sel c_grp.c_gp_flg_sel%TYPE;
l_g_tg_cod c_grp.g_tg_cod%TYPE;
l_c_gp_eta_cla c_grp.c_gp_eta_cla%TYPE;
l_g_flh_sel sp_g_tri_ins.g_flh_sel%TYPE;
l_g_fr_reg_for g_for.g_fr_reg_for%TYPE;
l_etablissement_accueil_ges g_tri_ins.etablissement_accueil_ges%TYPE;
l_c_ja_cod c_jur_adm.c_ja_cod%TYPE;
l_c_tj_cod c_jur_adm.c_tj_cod%TYPE;
i NUMBER;
IS_prod NUMBER;
l_six_voe NUMBER;
UNIQUE_CONSTRAINT EXCEPTION;
PRAGMA EXCEPTION_INIT (UNIQUE_CONSTRAINT, -00001);
-- classement aléatoire sur voeu 1 groupé relatif
CURSOR classement_aleatoire_efe IS
-- on traite d'abord les candidats AEFE s'il y en a
SELECT c.code_inscription_candidat,
a_ve_ord_vg_rel, -- Ordre du voeu avec voeux groupés relatifs licence
a_ve_ord_aff, -- Ordre du voeu avec voeux groupé relatif licence et tous les autres voeux
a_vg_ord, -- Ordre du sous-voeu dans le voeu groupé
DBMS_RANDOM.value(1,999999),
i.i_ep_cod
FROM g_can c, i_ins i, a_rec r, a_voe v
WHERE i.code_confidentiel_inscription=o_code_confidentiel_inscription
AND g_gf_cod=o_c_gp_cod
AND i.code_inscription_candidat=c.code_inscription_candidat
AND c.g_ic_cod > 0
AND NVL(g_cn_flg_aefe, 0)=1 -- Bac EFE
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet)
AND i.i_is_val=1 -- non encore classé
AND NOT EXISTS (SELECT 1 FROM c_can_grp
WHERE i.code_inscription_candidat=code_inscription_candidat
AND i.g_gf_cod=c_gp_cod
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC
AND i.code_confidentiel_inscription=r.code_confidentiel_inscription
AND c.code_inscription_candidat=v.code_inscription_candidat
AND r.g_ta_cod=v.g_ta_cod
UNION
-- les candidats EFE qui n'ont au final pas classé la formation dans leur liste ordonnée. Ils sont classé, mais en dernier.
SELECT c.code_inscription_candidat,
0,
0,
0,
DBMS_RANDOM.value(1,999999),
i.i_ep_cod
FROM g_can c, i_ins i, a_rec r
WHERE i.code_confidentiel_inscription=o_code_confidentiel_inscription
AND g_gf_cod=o_c_gp_cod
AND i.code_inscription_candidat=c.code_inscription_candidat
AND c.g_ic_cod > 0
AND NVL(g_cn_flg_aefe, 0)=1 -- BaC EFE
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet)
AND i.i_is_val=1 -- non encore classé
-- non encore classé
AND NOT EXISTS (SELECT 1 FROM c_can_grp
WHERE i.code_inscription_candidat=code_inscription_candidat
AND i.g_gf_cod=c_gp_cod
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC
AND i.code_confidentiel_inscription=r.code_confidentiel_inscription
AND NOT EXISTS (SELECT 1 FROM a_voe v WHERE c.code_inscription_candidat=v.code_inscription_candidat AND r.g_ta_cod=v.g_ta_cod)
ORDER BY 2, 3, 4, 5;
CURSOR class_aleatoire_autres_cddts IS
-- les candidats non classés par la requête ci-dessus : les autre bac que EEE
SELECT c.code_inscription_candidat,
DECODE(l_six_voe, 1, six_voeu_L1(c.code_inscription_candidat, g_aa_cod_bac_int, g_cn_flg_int_aca, o_g_tg_cod), 0),
a_ve_ord_vg_rel, -- Ordre du voeu avec voeux groupés relatifs licence
a_ve_ord_aff, -- Ordre du voeu avec Voeux groupé relatif licence et tous les autres voeux
a_vg_ord, -- Ordre du sous-voeu dans le voeu groupé
DBMS_RANDOM.value(1,999999),
i.i_ep_cod,
i.i_is_dip_val -- Pour ceux-ci on prend en plus en compte la validité du diplôme
FROM g_can c, i_ins i, a_rec r, a_voe v
WHERE i.code_confidentiel_inscription=o_code_confidentiel_inscription
AND i.g_gf_cod=o_c_gp_cod
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet)
AND i.code_inscription_candidat=c.code_inscription_candidat
-- TODO2016 => Traiter les groupes néo-réeo ensemble différement (voir correction_classements_neo-reo.sql dans exploit/admissions/simulation/pb ponctuels)
AND c.g_ic_cod > 0
AND i.i_is_val=1
-- non encore classé
AND NOT EXISTS (SELECT 1 FROM c_can_grp
WHERE i.code_inscription_candidat=code_inscription_candidat
AND i.g_gf_cod=c_gp_cod
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC
AND i.code_confidentiel_inscription=r.code_confidentiel_inscription
AND c.code_inscription_candidat=v.code_inscription_candidat
AND r.g_ta_cod=v.g_ta_cod
UNION
-- les candidats qui n'ont au final pas classé la formation dans leur liste ordonnée. Ils sont classé, mais en dernier.
SELECT c.code_inscription_candidat,
0,
0,
0,
0,
DBMS_RANDOM.value(1,999999),
i.i_ep_cod,
i.i_is_dip_val -- Pour ceux-ci on prend en plus en compte la validité du diplôme
FROM g_can c, i_ins i, a_rec r
WHERE i.code_confidentiel_inscription=o_code_confidentiel_inscription
AND i.g_gf_cod=o_c_gp_cod
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet)
AND i.code_inscription_candidat=c.code_inscription_candidat
AND c.g_ic_cod > 0
AND i.i_is_val=1
-- non encore classé
AND NOT EXISTS (SELECT 1 FROM c_can_grp
WHERE i.code_inscription_candidat=code_inscription_candidat
AND i.g_gf_cod=c_gp_cod
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC
AND i.code_confidentiel_inscription=r.code_confidentiel_inscription
AND NOT EXISTS (SELECT 1 FROM a_voe v WHERE c.code_inscription_candidat=v.code_inscription_candidat AND r.g_ta_cod=v.g_ta_cod)
ORDER BY 2 desc, 3, 4, 5, 6;
BEGIN
-- par défaut, on est pas en prod
IS_prod:=0;
-- On vérifie que si on force un classement, on n'est pas en base de prod
X:='01';
BEGIN
SELECT DISTINCT 1 INTO dummy
FROM all_catalog
WHERE OWNER IN ('XXXXXX');
-- on est en prod
IS_prod:=1;
-- on ne laisse passer qu'en indic = 10
IF NVL(indic, 0) NOT IN (10)
THEN mess_aff:='On ne peut forcer un classement sur la base d''exploitation.',
ROLLBACK;
RETURN 1;
END IF;
EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
END;
mess_aff:= 'Problème d''accès aux données, veuillez vous reconnecter ultérieurement.';
-- On vérifie si le groupe est issu d''une formation de type IDF 2, 3, 5 ou 6 et s'il concerné par des néo d'IDF
-- alors, on utilisera les six voeux dans le classement sur ordre des voeux
BEGIN
Х:='02';
SELECT 1
INTO l_six_voe
FROM g_tri_ins ti
WHERE code_confidentiel_inscription=o_code_confidentiel_inscription
AND NVL(g_ti_flg_rec_idf, 0) IN (2, 3, 5, 6)
AND o_g_tg_cod IN (21, 25, 26, 41, 45, 46);
EXCEPTION
WHEN NO_DATA_FOUND
THEN l_six_voe:=0; -- pour les autres groupes, on n'utilise pas les 6 voeux
END;
X:='03';
-- on vérifie que le classement ne soit pas déjà passé (pas de candidats classés dans c_can_grp)
BEGIN
-- Si le groupe est non sélectif, aucun candidat ne doit avoir été traité
SELECT DISTINCT 1
INTO dummy
FROM c_can_grp cg, c_grp g
WHERE g.c_gp_cod=o_c_gp_cod
AND g.c_gp_cod=cg.c_gp_cod
AND NVL(c_gp_flg_sel, 0)=0
UNION
-- Si le groupe est sélecif ou à pré-requis, on peut avoir des Candidats NC ou AC
SELECT DISTINCT 1
FROM c_can_grp cg, c_grp g
WHERE g.c_gp_cod=o_c_gp_cod
AND g.c_gp_cod=cg.c_gp_cod
AND NVL(c_gp_flg_sel, 0) IN (1, 2)
AND i_ip_cod NOT IN (4, 6);
mess_aff='Un classement a déjà été saisi pour le groupe de cette formation :'
||o_etablissement_accueil_ins||','||o_code_confidentiel_inscription||','|| o_c_gp_cod;
ROLLBACK;
RETURN 1;
EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- ok
END;
-- c'est ok, on va générer. On commence par récupérer des infos en base
BEGIN
X:='04';
SELECT g_tg_cod, c_gp_flg_sel,
etablissement_accueil_ges, ja.c_ja_cod, c_tj_cod,
NVL(g_ti_flh_sel, g_fr_flg_sel), c.gp_eta_cla
INTO l_g_tg_cod, l_c_gp_flg_sel,
l_etablissement_accueil_ges, l_c_ja_cod, l_c_tj_cod,
l_g_flh_sel, l_c_gp_eta_cla
FROM g_for fr, g_tri_ins ti, c_jur_adm ja, c_grp gp
WHERE ti.code_confidentiel_inscription=o_code_confidentiel_inscription
AND ti.fliere_etablissement_accueil_ins=fr.fliere_etablissement_accueil
AND ti.code_confidentiel_inscription=ja.code_confidentiel_inscription
AND ja.c_ja_cod=gp.c_ja_cod
AND gp.c_gp_cod=o_c_gp_cod;
EXCEPTION
WHEN NO_DATA_FOUND
THEN mess_aff:='Erreur de traitement, la ligne groupe n''existe pas : c_gp_cod : '
|| o_c_gp Cod;
ROLLBACK;
RETURN 1;
END;
-- on vérifie les Conditions de traitement du groupe
IF IS_prod=0 -- Base de test
OR -- Ou
-- en prod pour les classements formation non sélectives ou les AEFE
(IS_prod=1 AND indic=10 AND l_g_flh_sel=0)
THEN NULL; -- on laisse passer. Dans tous les autre cas, c'est une erreur.
ELSE mess_aff='On ne peut traiter ce type de classement aléatoire dans ces conditions :
'||
'ls_prod : ' || IS_prod || ', indic : ' || indic || 'Flag Sel : '|| l_c_gp_flg_sel;
ROLLBACK;
RETURN 1;
END IF;
-- on vérifie l'état de pointage des dossiers sion est en prod, on est obligé d'accepter
-- des dossiers non reçus, pour les vérifs de diplômes
X:='05';
SELECT COUNT(*) INTO dummy
FROM i_ins i
WHERE code_confidentiel_inscription=o_code_confidentiel_inscription
AND g_gf_cod=o_c_gp_cod
AND i_is_val=1
AND i_ep_cod NOT IN (0, 2, 3, 7);
IF dummy > 0
THEN mess_aff:='Pb, des dossiers ne sont pas pointés : étab :'
|| o_etablissement_accueil_ins || ', for :' || o_code_confidentiel_inscription || ', grp : ' || o_c_gp_cod;
ROLLBACK;
RETURN 1;
END IF;
i:=1;
X:='61';
FOR c_rec IN classement_aleatoire_efe
LOOP BEGIN
INSERT INTO c_can_grp(
code_inscription_candidat, c_gp_cod,
i_ip_cod, c_cg_ran)
VALUES (
c_rec.code_inscription_candidat, o_c_gp_cod,
5, i);
EXCEPTION -- Si le candidat est déjà indiqué à classer, on met à jour le i_ip_cod et le rang sur la ligne existante
WHEN UNIQUE_CONSTRAINT
THEN
X:='07';
UPDATE c_can_grp
SET i_ip_cod=5,
c_cg_ran=i
WHERE code_inscription_candidat=c_rec.code_inscription_candidat
AND c_gp_cod=o_c_gp_cod
AND i_ip_cod=6;
IF SQL%ROWCOUNT!=1
THEN mess_err:='pk_generation_classement.gen_class_alea_V1_relatif_grp
X : (' || Х || ')'
||'Erreur traitement d''un candidat AC pour l''étab'
|| o_etablissement_accueil_ins ||' et la formation '|| o_code_confidentiel_inscription||':'|| o_c_gp_cod ||', le candidat'||c_rec.code_inscription_candidat
||' et le groupe : '||o_c_gp_cod||', rg :'||i;
ROLLBACK;
RETURN -1;
END IF;
END;
i:= i+1;
END LOOP;
X:='08';
FOR c_rec IN class_aleatoire_autres_cddts
LOOP -- diplôme non validé => non classé
IF c_rec.i_is_dip_val=1
THEN BEGIN
INSERT INTO c_can_grp (
code_inscription_candidat, c_gp_cod,
i_ip_cod, c_cg_ran)
VALUES ( c_rec.code_inscription_candidat, o_c_gp_cod,4,NULL );
EXCEPTION -- Si le candidat est déjà non classé, on ne met à jour
WHEN UNIQUE_CONSTRAINT
THEN NULL;
END;
ELSE
BEGIN
Х:='09';
INSERT INTO c_can_grp (code_inscription_candidat, c_gp_cod,
i_ip_cod, c_cg_ran)
VALUES (c_rec.code_inscription_candidat, o_c_gp_cod,5, i);
EXCEPTION -- Si le candidat est déjà à classer, on ne met à jour
WHEN UNIQUE_CONSTRAINT
THEN X:='10';
UPDATE c_can_grp
SET i_ip_cod=5,
c_cg_ran=i
WHERE code_inscription_candidat=c_rec.code_inscription_candidat
AND c_gp_cod=o_c_gp_cod
AND i_ip_cod=6;
IF SOL%ROWCOUNT!=1
THEN
mess_err:='pk_generation_classement.gen_class_alea_V1_relatif_grp X: ('||X||')'
||'Erreur traitement d''un candidat AC pour l''étab'
|| o_etablissement_accueil_ins||' et la formation
'|| o_code_confidentiel_inscription||': ' ||o_C_gp_cod||', le candidat ' || c_rec.g_Cn_Cod
||'et le groupe : '||o_c_gp_cod||', rg:'||i;
ROLLBACK;
RETURN -1;
END IF;
END;
i:=i+1;
END IF;
END LOOP;
-- le classement est marqué terminé
Х:='11';
retour:=pk_new_classement_commun.MAJ_etat_classement(
l_etablissement_accueil_ges, o_etablissement_accueil_ins, o_code_confidentiel_inscription,
l_c_ja_cod, l_c_tj_cod, o_c_gp_cod,
2, 5,
login, type_login, mode_dev,
confirm, saio, niр,
0, indic,
mess_err, mess_aff);
IF retour!=0
THEN ROLLBACK;
RETURN retour;
END IF;
-- On vérifie que le classement soit valide. la Trace est mise par cette PS
X:='12';
retour:=pk_new_classement_commun.valid_classement_def(
l_etablissement_accueil_ges, o_etablissement_accueil_ins, o_code_confidentiel_inscription,
l_c_ja_cod, l_c_tj_cod, o_c_gp_cod,
5,
login, type_login, mode_dev,
confirm, saio, niр,
0, indic,
mess_err, mess_aff);
IF retour!=0
THEN ROLLBACK;
RETURN retour;
END IF;
X:='13';
retour:=pk_new_classement_commun.valid_classement_formation(
l_etablissement_accueil_ges, o_etablissement_accueil_ins, o_code_confidentiel_inscription, 5,
login, type_login, mode_dev,
confirm, saio, niр,
0, indic,
mess_err, mess_aff);
IF retour!=0
THEN ROLLBACK;
RETURN retour;
END IF;
-- on indique que le classement est fait de manière automatique
-- et on gère le cas particulier des AC/NC eta_cla passe de 3 à 4
X:='14';
UPDATE c_grp SET c_gp_flg_cla_oto=1,
c_gp_eta_cla=DECODE(l_c_gp_eta_cla, 3, 4, c_gp_eta_cla)
WHERE c_gp_cod=o_c_gp_cod
AND c_gp_eta_cla=2;
COMMIT;
RETURN 0;
EXCEPTION
WHEN OTHERS
THEN mess_err:='pk_generation_classement.gen_class_alea_V1_relatif_grp X: ('||X||')'
||'Erreur ORACLE'||TO_CHAR(sqlcode)||''||sqlerrm||' pour l''étab'
||o_etablissement_accueil_ins||' et la formation'|| o_code_confidentiel_inscription||': '||o_c_gp_cod;
ROLLBACK;
RETURN -9;
END gen_class_alea_V1_relatif_grp;
#Attention en exécutant ce script le nom des varaible va changer, AINSI que le nom des champs de la base de données, donc le code générer je pourrais pas servir sur une base type.
#La liste provient de https://github.com/jeantil/admission_post_bac/blob/master/src/variables.txt qui est un extrait de http://www.simulation-apb.fr/ si vous savez pas trouve a quoi correspond les champs en dessous, faite la procédure d'inscription et les "name" des formulaire html correspond a ces variables
#Usage : cat src/apb.sql | sed -f nom_variable_correct.sed
s/b_oe_cod/numero_inscription_bac/g # numero inscription au BAC (n° OCEAN)
s/b_tm_cod_bac/option_bac/g # option du bac
s/b_tm_cod/option_de_classe_suivie/g # option de classe suivie
s/g_cn_ad1/adresse/g # coordonnées adresse
s/g_cn_ad2/adresse2/g # coordonnées adresse2
s/g_cn_ad3/adresse3/g # coordonnées adresse3
s/g_cn_ann_bac/annee_obtention_bac/g # année d'obtention
s/g_cn_aut_etb_com/ville_etablissement/g # ville établissement
s/g_cn_aut_etb_for/initule_formation/g# Intitulé de la formation
s/g_cn_aut_etb/etablissement/g # établissement
s/g_cn_bac/boc_ou_diplome_similaire_obtenue_ou_prepare/g # Préparez-vous ou avez-vous obtenu un baccalauréat français ou un diplôme équivalent
s/g_cn_cod_frm/code_inscription_candidat/g # code du candidat inscription
s/g_cn_cod_pos/code_postal/g # code postal
s/g_cn_cod/code_inscription_candidat/g # code du candidat inscription
s/g_cn_com code/commune_de_residence/g # commune
s/g_cn_com_nai/commune_de_naissance/g # commune de naissance
s/g_cn_det_sco/detail_scolarite/g # détail scolarité
s/g_cn_ech_brs/echelon_bourse/g # Echelon
s/g_cn_mel/email/g # adresse e-mail
s/g_cn_moi_bac/mois_obtention_bac_ou_similaire/g # Mois et
s/g_cn_nat/nationalite_française/g # nationalité française ?
s/g_cn_nbr_par/nb_enfants_charge_famille/g # nombre de vos frères et soeurs encore à la charge de votre famille
s/g_cn_nec/nb_enfants_dans_superieur/g # nombre de frères et soeurs scolarisés dans l'enseignement supérieur
s/g_cn_rl1_mel/email_representant_legaux1/g # email
s/g_cn_rl1_tel/telephone_representant_legaux1/g # téléphone
s/g_cn_rvn_brt/revenu_brut_global/g # Revenu brut global
s/g_cn_tel_por/numero_portable/g # portable
s/g_cn_tel/numero_telephone/g # telephone
s/g_dp_cod_aut_etb/departement_etablissement_actuel/g # département établissement #TODO c'est bizarre les 2 depatement etablissement
s/g_dp_cod_etb/departement_etablissement/g # département éttablissement
s/g_dp_cod/departement_naissance/g # global département de naissance
s/g_ea_cod/etablissement_accueil/g # par établissement
s/g_ea_cod_rec/code_etablissement_actuel/g # recherche de l'établissement par code
s/g_ea_com_rec/commune_etablissement_actuel/g # recherche de l'établissement par commune
s/g_ea_lib_rec/nom_etablissement_actuel/g # recherche de l'établissement par nom
s/g_fr_cod/fliere_etablissement_accueil/g # par filière
s/g_pay_nat/autre_nationalite/g # autre nationalité
s/g_po_cod/profil/g # profil
s/g_py_cod_aut_etb/pays_etablissement_actuel/g # pays établissement
s/g_py_cod_bac/pays_bac_ou_similaire/g # pays bac
s/g_py_cod_nai/pays_de_naissance/g # pays de naissance
s/g_py_lib_ad/pays_de_residence/g # pays
s/g_tc_cod/secteur_etablissement_accueil/g # par secteur
s/g_tf_cod/type_formation_etablissement_accueil/g # par type de formation
s/g_tf_cod/type_formation_actuel/g # type de formation
s/g_ti_cod/code_confidentiel_inscription/g # code confidentiel inscription
s/i_at_cod/type_etablissement_actuel/g # type d'établissement
s/i_ce_lib_1/intitule_epreuve1_bac/g # intitulé épreuve1 bac
s/i_cl_cod_bac/serie_bac/g # serie bac
s/i_cl_cod/serie_terminal/g # série terminale
s/i_cp_cod_rl1/cat_socia_professionnelle_representant_legal1/g # catégorie socio-professionnelle premier représentant légal
s/i_de_cod/diplome/g# diplome
s/i_dm_cod_bac/dominante_bac/g # dominante au bac
s/i_dm_cod/enseignement_obligatoire/g # enseignement obligatoire
s/i_lm_flg_sai_let_1/saisie_lettre_motivation/g # saisie lettre motivation
s/i_lv_cod_7_O/lv1_scolarite/g # langue vivante1
s/i_lv_cod_8_O/lv2_scolarite/g # langue vivante2
s/i_lv_cod_bac_deu/lv2_bac/g # langue vivante 2
s/i_lv_cod_bac_un/lv1_bac/g # langue vivante 1
s/i_mb_cod/mention_bac/g # mention au bac
s/i_ne_cod/niveau_etude/g # niveau d'étude
s/i_sa_flg_sco_fra/scolarite_fr_ou_etrangere/g # Scolarité française ou étrangère ?
s/i_sa_typ_bul/frequence_bulletins_scolaire/g # fréquence des bulletins scolaires
s/i_sp_cod_bac/specialite_bac/g # spécialité
s/not_lib_1/note_epreuve_anticipe_bac/g # note épreuve1 bac
s/res_ad11/adresse_representant_legal1_champs1/g # adresse
s/res_ad21/adresse_representant_legal1_champs2/g
s/res_ad31/adresse_representant_legal1_champs3/g
s/res_bur_dis1/commune_representant_legal1/g # commune
s/res_lp1/lien_parente_representant_legal1/g # lien parenté premier représentant légal
s/res_nom1/nom1_representant_legal1/g # nom premier représentant légal
s/res_nom2/nom2_representant_legal1/g #
s/res_pay1/pays_residence_representant_legal1/g # pays
s/res_pos1/code_postal_representant_legal1/g # code postal
s/res_pre1/prenom_representant_legal1/g # prenom premier représentant légal
s/select_boursier/boursier/g # boursier du gouvernement français ?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment