Compare commits

...

5 Commits

  1. 2
      TrivialFormulator.py
  2. 2
      VERSION.py
  3. 2
      ZNotes.py
  4. 6
      ZScoDoc.py
  5. 2
      ZScoUsers.py
  6. 25
      html_sidebar.py
  7. 8
      sco_apogee_csv.py
  8. 2
      sco_dept.py
  9. 6
      sco_edit_module.py
  10. 4
      sco_edit_ue.py
  11. 2
      sco_find_etud.py
  12. 14
      sco_formations.py
  13. 9
      sco_formsemestre_inscriptions.py
  14. 19
      sco_formsemestre_validation.py
  15. 25
      sco_moduleimpl_status.py
  16. 22
      sco_page_etud.py
  17. 8
      scolars.py

@ -760,6 +760,6 @@ def tf_error_message(msg):
if type(msg) == StringType:
msg = [msg]
return (
'<ul class="tf-msg"><li id="errorMessage" class="tf-msg">%s</li></ul>'
'<ul class="tf-msg"><li class="tf-msg error-message">%s</li></ul>'
% '</li><li class="tf-msg">'.join(msg)
)

@ -1,7 +1,7 @@
# -*- mode: python -*-
# -*- coding: utf-8 -*-
SCOVERSION = "7.25m"
SCOVERSION = "7.26m"
SCONAME = "ScoDoc"

@ -376,7 +376,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
if editable:
H.append(
"""<p><a class="stdlink" href="formation_create" id="create_formation_link">Créer une formation</a></p>
"""<p><a class="stdlink" href="formation_create" id="link-create-formation">Créer une formation</a></p>
<p><a class="stdlink" href="formation_import_xml_form">Importer une formation (xml)</a></p>
<p class="help">Une "formation" est un programme pédagogique structuré en UE, matières et modules. Chaque semestre se réfère à une formation. La modification d'une formation affecte tous les semestres qui s'y réfèrent.</p>
"""

@ -898,7 +898,9 @@ subversion: %(svn_version)s
# aucun departement defini: aide utilisateur
H.append("<p>Aucun département à ajouter !</p>")
else:
H.append("""<form action="create_dept" id="CreateDpt"><select name="DeptId"/>""")
H.append(
"""<form action="create_dept" ><select id="create-dept" name="DeptId"/>"""
)
for deptId in addableDepts:
H.append("""<option value="%s">%s</option>""" % (deptId, deptId))
H.append(
@ -915,7 +917,7 @@ subversion: %(svn_version)s
(le site peut donc être recréé sans perte de données).
</p>
<form action="delete_dept">
<select name="DeptId" id= "DeleteDept">
<select name="DeptId" id= "delete-dept">
"""
)
for deptFolder in self._list_depts():

@ -143,7 +143,7 @@ class ZScoUsers(
if authuser.has_permission(ScoUsersAdmin, self):
H.append(
'<p><a id="creer_Utilisateur" href="create_user_form" class="stdlink">Ajouter un utilisateur</a>'
'<p><a id="create-user" href="create_user_form" class="stdlink">Ajouter un utilisateur</a>'
)
H.append(
'&nbsp;&nbsp; <a href="import_users_form" class="stdlink">Importer des utilisateurs</a></p>'

@ -55,9 +55,9 @@ def sidebar_common(context, REQUEST=None):
% params,
context.sidebar_dept(REQUEST),
"""<h2 class="insidebar">Scolarit&eacute;</h2>
<a id="SemestresLink" href="%(ScoURL)s" class="sidebar">Semestres</a> <br/>
<a id="ProgrammesLink" href="%(NotesURL)s" class="sidebar">Programmes</a> <br/>
<a id="AbsnecesLink" href="%(AbsencesURL)s" class="sidebar">Absences</a> <br/>
<a href="%(ScoURL)s" id="link-semestre" class="sidebar">Semestres</a> <br/>
<a href="%(NotesURL)s" id="link-programmes" class="sidebar">Programmes</a> <br/>
<a href="%(AbsencesURL)s" id="link-absence" class="sidebar">Absences</a> <br/>
"""
% params,
]
@ -66,12 +66,13 @@ def sidebar_common(context, REQUEST=None):
ScoUsersView, context
):
H.append(
"""<a id="utilisateurs_Vue" href="%(UsersURL)s" class="sidebar">Utilisateurs</a> <br/>""" % params
"""<a id = "link-view-users"href="%(UsersURL)s" class="sidebar">Utilisateurs</a> <br/>"""
% params
)
if authuser.has_permission(ScoChangePreferences, context):
H.append(
"""<a id="preferences_Edit" href="%(ScoURL)s/edit_preferences" class="sidebar">Paramétrage</a> <br/>"""
"""<a id="link-preferences" href="%(ScoURL)s/edit_preferences" class="sidebar">Paramétrage</a> <br/>"""
% params
)
@ -104,7 +105,7 @@ def sidebar(context, REQUEST=None):
"""<h2 id="insidebar-etud"><a href="%(ScoURL)s/ficheEtud?etudid=%(etudid)s" class="sidebar">
<font color="#FF0000">%(civilite_str)s %(nom_disp)s</font></a>
</h2>
<p id="euid">%(etudid)s</p>
<p id ="euid">%(etudid)s</p>
<b>Absences</b>"""
% params
)
@ -124,21 +125,21 @@ def sidebar(context, REQUEST=None):
if REQUEST.AUTHENTICATED_USER.has_permission(ScoAbsChange, context):
H.append(
"""
<li> <a id="ajout_Absence" href="%(ScoURL)s/Absences/SignaleAbsenceEtud?etudid=%(etudid)s">Ajouter</a></li>
<li> <a id="justifier_Absence" href="%(ScoURL)s/Absences/JustifAbsenceEtud?etudid=%(etudid)s">Justifier</a></li>
<li> <a id="supprimer_Absence" href="%(ScoURL)s/Absences/AnnuleAbsenceEtud?etudid=%(etudid)s">Supprimer</a></li>
<li> <a id="add-absence" href="%(ScoURL)s/Absences/SignaleAbsenceEtud?etudid=%(etudid)s">Ajouter</a></li>
<li> <a id="justify-absence" href="%(ScoURL)s/Absences/JustifAbsenceEtud?etudid=%(etudid)s">Justifier</a></li>
<li> <a id="delete-absence" href="%(ScoURL)s/Absences/AnnuleAbsenceEtud?etudid=%(etudid)s">Supprimer</a></li>
"""
% params
)
if context.get_preference("handle_billets_abs"):
H.append(
"""<li> <a id="afficher_Billets" href="%(ScoURL)s/Absences/listeBilletsEtud?etudid=%(etudid)s">Billets</a></li>"""
"""<li> <a id="display-billet" href="%(ScoURL)s/Absences/listeBilletsEtud?etudid=%(etudid)s">Billets</a></li>"""
% params
)
H.append(
"""
<li> <a id="afficher_Calendrier" href="%(ScoURL)s/Absences/CalAbs?etudid=%(etudid)s">Calendrier</a></li>
<li> <a id="afficher_Liste_Absence" href="%(ScoURL)s/Absences/ListeAbsEtud?etudid=%(etudid)s">Liste</a></li>
<li> <a id="display-calendar" href="%(ScoURL)s/Absences/CalAbs?etudid=%(etudid)s">Calendrier</a></li>
<li> <a id="display-list-absence" href="%(ScoURL)s/Absences/ListeAbsEtud?etudid=%(etudid)s">Liste</a></li>
</ul>
"""
% params

@ -422,7 +422,7 @@ class ApoEtud(dict):
# Elements UE
decisions_ue = nt.get_etud_decision_ues(etudid)
for ue in nt.get_ues():
if ue["code_apogee"] == code:
if code in ue["code_apogee"].split(","):
if self.export_res_ues:
if decisions_ue and ue["ue_id"] in decisions_ue:
ue_status = nt.get_etud_ue_status(etudid, ue["ue_id"])
@ -443,7 +443,7 @@ class ApoEtud(dict):
modimpls = nt.get_modimpls()
module_code_found = False
for modimpl in modimpls:
if modimpl["module"]["code_apogee"] == code:
if code in modimpl["module"]["code_apogee"].split(","):
n = nt.get_etud_mod_moy(modimpl["moduleimpl_id"], etudid)
if n != "NI" and self.export_res_modules:
return dict(N=_apo_fmt_note(n), B=20, J="", R="")
@ -972,13 +972,13 @@ class ApoData:
self.context, sem["formsemestre_id"]
)
for ue in nt.get_ues():
if ue["code_apogee"] == code:
if code in ue["code_apogee"].split(","):
s.add(code)
continue
# associé à un module:
modimpls = nt.get_modimpls()
for modimpl in modimpls:
if modimpl["module"]["code_apogee"] == code:
if code in modimpl["module"]["code_apogee"].split(","):
s.add(code)
continue
# log('codes_by_sem=%s' % pprint.pformat(codes_by_sem))

@ -143,7 +143,7 @@ Chercher étape courante: <input name="etape_apo" type="text" size="8" spellchec
"""<hr>
<h3>Gestion des étudiants</h3>
<ul>
<li><a class="stdlink" id="link_create_etudident" href="etudident_create_form">créer <em>un</em> nouvel étudiant</a></li>
<li><a class="stdlink" id="link-create-student" href="etudident_create_form">créer <em>un</em> nouvel étudiant</a></li>
<li><a class="stdlink" href="form_students_import_excel">importer de nouveaux étudiants</a> (ne pas utiliser sauf cas particulier, utilisez plutôt le lien dans
le tableau de bord semestre si vous souhaitez inscrire les
étudiants importés à un semestre)</li>

@ -153,8 +153,8 @@ def module_create(context, matiere_id=None, REQUEST=None):
"code_apogee",
{
"title": "Code Apogée",
"size": 15,
"explanation": "code élément pédagogique Apogée (optionnel)",
"size": 25,
"explanation": "code élément pédagogique Apogée (optionnel) ou liste de codes ELP séparés par une virgule",
},
),
(
@ -355,7 +355,7 @@ def module_edit(context, module_id=None, REQUEST=None):
{
"title": "Code Apogée",
"size": 15,
"explanation": "code élément pédagogique Apogée (optionnel)",
"explanation": "code élément pédagogique Apogée (optionnel) ou liste de codes ELP séparés par une virgule",
},
),
(

@ -146,8 +146,8 @@ def ue_edit(context, ue_id=None, create=False, formation_id=None, REQUEST=None):
"code_apogee",
{
"title": "Code Apogée",
"size": 15,
"explanation": "code élément pédagogique Apogée (optionnel)",
"size": 25,
"explanation": "code élément pédagogique Apogée (optionnel) ou liste de codes ELP séparés par une virgule",
},
),
]

@ -58,7 +58,7 @@ def form_search_etud(
H.append(
"""<form action="search_etud_in_dept" method="POST">
<b>%s</b>
<input type="text" name="expnom" id="searchEtud" width="12" spellcheck="false" value="">
<input type="text" name="expnom" id="search-student" width="12" spellcheck="false" value="">
<input type="submit" value="Chercher">
<br/>(entrer une partie du nom)
"""

@ -229,7 +229,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
f["parcours_name"] = ""
f["_titre_target"] = "ue_list?formation_id=%(formation_id)s" % f
f["_titre_link_class"] = "stdlink"
f["_titre_id"] = "titre_%s" % f["acronyme"]
f["_titre_id"] = "titre-%s" % f["acronyme"].lower().replace(" ","-")
# Ajoute les semestres associés à chaque formation:
f["sems"] = sco_formsemestre.do_formsemestre_list(
context, args={"formation_id": f["formation_id"]}
@ -242,8 +242,8 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
for s in f["sems"]
]
+ [
'<a class="stdlink" id="addSemestre_%s" href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a>'
% (f["acronyme"],f["formation_id"])
'<a class="stdlink" id="add-semestre-%s" href="formsemestre_createwithmodules?formation_id=%s&semestre_id=1">ajouter</a>'
% (f["acronyme"].lower().replace(" ", "-"), f["formation_id"])
]
)
if f["sems"]:
@ -260,15 +260,15 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
but_locked = '<span class="but_placeholder"></span>'
if editable and not locked:
but_suppr = (
'<a class="stdlink" id="delete_Formation_%s" href="formation_delete?formation_id=%s">%s</a>'
% (f["acronyme"],f["formation_id"], suppricon)
'<a class="stdlink" id="delete-formation-%s" href="formation_delete?formation_id=%s">%s</a>'
% (f["acronyme"], f["formation_id"], suppricon)
)
else:
but_suppr = '<span class="but_placeholder"></span>'
if editable:
but_edit = (
'<a class="stdlink" id="edit_Formation_%s" href="formation_edit?formation_id=%s">%s</a>'
% (f["acronyme"],f["formation_id"], editicon)
'<a class="stdlink" id="edit-formation-%s" href="formation_edit?formation_id=%s">%s</a>'
% (f["acronyme"], f["formation_id"], editicon)
)
else:
but_edit = '<span class="but_placeholder"></span>'

@ -147,9 +147,14 @@ def formsemestre_inscription_with_modules_form(
if (not only_ext) or (sem["modalite"] == "EXT"):
H.append(
"""
<li><a class="stdlink" id="inscription_Semestre_%s" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>
<li><a class="stdlink" id="inscription-semestre-%s" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>
"""
% (sem["formsemestre_id"],etudid, sem["formsemestre_id"], sem["titremois"])
% (
sem["formsemestre_id"],
etudid,
sem["formsemestre_id"],
sem["titremois"],
)
)
H.append("</ul>")
else:

@ -401,9 +401,9 @@ def formsemestre_validation_etud_manu(
def _redirect_valid_choice(
formsemestre_id, etudid, Se, choice, desturl, sortcol, REQUEST
):
adr = (
"formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1"
% (formsemestre_id, etudid)
adr = "formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1" % (
formsemestre_id,
etudid,
)
if sortcol:
adr += "&sortcol=" + sortcol
@ -454,8 +454,8 @@ def decisions_possible_rows(Se, assiduite, subtitle="", trclass=""):
H.append("<th>Code %s</th><th>Devenir</th></tr>" % TitleCur)
for ch in choices:
H.append(
"""<tr class="%s"><td title="règle %s"><input type="radio" name="codechoice" value="%s" id="choice_input_%s" onClick="document.getElementById('subut').disabled=false;">"""
% (trclass, ch.rule_id, ch.codechoice,ch.rule_id)
"""<tr class="%s"><td title="règle %s"><input type="radio" name="codechoice" value="%s" id="input-choice-%s" onClick="document.getElementById('subut').disabled=false;">"""
% (trclass, ch.rule_id, ch.codechoice, ch.rule_id)
)
H.append("%s </input></td>" % ch.explication)
if Se.prev:
@ -640,8 +640,13 @@ def formsemestre_recap_parcours_table(
# log('')
H.append(
'<td class="%s" id="ue_%s" title="%s">%s</td>'
% (class_ue,ue["acronyme"], " ".join(explanation_ue), scu.fmt_note(moy_ue))
'<td class="%s" id="ue-%s" title="%s">%s</td>'
% (
class_ue,
ue["acronyme"],
" ".join(explanation_ue),
scu.fmt_note(moy_ue),
)
)
if len(ues) < Se.nb_max_ue:
H.append('<td colspan="%d"></td>' % (Se.nb_max_ue - len(ues)))

@ -169,7 +169,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
<table>
<tr>
<td class="fichetitre2">Responsable: </td><td class="redboldtext">""",
<td class="fichetitre2">Responsable: </td><td id="ens-responsable" class="redboldtext">""",
context.Users.user_info(M["responsable_id"])["nomprenom"],
"""<span class="blacktt">(%(responsable_id)s)</span>""" % M,
]
@ -181,7 +181,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
)
except:
pass
H.append("""</td><td>""")
H.append("""</td><td class="ens-in-module">""")
H.append(
", ".join([context.Users.user_info(m["ens_id"])["nomprenom"] for m in M["ens"]])
)
@ -321,7 +321,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
top_table_links = ""
if sem["etat"] == "1": # non verrouillé
top_table_links = (
"""<a class="stdlink" id="add_Evaluation_Link" href="evaluation_create?moduleimpl_id=%(moduleimpl_id)s">Créer nouvelle évaluation</a>
"""<a class="stdlink" id="link-add-evaluation" href="evaluation_create?moduleimpl_id=%(moduleimpl_id)s">Créer nouvelle évaluation</a>
<a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a>
"""
% M
@ -360,12 +360,18 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
"""<a href="evaluation_edit?evaluation_id=%(evaluation_id)s" class="mievr_evalnodate">Evaluation sans date</a>"""
% eval
)
H.append("&nbsp;&nbsp;&nbsp; <em id=""%(description)s"">%(description)s</em>" % eval)
H.append(
"&nbsp;&nbsp;&nbsp; <em id="
"%(description)s"
">%(description)s</em>" % eval
)
if eval["evaluation_type"] == EVALUATION_RATTRAPAGE:
H.append(
"""<span class="mievr_rattr" title="remplace si meilleure note">rattrapage</span>"""
)
H.append("<div id='hidden_id' style='visibility:hidden'>%(evaluation_id)s</div>")
H.append(
"<div id='hidden-id' style='visibility:hidden'>%(evaluation_id)s</div>"
)
elif eval["evaluation_type"] == EVALUATION_SESSION2:
H.append(
"""<span class="mievr_rattr" title="remplace autres notes">session 2</span>"""
@ -454,7 +460,14 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
"""<a class="smallbutton" href="evaluation_delete?evaluation_id=%(evaluation_id)s">"""
% eval
)
H.append(scu.icontag("delete_img", alt="supprimer", title="Supprimer", id="delete_buttion_%s" %eval["evaluation_id"]))
H.append(
scu.icontag(
"delete_img",
alt="supprimer",
title="Supprimer",
id="button-delete-%s" % eval["evaluation_id"],
)
)
if caneditevals:
H.append("""</a>""")
elif etat["evalcomplete"]:

@ -74,27 +74,21 @@ def _menuScolarite(context, authuser, sem, etudid):
if ins["etat"] != "D":
dem_title = "Démission"
dem_url = (
"formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
dem_url = "formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
else:
dem_title = "Annuler la démission"
dem_url = (
"doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
% args
"doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
# Note: seul un etudiant inscrit (I) peut devenir défaillant.
if ins["etat"] != sco_codes_parcours.DEF:
def_title = "Déclarer défaillance"
def_url = (
"formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
def_url = "formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
elif ins["etat"] == sco_codes_parcours.DEF:
def_title = "Annuler la défaillance"
def_url = (
"doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
% args
"doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
)
def_enabled = (
(ins["etat"] != "D")
@ -430,16 +424,16 @@ def ficheEtud(context, etudid=None, REQUEST=None):
<div class="fichesituation">
<div class="fichetablesitu">
<table>
<tr><td class="fichetitre2">Situation :</td><td id="situation_etudiant">%(situation)s</td></tr>
<tr><td class="fichetitre2">Situation :</td><td id="student-situation">%(situation)s</td></tr>
%(groupes_row)s
<tr><td class="fichetitre2">%(ne)s le :</td><td id="naissance_etudiant">%(info_naissance)s</td></tr>
<tr><td class="fichetitre2">%(ne)s le :</td><td id="student-birth">%(info_naissance)s</td></tr>
</table>
<!-- Adresse -->
<div class="ficheadresse" id="ficheadresse">
<div class="ficheadresse" id="fiche-adresse">
<table><tr>
<td class="fichetitre2">Adresse :</td><td id="adresse_etudiant> %(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s
<td class="fichetitre2">Adresse :</td><td id="student-address"> %(domicile)s %(codepostaldomicile)s %(villedomicile)s %(paysdomicile)s
%(modifadresse)s
%(telephones)s
</td></tr></table>

@ -361,7 +361,8 @@ def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None
parameters = {}
if context:
err_page = context.confirmDialog(
message="""<h3 id= "titleError">Code étudiant (%s) dupliqué !</h3>""" % code_name,
message="""<h3 class="title-error">Code étudiant (%s) dupliqué !</h3>"""
% code_name,
helpmsg="""Le %s %s est déjà utilisé: un seul étudiant peut avoir ce code. Vérifier votre valeur ou supprimer l'autre étudiant avec cette valeur.<p><ul><li>"""
% (code_name, args[code_name])
+ "</li><li>".join(listh)
@ -372,7 +373,10 @@ def _check_duplicate_code(cnx, args, code_name, context, edit=True, REQUEST=None
REQUEST=REQUEST,
)
else:
err_page = """<h3 id="titleError">Code étudiant (%s) dupliqué !</h3>""" % code_name
err_page = (
"""<h3 class="title-error">Code étudiant (%s) dupliqué !</h3>"""
% code_name
)
log("*** error: code %s duplique: %s" % (code_name, args[code_name]))
raise ScoGenError(err_page)

Loading…
Cancel
Save