forked from ScoDoc/ScoDoc
Compare commits
24 Commits
FEATURE/Aj
...
master
Author | SHA1 | Date | |
---|---|---|---|
7d721a98ff | |||
965c90bdc6 | |||
37c4b1f566 | |||
891b87185e | |||
d58e8cec9d | |||
a6fd3f3df5 | |||
a6e76c6898 | |||
46670390b6 | |||
|
07c6cb0002 | ||
eec562610d | |||
3644350d8f | |||
027122b22c | |||
|
5cad38d6c8 | ||
|
401bbf103d | ||
b89277a9a8 | |||
11618196b3 | |||
b5aaa08d10 | |||
|
2c7d55713a | ||
|
01820b5a91 | ||
|
600016d1e0 | ||
|
87f136d6b9 | ||
|
699b482c30 | ||
|
34e34b188c | ||
|
65221f247c |
@ -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"><select id="CreateDept" 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(
|
||||
' <a href="import_users_form" class="stdlink">Importer des utilisateurs</a></p>'
|
||||
|
@ -1 +0,0 @@
|
||||
build
|
@ -55,9 +55,9 @@ def sidebar_common(context, REQUEST=None):
|
||||
% params,
|
||||
context.sidebar_dept(REQUEST),
|
||||
"""<h2 class="insidebar">Scolarité</h2>
|
||||
<a href="%(ScoURL)s" id="SemestresLink" class="sidebar">Semestres</a> <br/>
|
||||
<a href="%(NotesURL)s" id="ProgrammesLink" class="sidebar">Programmes</a> <br/>
|
||||
<a href="%(AbsencesURL)s" id="AbsencesLink" 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,13 +66,13 @@ def sidebar_common(context, REQUEST=None):
|
||||
ScoUsersView, context
|
||||
):
|
||||
H.append(
|
||||
"""<a id = "utilisateurs_Vue"href="%(UsersURL)s" class="sidebar">Utilisateurs</a> <br/>"""
|
||||
"""<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
|
||||
)
|
||||
|
||||
@ -105,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
|
||||
)
|
||||
@ -125,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)
|
||||
"""
|
||||
@ -171,7 +171,7 @@ def search_etud_in_dept(context, expnom="", REQUEST=None):
|
||||
)
|
||||
)
|
||||
else:
|
||||
H.append('<h2 style="color: red;">Aucun résultat pour "%s".</h2>' % expnom)
|
||||
H.append('<h2 id="title-no-result" style="color: red;">Aucun résultat pour "%s".</h2>' % expnom)
|
||||
H.append(
|
||||
"""<p class="help">La recherche porte sur tout ou partie du NOM ou du NIP de l'étudiant</p>"""
|
||||
)
|
||||
|
@ -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"].lower().replace(" ","-"), f["formation_id"], editicon)
|
||||
)
|
||||
else:
|
||||
but_edit = '<span class="but_placeholder"></span>'
|
||||
|
@ -147,14 +147,9 @@ 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,10 +640,10 @@ def formsemestre_recap_parcours_table(
|
||||
# log('')
|
||||
|
||||
H.append(
|
||||
'<td class="%s" id="ue_%s" title="%s">%s</td>'
|
||||
'<td class="%s" id="ue-%s" title="%s">%s</td>'
|
||||
% (
|
||||
class_ue,
|
||||
ue["acronyme"],
|
||||
ue["acronyme"].lower().replace(" ","-"),
|
||||
" ".join(explanation_ue),
|
||||
scu.fmt_note(moy_ue),
|
||||
)
|
||||
|
@ -169,9 +169,9 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td class="fichetitre2">Responsable: </td><td class="redboldtext" id="ens_Responsable">""",
|
||||
<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,
|
||||
"""<span class="blacktt">(%(responsable_id)s)</span>""" % M,
|
||||
]
|
||||
try:
|
||||
sco_moduleimpl.can_change_module_resp(context, REQUEST, moduleimpl_id)
|
||||
@ -181,7 +181,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
)
|
||||
except:
|
||||
pass
|
||||
H.append("""</td><td class="ens_Dans_Module">""")
|
||||
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="lienAjoutEvaluation" 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,18 +360,12 @@ 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(
|
||||
" <em id = "
|
||||
"%(description)s"
|
||||
">%(description)s</em>" % eval
|
||||
)
|
||||
H.append(
|
||||
"<div id='hidden_id' style='visibility:hidden'>%(evaluation_id)s</div>"
|
||||
)
|
||||
H.append(" <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>")
|
||||
elif eval["evaluation_type"] == EVALUATION_SESSION2:
|
||||
H.append(
|
||||
"""<span class="mievr_rattr" title="remplace autres notes">session 2</span>"""
|
||||
@ -465,7 +459,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
"delete_img",
|
||||
alt="supprimer",
|
||||
title="Supprimer",
|
||||
id="delete_button_%s" % eval["evaluation_id"],
|
||||
id="button-delete-%s" % eval["evaluation_id"],
|
||||
)
|
||||
)
|
||||
if caneditevals:
|
||||
|
@ -26,9 +26,7 @@
|
||||
##############################################################################
|
||||
|
||||
"""ScoDoc ficheEtud
|
||||
|
||||
Fiche description d'un étudiant et de son parcours
|
||||
|
||||
"""
|
||||
|
||||
import sco_utils as scu
|
||||
@ -415,46 +413,36 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
||||
<div class="ficheEtud" id="ficheEtud"><table>
|
||||
<tr><td>
|
||||
<h2>%(nomprenom)s (%(inscription)s)</h2>
|
||||
|
||||
<span>%(emaillink)s</span>
|
||||
</td><td class="photocell">
|
||||
<a href="etud_photo_orig_page?etudid=%(etudid)s">%(etudfoto)s</a>
|
||||
</td></tr></table>
|
||||
|
||||
<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">Né%(ne)s le :</td><td id="naissance_etudiant">%(info_naissance)s</td></tr>
|
||||
<tr><td class="fichetitre2">Né%(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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
%(inscriptions_mkup)s
|
||||
|
||||
<div class="ficheadmission">
|
||||
%(adm_data)s
|
||||
|
||||
%(fichiers_archive_htm)s
|
||||
</div>
|
||||
|
||||
%(debouche_html)s
|
||||
|
||||
<div class="ficheannotations">
|
||||
%(tit_anno)s
|
||||
<table id="etudannotations">%(liste_annotations)s</table>
|
||||
|
||||
<form action="doAddAnnotation" method="GET" class="noprint">
|
||||
<input type="hidden" name="etudid" value="%(etudid)s">
|
||||
<b>Ajouter une annotation sur %(nomprenom)s: </b>
|
||||
@ -472,9 +460,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
||||
</table>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="code_nip">code NIP: %(code_nip)s</div>
|
||||
|
||||
</div>
|
||||
"""
|
||||
header = context.sco_header(
|
||||
|
@ -361,8 +361,7 @@ 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)
|
||||
@ -373,10 +372,7 @@ 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)
|
||||
|
||||
|
0
scotests/export_formation1.xml
Normal file → Executable file
0
scotests/export_formation1.xml
Normal file → Executable file
1352
scotests/formation_export.json
Executable file
1352
scotests/formation_export.json
Executable file
File diff suppressed because it is too large
Load Diff
59
scotests/test_AnnuleAbsencesDatesNoJust.py
Executable file
59
scotests/test_AnnuleAbsencesDatesNoJust.py
Executable file
@ -0,0 +1,59 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -
|
||||
|
||||
""" Création d'une absence et utilisation de AnnuleAbsenceDatesNoJust """
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs_views
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Création d'un étudiant
|
||||
etud = G.create_etud(code_nip=None)
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
etudid=etud["etudid"]
|
||||
|
||||
# --- Création d'une absence
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut="22/01/2021", datefin="22/01/2021", demijournee=2, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
# --- Annulation d'absence
|
||||
context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021", REQUEST=REQUEST)
|
||||
|
||||
""" Erreur : File "/opt/scodoc/Products/ScoDoc/ZAbsences.py", line 323, in AnnuleAbsencesDatesNoJust
|
||||
vars(),
|
||||
psycopg2.DataError: invalid input syntax for type date: "2"
|
||||
LINE 1: ...es where etudid='EID1' and (not estjust) and jour='2' and mo... """
|
108
scotests/test_CountAbs.py
Executable file
108
scotests/test_CountAbs.py
Executable file
@ -0,0 +1,108 @@
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs
|
||||
import sco_abs_views
|
||||
import sco_abs_notification
|
||||
import ZAbsences
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etud = G.create_etud(code_nip=None)
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
# --- Saisie absences
|
||||
etudid = etud["etudid"]
|
||||
|
||||
for debut, fin, demijournee in [
|
||||
("15/01/2021", "15/01/2021", 1),
|
||||
("18/01/2021", "18/01/2021", 0),
|
||||
("19/01/2021", "19/01/2021", 2),
|
||||
("22/01/2021", "22/01/2021", 1)
|
||||
] :
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut=debut, datefin=fin, demijournee=demijournee, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
|
||||
# --- Justification de certaines absences
|
||||
|
||||
for debut, fin, demijournee in [
|
||||
("15/01/2021", "15/01/2021", 1),
|
||||
("18/01/2021", "18/01/2021", 0),
|
||||
("19/01/2021", "19/01/2021", 2)
|
||||
] :
|
||||
sco_abs_views.doJustifAbsence(context.Absences, datedebut=debut, datefin=fin, demijournee=demijournee, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
|
||||
# --- Utilisation de CountAbs() de sco_abs
|
||||
|
||||
a = sco_abs.getAbsSemEtud(context.Absences, sem, etudid)
|
||||
nb_abs = a.CountAbs()
|
||||
nb_absj = a.CountAbsJust()
|
||||
|
||||
# --- Utilisation de CountAbs() de ZAbsences
|
||||
|
||||
nb_abs2 = context.Absences.CountAbs(etudid=etudid, debut="01/01/2021", fin="06/30/2021")
|
||||
nb_absj2 = context.Absences.CountAbsJust(etudid=etudid, debut="01/01/2021", fin="06/30/2021")
|
||||
|
||||
assert nb_abs == nb_abs2 == 5
|
||||
assert nb_absj == nb_absj2 == 4
|
||||
|
||||
# --- Supression d'absence
|
||||
|
||||
_ = sco_abs_views.doAnnuleAbsence(context.Absences, "19/01/2021", "19/01/2021", 2, etudid=etudid, REQUEST=REQUEST)
|
||||
b = sco_abs.getAbsSemEtud(context.Absences, sem, etudid)
|
||||
|
||||
# --- Vérification
|
||||
|
||||
new_nbabs = b.CountAbs()
|
||||
new_nbabs2 = context.Absences.CountAbs(etudid=etudid, debut="01/01/2021", fin="06/30/2021")
|
||||
|
||||
print(new_nbabs)
|
||||
print(new_nbabs2)
|
||||
|
||||
assert new_nbabs == new_nbabs2
|
||||
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
CountAbs de ZAbsence ----> OK
|
||||
CountAbs de sco_abs_view ----> bug
|
||||
|
||||
Peut être du au fait que la fonction getAbsSemEtud ne se met pas à jour par rapport aux absences supprimés.
|
||||
"""
|
117
scotests/test_abs_demijournee.py
Executable file
117
scotests/test_abs_demijournee.py
Executable file
@ -0,0 +1,117 @@
|
||||
""" Parametre demijournee ne fonctionne pas lorsque demijournee = 2
|
||||
Créer et justifier des absences en utilisant le parametre demijournee
|
||||
"""
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs
|
||||
import sco_abs_views
|
||||
import sco_abs_notification
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etud = G.create_etud(code_nip=None)
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
|
||||
# --- Saisie absences
|
||||
etudid = etud["etudid"]
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"15/01/2021",
|
||||
"15/01/2021",
|
||||
demijournee=2,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"18/01/2021",
|
||||
"18/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"19/01/2021",
|
||||
"19/01/2021",
|
||||
demijournee=0,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Justification de certaines absences
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"18/01/2021",
|
||||
"18/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"19/01/2021",
|
||||
"19/01/2021",
|
||||
demijournee=2,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# NE JUSTIFIE QUE LE MATIN MALGRES LE PARAMETRE demijournee = 2
|
||||
|
||||
# --- Test
|
||||
|
||||
a = sco_abs.getAbsSemEtud(context.Absences, sem, etudid)
|
||||
assert a.CountAbs() == 4 #l'étudiant a été absent le 15 journée compléte (2 abs : 1 matin, 1 apres midi) et le 18 (1 matin), et le 19 (1 apres midi).
|
||||
assert a.CountAbsJust() == 2 # Justifie abs du matin + abs après midi
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
Pb : le 2 ne peut pas être pris en tant que int car string dans la fonction
|
||||
-----> Pb regler
|
||||
|
||||
"""
|
266
scotests/test_absence.py
Executable file
266
scotests/test_absence.py
Executable file
@ -0,0 +1,266 @@
|
||||
""" creation de 10 étudiants, formation, semestre, ue, module, absences le matin, l'apres midi, la journée compléte
|
||||
et justification d'absences, supression d'absences, création d'une liste etat absences, creation d'un groupe afin
|
||||
de tester la fonction EtatAbsencesGroupes
|
||||
|
||||
Fonctions de l'API utilisé :
|
||||
- doSignaleAbsence
|
||||
- doAnnuleAbsence
|
||||
- doJustifAbsence
|
||||
- getAbsSemEtud
|
||||
- get_partition_groups
|
||||
- get_partitions_list
|
||||
- CountAbs
|
||||
- CountAbsJust
|
||||
- ListeAbsEtud
|
||||
- partition_create
|
||||
- createGroup
|
||||
- set_group
|
||||
- EtatAbsenceGr
|
||||
- AddBilletAbsence
|
||||
- listeBilletsEtud
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs
|
||||
import sco_abs_views
|
||||
import sco_abs_notification
|
||||
import ZAbsences
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
for etud in etuds:
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
#--- Création d'une évaluation
|
||||
e = G.create_evaluation(
|
||||
moduleimpl_id=mi["moduleimpl_id"],
|
||||
jour="22/01/2021",
|
||||
description="evaluation test",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
|
||||
# --- Saisie absences
|
||||
etudid = etuds[0]["etudid"]
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"15/01/2021",
|
||||
"15/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"18/01/2021",
|
||||
"18/01/2021",
|
||||
demijournee=0,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"19/01/2021",
|
||||
"19/01/2021",
|
||||
demijournee=2,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"22/01/2021",
|
||||
"22/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Justification de certaines absences
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"15/01/2021",
|
||||
"15/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"18/01/2021",
|
||||
"18/01/2021",
|
||||
demijournee=0,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"19/01/2021",
|
||||
"19/01/2021",
|
||||
demijournee=2,
|
||||
etudid=etudid,
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Test
|
||||
|
||||
b = sco_abs.is_work_saturday(context.Absences)
|
||||
assert b == 0 #samedi ne sont pas compris
|
||||
a = sco_abs.getAbsSemEtud(context.Absences, sem, etudid)
|
||||
assert a.CountAbs() == 5 #l'étudiant a été absent le 15 (apres midi) , (16 et 17 we), 18 (matin) et 19 janvier (matin et apres midi), et 22 (matin)
|
||||
assert a.CountAbsJust() == 4 #l'étudiant justifie ses abs du 15, 18 et 19
|
||||
|
||||
|
||||
# + vérification à l'aide de ScoDoc WEB : ok!
|
||||
|
||||
# --- Supression d'une absence et d'une justification
|
||||
|
||||
_ = sco_abs_views.doAnnuleAbsence(context.Absences, "19/01/2021", "19/01/2021", 2, etudid=etudid, REQUEST=REQUEST)
|
||||
a = sco_abs.getAbsSemEtud(context.Absences, sem, etudid)
|
||||
print(a.CountAbs()) #lors du print cela affiche 5 or cela devrait afficher 3
|
||||
|
||||
#assert a.CountAbs() == 3
|
||||
# + vérification à l'aide de ScoDoc WEB : il y a bien plus que 3 abs, 2 justifiés et 1 non justifié.
|
||||
|
||||
|
||||
|
||||
# --- supression d'une justification pas encore disponible à l'aide de python.
|
||||
|
||||
|
||||
# --- Création d'une liste d'abs
|
||||
|
||||
liste_abs = sco_abs_views.ListeAbsEtud(context.Absences, etudid, format='json', absjust_only=1, REQUEST=REQUEST)
|
||||
liste_abs2 = sco_abs_views.ListeAbsEtud(context.Absences, etudid, format='json', REQUEST=REQUEST)
|
||||
|
||||
load_liste_abs = json.loads(liste_abs)
|
||||
load_liste_abs2 = json.loads(liste_abs2)
|
||||
|
||||
assert len(load_liste_abs2) == 1
|
||||
assert len(load_liste_abs) == 2
|
||||
assert load_liste_abs2[0]["ampm"] == "1"
|
||||
assert load_liste_abs2[0]["datedmy"] == "22/01/2021"
|
||||
assert load_liste_abs2[0]["exams"] == mod["code"]
|
||||
# absjust_only -> seulement les abs justifiés
|
||||
|
||||
|
||||
# --- Création d'un groupe
|
||||
|
||||
_ = sco_groups.partition_create(context.Scolarite, formsemestre_id=sem["formsemestre_id"], partition_name="Eleve", REQUEST=REQUEST)
|
||||
li1 = sco_groups.get_partitions_list(context.Scolarite, sem["formsemestre_id"])
|
||||
_ = sco_groups.createGroup(context.Scolarite, li1[0]["partition_id"], "Groupe 1", REQUEST=REQUEST)
|
||||
|
||||
# --- Affectation des élèves dans des groupes
|
||||
|
||||
li_grp1 = sco_groups.get_partition_groups(context.Scolarite, li1[0])
|
||||
for etud in etuds :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp1[0]["group_id"])
|
||||
|
||||
# --- Test de EtatAbsencesGroupes
|
||||
|
||||
grp1_abs = context.Absences.EtatAbsencesGr(group_ids=[li_grp1[0]["group_id"]], debut="01/01/2021", fin ="30/06/2021", format="json", REQUEST=REQUEST)
|
||||
load_grp1_abs = json.loads(grp1_abs)
|
||||
|
||||
assert len(load_grp1_abs) == 10
|
||||
|
||||
tab_id=[] #tab des id present dans load_grp1_abs
|
||||
for un_etud in load_grp1_abs :
|
||||
tab_id.append(un_etud["etudid"])
|
||||
|
||||
for etud in etuds : #verification si tous les etudiants sont present dans la liste du groupe d'absence
|
||||
assert etud["etudid"] in tab_id
|
||||
|
||||
|
||||
for un_etud in load_grp1_abs :
|
||||
if un_etud["etudid"] == etudid :
|
||||
assert un_etud["nbabs"] == "3"
|
||||
assert un_etud["nbjustifs_noabs"] == "2"
|
||||
assert un_etud["nbabsjust"] == "2"
|
||||
assert un_etud["nbabsnonjust"] == "1"
|
||||
assert un_etud["nomprenom"] == etuds[0]["nomprenom"]
|
||||
|
||||
# --- Création de billets
|
||||
|
||||
b1 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-22 00:00",
|
||||
end="2021-01-22 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 22",
|
||||
justified=False,
|
||||
code_nip=etuds[0]["code_nip"],
|
||||
code_ine=etuds[0]["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
b2 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-15 00:00",
|
||||
end="2021-01-15 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 15",
|
||||
code_nip=etuds[0]["code_nip"],
|
||||
code_ine=etuds[0]["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
|
||||
li_bi = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi = json.loads(li_bi)
|
||||
|
||||
assert len(load_li_bi) == 2
|
||||
assert load_li_bi[1]["description"] == "abs du 22"
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
Parametre demijournee ne prend pas en compte les strings ---> pb régler.
|
||||
|
||||
La suppression de justification ne peut pas se faire directement en interractif à l'aide de python.
|
||||
|
||||
La fonction CountAbs ne met pas à jour le nombre après supression des absences. ---> (cf : test_CountAbs.py)
|
||||
|
||||
"""
|
267
scotests/test_absence2.py
Executable file
267
scotests/test_absence2.py
Executable file
@ -0,0 +1,267 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -
|
||||
|
||||
""""
|
||||
Creation de 10 étudiants, formation, semestre, ue, module, absences le matin, l'apres midi, la journée compléte
|
||||
et justification d'absences, supression d'absences, création de listes d'absences, création de billet
|
||||
et creation d'un groupe.
|
||||
|
||||
Fonction de l'API utilisé :
|
||||
- doSignaleAbsence
|
||||
- doJustifAbsence
|
||||
- AddBilletAbs
|
||||
- XMLgetBilletAbsence
|
||||
- listeBilletEtud
|
||||
- ListeAbsJust
|
||||
- CountAbsJust
|
||||
- ListAbsNonJust
|
||||
- ListJustifs
|
||||
- ListeAbsJour
|
||||
- ListAbsInRange
|
||||
|
||||
Fonction renvoyant du code HTML :
|
||||
- EtatAbsences
|
||||
- SignaleAbsenceGrSemestre
|
||||
- SignaleAbsenceGrHebdo
|
||||
- EtatAbsenceDate
|
||||
- AddBilletAbsenceForm
|
||||
- AnnuleAbsenceEtud
|
||||
- ProcessBilletAbsenceForm
|
||||
- JustifAbsenceEtud
|
||||
- doAnnuleJustif
|
||||
|
||||
"""
|
||||
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs
|
||||
import sco_abs_views
|
||||
import sco_abs_notification
|
||||
import ZAbsences
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
for etud in etuds:
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
# --- Création d'un groupe
|
||||
|
||||
_ = sco_groups.partition_create(context.Scolarite, formsemestre_id=sem["formsemestre_id"], partition_name="Eleve", REQUEST=REQUEST)
|
||||
li1 = sco_groups.get_partitions_list(context.Scolarite, sem["formsemestre_id"])
|
||||
_ = sco_groups.createGroup(context.Scolarite, li1[0]["partition_id"], "Groupe 1", REQUEST=REQUEST)
|
||||
|
||||
# --- Affectation des élèves dans des groupes
|
||||
|
||||
li_grp1 = sco_groups.get_partition_groups(context.Scolarite, li1[0])
|
||||
for etud in etuds :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp1[0]["group_id"])
|
||||
|
||||
# --- Saisie absences
|
||||
etudid = etuds[0]["etudid"]
|
||||
|
||||
for debut, fin, demijournee in [
|
||||
("15/01/2021", "15/01/2021", 1),
|
||||
("18/01/2021", "18/01/2021", 0),
|
||||
("19/01/2021", "19/01/2021", 2),
|
||||
("22/01/2021", "22/01/2021", 1)
|
||||
] :
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut=debut, datefin=fin, demijournee=demijournee, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"22/01/2021",
|
||||
"22/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etuds[1]["etudid"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Justification de certaines absences
|
||||
|
||||
for debut, fin, demijournee in [
|
||||
("15/01/2021", "15/01/2021", 1),
|
||||
("18/01/2021", "18/01/2021", 0),
|
||||
("19/01/2021", "19/01/2021", 2)
|
||||
] :
|
||||
sco_abs_views.doJustifAbsence(context.Absences, datedebut=debut, datefin=fin, demijournee=demijournee, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
# --- Test
|
||||
|
||||
_ = context.Absences.doSignaleAbsenceGrSemestre(
|
||||
dates="2021-01-13,2021-01-25",
|
||||
etudids= etuds[5]["etudid"]+","+etuds[6]["etudid"],
|
||||
destination="",
|
||||
REQUEST=REQUEST
|
||||
) # <----- rien ne se passe (pb parametre ?)
|
||||
|
||||
# --- Création de billets
|
||||
|
||||
b1 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-22 00:00",
|
||||
end="2021-01-22 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 22",
|
||||
justified=False,
|
||||
code_nip=etuds[0]["code_nip"],
|
||||
code_ine=etuds[0]["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
b2 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-15 00:00",
|
||||
end="2021-01-15 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 15",
|
||||
code_nip=etuds[0]["code_nip"],
|
||||
code_ine=etuds[0]["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- XMLgetBilletEtud
|
||||
|
||||
xml_bi = context.Absences.XMLgetBilletsEtud(etudid=etudid, REQUEST=REQUEST)
|
||||
print(1)
|
||||
print(xml_bi)
|
||||
print(1)
|
||||
|
||||
# --- Supression de billet
|
||||
li_bi = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi = json.loads(li_bi)
|
||||
|
||||
#_ = context.Absences.deleteBilletAbsence(load_li_bi[1]["billet_id"], REQUEST=REQUEST)
|
||||
|
||||
li_bi2 = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi2 = json.loads(li_bi)
|
||||
|
||||
#assert len(load_li_bi2) == 1
|
||||
#assert load_li_bi2[0]["description"] == "abs du 22"
|
||||
|
||||
# --- Créaton de listes
|
||||
|
||||
li_abs_just = context.Absences.ListeAbsJust(etudid = etudid, datedebut="01/01/2021")
|
||||
nb_abs_just = context.Absences.CountAbsJust(etudid, debut="01/01/2021", fin="06/30/2021")
|
||||
assert len(li_abs_just) == nb_abs_just
|
||||
assert li_abs_just[0]["etudid"] == etudid
|
||||
assert li_abs_just[0]["matin"] == True
|
||||
assert li_abs_just[0]["jour"] == datetime.date(2021, 1, 15)
|
||||
assert li_abs_just[2]["jour"] == datetime.date(2021, 1, 19)
|
||||
assert li_abs_just[2]["matin"] == False
|
||||
|
||||
|
||||
li_abs_njust = context.Absences.ListeAbsNonJust(etudid=etudid, datedebut="01/01/2021")
|
||||
nb_abs = context.Absences.CountAbs(etudid, debut="01/01/2021", fin="06/30/2021")
|
||||
assert len(li_abs_njust) == nb_abs - nb_abs_just
|
||||
assert li_abs_njust[0]["matin"] == True
|
||||
assert li_abs_njust[0]["etudid"] == etudid
|
||||
assert li_abs_njust[0]["jour"] == datetime.date(2021, 1, 22)
|
||||
|
||||
|
||||
li_just = context.Absences.ListeJustifs(etudid=etudid, datedebut="01/01/2021")
|
||||
assert len(li_just) == 4
|
||||
li_just2 = context.Absences.ListeJustifs(etudid=etudid, datedebut="01/01/2021", datefin="01/18/2021")
|
||||
assert len(li_just2) == 2
|
||||
|
||||
|
||||
li_jour = context.Absences.ListeAbsJour(date="01/22/2021")
|
||||
assert len(li_jour) == 2
|
||||
li_jour2 = context.Absences.ListeAbsJour(date="01/18/2021")
|
||||
assert len(li_jour2) == 1
|
||||
|
||||
|
||||
li_range = context.Absences.ListAbsInRange(etudid, debut="01/01/2021", fin="06/01/2021")
|
||||
assert len(li_range) == 5
|
||||
|
||||
#li_xml = context.Absences.XMLgetAbsEtud(beg_date="01/01/2021", end_date="01/06/2021", REQUEST=REQUEST)
|
||||
#print(li_xml) need etudid
|
||||
|
||||
# --- Annulation d'absence
|
||||
|
||||
#context.Absences.AnnuleAbsencesDatesNoJust(etudid, dates="22/01/2021", REQUEST=REQUEST)
|
||||
|
||||
|
||||
# --- Fonction renvoyant du code HTML
|
||||
|
||||
etat_abs = context.Absences.EtatAbsences(REQUEST=REQUEST)
|
||||
|
||||
#cal_abs = sco_abs_views.CalAbs(context.Absences, REQUEST=REQUEST) #<--- retourne html + need etudid : how?
|
||||
|
||||
sag = context.Absences.SignaleAbsenceGrSemestre(
|
||||
datedebut="15/01/2021",
|
||||
datefin="22/01/2021",
|
||||
group_ids=[li_grp1[0]["group_id"]],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
sagh = context.Absences.SignaleAbsenceGrHebdo(
|
||||
datelundi="18/01/2021", group_ids=[li_grp1[0]["group_id"]], destination="", REQUEST=REQUEST
|
||||
)
|
||||
|
||||
grp_abs_d = context.Absences.EtatAbsencesDate(group_ids=[li_grp1[0]["group_id"]], date="22/01/2021", REQUEST=REQUEST)
|
||||
|
||||
billet_form = context.Absences.AddBilletAbsenceForm(etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
#an_abs = AnnuleAbsenceEtud(context.Absences, REQUEST=REQUEST) #<- retourne html + need etudid : how?
|
||||
|
||||
#proc = context.Absences.ProcessBilletAbsenceForm(billet_id=load_li_bi[0]["billet_id"], REQUEST=REQUEST) #error
|
||||
|
||||
#just_form = sco_abs_views.JustifAbsenceEtud(context.Absences, REQUEST=REQUEST)
|
||||
|
||||
#delete_just = sco_abs_views.doAnnuleJustif(context.Absences, datedebut0="22/01/2021", datefin0="22/01/2021", demijournee=2, REQUEST=REQUEST)
|
||||
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
Certaines fonctions ont besoin de l'id de l'étudiant mais n'ont pas ce parametre comment le récupérer ?
|
||||
(CalAbs, SignaleAbsenceEtud, AnnuleAbsenceEtud, JustifAbsenceEtud, doAnnuleJustif, XMLgetAbsEtud)
|
||||
|
||||
D'autres fonctions renvoient du HTML -> comment les tester en python?
|
||||
|
||||
doSignaleAbsenceGrSemestre -> ne fonctionne pas (pb au niveau de l'écriture des parametres au lancement
|
||||
de la fonction?)
|
||||
|
||||
XMLgetBilletsEtud, deleteBilletAbsence -> fonction get ne retourne rien et delete ne supprime rien
|
||||
(lancer fichier test_billet)
|
||||
|
||||
AnnuleAbsencesDatesNoJust -> error line 323, jour='2' (2 doit être un int et non un string?)
|
||||
|
||||
"""
|
||||
|
||||
|
261
scotests/test_api7doc.py
Executable file
261
scotests/test_api7doc.py
Executable file
@ -0,0 +1,261 @@
|
||||
import sco_formations
|
||||
import json
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_moduleimpl
|
||||
import sco_groups_view
|
||||
import sco_abs_views
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
file = open("scotests/export_formation1.xml")
|
||||
doc = file.read()
|
||||
file.close()
|
||||
|
||||
# --- Création de la formation
|
||||
|
||||
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||
|
||||
# --- Création des semestres
|
||||
|
||||
sem1 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=1,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem3 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=3,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem2 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=2,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
sem4 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=4,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
|
||||
# --- Implémentation des modules
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module :
|
||||
if mod["semestre_id"] == 1 :
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2 :
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3 :
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else :
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=formsemestre_id,
|
||||
responsable_id="bach",
|
||||
)
|
||||
mods_imp.append(mi)
|
||||
|
||||
# --- Création des étudiants
|
||||
|
||||
etuds=[]
|
||||
for nom, prenom in [
|
||||
("Semestre11", "EtudiantNumero1"),
|
||||
("Semestre12", "EtudiantNumero2"),
|
||||
("Semestre23", "EtudiantNumero3"),
|
||||
("Semestre24", "EtudiantNumero4"),
|
||||
("Semestre35", "EtudiantNumero5"),
|
||||
("Semestre36", "EtudiantNumero6"),
|
||||
("Semestre47", "EtudiantNumero7"),
|
||||
("Semestre48", "EtudiantNumero8")
|
||||
] :
|
||||
etud = G.create_etud(
|
||||
nom=nom,
|
||||
prenom=prenom,
|
||||
)
|
||||
etuds.append(etud)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
|
||||
for etud in etuds[0:2]:
|
||||
G.inscrit_etudiant(sem1, etud)
|
||||
|
||||
for etud in etuds[2:4]:
|
||||
G.inscrit_etudiant(sem2, etud)
|
||||
|
||||
for etud in etuds[4:6]:
|
||||
G.inscrit_etudiant(sem3, etud)
|
||||
|
||||
for etud in etuds[6:]:
|
||||
G.inscrit_etudiant(sem4, etud)
|
||||
|
||||
# --- Création d'une évaluation pour chaque UE
|
||||
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem1 = json.loads(lim_sem1)
|
||||
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem2 = json.loads(lim_sem2)
|
||||
|
||||
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem3 = json.loads(lim_sem3)
|
||||
|
||||
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem4 = json.loads(lim_sem4)
|
||||
|
||||
|
||||
for moduleimpl_id, jour, description, coefficient in [
|
||||
(load_lim_sem1[1]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre1", 1.0),
|
||||
(load_lim_sem1[2]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre1", 1.0),
|
||||
(load_lim_sem2[1]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre2", 1.0),
|
||||
(load_lim_sem2[8]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre2", 1.0),
|
||||
(load_lim_sem3[3]["moduleimpl_id"], "02/09/2020", "InterroTestSemestre3", 1.0),
|
||||
(load_lim_sem3[9]["moduleimpl_id"], "03/09/2020", "InterroTestSemestre3", 1.0),
|
||||
(load_lim_sem3[15]["moduleimpl_id"], "04/09/2020", "InterroTestSemestre3", 1.0),
|
||||
(load_lim_sem4[3]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[9]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[13]["moduleimpl_id"], "05/02/2021", "InterroTestSemestre4", 1.0),
|
||||
] :
|
||||
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
||||
|
||||
|
||||
# --- Saisie des notes des étudiants (un élève a 12, un autre a 7 pour chaque semestre)
|
||||
|
||||
lie1 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem1["formsemestre_id"])
|
||||
lie2 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem2["formsemestre_id"])
|
||||
lie3 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem3["formsemestre_id"])
|
||||
lie4 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem4["formsemestre_id"])
|
||||
|
||||
for eval in lie1 :
|
||||
for etud in etuds[:2] :
|
||||
if etud == etuds[0] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
for eval in lie2 :
|
||||
for etud in etuds[2:4] :
|
||||
if etud == etuds[2] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
|
||||
for eval in lie3 :
|
||||
for etud in etuds[4:6] :
|
||||
if etud == etuds[4] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
for eval in lie4 :
|
||||
for etud in etuds[6:] :
|
||||
if etud == etuds[6] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
# --- Département
|
||||
|
||||
li_dep = context.ScoDoc.list_depts(format="json", REQUEST=REQUEST)
|
||||
print(li_dep)
|
||||
|
||||
# --- Formation
|
||||
|
||||
lif = context.Notes.formation_list(format="json", REQUEST=REQUEST, formation_id=f[0])
|
||||
load_lif = json.loads(lif)
|
||||
assert len(load_lif) == 1
|
||||
assert load_lif[0]["formation_id"] == f[0]
|
||||
|
||||
exp = sco_formations.formation_export(context.Notes, formation_id=f[0], format="json", REQUEST=REQUEST)
|
||||
load_exp = json.loads(exp)
|
||||
assert load_exp["acronyme"] == "DUT Info"
|
||||
assert load_exp["titre_officiel"] == "DUT Informatique"
|
||||
assert load_exp["formation_code"] == "FCOD2"
|
||||
|
||||
# --- Semestre
|
||||
|
||||
li_sem = context.Notes.formsemestre_list(formation_id=f[0], format = "json", REQUEST=REQUEST)
|
||||
load_li_sem = json.loads(li_sem)
|
||||
assert len(load_li_sem) == 4
|
||||
|
||||
# --- Création des groupes
|
||||
|
||||
_ = sco_groups.partition_create(context.Scolarite, formsemestre_id=sem1["formsemestre_id"], partition_name="Eleve 1ere annee", REQUEST=REQUEST)
|
||||
|
||||
li1 = sco_groups.get_partitions_list(context.Scolarite, sem1["formsemestre_id"])
|
||||
|
||||
_ = sco_groups.createGroup(context.Scolarite, li1[0]["partition_id"], "Groupe S1A", REQUEST=REQUEST)
|
||||
|
||||
li_grp1 = sco_groups.get_partition_groups(context.Scolarite, li1[0])
|
||||
|
||||
for etud in etuds[0:2] :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp1[0]["group_id"])
|
||||
|
||||
|
||||
# --- Groupes
|
||||
|
||||
li_part = sco_groups.formsemestre_partition_list(context.Scolarite, formsemestre_id=sem1["formsemestre_id"], format = "json", REQUEST=REQUEST)
|
||||
load_li_part = json.loads(li_part)
|
||||
assert len(load_li_part) == 2 # 2 partition (defaut et eleve 1ere annee)
|
||||
assert load_li_part[0]["formsemestre_id"] == sem1["formsemestre_id"]
|
||||
assert len(load_li_part[0]["group"]) == 1 # 2 groupes S1A
|
||||
assert load_li_part[0]["group"][0]["group_name"] == "Groupe S1A"
|
||||
assert load_li_part[0]["group"][0]["group_id"] == li_grp1[0]["group_id"]
|
||||
assert load_li_part[0]["partition_id"] == load_li_part[0]["group"][0]["partition_id"] == li1[0]["partition_id"]
|
||||
assert load_li_part[0]["partition_name"] == "Eleve 1ere annee"
|
||||
|
||||
vue_g1 = sco_groups_view.groups_view(context.Scolarite, group_ids = [li_grp1[0]["group_id"]], format = "json", REQUEST=REQUEST)
|
||||
load_vue_g1 = json.loads(vue_g1)
|
||||
assert len(load_vue_g1) == 2
|
||||
assert load_vue_g1[0][li1[0]["partition_id"]] == li_grp1[0]["group_name"]
|
||||
|
||||
|
||||
# --- Etudiant
|
||||
|
||||
etudi = context.Scolarite.etud_info(etudid=etuds[0]["etudid"], format="json", REQUEST=REQUEST)
|
||||
load_etudi = json.loads(etudi)
|
||||
assert load_etudi["prenom"] == "Etudiantnumero1"
|
||||
assert load_etudi["nom"] == "SEMESTRE11"
|
||||
assert load_etudi["etudid"] == etuds[0]["etudid"]
|
||||
|
||||
# --- Absences
|
||||
|
||||
for debut, fin, demijournee in [
|
||||
("18/01/2021", "18/01/2021", 1),
|
||||
("19/01/2021", "19/01/2021", 0),
|
||||
] :
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut=debut, datefin=fin, demijournee=demijournee, etudid=etuds[0]["etudid"], REQUEST=REQUEST)
|
||||
|
||||
nb_abs = context.Absences.CountAbs(etuds[0]["etudid"], debut="09/01/2020", fin="02/01/2021")
|
||||
assert nb_abs == 2
|
||||
|
||||
liste_abs = sco_abs_views.ListeAbsEtud(context.Absences, etuds[0]["etudid"], format='json', REQUEST=REQUEST)
|
||||
load_liste_abs = json.loads(liste_abs)
|
||||
assert len(load_liste_abs) == 2
|
||||
|
||||
_ = sco_abs_views.doAnnuleAbsence(context.Absences, "15/01/2021", "15/01/2021", 1, etudid=etuds[0]["etudid"], REQUEST=REQUEST)
|
||||
|
||||
# --- Module
|
||||
|
||||
#Voir test dans test_formation.
|
||||
|
||||
|
||||
|
96
scotests/test_billet.py
Executable file
96
scotests/test_billet.py
Executable file
@ -0,0 +1,96 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -
|
||||
|
||||
""" Création de billet, utilisation de XMLgetBilletsEtud et suppression de billet """
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs_views
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Création d'un étudiant
|
||||
etud = G.create_etud(code_nip=None)
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
etudid=etud["etudid"]
|
||||
|
||||
# --- Création d'une absence
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut="22/01/2021", datefin="22/01/2021", demijournee=2, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
# --- Création d'un billet
|
||||
b1 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-22 00:00",
|
||||
end="2021-01-22 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 22",
|
||||
justified=False,
|
||||
code_nip=etud["code_nip"],
|
||||
code_ine=etud["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- XMLgetBilletEtud
|
||||
|
||||
xml_bi = context.Absences.XMLgetBilletsEtud(etudid=etudid, REQUEST=REQUEST)
|
||||
print(1)
|
||||
print(xml_bi)
|
||||
print(1)
|
||||
|
||||
|
||||
# --- Suppression d'un billet
|
||||
li_bi = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi = json.loads(li_bi)
|
||||
|
||||
_ = context.Absences.deleteBilletAbsence(load_li_bi[0]["billet_id"], REQUEST=REQUEST)
|
||||
|
||||
li_bi2 = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi2 = json.loads(li_bi)
|
||||
|
||||
assert len(load_li_bi2) == 0
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
XMLgetBilletsEtud retourne une chaine vide
|
||||
|
||||
deleteBilletsEtud : erreur
|
||||
File "/opt/scodoc/Products/ScoDoc/ZAbsences.py", line 1809, in deleteBilletAbsence
|
||||
parameters={"billet_id": billet_id},
|
||||
File "/opt/scodoc/Products/ScoDoc/ZScolar.py", line 2664, in confirmDialog
|
||||
return self.sco_header(REQUEST) + "\n".join(H) + self.sco_footer(REQUEST)
|
||||
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 223: ordinal not in range(128)
|
||||
|
||||
"""
|
47
scotests/test_create_etud.py
Executable file
47
scotests/test_create_etud.py
Executable file
@ -0,0 +1,47 @@
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'un étudiant
|
||||
|
||||
etud = G.create_etud(
|
||||
code_nip="",
|
||||
nom="Poire",
|
||||
prenom="Kevin",
|
||||
code_ine="",
|
||||
civilite="M",
|
||||
etape="TST1",
|
||||
email="test1@localhost",
|
||||
emailperso="perso1@localhost",
|
||||
date_naissance="01/05/2001",
|
||||
lieu_naissance="Stains",
|
||||
dept_naissance="93",
|
||||
domicile="11, rue du test",
|
||||
codepostaldomicile="93430",
|
||||
villedomicile="Villetaneuse",
|
||||
paysdomicile="France",
|
||||
telephone="0102030405",
|
||||
typeadresse="domicile",
|
||||
boursier=None,
|
||||
description="etudiant test",
|
||||
)
|
||||
|
||||
print(etud)
|
||||
print(" ")
|
||||
|
||||
info = context.Scolarite.etud_info(etud["etudid"], format = "json", REQUEST=REQUEST)
|
||||
load_info = json.loads(info)
|
||||
print(load_info)
|
||||
|
||||
#malgrè l'entrée de donnée dans les paramètres la fonction ne les prend pas en compte. Sauf pour date_naissance,
|
||||
#dept_naissance, nom et prenom, lieu_naissance et civilite la fonction crée aussi un code nip et ine donc pas de pb
|
||||
#pour ca.
|
||||
|
||||
print(" ")
|
||||
print(etud["telephone"])
|
||||
print(etud["domicile"])
|
||||
print(etud["emailperso"])
|
69
scotests/test_deleteBilletAbsence.py
Executable file
69
scotests/test_deleteBilletAbsence.py
Executable file
@ -0,0 +1,69 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_abs_views
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Création d'un étudiant
|
||||
etud = G.create_etud(code_nip=None)
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
etudid=etud["etudid"]
|
||||
|
||||
# --- Création d'une absence
|
||||
sco_abs_views.doSignaleAbsence(context.Absences, datedebut="22/01/2021", datefin="22/01/2021", demijournee=2, etudid=etudid, REQUEST=REQUEST)
|
||||
|
||||
# --- Création d'un billet
|
||||
b1 = context.Absences.AddBilletAbsence(
|
||||
begin="2021-01-22 00:00",
|
||||
end="2021-01-22 23:59",
|
||||
etudid=etudid,
|
||||
description = "abs du 22",
|
||||
justified=False,
|
||||
code_nip=etuds[0]["code_nip"],
|
||||
code_ine=etuds[0]["code_ine"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Suppression d'un billet
|
||||
_ = context.Absences.deleteBilletAbsence(load_li_bi[1]["billet_id"], REQUEST=REQUEST)
|
||||
|
||||
li_bi = context.Absences.listeBilletsEtud(etudid=etudid, REQUEST=REQUEST, format="json")
|
||||
load_li_bi = json.loads(li_bi)
|
||||
|
||||
assert len(load_li_bi) == 0
|
135
scotests/test_etudiant.py
Executable file
135
scotests/test_etudiant.py
Executable file
@ -0,0 +1,135 @@
|
||||
""" Création de 2 étudiants, un qui demissionne, un autre defaillant + annuler demission et annuler défaillance
|
||||
|
||||
Fonctions de l’API utilisé :
|
||||
- doDemEtudiant
|
||||
- doDefEtudiant
|
||||
- doCancelDem
|
||||
- doCancelDef
|
||||
- etud_info
|
||||
- search_etud_in_dept
|
||||
- fillEtudsInfo
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour éviter les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import scolars
|
||||
import sco_find_etud
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
|
||||
etud1 = G.create_etud(
|
||||
code_nip="",
|
||||
nom="Poire",
|
||||
prenom="Kevin",
|
||||
code_ine="",
|
||||
civilite="M",
|
||||
etape="TST1",
|
||||
email="test1@localhost",
|
||||
emailperso="perso1@localhost",
|
||||
date_naissance="01/05/2001",
|
||||
lieu_naissance="Stains",
|
||||
dept_naissance="93",
|
||||
domicile="11, rue du test",
|
||||
codepostaldomicile="93430",
|
||||
villedomicile="Villetaneuse",
|
||||
paysdomicile="France",
|
||||
telephone="0102030405",
|
||||
typeadresse="domicile",
|
||||
boursier=None,
|
||||
description="etudiant test",
|
||||
)
|
||||
|
||||
etud2 = G.create_etud()
|
||||
|
||||
# --- Création d'une formation
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2020",
|
||||
date_fin="30/06/2020",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
|
||||
G.inscrit_etudiant(sem, etud1)
|
||||
G.inscrit_etudiant(sem, etud2)
|
||||
|
||||
# --- Etud_info
|
||||
|
||||
info = context.Scolarite.etud_info(etud1["etudid"], format = "json", REQUEST=REQUEST)
|
||||
load_info = json.loads(info)
|
||||
|
||||
|
||||
# --- Démission étudiant
|
||||
|
||||
context.doDemEtudiant(etud1["etudid"], sem["formsemestre_id"], event_date="01/01/2021")
|
||||
|
||||
bul = sco_bulletins.formsemestre_bulletinetud_dict(context.Notes, sem["formsemestre_id"], etud1["etudid"])
|
||||
assert bul["moy_gen"] == "NA"
|
||||
assert bul["ins"][0]["etat"] == "D"
|
||||
|
||||
# --- Défaillance d'un étudiant
|
||||
|
||||
context.doDefEtudiant(etud2["etudid"], sem["formsemestre_id"], event_date="01/01/2021")
|
||||
|
||||
bul = sco_bulletins.formsemestre_bulletinetud_dict(context.Notes, sem["formsemestre_id"], etud1["etudid"])
|
||||
assert bul["moy_gen"] == "NA"
|
||||
assert bul["ins"][0]["etat"] == "D"
|
||||
|
||||
# --- Annuler démission
|
||||
|
||||
context.Scolarite.doCancelDem(etud1["etudid"], sem["formsemestre_id"], REQUEST=REQUEST)
|
||||
bul = sco_bulletins.formsemestre_bulletinetud_dict(context.Notes, sem["formsemestre_id"], etud1["etudid"])
|
||||
print(bul["ins"][0]["etat"])
|
||||
#assert bul["ins"][0]["etat"] == "I"
|
||||
|
||||
# --- Annuler défaillance
|
||||
|
||||
context.Scolarite.doCancelDef(etud2["etudid"], sem["formsemestre_id"], REQUEST=REQUEST)
|
||||
bul = sco_bulletins.formsemestre_bulletinetud_dict(context.Notes, sem["formsemestre_id"], etud1["etudid"])
|
||||
print(bul["ins"][0]["etat"])
|
||||
#assert bul["ins"][0]["etat"] == "I"
|
||||
|
||||
# --- Fonctions retournant HTML
|
||||
|
||||
find = sco_find_etud.search_etud_in_dept(context.Scolarite, expnom="Poire", REQUEST=REQUEST)
|
||||
|
||||
_ = context.Scolarite.fillEtudsInfo(etuds=[etud1])
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
L'etat ne se met pas à jour après l'annulation de la démission ou de la défaillance.
|
||||
|
||||
etud_info ne donne pas toutes les infos de l'étudiant voir mini test create_etud.
|
||||
|
||||
"""
|
257
scotests/test_evaluation.py
Executable file
257
scotests/test_evaluation.py
Executable file
@ -0,0 +1,257 @@
|
||||
""" Création d'une formation, d'élève de 2 ue dans un semestre et de 6 évaluations par 3 fonction différentes :
|
||||
create_eval, evaluation_create et do_evaluation_create. Saisir les notes des évaluations, lister ces evaluations,
|
||||
supprimer et modifier une evaluation
|
||||
|
||||
Fonction de l'API utilisé :
|
||||
- create_evaluation
|
||||
- evaluation_create
|
||||
- do_evaluation_create
|
||||
- do_evaluation_list_in_formsemestre
|
||||
- do_evaluation_list
|
||||
- create_note
|
||||
- check_absences
|
||||
- do_evaluation_etat
|
||||
- evaluation_supress_alln
|
||||
- do_evaluation_edit
|
||||
- do_evaluation_delete
|
||||
|
||||
"""
|
||||
|
||||
import sys
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_moduleimpl
|
||||
import sco_liste_notes
|
||||
import sco_evaluations
|
||||
import sco_undo_notes
|
||||
import sco_abs_views
|
||||
import sco_saisie_notes
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
|
||||
|
||||
# --- Création d'une formation et de deux UE
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
ue2 = G.create_ue(formation_id=f["formation_id"], acronyme="TST2", titre="ue test2")
|
||||
mat2 = G.create_matiere(ue_id=ue2["ue_id"], titre="matière test2")
|
||||
mod2 = G.create_module(
|
||||
matiere_id=mat2["matiere_id"],
|
||||
code="TSM2",
|
||||
coefficient=1.0,
|
||||
titre="module test2",
|
||||
ue_id=ue2["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
mi2 = G.create_moduleimpl(
|
||||
module_id=mod2["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
|
||||
# --- Inscription des étudiants
|
||||
for etud in etuds:
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
# --- Création des évaluations
|
||||
|
||||
#création d'éval avec create_evaluation
|
||||
e = G.create_evaluation(
|
||||
moduleimpl_id=mi["moduleimpl_id"],
|
||||
jour="7/01/2021",
|
||||
description="evaluation test 1",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
e2 = G.create_evaluation(
|
||||
moduleimpl_id=mi2["moduleimpl_id"],
|
||||
jour="11/01/2021",
|
||||
description="evaluation test 2",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
|
||||
|
||||
#création d'éval avec evaluation_create
|
||||
#e3 = context.Notes.evaluation_create(mi["moduleimpl_id"], REQUEST)
|
||||
#e4 = context.Notes.evaluation_create(mi2["moduleimpl_id"], REQUEST) # rien ne se passe
|
||||
|
||||
#création d'éval avec do_evaluation_create ! WARNING : retourne l'id de l'éval !
|
||||
e5 = context.Notes.do_evaluation_create(
|
||||
moduleimpl_id=mi["moduleimpl_id"],
|
||||
jour="01/02/2021",
|
||||
heure_debut="9h0",
|
||||
heure_fin="11h0",
|
||||
description="evaluation test 5",
|
||||
note_max="20.0",
|
||||
coefficient="1",
|
||||
REQUEST=REQUEST
|
||||
)
|
||||
|
||||
e6 = context.Notes.do_evaluation_create(
|
||||
moduleimpl_id=mi2["moduleimpl_id"],
|
||||
jour="01/02/2021",
|
||||
heure_debut="13h0",
|
||||
heure_fin="15h0",
|
||||
description="evaluation test 6",
|
||||
note_max="20.0",
|
||||
coefficient="1",
|
||||
REQUEST=REQUEST
|
||||
)
|
||||
|
||||
|
||||
|
||||
# --- Liste des évaluations dans le semestre
|
||||
|
||||
lie = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem["formsemestre_id"])
|
||||
assert len(lie) == 4
|
||||
""" print(lie[0])
|
||||
print(" ")
|
||||
print(lie[1])
|
||||
print(" ")
|
||||
print(lie[2])
|
||||
print(" ")
|
||||
print(lie[3]) """
|
||||
|
||||
eval5 = context.Notes.do_evaluation_list({"evaluation_id" : e5})[0]
|
||||
eval6 = context.Notes.do_evaluation_list({"evaluation_id" : e6})[0]
|
||||
|
||||
# --- Saisie des absences aux évaluations
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"7/01/2021",
|
||||
"7/01/2021",
|
||||
demijournee=1,
|
||||
etudid=etuds[0]["etudid"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doSignaleAbsence(
|
||||
context.Absences,
|
||||
"01/02/2021",
|
||||
"01/02/2021",
|
||||
demijournee=1,
|
||||
etudid=etuds[1]["etudid"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
_ = sco_abs_views.doJustifAbsence(
|
||||
context.Absences,
|
||||
"01/02/2021",
|
||||
"01/02/2021",
|
||||
demijournee=1,
|
||||
etudid=etuds[1]["etudid"],
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
|
||||
# --- Saisie des notes
|
||||
|
||||
evals = [e,e2,eval5,eval6]
|
||||
|
||||
for eval in evals :
|
||||
for etud in etuds:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=float(random.randint(0, 20))
|
||||
)
|
||||
|
||||
# --- Check abs
|
||||
|
||||
check = sco_liste_notes.evaluation_check_absences(context.Notes, evaluation_id=e["evaluation_id"])
|
||||
|
||||
check2 = sco_liste_notes.evaluation_check_absences(context.Notes, evaluation_id=e2["evaluation_id"])
|
||||
|
||||
# --- Liste de note d'une évaluation
|
||||
|
||||
#lien = sco_liste_notes.do_evaluation_listenotes(context=context.Notes, REQUEST=REQUEST)
|
||||
|
||||
cal = sco_evaluations.formsemestre_evaluations_cal(context.Notes, formsemestre_id=sem["formsemestre_id"], REQUEST=REQUEST)
|
||||
#html
|
||||
|
||||
delai = sco_evaluations.formsemestre_evaluations_delai_correction(context.Notes, formsemestre_id=sem["formsemestre_id"], format="json", REQUEST=REQUEST)
|
||||
#html
|
||||
|
||||
lio = sco_undo_notes.evaluation_list_operations(context.Notes, evaluation_id=e["evaluation_id"], REQUEST=REQUEST)
|
||||
#html
|
||||
|
||||
|
||||
# --- Supression de toutes les notes d'une évaluations
|
||||
|
||||
etat = sco_evaluations.do_evaluation_etat(context.Notes, e2["evaluation_id"])
|
||||
assert etat["evalcomplete"]
|
||||
sco_saisie_notes.evaluation_suppress_alln(context.Notes, e2["evaluation_id"], REQUEST=REQUEST)
|
||||
etat2 = sco_evaluations.do_evaluation_etat(context.Notes, e2["evaluation_id"])
|
||||
|
||||
#assert not etat2["evalcomplete"] rien ne se passe...
|
||||
|
||||
# --- Modification d'une évaluation
|
||||
|
||||
context.Notes.do_evaluation_edit(REQUEST=REQUEST, args={"evaluation_id" : e5, "coefficient": 2.0 ,
|
||||
"description" : "modification", "note_max" : 20,
|
||||
"heure_debut" : "8h0", "heure_fin" : "10h0", "jour" : "03/02/2021"})
|
||||
new_eval5 = context.Notes.do_evaluation_list({"evaluation_id" : e5})[0]
|
||||
|
||||
assert new_eval5["description"] == "modification"
|
||||
assert new_eval5["jour"] == "03/02/2021"
|
||||
assert new_eval5["heure_debut"] == "08h00"
|
||||
assert new_eval5["heure_fin"] == "10h00"
|
||||
assert new_eval5["coefficient"] == 2.0
|
||||
|
||||
# --- Supression d'une évaluation
|
||||
|
||||
e7 = G.create_evaluation(
|
||||
moduleimpl_id=mi["moduleimpl_id"],
|
||||
jour="7/01/2021",
|
||||
description="evaluation test 7",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
lie = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem["formsemestre_id"])
|
||||
assert len(lie) == 5
|
||||
|
||||
#context.Notes.evaluation_delete(REQUEST=REQUEST, evaluation_id=e7) rien ne se passe
|
||||
sco_evaluations.do_evaluation_delete(context.Notes, REQUEST=REQUEST, evaluation_id=e7["evaluation_id"])
|
||||
lie2 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem["formsemestre_id"])
|
||||
assert len(lie2) == 4
|
||||
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
Plusieurs fonction retourne de l'HTML, les notes ne se suppriment pas malgre l'utilisation de la fonction
|
||||
evaluation_supress_alln (voir mini test). evaluation_delete ---> rien ne se passe.
|
||||
|
||||
"""
|
75
scotests/test_evaluation_suppress_alln.py
Executable file
75
scotests/test_evaluation_suppress_alln.py
Executable file
@ -0,0 +1,75 @@
|
||||
""" Création d'une évaluation, saisie des notes et supressions de toutes les notes """
|
||||
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_saisie_notes
|
||||
import sco_evaluations
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
|
||||
|
||||
# --- Création d'une formation et de deux UE
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Inscription des étudiants
|
||||
for etud in etuds:
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
# --- Création d'une évaluation
|
||||
e = G.create_evaluation(
|
||||
moduleimpl_id=mi["moduleimpl_id"],
|
||||
jour="7/01/2021",
|
||||
description="evaluation test 1",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
# --- Saisie des notes
|
||||
for etud in etuds:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=e, etud=etud, note=float(random.randint(0, 20))
|
||||
)
|
||||
|
||||
etat = sco_evaluations.do_evaluation_etat(context.Notes, e["evaluation_id"])
|
||||
assert etat["evalcomplete"]
|
||||
|
||||
# --- Suppression des notes
|
||||
sco_saisie_notes.evaluation_suppress_alln(context.Notes, e["evaluation_id"], REQUEST=REQUEST)
|
||||
etat = sco_evaluations.do_evaluation_etat(context.Notes, e["evaluation_id"])
|
||||
assert not etat["evalcomplete"]
|
||||
|
||||
"""
|
||||
Commentaire : Les notes ne se suppriment pas et l'etat ne change donc pas
|
||||
"""
|
79
scotests/test_formation_export_xml.py
Executable file
79
scotests/test_formation_export_xml.py
Executable file
@ -0,0 +1,79 @@
|
||||
import sco_formations
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_moduleimpl
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
file = open("scotests/export_formation1.xml")
|
||||
doc = file.read()
|
||||
file.close()
|
||||
|
||||
print(doc)
|
||||
print("\n \n \n")
|
||||
# --- Création de la formation
|
||||
|
||||
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||
|
||||
|
||||
# --- Création des semestres
|
||||
|
||||
sem1 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=1,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem3 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=3,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
sem2 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=2,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
sem4 = G.create_formsemestre(
|
||||
formation_id=f[0],
|
||||
semestre_id=4,
|
||||
date_debut="02/02/2021",
|
||||
date_fin="01/06/2021",
|
||||
)
|
||||
|
||||
|
||||
# --- Implémentation des modules
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module :
|
||||
if mod["semestre_id"] == 1 :
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2 :
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3 :
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else :
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=formsemestre_id,
|
||||
responsable_id="bach",
|
||||
)
|
||||
mods_imp.append(mi)
|
||||
|
||||
# --- Test de export_formation format xml
|
||||
|
||||
form_exp = context.Notes.formation_export(formation_id=f[0], format="xml", REQUEST=REQUEST)
|
||||
print(form_exp[39:])
|
319
scotests/test_formations.py
Executable file
319
scotests/test_formations.py
Executable file
@ -0,0 +1,319 @@
|
||||
""" Créer 2 formations, une test et une normale. Créer 2 semestres dans la formation normale et un
|
||||
dans la formation test, créer 2 semestres dans la formation normale (un test et un normal),
|
||||
2 ue (un test et un normal), 2 modules (un test et un normal) et 2 matieres (test et normal).
|
||||
Et dans la formations test, un semestre, un module, un ue et une matiere.
|
||||
Afficher la liste de tout ca puis supprimer les ue, mod, mat et sem test ainsi
|
||||
que la formation test. Afficher la liste des UE, formations et modules restante.
|
||||
|
||||
Vérification :
|
||||
|
||||
- Les listes initiales comprennent bien tout les éléments créés avec les bon noms etc
|
||||
- La supression s'est bien effectué au niveau de scodoc web et en python
|
||||
- Vérifier que les fonctions listes font bien la mise à jour après supression
|
||||
|
||||
Fonction de l'API utilisé :
|
||||
|
||||
- create_formation
|
||||
- create_ue
|
||||
- create_matiere
|
||||
- create_module
|
||||
- create_formsemestre
|
||||
- create_moduleimpl
|
||||
- formation_list
|
||||
- formation_export
|
||||
- formsemestre_list
|
||||
- do_moduleimpl_list
|
||||
- do_module_impl_with_module_list
|
||||
- do_formsemestre_delete
|
||||
- do_module_list
|
||||
- do_module_delete
|
||||
- do_matiere_list
|
||||
- do_matiere_delete
|
||||
- do_ue_list
|
||||
- do_ue_delete
|
||||
- do_formation_delete
|
||||
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_formsemestre_status
|
||||
import ZNotes
|
||||
import sco_formations
|
||||
import sco_moduleimpl
|
||||
import sco_edit_ue
|
||||
import sco_edit_matiere
|
||||
import sco_edit_module
|
||||
import sco_formsemestre_edit
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création de formations
|
||||
|
||||
f = G.create_formation(acronyme="F1", titre="Formation 1", titre_officiel="Titre officiel 1")
|
||||
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod = G.create_module(
|
||||
matiere_id=mat["matiere_id"],
|
||||
code="TSM1",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
ue2 = G.create_ue(formation_id=f["formation_id"], acronyme="TST2", titre="ue test2")
|
||||
mat2 = G.create_matiere(ue_id=ue2["ue_id"], titre="matière test2")
|
||||
mod2 = G.create_module(
|
||||
matiere_id=mat2["matiere_id"],
|
||||
code="TSM2",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=ue2["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
uet = G.create_ue(formation_id=f["formation_id"], acronyme="TSTt", titre="ue testt")
|
||||
matt = G.create_matiere(ue_id=uet["ue_id"], titre="matière testt")
|
||||
modt = G.create_module(
|
||||
matiere_id=matt["matiere_id"],
|
||||
code="TSMt",
|
||||
coefficient=1.0,
|
||||
titre="module test",
|
||||
ue_id=uet["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
|
||||
f2 = G.create_formation(acronyme="", titre="Formation test")
|
||||
|
||||
ue3 = G.create_ue(formation_id=f2["formation_id"], acronyme="TST3", titre="ue test3")
|
||||
mat3 = G.create_matiere(ue_id=ue3["ue_id"], titre="matière test3")
|
||||
mod3 = G.create_module(
|
||||
matiere_id=mat3["matiere_id"],
|
||||
code="TSM3",
|
||||
coefficient=1.0,
|
||||
titre="module test3",
|
||||
ue_id=ue3["ue_id"], # faiblesse de l'API
|
||||
formation_id=f2["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Création et implémentation des semestres
|
||||
|
||||
sem1 = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
sem2 = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=2,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="31/12/2020",
|
||||
)
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
module_id=mod["module_id"],
|
||||
formsemestre_id=sem1["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
mi2 = G.create_moduleimpl(
|
||||
module_id=mod2["module_id"],
|
||||
formsemestre_id=sem1["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
mit = G.create_moduleimpl(
|
||||
module_id=modt["module_id"],
|
||||
formsemestre_id=sem2["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
semt = G.create_formsemestre(
|
||||
formation_id=f2["formation_id"],
|
||||
semestre_id=3,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mi3 = G.create_moduleimpl(
|
||||
module_id=mod3["module_id"],
|
||||
formsemestre_id=semt["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
# --- Affichier la liste des formations
|
||||
|
||||
lif = context.Notes.formation_list(format="json", REQUEST=REQUEST, formation_id=f["formation_id"])
|
||||
|
||||
load_lif = json.loads(lif)
|
||||
assert len(load_lif) == 1
|
||||
assert load_lif[0]["acronyme"] == f["acronyme"]
|
||||
assert load_lif[0]["titre_officiel"] == f["titre_officiel"]
|
||||
assert load_lif[0]["formation_id"] == f["formation_id"]
|
||||
assert load_lif[0]["titre"] == f["titre"]
|
||||
|
||||
lif2 = context.Notes.formation_list(format = 'json', REQUEST=REQUEST)
|
||||
|
||||
load_lif2 = json.loads(lif2)
|
||||
assert len(load_lif2) == 2
|
||||
assert load_lif2[0] == load_lif[0]
|
||||
assert load_lif2[1]["titre"] == f2["titre"]
|
||||
|
||||
|
||||
# --- Export de formation_id
|
||||
|
||||
exp = sco_formations.formation_export(context.Notes, formation_id=f["formation_id"], format="json", REQUEST=REQUEST)
|
||||
|
||||
load_exp = json.loads(exp)
|
||||
|
||||
assert load_exp["acronyme"] == "F1"
|
||||
assert load_exp["titre_officiel"] == "Titre officiel 1"
|
||||
assert load_exp["titre"] == "Formation 1"
|
||||
assert load_exp["formation_code"] == f["formation_code"]
|
||||
assert len(load_exp["ue"]) == 3
|
||||
assert load_exp["ue"][0]["acronyme"] == "TST1"
|
||||
assert load_exp["ue"][0]["titre"] == "ue test"
|
||||
assert load_exp["formation_id"] == f["formation_id"]
|
||||
assert load_exp["formation_code"] == f["formation_code"]
|
||||
|
||||
|
||||
# --- Liste des semestres
|
||||
|
||||
li_sem1 = context.Notes.formsemestre_list(formsemestre_id=sem1["formsemestre_id"], format = "json", REQUEST=REQUEST)
|
||||
load_li_sem1 = json.loads(li_sem1) #uniquement le semestre 1 dans la liste
|
||||
|
||||
assert len(load_li_sem1) == 1
|
||||
assert load_li_sem1[0]["date_fin"] == sem1["date_fin"]
|
||||
assert load_li_sem1[0]["semestre_id"] == sem1["semestre_id"]
|
||||
assert load_li_sem1[0]["formation_id"] ==sem1["formation_id"]
|
||||
|
||||
|
||||
li_semf = context.Notes.formsemestre_list(formation_id=f["formation_id"], format = "json", REQUEST=REQUEST)
|
||||
load_li_semf = json.loads(li_semf)
|
||||
|
||||
assert load_li_sem1[0] in load_li_semf
|
||||
assert len(load_li_semf) == 2
|
||||
assert load_li_semf[1]["semestre_id"] == sem2["semestre_id"]
|
||||
|
||||
|
||||
li_sem = context.Notes.formsemestre_list(format = "json", REQUEST=REQUEST)
|
||||
load_li_sem = json.loads(li_sem)
|
||||
|
||||
assert len(load_li_sem) == 3
|
||||
assert load_li_semf[0] and load_li_semf[1] in load_li_sem
|
||||
assert load_li_sem[0]["semestre_id"] == semt["semestre_id"]
|
||||
|
||||
|
||||
# --- Liste des modules
|
||||
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem1 = json.loads(lim_sem1)
|
||||
|
||||
|
||||
assert len(load_lim_sem1) == 2
|
||||
assert mod["module_id"] == load_lim_sem1[0]["module_id"] or load_lim_sem1[1]["module_id"]
|
||||
assert mod2["module_id"] == load_lim_sem1[0]["module_id"] or load_lim_sem1[1]["module_id"]
|
||||
|
||||
lim_modid = sco_moduleimpl.do_moduleimpl_list(context.Notes, module_id=mod["module_id"], REQUEST=REQUEST)
|
||||
load_lim_modid = json.loads(lim_modid) #Liste avec seulement mod
|
||||
|
||||
assert len(load_lim_modid) == 1
|
||||
|
||||
lim_modimpl_id = sco_moduleimpl.do_moduleimpl_list(context.Notes, moduleimpl_id=mi["moduleimpl_id"], REQUEST=REQUEST)
|
||||
print(lim_modimpl_id)
|
||||
|
||||
# ---- Test de do_moduleimpl_withmodule_list
|
||||
|
||||
assert lim_modid == lim_modimpl_id #doit etre le meme resultat
|
||||
|
||||
liimp_sem1 = sco_moduleimpl.do_moduleimpl_withmodule_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_liimp_sem1 = json.loads(liimp_sem1)
|
||||
|
||||
assert len(load_liimp_sem1) == 2
|
||||
assert mod["module_id"] == load_liimp_sem1[0]["module_id"] or load_liimp_sem1[1]["module_id"] or load_liim_sem1[2]["module_id"]
|
||||
assert mod2["module_id"] == load_liimp_sem1[0]["module_id"] or load_liimp_sem1[1]["module_id"] or load_liim_sem1[2]["module_id"]
|
||||
assert modt["module_id"] == load_liimp_sem1[0]["module_id"] or load_liimp_sem1[1]["module_id"] or load_liim_sem1[2]["module_id"]
|
||||
|
||||
liimp_modid = sco_moduleimpl.do_moduleimpl_withmodule_list(context.Notes, module_id=mod["module_id"], REQUEST=REQUEST)
|
||||
|
||||
load_liimp_modid = json.loads(liimp_modid)
|
||||
assert len(load_liimp_modid) == 1
|
||||
|
||||
liimp_modimplid = sco_moduleimpl.do_moduleimpl_withmodule_list(context.Notes, moduleimpl_id=mi["moduleimpl_id"], REQUEST=REQUEST)
|
||||
|
||||
assert liimp_modid == liimp_modimplid
|
||||
|
||||
|
||||
# --- Suppression du module, matiere et ue test du semestre 2
|
||||
|
||||
#on doit d'abbord supprimer le semestre
|
||||
|
||||
#sco_formsemestre_edit.formsemestre_delete(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
#sco_formsemestre_edit.formsemestre_delete2(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
|
||||
# RIEN NE SE PASSE AVEC CES FONCTIONS
|
||||
|
||||
sco_formsemestre_edit.do_formsemestre_delete(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
|
||||
#sco_edit_module.module_delete(context.Notes, module_id=modt["module_id"], REQUEST=REQUEST)
|
||||
#sco_edit_matiere.matiere_delete(context.Notes, matiere_id=matt["matiere_id"], REQUEST=REQUEST)
|
||||
#sco_edit_ue.ue_delete(context.Notes, ue_id=uet["ue_id"], REQUEST=REQUEST)
|
||||
|
||||
# RIEN NE SE PASSE AVEC CES FONCTIONS
|
||||
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
assert len(li_module) == 4
|
||||
context.Notes.do_module_delete(oid=modt["module_id"], REQUEST=REQUEST) #on supprime le semestre
|
||||
#sco_formsemestre_edit.formsemestre_delete_moduleimpls(context.Notes, formsemestre_id=sem2["formsemestre_id"], module_ids_to_del=[modt["module_id"]])
|
||||
#deuxieme methode de supression d'un module
|
||||
li_module2 = context.Notes.do_module_list()
|
||||
|
||||
assert len(li_module2) == 3 #verification de la suppression du module
|
||||
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem2 = json.loads(lim_sem2)
|
||||
|
||||
assert len(load_lim_sem2) == 0 #deuxieme vérification si le module s'est bien sup
|
||||
|
||||
|
||||
li_mat = context.Notes.do_matiere_list()
|
||||
assert len(li_mat) == 4
|
||||
context.Notes.do_matiere_delete(oid=matt["matiere_id"], REQUEST=REQUEST) #on supprime la matiere
|
||||
li_mat2 = context.Notes.do_matiere_list()
|
||||
assert len(li_mat2) == 3 #verification de la suppression de la matiere
|
||||
|
||||
|
||||
li_ue = context.Notes.do_ue_list()
|
||||
assert len(li_ue) == 4
|
||||
sco_edit_ue.ue_delete(context.Notes, ue_id=uet["ue_id"], REQUEST=REQUEST)
|
||||
li_ue2 = context.Notes.do_ue_list()
|
||||
#assert len(li_ue) == 3 #verification de la suppression de l'UE #comment supprimer un ue?
|
||||
|
||||
|
||||
# --- Suppression d'une formation
|
||||
|
||||
|
||||
#Il faut d'abbord supprimer le semestre aussi.
|
||||
|
||||
sco_formsemestre_edit.do_formsemestre_delete(context.Notes, formsemestre_id=semt["formsemestre_id"], REQUEST=REQUEST)
|
||||
|
||||
|
||||
context.Notes.do_formation_delete(oid=f2["formation_id"], REQUEST=REQUEST)
|
||||
lif3 = context.Notes.formation_list(format = 'json', REQUEST=REQUEST)
|
||||
|
||||
load_lif3 = json.loads(lif3)
|
||||
assert len(load_lif3) == 1
|
395
scotests/test_groupes.py
Executable file
395
scotests/test_groupes.py
Executable file
@ -0,0 +1,395 @@
|
||||
""" 1) Création de 20 étudiants, création d’une formation, inscription de 10 étudiants dans un semestre (1ere année),
|
||||
10 dans un autre (2eme année), création de module, ue,
|
||||
matière et affectation des étudiants dans deux groupes : A et B pour chaque semestre.
|
||||
créer 2 évaluations,
|
||||
affecter des notes dans chaque évaluation et donner la liste des étudiants inscrits à l’évaluation pour chaque groupe.
|
||||
Donner la liste des groupes auxquels des étudiants inscrits appartiennent à cette évaluation.
|
||||
Pour une raison quelquonque un élève souhaite changer de groupe.
|
||||
Changer le nom d'un groupe et d'une partition (à l'aide de fonction)
|
||||
|
||||
|
||||
|
||||
- Vérification du bon nombres d’étudiants dans chaque chaque groupe (5)
|
||||
|
||||
- Vérification des noms de la formations (acro = DUTI, titre = DUT Info, titre_officiel = DUT Informatique),
|
||||
UE (acr = UE11/UE31, titre = UE1S1/UE1S3), modules (code = M1S1/M1S3, titre = mod1/mod2), matières (ue_id=ue1/2[ue_id], titre = mat1/mat2)
|
||||
|
||||
- Vérification des listes de groupes et de partitions
|
||||
|
||||
- Vérification du changement de groupe des étudiants
|
||||
|
||||
- Teste d'autres fonctions de l'API correspondant aux groupes
|
||||
|
||||
Fonctions de l’API utilisé :
|
||||
- create_formation
|
||||
- create_ue
|
||||
- create_module
|
||||
- create_matiere
|
||||
- create_formsemestre
|
||||
- create_moduleimpl
|
||||
- inscrit_etudiant
|
||||
- partition_create
|
||||
- get_default_partition
|
||||
- createGroupe
|
||||
- partition_create
|
||||
- get_partitions_list
|
||||
- get_partition_groups
|
||||
- set_group
|
||||
- get_etud_groups
|
||||
- change_etud_group_in_partition
|
||||
- get_group
|
||||
- group_delete
|
||||
- get_partition
|
||||
- get_default_group
|
||||
- get_default_partition
|
||||
- get_sem_groups
|
||||
- get_group_members
|
||||
- do_evaluation_listeetuds_groups
|
||||
- do_evaluation_listegroupes
|
||||
- formsemestre_partition_list
|
||||
|
||||
"""
|
||||
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour éviter les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import sco_groups
|
||||
import sco_groups_view
|
||||
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(20)]
|
||||
assert len(etuds) == 20
|
||||
|
||||
# --- Création d'une formation
|
||||
|
||||
f = G.create_formation(
|
||||
acronyme="DUTI",
|
||||
titre="DUT Info",
|
||||
titre_officiel="DUT Informatique",
|
||||
)
|
||||
|
||||
assert f["acronyme"]=="DUTI"
|
||||
assert f["titre"]=="DUT Info"
|
||||
assert f["titre_officiel"]=="DUT Informatique"
|
||||
|
||||
|
||||
# --- Création d'UE, matière, module pour les premieres années
|
||||
|
||||
ue1 = G.create_ue(formation_id=f["formation_id"], acronyme="UE11", titre="UE1S1")
|
||||
|
||||
mat1 = G.create_matiere(ue_id=ue1["ue_id"], titre="mat1")
|
||||
mod1 = G.create_module(
|
||||
matiere_id=mat1["matiere_id"],
|
||||
code="M1S1",
|
||||
coefficient=1.0,
|
||||
titre="mod1",
|
||||
ue_id=ue1["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
assert ue1["formation_id"] == f["formation_id"]
|
||||
assert ue1["acronyme"]=="UE11"
|
||||
assert ue1["titre"]=="UE1S1"
|
||||
|
||||
assert mod1["matiere_id"]==mat1["matiere_id"]
|
||||
assert mod1["code"]=="M1S1"
|
||||
assert mod1["titre"]=="mod1"
|
||||
assert mod1["ue_id"]==ue1["ue_id"]
|
||||
assert mod1["formation_id"]==f["formation_id"]
|
||||
|
||||
# --- Création d'UE, matière, module pour les deuxieme années
|
||||
|
||||
ue2 = G.create_ue(formation_id=f["formation_id"], acronyme="UE31", titre="UE1S1")
|
||||
|
||||
mat2 = G.create_matiere(ue_id=ue2["ue_id"], titre="mat2")
|
||||
mod2 = G.create_module(
|
||||
matiere_id=mat2["matiere_id"],
|
||||
code="M1S3",
|
||||
coefficient=1.0,
|
||||
titre="mod2",
|
||||
ue_id=ue2["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place des semestres
|
||||
|
||||
sem1 = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
assert sem1["formation_id"]==f["formation_id"]
|
||||
assert sem1["semestre_id"]==1
|
||||
assert sem1["date_debut"]=="01/09/2020"
|
||||
assert sem1["date_fin"]=="01/02/2021"
|
||||
|
||||
sem2 = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=2,
|
||||
date_debut="01/09/2020",
|
||||
date_fin="01/02/2021",
|
||||
)
|
||||
|
||||
|
||||
mi1 = G.create_moduleimpl(
|
||||
module_id=mod1["module_id"],
|
||||
formsemestre_id=sem1["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
assert mi1["module_id" ]==mod1["module_id"]
|
||||
assert mi1["formsemestre_id"]==sem1["formsemestre_id"]
|
||||
assert mi1["responsable_id"]=="bach"
|
||||
|
||||
mi2 = G.create_moduleimpl(
|
||||
module_id=mod2["module_id"],
|
||||
formsemestre_id=sem2["formsemestre_id"],
|
||||
responsable_id="bach",
|
||||
)
|
||||
|
||||
|
||||
# --- Inscription des étudiants
|
||||
|
||||
for etud in etuds[:10] :
|
||||
G.inscrit_etudiant(sem1, etud)
|
||||
|
||||
for etud in etuds [10:] :
|
||||
G.inscrit_etudiant(sem2, etud)
|
||||
|
||||
# --- Création de 2 partitions
|
||||
|
||||
_ = sco_groups.partition_create(context.Scolarite, formsemestre_id=sem1["formsemestre_id"], partition_name="Eleve 1ere annee", REQUEST=REQUEST)
|
||||
_ = sco_groups.partition_create(context.Scolarite, formsemestre_id=sem2["formsemestre_id"], partition_name="Eleve 2eme annee", REQUEST=REQUEST)
|
||||
|
||||
|
||||
li1 = sco_groups.get_partitions_list(context.Scolarite, sem1["formsemestre_id"])
|
||||
li2 = sco_groups.get_partitions_list(context.Scolarite, sem2["formsemestre_id"])
|
||||
|
||||
|
||||
# --- Création des groupes
|
||||
|
||||
_ = sco_groups.createGroup(context.Scolarite, li1[0]["partition_id"], "Groupe S1A", REQUEST=REQUEST)
|
||||
_ = sco_groups.createGroup(context.Scolarite, li1[0]["partition_id"], "Groupe S1B", REQUEST=REQUEST)
|
||||
_ = sco_groups.createGroup(context.Scolarite, li2[0]["partition_id"], "Groupe S3A", REQUEST=REQUEST)
|
||||
_ = sco_groups.createGroup(context.Scolarite, li2[0]["partition_id"], "Groupe S3B", REQUEST=REQUEST)
|
||||
_ = sco_groups.createGroup(context.Scolarite, li2[0]["partition_id"], "Groupe TEST", REQUEST=REQUEST)
|
||||
|
||||
li_grp1 = sco_groups.get_partition_groups(context.Scolarite, li1[0])
|
||||
li_grp2 = sco_groups.get_partition_groups(context.Scolarite, li2[0])
|
||||
li_grp3 = sco_groups.get_partition_groups(context.Scolarite, li1[1]) #liste groupe defaut
|
||||
|
||||
assert len(li_grp1) == 2 #test de get_partition_groups # 2
|
||||
assert len(li_grp2) == 3 #test de get_partition_groups # 3
|
||||
assert li_grp1[0]["group_name"] == "Groupe S1A"
|
||||
|
||||
|
||||
# --- Affectation des élèves dans les groupes
|
||||
|
||||
for etud in etuds[:5] :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp1[0]["group_id"])
|
||||
|
||||
for etud in etuds[5:10] :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp1[1]["group_id"])
|
||||
|
||||
for etud in etuds[10:15] :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp2[0]["group_id"])
|
||||
|
||||
for etud in etuds[15:] :
|
||||
sco_groups.set_group(context.Scolarite, etud["etudid"], li_grp2[1]["group_id"])
|
||||
|
||||
# --- Vérification si les élèves sont bien dans les bons groupes
|
||||
|
||||
for etud in etuds[:5] :
|
||||
grp = sco_groups.get_etud_groups(context.Scolarite, etud["etudid"], sem1, exclude_default=True)
|
||||
assert grp[0]["group_name"] == "Groupe S1A"
|
||||
|
||||
for etud in etuds[5:10] :
|
||||
grp = sco_groups.get_etud_groups(context.Scolarite, etud["etudid"], sem1, exclude_default=True)
|
||||
assert grp[0]["group_name"] == "Groupe S1B"
|
||||
|
||||
for etud in etuds[10:15] :
|
||||
grp = sco_groups.get_etud_groups(context.Scolarite, etud["etudid"], sem2, exclude_default=True)
|
||||
assert grp[0]["group_name"] == "Groupe S3A"
|
||||
|
||||
for etud in etuds[15:] :
|
||||
grp = sco_groups.get_etud_groups(context.Scolarite, etud["etudid"], sem2, exclude_default=True)
|
||||
assert grp[0]["group_name"] == "Groupe S3B"
|
||||
|
||||
# --- Création d'une évaluation
|
||||
|
||||
e1 = G.create_evaluation(
|
||||
moduleimpl_id=mi1["moduleimpl_id"],
|
||||
jour="01/10/2020",
|
||||
description="evaluation test",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
e2 = G.create_evaluation(
|
||||
moduleimpl_id=mi2["moduleimpl_id"],
|
||||
jour="01/11/2020",
|
||||
description="evaluation test2",
|
||||
coefficient=1.0,
|
||||
)
|
||||
|
||||
# --- Saisie des notes
|
||||
|
||||
for etud in etuds[10:] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=e1, etud=etud, note=float(random.randint(0, 20))
|
||||
)
|
||||
|
||||
|
||||
for etud in etuds[:10] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=e2, etud=etud, note=float(random.randint(0, 20))
|
||||
)
|
||||
|
||||
# --- Liste des étudiants inscrits aux evaluations
|
||||
|
||||
lie1 = sco_groups.do_evaluation_listeetuds_groups(context.Scolarite, e1["evaluation_id"], groups = li_grp1)
|
||||
lie2 = sco_groups.do_evaluation_listeetuds_groups(context.Scolarite, e2["evaluation_id"], groups = li_grp2)
|
||||
|
||||
for etud in etuds[:10] :
|
||||
assert etud["etudid"] in lie1 # test de do_evaluation_listeetuds_groups
|
||||
|
||||
for etud in etuds[10:] :
|
||||
assert etud["etudid"] in lie2 # test de do_evaluation_listeetuds_groups
|
||||
|
||||
|
||||
# --- Liste des groupes présents aux évaluation
|
||||
|
||||
lig1 = sco_groups.do_evaluation_listegroupes(context.Scolarite, e1["evaluation_id"], include_default=False)
|
||||
lig2 = sco_groups.do_evaluation_listegroupes(context.Scolarite, e2["evaluation_id"], include_default=False)
|
||||
|
||||
|
||||
assert len(lig1) == 2
|
||||
assert len(lig2) == 2
|
||||
assert li_grp1[0] and li_grp1[1] in lig1 # test do_evaluation_listegroupes
|
||||
assert li_grp2[0] and li_grp2[1] in lig2 # test do_evaluation_listegroupes
|
||||
|
||||
|
||||
|
||||
# --- Changement de groupe d'un élève
|
||||
|
||||
grp1 = sco_groups.get_etud_groups(context.Scolarite, etuds[0]["etudid"], sem1, exclude_default = True)
|
||||
sco_groups.change_etud_group_in_partition(context.Scolarite, etuds[0]["etudid"], li_grp1[1]["group_id"], li1[0], REQUEST=REQUEST)
|
||||
grp2 = sco_groups.get_etud_groups(context.Scolarite, etuds[0]["etudid"], sem1, exclude_default = True)
|
||||
assert grp1 != grp2
|
||||
assert grp1[0] == li_grp1[0] # test get_etud_groups
|
||||
assert grp2[0]["group_name"] == "Groupe S1B" #test du changement de groupe
|
||||
|
||||
|
||||
# --- Liste des partitions en format json
|
||||
|
||||
lijson_s1 = sco_groups.formsemestre_partition_list(context.Scolarite, formsemestre_id=sem1["formsemestre_id"], format = "json", REQUEST=REQUEST)
|
||||
load_lijson_s1 = json.loads(lijson_s1)
|
||||
|
||||
assert len(load_lijson_s1) == 2 # 2 partition (defaut et eleve 1ere annee)
|
||||
assert load_lijson_s1[0]["formsemestre_id"] == sem1["formsemestre_id"]
|
||||
assert len(load_lijson_s1[0]["group"]) == 2 # 2 groupes S1A et S1B
|
||||
assert load_lijson_s1[0]["group"][0]["group_name"] == "Groupe S1A"
|
||||
assert load_lijson_s1[0]["group"][0]["group_id"] == li_grp1[0]["group_id"]
|
||||
assert load_lijson_s1[0]["partition_id"] == load_lijson_s1[0]["group"][0]["partition_id"] == li1[0]["partition_id"]
|
||||
assert load_lijson_s1[0]["partition_name"] == "Eleve 1ere annee"
|
||||
|
||||
|
||||
|
||||
# --- Vue d'un groupes (liste d'élève en format json)
|
||||
|
||||
vue_g1 = sco_groups_view.groups_view(context.Scolarite, group_ids = [li_grp1[0]["group_id"]], format = "json", REQUEST=REQUEST)
|
||||
load_vue_g1 = json.loads(vue_g1)
|
||||
|
||||
assert len(load_vue_g1) == 4
|
||||
assert load_vue_g1[0][li1[0]["partition_id"]] == li_grp1[0]["group_name"]
|
||||
|
||||
vue_sem = sco_groups_view.groups_view(context.Scolarite, formsemestre_id=sem1["formsemestre_id"], format = "json", REQUEST=REQUEST)
|
||||
load_vue_sem = json.loads(vue_sem)
|
||||
|
||||
assert len(load_vue_sem) == 10
|
||||
|
||||
tab=[]
|
||||
val=False
|
||||
for etud in etuds[:10] :
|
||||
for i in range(len(load_vue_sem)) :
|
||||
if etud["prenom"] == load_vue_sem[i]["prenom"] and etud["nom_disp"]==load_vue_sem[i]["nom_disp"] :
|
||||
val = True
|
||||
tab.append(val)
|
||||
|
||||
assert not False in tab #tout mes etudiants sont present dans vue_sem.
|
||||
|
||||
# --- Test des fonctions dans sco_groups
|
||||
|
||||
|
||||
assert li_grp1[0] == sco_groups.get_group(context.Scolarite, li_grp1[0]["group_id"]) #test get_group
|
||||
|
||||
assert len(li_grp2) == 3
|
||||
sco_groups.group_delete(context.Scolarite, li_grp2[2])
|
||||
#assert len(li_grp2) == 2 #TEST DE group_delete, aucun changement sur la console mais se supprime sur scodoc web
|
||||
# mais pas dans la console comme pour countAbs()
|
||||
|
||||
assert sco_groups.get_partition(context.Scolarite, li1[0]["partition_id"])== li1[0] # test de get_partition
|
||||
assert sco_groups.get_partition(context.Scolarite, li2[0]["partition_id"])== li2[0] # test de get_partition
|
||||
|
||||
|
||||
|
||||
li1 = sco_groups.get_partitions_list(context.Scolarite, sem1["formsemestre_id"])
|
||||
#assert p1 in li1 #test de get_partitions_list
|
||||
assert len(li1) == 2 #eleve de 1ere annee + la partition defaut
|
||||
|
||||
li2 = sco_groups.get_partitions_list(context.Scolarite, sem2["formsemestre_id"])
|
||||
#assert p2 in li2 #test de get_partitions_list
|
||||
assert len(li2) == 2 #eleve de 2eme annee + la partition defaut
|
||||
|
||||
|
||||
dp1 = sco_groups.get_default_partition(context.Scolarite, sem1["formsemestre_id"])
|
||||
dp2 = sco_groups.get_default_partition(context.Scolarite, sem2["formsemestre_id"])
|
||||
|
||||
assert dp1 in li1 # test si dp1 est bien dans li1 et par consequent teste la fonction get_default_partition
|
||||
assert dp2 in li2 # test si dp2 est bien dans li1 et par consequent teste la fonction get_default_partition
|
||||
|
||||
|
||||
dg1 = sco_groups.get_default_group(context.Scolarite, sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
assert li_grp3[0]["group_id"] == dg1 #test de get_default_group
|
||||
|
||||
|
||||
sg = sco_groups.get_sem_groups(context.Scolarite, sem1["formsemestre_id"])
|
||||
assert len(sg) == 3 #test de get_sem_groups
|
||||
assert li_grp1[0] and li_grp1[1] in sg
|
||||
assert li_grp3[0] in sg # test de get_sem_groups
|
||||
|
||||
limembre = sco_groups.get_group_members(context.Scolarite, li_grp1[0]["group_id"])
|
||||
assert len(limembre) == 4 # car on a changé de groupe un etudiant de ce groupe donc 5-1=4
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
Meme probleme que pour les groupes, lorsque l'on supprime un groupe il est toujours présent dans la liste de groupe
|
||||
mais pas dans scodoc web.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
117
scotests/test_scenario1_app.py
Executable file
117
scotests/test_scenario1_app.py
Executable file
@ -0,0 +1,117 @@
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
|
||||
G = sco_fake_gen.ScoFake(context.Notes)
|
||||
G.verbose = False
|
||||
|
||||
# --- Création d'étudiants
|
||||
etuds = [G.create_etud(code_nip=None) for _ in range(10)]
|
||||
|
||||
# --- Création de l'utilisateur responsable du semestres, des modules etc....
|
||||
|
||||
arg = {"passwd": "scodocpass", "user_name" : "unutil", "roles" :"Ens,RespPe"}
|
||||
user = context.Users.create_user(args=arg, REQUEST=REQUEST)
|
||||
print(user)
|
||||
|
||||
# --- Création formation et de deux UE
|
||||
f = G.create_formation(acronyme="")
|
||||
ue = G.create_ue(formation_id=f["formation_id"], acronyme="TST1", titre="ue test")
|
||||
mat11 = G.create_matiere(ue_id=ue["ue_id"], titre="matière test")
|
||||
mod11 = G.create_module(
|
||||
matiere_id=mat11["matiere_id"],
|
||||
code="TSM11",
|
||||
coefficient=1.0,
|
||||
titre="module test11",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
mat12 = G.create_matiere(ue_id=ue["ue_id"], titre="matière test12")
|
||||
mod12 = G.create_module(
|
||||
matiere_id=mat12["matiere_id"],
|
||||
code="TSM12",
|
||||
coefficient=1.0,
|
||||
titre="module test12",
|
||||
ue_id=ue["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
|
||||
ue2 = G.create_ue(formation_id=f["formation_id"], acronyme="TST2", titre="ue test2")
|
||||
mat21 = G.create_matiere(ue_id=ue2["ue_id"], titre="matière test21")
|
||||
mod21 = G.create_module(
|
||||
matiere_id=mat21["matiere_id"],
|
||||
code="TSM21",
|
||||
coefficient=1.0,
|
||||
titre="module test21",
|
||||
ue_id=ue2["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
mat22 = G.create_matiere(ue_id=ue2["ue_id"], titre="matière test22")
|
||||
mod22 = G.create_module(
|
||||
matiere_id=mat22["matiere_id"],
|
||||
code="TSM22",
|
||||
coefficient=1.0,
|
||||
titre="module test22",
|
||||
ue_id=ue2["ue_id"], # faiblesse de l'API
|
||||
formation_id=f["formation_id"], # faiblesse de l'API
|
||||
)
|
||||
|
||||
# --- Mise place d'un semestre
|
||||
sem = G.create_formsemestre(
|
||||
formation_id=f["formation_id"],
|
||||
semestre_id=1,
|
||||
date_debut="01/01/2021",
|
||||
date_fin="30/06/2021",
|
||||
)
|
||||
|
||||
mods = []
|
||||
for module_id, formsemestre_id, responsable_id in [
|
||||
(mod11["module_id"], sem["formsemestre_id"], "bach"),
|
||||
(mod12["module_id"], sem["formsemestre_id"], "bach"),
|
||||
(mod21["module_id"], sem["formsemestre_id"], "bach"),
|
||||
(mod22["module_id"], sem["formsemestre_id"], "bach")
|
||||
] :
|
||||
mi = G.create_moduleimpl(module_id=module_id, formsemestre_id=formsemestre_id, responsable_id=responsable_id)
|
||||
mods.append(mi)
|
||||
|
||||
|
||||
# --- Inscription des étudiants
|
||||
for etud in etuds:
|
||||
G.inscrit_etudiant(sem, etud)
|
||||
|
||||
|
||||
# --- Création d'évaluations (2 par modules)
|
||||
|
||||
evals=[]
|
||||
|
||||
for moduleimpl_id, jour, description, coefficient in [
|
||||
(mods[0]["moduleimpl_id"], "01/02/2021", "e1", 1.0),
|
||||
(mods[0]["moduleimpl_id"], "02/02/2021", "e2", 1.0),
|
||||
(mods[1]["moduleimpl_id"], "03/02/2021", "e3", 1.0),
|
||||
(mods[1]["moduleimpl_id"], "04/02/2021", "e4", 1.0),
|
||||
(mods[2]["moduleimpl_id"], "05/02/2021", "e5", 1.0),
|
||||
(mods[2]["moduleimpl_id"], "06/02/2021", "e6", 1.0),
|
||||
(mods[3]["moduleimpl_id"], "07/02/2021", "e7", 1.0),
|
||||
(mods[3]["moduleimpl_id"], "08/02/2021", "e8", 1.0),
|
||||
] :
|
||||
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
||||
evals.append(e)
|
||||
|
||||
|
||||
# --- Saisie des notes aléatoires
|
||||
|
||||
for eval in evals :
|
||||
for etud in etuds:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=float(random.randint(0, 20))
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,3 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
import sco_formations
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
|
@ -1,6 +1,5 @@
|
||||
import sco_formations
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
@ -55,14 +54,14 @@ sem4 = G.create_formsemestre(
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module:
|
||||
if mod["semestre_id"] == 1:
|
||||
for mod in li_module :
|
||||
if mod["semestre_id"] == 1 :
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2:
|
||||
elif mod["semestre_id"] == 2 :
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3:
|
||||
elif mod["semestre_id"] == 3 :
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else:
|
||||
else :
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
@ -74,7 +73,7 @@ for mod in li_module:
|
||||
|
||||
# --- Création des étudiants
|
||||
|
||||
etuds = []
|
||||
etuds=[]
|
||||
for nom, prenom in [
|
||||
("Semestre11", "EtudiantNumero1"),
|
||||
("Semestre12", "EtudiantNumero2"),
|
||||
@ -83,8 +82,8 @@ for nom, prenom in [
|
||||
("Semestre35", "EtudiantNumero5"),
|
||||
("Semestre36", "EtudiantNumero6"),
|
||||
("Semestre47", "EtudiantNumero7"),
|
||||
("Semestre48", "EtudiantNumero8"),
|
||||
]:
|
||||
("Semestre48", "EtudiantNumero8")
|
||||
] :
|
||||
etud = G.create_etud(
|
||||
nom=nom,
|
||||
prenom=prenom,
|
||||
|
@ -1,7 +1,6 @@
|
||||
import sco_formations
|
||||
import json
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
@ -56,14 +55,14 @@ sem4 = G.create_formsemestre(
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module:
|
||||
if mod["semestre_id"] == 1:
|
||||
for mod in li_module :
|
||||
if mod["semestre_id"] == 1 :
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2:
|
||||
elif mod["semestre_id"] == 2 :
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3:
|
||||
elif mod["semestre_id"] == 3 :
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else:
|
||||
else :
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
@ -75,7 +74,7 @@ for mod in li_module:
|
||||
|
||||
# --- Création des étudiants
|
||||
|
||||
etuds = []
|
||||
etuds=[]
|
||||
for nom, prenom in [
|
||||
("Semestre11", "EtudiantNumero1"),
|
||||
("Semestre12", "EtudiantNumero2"),
|
||||
@ -84,8 +83,8 @@ for nom, prenom in [
|
||||
("Semestre35", "EtudiantNumero5"),
|
||||
("Semestre36", "EtudiantNumero6"),
|
||||
("Semestre47", "EtudiantNumero7"),
|
||||
("Semestre48", "EtudiantNumero8"),
|
||||
]:
|
||||
("Semestre48", "EtudiantNumero8")
|
||||
] :
|
||||
etud = G.create_etud(
|
||||
nom=nom,
|
||||
prenom=prenom,
|
||||
@ -108,24 +107,16 @@ for etud in etuds[6:]:
|
||||
|
||||
# --- Création d'une évaluation pour chaque UE
|
||||
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem1 = json.loads(lim_sem1)
|
||||
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem2 = json.loads(lim_sem2)
|
||||
|
||||
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem3 = json.loads(lim_sem3)
|
||||
|
||||
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem4 = json.loads(lim_sem4)
|
||||
|
||||
|
||||
@ -140,10 +131,5 @@ for moduleimpl_id, jour, description, coefficient in [
|
||||
(load_lim_sem4[3]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[9]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[13]["moduleimpl_id"], "05/02/2021", "InterroTestSemestre4", 1.0),
|
||||
]:
|
||||
e = G.create_evaluation(
|
||||
moduleimpl_id=moduleimpl_id,
|
||||
jour=jour,
|
||||
description=description,
|
||||
coefficient=coefficient,
|
||||
)
|
||||
] :
|
||||
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
@ -1,7 +1,6 @@
|
||||
import sco_formations
|
||||
import json
|
||||
import random
|
||||
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
@ -17,6 +16,7 @@ doc = file.read()
|
||||
file.close()
|
||||
|
||||
|
||||
|
||||
# --- Création de la formation
|
||||
|
||||
f = sco_formations.formation_import_xml(REQUEST=REQUEST, doc=doc, context=context.Notes)
|
||||
@ -56,14 +56,14 @@ sem4 = G.create_formsemestre(
|
||||
|
||||
li_module = context.Notes.do_module_list()
|
||||
mods_imp = []
|
||||
for mod in li_module:
|
||||
if mod["semestre_id"] == 1:
|
||||
for mod in li_module :
|
||||
if mod["semestre_id"] == 1 :
|
||||
formsemestre_id = sem1["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 2:
|
||||
elif mod["semestre_id"] == 2 :
|
||||
formsemestre_id = sem2["formsemestre_id"]
|
||||
elif mod["semestre_id"] == 3:
|
||||
elif mod["semestre_id"] == 3 :
|
||||
formsemestre_id = sem3["formsemestre_id"]
|
||||
else:
|
||||
else :
|
||||
formsemestre_id = sem4["formsemestre_id"]
|
||||
|
||||
mi = G.create_moduleimpl(
|
||||
@ -75,7 +75,7 @@ for mod in li_module:
|
||||
|
||||
# --- Création des étudiants
|
||||
|
||||
etuds = []
|
||||
etuds=[]
|
||||
for nom, prenom in [
|
||||
("Semestre11", "EtudiantNumero1"),
|
||||
("Semestre12", "EtudiantNumero2"),
|
||||
@ -84,8 +84,8 @@ for nom, prenom in [
|
||||
("Semestre35", "EtudiantNumero5"),
|
||||
("Semestre36", "EtudiantNumero6"),
|
||||
("Semestre47", "EtudiantNumero7"),
|
||||
("Semestre48", "EtudiantNumero8"),
|
||||
]:
|
||||
("Semestre48", "EtudiantNumero8")
|
||||
] :
|
||||
etud = G.create_etud(
|
||||
nom=nom,
|
||||
prenom=prenom,
|
||||
@ -108,24 +108,16 @@ for etud in etuds[6:]:
|
||||
|
||||
# --- Création d'une évaluation pour chaque UE
|
||||
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem1 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem1["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem1 = json.loads(lim_sem1)
|
||||
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem2 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem2["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem2 = json.loads(lim_sem2)
|
||||
|
||||
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem3 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem3["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem3 = json.loads(lim_sem3)
|
||||
|
||||
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(
|
||||
context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST
|
||||
)
|
||||
lim_sem4 = sco_moduleimpl.do_moduleimpl_list(context.Notes, formsemestre_id=sem4["formsemestre_id"], REQUEST=REQUEST)
|
||||
load_lim_sem4 = json.loads(lim_sem4)
|
||||
|
||||
|
||||
@ -140,71 +132,42 @@ for moduleimpl_id, jour, description, coefficient in [
|
||||
(load_lim_sem4[3]["moduleimpl_id"], "03/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[9]["moduleimpl_id"], "04/02/2021", "InterroTestSemestre4", 1.0),
|
||||
(load_lim_sem4[13]["moduleimpl_id"], "05/02/2021", "InterroTestSemestre4", 1.0),
|
||||
]:
|
||||
e = G.create_evaluation(
|
||||
moduleimpl_id=moduleimpl_id,
|
||||
jour=jour,
|
||||
description=description,
|
||||
coefficient=coefficient,
|
||||
)
|
||||
] :
|
||||
e = G.create_evaluation(moduleimpl_id=moduleimpl_id, jour=jour, description=description, coefficient=coefficient)
|
||||
|
||||
|
||||
# --- Saisie des notes des étudiants (un élève a 12, un autre a 7 pour chaque semestre)
|
||||
|
||||
lie1 = context.Notes.do_evaluation_list_in_formsemestre(
|
||||
formsemestre_id=sem1["formsemestre_id"]
|
||||
)
|
||||
lie2 = context.Notes.do_evaluation_list_in_formsemestre(
|
||||
formsemestre_id=sem2["formsemestre_id"]
|
||||
)
|
||||
lie3 = context.Notes.do_evaluation_list_in_formsemestre(
|
||||
formsemestre_id=sem3["formsemestre_id"]
|
||||
)
|
||||
lie4 = context.Notes.do_evaluation_list_in_formsemestre(
|
||||
formsemestre_id=sem4["formsemestre_id"]
|
||||
)
|
||||
lie1 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem1["formsemestre_id"])
|
||||
lie2 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem2["formsemestre_id"])
|
||||
lie3 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem3["formsemestre_id"])
|
||||
lie4 = context.Notes.do_evaluation_list_in_formsemestre(formsemestre_id=sem4["formsemestre_id"])
|
||||
|
||||
for eval in lie1:
|
||||
for etud in etuds[:2]:
|
||||
if etud == etuds[0]:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=12.0
|
||||
)
|
||||
else:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=7.0
|
||||
)
|
||||
for eval in lie1 :
|
||||
for etud in etuds[:2] :
|
||||
if etud == etuds[0] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
for eval in lie2:
|
||||
for etud in etuds[2:4]:
|
||||
if etud == etuds[2]:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=12.0
|
||||
)
|
||||
else:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=7.0
|
||||
)
|
||||
for eval in lie2 :
|
||||
for etud in etuds[2:4] :
|
||||
if etud == etuds[2] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
|
||||
for eval in lie3:
|
||||
for etud in etuds[4:6]:
|
||||
if etud == etuds[4]:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=12.0
|
||||
)
|
||||
else:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=7.0
|
||||
)
|
||||
for eval in lie3 :
|
||||
for etud in etuds[4:6] :
|
||||
if etud == etuds[4] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
||||
|
||||
for eval in lie4:
|
||||
for etud in etuds[6:]:
|
||||
if etud == etuds[6]:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=12.0
|
||||
)
|
||||
else:
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(
|
||||
evaluation=eval, etud=etud, note=7.0
|
||||
)
|
||||
for eval in lie4 :
|
||||
for etud in etuds[6:] :
|
||||
if etud == etuds[6] :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=12.0)
|
||||
else :
|
||||
nb_changed, nb_suppress, existing_decisions = G.create_note(evaluation=eval, etud=etud, note=7.0)
|
64
scotests/test_user.py
Executable file
64
scotests/test_user.py
Executable file
@ -0,0 +1,64 @@
|
||||
""" Créer un utilisateur, recupérer ses infos, changer son mdp, le supprimer """
|
||||
|
||||
import random
|
||||
# La variable context est définie par le script de lancement
|
||||
# l'affecte ainsi pour évietr les warnins pylint:
|
||||
context = context # pylint: disable=undefined-variable
|
||||
REQUEST = REQUEST # pylint: disable=undefined-variable
|
||||
import scotests.sco_fake_gen as sco_fake_gen # pylint: disable=import-error
|
||||
import ZScoUsers
|
||||
import ZScoDoc
|
||||
import ZScolar
|
||||
|
||||
nomdept = raw_input("Quel est le nom de votre département test? ATTENTION A NE PAS VOUS TROMPER : ")
|
||||
|
||||
# --- Création d'un utilisateur
|
||||
|
||||
arg = {"passwd": "scodocpass", "user_name" : "unutil", "nom" : "unnom", "prenom":"unprenom",
|
||||
"email": "unemail@mail.fr", "roles" :"Ens"+nomdept+",RespPe"+nomdept}
|
||||
#user1 = context.Users.create_user(args=arg, REQUEST=REQUEST)
|
||||
user_info1 = context.Users.user_info(user_name="unutil")
|
||||
|
||||
assert user_info1["email"] == arg["email"]
|
||||
assert user_info1["user_name"] == arg["user_name"]
|
||||
assert user_info1["nom"] == "unnom"
|
||||
assert user_info1["prenom"] == "unprenom"
|
||||
assert user_info1["roles"] == arg["roles"]
|
||||
|
||||
|
||||
# --- Récupération de la liste des Users
|
||||
|
||||
liste_xml = context.Users.get_userlist_xml(REQUEST=REQUEST)
|
||||
print(liste_xml)
|
||||
|
||||
liste_user = context.Users.get_userlist()
|
||||
len_liu1 = len(liste_user)
|
||||
|
||||
assert user_info1 in liste_user #le nouvel utilisateur est bien dans la liste !
|
||||
|
||||
# --- Récupérer user_name à partir de nomplogin
|
||||
|
||||
user_name1 = context.Users.get_user_name_from_nomplogin(nomplogin=user_info1["nomplogin"])
|
||||
assert user_name1 == "unutil"
|
||||
|
||||
# --- Changement du mot de passe de l'utilisateur
|
||||
|
||||
context.Users.do_change_password(user_name="unutil", password="scodocpass2")
|
||||
#vérification du mdp changé directement sur scodoc web car je ne trouve pas comment récupérer le mdp en python
|
||||
#Vérification : ok!
|
||||
|
||||
# --- Supression d'un utilisateur
|
||||
|
||||
#context.Users.delete_user_form(REQUEST=REQUEST, user_name="unutil")
|
||||
|
||||
# --- Test de la récupération de l'URL
|
||||
|
||||
url = context.Users.UsersURL()
|
||||
assert url == "ScoDoc/"+nomdept+"/Scolarite/Users"
|
||||
|
||||
"""
|
||||
Commentaire :
|
||||
|
||||
La supression d'un utilisateur ne fonctionne pas car nécessite l'envoie d'un formulaire.
|
||||
|
||||
"""
|
1352
static/formation_export.json
Executable file
1352
static/formation_export.json
Executable file
File diff suppressed because it is too large
Load Diff
@ -1,25 +1,25 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "./static/css/main.6be5a531.chunk.css",
|
||||
"main.js": "./static/js/main.96d680e0.chunk.js",
|
||||
"main.js.map": "./static/js/main.96d680e0.chunk.js.map",
|
||||
"main.js": "./static/js/main.16dd1ee7.chunk.js",
|
||||
"main.js.map": "./static/js/main.16dd1ee7.chunk.js.map",
|
||||
"runtime-main.js": "./static/js/runtime-main.ca83272f.js",
|
||||
"runtime-main.js.map": "./static/js/runtime-main.ca83272f.js.map",
|
||||
"static/css/2.4c97ca4f.chunk.css": "./static/css/2.4c97ca4f.chunk.css",
|
||||
"static/js/2.64a47d60.chunk.js": "./static/js/2.64a47d60.chunk.js",
|
||||
"static/js/2.64a47d60.chunk.js.map": "./static/js/2.64a47d60.chunk.js.map",
|
||||
"static/js/2.ca66eda7.chunk.js": "./static/js/2.ca66eda7.chunk.js",
|
||||
"static/js/2.ca66eda7.chunk.js.map": "./static/js/2.ca66eda7.chunk.js.map",
|
||||
"static/js/3.92b28fed.chunk.js": "./static/js/3.92b28fed.chunk.js",
|
||||
"static/js/3.92b28fed.chunk.js.map": "./static/js/3.92b28fed.chunk.js.map",
|
||||
"index.html": "./index.html",
|
||||
"static/css/2.4c97ca4f.chunk.css.map": "./static/css/2.4c97ca4f.chunk.css.map",
|
||||
"static/css/main.6be5a531.chunk.css.map": "./static/css/main.6be5a531.chunk.css.map",
|
||||
"static/js/2.64a47d60.chunk.js.LICENSE.txt": "./static/js/2.64a47d60.chunk.js.LICENSE.txt"
|
||||
"static/js/2.ca66eda7.chunk.js.LICENSE.txt": "./static/js/2.ca66eda7.chunk.js.LICENSE.txt"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/js/runtime-main.ca83272f.js",
|
||||
"static/css/2.4c97ca4f.chunk.css",
|
||||
"static/js/2.64a47d60.chunk.js",
|
||||
"static/js/2.ca66eda7.chunk.js",
|
||||
"static/css/main.6be5a531.chunk.css",
|
||||
"static/js/main.96d680e0.chunk.js"
|
||||
"static/js/main.16dd1ee7.chunk.js"
|
||||
]
|
||||
}
|
@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Scodoc Mobile"/><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"><link rel="apple-touch-icon" href="./scologo.png"/><link rel="manifest" href="./manifest.json"/><title>Scodoc Mobile</title><link href="./static/css/2.4c97ca4f.chunk.css" rel="stylesheet"><link href="./static/css/main.6be5a531.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"92b28fed"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([])</script><script src="./static/js/2.64a47d60.chunk.js"></script><script src="./static/js/main.96d680e0.chunk.js"></script></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="./favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Scodoc Mobile"/><link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"><link rel="apple-touch-icon" href="./scologo.png"/><link rel="manifest" href="./manifest.json"/><title>Scodoc Mobile</title><link href="./static/css/2.4c97ca4f.chunk.css" rel="stylesheet"><link href="./static/css/main.6be5a531.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function r(r){for(var n,i,a=r[0],c=r[1],l=r[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(r);p.length;)p.shift()();return u.push.apply(u,l||[]),t()}function t(){for(var e,r=0;r<u.length;r++){for(var t=u[r],n=!0,a=1;a<t.length;a++){var c=t[a];0!==o[c]&&(n=!1)}n&&(u.splice(r--,1),e=i(i.s=t[0]))}return e}var n={},o={1:0},u=[];function i(r){if(n[r])return n[r].exports;var t=n[r]={i:r,l:!1,exports:{}};return e[r].call(t.exports,t,t.exports,i),t.l=!0,t.exports}i.e=function(e){var r=[],t=o[e];if(0!==t)if(t)r.push(t[2]);else{var n=new Promise((function(r,n){t=o[e]=[r,n]}));r.push(t[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"92b28fed"}[e]+".chunk.js"}(e);var c=new Error;u=function(r){a.onerror=a.onload=null,clearTimeout(l);var t=o[e];if(0!==t){if(t){var n=r&&("load"===r.type?"missing":r.type),u=r&&r.target&&r.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,t[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(r)},i.m=e,i.c=n,i.d=function(e,r,t){i.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,r){if(1&r&&(e=i(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(i.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var n in e)i.d(t,n,function(r){return e[r]}.bind(null,n));return t},i.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(r,"a",r),r},i.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},i.p="./",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[],c=a.push.bind(a);a.push=r,a=a.slice();for(var l=0;l<a.length;l++)r(a[l]);var f=c;t()}([])</script><script src="./static/js/2.ca66eda7.chunk.js"></script><script src="./static/js/main.16dd1ee7.chunk.js"></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
static/mobile/static/js/2.ca66eda7.chunk.js.map
Normal file
1
static/mobile/static/js/2.ca66eda7.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/main.16dd1ee7.chunk.js
Normal file
2
static/mobile/static/js/main.16dd1ee7.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
static/mobile/static/js/main.16dd1ee7.chunk.js.map
Normal file
1
static/mobile/static/js/main.16dd1ee7.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user