diff --git a/app/auth/models.py b/app/auth/models.py index 7e9642ddf..9e0049ac7 100644 --- a/app/auth/models.py +++ b/app/auth/models.py @@ -445,9 +445,10 @@ class User(UserMixin, ScoDocModel): def set_roles(self, roles, dept): "set roles in the given dept" - self.user_roles = [ - UserRole(user=self, role=r, dept=dept) for r in roles if isinstance(r, Role) - ] + self.user_roles = [] + for r in roles: + if isinstance(r, Role): + self.add_role(r, dept) def get_roles(self): "iterator on my roles" diff --git a/app/comp/moy_mod.py b/app/comp/moy_mod.py index cfdea10b0..20d8cb8bc 100644 --- a/app/comp/moy_mod.py +++ b/app/comp/moy_mod.py @@ -541,17 +541,16 @@ def load_evaluations_poids(moduleimpl_id: int) -> tuple[pd.DataFrame, list]: ue_ids = [ue.id for ue in ues] evaluation_ids = [evaluation.id for evaluation in modimpl.evaluations] evals_poids = pd.DataFrame(columns=ue_ids, index=evaluation_ids, dtype=float) - if ( - modimpl.module.module_type == ModuleType.RESSOURCE - or modimpl.module.module_type == ModuleType.SAE - ): + if modimpl.module.module_type in (ModuleType.RESSOURCE, ModuleType.SAE): for ue_poids in EvaluationUEPoids.query.join( EvaluationUEPoids.evaluation ).filter_by(moduleimpl_id=moduleimpl_id): - try: - evals_poids.loc[ue_poids.evaluation_id, ue_poids.ue_id] = ue_poids.poids - except KeyError: - pass # poids vers des UE qui n'existent plus ou sont dans un autre semestre... + if ( + ue_poids.evaluation_id in evals_poids.index + and ue_poids.ue_id in evals_poids.columns + ): + evals_poids.at[ue_poids.evaluation_id, ue_poids.ue_id] = ue_poids.poids + # ignore poids vers des UEs qui n'existent plus ou sont dans un autre semestre... # Initialise poids non enregistrés: default_poids = ( diff --git a/app/comp/moy_ue.py b/app/comp/moy_ue.py index 824f01e8d..0a64928bb 100644 --- a/app/comp/moy_ue.py +++ b/app/comp/moy_ue.py @@ -92,7 +92,7 @@ def df_load_module_coefs(formation_id: int, semestre_idx: int = None) -> pd.Data for mod_coef in query: if mod_coef.module_id in module_coefs_df: - module_coefs_df[mod_coef.module_id][mod_coef.ue_id] = mod_coef.coef + module_coefs_df.at[mod_coef.ue_id, mod_coef.module_id] = mod_coef.coef # silently ignore coefs associated to other modules (ie when module_type is changed) # Initialisation des poids non fixés: @@ -138,14 +138,16 @@ def df_load_modimpl_coefs( ) for mod_coef in mod_coefs: - try: - modimpl_coefs_df.loc[mod_coef.ue_id, mod2impl[mod_coef.module_id]] = ( + if ( + mod_coef.ue_id in modimpl_coefs_df.index + and mod2impl[mod_coef.module_id] in modimpl_coefs_df.columns + ): + modimpl_coefs_df.at[mod_coef.ue_id, mod2impl[mod_coef.module_id]] = ( mod_coef.coef ) - except IndexError: # il peut y avoir en base des coefs sur des modules ou UE - # qui ont depuis été retirés de la formation - pass + # qui ont depuis été retirés de la formation : on ignore ces coefs + # Initialisation des poids non fixés: # 0 pour modules normaux, 1. pour bonus (car par défaut, on veut qu'un bonus agisse # sur toutes les UE) @@ -299,7 +301,11 @@ def compute_ue_moys_apc( ) # Les "dispenses" sont très peu nombreuses et traitées en python: for dispense_ue in dispense_ues: - etud_moy_ue_df[dispense_ue[1]][dispense_ue[0]] = 0.0 + if ( + dispense_ue[0] in etud_moy_ue_df.columns + and dispense_ue[1] in etud_moy_ue_df.index + ): + etud_moy_ue_df.at[dispense_ue[1], dispense_ue[0]] = 0.0 return etud_moy_ue_df