forked from ScoDoc/ScoDoc
Merge branch 'table' of https://scodoc.org/git/ScoDoc/ScoDoc into bac_a_sable_prod
This commit is contained in:
commit
ed05c1f7fe
@ -51,7 +51,9 @@ class Formation(db.Model):
|
||||
)
|
||||
ues = db.relationship("UniteEns", backref="formation", lazy="dynamic")
|
||||
formsemestres = db.relationship("FormSemestre", lazy="dynamic", backref="formation")
|
||||
ues = db.relationship("UniteEns", lazy="dynamic", backref="formation")
|
||||
ues = db.relationship(
|
||||
"UniteEns", lazy="dynamic", backref="formation", order_by="UniteEns.numero"
|
||||
)
|
||||
modules = db.relationship("Module", lazy="dynamic", backref="formation")
|
||||
|
||||
def __repr__(self):
|
||||
|
@ -276,7 +276,8 @@ class UniteEns(db.Model):
|
||||
ues_meme_niveau = [
|
||||
ue
|
||||
for ue in parcour.ues
|
||||
if ue.formation_id == self.formation_id
|
||||
if ue.id != self.id
|
||||
and ue.formation_id == self.formation_id
|
||||
and ue.niveau_competence_id == niveau.id
|
||||
]
|
||||
if ues_meme_niveau:
|
||||
@ -295,8 +296,9 @@ class UniteEns(db.Model):
|
||||
2 * (self.semestre_idx % 2) - 1
|
||||
)
|
||||
if ues_meme_niveau[0].semestre_idx != other_semestre_idx:
|
||||
msg = f"""Niveau "{
|
||||
niveau.libelle}" associé à une autre année du {msg_parc}"""
|
||||
msg = f"""Erreur: niveau "{
|
||||
niveau.libelle}" déjà associé à une autre UE du semestre S{
|
||||
ues_meme_niveau[0].semestre_idx} du {msg_parc}"""
|
||||
log(
|
||||
f"check_niveau_unique_dans_parcours(niveau_id={niveau.id}): "
|
||||
+ msg
|
||||
|
@ -386,7 +386,7 @@ class ApoEtud(dict):
|
||||
# - Note: moyenne des moyennes générales des deux semestres
|
||||
# (pas vraiment de sens, mais faute de mieux)
|
||||
# on pourrait aussi bien prendre seulement la note du dernier semestre (S2 ou S4).
|
||||
# XXX APOBUT: à modifier pour prendre moyenne indicative annuelle
|
||||
# XXX APOBUT: à modifier pour prendre moyenne indicative annuelle ? non
|
||||
#
|
||||
# - Résultat jury:
|
||||
# si l'autre est validé, code du semestre courant (ex: S1 (ADM), S2 (AJ) => année AJ)
|
||||
@ -404,6 +404,7 @@ class ApoEtud(dict):
|
||||
if self.is_apc:
|
||||
cur_decision = {} # comp_elt_semestre sera vide.
|
||||
else:
|
||||
# Non BUT
|
||||
cur_decision = self.cur_res.get_etud_decision_sem(etudid)
|
||||
if not cur_decision:
|
||||
# pas de decision => pas de résultat annuel
|
||||
@ -492,6 +493,9 @@ class ApoEtud(dict):
|
||||
formsemestre_id=formsemestre.id, etudid=self.etud["etudid"]
|
||||
).first()
|
||||
)
|
||||
self.is_nar = (
|
||||
self.validation_annee_but and self.validation_annee_but.code == NAR
|
||||
)
|
||||
|
||||
def etud_set_semestres_de_etape(self, apo_data: "ApoData"):
|
||||
"""Set .cur_sem and .autre_sem et charge les résultats.
|
||||
|
@ -37,6 +37,7 @@ div.les_parcours>div.parc>a:visited {
|
||||
.parcour_formation {
|
||||
margin-left: 16px;
|
||||
margin-right: 16px;
|
||||
margin-bottom: 16px;
|
||||
min-width: 1200px;
|
||||
max-width: 1600px;
|
||||
}
|
||||
@ -119,6 +120,7 @@ span.parc {
|
||||
font-weight: bold;
|
||||
/* color: rgb(92, 87, 255); */
|
||||
color: white;
|
||||
margin-right: 8px;
|
||||
padding: 4px;
|
||||
background-color: #09c;
|
||||
border-radius: 4px;
|
||||
|
@ -223,7 +223,7 @@ div.head_message {
|
||||
color: green;
|
||||
}
|
||||
|
||||
.message_curtom {
|
||||
.message_custom {
|
||||
position: fixed;
|
||||
bottom: 100%;
|
||||
left: 50%;
|
||||
@ -237,6 +237,18 @@ div.head_message {
|
||||
transform: translate(-50%, 0);
|
||||
}
|
||||
|
||||
div.message_error {
|
||||
position: fixed;
|
||||
top: 16px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
z-index: 10;
|
||||
padding: 20px;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background: rgb(212, 0, 0);
|
||||
color: #ffffff;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
div.passwd_warn {
|
||||
font-weight: bold;
|
||||
@ -2318,11 +2330,12 @@ span.notes_module_list_buts {
|
||||
div.formation_parcs {
|
||||
display: inline-flex;
|
||||
margin-left: 8px;
|
||||
margin-right: 8px;
|
||||
column-gap: 8px;
|
||||
}
|
||||
|
||||
div.formation_parcs>div {
|
||||
font-size: 100%;
|
||||
margin-left: 8px;
|
||||
color: white;
|
||||
background-color: #09c;
|
||||
opacity: 0.7;
|
||||
|
@ -53,7 +53,9 @@ function set_ue_parcour(checkbox) {
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.status) {
|
||||
if (data.status == 404) {
|
||||
sco_error_message(data.message);
|
||||
} else {
|
||||
sco_message(data.message);
|
||||
}
|
||||
});
|
||||
|
@ -67,17 +67,22 @@ $(function () {
|
||||
}
|
||||
});
|
||||
|
||||
// Affiche un message transitoire
|
||||
function sco_message(msg) {
|
||||
// Affiche un message transitoire (duration milliseconds, 0 means infinity)
|
||||
function sco_message(msg, className = "message_custom", duration = 0) {
|
||||
var div = document.createElement("div");
|
||||
div.className = "message_curtom";
|
||||
div.className = className;
|
||||
div.innerHTML = msg;
|
||||
document.querySelector("body").appendChild(div);
|
||||
setTimeout(() => {
|
||||
div.remove();
|
||||
}, 3000);
|
||||
if (duration) {
|
||||
setTimeout(() => {
|
||||
div.remove();
|
||||
}, 3000);
|
||||
}
|
||||
}
|
||||
|
||||
function sco_error_message(msg) {
|
||||
sco_message(msg, className = "message_error", duration = 0);
|
||||
}
|
||||
|
||||
|
||||
function get_query_args() {
|
||||
|
@ -64,12 +64,13 @@
|
||||
{% block content %}
|
||||
<div class="container flashes">
|
||||
{% include "flashed_messages.j2" %}
|
||||
|
||||
</div>
|
||||
|
||||
{# application content needs to be provided in the app_content block #}
|
||||
<div class="container">
|
||||
{# application content needs to be provided in the app_content block #}
|
||||
{% block app_content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
<script>
|
||||
setTimeout(function () {
|
||||
var flashes = document.getElementsByClassName("flashes")[0];
|
||||
|
@ -86,7 +86,6 @@
|
||||
<div class="niveau comp-c{{color_idx}}-{{annee}}"
|
||||
style="--color: var(--col-c{{color_idx}}-{{annee}});">
|
||||
<div class="titre_niveau n{{annee}}">
|
||||
{{niv['niveau'].libelle if niv['niveau'] else ''}}
|
||||
<span class="parcs">
|
||||
{% if niv['niveau'].is_tronc_commun %}
|
||||
<span class="parc">TC</span>
|
||||
@ -99,6 +98,7 @@
|
||||
</span>
|
||||
{% endif %}
|
||||
</span>
|
||||
{{niv['niveau'].libelle if niv['niveau'] else ''}}
|
||||
</div>
|
||||
<div class="ue impair u{{annee}}1">
|
||||
{{ menu_ue(niv, "impair", 2*annee-1) }}
|
||||
|
@ -58,7 +58,13 @@
|
||||
</span>
|
||||
|
||||
</span>
|
||||
|
||||
{% if ue.type != codes_cursus.UE_SPORT %}
|
||||
<div class="formation_parcs">
|
||||
{% for parc in ue.parcours %}
|
||||
<div>{{ parc.code }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if editable and not ue.is_locked() %}
|
||||
<a class="stdlink" href="{{ url_for('notes.ue_edit',
|
||||
scodoc_dept=g.scodoc_dept, ue_id=ue.id)
|
||||
@ -80,13 +86,8 @@
|
||||
<a class="stdlink" href="{{
|
||||
url_for('notes.parcour_formation', scodoc_dept=g.scodoc_dept,
|
||||
formation_id=formation.id )
|
||||
}}">modifier</a>
|
||||
}}">modifier associations</a>
|
||||
{% endif %}
|
||||
<div class="formation_parcs">
|
||||
{% for parc in ue.parcours %}
|
||||
<div>{{ parc.code }}</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
# Tests unitaires
|
||||
# Le BUT Info a 4 parcours qui partagent certains niveaux de compétences
|
||||
# mais à ce sniveaux sont asscoiés des UEs dont les coefficients des ressources
|
||||
# mais à ces niveaux sont associés des UEs dont les coefficients des ressources
|
||||
# varient selon le parcours.
|
||||
#
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user