Projet

Général

Profil

Tâche #37140

Scénario #36963: Module Thot : intégrer les contributions de Aix-Marseille

Etude

Ajouté par Emmanuel GARETTE il y a 5 mois. Mis à jour il y a 4 mois.

Statut:
À valider
Priorité:
Normal
Assigné à:
Version cible:
Début:
01/10/2022
Echéance:
% réalisé:

0%

Restant à faire (heures):

Historique

#1 Mis à jour par Emmanuel GARETTE il y a 5 mois

  • Statut changé de Nouveau à En cours

#2 Mis à jour par Emmanuel GARETTE il y a 5 mois

Pour retrouver le code d'origine d'EOLE il faut a priori faire :

git checkout 7ad4ddaea9984263d7fb2454ab66af515b6aae3e

Le problème principal des modifications c'est qu'il y a plusieurs besoins mélangés et qu'il doit, possiblement, y avoir des modifications pour des besoins interne possiblement pas à généraliser.

Voici la liste des modifications dont j'ai un doute :

1/ génération de login provisoire

#______________________________________________________________________________
# P.ROY : génération d'un login provisoire projet ATHOS
#______________________________________________________________________________
def gen_user_login_athos(surname, givenname, uid):
    """ 
    génération du login
    le login est de type 'prenom.nomXX'
    """ 
    givenname = normalize(givenname)
    surname = normalize(surname)
    #
    login = "" 
    if surname is not None or surname != "":
        if (givenname is not None and givenname.strip() not in ['-', '_', '']
            and len(givenname + surname) <= 48):
            # Concatenation must be lower than 48 because we add 2 digits
            login = givenname.lower() + '.' + surname.lower()
        else:
            login = surname.lower()
        login = remove_accents(login).replace("'", "").replace(" ", "").replace("-", "").replace("_", "")+str(uid)[-3:]
    return login

ajouté si variable format_projet_athos à "oui"

2/ exclusion de clé supplémentaire

    fixmekeys = ['ENTEleveParents', 'ENTEleveAutoriteParentale',
                 'ENTElevePersRelEleve1', 'ENTEleveQualitePersRelEleve1',
                 'ENTElevePersRelEleve2', 'ENTEleveQualitePersRelEleve2',
                 'ENTPersonStructRattach', 'ENTEleveBoursier',
                 'ENTEleveRegime', 'ENTEleveTransport',
                 'ENTEleveCodeEnseignements', 'ENTEleveINE',
                 'ENTElevePersRelEleve', 'ENTPersonAutresPrenoms']

Il retire des attributs qui ont pourtant été spécifiquement chargés.

3/

Une partie des traitements sur les ensignants semblent ressembler à :

    if dbtype == "mongodb":
        etab_buffer = {}
        subject_buffer = {}
        _replace_id_by_reference(userdata, "ENTPersonStructRattach", "etablissement", "ENTStructureJointure", etab_buffer)
        if usertype == 'enseignant':
            for key in ['ENTAuxEnsMatiereEnseignEtab', 'ENTAuxEnsClasses', 'ENTAuxEnsMEF', 'ENTAuxEnsClassesPrincipal', 'ENTAuxEnsGroupes']:
                _parse_etab_values(key, userdata, etab_buffer)
            if 'ENTAuxEnsDisciplinesPoste' in userdata:
                userdata['ENTAuxEnsDisciplinesPoste'] = _parse_attrib_split(userdata['ENTAuxEnsDisciplinesPoste'].split('$'), 0)
            if 'ENTAuxEnsCategoDiscipline' in userdata:
                userdata['ENTAuxEnsCategoDiscipline'] = _parse_attrib_split(userdata['ENTAuxEnsCategoDiscipline'], 1)
            if "ENTAuxEnsClassesMatieres" in userdata:
                userdata["ENTAuxEnsClassesMatieres"] = _parse_ens_class_subjects(userdata["ENTAuxEnsClassesMatieres"], etab_buffer, subject_buffer)
            if "ENTAuxEnsGroupesMatieres" in userdata:
                userdata["ENTAuxEnsGroupesMatieres"] = _parse_ens_class_subjects(userdata["ENTAuxEnsGroupesMatieres"], etab_buffer, subject_buffer, 'group')
        if 'ENTPersonFonctions' in userdata:
            userdata['ENTPersonFonctions'] = _parse_functions(userdata['ENTPersonFonctions'], etab_buffer)

Equivalent pour les élèves :

        if 'ENTEleveGroupes' in userdata:
            if userdata['ENTEleveGroupes'] == "":
                groups = []
            elif isinstance(userdata['ENTEleveGroupes'], list):
                groups = userdata['ENTEleveGroupes']
            else:
                groups = [userdata['ENTEleveGroupes']]
            userdata['ENTEleveGroupes'] = []
            for group in groups:
                group_name = group.split('$')[1]
                userdata['ENTEleveGroupes'].append(group_name)
        resp_buffer = {}
        for key in ('ENTEleveParents', 'ENTElevePere', 'ENTEleveMere', 'ENTEleveAutoriteParentale'):
            _replace_id_by_reference(userdata, key, "user", "ENTPersonJointure", resp_buffer)
        _replace_id_by_reference(userdata, 'ENTEleveCodeEnseignements', "subject", "ENTMatJointure")

        etab_buffer = {} 
        _replace_id_by_reference(userdata, "ENTPersonStructRattach", "etablissement", "ENTStructureJointure", etab_buffer)
        _parse_etab_values('ENTEleveClasses', userdata, etab_buffer)

Mais il manque cette partie :

        if not dico['ENTEleveEnseignements'] is None:
            ENTEleveEnseignements = []
            for LigneEleveEnseignements in dico['ENTEleveEnseignements'].strip().split('\n'):
                ENTEleveEnseignements.append(EtabRattachUAI['ENTEtablissementUAI']+'$'+LigneEleveEnseignements)

            dico['ENTEleveEnseignements'] = '\n'.join(ENTEleveEnseignements)

Comme on le voit le code est aujourd'hui spécifique à "MongoDB".

Mise en commun du code mongodb + MySQL

4/ Modification spécifique à l'AD

        # On renseigne aussi les groupes dans ENTPersonProfils car le schéma de l'AD n'accepte pas ENTEleveGroupes
        if dico['ENTEleveGroupes'] is None:
            dico["ENTPersonProfils"] = "" 
        else:
            RowPair = False; # on ne renseigne qu'un champ sur 2 (séparés par des $)
            Groupes = []
            for LigneEleveGroupes in dico['ENTEleveGroupes'].strip().split('\n'):
                for RowGrp in LigneEleveGroupes.split('$'):
                    if RowPair:
                        Groupes.append(RowGrp)
                    RowPair = not RowPair
            dico["ENTPersonProfils"] = "$".join(Groupes)

Mise en commun avec l'option format_projet_athos

Dans gen_config : "Post traitement personprofils"

Pour résumer :

Je ne compte pas reprendre 1/ et 2/.
Pour 3/ je propose de le porter sur "Mysql". Est-ce que cela convient ?
Est-ce qu'il faut le faire pour tout le monde ou ajouter une option ?
Pour 4/ a voir si c'est nécessaire

Sur 2.10 uniquement.

#3 Mis à jour par Emmanuel GARETTE il y a 4 mois

Voir la question des "migrations" avec le "split" qu'on ajouterait ici.

Ajouter les numéros de version dans la base pour savoir s'il faut faire une migration des données dans la base.

#4 Mis à jour par Emmanuel GARETTE il y a 4 mois

  • Statut changé de En cours à À valider

Formats disponibles : Atom PDF