forked from ScoDoc/ScoDoc
tri des billets
This commit is contained in:
parent
1d74d1ea60
commit
17c725e116
|
@ -1,153 +1,162 @@
|
|||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gestion scolarite IUT
|
||||
#
|
||||
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Emmanuel Viennet emmanuel.viennet@viennet.net
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
"""Fonctions sur les billets d'absences
|
||||
"""
|
||||
|
||||
from flask import g, url_for
|
||||
import flask_sqlalchemy
|
||||
from app.models.absences import BilletAbsence
|
||||
from app.models.etudiants import Identite
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc import sco_preferences
|
||||
|
||||
|
||||
def query_billets_etud(
|
||||
etudid: int = None, etat: bool = None
|
||||
) -> flask_sqlalchemy.BaseQuery:
|
||||
"""Billets d'absences pour un étudiant, ou tous si etudid is None.
|
||||
Si etat, filtre par état.
|
||||
Si dans un département et que la gestion des billets n'a pas été activée
|
||||
dans ses préférences, table toujours vide.
|
||||
"""
|
||||
if g.scodoc_dept is not None and not sco_preferences.get_preference(
|
||||
"handle_billets_abs"
|
||||
):
|
||||
return []
|
||||
billets = BilletAbsence.query
|
||||
if etudid is not None:
|
||||
billets = billets.filter_by(etudid=etudid)
|
||||
if etat is not None:
|
||||
billets = billets.filter_by(etat=False)
|
||||
if g.scodoc_dept is not None:
|
||||
# jointure avec departement de l'étudiant
|
||||
billets = billets.join(BilletAbsence.etudiant).filter_by(
|
||||
dept_id=g.scodoc_dept_id
|
||||
)
|
||||
return billets
|
||||
|
||||
|
||||
def table_billets_etud(
|
||||
etudid: int = None, etat: bool = None, with_links=True
|
||||
) -> GenTable:
|
||||
"""Page avec table billets."""
|
||||
etud = Identite.query.get_or_404(etudid) if etudid is not None else None
|
||||
billets = query_billets_etud(etudid, etat)
|
||||
return table_billets(billets, etud=etud, with_links=with_links)
|
||||
|
||||
|
||||
def table_billets(
|
||||
billets: list[BilletAbsence], etud: Identite = None, title="", with_links=True
|
||||
) -> GenTable:
|
||||
"""Construit une table de billets d'absences"""
|
||||
rows = []
|
||||
for billet in billets:
|
||||
billet_dict = billet.to_dict()
|
||||
rows.append(billet_dict)
|
||||
if billet_dict["abs_begin"].hour < 12:
|
||||
m = " matin"
|
||||
else:
|
||||
m = " après-midi"
|
||||
billet_dict["abs_begin_str"] = billet.abs_begin.strftime("%d/%m/%Y") + m
|
||||
if billet.abs_end.hour < 12:
|
||||
m = " matin"
|
||||
else:
|
||||
m = " après-midi"
|
||||
billet_dict["abs_end_str"] = billet.abs_end.strftime("%d/%m/%Y") + m
|
||||
if billet.etat == 0:
|
||||
if billet.justified:
|
||||
billet_dict["etat_str"] = "à traiter"
|
||||
else:
|
||||
billet_dict["etat_str"] = "à justifier"
|
||||
if with_links:
|
||||
if etud:
|
||||
billet_dict["_etat_str_target"] = url_for(
|
||||
"absences.process_billet_absence_form",
|
||||
billet_id=billet_dict["billet_id"],
|
||||
scodoc_dept=billet.etudiant.departement.acronym,
|
||||
etudid=etud.id,
|
||||
)
|
||||
else:
|
||||
billet_dict["_etat_str_target"] = url_for(
|
||||
"absences.process_billet_absence_form",
|
||||
billet_id=billet_dict["billet_id"],
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
)
|
||||
billet_dict["_billet_id_target"] = billet_dict["_etat_str_target"]
|
||||
else:
|
||||
billet_dict["etat_str"] = "ok"
|
||||
if not etud:
|
||||
# ajoute info etudiant
|
||||
if not billet.etudiant:
|
||||
billet_dict["nomprenom"] = "???" # should not occur
|
||||
else:
|
||||
billet_dict["nomprenom"] = billet.etudiant.nomprenom
|
||||
billet_dict["_nomprenom_disp_order"] = billet.etudiant.sort_key
|
||||
billet_dict[
|
||||
"_nomprenom_td_attrs"
|
||||
] = f'id="{billet.etudiant.id}" class="etudinfo"'
|
||||
if with_links:
|
||||
billet_dict["_nomprenom_target"] = url_for(
|
||||
"scolar.ficheEtud",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
etudid=billet_dict["etudid"],
|
||||
)
|
||||
|
||||
if etud and not title:
|
||||
title = f"Billets d'absence déclarés par {etud.nomprenom}"
|
||||
|
||||
columns_ids = ["billet_id"]
|
||||
if not etud:
|
||||
columns_ids += ["nomprenom"]
|
||||
columns_ids += ["abs_begin_str", "abs_end_str", "description", "etat_str"]
|
||||
tab = GenTable(
|
||||
titles={
|
||||
"billet_id": "Numéro",
|
||||
"abs_begin_str": "Début",
|
||||
"abs_end_str": "Fin",
|
||||
"description": "Raison de l'absence",
|
||||
"etat_str": "Etat",
|
||||
},
|
||||
columns_ids=columns_ids,
|
||||
page_title=title,
|
||||
html_title=f"<h2>{title}</h2>",
|
||||
preferences=sco_preferences.SemPreferences(),
|
||||
rows=rows,
|
||||
html_sortable=True,
|
||||
html_class="table_leftalign",
|
||||
)
|
||||
return tab
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gestion scolarite IUT
|
||||
#
|
||||
# Copyright (c) 1999 - 2022 Emmanuel Viennet. All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# Emmanuel Viennet emmanuel.viennet@viennet.net
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
"""Fonctions sur les billets d'absences
|
||||
"""
|
||||
|
||||
from flask import g, url_for
|
||||
import flask_sqlalchemy
|
||||
from app.models.absences import BilletAbsence
|
||||
from app.models.etudiants import Identite
|
||||
from app.scodoc.gen_tables import GenTable
|
||||
from app.scodoc import sco_preferences
|
||||
|
||||
|
||||
def query_billets_etud(
|
||||
etudid: int = None, etat: bool = None
|
||||
) -> flask_sqlalchemy.BaseQuery:
|
||||
"""Billets d'absences pour un étudiant, ou tous si etudid is None.
|
||||
Si etat, filtre par état.
|
||||
Si dans un département et que la gestion des billets n'a pas été activée
|
||||
dans ses préférences, table toujours vide.
|
||||
"""
|
||||
if g.scodoc_dept is not None and not sco_preferences.get_preference(
|
||||
"handle_billets_abs"
|
||||
):
|
||||
return []
|
||||
billets = BilletAbsence.query
|
||||
if etudid is not None:
|
||||
billets = billets.filter_by(etudid=etudid)
|
||||
if etat is not None:
|
||||
billets = billets.filter_by(etat=False)
|
||||
if g.scodoc_dept is not None:
|
||||
# jointure avec departement de l'étudiant
|
||||
billets = billets.join(BilletAbsence.etudiant).filter_by(
|
||||
dept_id=g.scodoc_dept_id
|
||||
)
|
||||
return billets
|
||||
|
||||
|
||||
def table_billets_etud(
|
||||
etudid: int = None, etat: bool = None, with_links=True
|
||||
) -> GenTable:
|
||||
"""Page avec table billets."""
|
||||
etud = Identite.query.get_or_404(etudid) if etudid is not None else None
|
||||
billets = query_billets_etud(etudid, etat)
|
||||
return table_billets(billets, etud=etud, with_links=with_links)
|
||||
|
||||
|
||||
def table_billets(
|
||||
billets: list[BilletAbsence], etud: Identite = None, title="", with_links=True
|
||||
) -> GenTable:
|
||||
"""Construit une table de billets d'absences"""
|
||||
rows = []
|
||||
for billet in billets:
|
||||
billet_dict = billet.to_dict()
|
||||
rows.append(billet_dict)
|
||||
billet_dict["_nomprenom_order"] = (
|
||||
billet.etudiant.sort_key if billet.etudiant else ""
|
||||
)
|
||||
billet_dict["_abs_begin_str_order"] = (
|
||||
billet.abs_begin.isoformat() if billet.abs_begin else ""
|
||||
)
|
||||
billet_dict["_abs_begin_str_order"] = (
|
||||
billet.abs_begin.isoformat() if billet.abs_end else ""
|
||||
)
|
||||
if billet_dict["abs_begin"].hour < 12:
|
||||
m = " matin"
|
||||
else:
|
||||
m = " après-midi"
|
||||
billet_dict["abs_begin_str"] = billet.abs_begin.strftime("%d/%m/%Y") + m
|
||||
if billet.abs_end.hour < 12:
|
||||
m = " matin"
|
||||
else:
|
||||
m = " après-midi"
|
||||
billet_dict["abs_end_str"] = billet.abs_end.strftime("%d/%m/%Y") + m
|
||||
if billet.etat == 0:
|
||||
if billet.justified:
|
||||
billet_dict["etat_str"] = "à traiter"
|
||||
else:
|
||||
billet_dict["etat_str"] = "à justifier"
|
||||
if with_links:
|
||||
if etud:
|
||||
billet_dict["_etat_str_target"] = url_for(
|
||||
"absences.process_billet_absence_form",
|
||||
billet_id=billet_dict["billet_id"],
|
||||
scodoc_dept=billet.etudiant.departement.acronym,
|
||||
etudid=etud.id,
|
||||
)
|
||||
else:
|
||||
billet_dict["_etat_str_target"] = url_for(
|
||||
"absences.process_billet_absence_form",
|
||||
billet_id=billet_dict["billet_id"],
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
)
|
||||
billet_dict["_billet_id_target"] = billet_dict["_etat_str_target"]
|
||||
else:
|
||||
billet_dict["etat_str"] = "ok"
|
||||
if not etud:
|
||||
# ajoute info etudiant
|
||||
if not billet.etudiant:
|
||||
billet_dict["nomprenom"] = "???" # should not occur
|
||||
else:
|
||||
billet_dict["nomprenom"] = billet.etudiant.nomprenom
|
||||
billet_dict["_nomprenom_order"] = billet.etudiant.sort_key
|
||||
billet_dict[
|
||||
"_nomprenom_td_attrs"
|
||||
] = f'id="{billet.etudiant.id}" class="etudinfo"'
|
||||
if with_links:
|
||||
billet_dict["_nomprenom_target"] = url_for(
|
||||
"scolar.ficheEtud",
|
||||
scodoc_dept=g.scodoc_dept,
|
||||
etudid=billet_dict["etudid"],
|
||||
)
|
||||
|
||||
if etud and not title:
|
||||
title = f"Billets d'absence déclarés par {etud.nomprenom}"
|
||||
|
||||
columns_ids = ["billet_id"]
|
||||
if not etud:
|
||||
columns_ids += ["nomprenom"]
|
||||
columns_ids += ["abs_begin_str", "abs_end_str", "description", "etat_str"]
|
||||
tab = GenTable(
|
||||
titles={
|
||||
"billet_id": "Numéro",
|
||||
"abs_begin_str": "Début",
|
||||
"abs_end_str": "Fin",
|
||||
"description": "Raison de l'absence",
|
||||
"etat_str": "Etat",
|
||||
},
|
||||
columns_ids=columns_ids,
|
||||
page_title=title,
|
||||
html_title=f"<h2>{title}</h2>",
|
||||
preferences=sco_preferences.SemPreferences(),
|
||||
rows=rows,
|
||||
html_sortable=True,
|
||||
html_class="table_leftalign",
|
||||
)
|
||||
return tab
|
||||
|
|
Loading…
Reference in New Issue