forked from ScoDoc/ScoDoc
Assiduité : téléchargement des assiduités
This commit is contained in:
parent
7af0dd1e1e
commit
5d10ee467e
@ -20,6 +20,39 @@ le semestre concerné (saisie par jour ou saisie différée).
|
|||||||
<br>
|
<br>
|
||||||
{{billets | safe}}
|
{{billets | safe}}
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>Télécharger l'assiduité</h3>
|
||||||
|
|
||||||
|
<form action="{{url_for('assiduites.recup_assiduites_plage', scodoc_dept=g.scodoc_dept)}}" method="post">
|
||||||
|
<label for="datedeb">
|
||||||
|
Du :
|
||||||
|
<input type="text" class="datepicker" id="datedeb" name="datedeb">
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label for="datefin">
|
||||||
|
Au :
|
||||||
|
<input type="text" class="datepicker" id="datefin" name="datefin">
|
||||||
|
</label>
|
||||||
|
<br>
|
||||||
|
<label for="formsemestre_id">Télécharger l'assiduité de </label>
|
||||||
|
<select name="formsemestre_id" id="formsemestre_id">
|
||||||
|
<option value="">Tout le département</option>
|
||||||
|
{% for id, titre in formsemestres.items() %}
|
||||||
|
{% if formsemestre_id == id %}
|
||||||
|
<option value="{{id}}" selected>{{titre}}</option>
|
||||||
|
{% else %}
|
||||||
|
<option value="{{id}}">{{titre}}</option>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="submit" value="Télécharger" name="telecharger">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<br>
|
<br>
|
||||||
<section class="nonvalide">
|
<section class="nonvalide">
|
||||||
{{tableau | safe }}
|
{{tableau | safe }}
|
||||||
|
@ -186,6 +186,12 @@ def bilan_dept():
|
|||||||
if not table[0]:
|
if not table[0]:
|
||||||
return table[1]
|
return table[1]
|
||||||
|
|
||||||
|
# Récupération des formsemestres (pour le menu déroulant)
|
||||||
|
formsemestres: Query = FormSemestre.get_dept_formsemestres_courants(dept)
|
||||||
|
formsemestres_choices: dict[int, str] = {
|
||||||
|
fs.id: fs.titre_annee() for fs in formsemestres
|
||||||
|
}
|
||||||
|
|
||||||
# Peuplement du template jinja
|
# Peuplement du template jinja
|
||||||
return render_template(
|
return render_template(
|
||||||
"assiduites/pages/bilan_dept.j2",
|
"assiduites/pages/bilan_dept.j2",
|
||||||
@ -193,6 +199,8 @@ def bilan_dept():
|
|||||||
search_etud=sco_find_etud.form_search_etud(dest_url="assiduites.bilan_etud"),
|
search_etud=sco_find_etud.form_search_etud(dest_url="assiduites.bilan_etud"),
|
||||||
billets=billets,
|
billets=billets,
|
||||||
sco=ScoData(formsemestre=formsemestre),
|
sco=ScoData(formsemestre=formsemestre),
|
||||||
|
formsemestres=formsemestres_choices,
|
||||||
|
formsemestre_id=None if not formsemestre else formsemestre.id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -1565,6 +1573,85 @@ def _prepare_tableau(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.route("/recup_assiduites_plage", methods=["POST"])
|
||||||
|
@scodoc
|
||||||
|
@permission_required(Permission.AbsChange)
|
||||||
|
def recup_assiduites_plage():
|
||||||
|
"""
|
||||||
|
Renvoie un fichier excel contenant toutes les assiduités d'une plage
|
||||||
|
La plage est définie par les valeurs "datedeb" et "datefin" du formulaire
|
||||||
|
Par défaut tous les étudiants du département sont concernés
|
||||||
|
Si le champs "formsemestre_id" est présent dans le formulaire et est non vide,
|
||||||
|
seuls les étudiants inscrits dans ce semestre sont concernés.
|
||||||
|
"""
|
||||||
|
|
||||||
|
date_deb: datetime.datetime = request.form.get("datedeb")
|
||||||
|
date_fin: datetime.datetime = request.form.get("datefin")
|
||||||
|
|
||||||
|
# Vérification des dates
|
||||||
|
try:
|
||||||
|
date_deb = datetime.datetime.strptime(date_deb, "%d/%m/%Y")
|
||||||
|
except ValueError as exc:
|
||||||
|
raise ScoValueError("date_debut invalide", dest_url=request.referrer) from exc
|
||||||
|
try:
|
||||||
|
date_fin = datetime.datetime.strptime(date_fin, "%d/%m/%Y")
|
||||||
|
except ValueError as exc:
|
||||||
|
raise ScoValueError("date_fin invalide", dest_url=request.referrer) from exc
|
||||||
|
|
||||||
|
# Récupération des étudiants
|
||||||
|
etuds: Query = []
|
||||||
|
formsemestre_id: str | None = request.form.get("formsemestre_id")
|
||||||
|
|
||||||
|
name: str = ""
|
||||||
|
|
||||||
|
if formsemestre_id is not None and formsemestre_id != "":
|
||||||
|
formsemestre: FormSemestre = FormSemestre.query.get_or_404(formsemestre_id)
|
||||||
|
etuds = formsemestre.etuds
|
||||||
|
name = formsemestre.session_id()
|
||||||
|
else:
|
||||||
|
dept: Departement = Departement.query.get_or_404(g.scodoc_dept_id)
|
||||||
|
etuds = dept.etudiants
|
||||||
|
name = dept.acronym
|
||||||
|
|
||||||
|
# Récupération des assiduités
|
||||||
|
assiduites: Query = Assiduite.query.filter(
|
||||||
|
Assiduite.etudid.in_([etud.id for etud in etuds])
|
||||||
|
)
|
||||||
|
|
||||||
|
# Filtrage des assiduités en fonction des dates données
|
||||||
|
assiduites = scass.filter_by_date(assiduites, Assiduite, date_deb, date_fin)
|
||||||
|
|
||||||
|
table_data: liste_assi.AssiJustifData = liste_assi.AssiJustifData(
|
||||||
|
assiduites_query=assiduites,
|
||||||
|
)
|
||||||
|
|
||||||
|
options: liste_assi.AssiDisplayOptions = liste_assi.AssiDisplayOptions(
|
||||||
|
show_pres=True,
|
||||||
|
show_reta=True,
|
||||||
|
show_module=True,
|
||||||
|
show_etu=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
date_deb_str: str = date_deb.strftime("%d-%m-%Y")
|
||||||
|
date_fin_str: str = date_fin.strftime("%d-%m-%Y")
|
||||||
|
|
||||||
|
filename: str = f"assiduites_{name}_{date_deb_str}_{date_fin_str}"
|
||||||
|
|
||||||
|
tableau: liste_assi.ListeAssiJusti = liste_assi.ListeAssiJusti(
|
||||||
|
table_data,
|
||||||
|
options=options,
|
||||||
|
titre="tableau-dept-" + filename,
|
||||||
|
no_pagination=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
return scu.send_file(
|
||||||
|
tableau.excel(),
|
||||||
|
filename=filename,
|
||||||
|
mime=scu.XLSX_MIMETYPE,
|
||||||
|
suffix=scu.XLSX_SUFFIX,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/tableau_assiduite_actions", methods=["GET", "POST"])
|
@bp.route("/tableau_assiduite_actions", methods=["GET", "POST"])
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.AbsChange)
|
@permission_required(Permission.AbsChange)
|
||||||
|
Loading…
Reference in New Issue
Block a user