-
-
Save jeantil/1a7c32d87524a2774da3cf80f4c62e50 to your computer and use it in GitHub Desktop.
-- | |
-- le code ci-dessous a a été fortement amélioré par un effor collaboratif sur | |
-- https://github.com/jeantil/admission_post_bac | |
-- Pull requests, issues et contributions wiki sont les bienvenues. | |
-- Une partie du code a été rétro analysé a partir de diverses sources cf https://github.com/jeantil/admission_post_bac/wiki | |
-- | |
FUNCTION gen class alea V1 relatif grp( | |
o_g_ea_cod_ins IN VARCHAR2, | |
o_g_ti_cod 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_g_ea_cod_ges g_tri_ins.g_ea_cod_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; | |
UNIOUE CONSTRAINT EXCEPTION; | |
PRAGMA EXCEPTION_INIT (UNIOUE_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.g_cn_cod, | |
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.iep_cod | |
FROM g_can c, i_ins i, a_rec r, a_voe v | |
WHERE i.g_ti_cod=o_g_ti_cod | |
AND g_gf_cod=o_c_gp_cod | |
AND i.g_cn_cod=c.g_cn_cod | |
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.g_cn_cod=g_cn_cod | |
AND i.g_gf_cod=c_gp_cod | |
AND i_ip_cod IN (4,5)) -- Permet de récupérer les AC | |
AND i.g_ti_cod=r.g_ti_cod | |
AND c.g_cn_cod=v.g_cn_cod | |
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.g_cn_cod, | |
0, | |
0, | |
0, | |
DBMS RANDOM.value(1,999999), | |
i.iep_cod | |
FROM g_can c, i_ins i, a_rec r | |
WHERE i.g_ti_cod=o_g_ti_cod | |
AND g_gf_cod=o_c_gp_cod | |
AND i.g_cn_cod=c.g_cn_cod | |
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.g_cn_cod=g_cn_cod | |
AND i.g_gf_cod=c_gp_cod | |
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC | |
AND i.g_ti_cod=r.g_ti_cod | |
AND NOT EXISTS (SELECT 1 FROM a_voe v WHERE c.g_cn_cod=v.g_cn_cod 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.g_cn_cod, | |
DECODE(l_six_voe, 1, six_voeu_L1(c.g_cn_cod, 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(1999999), | |
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.g_ti_cod=o_g_ti_cod | |
AND i.g_gf_cod=o_c_gp_cod | |
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet) | |
AND i.g_cn_cod=c.g_cn_cod | |
--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.g_cn_cod=g_cn_cod | |
AND i.g_gf_cod=c_gp_cod | |
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC | |
AND i.g_ti_cod=r.g_ti_cod | |
AND c.g_cn_cod=v.g_cn_cod | |
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.g_cn_cod, | |
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.g_ti_cod=o_g_ti_cod | |
AND i.g_gf_cod=o_c_gp_cod | |
AND i_ep_cod IN (2, 3) -- Pointés recu (complet ou incomplet) | |
AND i.g_cn_cod=c.g_cn_cod | |
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.g_cn_cod=g_cn_cod | |
AND i.g_gf_cod=c_gp_cod | |
AND i_ip_cod IN (4, 5)) -- Permet de récupérer les AC | |
AND i.g_ti_cod=r.g_ti_cod | |
AND NOT EXISTS (SELECT 1 FROM a_voe v WHERE c.g_cn_cod=v.g_cn_cod 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 g_ti_cod=o_g_ti_cod | |
AND NVL(g_ti_flg_rec_idf, 0) IN (2, 3, 5, 6) | |
AND o_g_tig_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_g_ea_cod_ins||','||o_g_ti_cod||','|| 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, | |
g_ea_cod_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_g_ea_cod_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.g_ti_cod=o_g_ti_cod | |
AND ti.g_fr_cod_ins=fr.g_fr_cod | |
AND ti.g_ti_cod=ja.g_ti_cod | |
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 g_ti_cod=o_g_ti_cod | |
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_g_ea_cod_ins || ', for :' || o_g_ti_cod || ', 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 ( | |
g Cn Cod, C. gp_Cod, | |
iip Cod, C CE ran) | |
VALUES ( | |
C. rec.g. cn Cod, 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 UNIOUE_CONSTRAINT | |
THEN X:='07'; | |
UPDATE c can grp | |
SET i_ip Cod=5, | |
C Cg ran=i | |
WHEREg Cn cod=c rec.g. cn cod | |
AND C gp Cod=O C. gp Cod | |
AND iip cod=6; | |
IF SOL%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_g_ea_cod_ins ||' et la formation '|| o_g_ti_cod||': | |
'||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 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 ( | |
g_cn_cod, c_gp_cod, | |
i_ip_cod, c_cg_ran) | |
VALUES ( c_rec.g_cn_cod, o_c_gp_cod,4,NULL ); | |
EXCEPTION -- Si le candidat est déjà non classé, on ne met à jour | |
WHEN UNIOUE_CONSTRAINT | |
THEN NULL; | |
END; | |
ELSE | |
BEGIN | |
Х:='09'; | |
INSERT INTO c can grp (g_cn_cod, c_gp_cod, | |
i_ip_cod, c_cg_ran) | |
VALUES (c.rec_g_cn_cod, o_c_gp_cod,5, i); | |
EXCEPTION -- Si le Candidat est déjà à classer, on ne met à jour | |
WHEN UNIOUE_CONSTRAINT | |
THEN X:='10'; | |
UPDATE c_can_grp | |
SET iip Cod=5, | |
C Cg ran=i | |
WHEREg_Cn Cod=c rec.g. cn Cod | |
AND C gp Cod=O C. gp Cod | |
AND iip 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_g_ea_cod_ins||' et la formation | |
'|| o_g_ti_cod||': ' ||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_g_ea_cod_ges, o_g_ea_cod_ins, o_g_ti_cod, | |
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_g_ea_cod_ges, o_g_ea_cod_ins, o_g_ti_cod, | |
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 retourl!=0 | |
THEN ROLLBACK; | |
RETURN retour; | |
END IF; | |
X:='13'; | |
retour:=pk_new_classement_commun.valid_classement_formation( | |
l_g_ea_cod_ges, o_g_ea_cod_ins, o_g_ti_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; | |
-- 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_g_ea_cod_ins||' et la formation'|| og ti Cod||': '||o_c_gp_cod; | |
ROLLBACK; | |
RETURN -9; | |
END gen_class_alea_V1_relatif_grp; | |
hmm y a un wiki sur le github et pour partager du code c'est plus facile :)
CE TROLL PUTAIN
Ya que moi qui trouve qu'il faut être marteau pour faire de l'attribution itérative de ressources (ici des places) directement en SQL ?
C'est assez facile de voir où sont les clés étrangères et les clés primaires des différentes tables ... mais de la à en identifier la structure ça va être fastidieux
On est d'accord qu'ils sont fous
ils ont aussi détourné l'esprit de la demande n'en respectant que la lettre.
Le code livré est partiel:
- pas de définition des tables
- appel a des procédures dont le code n'est pas fourni
- pk_new_classement_commun.valid_classement_def,
- pk_new_classement_commun.MAJ_etat_classement
- pk_new_classement_commun.valid_classement_formation
Attnetion il reste clairement des typos dans le programme le soft d'OCR n'a pas trop aimé le code SQL.
Et le code applicatif, il est où ? Ils sont bien gentils de filer des requêtes SQL au pif comme ça... Mais qui dit lesquelles sont utilisées et à quel moment ? Si ça se trouve le script final n'utilise aucune de ces requêtes.
Coquille ligne 38 : UNIOUE CONSTRAINT EXCEPTION;
au lieu de UNIQUE CONSTRAINT EXCEPTION;
après une lecture très rapide je m’étonne qu’on ne trouve pas de ligne DBMS_RANDOM.seed (j’ai pu passer à coté). Ça m’embête : quand on veut générer des données aléatoires il vaut mieux modifier la graine du générateur avec une donnée susceptible de changer d’un test à l’autre sinon on va générer les mêmes données (soit disant aléatoire) à chaque appel ...
Pour infos, la doc ORACLE sur le sujet : DBMS_RANDOM can be explicitly initialized, but does not need to be initialized before calling the random number generator. It will automatically initialize with the date, userid, and process id if no explicit initialization is performed.
Je rejoins l'avis général concernant la rétro-ingénierie fastidieuse. On dirait un fichier helper.sql qui permet au stagiaire d'affecter les 2000 derniers étudiants car l'application APB a planté avant la fin...
Depuis le code a trouvé une nouvelle maison permettant la collaboration a plusieurs
=> https://github.com/jeantil/admission_post_bac
Sur l'aspect Random, je suis un peu sceptique, les données changent chaque années, alors conserver ou pas la même graine aléatoire, revient un peut au même.
Mais il y a plusieurs choses qui m'interpellent :
1 - Tout d'abord ce code est incomplet. Lorsque l'on livre du code traitant une base de données, il faut livrer sa structure ! Je me vois mal livrer un code SQL chez un client, sans la structure de données (ET avec la doc bien sûr^^) ! Je risquerais fort de me faire jeter, et ce serait tout à fait normal !!!
ex :
FROM g_can c, i_ins i, a_rec r, a_voe v
A quoi correspondent ces tables, quelles sont leurs champs ?
2 - De plus, le code ne permet pas de savoir à quoi correspondent certaines constantes comme :
AND NVL(g_ti_flg_rec_idf, 0) IN (2, 3, 5, 6) AND o_g_tig_cod IN (21, 25, 26, 41, 45,46);
Ha ! L'utilisation des nombres magiques, histoire de dire cherchez toujours vous ne trouverez pas ! Sans la correspondance avec les écrans de saisies destinés aux étudiants, ce code source est incomplet. Ou alors, il faut aussi livrer le code source des écrans de saisie !
Ca représente quoi le 21, le 25, le 26, le 41, le 45, le 46, etc... ???? C'est quoi les autres ?
3 - le code ci dessous semble indiquer qu'il y a certaines conditions d'utilisation de l'algorithme qui font que le classement n'est pas aléatoire. Comment sont réglés ces paramètres ? Les utilisateurs de ce bout de code auraient-ils les moyens de By-Passer certaines fonctionnalités revendiquées par l'éducation nationale ?
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;
En tout cas cette procédure possède plusieurs modes de fonctionnement, ça c'est sûr !
4 - Ce code source met à jour des tables ... Certes, mais quelles sont les procédures d'exploitation des données derrières? Y a-t-il un certain niveau d'accréditation qui permettrait de modifier ces données? Ou encore, une visibilité au delà de la capacité d'accueil des établissement, permettant au corps enseignant d'avoir une marge de manœuvre notamment dans les cas de désistements?
5 - Je cherche pas plus loin, j'aurais un ingé qui me livrerai ça, il le sentirai passer !
En conclusion...
Cette livraison de code source par l'éducation nationale est un GROS FOUTAGE DE GUEULE !
PS : A noter que le code source Python livré dans "comprendre apb", ne correspond pas aux champs de cette procédure SQL ! Rien à voir !
1 - Tout d'abord ce code est incomplet. Lorsque l'on livre du code traitant une base de données, il faut livrer sa structure ! Je me vois mal livrer un code SQL chez un client, sans la structure de données (ET avec la doc bien sûr^^) ! Je risquerais fort de me faire jeter, et ce serait tout à fait normal !!!
Pour répondre à ce commentaire je pense qu'ils ont envoyé le minimum syndical pour montrer qu'ils le font mais le simple fait de l'envoyer comme ça en pdf sans aucune doc technique ou info complémentaire montre clairement qu'ils le faisaient pas avec plaisir et que plus ils pouvaient mettre des bâtons dans les roues plus ils le feraient.
Ensuite j'ai pas tout lu en détail, mais j'ai surtout lu les commentaires du code, en particulier les acronymes. Pour la notification NC, ils parlent sûrement de la Nouvelle Calédonie, tandis que les IDF 2, 3, 5 ou 6 (ligne 177) désigne l'Ile de France, et les chiffres soit la répartition géographique pour que les choix ne soient pas éloignés de l'établissement initial ou une certaine "case sociale" si ce sont des formations avec des profils particuliers, ou des formations spécifiques qui ne se trouvent pas partout.
Pour les néo-réeo, ce sont les candidats qui sont réorientés depuis l'année en cours, et les réOrientés ceux qui le sont depuis plusieurs années. Et il est clairement dans la politique de l'éducation nationale de prioriser les bacheliers et de faire passer après les réorientés.
Par contre vu qu'ils indiquent un TODO2016, il y a des possibilités que ce bout d'algorithme ne soit pas la dernière version, ou alors ils ont oublié de retirer les commentaires ...
le code ci-dessus est obsolete, il a trouvé une nouvelle maison permettant la collaboration a plusieurs
=> https://github.com/jeantil/admission_post_bac
Un gros travail de rétro ingénierie a déjà été fait je vous invite a lire les discussions dans https://github.com/jeantil/admission_post_bac/issues
Bonjour,
Est ce que quelqu'un peut confirmer que le code ci-dessus s'execute avec en paramètre une formation donnée? (Voir variables *flh_sel)
Si oui, y à t'il le code appelant? Dans quel ordre les formations (en tension) sont elles traitées?
Cdlt.
Vu avec l'APB, je propose l'ouverture d'un Wiki de manière à centraliser les infos.
J'ai un serveur dédié sur lequel on peut héberger autant de services que nécessaire. (mailing-list / IRC....)
Je peux m'y mettre ce jour à partir de 19h.