class RegVehicle_Damage{ constructor(){ this.name = "regvehicle_damage"; } 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 ["plate","veh_type","veh_model","owner","mot","state","id"] } static GetEdit(data={}){ let retval = { "vehicle_id": { "val" : data.vehicle_id ?? -1 ,"type" : "hidden" ,"mandatory":true } } let fields = this.GetPossibleDamageFields(); for(const element of fields){ retval[element] = { "val" : data[element] ?? "0" ,"type" : "hidden" ,"mandatory":false } } return retval; } static GetPossibleDamageFields(){ return [ "exhaust_system" ,"front_bumper" ,"front_grill" ,"bonnet" ,"roof" ,"front_right_mudguard" ,"front_left_mudguard" ,"right_rear_panel" ,"left_rear_panel" ,"left_under_trim" ,"right_under_trim" ,"rear_panel" ,"rear_bumper" ,"front_left_headlight" ,"front_right_headlight" ,"right_rear_light" ,"left_rear_light" ,"right_window_01" ,"right_window_02" ,"right_window_03" ,"left_window_01" ,"left_window_02" ,"left_window_03" ,"rear_window" ,"windscreen" ,"right_door_01" ,"right_door_02" ,"left_door_01" ,"left_door_02" ,"right_front_tyre" ,"right_rear_tyre" ,"left_front_tyre" ,"left_rear_tyre" ,"right_front_rim" ,"right_rear_rim" ,"left_front_rim" ,"left_rear_rim" ]; } static CreateCustom(data){ let html = Form.BackEditBtn("regvehicle.view", "",-1, false, data.data.vehicle_id); html += `
`; let i=0; for(const row of data.data.data){ let buttons = ""; let badges = ""; if(row.repaired != true){ buttons += ``; } else{ badges += `
${getTranslation("repaired")}
`; } let contentHTML = ``; if(row.content.replace(/ /g,"") !== ""){ contentHTML = `

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

`; } let temp = `

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

${contentHTML}

${badges}

${RegVehicle_Damage.GetVehicleInteractiveModel(row, true, 1)}
${buttons}
`; if( i % 2 === 0){ temp += `
` } else{ temp = `
` + temp } html += temp; i++; } html += `
`; document.getElementById("currentpage-content").innerHTML = html; Form.initViewModeTopButtons(); } static GetExtraForEdit(data){ let retval = { top:"", bottom:"" } retval.bottom = `
${this.GetVehicleInteractiveModel(data, false, 3)}
`; return retval; } static HighlightSiblings(sender, isHightlight) { let css_class = sender.classList[0]; let sharedObjects = Array.from(document.querySelectorAll("." + css_class)); sharedObjects.forEach((element) => { if (element != sender) { Array.from(element.querySelectorAll(".vehicledmg-clickable")).forEach((child) => { if (isHightlight) { if (!child.classList.contains("vehicledmg-highlighted")) { child.classList.add("vehicledmg-highlighted"); } } else { if (child.classList.contains("vehicledmg-highlighted")) { child.classList.remove("vehicledmg-highlighted"); } } }); } }); } static DamageClick(sender) { let css_class = sender.classList[0]; let is_active = sender.getAttribute("data-is-selected") ?? "false"; let fieldId = `input-${css_class}` let inputEl = document.getElementById(fieldId); if(inputEl){ let sharedObjects = Array.from(document.querySelectorAll("." + css_class)); sharedObjects.forEach((element) => { Array.from(element.querySelectorAll(".vehicledmg-clickable")).forEach((child) => { if (is_active != "true") { if (!child.classList.contains("vehicledmg-is_selected")) { child.classList.add("vehicledmg-is_selected"); element.setAttribute("data-is-selected", "true"); } } else { if (child.classList.contains("vehicledmg-is_selected")) { child.classList.remove("vehicledmg-is_selected"); element.setAttribute("data-is-selected", "false"); } } }); }); if (is_active != "true") { inputEl.value = 1; } else{ inputEl.value = 0; } Form.validate(); } else{ console.log("no field found for " + fieldId); } } static DamageClick3(data, readOnly = false, colspan = 3){ let css_class = sender.classList[0]; let is_active = sender.getAttribute("data-is-selected") ?? "false"; let fieldId = `input-${css_class}` let inputEl = document.getElementById(fieldId); if(inputEl){ let sharedObjects = Array.from(document.querySelectorAll("." + css_class)); sharedObjects.forEach((element) => { Array.from(element.querySelectorAll(".vehicledmg-clickable")).forEach((child) => { if (is_active != "true") { if (!child.classList.contains("vehicledmg-is_selected")) { child.classList.add("vehicledmg-is_selected"); element.setAttribute("data-is-selected", "true"); } } else { if (child.classList.contains("vehicledmg-is_selected")) { child.classList.remove("vehicledmg-is_selected"); element.setAttribute("data-is-selected", "false"); } } }); }); if (is_active != "true") { inputEl.value = 1; } else{ inputEl.value = 0; } Form.validate(); } else{ console.log("no field found for " + fieldId); } } static GetVehicleInteractiveModel(data, readOnly = false, colspan = 3){ let javaScriptFunctions = ``; let javaScriptFunctionSingleData = ``; let activeClasses = {} let possibleFields = this.GetPossibleDamageFields(); if(!readOnly){ javaScriptFunctions = ` onmouseenter="RegVehicle_Damage.HighlightSiblings(this, true)" onmouseout="RegVehicle_Damage.HighlightSiblings(this, false);" onclick="RegVehicle_Damage.DamageClick(this);"` javaScriptFunctionSingleData = ` onclick="RegVehicle_Damage.DamageClick(this);"` for (const element of possibleFields) { activeClasses[element] = (1 * (data[element] ?? "0") == 1 ? "vehicledmg-clickable vehicledmg-is_selected" : "vehicledmg-clickable") } } else{ for (const element of possibleFields) { activeClasses[element] = (1 * (data[element] ?? "0") == 1 ? "vehicledmg-is_selected" : ""); } } return ` `; } }