Skip to content
Snippets Groups Projects
Commit d4fd6527 authored by Emmanuel Viennet's avatar Emmanuel Viennet
Browse files

Séparation vues notes/jurys et validations

parent 9deae8cd
No related branches found
No related tags found
No related merge requests found
...@@ -4,13 +4,10 @@ ...@@ -4,13 +4,10 @@
# See LICENSE # See LICENSE
############################################################################## ##############################################################################
"""Jury édition manuelle des décisions (correction d'erreurs, parcours hors normes) """Jury édition manuelle des décisions RCUE antérieures
Non spécifique au BUT.
""" """
from flask import render_template from flask import render_template
import sqlalchemy as sa
from app import log from app import log
from app.but import cursus_but from app.but import cursus_but
......
...@@ -45,16 +45,15 @@ import app.scodoc.sco_utils as scu ...@@ -45,16 +45,15 @@ import app.scodoc.sco_utils as scu
# ---- Table recap formation # ---- Table recap formation
def formation_table_recap(formation_id, fmt="html") -> Response: def formation_table_recap(formation: Formation, fmt="html") -> Response:
"""Table recapitulant formation.""" """Table recapitulant formation."""
T = [] rows = []
formation = Formation.query.get_or_404(formation_id)
ues = formation.ues.order_by(UniteEns.semestre_idx, UniteEns.numero) ues = formation.ues.order_by(UniteEns.semestre_idx, UniteEns.numero)
can_edit = current_user.has_permission(Permission.EditFormation) can_edit = current_user.has_permission(Permission.EditFormation)
li = 0 li = 0
for ue in ues: for ue in ues:
# L'UE # L'UE
T.append( rows.append(
{ {
"sem": f"S{ue.semestre_idx}" if ue.semestre_idx is not None else "-", "sem": f"S{ue.semestre_idx}" if ue.semestre_idx is not None else "-",
"_sem_order": f"{li:04d}", "_sem_order": f"{li:04d}",
...@@ -83,7 +82,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response: ...@@ -83,7 +82,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response:
for mod in modules: for mod in modules:
nb_moduleimpls = mod.modimpls.count() nb_moduleimpls = mod.modimpls.count()
# le module (ou ressource ou sae) # le module (ou ressource ou sae)
T.append( rows.append(
{ {
"sem": ( "sem": (
f"S{mod.semestre_id}" f"S{mod.semestre_id}"
...@@ -152,7 +151,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response: ...@@ -152,7 +151,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response:
tab = GenTable( tab = GenTable(
columns_ids=columns_ids, columns_ids=columns_ids,
rows=T, rows=rows,
titles=titles, titles=titles,
origin=f"Généré par {scu.sco_version.SCONAME} le {scu.timedate_human_repr()}", origin=f"Généré par {scu.sco_version.SCONAME} le {scu.timedate_human_repr()}",
caption=title, caption=title,
...@@ -168,7 +167,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response: ...@@ -168,7 +167,7 @@ def formation_table_recap(formation_id, fmt="html") -> Response:
}" }"
""", """,
html_with_td_classes=True, html_with_td_classes=True,
base_url=f"{request.base_url}?formation_id={formation_id}", base_url=f"{request.base_url}",
page_title=title, page_title=title,
html_title=f"<h2>{title}</h2>", html_title=f"<h2>{title}</h2>",
pdf_title=title, pdf_title=title,
...@@ -192,7 +191,7 @@ def export_recap_formations_annee_scolaire(annee_scolaire): ...@@ -192,7 +191,7 @@ def export_recap_formations_annee_scolaire(annee_scolaire):
formation_ids = {formsemestre.formation.id for formsemestre in formsemestres} formation_ids = {formsemestre.formation.id for formsemestre in formsemestres}
for formation_id in formation_ids: for formation_id in formation_ids:
formation = db.session.get(Formation, formation_id) formation = db.session.get(Formation, formation_id)
xls = formation_table_recap(formation_id, fmt="xlsx").data xls = formation_table_recap(formation, fmt="xlsx").data
filename = ( filename = (
scu.sanitize_filename(formation.get_titre_version()) + scu.XLSX_SUFFIX scu.sanitize_filename(formation.get_titre_version()) + scu.XLSX_SUFFIX
) )
......
...@@ -140,10 +140,15 @@ class ScoData: ...@@ -140,10 +140,15 @@ class ScoData:
return sco_formsemestre_status.formsemestre_status_menubar(self.formsemestre) return sco_formsemestre_status.formsemestre_status_menubar(self.formsemestre)
# Ajout des routes
from app.but import bulletin_but_court # ne pas enlever: ajoute des routes !
from app.but import jury_dut120 # ne pas enlever: ajoute des routes !
from app.pe import pe_view # ne pas enlever, ajoute des routes !
from app.views import ( from app.views import (
absences, absences,
assiduites, assiduites,
but_formation, but_formation,
jury_validations,
notes_formsemestre, notes_formsemestre,
notes, notes,
pn_modules, pn_modules,
......
This diff is collapsed.
This diff is collapsed.
#!/usr/bin/env python
# -*- mode: python -*-
# -*- coding: utf-8 -*-
"""Exemple connexion sur ScoDoc et utilisation de l'API
Attention: cet exemple est en Python 2.
Voir example-api-1.py pour une version en Python3 plus moderne.
"""
import urllib, urllib2
# A modifier pour votre serveur:
BASEURL = "https://scodoc.xxx.net/ScoDoc/RT/Scolarite"
USER = "XXX"
PASSWORD = "XXX"
values = {
"__ac_name": USER,
"__ac_password": PASSWORD,
}
# Configure memorisation des cookies:
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
urllib2.install_opener(opener)
data = urllib.urlencode(values)
req = urllib2.Request(BASEURL, data) # this is a POST http request
response = urllib2.urlopen(req)
# --- Use API
# Affiche la liste des formations en format XML
req = urllib2.Request(BASEURL + "/Notes/formation_list?fmt=xml")
response = urllib2.urlopen(req)
print response.read()[:100] # limite aux 100 premiers caracteres...
# Recupere la liste de tous les semestres:
req = urllib2.Request(BASEURL + "/Notes/formsemestre_list?fmt=json") # format json
response = urllib2.urlopen(req)
js_data = response.read()
# Plus amusant: va retrouver le bulletin de notes du premier etudiant (au hasard donc) du premier semestre (au hasard aussi)
try:
import json # Attention: ceci demande Python >= 2.6
except:
import simplejson as json # python2.4 with simplejson installed
data = json.loads(js_data) # decode la reponse JSON
if not data:
print "Aucun semestre !"
else:
formsemestre_id = str(data[0]["formsemestre_id"])
# Obtient la liste des groupes:
req = urllib2.Request(
BASEURL
+ "/Notes/formsemestre_partition_list?fmt=json&formsemestre_id="
+ str(formsemestre_id)
) # format json
response = urllib2.urlopen(req)
js_data = response.read()
data = json.loads(js_data)
group_id = data[0]["group"][0][
"group_id"
] # premier groupe (normalement existe toujours)
# Liste les étudiants de ce groupe:
req = urllib2.Request(
BASEURL + "/Notes/group_list?fmt=json&with_codes=1&group_id=" + str(group_id)
) # format json
response = urllib2.urlopen(req)
js_data = response.read()
data = json.loads(js_data)
# Le code du premier étudiant:
if not data:
print ("pas d'etudiants dans ce semestre !")
else:
etudid = data[0]["etudid"]
# Récupère bulletin de notes:
req = urllib2.Request(
BASEURL
+ "/Notes/formsemestre_bulletinetud?formsemestre_id="
+ str(formsemestre_id)
+ "&etudid="
+ str(etudid)
+ "&fmt=xml"
) # format XML ici !
response = urllib2.urlopen(req)
xml_bulletin = response.read()
print "----- Bulletin de notes en XML:"
print xml_bulletin
# Récupère la moyenne générale:
import xml.dom.minidom
doc = xml.dom.minidom.parseString(xml_bulletin)
moy = doc.getElementsByTagName("note")[0].getAttribute(
"value"
) # une chaine unicode
print "\nMoyenne generale: ", moy
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment