forked from ScoDoc/DocScoDoc
update from master
This commit is contained in:
commit
078e0e85e0
@ -1,13 +1,14 @@
|
||||
# -*- mode: python -*-
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
SCOVERSION = "8.00a"
|
||||
SCOVERSION = "8.01a"
|
||||
|
||||
SCONAME = "ScoDoc"
|
||||
|
||||
SCONEWS = """
|
||||
<h4>Année 2021</h4>
|
||||
<ul>
|
||||
<li>Version mobile (en test)</li>
|
||||
<li>Évaluations de type "deuxième session"</li>
|
||||
<li>Gestion du genre neutre (pas d'affichage de la civilité)</li>
|
||||
<li>Diverses corrections (PV de jurys, ...)</li>
|
||||
|
18
ZAbsences.py
18
ZAbsences.py
@ -720,7 +720,7 @@ class ZAbsences(
|
||||
+ self.sco_footer(REQUEST)
|
||||
)
|
||||
|
||||
base_url = "SignaleAbsenceGrHebdo?datelundi=%s&%s&destination=%s" % (
|
||||
base_url = "SignaleAbsenceGrHebdo?datelundi=%s&%s&destination=%s" % (
|
||||
datelundi,
|
||||
groups_infos.groups_query_args,
|
||||
urllib.quote(destination),
|
||||
@ -904,14 +904,14 @@ class ZAbsences(
|
||||
etuds = [e for e in etuds if e["etudid"] in mod_inscrits]
|
||||
if not moduleimpl_id:
|
||||
moduleimpl_id = None
|
||||
base_url_noweeks = "SignaleAbsenceGrSemestre?datedebut=%s&datefin=%s&%s&destination=%s" % (
|
||||
base_url_noweeks = "SignaleAbsenceGrSemestre?datedebut=%s&datefin=%s&%s&destination=%s" % (
|
||||
datedebut,
|
||||
datefin,
|
||||
groups_infos.groups_query_args,
|
||||
urllib.quote(destination),
|
||||
)
|
||||
base_url = (
|
||||
base_url_noweeks + "&nbweeks=%s" % nbweeks
|
||||
base_url_noweeks + "&nbweeks=%s" % nbweeks
|
||||
) # sans le moduleimpl_id
|
||||
|
||||
if etuds:
|
||||
@ -952,9 +952,9 @@ class ZAbsences(
|
||||
dates = dates[-nbweeks:]
|
||||
msg = "Montrer toutes les semaines"
|
||||
nwl = 0
|
||||
url_link_semaines = base_url_noweeks + "&nbweeks=%s" % nwl
|
||||
url_link_semaines = base_url_noweeks + "&nbweeks=%s" % nwl
|
||||
if moduleimpl_id:
|
||||
url_link_semaines += "&moduleimpl_id=" + moduleimpl_id
|
||||
url_link_semaines += "&moduleimpl_id=" + moduleimpl_id
|
||||
#
|
||||
dates = [x.ISO() for x in dates]
|
||||
dayname = sco_abs.day_names(self)[jourdebut.weekday]
|
||||
@ -1027,7 +1027,7 @@ class ZAbsences(
|
||||
"""<p>
|
||||
Module concerné par ces absences (%(optionel_txt)s):
|
||||
<select id="moduleimpl_id" name="moduleimpl_id"
|
||||
onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
|
||||
onchange="document.location='%(url)s&moduleimpl_id='+document.getElementById('moduleimpl_id').value">
|
||||
<option value="" %(sel)s>non spécifié</option>
|
||||
%(menu_module)s
|
||||
</select>
|
||||
@ -1327,7 +1327,7 @@ class ZAbsences(
|
||||
for a in absnonjust:
|
||||
a["justlink"] = "<em>justifier</em>"
|
||||
a["_justlink_target"] = (
|
||||
"doJustifAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s"
|
||||
"doJustifAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s"
|
||||
% (etudid, a["datedmy"], a["datedmy"], a["ampm"])
|
||||
)
|
||||
#
|
||||
@ -1463,7 +1463,7 @@ class ZAbsences(
|
||||
)
|
||||
+ "<p>Période du %s au %s (nombre de <b>demi-journées</b>)<br/>"
|
||||
% (debut, fin),
|
||||
base_url="%s&formsemestre_id=%s&debut=%s&fin=%s"
|
||||
base_url="%s&formsemestre_id=%s&debut=%s&fin=%s"
|
||||
% (groups_infos.base_url, formsemestre_id, debut, fin),
|
||||
filename="etat_abs_"
|
||||
+ scu.make_filename(
|
||||
@ -1700,7 +1700,7 @@ ou entrez une date pour visualiser les absents un jour donné :
|
||||
"ProcessBilletAbsenceForm?billet_id=%s" % b["billet_id"]
|
||||
)
|
||||
if etud:
|
||||
b["_etat_str_target"] += "&etudid=%s" % etud["etudid"]
|
||||
b["_etat_str_target"] += "&etudid=%s" % etud["etudid"]
|
||||
b["_billet_id_target"] = b["_etat_str_target"]
|
||||
else:
|
||||
b["etat_str"] = "ok"
|
||||
|
20
ZNotes.py
20
ZNotes.py
@ -563,7 +563,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
)
|
||||
if redirect:
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"ue_list?formation_id=" + new_id + "&msg=Nouvelle version !"
|
||||
"ue_list?formation_id=" + new_id + "&msg=Nouvelle version !"
|
||||
)
|
||||
else:
|
||||
return new_id, modules_old2new, ues_old2new
|
||||
@ -1251,7 +1251,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
]
|
||||
for ens in M["ens"]:
|
||||
H.append(
|
||||
'<li>%s (<a class="stdlink" href="edit_enseignants_form_delete?moduleimpl_id=%s&ens_id=%s">supprimer</a>)</li>'
|
||||
'<li>%s (<a class="stdlink" href="edit_enseignants_form_delete?moduleimpl_id=%s&ens_id=%s">supprimer</a>)</li>'
|
||||
% (
|
||||
login2display.get(ens["ens_id"], ens["ens_id"]),
|
||||
moduleimpl_id,
|
||||
@ -1263,7 +1263,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
saisir et modifier toutes les notes des évaluations de ce module.
|
||||
</p>
|
||||
<p class="help">Pour changer le responsable du module, passez par la
|
||||
page "<a class="stdlink" href="formsemestre_editwithmodules?formation_id=%s&formsemestre_id=%s">Modification du semestre</a>", accessible uniquement au responsable de la formation (chef de département)
|
||||
page "<a class="stdlink" href="formsemestre_editwithmodules?formation_id=%s&formsemestre_id=%s">Modification du semestre</a>", accessible uniquement au responsable de la formation (chef de département)
|
||||
</p>
|
||||
""" % (
|
||||
sem["formation_id"],
|
||||
@ -1410,7 +1410,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"moduleimpl_status?moduleimpl_id="
|
||||
+ moduleimpl_id
|
||||
+ "&head_message=responsable%20modifié"
|
||||
+ "&head_message=responsable%20modifié"
|
||||
)
|
||||
|
||||
_expr_help = """<p class="help">Expérimental: formule de calcul de la moyenne %(target)s</p>
|
||||
@ -1498,7 +1498,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"moduleimpl_status?moduleimpl_id="
|
||||
+ moduleimpl_id
|
||||
+ "&head_message=règle%20de%20calcul%20modifiée"
|
||||
+ "&head_message=règle%20de%20calcul%20modifiée"
|
||||
)
|
||||
|
||||
security.declareProtected(ScoView, "view_module_abs")
|
||||
@ -1639,7 +1639,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id="
|
||||
+ formsemestre_id
|
||||
+ "&head_message=règle%20de%20calcul%20modifiée"
|
||||
+ "&head_message=règle%20de%20calcul%20modifiée"
|
||||
)
|
||||
|
||||
security.declareProtected(ScoView, "formsemestre_enseignants_list")
|
||||
@ -1869,7 +1869,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
raise ScoValueError(
|
||||
"""Désinscription impossible: l'étudiant a une décision de jury
|
||||
(la supprimer avant si nécessaire:
|
||||
<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s">
|
||||
<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s">
|
||||
supprimer décision jury</a>
|
||||
)
|
||||
"""
|
||||
@ -2691,7 +2691,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
if not can_edit_app:
|
||||
raise AccessDenied("vous n'avez pas le droit d'ajouter une appreciation")
|
||||
#
|
||||
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % (
|
||||
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % (
|
||||
formsemestre_id,
|
||||
etudid,
|
||||
)
|
||||
@ -3035,7 +3035,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
OK="Supprimer",
|
||||
dest_url="",
|
||||
REQUEST=REQUEST,
|
||||
cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
|
||||
cancel_url="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
|
||||
% (formsemestre_id, etudid),
|
||||
parameters={"etudid": etudid, "formsemestre_id": formsemestre_id},
|
||||
)
|
||||
@ -3045,7 +3045,7 @@ class ZNotes(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Impl
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
self.ScoURL()
|
||||
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
|
||||
+ "/Notes/formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&head_message=Décision%%20supprimée"
|
||||
% (formsemestre_id, etudid)
|
||||
)
|
||||
|
||||
|
@ -514,6 +514,11 @@ class ZScoDoc(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
||||
% REQUEST.BASE0
|
||||
)
|
||||
|
||||
# Lien expérimental temporaire:
|
||||
H.append(
|
||||
'<p><a href="/ScoDoc/static/mobile">Version mobile (expérimentale, à vos risques et périls)</a></p>'
|
||||
)
|
||||
|
||||
H.append(
|
||||
"""
|
||||
<div id="scodoc_attribution">
|
||||
|
@ -523,7 +523,7 @@ class ZScoUsers(
|
||||
if authuser.has_permission(ScoUsersAdmin, self):
|
||||
H.append(
|
||||
"""
|
||||
<li><a class="stdlink" href="create_user_form?user_name=%(user_name)s&edit=1">modifier/déactiver ce compte</a></li>
|
||||
<li><a class="stdlink" href="create_user_form?user_name=%(user_name)s&edit=1">modifier/déactiver ce compte</a></li>
|
||||
<li><a class="stdlink" href="delete_user_form?user_name=%(user_name)s">supprimer cet utilisateur</a> <em>(à n'utiliser qu'en cas d'erreur !)</em></li>
|
||||
"""
|
||||
% info[0]
|
||||
|
20
ZScolar.py
20
ZScolar.py
@ -279,7 +279,7 @@ class ZScolar(ObjectManager, PropertyManager, RoleManager, Item, Persistent, Imp
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Programme DUT R&T</title>
|
||||
<title>Programme DUT TEST</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||||
<meta name="LANG" content="fr" />
|
||||
@ -679,7 +679,7 @@ REQUEST.URL0=%s<br/>
|
||||
date = date.next()
|
||||
FA.append("</select>")
|
||||
FA.append(
|
||||
'<a href="Absences/EtatAbsencesGr?group_ids=%%(group_id)s&debut=%(date_debut)s&fin=%(date_fin)s">état</a>'
|
||||
'<a href="Absences/EtatAbsencesGr?group_ids=%%(group_id)s&debut=%(date_debut)s&fin=%(date_fin)s">état</a>'
|
||||
% sem
|
||||
)
|
||||
FA.append("</form></td>")
|
||||
@ -715,8 +715,8 @@ REQUEST.URL0=%s<br/>
|
||||
"""<td>
|
||||
<a href="%(url)s/groups_view?group_ids=%(group_id)s">%(label)s</a>
|
||||
</td><td>
|
||||
(<a href="%(url)s/groups_view?group_ids=%(group_id)s&format=xls">format tableur</a>)
|
||||
<a href="%(url)s/groups_view?curtab=tab-photos&group_ids=%(group_id)s&etat=I">Photos</a>
|
||||
(<a href="%(url)s/groups_view?group_ids=%(group_id)s&format=xls">format tableur</a>)
|
||||
<a href="%(url)s/groups_view?curtab=tab-photos&group_ids=%(group_id)s&etat=I">Photos</a>
|
||||
</td>"""
|
||||
% group
|
||||
)
|
||||
@ -780,7 +780,7 @@ REQUEST.URL0=%s<br/>
|
||||
# -------------------------- INFOS SUR ETUDIANTS --------------------------
|
||||
security.declareProtected(ScoView, "getEtudInfo")
|
||||
|
||||
def getEtudInfo(self, etudid=False, code_nip=False, filled=False, REQUEST=None):
|
||||
def getEtudInfo(self, etudid=False, code_nip=False, filled=False, REQUEST=None, format=None):
|
||||
"""infos sur un etudiant pour utilisation en Zope DTML
|
||||
On peut specifier etudid
|
||||
ou bien cherche dans REQUEST.form: etudid, code_nip, code_ine
|
||||
@ -791,9 +791,13 @@ REQUEST.URL0=%s<br/>
|
||||
cnx = self.GetDBConnexion()
|
||||
args = make_etud_args(etudid=etudid, code_nip=code_nip, REQUEST=REQUEST)
|
||||
etud = scolars.etudident_list(cnx, args=args)
|
||||
|
||||
if filled:
|
||||
self.fillEtudsInfo(etud)
|
||||
return etud
|
||||
if format is None:
|
||||
return etud
|
||||
else:
|
||||
return scu.sendResult(REQUEST, etud, name="etud", format=format)
|
||||
|
||||
security.declareProtected(ScoView, "search_etud_in_dept")
|
||||
search_etud_in_dept = sco_find_etud.search_etud_in_dept
|
||||
@ -1170,7 +1174,7 @@ REQUEST.URL0=%s<br/>
|
||||
scolars.etud_annotations_delete(cnx, annotation_id)
|
||||
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"ficheEtud?etudid=%s&head_message=Annotation%%20supprimée" % (etudid)
|
||||
"ficheEtud?etudid=%s&head_message=Annotation%%20supprimée" % (etudid)
|
||||
)
|
||||
|
||||
security.declareProtected(ScoEtudChangeAdr, "formChangeCoordonnees")
|
||||
@ -2772,7 +2776,7 @@ def _simple_error_page(context, msg, DeptId=None):
|
||||
H = [context.standard_html_header(context), "<h2>Erreur !</h2>", "<p>", msg, "</p>"]
|
||||
if DeptId:
|
||||
H.append(
|
||||
'<p><a href="delete_dept?DeptId=%s&force=1">Supprimer le dossier %s</a>(très recommandé !)</p>'
|
||||
'<p><a href="delete_dept?DeptId=%s&force=1">Supprimer le dossier %s</a>(très recommandé !)</p>'
|
||||
% (DeptId, DeptId)
|
||||
)
|
||||
H.append(context.standard_html_footer(context))
|
||||
|
@ -45,9 +45,16 @@ def bonus_iutv(notes_sport, coefs, infos=None):
|
||||
return bonus
|
||||
|
||||
|
||||
def bonus_iut_stdenis(notes_sport, coefs, infos=None):
|
||||
"""Semblable à bonus_iutv mais sans coefficients et total limité à 0.5 points.
|
||||
def bonus_direct(notes_sport, coefs, infos=None):
|
||||
"""Un bonus direct et sans chichis: les points sont directement ajoutés à la moyenne générale.
|
||||
Les coefficients sont ignorés: tous les points de bonus sont sommés.
|
||||
(rappel: la note est ramenée sur 20 avant application).
|
||||
"""
|
||||
return sum(notes_sport)
|
||||
|
||||
|
||||
def bonus_iut_stdenis(notes_sport, coefs, infos=None):
|
||||
"""Semblable à bonus_iutv mais sans coefficients et total limité à 0.5 points."""
|
||||
points = sum([x - 10 for x in notes_sport if x > 10]) # points au dessus de 10
|
||||
bonus = points * 0.05 # ou / 20
|
||||
return min(bonus, 0.5) # bonus limité à 1/2 point
|
||||
@ -62,7 +69,7 @@ def bonus_colmar(notes_sport, coefs, infos=None):
|
||||
sur 20 obtenus dans chacune des matières optionnelles sont cumulés
|
||||
dans la limite de 10 points. 5% de ces points cumulés s'ajoutent à
|
||||
la moyenne générale du semestre déjà obtenue par l'étudiant.
|
||||
|
||||
|
||||
"""
|
||||
# les coefs sont ignorés
|
||||
points = sum([x - 10 for x in notes_sport if x > 10])
|
||||
@ -73,7 +80,7 @@ def bonus_colmar(notes_sport, coefs, infos=None):
|
||||
|
||||
def bonus_iutva(notes_sport, coefs, infos=None):
|
||||
"""Calcul bonus modules optionels (sport, culture), règle IUT Ville d'Avray
|
||||
|
||||
|
||||
Les étudiants de l'IUT peuvent suivre des enseignements optionnels
|
||||
de l'Université Paris 10 (C2I) non rattachés à une unité d'enseignement.
|
||||
Si la note est >= 10 et < 12, bonus de 0.1 point
|
||||
@ -93,42 +100,13 @@ def bonus_iutva(notes_sport, coefs, infos=None):
|
||||
return 0
|
||||
|
||||
|
||||
# XXX Inutilisé (mai 2020) ? à confirmer avant suppression XXX
|
||||
# def bonus_iut1grenoble_v0(notes_sport, coefs, infos=None):
|
||||
# """Calcul bonus sport IUT Grenoble sur la moyenne générale
|
||||
#
|
||||
# La note de sport de nos étudiants va de 0 à 5 points.
|
||||
# Chaque point correspond à un % qui augmente la moyenne de chaque UE et la moyenne générale.
|
||||
# Par exemple : note de sport 2/5 : chaque UE sera augmentée de 2%, ainsi que la moyenne générale.
|
||||
#
|
||||
# Calcul ici du bonus sur moyenne générale et moyennes d'UE non capitalisées.
|
||||
# """
|
||||
# # les coefs sont ignorés
|
||||
# # notes de 0 à 5
|
||||
# points = sum([x for x in notes_sport])
|
||||
# factor = (points / 4.0) / 100.0
|
||||
# bonus = infos["moy"] * factor
|
||||
# # Modifie les moyennes de toutes les UE:
|
||||
# for ue_id in infos["moy_ues"]:
|
||||
# ue_status = infos["moy_ues"][ue_id]
|
||||
# if ue_status["sum_coefs"] > 0:
|
||||
# # modifie moyenne UE ds semestre courant
|
||||
# ue_status["cur_moy_ue"] = ue_status["cur_moy_ue"] * (1.0 + factor)
|
||||
# if not ue_status["is_capitalized"]:
|
||||
# # si non capitalisee, modifie moyenne prise en compte
|
||||
# ue_status["moy"] = ue_status["cur_moy_ue"]
|
||||
#
|
||||
# # open('/tmp/log','a').write( pprint.pformat(ue_status) + '\n\n' )
|
||||
# return bonus
|
||||
|
||||
|
||||
def bonus_iut1grenoble_2017(notes_sport, coefs, infos=None):
|
||||
"""Calcul bonus sport IUT Grenoble sur la moyenne générale (version 2017)
|
||||
|
||||
La note de sport de nos étudiants va de 0 à 5 points.
|
||||
|
||||
La note de sport de nos étudiants va de 0 à 5 points.
|
||||
Chaque point correspond à un % qui augmente la moyenne de chaque UE et la moyenne générale.
|
||||
Par exemple : note de sport 2/5 : la moyenne générale sera augmentée de 2%.
|
||||
|
||||
|
||||
Calcul ici du bonus sur moyenne générale
|
||||
"""
|
||||
# les coefs sont ignorés
|
||||
@ -162,14 +140,14 @@ def bonus_lille(notes_sport, coefs, infos=None):
|
||||
def bonus_iutlh(notes_sport, coefs, infos=None):
|
||||
"""Calcul bonus sport IUT du Havre sur moyenne générale et UE
|
||||
|
||||
La note de sport de nos étudiants va de 0 à 20 points.
|
||||
m2=m1*(1+0.005*((10-N1)+(10-N2))
|
||||
m2 : Nouvelle moyenne de l'unité d'enseignement si note de sport et/ou de langue supérieure à 10
|
||||
m1 : moyenne de l'unité d'enseignement avant bonification
|
||||
N1 : note de sport si supérieure à 10
|
||||
N2 : note de seconde langue si supérieure à 10
|
||||
Par exemple : sport 15/20 et langue 12/20 : chaque UE sera multipliée par 1+0.005*7, ainsi que la moyenne générale.
|
||||
Calcul ici de la moyenne générale et moyennes d'UE non capitalisées.
|
||||
La note de sport de nos étudiants va de 0 à 20 points.
|
||||
m2=m1*(1+0.005*((10-N1)+(10-N2))
|
||||
m2 : Nouvelle moyenne de l'unité d'enseignement si note de sport et/ou de langue supérieure à 10
|
||||
m1 : moyenne de l'unité d'enseignement avant bonification
|
||||
N1 : note de sport si supérieure à 10
|
||||
N2 : note de seconde langue si supérieure à 10
|
||||
Par exemple : sport 15/20 et langue 12/20 : chaque UE sera multipliée par 1+0.005*7, ainsi que la moyenne générale.
|
||||
Calcul ici de la moyenne générale et moyennes d'UE non capitalisées.
|
||||
"""
|
||||
# les coefs sont ignorés
|
||||
points = sum([x - 10 for x in notes_sport if x > 10])
|
||||
@ -205,8 +183,8 @@ def bonus_tours(notes_sport, coefs, infos=None):
|
||||
def bonus_iutr(notes_sport, coefs, infos=None):
|
||||
"""Calcul du bonus , regle de l'IUT de Roanne (contribuée par Raphael C., nov 2012)
|
||||
|
||||
Le bonus est compris entre 0 et 0.35 point.
|
||||
cette procédure modifie la moyenne de chaque UE capitalisable.
|
||||
Le bonus est compris entre 0 et 0.35 point.
|
||||
cette procédure modifie la moyenne de chaque UE capitalisable.
|
||||
|
||||
"""
|
||||
# modifie les moyennes de toutes les UE:
|
||||
@ -260,7 +238,7 @@ def bonus_saint_etienne(notes_sport, coefs, infos=None):
|
||||
"""IUT de Saint-Etienne (jan 2014)
|
||||
Nous avons différents types de bonification
|
||||
bonfication Sport / Associations
|
||||
coopératives de département / Bureau Des Étudiants
|
||||
coopératives de département / Bureau Des Étudiants
|
||||
/ engagement citoyen / Langues optionnelles
|
||||
Nous ajoutons sur le bulletin une bonification qui varie entre 0,1 et 0,3 ou 0,35 pour chaque item
|
||||
la bonification totale ne doit pas excéder les 0,6 point.
|
||||
@ -278,9 +256,9 @@ def bonus_saint_etienne(notes_sport, coefs, infos=None):
|
||||
|
||||
|
||||
def bonus_iutTarbes(notes_sport, coefs, infos=None):
|
||||
"""Calcul bonus modules optionnels
|
||||
"""Calcul bonus modules optionnels
|
||||
(sport, Langues, action sociale, Théâtre), règle IUT Tarbes
|
||||
Les coefficients ne sont pas pris en compte,
|
||||
Les coefficients ne sont pas pris en compte,
|
||||
seule la meilleure note est prise en compte
|
||||
le 1/30ème des points au-dessus de 10 sur 20 est retenu et s'ajoute à
|
||||
la moyenne générale du semestre déjà obtenue par l'étudiant.
|
||||
@ -408,7 +386,7 @@ def bonus_iutbethune(notes_sport, coefs, infos=None):
|
||||
def bonus_demo(notes_sport, coefs, infos=None):
|
||||
"""Fausse fonction "bonus" pour afficher les informations disponibles
|
||||
et aider les développeurs.
|
||||
Les informations sont placées dans le fichier /tmp/scodoc_bonus.log
|
||||
Les informations sont placées dans le fichier /tmp/scodoc_bonus.log
|
||||
qui est ECRASE à chaque appel.
|
||||
*** Ne pas utiliser en production !!! ***
|
||||
"""
|
||||
|
@ -34,9 +34,11 @@ export POSTGRES_USER=www-data
|
||||
if [ "${debian_version}" = "10" ]
|
||||
then
|
||||
PSQL=/usr/lib/postgresql/11/bin/psql
|
||||
export POSTGRES_SERVICE="postgresql@11-main.service"
|
||||
elif [ "${debian_version}" = "9" ]
|
||||
then
|
||||
PSQL=/usr/lib/postgresql/9.6/bin/psql
|
||||
export POSTGRES_SERVICE="postgresql"
|
||||
elif [ "${debian_version}" = "8" ]
|
||||
then
|
||||
PSQL=/usr/lib/postgresql/9.4/bin/psql
|
||||
|
@ -8,7 +8,13 @@ source utils.sh
|
||||
check_uid_root "$0"
|
||||
|
||||
echo 'Installation du demarrage automatique de ScoDoc (systemd)'
|
||||
cp "$SCODOC_DIR"/config/etc/scodoc.service /etc/systemd/system
|
||||
|
||||
# La variable POSTGRES_SERVICE doit être positionnée dans config.sh
|
||||
# suivant la version de Debian et de postgresql
|
||||
[ -z "${POSTGRES_SERVICE}" ] && die "incompatible Debian version"
|
||||
|
||||
cat "$SCODOC_DIR/config/etc/scodoc.service" | sed 's/{{postgresql}}/'"${POSTGRES_SERVICE}"'/g' > /etc/systemd/system/scodoc.service
|
||||
|
||||
systemctl enable scodoc.service
|
||||
|
||||
echo "A partir de maintenant, utiliser"
|
||||
|
@ -1,13 +1,15 @@
|
||||
# ScoDoc7 service
|
||||
# Zope based
|
||||
# Depends on postgresql
|
||||
# => is restarted when postgresql restarts
|
||||
# Depends on {{postgresql}} (replaced by installation script by
|
||||
# postgresql@11-main.service on Debian 10
|
||||
# postgresql on Debian <= 9
|
||||
# => is restarted when {{postgresql}} restarts
|
||||
#
|
||||
[Unit]
|
||||
Description=ScoDoc 7 service
|
||||
After=network.target postgresql@11-main.service
|
||||
Requires=postgresql@11-main.service
|
||||
PartOf=postgresql@11-main.service
|
||||
After=network.target {{postgresql}}
|
||||
Requires={{postgresql}}
|
||||
PartOf={{postgresql}}
|
||||
StartLimitIntervalSec=0
|
||||
|
||||
[Service]
|
||||
@ -21,4 +23,4 @@ ExecStop=/opt/scodoc/bin/zopectl stop
|
||||
ExecReload=/opt/scodoc/bin/zopectl restart
|
||||
|
||||
[Install]
|
||||
WantedBy=postgresql@11-main.service
|
||||
WantedBy={{postgresql}}
|
||||
|
@ -31,11 +31,13 @@ fi
|
||||
chgrp www-data "$SCODOC_DIR" "$SCODOC_DIR"/ZopeProducts/*
|
||||
chmod g+w "$SCODOC_DIR" "$SCODOC_DIR"/ZopeProducts/*
|
||||
|
||||
chgrp -R www-data "${SCODOC_VAR_DIR}"/photos
|
||||
chmod -R g+w "${SCODOC_VAR_DIR}"/photos
|
||||
if [ -d "${SCODOC_VAR_DIR}"/photos ]; then
|
||||
chgrp -R www-data "${SCODOC_VAR_DIR}"/photos
|
||||
chmod -R g+w "${SCODOC_VAR_DIR}"/photos
|
||||
fi
|
||||
|
||||
if [ ! -e "${SCODOC_VERSION_DIR}" ]; then
|
||||
mkdir "${SCODOC_VERSION_DIR}"
|
||||
mkdir -p "${SCODOC_VERSION_DIR}"
|
||||
chown www-data.www-data "${SCODOC_VERSION_DIR}"
|
||||
fi
|
||||
|
||||
@ -217,9 +219,7 @@ read ans
|
||||
if [ "$(norm_ans "$ans")" != 'N' ]
|
||||
then
|
||||
# ScoDoc 7.19+ uses systemd
|
||||
echo 'Installation du demarrage automatique de ScoDoc (systemd)'
|
||||
cp "$SCODOC_DIR"/config/etc/scodoc.service /etc/systemd/system
|
||||
systemctl enable scodoc.service
|
||||
$SCODOC_DIR/config/configure_systemd.sh
|
||||
fi
|
||||
|
||||
|
||||
|
@ -60,7 +60,7 @@ then
|
||||
fi
|
||||
chown root "$DEST"
|
||||
|
||||
# Zope DB and ScoDoc archives:
|
||||
# Zope DB, ScoDoc archives, configuration, photos, etc.
|
||||
echo "Copying var/ ..."
|
||||
cp -rp "$INSTANCE_DIR/var" "$DEST"
|
||||
|
||||
|
6
debug.py
6
debug.py
@ -67,7 +67,11 @@ def go(app, n=0, verbose=True):
|
||||
def go_dept(app, dept, verbose=True):
|
||||
objs = app.ScoDoc.objectValues("Folder")
|
||||
for o in objs:
|
||||
context = o.Scolarite
|
||||
try:
|
||||
context = o.Scolarite
|
||||
except AttributeError:
|
||||
# ignore other folders, like old "icons"
|
||||
continue
|
||||
if context.DeptId() == dept:
|
||||
if verbose:
|
||||
print("context in dept ", context.DeptId())
|
||||
|
@ -445,14 +445,14 @@ class GenTable:
|
||||
if self.base_url:
|
||||
if self.xls_link:
|
||||
H.append(
|
||||
' <a href="%s&format=xls">%s</a>'
|
||||
' <a href="%s&format=xls">%s</a>'
|
||||
% (self.base_url, scu.ICON_XLS)
|
||||
)
|
||||
if self.xls_link and self.pdf_link:
|
||||
H.append(" ")
|
||||
if self.pdf_link:
|
||||
H.append(
|
||||
' <a href="%s&format=pdf">%s</a>'
|
||||
' <a href="%s&format=pdf">%s</a>'
|
||||
% (self.base_url, scu.ICON_PDF)
|
||||
)
|
||||
H.append("</p>")
|
||||
|
@ -76,8 +76,9 @@ def doSignaleAbsence(
|
||||
description_abs = description
|
||||
dates = sco_abs.DateRangeISO(context, datedebut, datefin)
|
||||
nbadded = 0
|
||||
demijournee = int(demijournee)
|
||||
for jour in dates:
|
||||
if demijournee == "2":
|
||||
if demijournee == 2:
|
||||
context._AddAbsence(
|
||||
etudid, jour, False, estjust, REQUEST, description_abs, moduleimpl_id
|
||||
)
|
||||
@ -86,9 +87,8 @@ def doSignaleAbsence(
|
||||
)
|
||||
nbadded += 2
|
||||
else:
|
||||
matin = int(demijournee)
|
||||
context._AddAbsence(
|
||||
etudid, jour, matin, estjust, REQUEST, description_abs, moduleimpl_id
|
||||
etudid, jour, demijournee, estjust, REQUEST, description_abs, moduleimpl_id
|
||||
)
|
||||
nbadded += 1
|
||||
#
|
||||
@ -281,8 +281,9 @@ def doJustifAbsence(
|
||||
description_abs = description
|
||||
dates = sco_abs.DateRangeISO(context, datedebut, datefin)
|
||||
nbadded = 0
|
||||
demijournee = int(demijournee)
|
||||
for jour in dates:
|
||||
if demijournee == "2":
|
||||
if demijournee == 2:
|
||||
context._AddJustif(
|
||||
etudid=etudid,
|
||||
jour=jour,
|
||||
@ -299,11 +300,10 @@ def doJustifAbsence(
|
||||
)
|
||||
nbadded += 2
|
||||
else:
|
||||
matin = int(demijournee)
|
||||
context._AddJustif(
|
||||
etudid=etudid,
|
||||
jour=jour,
|
||||
matin=matin,
|
||||
matin=demijournee,
|
||||
REQUEST=REQUEST,
|
||||
description=description_abs,
|
||||
)
|
||||
@ -404,14 +404,14 @@ def doAnnuleAbsence(
|
||||
|
||||
dates = sco_abs.DateRangeISO(context, datedebut, datefin)
|
||||
nbadded = 0
|
||||
demijournee = int(demijournee)
|
||||
for jour in dates:
|
||||
if demijournee == "2":
|
||||
if demijournee == 2:
|
||||
context._AnnuleAbsence(etudid, jour, False, REQUEST=REQUEST)
|
||||
context._AnnuleAbsence(etudid, jour, True, REQUEST=REQUEST)
|
||||
nbadded += 2
|
||||
else:
|
||||
matin = int(demijournee)
|
||||
context._AnnuleAbsence(etudid, jour, matin, REQUEST=REQUEST)
|
||||
context._AnnuleAbsence(etudid, jour, demijournee, REQUEST=REQUEST)
|
||||
nbadded += 1
|
||||
#
|
||||
H = [
|
||||
@ -539,15 +539,15 @@ def doAnnuleJustif(
|
||||
etudid = etud["etudid"]
|
||||
dates = sco_abs.DateRangeISO(context, datedebut0, datefin0)
|
||||
nbadded = 0
|
||||
demijournee = int(demijournee)
|
||||
for jour in dates:
|
||||
# Attention: supprime matin et après-midi
|
||||
if demijournee == "2":
|
||||
if demijournee == 2:
|
||||
context._AnnuleJustif(etudid, jour, False, REQUEST=REQUEST)
|
||||
context._AnnuleJustif(etudid, jour, True, REQUEST=REQUEST)
|
||||
nbadded += 2
|
||||
else:
|
||||
matin = int(demijournee)
|
||||
context._AnnuleJustif(etudid, jour, matin, REQUEST=REQUEST)
|
||||
context._AnnuleJustif(etudid, jour, demijournee, REQUEST=REQUEST)
|
||||
nbadded += 1
|
||||
#
|
||||
H = [
|
||||
@ -720,7 +720,7 @@ def ListeAbsEtud(
|
||||
):
|
||||
"""Liste des absences d'un étudiant sur l'année en cours
|
||||
En format 'html': page avec deux tableaux (non justifiées et justifiées).
|
||||
En format xls ou pdf: l'un ou l'autre des table, suivant absjust_only.
|
||||
En format json, xml, xls ou pdf: l'un ou l'autre des table, suivant absjust_only.
|
||||
En format 'text': texte avec liste d'absences (pour mails).
|
||||
"""
|
||||
absjust_only = int(absjust_only) # si vrai, table absjust seule (export xls ou pdf)
|
||||
@ -732,10 +732,9 @@ def ListeAbsEtud(
|
||||
titles, columns_ids, absnonjust, absjust = context.Absences._TablesAbsEtud(
|
||||
etudid, datedebut, with_evals=with_evals, format=format
|
||||
)
|
||||
|
||||
if REQUEST:
|
||||
base_url_nj = "%s?etudid=%s&absjust_only=0" % (REQUEST.URL0, etudid)
|
||||
base_url_j = "%s?etudid=%s&absjust_only=1" % (REQUEST.URL0, etudid)
|
||||
base_url_nj = "%s?etudid=%s&absjust_only=0" % (REQUEST.URL0, etudid)
|
||||
base_url_j = "%s?etudid=%s&absjust_only=1" % (REQUEST.URL0, etudid)
|
||||
else:
|
||||
base_url_nj = base_url_j = ""
|
||||
tab_absnonjust = GenTable(
|
||||
|
@ -484,7 +484,7 @@ enregistrés et non modifiables, on peut les retrouver ultérieurement.
|
||||
|
||||
# submitted or cancelled:
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_list_archives?formsemestre_id=%s&head_message=%s"
|
||||
"formsemestre_list_archives?formsemestre_id=%s&head_message=%s"
|
||||
% (formsemestre_id, msg)
|
||||
)
|
||||
|
||||
@ -510,7 +510,7 @@ def formsemestre_list_archives(context, REQUEST, formsemestre_id):
|
||||
for a in L:
|
||||
archive_name = PVArchive.get_archive_name(a["archive_id"])
|
||||
H.append(
|
||||
'<li>%s : <em>%s</em> (<a href="formsemestre_delete_archive?formsemestre_id=%s&archive_name=%s">supprimer</a>)<ul>'
|
||||
'<li>%s : <em>%s</em> (<a href="formsemestre_delete_archive?formsemestre_id=%s&archive_name=%s">supprimer</a>)<ul>'
|
||||
% (
|
||||
a["date"].strftime("%d/%m/%Y %H:%M"),
|
||||
a["description"],
|
||||
@ -520,7 +520,7 @@ def formsemestre_list_archives(context, REQUEST, formsemestre_id):
|
||||
)
|
||||
for filename in a["content"]:
|
||||
H.append(
|
||||
'<li><a href="formsemestre_get_archived_file?formsemestre_id=%s&archive_name=%s&filename=%s">%s</a></li>'
|
||||
'<li><a href="formsemestre_get_archived_file?formsemestre_id=%s&archive_name=%s&filename=%s">%s</a></li>'
|
||||
% (formsemestre_id, archive_name, filename, filename)
|
||||
)
|
||||
if not a["content"]:
|
||||
@ -570,4 +570,4 @@ def formsemestre_delete_archive(
|
||||
)
|
||||
|
||||
PVArchive.delete_archive(archive_id)
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
|
@ -83,14 +83,14 @@ def etud_list_archives_html(context, REQUEST, etudid):
|
||||
)
|
||||
for filename in a["content"]:
|
||||
H.append(
|
||||
"""<a class="stdlink etudarchive_link" href="etud_get_archived_file?etudid=%s&archive_name=%s&filename=%s">%s</a>"""
|
||||
"""<a class="stdlink etudarchive_link" href="etud_get_archived_file?etudid=%s&archive_name=%s&filename=%s">%s</a>"""
|
||||
% (etudid, archive_name, filename, filename)
|
||||
)
|
||||
if not a["content"]:
|
||||
H.append("<em>aucun fichier !</em>")
|
||||
if can_edit:
|
||||
H.append(
|
||||
'<span class="deletudarchive"><a class="smallbutton" href="etud_delete_archive?etudid=%s&archive_name=%s">%s</a></span>'
|
||||
'<span class="deletudarchive"><a class="smallbutton" href="etud_delete_archive?etudid=%s&archive_name=%s">%s</a></span>'
|
||||
% (etudid, archive_name, delete_icon)
|
||||
)
|
||||
else:
|
||||
@ -216,7 +216,7 @@ def etud_delete_archive(context, REQUEST, etudid, archive_name, dialog_confirmed
|
||||
)
|
||||
|
||||
EtudsArchive.delete_archive(archive_id)
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
|
||||
|
||||
def etud_get_archived_file(context, REQUEST, etudid, archive_name, filename):
|
||||
|
@ -327,7 +327,7 @@ def formsemestre_bulletinetud_dict(
|
||||
)
|
||||
u[
|
||||
"ue_descr_html"
|
||||
] = '<a href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s" class="bull_link">%s</a>' % (
|
||||
] = '<a href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s" class="bull_link">%s</a>' % (
|
||||
sem_origin["formsemestre_id"],
|
||||
etudid,
|
||||
sem_origin["titreannee"],
|
||||
@ -520,7 +520,7 @@ def _ue_mod_bulletin(context, etudid, formsemestre_id, ue_id, modimpls, nt, vers
|
||||
else:
|
||||
e["name"] = e["description"] or "le %s" % e["jour"]
|
||||
e["target_html"] = (
|
||||
"evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1"
|
||||
"evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1"
|
||||
% e["evaluation_id"]
|
||||
)
|
||||
e["name_html"] = '<a class="bull_link" href="%s">%s</a>' % (
|
||||
@ -569,7 +569,7 @@ def _ue_mod_bulletin(context, etudid, formsemestre_id, ue_id, modimpls, nt, vers
|
||||
mod["evaluations_incompletes"].append(e)
|
||||
e["name"] = (e["description"] or "") + " (%s)" % e["jour"]
|
||||
e["target_html"] = (
|
||||
"evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1"
|
||||
"evaluation_listenotes?evaluation_id=%s&format=html&tf-submitted=1"
|
||||
% e["evaluation_id"]
|
||||
)
|
||||
e["name_html"] = '<a class="bull_link" href="%s">%s</a>' % (
|
||||
@ -814,7 +814,7 @@ def formsemestre_bulletinetud(
|
||||
if sem["modalite"] == "EXT":
|
||||
R.append(
|
||||
"""<p><a
|
||||
href="formsemestre_ext_edit_ue_validations?formsemestre_id=%s&etudid=%s"
|
||||
href="formsemestre_ext_edit_ue_validations?formsemestre_id=%s&etudid=%s"
|
||||
class="stdlink">
|
||||
Editer les validations d'UE dans ce semestre extérieur
|
||||
</a></p>"""
|
||||
@ -1074,7 +1074,7 @@ def _formsemestre_bulletinetud_header_html(
|
||||
menuBul = [
|
||||
{
|
||||
"title": "Réglages bulletins",
|
||||
"url": "formsemestre_edit_options?formsemestre_id=%s&target_url=%s"
|
||||
"url": "formsemestre_edit_options?formsemestre_id=%s&target_url=%s"
|
||||
% (formsemestre_id, qurl),
|
||||
"enabled": (uid in sem["responsables"])
|
||||
or authuser.has_permission(ScoImplement, context),
|
||||
@ -1085,13 +1085,13 @@ def _formsemestre_bulletinetud_header_html(
|
||||
context, formsemestre_id
|
||||
),
|
||||
"url": url
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdf&version=%s"
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdf&version=%s"
|
||||
% (formsemestre_id, etudid, version),
|
||||
},
|
||||
{
|
||||
"title": "Envoi par mail à %s" % etud["email"],
|
||||
"url": url
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s"
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s"
|
||||
% (formsemestre_id, etudid, version),
|
||||
"enabled": etud["email"]
|
||||
and can_send_bulletin_by_mail(
|
||||
@ -1101,7 +1101,7 @@ def _formsemestre_bulletinetud_header_html(
|
||||
{
|
||||
"title": "Envoi par mail à %s (adr. personnelle)" % etud["emailperso"],
|
||||
"url": url
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s&prefer_mail_perso=1"
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdfmail&version=%s&prefer_mail_perso=1"
|
||||
% (formsemestre_id, etudid, version),
|
||||
"enabled": etud["emailperso"]
|
||||
and can_send_bulletin_by_mail(
|
||||
@ -1111,12 +1111,12 @@ def _formsemestre_bulletinetud_header_html(
|
||||
{
|
||||
"title": "Version XML",
|
||||
"url": url
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=xml&version=%s"
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=xml&version=%s"
|
||||
% (formsemestre_id, etudid, version),
|
||||
},
|
||||
{
|
||||
"title": "Ajouter une appréciation",
|
||||
"url": "appreciation_add_form?etudid=%s&formsemestre_id=%s"
|
||||
"url": "appreciation_add_form?etudid=%s&formsemestre_id=%s"
|
||||
% (etudid, formsemestre_id),
|
||||
"enabled": (
|
||||
(authuser in sem["responsables"])
|
||||
@ -1125,31 +1125,31 @@ def _formsemestre_bulletinetud_header_html(
|
||||
},
|
||||
{
|
||||
"title": "Enregistrer un semestre effectué ailleurs",
|
||||
"url": "formsemestre_ext_create_form?etudid=%s&formsemestre_id=%s"
|
||||
"url": "formsemestre_ext_create_form?etudid=%s&formsemestre_id=%s"
|
||||
% (etudid, formsemestre_id),
|
||||
"enabled": authuser.has_permission(ScoImplement, context),
|
||||
},
|
||||
{
|
||||
"title": "Enregistrer une validation d'UE antérieure",
|
||||
"url": "formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
||||
"url": "formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
||||
% (etudid, formsemestre_id),
|
||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
||||
},
|
||||
{
|
||||
"title": "Enregistrer note d'une UE externe",
|
||||
"url": "external_ue_create_form?etudid=%s&formsemestre_id=%s"
|
||||
"url": "external_ue_create_form?etudid=%s&formsemestre_id=%s"
|
||||
% (etudid, formsemestre_id),
|
||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
||||
},
|
||||
{
|
||||
"title": "Entrer décisions jury",
|
||||
"url": "formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
|
||||
"url": "formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s"
|
||||
% (formsemestre_id, etudid),
|
||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
||||
},
|
||||
{
|
||||
"title": "Editer PV jury",
|
||||
"url": "formsemestre_pvjury_pdf?formsemestre_id=%s&etudid=%s"
|
||||
"url": "formsemestre_pvjury_pdf?formsemestre_id=%s&etudid=%s"
|
||||
% (formsemestre_id, etudid),
|
||||
"enabled": True,
|
||||
},
|
||||
@ -1162,7 +1162,7 @@ def _formsemestre_bulletinetud_header_html(
|
||||
'<td> <a href="%s">%s</a></td>'
|
||||
% (
|
||||
url
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdf&version=%s"
|
||||
+ "?formsemestre_id=%s&etudid=%s&format=pdf&version=%s"
|
||||
% (formsemestre_id, etudid, version),
|
||||
scu.ICON_PDF,
|
||||
)
|
||||
|
@ -324,7 +324,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator):
|
||||
for app in I["appreciations_list"]:
|
||||
if can_edit_app:
|
||||
mlink = (
|
||||
'<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'
|
||||
'<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'
|
||||
% (app["id"], app["id"])
|
||||
)
|
||||
else:
|
||||
@ -335,7 +335,7 @@ class BulletinGeneratorLegacy(sco_bulletins_generator.BulletinGenerator):
|
||||
)
|
||||
if can_edit_app:
|
||||
H.append(
|
||||
'<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>'
|
||||
'<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>'
|
||||
% self.infos
|
||||
)
|
||||
H.append("</div>")
|
||||
|
@ -159,7 +159,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
|
||||
for app in self.infos["appreciations_list"]:
|
||||
if can_edit_app:
|
||||
mlink = (
|
||||
'<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'
|
||||
'<a class="stdlink" href="appreciation_add_form?id=%s">modifier</a> <a class="stdlink" href="appreciation_add_form?id=%s&suppress=1">supprimer</a>'
|
||||
% (app["id"], app["id"])
|
||||
)
|
||||
else:
|
||||
@ -170,7 +170,7 @@ class BulletinGeneratorStandard(sco_bulletins_generator.BulletinGenerator):
|
||||
)
|
||||
if can_edit_app:
|
||||
H.append(
|
||||
'<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>'
|
||||
'<p><a class="stdlink" href="appreciation_add_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s">Ajouter une appréciation</a></p>'
|
||||
% self.infos
|
||||
)
|
||||
H.append("</div>")
|
||||
|
@ -194,7 +194,7 @@ def formsemestre_estim_cost(
|
||||
)
|
||||
tab.html_before_table = h
|
||||
tab.base_url = (
|
||||
"%s?formsemestre_id=%s&n_group_td=%s&n_group_tp=%s&coef_tp=%s"
|
||||
"%s?formsemestre_id=%s&n_group_td=%s&n_group_tp=%s&coef_tp=%s"
|
||||
% (REQUEST.URL0, formsemestre_id, n_group_td, n_group_tp, coef_tp)
|
||||
)
|
||||
|
||||
|
@ -435,14 +435,14 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
||||
H.append('<li class="notes_ue_list">')
|
||||
if iue != 0 and editable:
|
||||
H.append(
|
||||
'<a href="ue_move?ue_id=%s&after=0" class="aud">%s</a>'
|
||||
'<a href="ue_move?ue_id=%s&after=0" class="aud">%s</a>'
|
||||
% (UE["ue_id"], arrow_up)
|
||||
)
|
||||
else:
|
||||
H.append(arrow_none)
|
||||
if iue < len(ue_list) - 1 and editable:
|
||||
H.append(
|
||||
'<a href="ue_move?ue_id=%s&after=1" class="aud">%s</a>'
|
||||
'<a href="ue_move?ue_id=%s&after=1" class="aud">%s</a>'
|
||||
% (UE["ue_id"], arrow_down)
|
||||
)
|
||||
else:
|
||||
@ -500,14 +500,14 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
||||
H.append('<span class="notes_module_list_buts">')
|
||||
if im != 0 and editable:
|
||||
H.append(
|
||||
'<a href="module_move?module_id=%s&after=0" class="aud">%s</a>'
|
||||
'<a href="module_move?module_id=%s&after=0" class="aud">%s</a>'
|
||||
% (Mod["module_id"], arrow_up)
|
||||
)
|
||||
else:
|
||||
H.append(arrow_none)
|
||||
if im < len(Modlist) - 1 and editable:
|
||||
H.append(
|
||||
'<a href="module_move?module_id=%s&after=1" class="aud">%s</a>'
|
||||
'<a href="module_move?module_id=%s&after=1" class="aud">%s</a>'
|
||||
% (Mod["module_id"], arrow_down)
|
||||
)
|
||||
else:
|
||||
@ -620,9 +620,9 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
||||
"""
|
||||
<li><a class="stdlink" href="formation_table_recap?formation_id=%(formation_id)s">Table récapitulative de la formation</a></li>
|
||||
|
||||
<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=xml">Export XML de la formation</a> (permet de la sauvegarder pour l'échanger avec un autre site)</li>
|
||||
<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=xml">Export XML de la formation</a> (permet de la sauvegarder pour l'échanger avec un autre site)</li>
|
||||
|
||||
<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=json">Export JSON de la formation</a></li>
|
||||
<li><a class="stdlink" href="formation_export?formation_id=%(formation_id)s&format=json">Export JSON de la formation</a></li>
|
||||
|
||||
<li><a class="stdlink" href="module_list?formation_id=%(formation_id)s">Liste détaillée des modules de la formation</a> (debug) </li>
|
||||
</ul>
|
||||
@ -646,7 +646,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
||||
H.append(" [verrouillé]")
|
||||
else:
|
||||
H.append(
|
||||
' <a class="stdlink" href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier</a>'
|
||||
' <a class="stdlink" href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier</a>'
|
||||
% sem
|
||||
)
|
||||
H.append("</li>")
|
||||
@ -655,7 +655,7 @@ Si vous souhaitez modifier cette formation (par exemple pour y ajouter un module
|
||||
if authuser.has_permission(ScoImplement, context):
|
||||
H.append(
|
||||
"""<ul>
|
||||
<li><a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">Mettre en place un nouveau semestre de formation %(acronyme)s</a>
|
||||
<li><a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">Mettre en place un nouveau semestre de formation %(acronyme)s</a>
|
||||
</li>
|
||||
|
||||
</ul>"""
|
||||
|
@ -177,8 +177,8 @@ def apo_semset_maq_status(
|
||||
H.append("""<li>Il y a plusieurs années scolaires !</li>""")
|
||||
if nips_no_sco: # seulement un warning
|
||||
url_list = (
|
||||
"view_apo_etuds?semset_id=%s&title=Etudiants%%20presents%%20dans%%20maquettes%%20Apogee%%20mais%%20pas%%20dans%%20les%%20semestres%%20ScoDoc:&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_sco))
|
||||
"view_apo_etuds?semset_id=%s&title=Etudiants%%20presents%%20dans%%20maquettes%%20Apogee%%20mais%%20pas%%20dans%%20les%%20semestres%%20ScoDoc:&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_sco))
|
||||
)
|
||||
H.append(
|
||||
'<li class="apo_csv_warning">Attention: il y a <a href="%s">%d étudiant(s)</a> dans les maquettes Apogée chargées non inscrit(s) dans ce semestre ScoDoc;</li>'
|
||||
@ -196,8 +196,8 @@ def apo_semset_maq_status(
|
||||
|
||||
if nips_no_apo:
|
||||
url_list = (
|
||||
"view_scodoc_etuds?semset_id=%s&title=Etudiants%%20ScoDoc%%20non%%20listés%%20dans%%20les%%20maquettes%%20Apogée%%20chargées&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_apo))
|
||||
"view_scodoc_etuds?semset_id=%s&title=Etudiants%%20ScoDoc%%20non%%20listés%%20dans%%20les%%20maquettes%%20Apogée%%20chargées&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_apo))
|
||||
)
|
||||
H.append(
|
||||
'<li><a href="%s">%d étudiants</a> dans ce semestre non présents dans les maquettes Apogée chargées</li>'
|
||||
@ -206,8 +206,8 @@ def apo_semset_maq_status(
|
||||
|
||||
if nips_no_sco: # seulement un warning
|
||||
url_list = (
|
||||
"view_apo_etuds?semset_id=%s&title=Etudiants%%20presents%%20dans%%20maquettes%%20Apogee%%20mais%%20pas%%20dans%%20les%%20semestres%%20ScoDoc:&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_sco))
|
||||
"view_apo_etuds?semset_id=%s&title=Etudiants%%20presents%%20dans%%20maquettes%%20Apogee%%20mais%%20pas%%20dans%%20les%%20semestres%%20ScoDoc:&nips=%s"
|
||||
% (semset_id, "&nips=".join(nips_no_sco))
|
||||
)
|
||||
H.append(
|
||||
'<li class="apo_csv_warning">Attention: il reste <a href="%s">%d étudiants</a> dans les maquettes Apogée chargées mais pas inscrits dans ce semestre ScoDoc</li>'
|
||||
@ -216,8 +216,8 @@ def apo_semset_maq_status(
|
||||
|
||||
if apo_dups:
|
||||
url_list = (
|
||||
"view_apo_etuds?semset_id=%s&title=Doublons%%20Apogee&nips=%s"
|
||||
% (semset_id, "&nips=".join(apo_dups))
|
||||
"view_apo_etuds?semset_id=%s&title=Doublons%%20Apogee&nips=%s"
|
||||
% (semset_id, "&nips=".join(apo_dups))
|
||||
)
|
||||
H.append(
|
||||
'<li><a href="%s">%d étudiants</a> présents dans les <em>plusieurs</em> maquettes Apogée chargées</li>'
|
||||
@ -673,7 +673,7 @@ def view_apo_csv_delete(
|
||||
context, etape_apo, semset["annee_scolaire"], semset["sem_id"]
|
||||
)
|
||||
sco_etape_apogee.apo_csv_delete(context, info["archive_id"])
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
return REQUEST.RESPONSE.redirect(dest_url + "&head_message=Archive%20supprimée")
|
||||
|
||||
|
||||
def view_apo_csv(context, etape_apo="", semset_id="", format="html", REQUEST=None):
|
||||
|
@ -236,11 +236,11 @@ def scodoc_table_results(
|
||||
tab, semlist = _build_results_table(
|
||||
context, start_date_iso, end_date_iso, types_parcours
|
||||
)
|
||||
tab.base_url = "%s?start_date=%s&end_date=%s&types_parcours=%s" % (
|
||||
tab.base_url = "%s?start_date=%s&end_date=%s&types_parcours=%s" % (
|
||||
REQUEST.URL0,
|
||||
start_date,
|
||||
end_date,
|
||||
"&types_parcours=".join([str(x) for x in types_parcours]),
|
||||
"&types_parcours=".join([str(x) for x in types_parcours]),
|
||||
)
|
||||
if format != "html":
|
||||
return tab.make_page(
|
||||
|
@ -141,7 +141,7 @@ def search_etud_in_dept(context, expnom="", REQUEST=None):
|
||||
if len(etuds) > 0:
|
||||
# Choix dans la liste des résultats:
|
||||
for e in etuds:
|
||||
target = dest_url + "?etudid=%s&" % e["etudid"]
|
||||
target = dest_url + "?etudid=%s&" % e["etudid"]
|
||||
e["_nomprenom_target"] = target
|
||||
e["inscription_target"] = target
|
||||
e["_nomprenom_td_attrs"] = 'id="%s" class="etudinfo"' % (e["etudid"])
|
||||
|
@ -241,7 +241,7 @@ def formation_list_table(context, formation_id=None, args={}, REQUEST=None):
|
||||
for s in f["sems"]
|
||||
]
|
||||
+ [
|
||||
'<a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">ajouter</a>'
|
||||
'<a class="stdlink" href="formsemestre_createwithmodules?formation_id=%(formation_id)s&semestre_id=1">ajouter</a>'
|
||||
% f
|
||||
]
|
||||
)
|
||||
|
@ -711,7 +711,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
||||
}
|
||||
_ = sco_moduleimpl.do_moduleimpl_create(context, modargs)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé"
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé"
|
||||
% formsemestre_id
|
||||
)
|
||||
else:
|
||||
@ -811,7 +811,7 @@ def do_formsemestre_createwithmodules(context, REQUEST=None, edit=False):
|
||||
return msg_html
|
||||
else:
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié"
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Semestre modifié"
|
||||
% formsemestre_id
|
||||
)
|
||||
|
||||
@ -965,7 +965,7 @@ def formsemestre_clone(context, formsemestre_id, REQUEST=None):
|
||||
REQUEST=REQUEST,
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé"
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Nouveau%%20semestre%%20créé"
|
||||
% new_formsemestre_id
|
||||
)
|
||||
|
||||
@ -1148,7 +1148,7 @@ def formsemestre_associate_new_version(
|
||||
context, [formsemestre_id] + other_formsemestre_ids, REQUEST=REQUEST
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée"
|
||||
"formsemestre_status?formsemestre_id=%s&head_message=Formation%%20dupliquée"
|
||||
% formsemestre_id
|
||||
)
|
||||
|
||||
|
@ -86,7 +86,7 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None)
|
||||
<p class="help">
|
||||
Notez que si un semestre extérieur similaire a déjà été créé pour un autre étudiant,
|
||||
il est préférable d'utiliser la fonction
|
||||
"<a href="formsemestre_inscription_with_modules_form?etudid=%s&only_ext=1">
|
||||
"<a href="formsemestre_inscription_with_modules_form?etudid=%s&only_ext=1">
|
||||
inscrire à un autre semestre</a>"
|
||||
</p>
|
||||
"""
|
||||
@ -191,7 +191,7 @@ def formsemestre_ext_create_form(context, etudid, formsemestre_id, REQUEST=None)
|
||||
return "\n".join(H) + "\n" + tf[1] + F
|
||||
elif tf[0] == -1:
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"%s/formsemestre_bulletinetud?formsemestre_id==%s&etudid=%s"
|
||||
"%s/formsemestre_bulletinetud?formsemestre_id==%s&etudid=%s"
|
||||
% (context.ScoURL(), formsemestre_id, etudid)
|
||||
)
|
||||
else:
|
||||
|
@ -147,7 +147,7 @@ def formsemestre_inscription_with_modules_form(
|
||||
if (not only_ext) or (sem["modalite"] == "EXT"):
|
||||
H.append(
|
||||
"""
|
||||
<li><a class="stdlink" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>
|
||||
<li><a class="stdlink" href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s">%s</a>
|
||||
"""
|
||||
% (etudid, sem["formsemestre_id"], sem["titremois"])
|
||||
)
|
||||
@ -217,12 +217,12 @@ def formsemestre_inscription_with_modules(
|
||||
H.append("<ul>")
|
||||
for s in others:
|
||||
H.append(
|
||||
'<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>'
|
||||
'<li><a href="formsemestre_desinscription?formsemestre_id=%s&etudid=%s">déinscrire de %s</li>'
|
||||
% (s["formsemestre_id"], etudid, s["titreannee"])
|
||||
)
|
||||
H.append("</ul>")
|
||||
H.append(
|
||||
"""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>"""
|
||||
"""<p><a href="formsemestre_inscription_with_modules?etudid=%s&formsemestre_id=%s&multiple_ok=1&%s">Continuer quand même l'inscription</a></p>"""
|
||||
% (etudid, formsemestre_id, sco_groups.make_query_groups(group_ids))
|
||||
)
|
||||
return "\n".join(H) + F
|
||||
@ -332,7 +332,7 @@ def formsemestre_inscription_option(context, etudid, formsemestre_id, REQUEST=No
|
||||
sem_origin = sco_formsemestre.get_formsemestre(
|
||||
context, ue_status["formsemestre_id"]
|
||||
)
|
||||
ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (
|
||||
ue_descr += ' <a class="discretelink" href="formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="%s">(capitalisée le %s)' % (
|
||||
sem_origin["formsemestre_id"],
|
||||
etudid,
|
||||
sem_origin["titreannee"],
|
||||
|
@ -154,7 +154,7 @@ def formsemestre_status_menubar(context, sem, REQUEST):
|
||||
},
|
||||
{
|
||||
"title": "Modifier le semestre",
|
||||
"url": "formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s"
|
||||
"url": "formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s"
|
||||
% sem,
|
||||
"enabled": (
|
||||
authuser.has_permission(ScoImplement, context)
|
||||
@ -292,7 +292,7 @@ def formsemestre_status_menubar(context, sem, REQUEST):
|
||||
},
|
||||
{
|
||||
"title": "Exporter table des étudiants",
|
||||
"url": "groups_view?format=allxls&group_ids="
|
||||
"url": "groups_view?format=allxls&group_ids="
|
||||
+ sco_groups.get_default_group(
|
||||
context, formsemestre_id, fix_if_missing=True, REQUEST=REQUEST
|
||||
),
|
||||
@ -388,7 +388,7 @@ def formsemestre_status_menubar(context, sem, REQUEST):
|
||||
},
|
||||
{
|
||||
"title": "Saisie des décisions du jury",
|
||||
"url": "formsemestre_recapcomplet?modejury=1&hidemodules=1&hidebac=1&pref_override=0&formsemestre_id="
|
||||
"url": "formsemestre_recapcomplet?modejury=1&hidemodules=1&hidebac=1&pref_override=0&formsemestre_id="
|
||||
+ formsemestre_id,
|
||||
"enabled": context._can_validate_sem(REQUEST, formsemestre_id),
|
||||
},
|
||||
@ -684,7 +684,7 @@ def formsemestre_description_table(
|
||||
caption=title,
|
||||
html_caption=title,
|
||||
html_class="table_leftalign formsemestre_description",
|
||||
base_url="%s?formsemestre_id=%s&with_evals=%s"
|
||||
base_url="%s?formsemestre_id=%s&with_evals=%s"
|
||||
% (REQUEST.URL0, formsemestre_id, with_evals),
|
||||
page_title=title,
|
||||
html_title=context.html_sem_header(
|
||||
@ -917,7 +917,7 @@ def formsemestre_status(context, formsemestre_id=None, REQUEST=None):
|
||||
|
||||
if can_edit:
|
||||
H.append(
|
||||
' <a href="edit_ue_expr?formsemestre_id=%s&ue_id=%s">'
|
||||
' <a href="edit_ue_expr?formsemestre_id=%s&ue_id=%s">'
|
||||
% (formsemestre_id, ue["ue_id"])
|
||||
)
|
||||
H.append(
|
||||
|
@ -109,13 +109,13 @@ def formsemestre_validation_etud_form(
|
||||
if etud_index_prev != None:
|
||||
etud_p = context.getEtudInfo(etudid=T[etud_index_prev][-1], filled=True)[0]
|
||||
Footer.append(
|
||||
'<span><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. précédent (%s)</a></span>'
|
||||
'<span><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. précédent (%s)</a></span>'
|
||||
% (formsemestre_id, etud_index_prev, etud_p["nomprenom"])
|
||||
)
|
||||
if etud_index_next != None:
|
||||
etud_n = context.getEtudInfo(etudid=T[etud_index_next][-1], filled=True)[0]
|
||||
Footer.append(
|
||||
'<span style="padding-left: 50px;"><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. suivant (%s)</a></span>'
|
||||
'<span style="padding-left: 50px;"><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etud_index=%s">Etud. suivant (%s)</a></span>'
|
||||
% (formsemestre_id, etud_index_next, etud_n["nomprenom"])
|
||||
)
|
||||
Footer.append("</p>")
|
||||
@ -171,12 +171,12 @@ def formsemestre_validation_etud_form(
|
||||
if check:
|
||||
if not desturl:
|
||||
desturl = (
|
||||
"formsemestre_recapcomplet?modejury=1&hidemodules=1&hidebac=1&pref_override=0&formsemestre_id="
|
||||
"formsemestre_recapcomplet?modejury=1&hidemodules=1&hidebac=1&pref_override=0&formsemestre_id="
|
||||
+ formsemestre_id
|
||||
)
|
||||
if sortcol:
|
||||
desturl += (
|
||||
"&sortcol=" + sortcol
|
||||
"&sortcol=" + sortcol
|
||||
) # pour refaire tri sorttable du tableau de notes
|
||||
desturl += "#etudid%s" % etudid # va a la bonne ligne
|
||||
H.append('<ul><li><a href="%s">Continuer</a></li></ul>' % desturl)
|
||||
@ -205,13 +205,13 @@ def formsemestre_validation_etud_form(
|
||||
if not Se.prev_decision:
|
||||
H.append(
|
||||
tf_error_message(
|
||||
"""Le jury n\'a pas statué sur le semestre précédent ! (<a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">le faire maintenant</a>)"""
|
||||
"""Le jury n\'a pas statué sur le semestre précédent ! (<a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">le faire maintenant</a>)"""
|
||||
% (Se.prev["formsemestre_id"], etudid)
|
||||
)
|
||||
)
|
||||
if decision_jury:
|
||||
H.append(
|
||||
'<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a>'
|
||||
'<a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a>'
|
||||
% (etudid, formsemestre_id)
|
||||
)
|
||||
H.append(context.sco_footer(REQUEST))
|
||||
@ -249,7 +249,7 @@ def formsemestre_validation_etud_form(
|
||||
<input type="submit" value="Statuer sur le semestre précédent"/>
|
||||
<input type="hidden" name="formsemestre_id" value="%s"/>
|
||||
<input type="hidden" name="etudid" value="%s"/>
|
||||
<input type="hidden" name="desturl" value="formsemestre_validation_etud_form?etudid=%s&formsemestre_id=%s"/>
|
||||
<input type="hidden" name="desturl" value="formsemestre_validation_etud_form?etudid=%s&formsemestre_id=%s"/>
|
||||
"""
|
||||
% (Se.prev["formsemestre_id"], etudid, etudid, formsemestre_id)
|
||||
)
|
||||
@ -309,7 +309,7 @@ def formsemestre_validation_etud_form(
|
||||
H.append(form_decision_manuelle(context, Se, formsemestre_id, etudid))
|
||||
|
||||
H.append(
|
||||
"""<div class="link_defaillance">Ou <a class="stdlink" href="formDef?etudid=%s&formsemestre_id=%s">déclarer l'étudiant comme défaillant dans ce semestre</a></div>"""
|
||||
"""<div class="link_defaillance">Ou <a class="stdlink" href="formDef?etudid=%s&formsemestre_id=%s">déclarer l'étudiant comme défaillant dans ce semestre</a></div>"""
|
||||
% (etudid, formsemestre_id)
|
||||
)
|
||||
|
||||
@ -402,23 +402,23 @@ 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_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1"
|
||||
% (formsemestre_id, etudid)
|
||||
)
|
||||
if sortcol:
|
||||
adr += "&sortcol=" + sortcol
|
||||
adr += "&sortcol=" + sortcol
|
||||
# if desturl:
|
||||
# desturl += "&desturl=" + desturl
|
||||
# desturl += "&desturl=" + desturl
|
||||
return REQUEST.RESPONSE.redirect(adr)
|
||||
# Si le precedent a été modifié, demande relecture du parcours.
|
||||
# sinon renvoie au listing general,
|
||||
|
||||
|
||||
# if choice.new_code_prev:
|
||||
# REQUEST.RESPONSE.redirect( 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1&desturl=%s' % (formsemestre_id, etudid, desturl) )
|
||||
# REQUEST.RESPONSE.redirect( 'formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1&desturl=%s' % (formsemestre_id, etudid, desturl) )
|
||||
# else:
|
||||
# if not desturl:
|
||||
# desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id
|
||||
# desturl = 'formsemestre_recapcomplet?modejury=1&hidemodules=1&formsemestre_id=' + formsemestre_id
|
||||
# REQUEST.RESPONSE.redirect(desturl)
|
||||
|
||||
|
||||
@ -555,7 +555,7 @@ def formsemestre_recap_parcours_table(
|
||||
)
|
||||
H.append('<td class="datedebut">%(mois_debut)s</td>' % sem)
|
||||
H.append(
|
||||
'<td class="rcp_titre_sem"><a class="formsemestre_status_link" href="%sformsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="Bulletin de notes">%s</a></td>'
|
||||
'<td class="rcp_titre_sem"><a class="formsemestre_status_link" href="%sformsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" title="Bulletin de notes">%s</a></td>'
|
||||
% (a_url, sem["formsemestre_id"], etudid, sem["titreannee"])
|
||||
)
|
||||
if decision_sem:
|
||||
@ -649,7 +649,7 @@ def formsemestre_recap_parcours_table(
|
||||
H.append("<td></td>")
|
||||
if with_links:
|
||||
H.append(
|
||||
'<td><a href="%sformsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">modifier</a></td>'
|
||||
'<td><a href="%sformsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">modifier</a></td>'
|
||||
% (a_url, sem["formsemestre_id"], etudid)
|
||||
)
|
||||
|
||||
@ -809,7 +809,7 @@ def form_decision_manuelle(
|
||||
H.append(
|
||||
"""</table>
|
||||
<input type="submit" name="formvalidmanu_submit" value="Valider décision manuelle"/>
|
||||
<span style="padding-left: 5em;"><a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a></span>
|
||||
<span style="padding-left: 5em;"><a href="formsemestre_validation_suppress_etud?etudid=%s&formsemestre_id=%s" class="stdlink">Supprimer décision existante</a></span>
|
||||
</form>
|
||||
"""
|
||||
% (etudid, formsemestre_id)
|
||||
@ -928,12 +928,12 @@ def do_formsemestre_validation_auto(context, formsemestre_id, REQUEST):
|
||||
)
|
||||
for etud in conflicts:
|
||||
H.append(
|
||||
'<li><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1">%s</li>'
|
||||
'<li><a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s&check=1">%s</li>'
|
||||
% (formsemestre_id, etud["etudid"], etud["nomprenom"])
|
||||
)
|
||||
H.append("</ul>")
|
||||
H.append(
|
||||
'<a href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1&hidebac=1&pref_override=0">continuer</a>'
|
||||
'<a href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1&hidebac=1&pref_override=0">continuer</a>'
|
||||
% formsemestre_id
|
||||
)
|
||||
H.append(context.sco_footer(REQUEST))
|
||||
@ -1184,7 +1184,7 @@ def formsemestre_validate_previous_ue(context, formsemestre_id, etudid, REQUEST=
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
context.ScoURL()
|
||||
+ "/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree"
|
||||
+ "/Notes/formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s&head_message=Validation%%20d'UE%%20enregistree"
|
||||
% (formsemestre_id, etudid)
|
||||
)
|
||||
|
||||
@ -1289,7 +1289,7 @@ def get_etud_ue_cap_html(context, etudid, formsemestre_id, ue_id, REQUEST=None):
|
||||
valid["s"] += " (<b>S%d</b>)" % valid["semestre_id"]
|
||||
valid["ds"] = formsemestre_id
|
||||
H.append(
|
||||
'<li>%(code)s%(m)s%(s)s, le %(event_date)s <a class="stdlink" href="etud_ue_suppress_validation?etudid=%(etudid)s&ue_id=%(ue_id)s&formsemestre_id=%(ds)s" title="supprime cette validation">effacer</a></li>'
|
||||
'<li>%(code)s%(m)s%(s)s, le %(event_date)s <a class="stdlink" href="etud_ue_suppress_validation?etudid=%(etudid)s&ue_id=%(ue_id)s&formsemestre_id=%(ds)s" title="supprime cette validation">effacer</a></li>'
|
||||
% valid
|
||||
)
|
||||
H.append("</ul></div>")
|
||||
@ -1311,7 +1311,7 @@ def etud_ue_suppress_validation(context, etudid, formsemestre_id, ue_id, REQUEST
|
||||
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
context.NotesURL()
|
||||
+ "/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
||||
+ "/formsemestre_validate_previous_ue?etudid=%s&formsemestre_id=%s"
|
||||
% (etudid, formsemestre_id)
|
||||
)
|
||||
|
||||
|
@ -847,13 +847,13 @@ def editPartitionForm(context, formsemestre_id=None, REQUEST=None):
|
||||
)
|
||||
if i != 0:
|
||||
H.append(
|
||||
'<a href="partition_move?partition_id=%s&after=0">%s</a>'
|
||||
'<a href="partition_move?partition_id=%s&after=0">%s</a>'
|
||||
% (p["partition_id"], arrow_up)
|
||||
)
|
||||
H.append('</td><td class="epnav">')
|
||||
if i < len(partitions) - 2:
|
||||
H.append(
|
||||
'<a href="partition_move?partition_id=%s&after=1">%s</a>'
|
||||
'<a href="partition_move?partition_id=%s&after=1">%s</a>'
|
||||
% (p["partition_id"], arrow_down)
|
||||
)
|
||||
i += 1
|
||||
@ -1494,7 +1494,7 @@ def form_group_choice(
|
||||
|
||||
def make_query_groups(group_ids):
|
||||
if group_ids:
|
||||
return "&".join(["group_ids%3Alist=" + group_id for group_id in group_ids])
|
||||
return "&".join(["group_ids%3Alist=" + group_id for group_id in group_ids])
|
||||
else:
|
||||
return ""
|
||||
|
||||
|
@ -343,7 +343,7 @@ class DisplayedGroupsInfos:
|
||||
gq = []
|
||||
for group_id in group_ids:
|
||||
gq.append("group_ids=" + group_id)
|
||||
self.groups_query_args = "&".join(gq)
|
||||
self.groups_query_args = "&".join(gq)
|
||||
self.base_url = REQUEST.URL0 + "?" + self.groups_query_args
|
||||
self.group_ids = group_ids
|
||||
self.groups = []
|
||||
@ -457,10 +457,10 @@ def groups_table(
|
||||
with_archives = int(with_archives)
|
||||
with_annotations = int(with_annotations)
|
||||
|
||||
base_url_np = groups_infos.base_url + "&with_codes=%s" % with_codes
|
||||
base_url_np = groups_infos.base_url + "&with_codes=%s" % with_codes
|
||||
base_url = (
|
||||
base_url_np
|
||||
+ "&with_paiement=%s&with_archives=%s&with_annotations=%s"
|
||||
+ "&with_paiement=%s&with_archives=%s&with_annotations=%s"
|
||||
% (with_paiement, with_archives, with_annotations)
|
||||
)
|
||||
#
|
||||
@ -668,11 +668,11 @@ def groups_table(
|
||||
[
|
||||
tab.html(),
|
||||
"<ul>",
|
||||
'<li><a class="stdlink" href="%s&format=xlsappel">Feuille d\'appel Excel</a></li>'
|
||||
'<li><a class="stdlink" href="%s&format=xlsappel">Feuille d\'appel Excel</a></li>'
|
||||
% (tab.base_url,),
|
||||
'<li><a class="stdlink" href="%s&format=xls">Table Excel</a></li>'
|
||||
'<li><a class="stdlink" href="%s&format=xls">Table Excel</a></li>'
|
||||
% (tab.base_url,),
|
||||
'<li><a class="stdlink" href="%s&format=moodlecsv">Fichier CSV pour Moodle (groupe sélectionné)</a></li>'
|
||||
'<li><a class="stdlink" href="%s&format=moodlecsv">Fichier CSV pour Moodle (groupe sélectionné)</a></li>'
|
||||
% (tab.base_url,),
|
||||
"""<li>
|
||||
<a class="stdlink" href="export_groups_as_moodle_csv?formsemestre_id=%s">Fichier CSV pour Moodle (tous les groupes)</a>
|
||||
@ -824,7 +824,7 @@ def tab_absences_html(context, groups_infos, etat=None, REQUEST=None):
|
||||
"<li>",
|
||||
form_choix_jour_saisie_hebdo(context, groups_infos, REQUEST=REQUEST),
|
||||
"</li>",
|
||||
"""<li><a class="stdlink" href="Absences/EtatAbsencesGr?%s&debut=%s&fin=%s">Etat des absences du groupe</a></li>"""
|
||||
"""<li><a class="stdlink" href="Absences/EtatAbsencesGr?%s&debut=%s&fin=%s">Etat des absences du groupe</a></li>"""
|
||||
% (
|
||||
groups_infos.groups_query_args,
|
||||
groups_infos.formsemestre["date_debut"],
|
||||
@ -833,15 +833,15 @@ def tab_absences_html(context, groups_infos, etat=None, REQUEST=None):
|
||||
"</ul>",
|
||||
"<h3>Feuilles</h3>",
|
||||
'<ul class="ul_feuilles">',
|
||||
"""<li><a class="stdlink" href="%s&format=xlsappel">Feuille d'émargement %s (Excel)</a></li>"""
|
||||
"""<li><a class="stdlink" href="%s&format=xlsappel">Feuille d'émargement %s (Excel)</a></li>"""
|
||||
% (groups_infos.base_url, groups_infos.groups_titles),
|
||||
"""<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>"""
|
||||
"""<li><a class="stdlink" href="trombino?%s&format=pdf">Trombinoscope en PDF</a></li>"""
|
||||
% groups_infos.groups_query_args,
|
||||
"""<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours", beta)</a></li>"""
|
||||
"""<li><a class="stdlink" href="pdf_trombino_tours?%s&format=pdf">Trombinoscope en PDF (format "IUT de Tours", beta)</a></li>"""
|
||||
% groups_infos.groups_query_args,
|
||||
"""<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>"""
|
||||
"""<li><a class="stdlink" href="pdf_feuille_releve_absences?%s&format=pdf">Feuille relevé absences hebdomadaire (beta)</a></li>"""
|
||||
% groups_infos.groups_query_args,
|
||||
"""<li><a class="stdlink" href="trombino?%s&format=pdflist">Liste d'appel avec photos</a></li>"""
|
||||
"""<li><a class="stdlink" href="trombino?%s&format=pdflist">Liste d'appel avec photos</a></li>"""
|
||||
% groups_infos.groups_query_args,
|
||||
"</ul>",
|
||||
]
|
||||
@ -853,7 +853,7 @@ def tab_absences_html(context, groups_infos, etat=None, REQUEST=None):
|
||||
group_id = sco_groups.get_default_group(context, groups_infos.formsemestre_id)
|
||||
if authuser.has_permission(ScoEtudInscrit, context):
|
||||
H.append(
|
||||
'<li><a class="stdlink" href="check_group_apogee?group_id=%s&etat=%s">Vérifier codes Apogée</a> (de tous les groupes)</li>'
|
||||
'<li><a class="stdlink" href="check_group_apogee?group_id=%s&etat=%s">Vérifier codes Apogée</a> (de tous les groupes)</li>'
|
||||
% (group_id, etat or "")
|
||||
)
|
||||
# Lien pour ajout fichiers étudiants
|
||||
|
@ -552,7 +552,7 @@ def etuds_select_boxes(
|
||||
H.append(")")
|
||||
if base_url and etuds:
|
||||
H.append(
|
||||
'<a href="%s&export_cat_xls=%s">%s</a> '
|
||||
'<a href="%s&export_cat_xls=%s">%s</a> '
|
||||
% (base_url, src_cat, scu.ICON_XLS)
|
||||
)
|
||||
H.append("</div>")
|
||||
|
@ -314,7 +314,7 @@ def _make_table_notes(
|
||||
"_code_td_attrs": 'style="padding-left: 1em; padding-right: 2em;"',
|
||||
"etudid": etudid,
|
||||
"nom": scu.strupper(etud["nom"]),
|
||||
"_nomprenom_target": "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s"
|
||||
"_nomprenom_target": "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s"
|
||||
% (M["formsemestre_id"], etudid),
|
||||
"_nomprenom_td_attrs": 'id="%s" class="etudinfo"' % (etud["etudid"]),
|
||||
"prenom": scu.strcapitalize(scu.strlower(etud["prenom"])),
|
||||
@ -420,15 +420,15 @@ def _make_table_notes(
|
||||
columns_ids.append("comment")
|
||||
|
||||
# titres divers:
|
||||
gl = "".join(["&group_ids%3Alist=" + g for g in group_ids])
|
||||
gl = "".join(["&group_ids%3Alist=" + g for g in group_ids])
|
||||
if note_sur_20:
|
||||
gl = "&note_sur_20%3Alist=yes" + gl
|
||||
gl = "¬e_sur_20%3Alist=yes" + gl
|
||||
if anonymous_listing:
|
||||
gl = "&anonymous_listing%3Alist=yes" + gl
|
||||
gl = "&anonymous_listing%3Alist=yes" + gl
|
||||
if hide_groups:
|
||||
gl = "&hide_groups%3Alist=yes" + gl
|
||||
gl = "&hide_groups%3Alist=yes" + gl
|
||||
if with_emails:
|
||||
gl = "&with_emails%3Alist=yes" + gl
|
||||
gl = "&with_emails%3Alist=yes" + gl
|
||||
if len(evals) == 1:
|
||||
evalname = "%s-%s" % (Mod["code"], ndb.DateDMYtoISO(E["jour"]))
|
||||
hh = "%s, %s (%d étudiants)" % (E["description"], gr_title, len(etudids))
|
||||
@ -808,7 +808,7 @@ def evaluation_check_absences_html(
|
||||
)
|
||||
if linkabs:
|
||||
H.append(
|
||||
'<a class="stdlink" href="Absences/doSignaleAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s&moduleimpl_id=%s">signaler cette absence</a>'
|
||||
'<a class="stdlink" href="Absences/doSignaleAbsence?etudid=%s&datedebut=%s&datefin=%s&demijournee=%s&moduleimpl_id=%s">signaler cette absence</a>'
|
||||
% (
|
||||
etud["etudid"],
|
||||
urllib.quote(E["jour"]),
|
||||
|
@ -182,9 +182,9 @@ def formsemestre_etuds_lycees(
|
||||
)
|
||||
tab.base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id)
|
||||
if only_primo:
|
||||
tab.base_url += "&only_primo=1"
|
||||
tab.base_url += "&only_primo=1"
|
||||
if no_grouping:
|
||||
tab.base_url += "&no_grouping=1"
|
||||
tab.base_url += "&no_grouping=1"
|
||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||
if format != "html":
|
||||
return t
|
||||
|
@ -367,14 +367,14 @@ def moduleimpl_inscriptions_stats(context, formsemestre_id, REQUEST=None):
|
||||
)
|
||||
if can_change:
|
||||
H.append(
|
||||
'<div><a class="stdlink" href="etud_desinscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">désinscrire des modules de cette UE</a></div>'
|
||||
'<div><a class="stdlink" href="etud_desinscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">désinscrire des modules de cette UE</a></div>'
|
||||
% (etud["etudid"], formsemestre_id, ue["ue_id"])
|
||||
)
|
||||
else:
|
||||
H.append("(non réinscrit dans cette UE)")
|
||||
if can_change:
|
||||
H.append(
|
||||
'<div><a class="stdlink" href="etud_inscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">inscrire à tous les modules de cette UE</a></div>'
|
||||
'<div><a class="stdlink" href="etud_inscrit_ue?etudid=%s&formsemestre_id=%s&ue_id=%s">inscrire à tous les modules de cette UE</a></div>'
|
||||
% (etud["etudid"], formsemestre_id, ue["ue_id"])
|
||||
)
|
||||
H.append("</li>")
|
||||
|
@ -122,7 +122,7 @@ def moduleimpl_evaluation_menu(context, evaluation_id, nbnotes=0, REQUEST=None):
|
||||
},
|
||||
{
|
||||
"title": "Absences ce jour",
|
||||
"url": "Absences/EtatAbsencesDate?date=%s&group_ids=%s"
|
||||
"url": "Absences/EtatAbsencesDate?date=%s&group_ids=%s"
|
||||
% (urllib.quote(E["jour"], safe=""), group_id),
|
||||
"enabled": E["jour"],
|
||||
},
|
||||
@ -322,7 +322,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
if sem["etat"] == "1": # non verrouillé
|
||||
top_table_links = (
|
||||
"""<a class="stdlink" 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>
|
||||
<a class="stdlink" style="margin-left:2em;" href="module_evaluation_renumber?moduleimpl_id=%(moduleimpl_id)s&redirect=1">Trier par date</a>
|
||||
"""
|
||||
% M
|
||||
)
|
||||
@ -384,14 +384,14 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
H.append('<span class="eval_arrows_chld">')
|
||||
if eval_index != (len(ModEvals) - 1) and caneditevals:
|
||||
H.append(
|
||||
'<a href="module_evaluation_move?evaluation_id=%s&after=0" class="aud">%s</a>'
|
||||
'<a href="module_evaluation_move?evaluation_id=%s&after=0" class="aud">%s</a>'
|
||||
% (eval["evaluation_id"], arrow_up)
|
||||
)
|
||||
else:
|
||||
H.append(arrow_none)
|
||||
if (eval_index > 0) and caneditevals:
|
||||
H.append(
|
||||
'<a href="module_evaluation_move?evaluation_id=%s&after=1" class="aud">%s</a>'
|
||||
'<a href="module_evaluation_move?evaluation_id=%s&after=1" class="aud">%s</a>'
|
||||
% (eval["evaluation_id"], arrow_down)
|
||||
)
|
||||
else:
|
||||
@ -546,7 +546,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
if gr_moyenne["gr_nb_notes"] > 0:
|
||||
H.append("%(gr_moy)s" % gr_moyenne)
|
||||
H.append(
|
||||
""" (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s notes</a>"""
|
||||
""" (<a href="evaluation_listenotes?tf-submitted=1&evaluation_id=%s&group_ids%%3Alist=%s">%s notes</a>"""
|
||||
% (
|
||||
eval["evaluation_id"],
|
||||
gr_moyenne["group_id"],
|
||||
@ -563,7 +563,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
H.append("""[<font color="red">""")
|
||||
if caneditnotes:
|
||||
H.append(
|
||||
"""<a class="redlink" href="saisie_notes?evaluation_id=%s&group_ids:list=%s">incomplet</a></font>]"""
|
||||
"""<a class="redlink" href="saisie_notes?evaluation_id=%s&group_ids:list=%s">incomplet</a></font>]"""
|
||||
% (eval["evaluation_id"], gr_moyenne["group_id"])
|
||||
)
|
||||
else:
|
||||
@ -572,7 +572,7 @@ def moduleimpl_status(context, moduleimpl_id=None, partition_id=None, REQUEST=No
|
||||
H.append("""<span class="redboldtext"> """)
|
||||
if caneditnotes:
|
||||
H.append(
|
||||
"""<a class="redlink" href="saisie_notes?evaluation_id=%s&group_ids:list=%s">"""
|
||||
"""<a class="redlink" href="saisie_notes?evaluation_id=%s&group_ids:list=%s">"""
|
||||
% (eval["evaluation_id"], gr_moyenne["group_id"])
|
||||
)
|
||||
H.append("pas de notes")
|
||||
|
@ -75,12 +75,12 @@ def _menuScolarite(context, authuser, sem, etudid):
|
||||
if ins["etat"] != "D":
|
||||
dem_title = "Démission"
|
||||
dem_url = (
|
||||
"formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
|
||||
"formDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
|
||||
)
|
||||
else:
|
||||
dem_title = "Annuler la démission"
|
||||
dem_url = (
|
||||
"doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
"doCancelDem?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
% args
|
||||
)
|
||||
|
||||
@ -88,12 +88,12 @@ def _menuScolarite(context, authuser, sem, etudid):
|
||||
if ins["etat"] != sco_codes_parcours.DEF:
|
||||
def_title = "Déclarer défaillance"
|
||||
def_url = (
|
||||
"formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
|
||||
"formDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s" % args
|
||||
)
|
||||
elif ins["etat"] == sco_codes_parcours.DEF:
|
||||
def_title = "Annuler la défaillance"
|
||||
def_url = (
|
||||
"doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
"doCancelDef?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
% args
|
||||
)
|
||||
def_enabled = (
|
||||
@ -103,7 +103,7 @@ def _menuScolarite(context, authuser, sem, etudid):
|
||||
)
|
||||
items = [
|
||||
# { 'title' : 'Changer de groupe',
|
||||
# 'url' : 'formChangeGroup?etudid=%s&formsemestre_id=%s' % (etudid,ins['formsemestre_id']),
|
||||
# 'url' : 'formChangeGroup?etudid=%s&formsemestre_id=%s' % (etudid,ins['formsemestre_id']),
|
||||
# 'enabled' : authuser.has_permission(ScoEtudChangeGroups,context) and not locked,
|
||||
# },
|
||||
{
|
||||
@ -113,20 +113,20 @@ def _menuScolarite(context, authuser, sem, etudid):
|
||||
},
|
||||
{
|
||||
"title": "Validation du semestre (jury)",
|
||||
"url": "Notes/formsemestre_validation_etud_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
"url": "Notes/formsemestre_validation_etud_form?etudid=%(etudid)s&formsemestre_id=%(formsemestre_id)s"
|
||||
% args,
|
||||
"enabled": authuser.has_permission(ScoEtudInscrit, context) and not locked,
|
||||
},
|
||||
{"title": def_title, "url": def_url, "enabled": def_enabled},
|
||||
{
|
||||
"title": "Inscrire à un module optionnel (ou au sport)",
|
||||
"url": "Notes/formsemestre_inscription_option?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
"url": "Notes/formsemestre_inscription_option?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
% args,
|
||||
"enabled": authuser.has_permission(ScoEtudInscrit, context) and not locked,
|
||||
},
|
||||
{
|
||||
"title": "Désinscrire (en cas d'erreur)",
|
||||
"url": "Notes/formsemestre_desinscription?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
"url": "Notes/formsemestre_desinscription?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
% args,
|
||||
"enabled": authuser.has_permission(ScoEtudInscrit, context) and not locked,
|
||||
},
|
||||
@ -138,7 +138,7 @@ def _menuScolarite(context, authuser, sem, etudid):
|
||||
},
|
||||
{
|
||||
"title": "Enregistrer un semestre effectué ailleurs",
|
||||
"url": "Notes/formsemestre_ext_create_form?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
"url": "Notes/formsemestre_ext_create_form?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s"
|
||||
% args,
|
||||
"enabled": authuser.has_permission(ScoImplement, context),
|
||||
},
|
||||
@ -290,7 +290,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
||||
else:
|
||||
a[
|
||||
"dellink"
|
||||
] = '<td class="annodel"><a href="doSuppressAnnotation?etudid=%s&annotation_id=%s">%s</a></td>' % (
|
||||
] = '<td class="annodel"><a href="doSuppressAnnotation?etudid=%s&annotation_id=%s">%s</a></td>' % (
|
||||
etudid,
|
||||
a["id"],
|
||||
scu.icontag(
|
||||
@ -394,7 +394,7 @@ def ficheEtud(context, etudid=None, REQUEST=None):
|
||||
# Inscriptions
|
||||
if info["sems"]: # XXX rcl unused ? à voir
|
||||
rcl = (
|
||||
"""(<a href="%(ScoURL)s/Notes/formsemestre_validation_etud_form?check=1&etudid=%(etudid)s&formsemestre_id=%(last_formsemestre_id)s&desturl=ficheEtud?etudid=%(etudid)s">récapitulatif parcours</a>)"""
|
||||
"""(<a href="%(ScoURL)s/Notes/formsemestre_validation_etud_form?check=1&etudid=%(etudid)s&formsemestre_id=%(last_formsemestre_id)s&desturl=ficheEtud?etudid=%(etudid)s">récapitulatif parcours</a>)"""
|
||||
% info
|
||||
)
|
||||
else:
|
||||
|
@ -205,7 +205,7 @@ def do_placement_selectetuds(context, REQUEST):
|
||||
if columns in ("3", "4", "5", "6", "7", "8"):
|
||||
gs = [("group_ids%3Alist=" + urllib.quote_plus(x)) for x in group_ids]
|
||||
query = (
|
||||
"evaluation_id=%s&placement_method=%s&teachers=%s&building=%s&room=%s&columns=%s&numbering=%s&"
|
||||
"evaluation_id=%s&placement_method=%s&teachers=%s&building=%s&room=%s&columns=%s&numbering=%s&"
|
||||
% (
|
||||
evaluation_id,
|
||||
placement_method,
|
||||
@ -215,7 +215,7 @@ def do_placement_selectetuds(context, REQUEST):
|
||||
columns,
|
||||
numbering,
|
||||
)
|
||||
+ "&".join(gs)
|
||||
+ "&".join(gs)
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
context.NotesURL() + "/do_placement?" + query
|
||||
|
@ -867,7 +867,7 @@ def formsemestre_lettres_individuelles(
|
||||
PDFLOCK.release()
|
||||
if not pdfdoc:
|
||||
return REQUEST.RESPONSE.redirect(
|
||||
"formsemestre_status?formsemestre_id={}&head_message=Aucun%20%C3%A9tudiant%20n%27a%20de%20d%C3%A9cision%20de%20jury".format(
|
||||
"formsemestre_status?formsemestre_id={}&head_message=Aucun%20%C3%A9tudiant%20n%27a%20de%20d%C3%A9cision%20de%20jury".format(
|
||||
formsemestre_id
|
||||
)
|
||||
)
|
||||
|
@ -173,7 +173,7 @@ def formsemestre_recapcomplet(
|
||||
)
|
||||
else:
|
||||
H.append(
|
||||
"""<a class="stdlink" href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">Saisie des décisions du jury</a>"""
|
||||
"""<a class="stdlink" href="formsemestre_recapcomplet?formsemestre_id=%s&modejury=1&hidemodules=1">Saisie des décisions du jury</a>"""
|
||||
% formsemestre_id
|
||||
)
|
||||
H.append("</p>")
|
||||
@ -556,9 +556,9 @@ def make_formsemestre_recapcomplet(
|
||||
"""
|
||||
<script type="text/javascript">
|
||||
function va_saisir(formsemestre_id, etudid) {
|
||||
loc = 'formsemestre_validation_etud_form?formsemestre_id='+formsemestre_id+'&etudid='+etudid;
|
||||
loc = 'formsemestre_validation_etud_form?formsemestre_id='+formsemestre_id+'&etudid='+etudid;
|
||||
if (SORT_COLUMN_INDEX) {
|
||||
loc += '&sortcol=' + SORT_COLUMN_INDEX;
|
||||
loc += '&sortcol=' + SORT_COLUMN_INDEX;
|
||||
}
|
||||
loc += '#etudid' + etudid;
|
||||
document.location=loc;
|
||||
@ -620,7 +620,7 @@ def make_formsemestre_recapcomplet(
|
||||
if disable_etudlink:
|
||||
etudlink = "%(name)s"
|
||||
else:
|
||||
etudlink = '<a href="formsemestre_bulletinetud?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s&version=selectedevals" id="%(etudid)s" class="etudinfo">%(name)s</a>'
|
||||
etudlink = '<a href="formsemestre_bulletinetud?formsemestre_id=%(formsemestre_id)s&etudid=%(etudid)s&version=selectedevals" id="%(etudid)s" class="etudinfo">%(name)s</a>'
|
||||
ir = 0
|
||||
nblines = len(F) - 1
|
||||
for l in F[1:]:
|
||||
@ -716,7 +716,7 @@ def make_formsemestre_recapcomplet(
|
||||
act = "saisir"
|
||||
cells += '<td class="decision">%s' % code
|
||||
if act:
|
||||
# cells += ' <a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">%s</a>' % (formsemestre_id, etudid, act)
|
||||
# cells += ' <a href="formsemestre_validation_etud_form?formsemestre_id=%s&etudid=%s">%s</a>' % (formsemestre_id, etudid, act)
|
||||
cells += (
|
||||
""" <a href="#" onclick="va_saisir('%s', '%s')">%s</a>"""
|
||||
% (formsemestre_id, etudid, act)
|
||||
|
@ -228,7 +228,7 @@ def formsemestre_report(
|
||||
tab.html_caption = "Répartition des résultats par %s." % category_name
|
||||
tab.base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id)
|
||||
if only_primo:
|
||||
tab.base_url += "&only_primo=on"
|
||||
tab.base_url += "&only_primo=on"
|
||||
return tab
|
||||
|
||||
|
||||
@ -698,27 +698,27 @@ def formsemestre_suivi_cohorte(
|
||||
only_primo=only_primo,
|
||||
)
|
||||
tab.base_url = (
|
||||
"%s?formsemestre_id=%s&percent=%s&bac=%s&bacspecialite=%s&civilite=%s"
|
||||
"%s?formsemestre_id=%s&percent=%s&bac=%s&bacspecialite=%s&civilite=%s"
|
||||
% (REQUEST.URL0, formsemestre_id, percent, bac, bacspecialite, civilite)
|
||||
)
|
||||
if only_primo:
|
||||
tab.base_url += "&only_primo=on"
|
||||
tab.base_url += "&only_primo=on"
|
||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||
if format != "html":
|
||||
return t
|
||||
|
||||
base_url = REQUEST.URL0
|
||||
burl = (
|
||||
"%s?formsemestre_id=%s&bac=%s&bacspecialite=%s&civilite=%s&statut=%s"
|
||||
"%s?formsemestre_id=%s&bac=%s&bacspecialite=%s&civilite=%s&statut=%s"
|
||||
% (base_url, formsemestre_id, bac, bacspecialite, civilite, statut)
|
||||
)
|
||||
if percent:
|
||||
pplink = (
|
||||
'<p><a href="%s&percent=0">Afficher les résultats bruts</a></p>' % burl
|
||||
'<p><a href="%s&percent=0">Afficher les résultats bruts</a></p>' % burl
|
||||
)
|
||||
else:
|
||||
pplink = (
|
||||
'<p><a href="%s&percent=1">Afficher les résultats en pourcentages</a></p>'
|
||||
'<p><a href="%s&percent=1">Afficher les résultats en pourcentages</a></p>'
|
||||
% burl
|
||||
)
|
||||
help = (
|
||||
@ -1191,9 +1191,9 @@ def formsemestre_suivi_parcours(
|
||||
)
|
||||
tab.base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id)
|
||||
if only_primo:
|
||||
tab.base_url += "&only_primo=1"
|
||||
tab.base_url += "&only_primo=1"
|
||||
if no_grouping:
|
||||
tab.base_url += "&no_grouping=1"
|
||||
tab.base_url += "&no_grouping=1"
|
||||
t = tab.make_page(context, format=format, with_html_headers=False, REQUEST=REQUEST)
|
||||
if format != "html":
|
||||
return t
|
||||
@ -1503,11 +1503,11 @@ def formsemestre_graph_parcours(
|
||||
return doc
|
||||
elif format == "html":
|
||||
if only_primo:
|
||||
op = "only_primo=on&"
|
||||
op = "only_primo=on&"
|
||||
else:
|
||||
op = ""
|
||||
url = urllib.quote(
|
||||
"formsemestre_graph_parcours?formsemestre_id=%s&%sbac=%s&bacspecialite=%s&civilite=%s&statut=%s&format="
|
||||
"formsemestre_graph_parcours?formsemestre_id=%s&%sbac=%s&bacspecialite=%s&civilite=%s&statut=%s&format="
|
||||
% (formsemestre_id, op, bac, bacspecialite, civilite, statut)
|
||||
)
|
||||
(
|
||||
|
@ -101,7 +101,7 @@ def formsemestre_synchro_etuds(
|
||||
if not sem["etapes"]:
|
||||
raise ScoValueError(
|
||||
"""opération impossible: ce semestre n'a pas de code étape
|
||||
(voir "<a href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier ce semestre</a>")
|
||||
(voir "<a href="formsemestre_editwithmodules?formation_id=%(formation_id)s&formsemestre_id=%(formsemestre_id)s">Modifier ce semestre</a>")
|
||||
"""
|
||||
% sem
|
||||
)
|
||||
@ -109,7 +109,7 @@ def formsemestre_synchro_etuds(
|
||||
footer = context.sco_footer(REQUEST)
|
||||
base_url = "%s?formsemestre_id=%s" % (REQUEST.URL0, formsemestre_id)
|
||||
if anneeapogee:
|
||||
base_url += "&anneeapogee=%s" % anneeapogee
|
||||
base_url += "&anneeapogee=%s" % anneeapogee
|
||||
|
||||
if anneeapogee == None: # année d'inscription par défaut
|
||||
anneeapogee = str(
|
||||
@ -310,7 +310,7 @@ def build_page(
|
||||
"""
|
||||
% sem,
|
||||
"""
|
||||
Année Apogée: <select id="anneeapogee" name="anneeapogee" onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&anneeapogee='+document.getElementById('anneeapogee').value">"""
|
||||
Année Apogée: <select id="anneeapogee" name="anneeapogee" onchange="document.location='formsemestre_synchro_etuds?formsemestre_id=%s&anneeapogee='+document.getElementById('anneeapogee').value">"""
|
||||
% (sem["formsemestre_id"]),
|
||||
"\n".join(options),
|
||||
"""
|
||||
|
@ -109,7 +109,7 @@ def trombino_html(context, groups_infos, REQUEST=None):
|
||||
{"title": "Charger des photos...", "url": "photos_import_files_form?%s" % args},
|
||||
{
|
||||
"title": "Obtenir archive Zip des photos",
|
||||
"url": "trombino?%s&format=zip" % args,
|
||||
"url": "trombino?%s&format=zip" % args,
|
||||
},
|
||||
{
|
||||
"title": "Recopier les photos depuis le portail",
|
||||
@ -162,7 +162,7 @@ def trombino_html(context, groups_infos, REQUEST=None):
|
||||
|
||||
H.append("</div>")
|
||||
H.append(
|
||||
'<div style="margin-bottom:15px;"><a class="stdlink" href="trombino?format=pdf&%s">Version PDF</a></div>'
|
||||
'<div style="margin-bottom:15px;"><a class="stdlink" href="trombino?format=pdf&%s">Version PDF</a></div>'
|
||||
% args
|
||||
)
|
||||
return "\n".join(H)
|
||||
@ -190,11 +190,11 @@ def check_local_photos_availability(context, groups_infos, REQUEST, format=""):
|
||||
% (
|
||||
nb_missing,
|
||||
groups_infos.base_url
|
||||
+ "&dialog_confirmed=1&format=%s" % format,
|
||||
+ "&dialog_confirmed=1&format=%s" % format,
|
||||
),
|
||||
dest_url="trombino",
|
||||
OK="Exporter seulement les photos existantes",
|
||||
cancel_url="groups_view?curtab=tab-photos&"
|
||||
cancel_url="groups_view?curtab=tab-photos&"
|
||||
+ groups_infos.groups_query_args,
|
||||
REQUEST=REQUEST,
|
||||
parameters=parameters,
|
||||
@ -239,7 +239,7 @@ def trombino_copy_photos(context, group_ids=[], REQUEST=None, dialog_confirmed=F
|
||||
groups_infos = sco_groups_view.DisplayedGroupsInfos(
|
||||
context, group_ids, REQUEST=REQUEST
|
||||
)
|
||||
back_url = "groups_view?%s&curtab=tab-photos" % groups_infos.groups_query_args
|
||||
back_url = "groups_view?%s&curtab=tab-photos" % groups_infos.groups_query_args
|
||||
|
||||
portal_url = sco_portal_apogee.get_portal_url(context)
|
||||
header = context.sco_header(REQUEST, page_title="Chargement des photos")
|
||||
@ -486,7 +486,7 @@ def photos_import_files_form(context, group_ids=[], REQUEST=None):
|
||||
groups_infos = sco_groups_view.DisplayedGroupsInfos(
|
||||
context, group_ids, REQUEST=REQUEST
|
||||
)
|
||||
back_url = "groups_view?%s&curtab=tab-photos" % groups_infos.groups_query_args
|
||||
back_url = "groups_view?%s&curtab=tab-photos" % groups_infos.groups_query_args
|
||||
|
||||
H = [
|
||||
context.sco_header(REQUEST, page_title="Import des photos des étudiants"),
|
||||
@ -550,7 +550,7 @@ def photos_import_files(
|
||||
zip_excel_import_files(
|
||||
context, xlsfile, zipfile, REQUEST, callback, filename_title, page_title
|
||||
)
|
||||
return REQUEST.RESPONSE.redirect(back_url + "&head_message=photos%20 importees")
|
||||
return REQUEST.RESPONSE.redirect(back_url + "&head_message=photos%20 importees")
|
||||
|
||||
|
||||
def zip_excel_import_files(
|
||||
|
@ -320,7 +320,7 @@ def external_ue_create_form(context, formsemestre_id, etudid, REQUEST=None):
|
||||
cancelbutton="Annuler",
|
||||
)
|
||||
|
||||
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % (
|
||||
bull_url = "formsemestre_bulletinetud?formsemestre_id=%s&etudid=%s" % (
|
||||
formsemestre_id,
|
||||
etudid,
|
||||
)
|
||||
|
25
static/mobile/asset-manifest.json
Normal file
25
static/mobile/asset-manifest.json
Normal file
@ -0,0 +1,25 @@
|
||||
{
|
||||
"files": {
|
||||
"main.css": "./static/css/main.6be5a531.chunk.css",
|
||||
"main.js": "./static/js/main.1a008285.chunk.js",
|
||||
"main.js.map": "./static/js/main.1a008285.chunk.js.map",
|
||||
"runtime-main.js": "./static/js/runtime-main.f39ba660.js",
|
||||
"runtime-main.js.map": "./static/js/runtime-main.f39ba660.js.map",
|
||||
"static/css/2.4c97ca4f.chunk.css": "./static/css/2.4c97ca4f.chunk.css",
|
||||
"static/js/2.fb06b1f5.chunk.js": "./static/js/2.fb06b1f5.chunk.js",
|
||||
"static/js/2.fb06b1f5.chunk.js.map": "./static/js/2.fb06b1f5.chunk.js.map",
|
||||
"static/js/3.b810fcea.chunk.js": "./static/js/3.b810fcea.chunk.js",
|
||||
"static/js/3.b810fcea.chunk.js.map": "./static/js/3.b810fcea.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.fb06b1f5.chunk.js.LICENSE.txt": "./static/js/2.fb06b1f5.chunk.js.LICENSE.txt"
|
||||
},
|
||||
"entrypoints": [
|
||||
"static/js/runtime-main.f39ba660.js",
|
||||
"static/css/2.4c97ca4f.chunk.css",
|
||||
"static/js/2.fb06b1f5.chunk.js",
|
||||
"static/css/main.6be5a531.chunk.css",
|
||||
"static/js/main.1a008285.chunk.js"
|
||||
]
|
||||
}
|
BIN
static/mobile/favicon.ico
Normal file
BIN
static/mobile/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
1
static/mobile/index.html
Normal file
1
static/mobile/index.html
Normal file
@ -0,0 +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:"b810fcea"}[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.fb06b1f5.chunk.js"></script><script src="./static/js/main.1a008285.chunk.js"></script></body></html>
|
20
static/mobile/manifest.json
Normal file
20
static/mobile/manifest.json
Normal file
@ -0,0 +1,20 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "scologo.png",
|
||||
"type": "image/png",
|
||||
"sizes": "84x126"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
3
static/mobile/robots.txt
Normal file
3
static/mobile/robots.txt
Normal file
@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
BIN
static/mobile/scologo.png
Normal file
BIN
static/mobile/scologo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
7
static/mobile/static/css/2.4c97ca4f.chunk.css
Normal file
7
static/mobile/static/css/2.4c97ca4f.chunk.css
Normal file
File diff suppressed because one or more lines are too long
1
static/mobile/static/css/2.4c97ca4f.chunk.css.map
Normal file
1
static/mobile/static/css/2.4c97ca4f.chunk.css.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/css/main.6be5a531.chunk.css
Normal file
2
static/mobile/static/css/main.6be5a531.chunk.css
Normal file
@ -0,0 +1,2 @@
|
||||
body{font-family:"Poppins",sans-serif;height:100vh}a{color:#92badd;display:inline-block;text-decoration:none;font-weight:400}#pageTitle{font-size:25px;color:#aaa}#loginTitle,#pageTitle{text-align:center;font-weight:600}#loginTitle{font-size:20px;text-transform:uppercase;display:inline-block;margin:40px 8px 10px;color:#ccc}.wrapper{display:-webkit-flex;display:flex;-webkit-align-items:center;align-items:center;-webkit-flex-direction:column;flex-direction:column;-webkit-justify-content:center;justify-content:center;width:100%;min-height:100%;padding:10px}#formContent{padding:0}#errorMsg,#formContent{border-radius:10px 10px 10px 10px;background:#fff;width:90%;max-width:450px;position:relative;box-shadow:0 30px 60px 0 rgba(0,0,0,.3);text-align:center}#errorMsg{margin-bottom:10px;padding:0 0 20px}#wrapDept{border-radius:10px 10px 10px 10px;background:#fff;width:90%;max-width:450px;position:relative;box-shadow:0 10px 20px 0 rgba(0,0,0,.3);text-align:center;margin:10px;padding:10px}#formFooter{background-color:#f6f6f6;border-top:1px solid #dce8f1;padding:25px;text-align:center;border-radius:0 0 10px 10px}button[type=submit],input[type=button],input[type=reset]{background-color:#56baed;border:none;color:#fff;padding:15px 80px;text-align:center;text-decoration:none;display:inline-block;text-transform:uppercase;font-size:13px;box-shadow:0 10px 30px 0 rgba(95,186,233,.4);border-radius:5px 5px 5px 5px;margin:5px 20px 40px;transition:all .3s ease-in-out}button[type=submit]:hover,input[type=button]:hover,input[type=reset]:hover{background-color:#39ace7}button[type=submit]:active,input[type=button]:active,input[type=reset]:active{-webkit-transform:scale(.95);transform:scale(.95)}input[type=password],input[type=text]{background-color:#f6f6f6;color:#0d0d0d;padding:15px 32px;text-decoration:none;display:inline-block;font-size:16px;margin:5px;width:85%;border:2px solid #f6f6f6;transition:all .5s ease-in-out;border-radius:5px 5px 5px 5px}input[type=password]:focus,input[type=text]:focus{background-color:#fff;border-bottom:2px solid #5fbae9}input[type=password]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder{color:#ccc}input[type=password]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder{color:#ccc}input[type=password]::placeholder,input[type=text]::placeholder{color:#ccc}.underlineHover:hover{color:#0d0d0d}.underlineHover:hover:after{width:100%}:focus{outline:none}#icon{width:60%}.mySelect{min-width:200px}.smallRow{line-height:60%;font-size:70%}.ueRow{background:#5bc0de;color:#fff;font-weight:700}thead{background:#d3d3d3}
|
||||
/*# sourceMappingURL=main.6be5a531.chunk.css.map */
|
1
static/mobile/static/css/main.6be5a531.chunk.css.map
Normal file
1
static/mobile/static/css/main.6be5a531.chunk.css.map
Normal file
File diff suppressed because one or more lines are too long
3
static/mobile/static/js/2.fb06b1f5.chunk.js
Normal file
3
static/mobile/static/js/2.fb06b1f5.chunk.js
Normal file
File diff suppressed because one or more lines are too long
65
static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt
Normal file
65
static/mobile/static/js/2.fb06b1f5.chunk.js.LICENSE.txt
Normal file
@ -0,0 +1,65 @@
|
||||
/*
|
||||
object-assign
|
||||
(c) Sindre Sorhus
|
||||
@license MIT
|
||||
*/
|
||||
|
||||
/*!
|
||||
Copyright (c) 2018 Jed Watson.
|
||||
Licensed under the MIT License (MIT), see
|
||||
http://jedwatson.github.io/classnames
|
||||
*/
|
||||
|
||||
/*!@license
|
||||
* UAParser.js v0.7.28
|
||||
* Lightweight JavaScript-based User-Agent string parser
|
||||
* https://github.com/faisalman/ua-parser-js
|
||||
*
|
||||
* Copyright © 2012-2021 Faisal Salman <f@faisalman.com>
|
||||
* Licensed under MIT License
|
||||
*/
|
||||
|
||||
/** @license React v0.20.2
|
||||
* scheduler.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v16.13.1
|
||||
* react-is.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-dom.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react-jsx-runtime.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/** @license React v17.0.2
|
||||
* react.production.min.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
1
static/mobile/static/js/2.fb06b1f5.chunk.js.map
Normal file
1
static/mobile/static/js/2.fb06b1f5.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/3.b810fcea.chunk.js
Normal file
2
static/mobile/static/js/3.b810fcea.chunk.js
Normal file
@ -0,0 +1,2 @@
|
||||
(this.webpackJsonpscodocmobile=this.webpackJsonpscodocmobile||[]).push([[3],{117:function(t,e,n){"use strict";n.r(e),n.d(e,"getCLS",(function(){return p})),n.d(e,"getFCP",(function(){return g})),n.d(e,"getFID",(function(){return F})),n.d(e,"getLCP",(function(){return k})),n.d(e,"getTTFB",(function(){return C}));var i,a,r,o,c=function(t,e){return{name:t,value:void 0===e?-1:e,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},u=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var n=new PerformanceObserver((function(t){return t.getEntries().map(e)}));return n.observe({type:t,buffered:!0}),n}}catch(t){}},s=function(t,e){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(t(i),e&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},f=function(t){addEventListener("pageshow",(function(e){e.persisted&&t(e)}),!0)},d="function"==typeof WeakSet?new WeakSet:new Set,m=function(t,e,n){var i;return function(){e.value>=0&&(n||d.has(e)||"hidden"===document.visibilityState)&&(e.delta=e.value-(i||0),(e.delta||void 0===i)&&(i=e.value,t(e)))}},p=function(t,e){var n,i=c("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),n())},r=u("layout-shift",a);r&&(n=m(t,i,e),s((function(){r.takeRecords().map(a),n()})),f((function(){i=c("CLS",0),n=m(t,i,e)})))},v=-1,l=function(){return"hidden"===document.visibilityState?0:1/0},h=function(){s((function(t){var e=t.timeStamp;v=e}),!0)},S=function(){return v<0&&(v=l(),h(),f((function(){setTimeout((function(){v=l(),h()}),0)}))),{get timeStamp(){return v}}},g=function(t,e){var n,i=S(),a=c("FCP"),r=u("paint",(function(t){"first-contentful-paint"===t.name&&(r&&r.disconnect(),t.startTime<i.timeStamp&&(a.value=t.startTime,a.entries.push(t),d.add(a),n()))}));r&&(n=m(t,a,e),f((function(i){a=c("FCP"),n=m(t,a,e),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,d.add(a),n()}))}))})))},y={passive:!0,capture:!0},w=new Date,E=function(t,e){i||(i=e,a=t,r=new Date,b(removeEventListener),L())},L=function(){if(a>=0&&a<r-w){var t={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach((function(e){e(t)})),o=[]}},T=function(t){if(t.cancelable){var e=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,e){var n=function(){E(t,e),a()},i=function(){a()},a=function(){removeEventListener("pointerup",n,y),removeEventListener("pointercancel",i,y)};addEventListener("pointerup",n,y),addEventListener("pointercancel",i,y)}(e,t):E(e,t)}},b=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(e){return t(e,T,y)}))},F=function(t,e){var n,r=S(),p=c("FID"),v=function(t){t.startTime<r.timeStamp&&(p.value=t.processingStart-t.startTime,p.entries.push(t),d.add(p),n())},l=u("first-input",v);n=m(t,p,e),l&&s((function(){l.takeRecords().map(v),l.disconnect()}),!0),l&&f((function(){var r;p=c("FID"),n=m(t,p,e),o=[],a=-1,i=null,b(addEventListener),r=v,o.push(r),L()}))},k=function(t,e){var n,i=S(),a=c("LCP"),r=function(t){var e=t.startTime;e<i.timeStamp&&(a.value=e,a.entries.push(t)),n()},o=u("largest-contentful-paint",r);if(o){n=m(t,a,e);var p=function(){d.has(a)||(o.takeRecords().map(r),o.disconnect(),d.add(a),n())};["keydown","click"].forEach((function(t){addEventListener(t,p,{once:!0,capture:!0})})),s(p,!0),f((function(i){a=c("LCP"),n=m(t,a,e),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,d.add(a),n()}))}))}))}},C=function(t){var e,n=c("TTFB");e=function(){try{var e=performance.getEntriesByType("navigation")[0]||function(){var t=performance.timing,e={entryType:"navigation",startTime:0};for(var n in t)"navigationStart"!==n&&"toJSON"!==n&&(e[n]=Math.max(t[n]-t.navigationStart,0));return e}();n.value=n.delta=e.responseStart,n.entries=[e],t(n)}catch(t){}},"complete"===document.readyState?setTimeout(e,0):addEventListener("pageshow",e)}}}]);
|
||||
//# sourceMappingURL=3.b810fcea.chunk.js.map
|
1
static/mobile/static/js/3.b810fcea.chunk.js.map
Normal file
1
static/mobile/static/js/3.b810fcea.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/main.1a008285.chunk.js
Normal file
2
static/mobile/static/js/main.1a008285.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
static/mobile/static/js/main.1a008285.chunk.js.map
Normal file
1
static/mobile/static/js/main.1a008285.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
2
static/mobile/static/js/runtime-main.f39ba660.js
Normal file
2
static/mobile/static/js/runtime-main.f39ba660.js
Normal file
@ -0,0 +1,2 @@
|
||||
!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:"b810fcea"}[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()}([]);
|
||||
//# sourceMappingURL=runtime-main.f39ba660.js.map
|
1
static/mobile/static/js/runtime-main.f39ba660.js.map
Normal file
1
static/mobile/static/js/runtime-main.f39ba660.js.map
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user