1
0
forked from ScoDoc/ScoDoc

WIP: assiduités

This commit is contained in:
Emmanuel Viennet 2023-08-13 22:40:16 +02:00 committed by lehmann
parent b24280b30a
commit 4c7f65f0b4
10 changed files with 53 additions and 27 deletions

View File

@ -847,10 +847,14 @@ def _make_listes_sem(formsemestre: FormSemestre, with_absences=True):
form_abs_tmpl += f""" form_abs_tmpl += f"""
<a class="btn" href="{ <a class="btn" href="{
url_for("assiduites.signal_assiduites_group", scodoc_dept=g.scodoc_dept) url_for("assiduites.signal_assiduites_group", scodoc_dept=g.scodoc_dept)
}?group_ids=%(group_id)s&jour={datetime.date.today().isoformat()}&formsemestre_id={formsemestre.id}"><button>Saisie Journalière</button></a> }?group_ids=%(group_id)s&jour={
datetime.date.today().isoformat()
}&formsemestre_id={formsemestre.id}"><button>Saisie journalière</button></a>
<a class="btn" href="{ <a class="btn" href="{
url_for("assiduites.signal_assiduites_diff", scodoc_dept=g.scodoc_dept) url_for("assiduites.signal_assiduites_diff", scodoc_dept=g.scodoc_dept)
}?group_ids=%(group_id)s&formsemestre_id={formsemestre.formsemestre_id}"><button>Saisie Différée</button></a> }?group_ids=%(group_id)s&formsemestre_id={
formsemestre.formsemestre_id
}"><button>Saisie différée</button></a>
</td> </td>
""" """
else: else:

View File

@ -162,7 +162,7 @@ def _convert_pref_type(p, pref_spec):
# special case for float values (where NULL means 0) # special case for float values (where NULL means 0)
p["value"] = float(p["value"] or 0) p["value"] = float(p["value"] or 0)
elif typ == "int": elif typ == "int":
p["value"] = int(p["value"] or 0) p["value"] = int(float(p["value"] or 0))
else: else:
raise ValueError("invalid preference type") raise ValueError("invalid preference type")
@ -198,6 +198,13 @@ def _get_pref_default_value_from_config(name, pref_spec):
_INSTALLED_FONTS = ", ".join(sco_pdf.get_available_font_names()) _INSTALLED_FONTS = ", ".join(sco_pdf.get_available_font_names())
ASSIDUITES_METRIC_LABEL = {
# l'ordre est important, c'est celui-du menu. Le defaut en 1er donc.
"1/2 J.": "demi-journée",
"J.": "journee",
"H.": "heure",
}
PREF_CATEGORIES = ( PREF_CATEGORIES = (
# sur page "Paramètres" # sur page "Paramètres"
("general", {"title": ""}), # voir paramètre titlr de TrivialFormulator ("general", {"title": ""}), # voir paramètre titlr de TrivialFormulator
@ -658,10 +665,10 @@ class BasePreferences(object):
{ {
"initvalue": "1/2 J.", "initvalue": "1/2 J.",
"input_type": "menu", "input_type": "menu",
"labels": ["1/2 J.", "J.", "H."], "labels": list(ASSIDUITES_METRIC_LABEL.values()),
"allowed_values": ["1/2 J.", "J.", "H."], "allowed_values": list(ASSIDUITES_METRIC_LABEL.keys()),
"title": "Métrique de l'assiduité", "title": "Métrique de l'assiduité",
"explanation": "Unité utilisée dans la fiche étudiante, le bilan, et dans les calculs (J. = journée, H. = heure)", "explanation": "Unité utilisée dans la fiche étudiante, les bilans et les calculs",
"category": "assi", "category": "assi",
"only_global": True, "only_global": True,
}, },
@ -669,10 +676,10 @@ class BasePreferences(object):
( (
"assi_seuil", "assi_seuil",
{ {
"initvalue": 3.0, "initvalue": 3,
"size": 10, "size": 10,
"title": "Seuil d'alerte des absences", "title": "Seuil d'alerte des absences",
"type": "float", "type": "int",
"explanation": "Nombres d'absences limite avant alerte dans le bilan (utilisation de l'unité métrique ↑ )", "explanation": "Nombres d'absences limite avant alerte dans le bilan (utilisation de l'unité métrique ↑ )",
"category": "assi", "category": "assi",
"only_global": True, "only_global": True,

View File

@ -1792,6 +1792,10 @@ td.formsemestre_status_inscrits {
text-align: center; text-align: center;
} }
div.formsemestre_status button {
margin-left: 12px;;
}
td.rcp_titre_sem a.jury_link { td.rcp_titre_sem a.jury_link {
margin-left: 8px; margin-left: 8px;
color: red; color: red;

View File

@ -125,11 +125,9 @@ class RowAssi(tb.Row):
"absent": ["Absences", 0.0, 0.0], "absent": ["Absences", 0.0, 0.0],
} }
assi_metric = { assi_metric = sco_preferences.ASSIDUITES_METRIC_LABEL.get(
"H.": "heure", sco_preferences.get_preference("assi_metrique", dept_id=g.scodoc_dept_id)
"J.": "journee", )
"1/2 J.": "demi",
}.get(sco_preferences.get_preference("assi_metrique", dept_id=g.scodoc_dept_id))
for etat, valeur in retour.items(): for etat, valeur in retour.items():
compte_etat = scass.get_assiduites_stats( compte_etat = scass.get_assiduites_stats(

View File

@ -2,7 +2,16 @@
{% import 'bootstrap/wtf.html' as wtf %} {% import 'bootstrap/wtf.html' as wtf %}
{% block app_content %} {% block app_content %}
<h1>Configuration du Module d'assiduité</h1> <div class="row">
<h1>Configuration du suivi de l'assiduité</h1>
<div class="help"> Ces paramètres seront utilisés par tous les départements et
affectent notamment les comptages d'absences de tous les bulletins des
étudiants&nbsp;: ne changer que lorsque c'est vraiment nécessaire.
</div>
</div>
<div class="row"> <div class="row">
<div class="col-md-8"> <div class="col-md-8">

View File

@ -40,8 +40,9 @@
{% if readonly == "false" %} {% if readonly == "false" %}
<div style="margin: 1vh 0;"> <div style="margin: 1vh 0;">
<div id="forcemodule" style="display: none; margin:10px 0px;">Une préférence du semestre vous impose d'indiquer <div id="forcemodule" style="display: none; margin:10px 0px;">
le module !</div> Vous devez spécifier le module ! (voir réglage préférence du semestre)
</div>
<div>Module :{{moduleimpl_select|safe}}</div> <div>Module :{{moduleimpl_select|safe}}</div>
</div> </div>
{% else %} {% else %}

View File

@ -21,6 +21,10 @@
{{tableau | safe}} {{tableau | safe}}
<div class=""help">
Les comptes sont exprimés en {{ assi_metric }}.
</div>
<script> <script>
const date_debut = "{{date_debut}}"; const date_debut = "{{date_debut}}";
const date_fin = "{{date_fin}}"; const date_fin = "{{date_fin}}";

View File

@ -57,18 +57,18 @@
<div class="sco_help">Ces images peuvent être intégrées dans les documents <div class="sco_help">Ces images peuvent être intégrées dans les documents
générés par ScoDoc: bulletins, PV, etc. générés par ScoDoc: bulletins, PV, etc.
</div> </div>
<p><a class="stdlink" href="{{url_for('scodoc.configure_logos')}}">configuration des images et logos</a> <p><a class="stdlink" href="{{url_for('scodoc.configure_logos')}}">Configuration des images et logos</a>
</p> </p>
</section> </section>
<section> <section>
<h2>Exports Apogée</h2> <h2>Exports Apogée</h2>
<p><a class="stdlink" href="{{url_for('scodoc.config_codes_decisions')}}">configuration des codes de décision</a> <p><a class="stdlink" href="{{url_for('scodoc.config_codes_decisions')}}">Configuration des codes de décision</a>
</p> </p>
</section> </section>
<section> <section>
<h2>Assiduités</h2> <h2>Assiduités</h2>
<p><a class="stdlink" href="{{url_for('scodoc.config_assiduites')}}">configuration du module d'assiduités</a> <p><a class="stdlink" href="{{url_for('scodoc.config_assiduites')}}">Configuration du suivi de l'assiduité</a>
</p> </p>
</section> </section>

View File

@ -807,8 +807,6 @@ def visu_assi_group():
fmt = request.args.get("format", "html") fmt = request.args.get("format", "html")
group_ids: list[int] = request.args.get("group_ids", None) group_ids: list[int] = request.args.get("group_ids", None)
etudiants: list[dict] = []
if group_ids is None: if group_ids is None:
group_ids = [] group_ids = []
else: else:
@ -842,16 +840,17 @@ def visu_assi_group():
grp + ' <span class="fontred">' + groups_infos.groups_titles + "</span>" grp + ' <span class="fontred">' + groups_infos.groups_titles + "</span>"
) )
print()
return render_template( return render_template(
"assiduites/pages/visu_assi.j2", "assiduites/pages/visu_assi.j2",
tableau=table.html(), assi_metric=sco_preferences.ASSIDUITES_METRIC_LABEL.get(
gr_tit=gr_tit, sco_preferences.get_preference("assi_metrique", dept_id=g.scodoc_dept_id)
),
date_debut=dates["debut"], date_debut=dates["debut"],
date_fin=dates["fin"], date_fin=dates["fin"],
gr_tit=gr_tit,
group_ids=request.args.get("group_ids", None), group_ids=request.args.get("group_ids", None),
sco=ScoData(formsemestre=groups_infos.get_formsemestre()), sco=ScoData(formsemestre=groups_infos.get_formsemestre()),
tableau=table.html(),
title=f"Assiduité {grp} {groups_infos.groups_titles}", title=f"Assiduité {grp} {groups_infos.groups_titles}",
) )

View File

@ -1,7 +1,7 @@
# -*- mode: python -*- # -*- mode: python -*-
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
SCOVERSION = "9.6.8" SCOVERSION = "9.6.9"
SCONAME = "ScoDoc" SCONAME = "ScoDoc"