// jproduits.js let idProduit = 0; let oldColorLn; let oldIdLn; let idNewFamille = 999999; // Pour les familles ajoutées, un rowid qui commence à 999999 window.addEventListener('DOMContentLoaded', (event) => { console.log('#'); // Initialisation des éléments utilisés let elCelProduits = document.getElementsByClassName("celProduit"); let elBtnImport = document.getElementById("btnImport"); let elBtnModProduit = document.getElementsByClassName("btnModProduit"); let elBtnQuitModProduit = document.getElementById("btnQuitModProduit"); let elBtnCancelImport = document.getElementById("btnCancelImport"); let elBtnSubmitImport = document.getElementById("btnSubmitImport"); let elBtnSearch = document.getElementById("btnSearch"); let elBtnFamilles = document.getElementById("btnFamilles"); let elBtnCancelFamilles = document.getElementById("btnCancelFamilles"); let elBtnSubmitFamilles = document.getElementById("btnSubmitFamilles"); let elBtnAddFamille = document.getElementById("btnAddFamille"); let clickLigProduit = function () { //! Event Click sur une cellule d'une ligne d'un produit qui a la classe celProduit idProduit = this.getAttribute("data-rowid"); let thisColor; Array.from(elCelProduits).forEach(function (lngProduit) { if (lngProduit.getAttribute("data-rowid") == oldIdLn) { lngProduit.style.backgroundColor = oldColorLn; } else if (lngProduit.getAttribute("data-rowid") == idProduit) { thisColor = lngProduit.style.backgroundColor; lngProduit.style.backgroundColor = "#9bbce7"; } }); oldColorLn = thisColor; oldIdLn = idProduit; }; function clickModProduit() { //! Fonction appelée lors du click sur un bouton de modification du tableau des produits idProduit = this.getAttribute("data-rowid"); document.getElementById("loadingDiv").style.display = "block"; // Va chercher la 1ère cellule de la ligne pour lancer la function click() => clickLigProduit let firstCellOfRow = this.parentNode.parentNode.cells[0]; firstCellOfRow.click(); let xhttp = new XMLHttpRequest(); xhttp.open("POST", "/jxpost/load_produit", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { // Response let ret = JSON.parse(this.responseText); if (ret.length == 1) { // 1 marché récupéré let produit = ret[0]; document.getElementById("rowid").value = produit.rowid; document.getElementById("libelle").value = produit.libelle; document.getElementById("code").value = produit.code; document.getElementById("groupe").value = produit.groupe; document.getElementById("prix_achat_brut_reel").value = produit.prix_achat_brut_reel; document.getElementById("prix_achat_net").value = produit.prix_achat_net; document.getElementById("prix_vente_public").value = produit.prix_vente_public; } else { showNotification("Modification", "Erreur lors de la récupération du produit", "error"); } document.getElementById("loadingDiv").style.display = "none"; } }; xhttp.send(JSON.stringify({cid: idProduit})); showModal(document.getElementById("modalModProduit")); } //! Fonction appelée lors du click sur le bouton de fermeture de la fenêtre de modification d'un produit function clickQuitModProduit() { hideModal(document.getElementById("modalModProduit")); } //! Fonction appelée lors du click sur le bouton d'importation des produits function clickImport() { showModal(document.getElementById("modalImport")); } //! Fonction appelée lors du click sur le bouton d'annulation de l'importation des produits function clickCancelImport() { hideModal(document.getElementById("modalImport")); } //! Fonction appelée lors du click sur le bouton de soumission de l'importation des produits function clickSubmitImport() { hideModal(document.getElementById("modalImport")); document.getElementById("loadingDiv").style.display = "block"; let xhttp = new XMLHttpRequest(); xhttp.open("POST", "/jximport/upload_catalogue", true); xhttp.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { let retour = JSON.parse(this.responseText); let msg = ""; document.getElementById("loadingDiv").style.display = "none"; if (retour.ret == "ok") { msg = (retour.message) ? retour.message : "L'importation des produits a été effectuée avec succès"; showNotification("Importation", msg, "success"); } else { msg = (retour.message) ? retour.message : "Erreur lors de l'importation des produits"; showNotification("Importation", msg, "error"); } } }; let frmData = new FormData(); frmData.append("file1", document.getElementById("importFile").files[0]); frmData.append("MAX_FILE_SIZE", document.getElementById("MAX_FILE_SIZE").value) frmData.append("importListe", document.getElementById("importListe").value); xhttp.send(frmData); return false; } document.getElementById("schProduits").addEventListener("keypress", function (event) { if (event.key === "Enter") { // Traitement de la touche "entrée" clickSearchProduits(); } }); let clickSearchProduits = function () { document.getElementById("loadingDiv").style.display = "block"; let search = document.getElementById("schProduits").value; let xhttp = new XMLHttpRequest(); xhttp.open("POST", "/jxpost/search_produits", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { let retour = JSON.parse(this.responseText); document.getElementById("loadingDiv").style.display = "none"; if (retour.ret) { showNotification("Recherche", "La recherche ne s'est pas déroulée correctement", "error"); } else { let tblBody = document.getElementById("tblProduits").getElementsByTagName("tbody")[0]; // on vide le body de cette table tblBody.innerHTML = ""; if (retour.length > 0) { // au moins un produit trouvé dans cette recherche let nbProduits = retour.length; let nbLignes = 0; for (let key in retour) { if (retour.hasOwnProperty(key)) { // Récupération des valeurs de la ligne let val = retour[key]; // Insertion d'une nouvelle ligne et création de ses colonnes let newRow = tblBody.insertRow(0); let celCode = newRow.insertCell(0); celCode.innerHTML = val['code']; let celLibelle = newRow.insertCell(1); celLibelle.innerHTML = val['libelle']; let celGroupe = newRow.insertCell(2); celGroupe.innerHTML = val['groupe']; let celFamille = newRow.insertCell(3); celFamille.innerHTML = val['famille']; let celAchatBrut = newRow.insertCell(4); celAchatBrut.className = "text-right"; celAchatBrut.innerHTML = val['prix_achat_brut_reel'] + " €"; let celAchatNet = newRow.insertCell(5); celAchatNet.className = "text-right"; celAchatNet.innerHTML = val['prix_achat_net'] + " €"; let celVentePub = newRow.insertCell(6); celVentePub.className = "text-right"; celVentePub.innerHTML = val['prix_vente_public'] + " €"; nbLignes++; let celActions = newRow.insertCell(7); celActions.className = "text-center"; celActions.innerHTML = ''; } } document.getElementById("pnlProduitsTitre").innerHTML = ' Liste des ' + nbLignes + ' produits trouvés'; } else { // Aucun produit trouvé dans cette recherche document.getElementById("pnlProduitsTitre").innerHTML = ' Liste des produits de la liste tarifaire générale'; let newRow = tblBody.insertRow(0); let celCode = newRow.insertCell(0); celCode.innerHTML = "Aucun produit trouvé"; celCode.setAttribute("colspan", "4"); celCode.setAttribute("class", "text-center"); } showNotification("Recherche", "Recherche terminée", "success"); } } } let data = {search: search}; xhttp.send(JSON.stringify(data)); return false; } let clickModFamilles = function () { document.getElementById("loadingDiv").style.display = "block"; //! on charge d'abord la liste des x_familles let familles; let xhttp1 = new XMLHttpRequest(); xhttp1.open("POST", "/jxpost/load_familles", false); xhttp1.setRequestHeader("Content-Type", "application/json"); xhttp1.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { familles = JSON.parse(this.responseText); } } let data1 = {}; xhttp1.send(JSON.stringify(data1)); //! Ensuite on charge les familles de groupes let xhttp2 = new XMLHttpRequest(); xhttp2.open("POST", "/jxpost/load_familles_groupes", true); xhttp2.setRequestHeader("Content-Type", "application/json"); xhttp2.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { let retour = JSON.parse(this.responseText); document.getElementById("loadingDiv").style.display = "none"; let tblBody = document.getElementById("tblFamilles").getElementsByTagName("tbody")[0]; // on vide le body de cette table tblBody.innerHTML = ""; if (retour.length > 0) { // au moins une famille trouvée dans cette recherche let nbFamilles = retour.length; for (let key in retour) { if (retour.hasOwnProperty(key)) { // Récupération des valeurs de la ligne let val = retour[key]; // Insertion d'une nouvelle ligne et création de ses colonnes let newRow = tblBody.insertRow(-1); let celCode = newRow.insertCell(0); celCode.innerHTML = ''; let celGroupe = newRow.insertCell(1); celGroupe.innerHTML = ''; let celFamille = newRow.insertCell(2); //! on insère dans cette cellule le select des familles let selFamille = ''; celFamille.innerHTML = selFamille; let celActions = newRow.insertCell(3); celActions.className = "text-center"; celActions.innerHTML = ''; } } document.getElementById("modFamillesTitre").innerHTML = ' Liste des ' + nbFamilles + ' familles de produits trouvées'; } else { // Aucune famille trouvée dans cette recherche document.getElementById("modFamillesTitre").innerHTML = ' Liste des familles de produits'; let newRow = tblBody.insertRow(0); let celCode = newRow.insertCell(0); celCode.innerHTML = "Aucune famille trouvée"; celCode.setAttribute("colspan", "4"); } showModal(document.getElementById("modalFamilles")); } } let data2 = {}; xhttp2.send(JSON.stringify(data2)); } let clickCancelFamilles = function () { hideModal(document.getElementById("modalFamilles")); } let clickSubmitFamilles = function () { hideModal(document.getElementById("modalFamilles")); document.getElementById("loadingDiv").style.display = "block"; let xhttp = new XMLHttpRequest(); xhttp.open("POST", "/jxpost/save_familles", true); xhttp.setRequestHeader("Content-Type", "application/json"); xhttp.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { let retour = JSON.parse(this.responseText); document.getElementById("loadingDiv").style.display = "none"; if (retour["ret"] == "ok") { showNotification("Familles", retour["msg"], "success"); } else { showNotification("Familles", retour["msg"], "error"); } } } let data = {}; let elTblFamilles = document.getElementById("tblFamilles").getElementsByTagName("tbody")[0]; // on récupère les lignes du tableau let elLignes = elTblFamilles.getElementsByTagName("tr"); let nbLignes = elLignes.length; let elLigne = null; let dataLigne = {}; // on parcourt les lignes du tableau for (let i = 0; i < nbLignes; i++) { elLigne = elLignes[i]; // on récupère les cellules de la ligne let elCellules = elLigne.getElementsByTagName("td"); let nbCellules = elCellules.length; let elCellule = null; dataLigne = {}; // on parcourt les cellules de la ligne for (let j = 0; j < nbCellules; j++) { elCellule = elCellules[j]; // on récupère les inputs de la cellule let elInputs = elCellule.getElementsByTagName("input"); let nbInputs = elInputs.length; if (nbInputs == 1) { let elInput = elInputs[0]; // on récupère le début du nom de l'input jusqu'au _ let nameInput = elInput.getAttribute("name").split("_")[0]; // on récupère la valeur de l'input let valueInput = elInput.value; // on ajoute le couple nom/valeur dans le tableau data dataLigne[nameInput] = valueInput; } let elSel = elCellule.getElementsByTagName("select"); let nbSel = elSel.length; if (nbSel == 1) { let elS = elSel[0]; // on récupère le début du nom de l'input jusqu'au _ let nameInput = elS.getAttribute("name").split("_")[0]; // on récupère la valeur de l'input let valueInput = elS.value; // on ajoute le couple nom/valeur dans le tableau data dataLigne[nameInput] = valueInput; } } // on ajoute le tableau dataLigne dans le tableau data data[i] = dataLigne; } xhttp.send(JSON.stringify(data)); } let clickSuppFamille = function () { } let clickAddFamille = function () { // On incrémente l'id des nouvelles familles idNewFamille++; //! on charge d'abord la liste des x_familles let familles; let xhttp1 = new XMLHttpRequest(); xhttp1.open("POST", "/jxpost/load_familles", false); xhttp1.setRequestHeader("Content-Type", "application/json"); xhttp1.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE && this.status == 200) { familles = JSON.parse(this.responseText); } } let data1 = {}; xhttp1.send(JSON.stringify(data1)); let tblBody = document.getElementById("tblFamilles").getElementsByTagName("tbody")[0]; let newRow = tblBody.insertRow(0); let celCode = newRow.insertCell(0); celCode.innerHTML = ''; let celGroupe = newRow.insertCell(1); celGroupe.innerHTML = ''; let celFamille = newRow.insertCell(2); celFamille.innerHTML = ''; //! on insère dans cette cellule le select des familles let selFamille = ''; celFamille.innerHTML = selFamille; let celActions = newRow.insertCell(3); celActions.className = "text-center"; celActions.innerHTML = ''; //! on met le focus sur le nouveau champ groupe celGroupe.getElementsByTagName("input")[0].focus(); } //! Sur chaque cellule du tableau des marchés ayant la classe celMarches, on affecte un événement click qui appelle la fonction clickLnMarche() Array.from(elCelProduits).forEach(function (lnProduit) { lnProduit.addEventListener('click', clickLigProduit); }); //! Sur chaque bouton de modification du tableau des produits, on affecte un événement click qui appelle la fonction clickModProduit() Array.from(elBtnModProduit).forEach(function (modProduit) { modProduit.addEventListener('click', clickModProduit); }); elBtnImport.addEventListener('click', clickImport); elBtnCancelImport.addEventListener('click', clickCancelImport); elBtnSubmitImport.addEventListener('click', clickSubmitImport); elBtnQuitModProduit.addEventListener('click', clickQuitModProduit); elBtnSearch.addEventListener('click', clickSearchProduits); elBtnFamilles.addEventListener('click', clickModFamilles); elBtnCancelFamilles.addEventListener('click', clickCancelFamilles); elBtnSubmitFamilles.addEventListener('click', clickSubmitFamilles); elBtnAddFamille.addEventListener('click', clickAddFamille); });