// Tableau recap notes $(function () { $(function () { let hidden_colums = ["etud_codes", "identite_detail", "partition_aux", "partition_rangs", "admission", "col_empty"]; let mode_jury_but_bilan = $('table.table_recap').hasClass("table_jury_but_bilan"); if (mode_jury_but_bilan) { // table bilan décisions: cache les notes hidden_colums = hidden_colums.concat(["col_ue", "col_rcue", "col_lien_saisie_but"]); } else { hidden_colums = hidden_colums.concat(["recorded_code"]); } // Etat (tri des colonnes) de la table: const url = new URL(document.URL); const formsemestre_id = url.searchParams.get("formsemestre_id"); const order_info_key = JSON.stringify([url.pathname, formsemestre_id]); let order_info; if (formsemestre_id) { const x = localStorage.getItem(order_info_key); if (x) { try { order_info = JSON.parse(x); } catch (error) { console.error(error); } } } // Les colonnes visibles étant mémorisé, il faut initialiser les titres des boutons function update_buttons_labels(dt) { dt.buttons('toggle_ident:name').text(dt.columns(".identite_detail").visible()[0] ? "Nom seul" : "Civ/Nom/Prénom"); dt.buttons('toggle_partitions:name').text(dt.columns(".partition_aux").visible()[0] ? "Cacher les groupes" : "Montrer groupes"); if (!$('table.table_recap').hasClass("table_jury_but")) { // Bouton "rangs groupes", sauf pour table jury BUT dt.buttons('toggle_partitions_rangs:name').text(dt.columns(".partition_rangs").visible()[0] ? "Cacher rangs groupes" : "Rangs groupes"); dt.buttons('toggle_admission:name').text(dt.columns(".admission").visible()[0] ? "Cacher infos admission" : "Montrer infos admission"); } else { // table jury BUT: avec ou sans codes enregistrés dt.buttons('toggle_recorded_code:name').text(dt.columns(".recorded_code").visible()[0] ? "Cacher codes jury" : "Code jury enregistrés"); } // Boutons non visibles en mode jury: if (!$('table.table_recap').hasClass("jury")) { // Ces boutons dépendent du mode BUT ou classique: if ($('table.table_recap').hasClass("apc")) { dt.buttons('toggle_res:name').text(dt.columns(".col_res").visible()[0] ? "Cacher les ressources" : "Montrer les ressources"); dt.buttons('toggle_sae:name').text(dt.columns(".col_sae").visible()[0] ? "Cacher les SAÉs" : "Montrer les SAÉs"); } else { dt.buttons('toggle_mod:name').text(dt.columns(".col_mod:not(.col_empty)").visible()[0] ? "Cacher les modules" : "Montrer les modules"); } dt.buttons('toggle_col_empty:name').text(dt.columns(".col_empty").visible()[0] ? "Cacher mod. vides" : "Montrer mod. vides"); } } let buttons = [ { name: "toggle_ident", text: "Civ/Nom/Prénom", action: function (e, dt, node, config) { let visible = dt.columns(".identite_detail").visible()[0]; dt.columns(".identite_detail").visible(!visible); dt.columns(".identite_court").visible(visible); update_buttons_labels(dt); } }, { name: "toggle_partitions", text: "Montrer groupes", action: function (e, dt, node, config) { let visible = dt.columns(".partition_aux").visible()[0]; dt.columns(".partition_aux").visible(!visible); update_buttons_labels(dt); } }, ]; // Bouton "rangs groupes", sauf pour table jury BUT if (!$('table.table_recap').hasClass("table_jury_but")) { buttons.push( { name: "toggle_partitions_rangs", text: "Rangs groupes", action: function (e, dt, node, config) { let rangs_visible = dt.columns(".partition_rangs").visible()[0]; dt.columns(".partition_rangs").visible(!rangs_visible); update_buttons_labels(dt); } }); } else { // table jury BUT: avec ou sans codes enregistrés buttons.push( { name: "toggle_recorded_code", text: "Code jury enregistrés", action: function (e, dt, node, config) { let visible = dt.columns(".recorded_code").visible()[0]; dt.columns(".recorded_code").visible(!visible); update_buttons_labels(dt); } }); } if (!$('table.table_recap').hasClass("jury")) { buttons.push( $('table.table_recap').hasClass("apc") ? { name: "toggle_res", text: "Visilité ressources", action: function (e, dt, node, config) { let visible = dt.columns(".col_res").visible()[0]; dt.columns(".col_res").visible(!visible); dt.columns(".col_ue_bonus").visible(!visible); dt.columns(".col_malus").visible(!visible); update_buttons_labels(dt); } } : { name: "toggle_mod", text: "Cacher les modules", action: function (e, dt, node, config) { let visible = dt.columns(".col_mod:not(.col_empty)").visible()[0]; dt.columns(".col_mod:not(.col_empty)").visible(!visible); dt.columns(".col_ue_bonus").visible(!visible); dt.columns(".col_malus").visible(!visible); update_buttons_labels(dt); } } ); if ($('table.table_recap').hasClass("apc")) { buttons.push({ name: "toggle_sae", text: "Visibilité SAÉs", action: function (e, dt, node, config) { let visible = dt.columns(".col_sae").visible()[0]; dt.columns(".col_sae").visible(!visible); update_buttons_labels(dt); } }) } buttons.push({ name: "toggle_col_empty", text: "Visibilité mod. vides", action: function (e, dt, node, config) { let visible = dt.columns(".col_empty").visible()[0]; dt.columns(".col_empty").visible(!visible); update_buttons_labels(dt); } }) } // Boutons admission, sauf pour table jury BUT if (!$('table.table_recap').hasClass("table_jury_but")) { buttons.push({ name: "toggle_admission", text: "Montrer infos admission", action: function (e, dt, node, config) { let visible = dt.columns(".admission").visible()[0]; dt.columns(".admission").visible(!visible); update_buttons_labels(dt); } }); } let table = $('table.table_recap').DataTable( { paging: false, searching: true, info: false, autoWidth: false, fixedHeader: { header: true, footer: false }, orderCellsTop: true, // cellules ligne 1 pour tri aaSorting: [], // Prevent initial sorting colReorder: true, stateSave: true, // enregistre état de la table (tris, ...) "columnDefs": [ { // cache les codes, le détail de l'identité, les groupes, les colonnes admission et les vides targets: hidden_colums, visible: false, }, { // Elimine les 0 à gauche pour les exports excel et les "copy" targets: ["col_mod", "col_moy_gen", "col_ue", "col_res", "col_sae", "evaluation", "col_rcue"], render: function (data, type, row) { return type === 'export' ? data.replace(/0(\d\..*)/, '$1') : data; } }, { // Elimine les décorations (fleches bonus/malus) pour les exports targets: ["col_ue_bonus", "col_malus"], render: function (data, type, row) { return type === 'export' ? data.replace(/.*(\d\d\.\d\d)/, '$1').replace(/0(\d\..*)/, '$1') : data; } }, ], dom: 'Bfrtip', buttons: [ { extend: 'copyHtml5', text: 'Copier', exportOptions: { orthogonal: 'export' } }, { extend: 'excelHtml5', // footer: true, // ne fonctionne pas ? exportOptions: { orthogonal: 'export' }, title: document.querySelector('table.table_recap').dataset.filename }, { extend: 'collection', text: 'Colonnes affichées', autoClose: true, buttons: buttons, }, ], "drawCallback": function (settings) { // permet de conserver l'ordre de tri des colonnes let order_info = JSON.stringify($('table.table_recap').DataTable().order()); if (formsemestre_id) { localStorage.setItem(order_info_key, order_info); } let etudids = []; document.querySelectorAll("td.identite_court").forEach(e => { etudids.push(e.dataset.etudid); }); let noms = []; document.querySelectorAll("td.identite_court").forEach(e => { noms.push(e.dataset.nomprenom); }); const etudids_key = JSON.stringify(["etudids", url.origin, formsemestre_id]); localStorage.setItem(etudids_key, JSON.stringify(etudids)); const noms_key = JSON.stringify(["noms", url.origin, formsemestre_id]); localStorage.setItem(noms_key, JSON.stringify(noms)); }, "order": order_info, } ); update_buttons_labels(table); }); $('table.table_recap tbody').on('click', 'tr', function () { if ($(this).hasClass('selected')) { $(this).removeClass('selected'); } else { $('table.table_recap tr.selected').removeClass('selected'); $(this).addClass('selected'); } }); // Pour montrer et surligner l'étudiant sélectionné: $(function () { let row_selected = document.querySelector(".row_selected"); if (row_selected) { /*row_selected.scrollIntoView(); window.scrollBy(0, -50);*/ row_selected.classList.add("selected"); } }); });