// SETTINGS var livraisonsConf = { type : "livraison", baseURL : "livraisons.php", // LIST list_selector : "#livraisonsList", // FILTRES filtres_selector : "#livraisonsSearch select", clear_filtres_selector : "#livraisonsSearch button.btnClearFiltres", // VIEW view_modalSelector : "#modalViewLivraison", view_btnSelector : ".btnViewLivraison", // ADD add_modalSelector : "#modalAddLivraison", add_btnSelector : "#btnAddLivraison", // EDIT edit_modalSelector : "#modalEditLivraison", edit_btnSelector : ".btnEditLivraison", // COPY copy_btnSelector : ".btnCopyLivraison", // ARCHIVE archive_modalSelector : "#modalArchiveLivraison", archive_btnSelector : ".btnArchiveLivraison", unarchive_btnSelector : ".btnUnarchiveLivraison", // DELETE delete_modalSelector : "#modalDeleteLivraison", delete_btnSelector : ".btnDeleteLivraison", } var legumeTarifUnitesAccronymes = { 'kg' : 'kg', 'pièce' : 'pc', 'botte' : 'bt' } var modalFormLivraison_copyCompoOrigin = false; // MODALS var modalViewLivraison = false; var modalAddLivraison = false; var modalEditLivraison = false; var modalArchiveLivraison = false; var modalDeleteLivraison = false; $(document).ready( function() { // LIST LOADER initListProgressLoad($(livraisonsConf.list_selector), livraisonsConf.baseURL, livraisonsConf.type+" list"); // SEARCH / FILTRES $(livraisonsConf.filtres_selector).initFiltreSelect(); initBtnClearFiltres( $(livraisonsConf.clear_filtres_selector) ); // VIEW modalViewLivraison = $(livraisonsConf.view_modalSelector); if(modalViewLivraison.length>0) { initViewLivraison(); // VIEW REQUEST var id = getUrlParameter("ref"); if(id!==false && parseInt(id)>0 && current_page == "livraisons") { modalViewLivraison_clear(modalViewLivraison); modalViewLivraison_loadDatas(modalViewLivraison, id); } } // ADD modalAddLivraison = $(livraisonsConf.add_modalSelector); if(modalAddLivraison.length>0) initAddLivraison(); // EDIT modalEditLivraison = $(livraisonsConf.edit_modalSelector); if(modalEditLivraison.length>0) initEditLivraison(); // COPY if(modalAddLivraison.length>0) initCopyLivraison(); // ARCHIVE modalArchiveLivraison = $(livraisonsConf.archive_modalSelector); if(modalArchiveLivraison.length>0) initArchiveLivraison(); // DELETE modalDeleteLivraison = $(livraisonsConf.delete_modalSelector); if(modalDeleteLivraison.length>0) initDeleteLivraison(); }); /***** MODAL VIEW *****/ function initViewLivraison() { // INIT VIEW BTNs var initBtnFct = function() { modalForm_initBtnView( $(livraisonsConf.view_btnSelector), // BTNs modalViewLivraison, // MODAL modalViewLivraison_clear, // CLEAR FUNCTION modalViewLivraison_loadDatas // LOAD DATAS FUNCTION )}; registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct ); initBtnFct(); // TABS modalForm_initTabs(modalViewLivraison); // BTN PRINT modalViewLivraison_initPrintBtn(); // CANCEL modalViewLivraison.on('hidden.bs.modal', function(e) { modalViewLivraison_clear(modalViewLivraison); }); // EMPECHE LA FERMETURE SI ON EST ENTRAIN D'EDITER UN COMPLEMENT modalViewLivraison.on('hide.bs.modal', function(e) { if(modalViewLivraison.find("input.editable").length>0) e.preventDefault(); }); } function modalViewLivraison_loadDatas(modal, id) { $.post(livraisonsConf.baseURL, { 'ref' : id, 'action' : 'getDatas' }, function(jsonTxt) { var datas = JSON.parse(jsonTxt); modal.find("small.db_ref > span").html(datas.ref); // PRINT EMARGEMENT PAR LIEU if(Object.values(datas.lieux).length>1) { for(l in datas.lieux) { li = $('
'); a = $(''); a.html("Emargement - "+datas.lieux[l].nom).attr("lieu", l); li.append(a); li.insertAfter(modal.find("#print_emargement")); } modalViewLivraison_initPrintBtn(); } modal.find("td.groupe").html(datas.paniers_groupe_nom); modal.find("td.date").html(datas.date_print); modal.find("td.quinz_groupe").html(datas.quinz_groupe); if(datas.paniers_contrats.length>0) { // PANIERS modalViewLivraison_loadPaniers(); // COMPO if(datas.legumes.length>0) { $.post(livraisonsConf.baseURL, { 'ref' : id, 'action' : 'modalView_getTab', 'tab' : 'compo' }, function(result) { modal.find("div.tabCompo").html(result); }).fail(function() { alert("ERREUR SERVEUR (modal view livraison - load tab compo)"); }); } else { modal.find("ul.modalLivraisonTabs li[tab=tabCompo]").addClass("hide"); modal.find("div.btnPrint li[print_type=compo]").addClass("hide"); } // LEGUMES if(Object.keys(datas.total_legumes.legumes).length>0) { $.post(livraisonsConf.baseURL, { 'ref' : id, 'action' : 'modalView_getTab', 'tab' : 'legumes' }, function(result) { modal.find("div.tabLegumes").html(result); }).fail(function() { alert("ERREUR SERVEUR (modal view livraison - load tab legumes)"); }); } else { modal.find("ul.modalLivraisonTabs li[tab=tabLegumes]").addClass("hide"); modal.find("div.btnPrint li[print_type=legumes]").addClass("hide"); } } else { modal.find("ul.modalLivraisonTabs li:not([tab=tabGeneral])").addClass("hide"); modal.find("div.btnPrint").addClass("hide"); } modal.modal('show'); }).fail(function() { alert("("+livraisonsConf.type+" - load modal view)"); }); } function modalViewLivraison_clear(modal) { modal.removeAttr("view_id"); modalForm_resetTabs(modal); modal.find("small.db_ref > span").html(""); modal.find("div.btnPrint li").removeClass("hide"); modal.find(".print_emargement_par_lieu").remove(); modal.find("td.groupe").html(""); modal.find("td.date").html(""); modal.find("td.quinz_groupe").html(""); modal.find("div.tabPaniers").html("aucun panier"); modal.find("div.tabCompo").html("aucun panier"); modal.find("div.tabLegumes").html("aucun légume"); } function modalViewLivraison_loadPaniers() { $.post(livraisonsConf.baseURL, { 'ref' : modalViewLivraison.attr("view_id"), 'action' : 'modalView_getTab', 'tab' : 'paniers', 'complements' : 1 }, function(result) { modalViewLivraison.find("div.tabPaniers").html(result); // COMPLEMENT modalViewLivraison.find("div.tabPaniers tr:not(.absent) td.complement").each(function(n,e) { $(this).addClass("editable").dblclick(function(e) { e.preventDefault(); $(this).parent().addClass("editing"); val = parseFloat( $(this).html() ); var ipt = $(""); $(this).html("").append(ipt); initFloatInput(ipt); ipt.keypress( function(event) { if(event.keyCode==13) { $(this).addClass("saving"); modalViewLivraison_saveComplement( $(this) ); } }) if(val>0) ipt.val(val).attr("old_value", val); ipt.blur(function(e) { $(this).parent().parent().removeClass("editing"); if( $(this).hasClass("saving") ) return; if( parseFloat($(this).attr("old_value"))>0 ) ipt.parent().html(number_format(parseFloat($(this).attr("old_value")), 2)+" €"); else ipt.parent().html(".") }); ipt.select(); }); }); // COMPLEMENT REGLE modalViewLivraison.find("div.tabPaniers tr:not(.absent) td.complement_regle").each(function(n,e) { $(this).addClass("editable").dblclick(function(e) { e.preventDefault(); $(this).parent().addClass("editing"); val = parseFloat( $(this).html() ); var ipt = $(""); $(this).html("").append(ipt); initFloatInput(ipt); ipt.keypress( function(event) { if(event.keyCode==13) { $(this).addClass("saving"); modalViewLivraison_saveComplement( $(this) ); } }) if(val>0) ipt.val(val).attr("old_value", val); ipt.blur(function(e) { $(this).parent().parent().removeClass("editing"); if( $(this).hasClass("saving") ) return; if( parseFloat($(this).attr("old_value"))>0 ) ipt.parent().html(number_format(parseFloat($(this).attr("old_value")), 2)+" €"); else ipt.parent().html(".") }); ipt.select(); }); }); }).fail(function() { alert("ERREUR SERVEUR (modal view livraison - load tab paniers)"); }); } function modalViewLivraison_saveComplement(ipt) { var td = ipt.parent(); var tr = td.parent(); val = parseFloat( ipt.val() ); old_value = parseFloat( ipt.attr("old_value") ); if(val>0 || val!=old_value) { var datas = { action : "saveComplement", livraison : parseInt( modalViewLivraison.attr("view_id") ), contrat : parseInt( tr.attr("contrat") ) } if(ipt.hasClass("complement")) datas.complement = val; else datas.complement_regle = val; $.post(livraisonsConf.baseURL, datas, function(result) { if(parseInt(result)==1) modalViewLivraison_loadPaniers(); else { console.error(result); alert(result); } }).fail(function() { alert("ERREUR SERVEUR (modal view livraison - save complement)"); }); } else td.html("."); } function modalViewLivraison_initPrintBtn() { modalViewLivraison.find("div.btnPrint a").unbind("click").click(function(e) { e.preventDefault(); $(this).blur(); id = parseInt( modalViewLivraison.attr("view_id") ); if(!id>0) return; url = livraisonsConf.baseURL+"?ref="+id+"&action=getPDF&type="+$(this).attr("print_type"); if(isDefined($(this).attr("lieu"))) url += "&lieu="+$(this).attr("lieu"); window.open(url, '_blank'); }); } /***** MODAL FORM ADD/EDIT *****/ function modalFormLivraison_init(modal) { modal.find("form").preventFormValidation(); modalForm_initTabs(modal); // TAB GENERAL modal.find("select[name=paniers_groupe]").change(function(e) { $(this).blur(); modalFormLivraison_loadPaniers(modal, []); }); modal.find("input[name=date]").on("blur change", function(e) { modalFormLivraison_loadPaniers(modal, []); }); modal.find("input[name=date]").keydown(function(e) { if(e.keyCode==13) { e.preventDefault(); $(this).blur(); } }) modal.find("select[name=quinz_groupe]").change(function(e) { $(this).blur(); modalFormLivraison_loadPaniers(modal, []); }); modal.find("button.btnLoadNextQuinzGroup").click(function(e) { e.preventDefault(); $(this).blur(); $datas = { 'action' : 'last_quinz_groupe', 'groupe' : modal.find("select[name=paniers_groupe]").val(), 'date' : modal.find("input[name=date]").val() }; edit_id = parseInt(modal.attr("edit_id")); if(edit_id>0) $datas.ignore = edit_id; $.post(livraisonsConf.baseURL, $datas, function(result) { $grp = "A"; if(result == "A") $grp = "B"; else if(result != "B") return; modal.find("select[name=quinz_groupe]").val($grp); modalFormLivraison_loadPaniers(modal, []); }).fail(function() { alert("ERREUR SERVEUR (modal form livraison - get next groupe)"); }); }); modal.find("button.btnLivraisonEnableEditField").click(function(e) { e.preventDefault(); $(this).blur(); $(this).parent().find(".form-control, .btnLoadNextQuinzGroup").each( function(n,e) { $(this).prop("disabled", !$(this).prop("disabled")); }); }); // TAB PANIERS modal.find("thead.paniersList td.status").click(function(e) { var allChecked = true; modal.find("tbody.paniersList input[name='status']").each(function(n,e) { if(!$(this).prop("checked")) allChecked = false; }); if(allChecked) modal.find("tbody.paniersList input[name='status']").prop("checked", false); else modal.find("tbody.paniersList input[name='status']").prop("checked", true); }); modalFormLivraison_clear(modal); } function modalFormLivraison_loadDatas(modal,id,copy) { $.post(livraisonsConf.baseURL, { 'ref' : id, 'action' : 'getDatas' }, function(jsonTxt) { var datas = JSON.parse(jsonTxt); modal.find("select[name=paniers_groupe]").val(datas.paniers_groupe_ref); modal.find("input[name=date]").val(datas.date); modal.find("select[name=quinz_groupe]").val(datas.quinz_groupe); if(copy!==true) { modal.find("div.tabGeneral .form-control, .btnLoadNextQuinzGroup").prop("disabled", true); modal.find("button.btnLivraisonEnableEditField").removeClass("hide"); } modalFormLivraison_loadPaniers(modal, datas.paniers_contrats); modalFormLivraison_udpateCompo(modal, datas.legumes); if(modal) modal.modal('show'); }).fail(function() { alert("("+livraisonsConf.type+" - load datas in modal form)"); }); } function modalFormLivraison_clear(modal) { modal.removeAttr("edit_id"); modal.find("div.modaLoader").removeClass("show"); modalForm_resetTabs(modal); modal.find("ul.formTabsBtns li:not(.general)").addClass("hide"); modal.find("select[name=paniers_groupe]").val(""); modal.find("input[name=date]").val(getTodayDate("yyyy-mm-dd")); modal.find("select[name=quinz_groupe]").val("A"); modal.find("div.tabGeneral .form-control, .btnLoadNextQuinzGroup").prop("disabled", false); modal.find("button.btnLivraisonEnableEditField").addClass("hide"); modalFormLivraison_clearPaniers(modal); modalFormLivraison_clearCompo(modal); } // LIVRAISON - PANIERS function modalFormLivraison_loadPaniers(modal, paniers) { datas = { 'action' : 'paniers_eligibles', 'paniers_groupe' : parseInt( modal.find("select[name=paniers_groupe]").val() ), 'date' : modal.find("input[name=date]").val(), 'quinz_groupe' : modal.find("select[name=quinz_groupe]").val() }; if(datas.paniers_groupe>0 && datas.date != "" && datas.quinz_groupe!="") { // OLD PANIERS var oldPaniersStates = {}; modal.find("div.tabPaniers table.panier tbody tr.panier").each(function(e) { oldPaniersStates[ $(this).attr("contrat") ] = $(this).find("input[name=status]").prop("checked"); }); modalFormLivraison_clearPaniers(modal); // SHOW TABS modal.find("ul.formTabsBtns li:not(.general)").removeClass("hide"); $.post(livraisonsConf.baseURL, datas, function(result) { modal.find("div.tabPaniers").html(result); $('[data-toggle="tooltip"]').tooltip(); // APPLY CB STATUS modal.find("div.tabPaniers table.panier tbody tr.panier").each(function(n,e) { ref = parseInt($(this).attr("contrat")); if($(this).hasClass('absent')) return; state = true; if(paniers.length>0) state = paniers.includes(ref); else if(oldPaniersStates.hasOwnProperty(ref)) state = oldPaniersStates[ref]; $(this).find("input[name=status]").prop("checked", state); }); // INIT CHECKBOX modal.find("div.tabPaniers table.panier input[name=status]").click(function(e) { e.stopPropagation(); $(this).blur(); modalFormLivraison_updateNbPaniersType(modal); }); // INIT TR CLICK modal.find("div.tabPaniers table.panier tr.panier").click(function(e) { $(this).find("input[name=status]").click(); }); // CHECK GROUP modal.find("div.tabPaniers tr.lieuTitre").click(function(e) { var tr = $(this).parent().parent().find("tr.panier:not(.absent)"); if( tr.find("input:not(:checked)").length>0 ) tr.find("input:not(:checked)").prop("checked", true); else tr.find("input").prop("checked", false); }); modal.find("div.tabPaniers tr.panierTitre").click(function(e) { var tr = $(this).parent().find("tr.panier:not(.absent)[type_ref="+$(this).attr("type_ref")+"]"); if( tr.find("input:not(:checked)").length>0 ) tr.find("input:not(:checked)").prop("checked", true); else tr.find("input").prop("checked", false); }); // UPDATE NB PANIERS modalFormLivraison_updateNbPaniersType(modal); }).fail(function() { alert("ERREUR SERVEUR (modal form livraison - load paniers eligibles)"); }); } // HIDE TABS else modal.find("ul.formTabsBtns li:not(.general)").addClass("hide"); } function modalFormLivraison_clearPaniers(modal) { modal.find("div.tabPaniers").html('aucun panier éligible'); } function modalFormLivraison_calcNbPanierType(modal) { var calc = {}; modal.find("div.tabPaniers table.panier tbody tr.panier").each(function(e) { if($(this).find("input[name=status]").prop("checked")) { ref = parseInt($(this).attr("type_ref")); nom = $(this).attr("type_nom"); if(ref in calc == false) { calc[ref] = { "ref" : ref, "nom" : nom, "nb" : 1 }; } else calc[ref].nb += 1; } }); return calc; } function modalFormLivraison_updateNbPaniersType(modal) { // CHAQUE LIEU modal.find("div.tabPaniers table.panier").each(function(n,e) { var table = $(this); var nbTotalPaniers = 0; // CHAQUE TYPE DE PANIER table.find("tr.panierTitre").each(function(n,e) { var trTitre = $(this); var nbPaniersType = 0; var pTypeRef = $(this).attr('type_ref'); // CHAQUE LIGNE table.find('tr.panier[type_ref='+pTypeRef+']').each(function(n,e) { if($(this).find("input[name=status]").prop("checked")) { nbPaniersType++; nbTotalPaniers++; } }); trTitre.find("th > small").html("(x"+nbPaniersType+")"); }); table.find("tr.lieuTitre th.nb_total_paniers").html(nbTotalPaniers+" panier"+(nbTotalPaniers>1?"s":"")); }); modalFormLivraison_udpateCompo(modal); } // LIVRAISON - COMPO function modalFormLivraison_udpateCompo(modal, paniersTypes) { // GET PANIERS TYPES LIST if(typeof(paniersTypes)!="object") paniersTypes = modalFormLivraison_getPaniersCompo(modal); // CLEAR COMPO modalFormLivraison_clearCompo(modal); // CREATE PANIERS $.each(paniersTypes, function(n,e) { modalFormLivraison_addPanierTypeCompo(modal, e); modal.find("div.tabCompo span.nullChild").addClass("hide"); }); // UPDATE TOTAL modalFormLivraison_updateTotalLegumes(modal); } function modalFormLivraison_addPanierTypeCompo(modal, datas) { var table = $("