class RegVehicle_DocHead{ constructor(){ this.name = "RegVehicle_DocHead"; } static GetCustomDestination(data, dest){ return (data.vehicle_id ?? "" != "" ? "regvehicle.view" : "regvehicle.overview"); } static GetCustomDestID(data, destID){ return data.vehicle_id ?? destID; } static allowView(){ return userrights.has("regvehicles.view"); } static allowAddNew(){ return true; } static allowEdit(){ return userrights.has("regvehicles.edit"); } static allowDelete(){ return userrights.has("regvehicles.edit"); } static GetColumns(){ return ["doc_number", "creationdate" ,"status", "totalprice_no_discount","totalprice_discount","id"] } static TableDataCreate(row, key){ if(key == "id"){ return ` `; } else if(key == "creationdate"){ return ` ${System.formatTimestamp(row.creationdate)}
${System.buildEmployeeName(row.creator)} `; } else if(key == "totalprice_no_discount" || key == "totalprice_discount"){ return ` ${System.FormatNumber(row[key])} `; } else if(key == "status"){ let selectClass = ""; let selected1=""; let selected2=""; let selected3=""; let selected4=""; if(row["done"] == 1){ selectClass = "success"; selected4 = " selected"; } else if(row["declined"] == 1){ selectClass = "error"; selected2 = " selected"; } else if(row["invoiced"] == 1){ selectClass = "primary"; selected3 = " selected"; } else{ selectClass = "info"; selected1 = " selected"; } if(row.allow_decline){ return ` ` ; } else{ return ` ` ; } } else{ return `${row[key]}`; } } static SetStatus(docId, vehicle_id, senderEl){ let backEndData = { done: senderEl.value == "3" ? "1" : "0", declined: senderEl.value == "1" ? "1" : "0", invoiced: senderEl.value == "2" ? "1" : "0" } sendDataToAPI("regvehicle_dochead", "regvehicle.view",docId, vehicle_id, backEndData); } static CreateCustom(data){ document.getElementById("currentpage-content").innerHTML = Form.BackEditBtn("regvehicle.view", "",-1, false, data.data.vehicle_id); let pricelistGroupData = {}; pricelistGroupData.data = data.data.pricelist_groups PriceListGroups.CreateCustom({data: data.data.pricelist_groups}, true); document.getElementById("currentpage-content").innerHTML += `
`; Form.initViewModeTopButtons(); document.getElementById("input-cancel-button").onclick=function(){ loadPage("regvehicle.view", this.getAttribute("data-vehicle-id")) } document.getElementById("input-save-button").onclick=function(){ let saveData = RegVehicle_DocHead.GetDataForSave("edittable_row_", ".edittable_row", ["price","amount","discount","discounted_price","total_price","id"], "amount"); if(!saveData.isValid){ Form.openInfoModal(); } else{ let headData = { vehicle_id : this.getAttribute("data-vehicle-id"), totalprice_no_discount : 0, totalprice_discount : 0 }; for (const key in saveData.posData) { headData.totalprice_no_discount += parseInt(saveData.posData[key].amount) * parseInt(saveData.posData[key].price); headData.totalprice_discount += parseInt(saveData.posData[key].total_price); saveData.posData[key].total_price_no_discount = parseInt(saveData.posData[key].amount) * parseInt(saveData.posData[key].price); saveData.posData[key].pricelist_id = saveData.posData[key].id; saveData.posData[key].tuning_option_id = -1; saveData.posData[key].default_price = saveData.posData[key].price; saveData.posData[key].id = null; delete saveData.posData[key].price; delete saveData.posData[key].discounted_price; } let formData = { headData: headData, posData: saveData.posData } sendDataToAPI("regvehicle_dochead", "regvehicle.view",-1, this.getAttribute("data-vehicle-id"), formData); } } Array.from(document.getElementById("currentpage-content").querySelectorAll(".pricelistpos_calc_amount")).forEach(function(item){ item.onkeyup=function(){ RegVehicle_DocHead.CalcAmountAndDiscount(this); } }); Array.from(document.getElementById("currentpage-content").querySelectorAll(".pricelistpos_calc_discount")).forEach(function(item){ item.onkeyup=function(){ RegVehicle_DocHead.CalcAmountAndDiscount(this); } }); } static GetDataForSave(row_id_prefix, classToSearch, subElements, mustBeBiggerZero){ let idElements = Array.from(document.querySelectorAll(classToSearch)); let retval = []; let isValid = false; idElements.forEach(function(row){ let rowIsValid = false; let rowID = row.id.replace(row_id_prefix, ""); let rowData = {}; for (const key in subElements) { rowData[subElements[key]] = document.getElementById("input-" + subElements[key] + "_" + rowID).value; if(subElements[key] == mustBeBiggerZero && (document.getElementById("input-" + subElements[key] + "_" + rowID).value*1) > 0){ isValid = true; rowIsValid = true; } } if(rowIsValid){ retval.push(rowData); } }); return { isValid: isValid, posData: retval } } static CalcAmountAndDiscount(element){ let rowId = element.id.replace("input-amount_", "").replace("input-discount_",""); let amount = document.getElementById("input-amount_" + rowId).value; let discount = document.getElementById("input-discount_" + rowId).value; let price = document.getElementById("input-price_" + rowId).value; let max_discount = document.getElementById("input-max_discount_" + rowId).value; let discountedPriceEl = document.getElementById("input-discounted_price_" + rowId); let totalPriceEl = document.getElementById("input-total_price_" + rowId); if(discount.startsWith("0")){ document.getElementById("input-discount_" + rowId).value = 1*discount; } if(1*discount > 1*max_discount){ discount = max_discount; document.getElementById("input-discount_" + rowId).value = discount; } if(1*amount < 0){ document.getElementById("input-amount_" + rowId).value = 0; amount = 0; } let percentage = -1 * ((1*discount / 100) - 1.0) let discountedPrice = parseInt(price * percentage); discountedPriceEl.value = discountedPrice; totalPriceEl.value = discountedPrice * amount; let dataForSave = RegVehicle_DocHead.GetDataForSave("edittable_row_", ".edittable_row", ["price","amount","total_price"], "amount") let sum_total_price = 0; let sum_total_price_no_discount = 0; if(dataForSave.isValid){ for (const key in dataForSave.posData) { sum_total_price_no_discount += parseInt(dataForSave.posData[key].amount) * parseInt(dataForSave.posData[key].price); sum_total_price += parseInt(dataForSave.posData[key].total_price); } } document.getElementById("summary_total_price_no_discount").innerHTML = System.FormatNumber(sum_total_price_no_discount); document.getElementById("summary_total_price").innerHTML = System.FormatNumber(sum_total_price); } static GetDetailView(row, vehicle_id = -1, drawViewButton = false){ let bottomButton = ""; let contentHtml = ``; if(row === undefined || row === null ){ return ""; } if(row.note !== undefined && row.note !== null && row.note.replace(/ /g, "") != ""){ contentHtml = `

${row.note.replace(/\n/g,"
")}

`; } if(drawViewButton){ bottomButton = `` } return `

${System.buildEmployeeName(row.creator)} - ${System.formatTimestamp(row.createddate)}

${getTranslation("passed")}: ${getTranslation(row.passed == 1 ? "yes": "no")}

${getTranslation("new_mot")}: ${System.formatDate(row.new_mot) }

${getTranslation("old_mot")}: ${System.formatDate(row.old_mot) }

${contentHtml}
${getTranslation("mot.lights")} ${getTranslation("mot.brakes_tyres")} ${getTranslation("mot.windows")} ${getTranslation("mot.others")}
${getTranslation("headlights")} ${getTranslation("front_brakes")} ${getTranslation("windscreen")} ${getTranslation("horn")}
${getTranslation("rear_lights")} ${getTranslation("rear_brakes")} ${getTranslation("rear_window")} ${getTranslation("exhaust_system")}
${getTranslation("indicators")} ${getTranslation("front_tyres")} ${getTranslation("side_windows")} ${getTranslation("engine")}
${getTranslation("rear_tyres")} ${getTranslation("bodywork")}

${bottomButton}
`; } static GetEdit(data={}){ let retval = { "vehicle_id": { "val" : data.vehicle_id ?? -1 ,"type" : "text" ,"mandatory":true ,"isRow":true }, } return retval; } }