Quelques commentaires rapides
This commit is contained in:
parent
f96571f520
commit
e2ca9d417f
@ -28,7 +28,12 @@ import app.scodoc.sco_assiduites as scass
|
|||||||
@api_web_bp.route("/assiduite/<int:assiduiteid>")
|
@api_web_bp.route("/assiduite/<int:assiduiteid>")
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.ScoView)
|
@permission_required(Permission.ScoView)
|
||||||
def assiduite(assiduiteid: int = None):
|
# XEV à revoir pour les droits d'accès par département
|
||||||
|
|
||||||
|
|
||||||
|
def assiduite(
|
||||||
|
assiduite_id: int = None,
|
||||||
|
): # XEV xxx_id (sauf pour etudid qui est l'exception qui confirme la règle)
|
||||||
"""Retourne un objet assiduité à partir de son id
|
"""Retourne un objet assiduité à partir de son id
|
||||||
|
|
||||||
Exemple de résultat:
|
Exemple de résultat:
|
||||||
@ -41,10 +46,14 @@ def assiduite(assiduiteid: int = None):
|
|||||||
"etat": "retard"
|
"etat": "retard"
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
# XEV je pense qu'il faut requeter ainsi pour vérifier qu'on est dans le bon département
|
||||||
|
# afin que quelqu'un avec la paermission ScoView dans son département n'ait pas
|
||||||
|
# accès aux infos des autres départements: à tester
|
||||||
|
query = Assiduite.query.filter_by(id=assiduite_id)
|
||||||
|
if g.scodoc_dept:
|
||||||
|
query = query.join(Identite).filter_by(dept_id=g.scodoc_dept_id)
|
||||||
|
|
||||||
assiduite = Assiduite.query.get(assiduiteid)
|
assiduite = query.first_or_404()
|
||||||
if assiduite is None:
|
|
||||||
return json_error(404, message="assiduité inexistante")
|
|
||||||
|
|
||||||
data = assiduite.to_dict()
|
data = assiduite.to_dict()
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class Assiduite(db.Model):
|
|||||||
__tablename__ = "assiduites"
|
__tablename__ = "assiduites"
|
||||||
|
|
||||||
id = db.Column(db.Integer, primary_key=True)
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
assiduiteid = db.synonym("id")
|
assiduite_id = db.synonym("id")
|
||||||
|
|
||||||
date_debut = db.Column(
|
date_debut = db.Column(
|
||||||
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
db.DateTime(timezone=True), server_default=db.func.now(), nullable=False
|
||||||
@ -58,12 +58,14 @@ class Assiduite(db.Model):
|
|||||||
date_debut: datetime,
|
date_debut: datetime,
|
||||||
date_fin: datetime,
|
date_fin: datetime,
|
||||||
etat: EtatAssiduite,
|
etat: EtatAssiduite,
|
||||||
module: int or None = None,
|
module: int
|
||||||
|
or None = None, # XEV est-ce un id (alors module_id ou modimpl_id), ou un objet (ModuleImpl ??) => cela simplifiera le check d'erreur
|
||||||
) -> object or int:
|
) -> object or int:
|
||||||
"""Créer une nouvelle assiduité pour l'étudiant
|
"""Créer une nouvelle assiduité pour l'étudiant
|
||||||
Documentation des codes d'erreurs renvoyés:
|
Documentation des codes d'erreurs renvoyés:
|
||||||
1: Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)
|
1: Duplication des assiduités (la période rentrée rentre en conflit avec une assiduité enregistrée)
|
||||||
2: l'ID du module_impl n'existe pas.
|
2: l'ID du module_impl n'existe pas.
|
||||||
|
#XEV => utiliser plutôt des exceptions.
|
||||||
"""
|
"""
|
||||||
# Vérification de non duplication des périodes
|
# Vérification de non duplication des périodes
|
||||||
assiduites: list[Assiduite] = etud.assiduites.all()
|
assiduites: list[Assiduite] = etud.assiduites.all()
|
||||||
@ -73,16 +75,16 @@ class Assiduite(db.Model):
|
|||||||
assiduites = [
|
assiduites = [
|
||||||
ass
|
ass
|
||||||
for ass in assiduites
|
for ass in assiduites
|
||||||
if verif_interval(
|
if verif_interval( # XEV
|
||||||
(date_debut, date_fin),
|
(date_debut, date_fin),
|
||||||
(ass.date_debut, ass.date_fin),
|
(ass.date_debut, ass.date_fin),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
if len(assiduites) != 0:
|
if len(assiduites) != 0:
|
||||||
return 1
|
return 1 # XEV raise une exception
|
||||||
|
|
||||||
if module is not None:
|
if module is not None:
|
||||||
# Vérification de l'existance du module pour l'étudiant
|
# Vérification de l'existence du module pour l'étudiant
|
||||||
if cls.verif_moduleimpl(module, etud):
|
if cls.verif_moduleimpl(module, etud):
|
||||||
nouv_assiduite = Assiduite(
|
nouv_assiduite = Assiduite(
|
||||||
date_debut=date_debut,
|
date_debut=date_debut,
|
||||||
@ -110,7 +112,12 @@ class Assiduite(db.Model):
|
|||||||
|
|
||||||
Retourne Vrai si c'est le cas, faux sinon
|
Retourne Vrai si c'est le cas, faux sinon
|
||||||
"""
|
"""
|
||||||
|
# XEV: cette méthode n'a pas de raison d'être dans la classe Assiduite
|
||||||
|
# et pourrait etre ModuleImpl.est_inscrit(etud)
|
||||||
|
# + éviter les "Identite or int" : cela complique les tests, mieux vaut avoir un type unique bien défini.
|
||||||
output = True
|
output = True
|
||||||
|
|
||||||
|
# XEV: "module" est un "modimpl": changer nom sinon on pense que c'est un Module
|
||||||
module: ModuleImpl = ModuleImpl.query.filter_by(
|
module: ModuleImpl = ModuleImpl.query.filter_by(
|
||||||
moduleimpl_id=moduleimpl_id
|
moduleimpl_id=moduleimpl_id
|
||||||
).first()
|
).first()
|
||||||
@ -119,6 +126,8 @@ class Assiduite(db.Model):
|
|||||||
|
|
||||||
if output:
|
if output:
|
||||||
search_etudid: int = etud.id if type(etud) == Identite else etud
|
search_etudid: int = etud.id if type(etud) == Identite else etud
|
||||||
|
|
||||||
|
# XEV: is_xxx indique un booléen, or ici is_module est un comptage
|
||||||
is_module: int = ModuleImplInscription.query.filter_by(
|
is_module: int = ModuleImplInscription.query.filter_by(
|
||||||
etudid=search_etudid, moduleimpl_id=moduleimpl_id
|
etudid=search_etudid, moduleimpl_id=moduleimpl_id
|
||||||
).count()
|
).count()
|
||||||
@ -158,7 +167,8 @@ class Justificatif(db.Model):
|
|||||||
)
|
)
|
||||||
|
|
||||||
raison = db.Column(db.Text())
|
raison = db.Column(db.Text())
|
||||||
fichier = db.Column(db.Integer())
|
fichier = db.Column(db.Integer()) # XEV qu'est-ce que cet entier ?
|
||||||
|
# XEV pour les fichiers stockés, on va utiliser sco_archives.py
|
||||||
|
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self) -> dict:
|
||||||
data = {
|
data = {
|
||||||
|
@ -150,11 +150,12 @@ def is_iso_formated(date: str, convert=False) -> bool or datetime.datetime or No
|
|||||||
|
|
||||||
|
|
||||||
def localize_datetime(date: datetime.datetime or str) -> datetime.datetime:
|
def localize_datetime(date: datetime.datetime or str) -> datetime.datetime:
|
||||||
if type(date) == str:
|
# XEV A documenter
|
||||||
|
if type(date) == str: # XEV utiliser isinstance
|
||||||
date = is_iso_formated(date, convert=True)
|
date = is_iso_formated(date, convert=True)
|
||||||
|
|
||||||
new_date: datetime.datetime = date
|
new_date: datetime.datetime = date
|
||||||
if date.tzinfo == None:
|
if date.tzinfo == None: # XEV utiliser "is None"
|
||||||
from app.models.assiduites import Assiduite
|
from app.models.assiduites import Assiduite
|
||||||
|
|
||||||
first_assiduite = Assiduite.query.first()
|
first_assiduite = Assiduite.query.first()
|
||||||
@ -167,14 +168,19 @@ def localize_datetime(date: datetime.datetime or str) -> datetime.datetime:
|
|||||||
return new_date
|
return new_date
|
||||||
|
|
||||||
|
|
||||||
def verif_interval(
|
def verif_interval( # XEV à renommer pour avoir nom de fonction plus explicite, genre dates_se_recouvrent() ou en anglais is_overlapping ???
|
||||||
periode: tuple[datetime.datetime], interval: tuple[datetime.datetime]
|
periode: tuple[datetime.datetime], interval: tuple[datetime.datetime]
|
||||||
) -> bool:
|
) -> bool:
|
||||||
|
# XEV n'est-ce pas plutot tuple[datetime.datetime,datetime.datetime] ?
|
||||||
"""
|
"""
|
||||||
Vérifie si une période est comprise dans un interval, chevauche l'interval ou comprend l'interval
|
Vérifie si une période est comprise dans un interval, chevauche l'interval ou comprend l'interval
|
||||||
|
#XEV: "vrai si la période et de l'intervalle intersectent"
|
||||||
Retourne Vrai si c'est le cas, faux sinon
|
Retourne Vrai si c'est le cas, faux sinon
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# XEV: si je comprends bien, il suffirait de vérifier les bornes
|
||||||
|
# voir par exemple https://stackoverflow.com/questions/3269434/whats-the-most-efficient-way-to-test-if-two-ranges-overlap
|
||||||
|
|
||||||
p_deb, p_fin = periode
|
p_deb, p_fin = periode
|
||||||
i_deb, i_fin = interval
|
i_deb, i_fin = interval
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user