forked from ScoDoc/ScoDoc
218 lines
8.0 KiB
Plaintext
218 lines
8.0 KiB
Plaintext
|
{% extends "sco_page.j2" %}
|
||
|
|
||
|
{% block styles %}
|
||
|
{{super()}}
|
||
|
<link href="{{scu.STATIC_DIR}}/css/refcomp_parcours_niveaux.css" rel="stylesheet" type="text/css" />
|
||
|
<link href="{{scu.STATIC_DIR}}/css/parcour_formation.css" rel="stylesheet" type="text/css" />
|
||
|
{% endblock %}
|
||
|
|
||
|
{% macro show_ue(niv, sem="pair", sem_idx=0) -%}
|
||
|
{% if niv['niveau'] %}
|
||
|
{# Affiche l'UE et sa décision de jury #}
|
||
|
{% if niv['ue_'+sem] %}
|
||
|
{{ niv['ue_'+sem].acronyme }}
|
||
|
{% set validation = ue_validation_by_niveau.get((niv['niveau'].id, sem)) %}
|
||
|
<div class="ue_validation_code with_scoplement">
|
||
|
<div>
|
||
|
{% if validation %}
|
||
|
<b>{{validation.code}}</b>
|
||
|
{% else %}
|
||
|
-
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
<div class="scoplement">
|
||
|
{% if validation %}
|
||
|
<div>Validation de {{niv['ue_'+sem].acronyme}}</div>
|
||
|
<div>Jury de {{validation.formsemestre.titre_annee()
|
||
|
if validation.formsemestre else "-"}}</div>
|
||
|
<div>enregistrée le {{
|
||
|
validation.event_date.strftime("%d/%m/%Y à %H:%M")
|
||
|
if validation.event_date else "-"
|
||
|
}}</div>
|
||
|
{% else %}
|
||
|
pas de décision de jury enregistrée pour cette UE
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
{% else %}
|
||
|
<span class="fontred" title="Pas d'UE associée à ce niveau !">{{scu.EMO_WARNING|safe}} non associé</span>
|
||
|
{% endif %}
|
||
|
{% endif %}
|
||
|
{%- endmacro %}
|
||
|
|
||
|
{% block app_content %}
|
||
|
|
||
|
{# Résultats dans le parcours #}
|
||
|
<div class="parcour_formation">
|
||
|
|
||
|
<div class="titre_parcours">
|
||
|
Validations de {{sco.etud.html_link_fiche()|safe}}
|
||
|
{% if parcour %}
|
||
|
parcours {{parcour.code}} « {{parcour.libelle}} »
|
||
|
{% else %}
|
||
|
non inscrit à un parcours de la spécialité
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
|
||
|
{% for comp in competences_parcour %}
|
||
|
{% set color_idx = 1 + loop.index0 % 6 %}
|
||
|
<div class="competence comp-c{{color_idx}}">
|
||
|
<div class="titre_competence tc">
|
||
|
Compétence {{comp['competence'].numero}} : {{comp['competence'].titre}}
|
||
|
</div>
|
||
|
<div class="niveaux">
|
||
|
{% for annee, niv in comp['niveaux'].items() %}
|
||
|
<div class="niveau comp-c{{color_idx}}-{{annee}}"
|
||
|
style="--color: var(--col-c{{color_idx}}-{{annee}});">
|
||
|
<div class="titre_niveau n{{annee}}">
|
||
|
<span class="parcs">
|
||
|
{% if niv['niveau'].is_tronc_commun %}
|
||
|
<span class="parc">TC</span>
|
||
|
{% elif niv['niveau'].parcours|length > 1 %}
|
||
|
<span class="parc">
|
||
|
{% set virg = joiner(", ") %}
|
||
|
{% for p in niv['niveau'].parcours %}
|
||
|
{{ virg() }}{{p.code}}
|
||
|
{% endfor %}
|
||
|
</span>
|
||
|
{% endif %}
|
||
|
</span>
|
||
|
{{niv['niveau'].libelle if niv['niveau'] else ''}}
|
||
|
</div>
|
||
|
<div class="rcue">
|
||
|
<div class="rcue_validation_code with_scoplement">
|
||
|
{% set validation = rcue_validation_by_niveau.get(niv['niveau'].id) %}
|
||
|
{% if validation %}
|
||
|
<div>
|
||
|
RCUE enregistré <b>{{validation.code}}</b>
|
||
|
{% if niv['niveau'] and edit %}
|
||
|
{% if not (niv['ue_pair'] and niv['ue_impair']) %}
|
||
|
<span title="UEs manquantes">⛔</span>
|
||
|
{% else %}
|
||
|
<select class="validation_rcue" name="ue_niv_{{niv['niveau'].id}}" id="ue_niv_{{niv['niveau'].id}}"
|
||
|
onchange="record_rcue_validation(event,
|
||
|
{{niv['niveau'].id}},
|
||
|
);"
|
||
|
|
||
|
data-ue1_id="{{niv['ue_impair'].id}}"
|
||
|
data-ue2_id="{{niv['ue_pair'].id}}"
|
||
|
>
|
||
|
{% for code in rcue_codes %}
|
||
|
<option value="{{code}}"
|
||
|
{% if validation and validation.code == code -%}
|
||
|
selected
|
||
|
{%- endif %}
|
||
|
>{{code}}</option>
|
||
|
{% endfor %}
|
||
|
</select>
|
||
|
{% endif %}
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
<div class="scoplement">
|
||
|
<div>Validation du RCUE</div>
|
||
|
<div>enregistrée le {{
|
||
|
validation.date.strftime("%d/%m/%Y à %H:%M")
|
||
|
if validation.date else "-"
|
||
|
}}
|
||
|
</div>
|
||
|
<div>par le jury de {{validation.formsemestre.titre_annee()
|
||
|
if validation.formsemestre else "-"}}
|
||
|
</div>
|
||
|
</div>
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="ue impair u{{annee}}1">
|
||
|
{{ show_ue(niv, "impair", 2*annee-1) }}
|
||
|
</div>
|
||
|
<div class="ue pair u{{annee}}1">
|
||
|
{{ show_ue(niv, "pair", 2*annee) }}
|
||
|
</div>
|
||
|
</div>
|
||
|
{% endfor %}
|
||
|
</div>
|
||
|
</div>
|
||
|
{% endfor %}
|
||
|
</div>
|
||
|
|
||
|
{% if sco.formsemestre.can_edit_jury() %}
|
||
|
<div style="padding-bottom: 16px;">
|
||
|
{% if edit %}
|
||
|
<a class="stdlink" href="{{url_for('notes.validation_rcues',
|
||
|
scodoc_dept=g.scodoc_dept, formsemestre_id=sco.formsemestre.id, etudid=sco.etud.id
|
||
|
)}}">quitter le mode édition des RCUEs</a>
|
||
|
{% else %}
|
||
|
<a class="stdlink" href="{{url_for('notes.validation_rcues_edit',
|
||
|
scodoc_dept=g.scodoc_dept, formsemestre_id=sco.formsemestre.id, etudid=sco.etud.id
|
||
|
)}}">éditer les décisions d'RCUE antérieurs</a>
|
||
|
{% endif %}
|
||
|
</a>
|
||
|
</div>
|
||
|
{% endif %}
|
||
|
|
||
|
<div class="help">
|
||
|
|
||
|
<p>Cette page montre les validations d'UEs et de niveaux de compétences (RCUEs)
|
||
|
de {{sco.etud.html_link_fiche()|safe}}
|
||
|
dans le
|
||
|
{%if parcour %}
|
||
|
parcours <span class="parc">{{parcour.code}}</span>
|
||
|
{% else %}
|
||
|
tronc commun
|
||
|
{% endif %}
|
||
|
du référentiel de compétence {{formation.referentiel_competence.specialite}}
|
||
|
</p>
|
||
|
|
||
|
<p>Seuls les UEs et niveaux de ce référentiel sont montrés. Si le référentiel a
|
||
|
changé, enregistrer des validations "antérieures".
|
||
|
</p>
|
||
|
|
||
|
<p>Le symbole <span class="parc">TC</span> désigne un niveau du tronc commun
|
||
|
(c'est à dire présent dans tous les parcours de la spécialité). </p>
|
||
|
|
||
|
{% if edit %}
|
||
|
<p>Les validations sont enregistrées au fur et à mesure.</p>
|
||
|
{% endif %}
|
||
|
</div>
|
||
|
|
||
|
<script>
|
||
|
function record_rcue_validation(event, niveau_id) {
|
||
|
let code = event.target.value;
|
||
|
let ue1_id = event.target.dataset.ue1_id;
|
||
|
let ue2_id = event.target.dataset.ue2_id;
|
||
|
const record_url = '{{
|
||
|
url_for(
|
||
|
"apiweb.validation_rcue_record",
|
||
|
scodoc_dept=g.scodoc_dept,
|
||
|
etudid=sco.etud.id
|
||
|
)
|
||
|
}}';
|
||
|
|
||
|
fetch(record_url, {
|
||
|
method: 'POST',
|
||
|
headers: {
|
||
|
'Content-Type': 'application/json'
|
||
|
},
|
||
|
body: JSON.stringify( {
|
||
|
code : code,
|
||
|
ue1_id : ue1_id,
|
||
|
ue2_id : ue2_id,
|
||
|
// Optionnel:
|
||
|
formsemestre_id : {{sco.formsemestre.id}},
|
||
|
parcours_id : {{parcour.id if parcour else "null"}},
|
||
|
} )
|
||
|
})
|
||
|
.then(response => response.json())
|
||
|
.then(data => {
|
||
|
if (data.status) {
|
||
|
/* sco_message(data.message); */
|
||
|
/* revert menu to initial state */
|
||
|
event.target.value = event.target.dataset.ue_id;
|
||
|
}
|
||
|
location.reload();
|
||
|
});
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
{% endblock %}
|