import { generateUrl } from "@nextcloud/router"; import { updateDB } from "../modules/ajaxRequest.mjs"; import { baseUrl, checkSelectPurJs, LoadDT, showDone } from "../modules/mainFunction.mjs"; import { NewDevisMentionConstant,FacturedDevisMentionConstant,DefaultDevisMentionConstant,CanceledDevisMentionConstant, FacturedDevisMentionConstantFormatted } from "../constants/invoiceConstant.js"; import 'select2/dist/css/select2.css'; import 'select2'; export class Devis { /** * Devis object * @param myresp instantiate devis object */ constructor(myresp) { this.id = myresp.id; this.user_id = myresp.user_id; this.id_nextcloud = myresp.id_nextcloud; this.date = ((myresp.date == null || myresp.date.length === 0) ? '-' : myresp.date); this.num = ((myresp.num == null || myresp.num.length === 0) ? '-' : myresp.num); // defunt this.id_defunt = ((myresp.id_defunt == null || myresp.id_defunt.length === 0) ? '-' : myresp.id_defunt); this.nom_defunt = ((myresp.nom_defunt == null || myresp.nom_defunt.length === 0) ? '-' : myresp.nom_defunt); // fin defunt this.cid = ((myresp.cid == null || myresp.cid.length === 0) ? '-' : myresp.cid); this.lid = ((myresp.lid == null || myresp.lid.length === 0) ? '-' : myresp.lid); this.tid = ((myresp.tid == null || myresp.tid.length === 0) ? '-' : myresp.tid); this.nom = ((myresp.nom == null || myresp.nom.length === 0) ? '-' : myresp.nom); this.prenom = ((myresp.prenom == null || myresp.prenom.length === 0) ? '-' : myresp.prenom); this.nomThanato = Devis.getDevisThanatoFullname(myresp); this.version = ((myresp.version == null || myresp.version.length === 0) ? '-' : myresp.version); this.lieu = ((myresp.lieu == null || myresp.lieu.length === 0) ? '-' : myresp.lieu); this.mentions = Devis.getDevisMentionFromApiResponse(myresp); this.baseUrl = generateUrl(`/apps/gestion/devis/${this.id}/show`); this.devisFullNumber = ((myresp.devis_full_number != null && myresp.mentions.devis_full_number != 0) ? myresp.devis_full_number : '-'); this.devisProduits = Devis.getDevisProduitsString(myresp); } static getDevisMentionLabelFromMention(mention){ let labelValue = mention; switch (mention) { case FacturedDevisMentionConstant: labelValue = "Facturé" break; case CanceledDevisMentionConstant: labelValue = "Annulé" break; case FacturedDevisMentionConstantFormatted: labelValue = "Facturé" break; default: labelValue = mention } return labelValue; } static getDevisMentionFromApiResponse(myresp){ let mention = "-"; if(myresp.mentions != null && myresp.mentions.length > 0){ mention = myresp.mentions; } return mention; } static getDevisThanatoFullname(myresp){ let thanatoPrenom = ''; let thanatoNom = ''; let thanatoFullName = ''; if(myresp.nom_thanato != null && myresp.nom_thanato.length != 0){ thanatoNom = myresp.nom_thanato; thanatoFullName += thanatoNom; } if(myresp.prenom_thanato != null && myresp.prenom_thanato.length != 0){ thanatoPrenom = myresp.prenom_thanato; if(thanatoNom.length > 0 && thanatoPrenom.length > 0){ thanatoFullName += ' ' } thanatoFullName += thanatoPrenom; } return (thanatoFullName.length === 0) ? '-' : thanatoFullName; } static getDevisMentionCssStyle(mention){ let style = "display:inline; border-radius: 5px; padding: 8px;"; if(mention === FacturedDevisMentionConstant || mention === FacturedDevisMentionConstantFormatted){ style += " background-color:green !important; color: white"; } else if(mention === CanceledDevisMentionConstant){ style += " background-color:red !important; color: white"; } else{ style += " background-color:yellow !important"; } return style; } static getDevisProduitsString(myresp){ let devisProduitsAsString = ''; if(myresp.produits != null && myresp.produits.length > 0){ let devisProduits = myresp.produits; let devisProduitsLength = devisProduits.length; for (let i = 0; i < devisProduitsLength; i++) { devisProduitsAsString += devisProduits[i].produit_reference; if(i != devisProduitsLength - 1){ devisProduitsAsString += '-'; } } } return devisProduitsAsString.length === 0 ? '-' : devisProduitsAsString; } /**undefined * Get datatable row for a devis */ getDTRow() { // let signe_prop = (this.id_nextcloud.toLowerCase() == 'emmanuelle')?'propdevis-emmanuelle':(this.id_nextcloud.toLowerCase() == 'delphine')?'propdevis-delphine':''; let myrow = [ // '
' + this.user_id + '
', '', '
' + this.user_id + '
', '
' + this.devisFullNumber + '
', '', // '
' + this.num + '
', '
'+ this.id_defunt + ' (' + this.nom_defunt + ')
', '
'+ this.cid + ' (' + this.prenom + ' ' + this.nom + ')
', '
'+ this.tid + ' (' + this.nomThanato+ ')
', '
' + this.lieu + '
', '
' + this.devisProduits + '
', '
' +Devis.getDevisMentionLabelFromMention(this.mentions) + '
', '
' ]; return myrow; } /** * * @param {*} dt */ static newDevis(dt) { var oReq = new XMLHttpRequest(); oReq.open('POST', baseUrl + '/devis/insert', true); oReq.onload = function(e){ if (this.status == 200) { showDone() Devis.loadDevisDT(dt); }else{ showError(this.response); } }; oReq.send(); } /** * Load devis ajax * @param devisDT devis datatable */ static loadDevisDT(devisDT) { var oReq = new XMLHttpRequest(); oReq.open('PROPFIND', baseUrl + '/getDevisWithProduits', true); oReq.setRequestHeader("Content-Type", "application/json"); oReq.onload = function(e){ if (this.status == 200) { // let devis_temp = (JSON.parse(JSON.parse(this.response))).filter((d)=>(d.mentions != "facturé")); // devis_temp = JSON.stringify(JSON.stringify(devis_temp)); LoadDT(devisDT, JSON.parse(this.response), Devis); }else{ showError(this.response); } }; oReq.send(); } static getDevis(callback){ var oReq = new XMLHttpRequest(); oReq.open('PROPFIND', baseUrl + '/getDevis', true); oReq.setRequestHeader("Content-Type", "application/json"); oReq.onload = function(e){ if (this.status == 200) { let devis_temp = (JSON.parse(JSON.parse(this.response))).filter((d)=>( d.mentions != FacturedDevisMentionConstant && d.mentions != FacturedDevisMentionConstantFormatted && d.mentions != CanceledDevisMentionConstant )); devis_temp = JSON.stringify(JSON.stringify(devis_temp)); callback(JSON.parse(devis_temp)); }else{ showError(this.response); } }; oReq.send(); } static getAllDevis(callback,mentionFilters = []){ var oReq = new XMLHttpRequest(); let url = baseUrl + '/getDevis'; if(mentionFilters.length > 0){ const queryParams = mentionFilters.map(mention => `mentionFilters[]=${encodeURIComponent(mention)}`).join('&'); url = `${url}?${queryParams}`; } oReq.open('PROPFIND', url, true); oReq.setRequestHeader("Content-Type", "application/json"); oReq.onload = function(e){ if (this.status == 200) { let devis_temp = (JSON.parse(JSON.parse(this.response))); devis_temp = JSON.stringify(JSON.stringify(devis_temp)); callback(JSON.parse(devis_temp)); }else{ showError(this.response); } }; oReq.send(); } static getAllDevisDelphine(e, callback){ var oReq = new XMLHttpRequest(); oReq.open('PROPFIND', baseUrl + '/getDevisDelphine/'+e.target.dataset.id, true); oReq.setRequestHeader("Content-Type", "application/json"); oReq.onload = function(e){ if (this.status == 200) { let devis_temp = (JSON.parse(JSON.parse(this.response))); devis_temp = JSON.stringify(JSON.stringify(devis_temp)); callback(JSON.parse(devis_temp)); }else{ showError(this.response); } }; oReq.send(); } static loadDevisList_dnum(e){ Devis.getDevis( response => { var selectElement = document.createElement("select"); selectElement.dataset.current = e.target.dataset.current; selectElement.dataset.id = e.target.dataset.id; selectElement.dataset.old = e.target.innerHTML; var option = document.createElement("option"); option.value = 0; option.text = t('gestion', 'Cancel'); selectElement.appendChild(option); JSON.parse(response).forEach(myresp => { var nomClient = (myresp.prenom&&myresp.nom) ? ((myresp.prenom?myresp.prenom:'') + ' ' + (myresp.nom?myresp.nom:'')) : '-'; var nomDefunt = myresp.nom_defunt ? myresp.nom_defunt : '-'; var txt = document.createElement("textarea"); txt.innerHTML = nomDefunt + ' (' + nomClient +')'; var option = document.createElement("option"); option.value = myresp.id; option.text = txt.value; selectElement.appendChild(option); }); checkSelectPurJs(selectElement); e.target.innerHTML = '' e.target.appendChild(selectElement); $(selectElement).select2(); $(selectElement).on("select2:select", function (event) { var el = event.target; if (el.value != 0) { updateDB(el.parentElement.dataset.table, el.parentElement.dataset.column, el.value, el.parentElement.dataset.id ); location.reload(); var parentElement = el.parentElement; parentElement.innerHTML = el.options[el.selectedIndex].text; parentElement.dataset.current = el.value; } else { var parentElement = el.parentElement; parentElement.innerHTML = el.dataset.old; } }); }); } static loadAllDevisList_dnum(e,mentionFilters = []){ Devis.getAllDevis( response => { var selectElement = document.createElement("select"); selectElement.dataset.current = e.target.dataset.current; selectElement.dataset.id = e.target.dataset.id; selectElement.dataset.old = e.target.innerHTML; var option = document.createElement("option"); option.value = 0; option.text = t('gestion', 'Cancel'); selectElement.appendChild(option); JSON.parse(response).forEach(myresp => { var nomClient = (myresp.prenom&&myresp.nom) ? ((myresp.prenom?myresp.prenom:'') + ' ' + (myresp.nom?myresp.nom:'')) : '-'; var nomDefunt = myresp.nom_defunt ? myresp.nom_defunt : '-'; var txt = document.createElement("textarea"); txt.innerHTML = nomDefunt + ' (' + nomClient +')'; var option = document.createElement("option"); option.value = myresp.id; option.text = txt.value; selectElement.appendChild(option); }); checkSelectPurJs(selectElement); e.target.innerHTML = '' e.target.appendChild(selectElement); $(selectElement).select2(); $(selectElement).on("select2:select", function (event) { var el = event.target; if (el.value != 0) { updateDB(el.parentElement.dataset.table, el.parentElement.dataset.column, el.value, el.parentElement.dataset.id ); location.reload(); var parentElement = el.parentElement; parentElement.innerHTML = el.options[el.selectedIndex].text; parentElement.dataset.current = el.value; } else { var parentElement = el.parentElement; parentElement.innerHTML = el.dataset.old; } }); },mentionFilters); } static loadDelphineDevisList_dnum(e){ Devis.getAllDevisDelphine( e, response => { var selectElement = document.createElement("select"); selectElement.dataset.current = e.target.dataset.current; selectElement.dataset.id = e.target.dataset.id; selectElement.dataset.old = e.target.innerHTML; var option = document.createElement("option"); option.value = 0; option.text = t('gestion', 'Cancel'); selectElement.appendChild(option); JSON.parse(response).forEach(myresp => { var nomClient = (myresp.prenom&&myresp.nom) ? ((myresp.prenom?myresp.prenom:'') + ' ' + (myresp.nom?myresp.nom:'')) : '-'; var nomDefunt = myresp.nom_defunt ? myresp.nom_defunt : '-'; var txt = document.createElement("textarea"); txt.innerHTML = nomDefunt + ' (' + nomClient +')'; var option = document.createElement("option"); option.value = myresp.id; option.text = txt.value; selectElement.appendChild(option); }); checkSelectPurJs(selectElement); e.target.innerHTML = '' e.target.appendChild(selectElement); $(selectElement).select2(); $(selectElement).on("select2:select", function (event) { var el = event.target; var parentElement = el.parentElement; if (el.value != 0) { updateDB(parentElement.dataset.table, parentElement.dataset.column, el.value, parentElement.dataset.id ); location.reload(); parentElement.innerHTML = el.options[el.selectedIndex].text; parentElement.dataset.current = el.value; } else { parentElement.innerHTML = el.dataset.old; } }); }); } }