forked from ScoDoc/ScoDoc
Fix assiduite migration
This commit is contained in:
parent
aee58edab1
commit
d86681b268
@ -672,6 +672,13 @@ def migrate_abs_to_assiduites(
|
|||||||
): # migrate-abs-to-assiduites
|
): # migrate-abs-to-assiduites
|
||||||
"""Permet de migrer les absences vers le nouveau module d'assiduités"""
|
"""Permet de migrer les absences vers le nouveau module d'assiduités"""
|
||||||
tools.migrate_abs_to_assiduites(dept, morning, noon, evening)
|
tools.migrate_abs_to_assiduites(dept, morning, noon, evening)
|
||||||
|
# import cProfile
|
||||||
|
# cProfile.runctx(
|
||||||
|
# f"tools.migrate_abs_to_assiduites({dept})",
|
||||||
|
# {"tools": tools},
|
||||||
|
# {},
|
||||||
|
# "migration-nimes",
|
||||||
|
# )
|
||||||
|
|
||||||
|
|
||||||
@app.cli.command()
|
@app.cli.command()
|
||||||
|
@ -32,21 +32,17 @@ from app.scodoc.sco_utils import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class _Merger:
|
|
||||||
"""pour typage"""
|
|
||||||
|
|
||||||
|
|
||||||
class _glob:
|
class _glob:
|
||||||
"""variables globales du script"""
|
"""variables globales du script"""
|
||||||
|
|
||||||
DEBUG: bool = False
|
DEBUG: bool = False
|
||||||
PROBLEMS: dict[int, list[str]] = {}
|
PROBLEMS: dict[int, list[str]] = {}
|
||||||
CURRENT_ETU: list = []
|
DEPT_ETUDIDS: dict[int, Identite] = {}
|
||||||
MODULES: list[tuple[int, int]] = []
|
MODULES: dict[tuple[int, int]] = {}
|
||||||
COMPTE: list[int, int] = []
|
COMPTE: list[int, int] = []
|
||||||
ERR_ETU: list[int] = []
|
ERR_ETU: list[int] = []
|
||||||
MERGER_ASSI: _Merger = None
|
MERGER_ASSI: "_Merger" = None
|
||||||
MERGER_JUST: _Merger = None
|
MERGER_JUST: "_Merger" = None
|
||||||
|
|
||||||
MORNING: time = None
|
MORNING: time = None
|
||||||
NOON: time = None
|
NOON: time = None
|
||||||
@ -64,7 +60,9 @@ class _Merger:
|
|||||||
self.entry_date = abs_.entry_date
|
self.entry_date = abs_.entry_date
|
||||||
|
|
||||||
def merge(self, abs_: Absence) -> bool:
|
def merge(self, abs_: Absence) -> bool:
|
||||||
"""Fusionne les absences"""
|
"""Fusionne les absences.
|
||||||
|
Return False si pas de fusion.
|
||||||
|
"""
|
||||||
|
|
||||||
if self.etudid != abs_.etudid:
|
if self.etudid != abs_.etudid:
|
||||||
return False
|
return False
|
||||||
@ -218,7 +216,7 @@ def migrate_abs_to_assiduites(
|
|||||||
.matin: bool (0:00 -> time_pref | time_pref->23:59:59)
|
.matin: bool (0:00 -> time_pref | time_pref->23:59:59)
|
||||||
.jour : date (jour de l'absence/justificatif)
|
.jour : date (jour de l'absence/justificatif)
|
||||||
.moduleimpl_id: relation -> moduleimpl_id
|
.moduleimpl_id: relation -> moduleimpl_id
|
||||||
description:str -> motif abs / raision justif
|
description:str -> motif abs / raison justif
|
||||||
|
|
||||||
.entry_date: datetime -> timestamp d'entrée de l'abs
|
.entry_date: datetime -> timestamp d'entrée de l'abs
|
||||||
.etudid: relation -> Identite
|
.etudid: relation -> Identite
|
||||||
@ -272,7 +270,7 @@ def migrate_dept(dept_name: str, stats: _Statistics, time_elapsed: Profiler):
|
|||||||
dept: Departement = Departement.query.filter_by(acronym=dept_name).first()
|
dept: Departement = Departement.query.filter_by(acronym=dept_name).first()
|
||||||
|
|
||||||
if dept is None:
|
if dept is None:
|
||||||
return
|
raise ValueError(f"Département inexistant: {dept_name}")
|
||||||
|
|
||||||
etuds_id: list[int] = [etud.id for etud in dept.etudiants]
|
etuds_id: list[int] = [etud.id for etud in dept.etudiants]
|
||||||
absences_query = absences_query.filter(Absence.etudid.in_(etuds_id))
|
absences_query = absences_query.filter(Absence.etudid.in_(etuds_id))
|
||||||
@ -288,8 +286,8 @@ def migrate_dept(dept_name: str, stats: _Statistics, time_elapsed: Profiler):
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
_glob.CURRENT_ETU = []
|
_glob.DEPT_ETUDIDS = {e.id for e in Identite.query.filter_by(dept_id=dept.id)}
|
||||||
_glob.MODULES = []
|
_glob.MODULES = {}
|
||||||
_glob.COMPTE = [0, 0]
|
_glob.COMPTE = [0, 0]
|
||||||
_glob.ERR_ETU = []
|
_glob.ERR_ETU = []
|
||||||
_glob.MERGER_ASSI = None
|
_glob.MERGER_ASSI = None
|
||||||
@ -326,7 +324,9 @@ def migrate_dept(dept_name: str, stats: _Statistics, time_elapsed: Profiler):
|
|||||||
)
|
)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
|
if _glob.MERGER_ASSI is not None:
|
||||||
_glob.MERGER_ASSI.export()
|
_glob.MERGER_ASSI.export()
|
||||||
|
if _glob.MERGER_JUST is not None:
|
||||||
_glob.MERGER_JUST.export()
|
_glob.MERGER_JUST.export()
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
@ -359,14 +359,15 @@ def migrate_dept(dept_name: str, stats: _Statistics, time_elapsed: Profiler):
|
|||||||
f"{TerminalColor.GREEN}La migration a pris {time_elapsed.elapsed():.2f} secondes {TerminalColor.RESET}"
|
f"{TerminalColor.GREEN}La migration a pris {time_elapsed.elapsed():.2f} secondes {TerminalColor.RESET}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
filename = f"/opt/scodoc-data/log/{datetime.now().strftime('%Y-%m-%dT%H:%M:%S')}scodoc_migration_abs_{dept_name}.json"
|
||||||
|
if statistiques["total"] > 0:
|
||||||
print(
|
print(
|
||||||
f"{TerminalColor.RED}{statistiques['total']} absences qui n'ont pas pu être migrées."
|
f"{TerminalColor.RED}{statistiques['total']} absences qui n'ont pas pu être migrées."
|
||||||
)
|
)
|
||||||
|
|
||||||
filename = f"/opt/scodoc-data/log/{datetime.now().strftime('%Y-%m-%dT%H:%M:%S')}scodoc_migration_abs_{dept_name}.json"
|
|
||||||
print(
|
print(
|
||||||
f"Vous retrouverez un fichier json {TerminalColor.GREEN}{filename}{TerminalColor.RED} contenant les problèmes de migrations"
|
f"Vous retrouverez un fichier json {TerminalColor.GREEN}{filename}{TerminalColor.RED} contenant les problèmes de migrations"
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(
|
with open(
|
||||||
filename,
|
filename,
|
||||||
"w",
|
"w",
|
||||||
@ -383,11 +384,8 @@ def migrate_dept(dept_name: str, stats: _Statistics, time_elapsed: Profiler):
|
|||||||
|
|
||||||
|
|
||||||
def _from_abs_to_assiduite_justificatif(_abs: Absence):
|
def _from_abs_to_assiduite_justificatif(_abs: Absence):
|
||||||
if _abs.etudid not in _glob.CURRENT_ETU:
|
if _abs.etudid not in _glob.DEPT_ETUDIDS:
|
||||||
etud: Identite = Identite.query.filter_by(id=_abs.etudid).first()
|
|
||||||
if etud is None:
|
|
||||||
raise ValueError("Etudiant inexistant")
|
raise ValueError("Etudiant inexistant")
|
||||||
_glob.CURRENT_ETU.append(_abs.etudid)
|
|
||||||
|
|
||||||
if _abs.estabs:
|
if _abs.estabs:
|
||||||
moduleimpl_id: int = _abs.moduleimpl_id
|
moduleimpl_id: int = _abs.moduleimpl_id
|
||||||
@ -402,6 +400,7 @@ def _from_abs_to_assiduite_justificatif(_abs: Absence):
|
|||||||
)
|
)
|
||||||
if moduleimpl_inscription is None:
|
if moduleimpl_inscription is None:
|
||||||
raise ValueError("Moduleimpl_id incorrect ou étudiant non inscrit")
|
raise ValueError("Moduleimpl_id incorrect ou étudiant non inscrit")
|
||||||
|
_glob.MODULES[(_abs.etudid, _abs.moduleimpl_id)] = True
|
||||||
|
|
||||||
if _glob.MERGER_ASSI is None:
|
if _glob.MERGER_ASSI is None:
|
||||||
_glob.MERGER_ASSI = _Merger(_abs, True)
|
_glob.MERGER_ASSI = _Merger(_abs, True)
|
||||||
|
Loading…
Reference in New Issue
Block a user