var parentId = null; var childId = null; var parentName = null; var childName = null; var parentEmail = null; var childEmail = null; const possible_cooperative_state = { suspended: "Rattrapage", exempted: "Exempté.e", alert: "En alerte", up_to_date: "À jour", unsubscribed: "Désinscrit.e des créneaux", delay: "En délai", gone: "Parti.e", associated: "En binôme" }; /** * Load member infos */ function load_member_infos(divId, memberId) { $.ajax({ type: 'GET', url: "/members/get_member_info/" + memberId, dataType:"json", traditional: true, contentType: "application/json; charset=utf-8", success: function(data) { if (divId === 'parentInfo') { parentId = data.member.id; parentName = data.member.barcode_base + ' ' + data.member.name; } else if (divId === 'childInfo') { childId = data.member.id; childName = data.member.barcode_base + ' ' + data.member.name; } display_member_infos(divId, data.member); }, error: function(data) { err = {msg: "erreur serveur lors de la récupération des infos du membre", ctx: 'load_member_infos'}; if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.error != 'undefined') { err.msg += ' : ' + data.responseJSON.error; } report_JS_error(err, 'members.admin'); closeModal(); alert('Erreur lors de la récupération des infos du membre.'); } }); } /** * Display member info */ function display_member_infos(divId, memberData) { $("#" + divId).show(); $("#" + divId).find(".member_name") .text(memberData.name); $("#" + divId).find(".member_email") .text(memberData.email); $("#" + divId).find(".member_status") .text(possible_cooperative_state[memberData.cooperative_state]); $("#" + divId).find(".member_makeups_to_do") .text(memberData.makeups_to_do); let member_shift_name = memberData.current_template_name === false ? 'X' : memberData.current_template_name; $("#" + divId).find(".member_shift_name") .text(member_shift_name); if (memberData.is_associated_people === false) { $("#" + divId).find(".member_associated_partner_area") .hide(); } if (parentId != null && childId != null) { $("#createPair").prop("disabled", false); $("#createPair").addClass("btn--primary"); } } /** * Load attached members */ function load_attached_members() { openModal(); $.ajax({ type: 'GET', url: "/members/get_attached_members", dataType:"json", traditional: true, contentType: "application/json; charset=utf-8", success: function(data) { attached_members = data.res; display_attached_members(); closeModal(); }, error: function(data) { err = {msg: "erreur serveur lors de la récupération des membres en binôme", ctx: 'load_makeups_members'}; if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.error != 'undefined') { err.msg += ' : ' + data.responseJSON.error; } report_JS_error(err, 'members'); closeModal(); alert('Erreur serveur lors de la récupération des membres en binôme. Ré-essayez plus tard.'); } }); } /** * Display table of attached members */ function display_attached_members() { // if (attached_members_table) { // $('#attached_members_table').off(); // attached_members_table.clear().destroy(); // $('#attached_members_table').empty(); // } attached_members_table = $('#attached_members_table').DataTable({ data: attached_members, columns: [ { data: "id", title: '', className: "dt-body-center", orderable: false, render: function (data) { return `<input type="checkbox" class="select_member_cb" id="select_member_${data}" value="${data}">`; }, width: "3%" }, { data: "parent_name", title: "Nom du titulaire" }, { data: "name", title: "en binôme avec" }, { data: "action", title: "Action", width: "10%", render: function (data, type, full) { return ` <button class="delete_pair btn--danger" id="delete_pair_${full.id}"> Désolidariser </button>`; } } ], aLengthMenu: [ [ 25, 50, -1 ], [ 25, 50, "Tout" ] ], iDisplayLength: 25, oLanguage: { "sProcessing": "Traitement en cours...", "sSearch": "Rechercher dans le tableau", "sLengthMenu": "Afficher _MENU_ éléments", "sInfo": "Affichage de l'élément _START_ à _END_ sur _TOTAL_ éléments", "sInfoEmpty": "Affichage de l'élément 0 à 0 sur 0 élément", "sInfoFiltered": "(filtré de _MAX_ éléments au total)", "sInfoPostFix": "", "sLoadingRecords": "Chargement en cours...", "sZeroRecords": "Aucun élément à afficher", "sEmptyTable": "Aucune donnée disponible dans le tableau", "oPaginate": { "sFirst": "Premier", "sPrevious": "Précédent", "sNext": "Suivant", "sLast": "Dernier" }, "oAria": { "sSortAscending": ": activer pour trier la colonne par ordre croissant", "sSortDescending": ": activer pour trier la colonne par ordre décroissant" }, "select": { "rows": { "_": "%d lignes séléctionnées", "0": "Aucune ligne séléctionnée", "1": "1 ligne séléctionnée" } } } }); } function delete_pair(childId, gone_checked) { var payload = {"child": {"id": childId}, "gone": []}; if (gone_checked.length > 0) { $.each(gone_checked, function(i, e) { const elts = $(e).attr('name') .split("_"); payload['gone'].push(elts[0]); }); } $.ajax({ type: "POST", url: '/members/admin/manage_attached/delete_pair', dataType: 'json', contentType: "application/json; charset=utf-8", data: JSON.stringify(payload), success: function() { enqueue_message_for_next_loading("Binôme désolidarisé."); location.reload(); }, error: function(data) { err = {msg: "Erreur serveur lors de la désolidarisation du binôme.", ctx: 'load_makeups_members'}; if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.error != 'undefined') { err.msg += ' : ' + data.responseJSON.error; } report_JS_error(err, 'orders'); closeModal(); alert('Erreur serveur lors de la désolidarisation du binôme. Ré-essayez plus tard.'); } }); } function confirmDeletion(childId) { var modalContent = $('#confirmModal'); modalContent.find("#parentName").text(parentName); modalContent.find("#childName").text(childName); if (parentEmail != false) { modalContent.find("#parentEmail").text(parentEmail); } if (childEmail != false) { modalContent.find("#childEmail").text(childEmail); } modalContent = modalContent.html(); openModal(modalContent, () => { if (is_time_to('delete_pair')) { const gone_checked = $('input.after_unattached_state:checked'); closeModal(); openModal(); delete_pair(childId, gone_checked); } }, 'Valider', false); } function create_pair(payload) { $.ajax({ type: 'POST', url: "/members/admin/manage_attached/create_pair", dataType:"json", contentType: "application/json; charset=utf-8", data: JSON.stringify(payload), success: function() { enqueue_message_for_next_loading("Binôme créé."); location.reload(); }, error: function(data) { err = {msg: "erreur serveur", ctx: 'create pair'}; var message = 'Erreur lors de création du binôme.'; if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.errors != 'undefined') { err.msg += ' : ' + data.responseJSON.errors; data.responseJSON.errors.map(function(error) { message += ('\n' + error); return null; }); } report_JS_error(err, 'members.admin'); closeModal(); alert(message); } }); } $(document).ready(function() { if (coop_is_connected()) { $.ajaxSetup({ headers: { "X-CSRFToken": getCookie('csrftoken') } }); $(".page_content").show(); } else { $(".page_content").hide(); } $('#back_to_admin_index').on('click', function() { let base_location = window.location.href.split("manage_attached")[0].slice(0, -1); window.location.assign(base_location); }); $("#search_member_input").autocomplete({source: function(request, response) { $.ajax({ url: '/members/search/' + request.term, dataType : 'json', success: function(data) { members_search_results = []; for (member of data.res) { if (member.is_member || member.is_associated_people) { members_search_results.push(member); } } response($.map(data.res, function(item) { return { label: item.barcode_base + ' ' + item.name, value: item.id }; })); }, error: function() { err = { msg: "erreur serveur lors de la recherche de membres", ctx: 'search_member_form.search_members' }; report_JS_error(err, 'members.admin'); $.notify("Erreur lors de la recherche de membre, il faut ré-essayer plus tard...", { globalPosition:"top right", className: "error" }); } }); }, minLength: 1, search: function() { $('#spinner1').show(); }, response: function() { $('#spinner1').hide(); }, select: function(event, ui) { event.preventDefault(); if (ui.item) { load_member_infos("parentInfo", ui.item.value); $('#search_member_input').val(ui.item.label); return false; } return null; } }); $("#search_child_input").autocomplete({source: function(request, response) { $.ajax({ url: '/members/search/' + request.term, dataType : 'json', success: function(data) { members_search_results = []; for (member of data.res) { if (member.is_member || member.is_associated_people) { members_search_results.push(member); } } response($.map(data.res, function(item) { return { label: item.barcode_base + ' ' + item.name, value: item.id }; })); }, error: function() { err = { msg: "erreur serveur lors de la recherche de membres", ctx: 'search_member_form.search_members' }; report_JS_error(err, 'members.admin'); $.notify("Erreur lors de la recherche de membre, il faut ré-essayer plus tard...", { globalPosition:"top right", className: "error" }); } }); }, minLength: 1, search: function() { $('#spinner2').show(); }, response: function() { $('#spinner2').hide(); }, select: function(event, ui) { if (ui.item) { load_member_infos("childInfo", ui.item.value); $('#search_child_input').val(ui.item.label); return false; } return null; } }); $("#createPair").on('click', function() { if (parentId && childId) { // Note : after reload, button "Créer le binôme" is clickable...It shouldn't var payload = { "parent": {"id": parentId}, "child": {"id": childId} }; var modalContent = $('#confirmModal'); modalContent.find("#parentName").text(parentName); modalContent.find("#childName").text(childName); modalContent = modalContent.html(); openModal(modalContent, () => { if (is_time_to('create_pair')) { closeModal(); openModal(); // Show gears create_pair(payload); } }, 'Valider', false); } }); if ($("#attached_members_table") != "undefined") { load_attached_members(); } $(document).on('click', '.delete_pair', function (event) { var childId = event.target.id.split('_').slice(-1)[0]; $.ajax({ type: 'GET', url: "/members/get_member_info/" + childId, dataType:"json", traditional: true, contentType: "application/json; charset=utf-8", success: function(data) { if (data.member.parent_barcode_base !== undefined) { parentName = data.member.parent_barcode_base + ' - ' + data.member.parent_name; } else { parentName = data.member.parent_name; } parentEmail = data.member.parent_email; childName = data.member.barcode_base + ' - ' + data.member.name; childEmail = data.member.email; confirmDeletion(childId); }, error: function(data) { err = {msg: "erreur serveur lors de la récupération des infos du membre", ctx: 'load_member_infos'}; if (typeof data.responseJSON != 'undefined' && typeof data.responseJSON.error != 'undefined') { err.msg += ' : ' + data.responseJSON.error; } report_JS_error(err, 'members.admin'); closeModal(); alert('Erreur lors de la récupération des infos du membre.'); } }); }); });