// SETTINGS var clientsConf = { type : "client", baseURL : "clients.php", // LIST list_selector : "#clientsList", // SEARCH search_selector : "#clientsSearch .searchGrp", // VIEW view_modalSelector : "#modalViewClient", view_btnSelector : ".btnViewClient", // ADD add_modalSelector : "#modalAddClient", add_btnSelector : "#btnAddClient", // EDIT edit_modalSelector : "#modalEditClient", edit_btnSelector : ".btnEditClient", // DELETE delete_modalSelector : "#modalDeleteClient", delete_btnSelector : ".btnDeleteClient", } // MODALS var modalViewClient = false; var modalAddClient = false; var modalEditClient = false; var modalDeleteClient = false; $(document).ready( function() { // LIST LOADER initListProgressLoad($(clientsConf.list_selector), clientsConf.baseURL, clientsConf.type+" list"); // SEARCH $(clientsConf.search_selector).initSearchGroup(); // VIEW modalViewClient = $(clientsConf.view_modalSelector); if(modalViewClient.length>0) { initViewClient(); // VIEW REQUEST var id = getUrlParameter("ref"); if(id!==false && parseInt(id)>0 && current_page == "clients") { modalViewClient_clear(modalViewClient); modalViewClient_loadDatas(modalViewClient, id); } } // ADD modalAddClient = $(clientsConf.add_modalSelector); if(modalAddClient.length>0) initAddClient(); // EDIT modalEditClient = $(clientsConf.edit_modalSelector); if(modalEditClient.length>0) initEditClient(); // DELETE modalDeleteClient = $(clientsConf.delete_modalSelector); if(modalDeleteClient.length>0) initDeleteClient(); }); /***** MODAL VIEW *****/ function initViewClient() { // INIT VIEW BTNs var initBtnFct = function() { modalForm_initBtnView( $(clientsConf.view_btnSelector), // BTNs modalViewClient, // MODAL modalViewClient_clear, // CLEAR FUNCTION modalViewClient_loadDatas // LOAD DATAS FUNCTION )}; registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct ); initBtnFct(); // TABS modalForm_initTabs(modalViewClient); // CANCEL modalViewClient.on('hidden.bs.modal', function() { modalViewClient_clear(modalViewClient); }); // EMPECHE LA FERMETURE SI ON EST ENTRAIN D'EDITER UNE LIGNE D'ABSENCE modalViewClient.on('hide.bs.modal', function(e) { if(modalViewClient.find("tr.editable").length>0) e.preventDefault(); }); } function modalViewClient_loadDatas(modal, id) { $.post(clientsConf.baseURL, { 'ref' : id, 'action' : 'getDatas' }, function(jsonTxt) { var datas = JSON.parse(jsonTxt); modal.find("small.db_ref > span").html(datas.ref); modal.find("td.nom").html(datas.prenom+" "+datas.nom); modal.find("td.tel").html( (datas.tel!="" && datas.tel!=null) ? ''+datas.tel+'' : "." ); modal.find("td.email").html( (datas.email!="" && datas.email!=null) ? ''+datas.email+'' : "."); // COMPLEMENTS comp = "."; if(datas.complements>0 || datas.complements_regles>0 || datas.complements_dus>0) { comp = number_format(datas.complements, 2)+" €"; if(datas.complements_regles>0) { comp += " / "+number_format(datas.complements_regles, 2)+" € réglé"; comp += " => "+number_format(Math.abs(datas.complements_dus), 2)+((datas.complements_dus >= 0) ? " € à régler" : " € d'avoir"); } else if(datas.complements_dus>0) comp += " => "+number_format(Math.abs(datas.complements_dus), 2)+((datas.complements_dus >= 0) ? " € à régler" : " € d'avoir"); } modal.find("td.complements").html(comp); // CONTRATS $.post(clientsConf.baseURL, { 'ref' : id, 'action' : 'modalView_getTab', 'tab' : 'contrats' }, function(result) { modal.find("div.tabContrats").html(result); }).fail(function() { alert("ERREUR SERVEUR ! (client modal view - load tab contrats)"); }); // ABSENCES modalViewClient_loadTabAbsences(); modal.modal('show'); }).fail(function() { alert("("+clientsConf.type+" - load modal view)"); }); } function modalViewClient_clear(modal) { modal.removeAttr("view_id"); modal.find("small.db_ref > span").html(""); modalForm_resetTabs(modal); modal.find("td.nom").html(""); modal.find("td.tel").html(""); modal.find("td.email").html(""); modal.find("td.complements").html(""); modal.find("div.tabContrats").html(""); modal.find("div.tabAbsences").html(""); modal.find("table.modal-body tfoot").addClass("hide").find("tr:not(.header)").remove(); } function modalViewClient_loadTabAbsences() { $.post(clientsConf.baseURL, { 'ref' : modalViewClient.attr("view_id"), 'action' : 'modalView_getTab', 'tab' : 'absences' }, function(result) { modalViewClient.find("div.tabAbsences").html(result); modalViewClient_initTabAbsences(); }).fail(function() { alert(srvErrorMsg+" (load modal view client - tab absences)"); }); } function modalViewClient_initTabAbsences() { // BTN ADD ABSENCES modalViewClient.find("#btnAddAbsence").click(function(e) { e.preventDefault(); $(this).blur(); var tr = $("").html( modalViewClient.find("tr.absenceNewRowTemplate").html() ); modalViewClient.find("div.tabAbsences table tbody").append(tr); nullChild = modalViewClient.find("div.tabAbsences table tbody tr.nullChild"); if(nullChild.length>0) nullChild.addClass("hide"); modalViewClient_initAbsenceRow(tr); }); // INIT ROWS modalViewClient.find("div.tabAbsences table tbody tr.absence").each(function(n,e) { modalViewClient_initAbsenceRow($(this)); }) } function modalViewClient_initAbsenceRow(row) { var ref = row.attr("ref"); if(parseInt(ref)>0) ref = parseInt(ref); var tdDebut = row.find("td.debut"); var tdFin = row.find("td.fin"); var tdRmq = row.find("td.remarque"); var oldDebut = tdDebut.html(); var d = parseDate(oldDebut, "dd/mm/yyyy"); if(!d) d = new Date(); var debut = formatDate(d, "yyyy-mm-dd"); var oldFin = tdFin.html(); var f = parseDate(oldFin, "dd/mm/yyyy"); if(!f) f = new Date(); var fin = formatDate(f, "yyyy-mm-dd"); var oldRmq = tdRmq.html(); var rmq = `${oldRmq}`; var iptDebut = $("").val(debut).blur(function(e) { debut = $(this).val(); d = parseDate(debut, "yyyy-mm-dd"); if(f").val(fin).blur(function(e) { fin = $(this).val(); f = parseDate(fin, "yyyy-mm-dd"); if(d>f) { debut = `${fin}`; d = parseDate(debut, "yyyy-mm-dd"); iptDebut.val(debut).focus(); } }); var iptRmq = $("").val(rmq).blur(function(e) { rmq = $(this).val(); }); var btnEdit = row.find("button.btnEditAbsence"); var btnDel = row.find("button.btnDeleteAbsence"); btnEdit.click(function(e) { e.preventDefault(); $(this).blur(); if(modalViewClient.find("tr.editable").length>0 && !row.hasClass("editable")) return; // SAVE if(row.hasClass("editable")) { iptDebut.blur(); iptFin.blur(); iptRmq.blur(); datas = { 'client' : modalViewClient.attr("view_id"), 'debut' : debut, 'fin' : fin, 'remarque' : rmq }; if(ref=='new') datas.action = "add_client_absence"; else { datas.action = "edit_client_absence"; datas.absence_ref = ref; } $.post(clientsConf.baseURL, datas, function(result) { if(parseInt(result)>0) modalViewClient_loadTabAbsences(); else { console.error(result); alert(result); } }).fail(function() { alert("ERREUR SERVEUR ! (modal view client - save absence)"); }); } // EDIT else { row.addClass("editable"); btnEdit.removeClass('glyphicon-edit').addClass('glyphicon-floppy-saved'); btnDel.removeClass('glyphicon-trash').addClass('glyphicon-floppy-remove'); tdDebut.html('').append(iptDebut); tdFin.html('').append(iptFin); tdRmq.html('').append(iptRmq); iptDebut.focus(); } }); btnDel.click(function(e) { e.preventDefault(); $(this).blur(); if(modalViewClient.find("tr.editable").length>0 && !row.hasClass("editable")) return; // CANCEL if(row.hasClass("editable")) { if(ref == 'new') { list = row.parent(); row.remove(); if(list.find("tr:not(.nullChild)").length==0) list.find("tr.nullChild").removeClass("hide"); } else { iptDebut.blur(); iptFin.blur(); iptRmq.blur(); tdDebut.html(oldDebut); tdFin.html(oldFin); tdRmq.html(oldRmq); row.removeClass("editable"); btnEdit.removeClass('glyphicon-floppy-saved').addClass('glyphicon-edit'); btnDel.removeClass('glyphicon-floppy-remove').addClass('glyphicon-trash'); } } // DELETE else { if(!ref>0) return; if(confirm("Êtes-vous sur de vouloir supprimer cette absence ?")) { $.post(clientsConf.baseURL, { 'action': "delete_client_absence", 'absence_ref': ref }, function(result) { if(parseInt(result)>0) modalViewClient_loadTabAbsences(); else { console.error(result); alert(result); } }).fail(function() { alert("ERREUR SERVEUR ! (modal view client - delete absence)"); }); } } }); if(ref == "new") row.find("button.btnEditAbsence").click(); } /***** MODAL FORM ADD/EDIT *****/ function modalFormClient_init(modal) { modal.find("form").preventFormValidation(); // NOM initUpperCaseInput(modal.find("input[name=nom]"), null, function() { $(this).blur(); }); // PRENOM initFirstUpperCaseInput(modal.find("input[name=prenom]"), null, function() { $(this).blur(); }); // TEL initTelInput(modal.find("input[name=tel]"), true, "libs/intl-tel-input-15.0.0/build/js/utils.js"); // EMAIL initEmailInput(modal.find("input[name=email]")); } function modalFormClient_loadDatas(modal,id) { $.post(clientsConf.baseURL, { 'ref' : id, 'action' : 'getDatas' }, function(jsonTxt) { var datas = JSON.parse(jsonTxt); modal.find("input[name=nom]").val(datas.nom); modal.find("input[name=prenom]").val(datas.prenom); modal.find("input[name=tel]").val(datas.tel); modal.find("input[name=email]").val(datas.email); if(modal) modal.modal('show'); }).fail(function() { alert("("+clientsConf.type+" - load datas in modal form)"); }); } function modalFormClient_clear(modal) { modal.removeAttr("edit_id"); modal.find("div.modaLoader").removeClass("show"); modal.find("input[name=nom]").val(""); modal.find("input[name=prenom]").val(""); modal.find("input[name=tel]").val(""); modal.find("input[name=email]").val(""); } function modalFormClient_getDatas(modal) { var datas = { 'nom' : modal.find("input[name=nom]").val(), 'prenom' : modal.find("input[name=prenom]").val(), 'tel' : modal.find("input[name=tel]").intlTelInput("isValidNumber") ? modal.find("input[name=tel]").val() : "", 'email' : validateEmail(modal.find("input[name=email]").val()) ? modal.find("input[name=email]").val() : "" }; return datas; } function modalFormClient_checkDatas(datas) { if(datas.nom=="" || datas.prenom=="") { alert("ERREUR : au minimum, un nom et un prénom doivent être renseigné !"); return false; } return true; } /***** ADD *****/ function initAddClient() { // INIT FORM modalFormClient_init(modalAddClient); // INIT ADD BTN modalForm_initBtnAdd( $(clientsConf.add_btnSelector), // BTN ADD modalAddClient, // MODAL modalFormClient_clear // CLEAR FORM FUNCTION ); // INIT SAVE BTN modalForm_initBtnSaveAdd( modalAddClient.find(".btnSave"), // BTN SAVE clientsConf.type, // ADD TYPE modalAddClient, // MODAL modalFormClient_getDatas, // GET FORM DATAS FUNCTION modalFormClient_checkDatas, // CHECK FORM DATAS FUNCTION clientsConf.baseURL // SAVE URL ); // CANCEL modalAddClient.on('hidden.bs.modal', function (e) { modalFormClient_clear(modalAddClient); }); } /***** EDIT *****/ function initEditClient() { // INIT FORM modalFormClient_init(modalEditClient); // INIT EDIT BTNs var initBtnFct = function() { modalForm_initBtnEdit( $(clientsConf.edit_btnSelector), // BTNs modalEditClient, // MODAL modalFormClient_clear, // CLEAR FUNCTION modalFormClient_loadDatas // LOAD DATAS FUNCTION )}; registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct ); initBtnFct(); // INIT SAVE EDIT BTN modalForm_initBtnSaveEdit( modalEditClient.find(".btnSave"), // BTN SAVE clientsConf.type, // EDIT TYPE modalEditClient, // MODAL modalFormClient_getDatas, // GET FORM DATAS FUNCTION modalFormClient_checkDatas, // CHECK FORM DATAS FUNCTION clientsConf.baseURL // SAVE URL ); // CANCEL modalEditClient.on('hidden.bs.modal', function (e) { modalFormClient_clear(modalEditClient); }); } /***** DELETE *****/ function initDeleteClient() { // INIT DELETE BTNs var initBtnFct = function() { modalForm_initBtnDelete( $(clientsConf.delete_btnSelector), // BTNs modalDeleteClient, // MODAL modalDeleteClient_clear, // CLEAR MODAL FUNCTION modalDeleteClient_loadDatas // LOAD DATAS FUNCTION )}; registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct ); initBtnFct(); // INIT SAVE DELETE BTN modalForm_initBtnSaveDelete( modalDeleteClient.find(".btnSave"), // BTN SAVE clientsConf.type, // DELETE TYPE modalDeleteClient, // MODAL false, // GET FORM DATAS FUNCTION false, // CHECK FORM DATAS FUNCTION clientsConf.baseURL // SAVE URL ); // CANCEL modalDeleteClient.on('hidden.bs.modal', function (e) { modalDeleteClient_clear(); }); } function modalDeleteClient_loadDatas(btn, id) { modalDeleteClient.find('b.name').html( btn.attr('nom') ); modalDeleteClient.modal('show'); } function modalDeleteClient_clear() { modalDeleteClient.removeAttr("delete_id"); modalDeleteClient.find('b.name').html(""); }