paniers/public_html_admin/js/livraisons.js

893 lines
36 KiB
JavaScript

// SETTINGS
var livraisonsConf = {
type : "livraison",
baseURL : "livraisons.php",
// LIST
list_selector : "#livraisonsList",
// FILTRES
filtres_selector : "#livraisonsSearch select",
// 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();
// 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.find("div.btnPrint a").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");
window.open(url, '_blank');
});
// CANCEL
modalViewLivraison.on('hidden.bs.modal', function() { modalViewLivraison_clear(modalViewLivraison); });
}
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);
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
$.post(livraisonsConf.baseURL, { 'ref' : id, 'action' : 'modalView_getTab', 'tab' : 'paniers' }, function(result) {
modal.find("div.tabPaniers").html(result);
}).fail(function() { alert("ERREUR SERVEUR (modal view livraison - load tab paniers)"); });
// 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("td.groupe").html("");
modal.find("td.date").html("");
modal.find("td.quinz_groupe").html("");
modal.find("div.tabPaniers").html("<span class='nullChild'>aucun panier</span>");
modal.find("div.tabCompo").html("<span class='nullChild'>aucun panier</span>");
modal.find("div.tabLegumes").html("<span class='nullChild'>aucun légume</span>");
}
/***** MODAL FORM ADD/EDIT *****/
function modalFormLivraison_init(modal) {
modal.find("modal").on("submit", function(e) { e.preventDefault(); });
modalForm_initTabs(modal);
// TAB GENERAL
modal.find("select[name=paniers_groupe]").change(function(e) {
$(this).blur();
modalFormLivraison_loadPaniers(modal, []);
modalFormLivraison_loadNextGroupe(modal);
});
modal.find("input[name=date]").on("blur change", function(e) {
modalFormLivraison_loadPaniers(modal, []);
modalFormLivraison_loadNextGroupe(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, []);
});
// 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) {
$.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);
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("select[name=paniers_groupe]").val("");
modal.find("input[name=date]").val(getTodayDate("yyyy-mm-dd"));
modal.find("select[name=quinz_groupe]").val("A");
modalFormLivraison_clearPaniers(modal);
modalFormLivraison_clearCompo(modal);
}
// LIVRAISON - PANIERS
function modalFormLivraison_loadNextGroupe(modal) {
$datas = {
'action' : 'last_quinz_groupe',
'groupe' : modal.find("select[name=paniers_groupe]").val(),
'date' : modal.find("input[name=date]").val()
};
$.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);
}).fail(function() { alert("ERREUR SERVEUR (modal form livraison - get next groupe)"); });
}
function modalFormLivraison_loadPaniers(modal, 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);
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!="") {
$.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)"); });
}
}
function modalFormLivraison_clearPaniers(modal) {
modal.find("div.tabPaniers").html('<span class="nullChild">aucun panier éligible</span>');
}
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 = $("<table class='panier'></table>")
.attr("ref", datas.ref)
.attr("modal", modal.attr('id'));
// HEADER
var thead = $("<thead></thead>");
var trT = $("<tr class='title'></tr>");
trT.append( $("<th class='titre' colspan='3'></th>").html(datas.nom+" <small>(x"+datas.nb+")</small>") );
trT.append( $("<th class='total' colspan='2'>TOTAL :</th>") );
trT.append( $("<th class='total montant'>0.00</th>") );
trT.append( $("<th class='total unite'>€</th>") );
btnCopyCompo = $("<button class='btn btn-xs btn-default glyphicon glyphicon-copy btnCopyCompo'></button>");
trT.append( $("<th class='action'></th>").append(btnCopyCompo) );
thead.append(trT);
btnCopyCompo.click(function(e) {
e.preventDefault(); $(this).blur();
modalFormLivraison_copyPanierTypeCompo(modal, table, $(this));
})
var trH = $("<tr class='head'></tr>");
trH.append( $("<th class='nom'>légume</th>") );
trH.append( $("<th class='tarif' colspan='2'>tarif</th>") );
trH.append( $("<th class='quantite' colspan='2'>quantité</th>") );
trH.append( $("<th class='montant' colspan='2'>montant</th>") );
btnAddLegume = $("<button class='btn btn-xs btn-info glyphicon glyphicon-plus btnAddLegume'></button>");
trH.append( $("<th class='action'></th>").append(btnAddLegume) );
thead.append(trH);
table.append(thead);
btnAddLegume.click(function(e) { e.preventDefault(); $(this).blur(); modalFormLivraison_addPanierTypeCompoLegume(modal, table, "new"); });
// LEGUMES
var tbody = $("<tbody></tbody>");
var trNull = $("<tr class='nullChild hide'><td colspan='8'>aucun légume</td></tr>");
tbody.append(trNull);
table.append(tbody);
if(datas.legumes && datas.legumes.length>0) {
datas.legumes.forEach(l => { modalFormLivraison_addPanierTypeCompoLegume(modal, table, l); });
modalFormLivraison_updateMontantTotalPanier(table);
}
else trNull.removeClass("hide");
modal.find("div.tabCompo").append(table);
}
function modalFormLivraison_addPanierTypeCompoLegume(modal, panier, datas) {
panier.find("tbody tr.nullChild").addClass("hide");
/*** CREATE ***/
var trL = $("<tr class='legume editable'></tr>");
tdNom = $("<td class='nom'></td>");
tdTarif = $("<td class='tarif'>0.00</td>");
tdTarifUnit = $("<td class='tarif_unite unite'>€/kg</td>");
tdQ = $("<td class='quantite'>0.000</td>");
tdQunit = $("<td class='quantite_unite unite'>kg</td>");
tdMontant = $("<td class='montant'>0.00</td>");
tdMunit = $("<td class='montant_unite unite'>€</td>");
btnDel = $("<button class='btn btn-xs btn-link glyphicon glyphicon-trash btnDeleteLegume'></button>");
tdAct = $("<td class='action'></td>").append(btnDel);
trL.append(tdNom).append(tdTarif).append(tdTarifUnit).append(tdQ).append(tdQunit).append(tdMontant).append(tdMunit).append(tdAct);
/*** LOAD DATAS ***/
if(datas!=null && typeof(datas)=="object") {
trL.attr('ref', datas.ref);
unite = legumeTarifUnitesAccronymes[datas.tarif_unite];
tdNom.html(datas.nom)
.attr('ref', datas.ref)
.attr('tarif_ref', datas.tarif_ref)
.attr('tarif_prix', datas.tarif_prix)
.attr('tarif_unite', datas.tarif_unite);
tdTarif.html(number_format(datas.tarif_prix,2));
tdTarifUnit.html("€/"+unite);
tdQ.html(number_format(datas.quantite,3));
tdQ.attr("unite", datas.tarif_unite);
tdQunit.html(unite);
tdMontant.html(number_format(datas.tarif_prix * datas.quantite, 2));
modalFormLivraison_refreshPanierTypeCompoLegumeTarif(modal, panier, trL);
}
panier.find("tbody").append(trL);
/*** INITIALIZE ***/
tdNom.dblclick(function(e) {
var ipt = $("<input class='editable legume' type='text'>").val($(this).html());
ipt.attr('ref', $(this).attr('ref'))
.attr('tarif_ref', $(this).attr('tarif_ref'))
.attr('tarif_prix', $(this).attr('tarif_prix'))
.attr('tarif_unite', $(this).attr('tarif_unite'));
$(this).html("").append(ipt);
initAutocompleteInput(
modal, // FORMULAIRE
ipt, // INPUT
"legumes.php", // URL
'autocomplete_list', // REQUEST ACTION
"(modal form livraison - compo legume autocomplete)", // ERROR CONTEXT
// REQUEST DATAS
function(modal, ipt, datas) {
datas.groupe = modal.find("select[name=paniers_groupe]").val();
datas.date = modal.find("input[name=date]").val();
return datas;
},
// SELECT
function(modal, ipt, datas) {
ipt.val( datas.value )
.attr('ref', datas.ref)
.attr('tarif_ref', datas.tarif_ref)
.attr('tarif_prix', datas.tarif_prix)
.attr('tarif_unite', datas.tarif_unite)
.blur();
},
// CLEAR
function(modal, ipt) {
ipt.val("")
.removeAttr('ref')
.removeAttr('tarif_ref')
.removeAttr('tarif_prix')
.removeAttr('tarif_unite');
},
// BLUR
function(modal, ipt) {
val = ipt.val();
ref = parseInt( ipt.attr("ref") );
tarif_ref = parseInt( ipt.attr("tarif_ref") );
tarif_prix = parseFloat( ipt.attr("tarif_prix") );
tarif_unite = ipt.attr("tarif_unite");
unite = legumeTarifUnitesAccronymes[tarif_unite];
if(ref>0 && tarif_ref>0) {
var td = ipt.parent(); var tr = td.parent();
tr.attr("ref", ref);
td.html( val ).attr('ref', ref);
modalFormLivraison_loadPanierTypeCompoLegumeTarif(tr, tarif_ref, tarif_prix, tarif_unite);
tr.find("td.quantite").dblclick();
}
else {
beep(50, 800, null, "square");
ipt.focus();
}
}
);
ipt.select();
});
tdQ.dblclick(function(e) {
val = $(this).html();
unite = $(this).attr("unite");
if(unite in legumeTarifUnitesAccronymes) {
var ipt = $("<input class='editable quantite' type='text'>");
$(this).html("").append(ipt);
initFloatInput(ipt);
ipt.val( parseFloat(val) );
ipt.blur(function(e) {
var td = $(this).parent();
val = parseFloat( $(this).val() );
td.html( number_format(val, 3) );
td.parent().updateCompoLegumeMontant();
});
ipt.select();
}
});
btnDel.click(function(e) {
e.preventDefault();
trL.remove();
if(panier.find("tbody tr.legume").length==0) panier.find("tbody tr.nullChild").removeClass("hide");
modalFormLivraison_updateMontantTotalPanier(panier);
})
/*** START ***/
if(datas == "new") tdNom.dblclick();
}
function modalFormLivraison_loadPanierTypeCompoLegumeTarif(row, tarif_ref, tarif_prix, tarif_unite) {
unite = legumeTarifUnitesAccronymes[tarif_unite];
row.find("td.nom").attr('tarif_ref', tarif_ref)
.attr('tarif_prix', tarif_prix)
.attr('tarif_unite', tarif_unite);
row.find("td.tarif").html(number_format(tarif_prix,2)).attr("ref", tarif_ref);
row.find("td.tarif_unite").html("€/"+unite);
q = row.find("td.quantite").attr('unite', tarif_unite).html();
if(tarif_unite=="kg") row.find("td.quantite").html( number_format(q,3) );
else row.find("td.quantite").html( parseInt(q) );
row.find("td.quantite_unite").html(unite);
row.updateCompoLegumeMontant();
}
function modalFormLivraison_refreshPanierTypeCompoLegumeTarif(modal, panier, row) {
return;
var datas = {
ref : parseInt(row.attr('ref')),
action : 'getTarif',
groupe : modal.find("select[name=paniers_groupe]").val(),
date : modal.find("input[name=date]").val()
}
$.post("legumes.php", datas, function(result) {
tarif = JSON.parse(result);
tdNom = row.find("td.nom");
if(typeof(tarif)=== "object" && tdNom.length>0) {
if(parseInt(tarif.ref) != parseInt(tdNom.attr('tarif_ref'))) modalFormLivraison_loadPanierTypeCompoLegumeTarif(row, tarif.ref, tarif.prix, tarif.unite);
}
}).fail(function() { alert("ERREUR SERVEUR (modal form livraison - get next groupe)"); });
}
function modalFormLivraison_copyPanierTypeCompo(modal, panier, btn) {
// COPY
if(!modalFormLivraison_copyCompoOrigin>0) {
var compo = modalFormLivraison_getPanierCompoLegumes(modal, panier.attr('ref'));
if(!compo.length>0) return;
modalFormLivraison_copyCompoOrigin = panier.attr("ref");
modal.find(".btnCopyCompo").removeClass("btn-default").addClass("btn-warning")
.removeClass("glyphicon-copy").addClass("glyphicon-paste");
btn.removeClass("btn-warning").addClass("btn-info")
.removeClass("glyphicon-paste").addClass("glyphicon-remove");
}
// PASTE
else {
if(modalFormLivraison_copyCompoOrigin != panier.attr("ref")) {
var oldCompo = modalFormLivraison_getPanierCompoLegumes(modal, panier.attr('ref'));
if(oldCompo.length>0) { if(!confirm("Etês-vous sûr de vouloir remplacer le contenu de ce panier ?")) return; }
var legumes = modalFormLivraison_getPanierCompoLegumes(modal, modalFormLivraison_copyCompoOrigin);
// CLEAR
panier.find("tbody").children().remove();
// PASTE
legumes.forEach(l => { modalFormLivraison_addPanierTypeCompoLegume(modal, panier, l); });
modalFormLivraison_updateMontantTotalPanier(panier);
}
modalFormLivraison_copyCompoOrigin = false;
modal.find(".btnCopyCompo").removeClass("btn-warning").removeClass("btn-info").addClass("btn-default")
.removeClass("glyphicon-paste").removeClass("glyphicon-remove").addClass("glyphicon-copy");
}
}
$.fn.updateCompoLegumeMontant = function() {
q = parseFloat($(this).find("td.quantite").html());
t = parseFloat($(this).find("td.tarif").html());
$(this).find("td.montant").html( number_format(q * t, 2) );
// UPDATE TOTAL
panier = $(this).parent().parent();
modalFormLivraison_updateMontantTotalPanier(panier);
panier.find(".btnAddLegume").focus();
};
function modalFormLivraison_updateMontantTotalPanier(panier) {
var total = 0;
panier.find("tr.legume td.montant").each(function(n,e) { total += parseFloat($(this).html()); })
panier.find("th.total.montant").html(number_format(total, 2));
modal = $("#"+panier.attr('modal'));
if(modal.length>0) modalFormLivraison_updateTotalLegumes(modal);
}
function modalFormLivraison_clearCompo(modal) {
modal.find("div.tabCompo table.panier").remove();
modal.find("div.tabCompo span.nullChild").removeClass("hide");
}
// LIVRAISON - LEGUMES
function modalFormLivraison_updateTotalLegumes(modal) {
var legumes = {};
modal.find("table.legumesTotal tr.legume").remove();
modal.find("table.legumesTotal tr.nullChild").removeClass('hide');
/*** CALC TOTAL LEGUMES ***/
var paniers = modalFormLivraison_getPaniersCompo(modal);
for(r in paniers) {
p = paniers[r];
for (const l of p.legumes) {
if(l.ref in legumes) legumes[l.ref].quantite += l.quantite * p.nb;
else {
legumes[l.ref] = l;
legumes[l.ref].quantite = l.quantite * p.nb;
}
}
}
/*** CREATE ***/
var total = 0.0;
for(ref in legumes) {
l = legumes[ref];
unite = legumeTarifUnitesAccronymes[l.tarif_unite];
trL = $("<tr class='legume'></tr>");
tdNom = $("<td class='nom'></td>").html(l.nom);
tdTarif = $("<td class='tarif'></td>").html(number_format(l.tarif_prix,2));
tdTarifUnit = $("<td class='tarif_unite unite'></td>").html("€/"+unite);
tdQ = $("<td class='quantite'></td>").html( l.tarif_unite=="kg" ? number_format(l.quantite, 3) : l.quantite );
tdQunit = $("<td class='quantite_unite unite'></td>").html(unite);
tdMontant = $("<td class='montant'></td>").html(number_format((l.quantite * l.tarif_prix),2));
tdMunit = $("<td class='montant_unite unite'>€</td>");
trL.append(tdNom).append(tdTarif).append(tdTarifUnit).append(tdQ).append(tdQunit).append(tdMontant).append(tdMunit);
modal.find("table.legumesTotal tbody").append(trL);
modal.find("table.legumesTotal tr.nullChild").addClass('hide');
total += l.quantite * l.tarif_prix;
}
/*** MONTANT TOTAL ***/
modal.find("table.legumesTotal th.total.montant").html(number_format(total, 2));
}
// GET FORM DATAS
function modalFormLivraison_getDatas(modal) {
var datas = {
"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(),
'paniers' : JSON.stringify( modalFormLivraison_getPaniers(modal) ),
'paniersCompo' : JSON.stringify( modalFormLivraison_getPaniersCompo(modal) )
};
return datas;
}
function modalFormLivraison_getPaniers(modal) {
var paniers = [];
modal.find("div.tabPaniers table.panier tbody tr.panier").each(function(e) {
if($(this).find("input[name=status]").prop("checked")) paniers.push(parseInt($(this).attr("contrat")));
});
return paniers;
}
function modalFormLivraison_getPaniersCompo(modal) {
var paniersTypes = modalFormLivraison_calcNbPanierType(modal);
var legumes = {};
for(p in paniersTypes) {
legumes[p] = paniersTypes[p];
legumes[p].legumes = modalFormLivraison_getPanierCompoLegumes(modal, p);
}
return legumes;
}
function modalFormLivraison_getPanierCompoLegumes(modal, ref) {
var table = modal.find("table.panier[ref="+ref+"]");
var legumes = [];
table.find("tr.legume").each(function(n,e) {
datas = modalFormLivraison_getPanierCompoLegumeDatas($(this));
if(typeof(datas) == "object") legumes.push(datas);
});
return legumes;
}
function modalFormLivraison_getPanierCompoLegumeDatas(tr) {
ref = parseInt( tr.attr('ref') );
if(ref>0) {
tdNom = tr.find("td.nom");
return {
'ref' : ref,
'nom' : tdNom.html(),
'tarif_ref' : parseInt( tdNom.attr("tarif_ref") ),
'tarif_prix' : parseFloat( tdNom.attr("tarif_prix") ),
'tarif_unite' : tdNom.attr("tarif_unite"),
'quantite' : parseFloat( tr.find("td.quantite").html() )
}
}
return null;
}
function modalFormLivraison_checkDatas(datas) {
if(!datas.paniers_groupe>0 ||datas.date=="" || datas.quinz_groupe=="") {
alert("ERREUR : au minimum un groupe de contrats, une date et un groupe bi-hebdo doivent être renseigné !");
return false;
}
return true;
}
/***** ADD *****/
function initAddLivraison() {
// INIT FORM
modalFormLivraison_init(modalAddLivraison);
// INIT ADD BTN
modalForm_initBtnAdd(
$(livraisonsConf.add_btnSelector), // BTN ADD
modalAddLivraison, // MODAL
modalFormLivraison_clear // CLEAR FORM FUNCTION
);
// INIT SAVE BTN
modalForm_initBtnSaveAdd(
modalAddLivraison.find(".btnSave"), // BTN SAVE
livraisonsConf.type, // ADD TYPE
modalAddLivraison, // MODAL
modalFormLivraison_getDatas, // GET FORM DATAS FUNCTION
modalFormLivraison_checkDatas, // CHECK FORM DATAS FUNCTION
livraisonsConf.baseURL // SAVE URL
);
// CANCEL
modalAddLivraison.on('hidden.bs.modal', function (e) { modalFormLivraison_clear(modalAddLivraison); });
}
/***** COPY ARTICLE *****/
function initCopyLivraison() {
// INIT COPY BTNs
var initBtnFct = function() { modalForm_initBtnCopy(
$(livraisonsConf.copy_btnSelector), // BTNs
modalAddLivraison, // MODAL
modalFormLivraison_clear, // CLEAR FUNCTION
modalFormLivraison_loadDatas // LOAD DATAS FUNCTION
)};
registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct );
initBtnFct();
}
/***** EDIT *****/
function initEditLivraison() {
// INIT FORM
modalFormLivraison_init(modalEditLivraison);
// INIT EDIT BTNs
var initBtnFct = function() { modalForm_initBtnEdit(
$(livraisonsConf.edit_btnSelector), // BTNs
modalEditLivraison, // MODAL
modalFormLivraison_clear, // CLEAR FUNCTION
modalFormLivraison_loadDatas // LOAD DATAS FUNCTION
)};
registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct );
initBtnFct();
// INIT SAVE EDIT BTN
modalForm_initBtnSaveEdit(
modalEditLivraison.find(".btnSave"), // BTN SAVE
livraisonsConf.type, // EDIT TYPE
modalEditLivraison, // MODAL
modalFormLivraison_getDatas, // GET FORM DATAS FUNCTION
modalFormLivraison_checkDatas, // CHECK FORM DATAS FUNCTION
livraisonsConf.baseURL // SAVE URL
);
// CANCEL
modalEditLivraison.on('hidden.bs.modal', function (e) { modalFormLivraison_clear(modalEditLivraison); });
}
/***** ARCHIVE *****/
function initArchiveLivraison() {
// INIT ARCHIVE BTNs
var initBtnFct = function() { modalForm_initBtnArchive(
$(livraisonsConf.archive_btnSelector), // BTNs
modalArchiveLivraison, // MODAL
modalArchiveLivraison_clear, // CLEAR MODAL FUNCTION
modalArchiveLivraison_loadDatas // LOAD DATAS FUNCTION
)};
registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct );
initBtnFct();
// INIT UNARCHIVE BTNs
var initUnBtnFct = function() { modalForm_initBtnUnarchive(
$(livraisonsConf.unarchive_btnSelector), // BTNs
livraisonsConf.type, // DELETE TYPE
modalArchiveLivraison, // MODAL
livraisonsConf.baseURL // SAVE URL
)};
registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initUnBtnFct );
initUnBtnFct();
// INIT SAVE DELETE BTN
modalForm_initBtnSaveArchive(
modalArchiveLivraison.find(".btnSave"), // BTN SAVE
livraisonsConf.type, // DELETE TYPE
modalArchiveLivraison, // MODAL
livraisonsConf.baseURL // SAVE URL
);
// CANCEL
modalArchiveLivraison.on('hidden.bs.modal', function (e) { modalArchiveLivraison_clear(); });
}
function modalArchiveLivraison_loadDatas(btn, id) {
modalArchiveLivraison.find('b.groupe').html( btn.attr('groupe') );
modalArchiveLivraison.find('b.date').html( btn.attr('date') );
modalArchiveLivraison.modal('show');
}
function modalArchiveLivraison_clear() {
modalArchiveLivraison.removeAttr("archive_id");
modalArchiveLivraison.find('b.groupe').html("");
modalArchiveLivraison.find('b.date').html("");
}
/***** DELETE *****/
function initDeleteLivraison() {
// INIT DELETE BTNs
var initBtnFct = function() { modalForm_initBtnDelete(
$(livraisonsConf.delete_btnSelector), // BTNs
modalDeleteLivraison, // MODAL
modalDeleteLivraison_clear, // CLEAR MODAL FUNCTION
modalDeleteLivraison_loadDatas // LOAD DATAS FUNCTION
)};
registerListProgressLoadCbkFct( $("tbody.progressLoadList"), initBtnFct );
initBtnFct();
// INIT SAVE DELETE BTN
modalForm_initBtnSaveDelete(
modalDeleteLivraison.find(".btnSave"), // BTN SAVE
livraisonsConf.type, // DELETE TYPE
modalDeleteLivraison, // MODAL
false, // GET FORM DATAS FUNCTION
false, // CHECK FORM DATAS FUNCTION
livraisonsConf.baseURL // SAVE URL
);
// CANCEL
modalDeleteLivraison.on('hidden.bs.modal', function (e) { modalDeleteLivraison_clear(); });
}
function modalDeleteLivraison_loadDatas(btn, id) {
modalDeleteLivraison.find('b.groupe').html( btn.attr('groupe') );
modalDeleteLivraison.find('b.date').html( btn.attr('date') );
modalDeleteLivraison.modal('show');
}
function modalDeleteLivraison_clear() {
modalDeleteLivraison.removeAttr("delete_id");
modalDeleteLivraison.find('b.groupe').html("");
modalDeleteLivraison.find('b.date').html("");
}