{% 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 class="code">
                    {% 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>
                        <div>{{"%g"|format(validation.ects())}} ECTS</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{{sco.etud.e}} à 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}}&nbsp;: {{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" style="position: relative;">
                <div class="rcue_validation_code with_scoplement">
                {% set validation = rcue_validation_by_niveau.get(niv['niveau'].id) %}
                <div>
                    {% if validation or niv['niveau'] %}
                        RCUE : <b>{{validation.code if validation else ""}}</b>
                    {% endif %}
                    {% 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}}"
                            data-code="{{validation.code if validation else ''}}"
                        >
                        <option value="" disabled {{"selected" if not validation else ""}}>-</option>
                        {% for code in rcue_codes %}
                            <option value="{{code}}"
                                {% if validation and validation.code == code -%}
                                selected
                                {%- endif %}
                            >{{code}}</option>
                        {% endfor %}
                        </select>
                        {% endif %}
                    {% endif %}
                </div>
                {% if validation %}
                    <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" style="position: relative;">
                {{ show_ue(niv, "impair", 2*annee-1) }}
            </div>
            <div class="ue pair u{{annee}}1" style="position: relative;">
                {{ show_ue(niv, "pair", 2*annee) }}
            </div>
        </div>
    {% endfor %}
    </div>
</div>
{% endfor %}
</div>

<div class="recap_ects">
{{"%g"|format(ects_acquis)}} ECTS validés sur {{"%g"|format(ects_parcours)}}.
</div>

{% if sco.formsemestre.can_edit_jury() %}
<div class="link_edit">
    {% 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 class="stdlink" href="{{url_for('notes.formsemestre_validation_but',
            scodoc_dept=g.scodoc_dept,
            etudid=sco.etud.id,
            formsemestre_id=sco.formsemestre.id)
    }}">Page saisie jury</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 <a class="stdlink" href="{{
    url_for('notes.refcomp_show',
        scodoc_dept=g.scodoc_dept, refcomp_id=formation.referentiel_competence.id
    )}}">{{formation.referentiel_competence.specialite}}
(version {{formation.referentiel_competence.version_orebut}})</a>.
</p>

<p>Seuls les UEs et niveaux de ce référentiel sont montrés. Si le référentiel a
changé, <a class="stdlink" href="{{
    url_for( 'notes.formsemestre_validate_previous_ue',
        scodoc_dept=g.scodoc_dept,
        etudid=sco.etud.id,
        formsemestre_id=sco.formsemestre.id)
}}">enregistrer des validations "antérieures"</a>.
</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>
<p>
⚠️ Attention, cette page permet une saisie "manuelle", la cohérence des décisions
n'est pas vérifiée: ni avec les notes, ni avec les décisions d'UEs
(qu'il vous faudra probablement saisir aussi), ni entre années.
Les <tt>ADSUP</tt> ne sont pas automatiquement générés.
<br>
Privilégiez lorsque c'est possible la saisie par
<a class="stdlink" href="{{url_for('notes.formsemestre_validation_but',
            scodoc_dept=g.scodoc_dept,
            etudid=sco.etud.id,
            formsemestre_id=sco.formsemestre.id)
}}">la page de jury</a>.
</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.code;
            } else {
                sco_message("code jury enregistré");
            }
        });
}
</script>

{% endblock %}
