Update opolka/ScoDoc from ScoDoc/ScoDoc #2

Merged
opolka merged 1272 commits from ScoDoc/ScoDoc:master into master 2024-05-27 09:11:04 +02:00
11 changed files with 47 additions and 40 deletions
Showing only changes of commit cee57234f2 - Show all commits

View File

@ -777,7 +777,7 @@ class FormSemestre(db.Model):
""" """
partitions = [p for p in self.partitions if p.partition_name is not None] partitions = [p for p in self.partitions if p.partition_name is not None]
if with_default: if with_default:
partitions += [p for p in partitions if p.partition_name is None] partitions += [p for p in self.partitions if p.partition_name is None]
return partitions return partitions
@cached_property @cached_property

View File

@ -825,7 +825,7 @@ def tab_absences_html(groups_infos, etat=None):
H.extend( H.extend(
[ [
"<h3>Assiduités</h3>", "<h3>Assiduité</h3>",
'<ul class="ul_abs">', '<ul class="ul_abs">',
"<li>", "<li>",
form_choix_saisie_semaine(groups_infos), # Ajout Le Havre form_choix_saisie_semaine(groups_infos), # Ajout Le Havre
@ -835,7 +835,7 @@ def tab_absences_html(groups_infos, etat=None):
"</li>", "</li>",
f"""<li><a class="stdlink" href="{ f"""<li><a class="stdlink" href="{
url_for("assiduites.visu_assi_group", scodoc_dept=g.scodoc_dept, group_ids=group_ids, date_debut=formsemestre.date_debut.isoformat(), date_fin=formsemestre.date_fin.isoformat()) url_for("assiduites.visu_assi_group", scodoc_dept=g.scodoc_dept, group_ids=group_ids, date_debut=formsemestre.date_debut.isoformat(), date_fin=formsemestre.date_fin.isoformat())
}">État des assiduités du groupe</a></li>""", }">État de l'assiduité du groupe</a></li>""",
"</ul>", "</ul>",
"<h3>Feuilles</h3>", "<h3>Feuilles</h3>",
'<ul class="ul_feuilles">', '<ul class="ul_feuilles">',

View File

@ -614,8 +614,8 @@ class BasePreferences:
"assi_limit_annee", "assi_limit_annee",
{ {
"initvalue": 1, "initvalue": 1,
"title": "Ne lister que les assiduités de l'année", "title": "Ne lister que l'assiduités de l'année",
"explanation": "Limite l'affichage des listes d'assiduités et de justificatifs à l'année en cours", "explanation": "Limite l'affichage des listes d'assiduité et de justificatifs à l'année en cours",
"input_type": "boolcheckbox", "input_type": "boolcheckbox",
"labels": ["non", "oui"], "labels": ["non", "oui"],
"category": "assi", "category": "assi",

View File

@ -3206,6 +3206,9 @@ table.abs_form_table tr:hover td {
border: 1px solid red; border: 1px solid red;
} }
.ul_abs button {
margin-bottom: 6px;
}
/* ----- Formulator ------- */ /* ----- Formulator ------- */
ul.tf-msg { ul.tf-msg {

View File

@ -162,6 +162,7 @@ function uniqueCheckBox(box) {
* @param {CallableFunction} errors fonction à effectuer en cas d'échec * @param {CallableFunction} errors fonction à effectuer en cas d'échec
*/ */
function sync_get(path, success, errors) { function sync_get(path, success, errors) {
console.log("sync_get " + path);
$.ajax({ $.ajax({
async: false, async: false,
type: "GET", type: "GET",
@ -177,6 +178,7 @@ function sync_get(path, success, errors) {
* @param {CallableFunction} errors fonction à effectuer en cas d'échec * @param {CallableFunction} errors fonction à effectuer en cas d'échec
*/ */
function async_get(path, success, errors) { function async_get(path, success, errors) {
console.log("async_get " + path);
$.ajax({ $.ajax({
async: true, async: true,
type: "GET", type: "GET",
@ -193,6 +195,7 @@ function async_get(path, success, errors) {
* @param {CallableFunction} errors fonction à effectuer en cas d'échec * @param {CallableFunction} errors fonction à effectuer en cas d'échec
*/ */
function sync_post(path, data, success, errors) { function sync_post(path, data, success, errors) {
console.log("sync_post " + path);
$.ajax({ $.ajax({
async: false, async: false,
type: "POST", type: "POST",
@ -210,6 +213,7 @@ function sync_post(path, data, success, errors) {
* @param {CallableFunction} errors fonction à effectuer en cas d'échec * @param {CallableFunction} errors fonction à effectuer en cas d'échec
*/ */
function async_post(path, data, success, errors) { function async_post(path, data, success, errors) {
console.log("sync_post " + path);
return $.ajax({ return $.ajax({
async: true, async: true,
type: "POST", type: "POST",

View File

@ -1,7 +1,7 @@
{% include "assiduites/widgets/toast.j2" %} {% include "assiduites/widgets/toast.j2" %}
{% block pageContent %} {% block pageContent %}
<div class="pageContent"> <div class="pageContent">
<h3>Justifier des assiduités</h3> <h3>Justifier des absences ou retards</h3>
{% include "assiduites/widgets/tableau_base.j2" %} {% include "assiduites/widgets/tableau_base.j2" %}
<section class="liste"> <section class="liste">
<a class="icon filter" onclick="filterJusti()"></a> <a class="icon filter" onclick="filterJusti()"></a>

View File

@ -181,9 +181,9 @@
function removeAllAssiduites() { function removeAllAssiduites() {
openPromptModal( openPromptModal(
"Suppression des assiduités", "Suppression de l'assiduité",
document.createTextNode( document.createTextNode(
'Souhaitez vous réelement supprimer toutes les assiduités de cet étudiant ? Cette supression est irréversible.') 'Souhaitez vous réellement supprimer toutes les informations sur l\'assiduité de cet étudiant ? Cette suppression est irréversible.')
, ,
() => { () => {
getAllAssiduitesFromEtud(etudid, (data) => { getAllAssiduitesFromEtud(etudid, (data) => {

View File

@ -3,7 +3,7 @@
<div class="pageContent"> <div class="pageContent">
{{minitimeline | safe }} {{minitimeline | safe }}
<h2>Assiduités de {{sco.etud.nomprenom}}</h2> <h2>Assiduité de {{sco.etud.nomprenom}}</h2>
<div class="calendrier"> <div class="calendrier">
</div> </div>
@ -13,22 +13,22 @@
</select> </select>
</div> </div>
<div class="legende"> <div class="help">
<h3>Calendrier</h3> <h3>Calendrier</h3>
<p>Les jours non travaillés sont affiché en violet</p> <p>Les jours non travaillés sont affiché en violet</p>
<p>Les jours possèdant une bordure "bleu" sont des jours où des assiduités ont été justifiées par un <p>Les jours possèdant une bordure "bleu" sont des jours où des absences/retards ont été justifiées par un
justificatif valide</p> justificatif valide</p>
<p>Les jours possèdant une bordure "rouge" sont des jours où des assiduités ont été justifiées par un <p>Les jours possèdant une bordure "rouge" sont des jours où des absences/retards ont été justifiées par un
justificatif non valide</p> justificatif non valide</p>
<p>Le jour sera affiché en : </p> <p>Le jour sera affiché en : </p>
<ul> <ul>
<li>Rouge : S'il y a une assiduité "Absent"</li> <li>Rouge : s'il y a une absence enregistrée</li>
<li>Orange : S'il y a une assiduité "Retard" et pas d'assiduité "Absent"</li> <li>Orange : s'il y a un retard et pas d'absence</li>
<li>Vert : S'il y a une assiduité "Present" et pas d'assiduité "Absent" ni "Retard"</li> <li>Vert : s'il y a une présence enregistrée mais pas d'absence ni de retard</li>
<li>Blanc : S'il n'y a pas d'assiduité</li> <li>Blanc : s'il n'y a rien d'enregistré</li>
</ul> </ul>
<p>Vous pouvez passer votre curseur sur les jours colorés afin de voir les assiduités de cette journée.</p> <p>Vous pouvez passer le curseur sur les jours colorés afin de voir les informations de cette journée.</p>
</div> </div>
</div> </div>

View File

@ -1,16 +1,16 @@
<h2>Signalement différé des assiduités {{gr |safe}}</h2> <h2>Signalement différé de l'assiduité {{gr |safe}}</h2>
<div class="legende"> <div class="help">
<h3>Explication de la saisie différée</h3> <h3>Explication de la saisie différée</h3>
<p>Si la colonne n'est pas valide elle sera affichée en rouge, passez votre curseur sur la colonne pour afficher <p>Si la colonne n'est pas valide elle sera affichée en rouge, passez le curseur sur la colonne pour afficher
le message d'erreur</p> le message d'erreur</p>
<p>Sélectionner la date de début de la colonne mettra automatiquement la date de fin à la durée d'une séance <p>Sélectionner la date de début de la colonne mettra automatiquement la date de fin à la durée d'une séance
(préférence de département)</p> (préférence de département)</p>
<p>Modifier le module alors que des assiduités sont déjà enregistrées pour la période changera leur <p>Modifier le module alors que des informations d'assiduité sont déjà enregistrées pour la période changera leur
module.</p> module.</p>
<p>Il y a 4 boutons d'assiduités sur la colonne permettant de mettre l'assiduités à tous les étudiants</p> <p>Il y a 4 boutons sur la colonne permettant d'enregistrer l'information pour tous les étudiants</p>
<p>Le dernier des boutons retire l'assiduité.</p> <p>Le dernier des boutons retire l'information présente.</p>
<p>Vous pouvez ajouter des colonnes en appuyant sur le bouton + </p> <p>Vous pouvez ajouter des colonnes en appuyant sur le bouton + </p>
<p>Vous pouvez supprimer une colonne en appuyant sur la croix qui se situe dans le coin haut droit de la colonne <p>Vous pouvez supprimer une colonne en appuyant sur la croix qui se situe dans le coin haut droit de la colonne.
</p> </p>
</div> </div>
<h3>{{sem | safe }}</h3> <h3>{{sem | safe }}</h3>

View File

@ -74,16 +74,16 @@
<p>Vous pouvez justifier rapidement une assiduité en saisisant l'assiduité puis en appuyant sur "Justifier"</p> <p>Vous pouvez justifier rapidement une assiduité en saisisant l'assiduité puis en appuyant sur "Justifier"</p>
<h3>Explication de la saisie différée</h3> <h3>Explication de la saisie différée</h3>
<p>Si la colonne n'est pas valide elle sera affichée en rouge, passez votre curseur sur la colonne pour afficher <p>Si la colonne n'est pas valide elle sera affichée en rouge, passez le curseur sur la colonne pour afficher
le message d'erreur</p> le message d'erreur</p>
<p>Sélectionner la date de début de la colonne mettra automatiquement la date de fin à la durée d'une séance <p>Sélectionner la date de début de la colonne mettra automatiquement la date de fin à la durée d'une séance
(préférence de département)</p> (préférence de département)</p>
<p>Modifier le module alors que des assiduités sont déjà enregistrées pour la période changera leur <p>Modifier le module alors que des informations sont déjà enregistrées pour la période changera leur
module.</p> module.</p>
<p>Il y a 4 boutons d'assiduités sur la colonne permettant de mettre l'assiduités à tous les étudiants</p> <p>Il y a 4 boutons sur la colonne permettant d'enregistrer l'information pour tous les étudiants</p>
<p>Le dernier des boutons retire l'assiduité.</p> <p>Le dernier des boutons retire l'information présente.</p>
<p>Vous pouvez ajouter des colonnes en appuyant sur le bouton + </p> <p>Vous pouvez ajouter des colonnes en appuyant sur le bouton + </p>
<p>Vous pouvez supprimer une colonne en appuyant sur la croix qui se situe dans le coin haut droit de la colonne <p>Vous pouvez supprimer une colonne en appuyant sur la croix qui se situe dans le coin haut droit de la colonne.
</p> </p>
</div> </div>

View File

@ -137,7 +137,7 @@ def bilan_dept():
"""Gestionnaire assiduités, page principale""" """Gestionnaire assiduités, page principale"""
H = [ H = [
html_sco_header.sco_header( html_sco_header.sco_header(
page_title="Saisie des assiduités", page_title="Saisie de l'assiduité",
javascripts=[ javascripts=[
"js/assiduites.js", "js/assiduites.js",
"libjs/moment.new.min.js", "libjs/moment.new.min.js",
@ -147,16 +147,16 @@ def bilan_dept():
"css/assiduites.css", "css/assiduites.css",
], ],
), ),
"""<h2>Traitement des assiduités</h2> """<h2>Traitement de l'assiduité</h2>
<p class="help"> <p class="help">
Pour saisir des assiduités ou consulter les états, il est recommandé de passer par Pour saisir l'assiduité ou consulter les états, il est recommandé de passer par
le semestre concerné (saisie par jour ou saisie différée). le semestre concerné (saisie par jour ou saisie différée).
</p> </p>
""", """,
] ]
H.append( H.append(
"""<p class="help">Pour signaler, annuler ou justifier une assiduité pour un seul étudiant, """<p class="help">Pour signaler, annuler ou justifier l'assiduité d'un seul étudiant,
choisissez d'abord le concerné:</p>""" choisissez d'abord la personne concernée&nbsp;:</p>"""
) )
H.append(sco_find_etud.form_search_etud(dest_url="assiduites.bilan_etud")) H.append(sco_find_etud.form_search_etud(dest_url="assiduites.bilan_etud"))
if current_user.has_permission( if current_user.has_permission(
@ -364,7 +364,7 @@ def liste_assiduites_etud():
assiduite_id: int = request.args.get("assiduite_id", -1) assiduite_id: int = request.args.get("assiduite_id", -1)
header: str = html_sco_header.sco_header( header: str = html_sco_header.sco_header(
page_title="Liste des assiduités", page_title=f"Assiduité de {etud.nomprenom}",
init_qtip=True, init_qtip=True,
javascripts=[ javascripts=[
"js/assiduites.js", "js/assiduites.js",
@ -411,7 +411,7 @@ def bilan_etud():
abort(404, "étudiant inexistant dans ce département") abort(404, "étudiant inexistant dans ce département")
header: str = html_sco_header.sco_header( header: str = html_sco_header.sco_header(
page_title="Bilan de l'assiduité étudiante", page_title=f"Bilan de l'assiduité de {etud.nomprenom}",
init_qtip=True, init_qtip=True,
javascripts=[ javascripts=[
"js/assiduites.js", "js/assiduites.js",
@ -621,7 +621,7 @@ def signal_assiduites_group():
form_deb = formsemestre.date_debut.strftime("%d/%m/%Y") form_deb = formsemestre.date_debut.strftime("%d/%m/%Y")
form_fin = formsemestre.date_fin.strftime("%d/%m/%Y") form_fin = formsemestre.date_fin.strftime("%d/%m/%Y")
raise ScoValueError( raise ScoValueError(
f"Impossible de saisir les assiduités pour le {real_str}" f"Impossible de saisir l'assiduité pour le {real_str}"
+ f" : Jour en dehors du semestre ( {form_deb}{form_fin}) " + f" : Jour en dehors du semestre ( {form_deb}{form_fin}) "
) )
@ -802,7 +802,7 @@ def visu_assiduites_group():
) )
header: str = html_sco_header.sco_header( header: str = html_sco_header.sco_header(
page_title="Saisie journalière des assiduités", page_title="Saisie journalière de l'assiduité",
init_qtip=True, init_qtip=True,
javascripts=html_sco_header.BOOTSTRAP_MULTISELECT_JS javascripts=html_sco_header.BOOTSTRAP_MULTISELECT_JS
+ [ + [
@ -1041,7 +1041,7 @@ def signal_assiduites_diff():
if not groups_infos.members: if not groups_infos.members:
return ( return (
html_sco_header.sco_header(page_title="Assiduités Différées") html_sco_header.sco_header(page_title="Assiduité: saisie différée")
+ "<h3>Aucun étudiant ! </h3>" + "<h3>Aucun étudiant ! </h3>"
+ html_sco_header.sco_footer() + html_sco_header.sco_footer()
) )
@ -1056,7 +1056,7 @@ def signal_assiduites_diff():
etudiants = list(sorted(etudiants, key=lambda x: x["nom"])) etudiants = list(sorted(etudiants, key=lambda x: x["nom"]))
header: str = html_sco_header.sco_header( header: str = html_sco_header.sco_header(
page_title="Assiduités Différées", page_title="Assiduité: saisie différée",
init_qtip=True, init_qtip=True,
cssstyles=[ cssstyles=[
"css/assiduites.css", "css/assiduites.css",