This commit is contained in:
Nordi98 2025-08-14 13:21:51 +02:00
parent 48a36209b5
commit 884f3df7cf
262 changed files with 223207 additions and 2 deletions

View file

@ -0,0 +1,409 @@
class RegVehicle{
constructor(){
this.name = "regvehicle";
}
static allowView(){
return userrights.has("regvehicles.view");
}
static allowAddNew(){
return userrights.has("regvehicles.edit") && !sync.isActive("regvehicle");
}
static allowEdit(){
return userrights.has("regvehicles.edit");
}
static allowDelete(){
return userrights.has("regvehicles.delete") && !sync.isActive("regvehicle");
}
static allowViewMotList(){
return userrights.has("regvehicles_mot.view");
}
static allowAddMotList(){
return userrights.has("regvehicles_mot.add");
}
static allowViewOrders(){
return userrights.has("regvehicles_orders.view");
}
static allowAddOrder(){
return userrights.has("regvehicles_orders.add");
}
static allowViewRegisteredParts(){
return userrights.has("regvehicles_parts_registered.view");
}
static allowAddRegisteredParts(){
return userrights.has("regvehicles_parts_registered.add");
}
static allowRemoveRegisteredParts(){
return userrights.has("rregvehicles_parts_registered.delete");
}
static allowViewDamageReports(){
return userrights.has("regvehicles_damage_reports.view");
}
static allowAddDamageReport(){
return userrights.has("regvehicles_damage_reports.add");
}
static GetColumns(){
return ["plate","veh_type","veh_model","owner","mot","mechanic_state","id"]
}
static GetExtraForView(data){
let retval = {
top:"",
bottom:""
}
let buttons = ``;
buttons += `<button type="button" onclick="changeDataInColumn('regvehicle','mechanic_vehicle_state','${data.id}','1')" class="btn btn-sm btn-accent" ${data.mechanic_vehicle_state != 1 ? "" : " disabled"}>${getTranslation("in_shop")}</button>`;
buttons += `<button type="button" onclick="changeDataInColumn('regvehicle','mechanic_vehicle_state','${data.id}','2')" class="btn btn-sm btn-error" ${data.mechanic_vehicle_state != 2 ? "" : " disabled"}>${getTranslation("waiting_for_cops")}</button>`;
buttons += `<button type="button" onclick="changeDataInColumn('regvehicle','mechanic_vehicle_state','${data.id}','3')" class="btn btn-sm btn-primary" ${data.mechanic_vehicle_state != 3 ? "" : " disabled"}>${getTranslation("order_is_done")}</button>`;
buttons += `<button type="button" onclick="changeDataInColumn('regvehicle','mechanic_vehicle_state','${data.id}','0')" class="btn btn-sm btn-success" ${data.mechanic_vehicle_state != 0 ? "" : " disabled"}>${getTranslation("given_back")}</button>`;
retval.bottom += `
<div class="grid grid-cols-1 md:grid-cols-4 gap-4 pt-6">
${buttons}
</div>
`;
if(data.extraData.mot_data !== undefined && data.extraData.mot_data !== null && RegVehicle.allowViewMotList()){
let row = data.extraData.mot_data[0];
let onlyOne = data.extraData.mot_data.length == 1;
let addMotButton = ``;
if(RegVehicle.allowAddMotList()){
addMotButton = `<button type="button" class="btn btn-sm btn-warning" onclick="loadPage('regvehicle_mot.add',-1,'false',{data:{vehicle_id:'${data.id}', vehicle_mot:'${data.mot}'}})">${getTranslation("regvehicle_mot.add")}</button>`;
}
retval.bottom += `
<div class="collapse border border-base-300 bg-base-100 rounded-box mt-4">
<input type="checkbox" />
<summary class="collapse-title text-xl font-medium">
${getTranslation("regvehicle_mot.overview")}
</summary>
<div class="collapse-content">
${addMotButton}
<div class="grid grid-cols-1 md:grid-cols-1 gap-4 pt-6">
${RegVehicle_MOT.GetDetailView(row, data.id, !onlyOne)}
</div>
</div>
</div>
`;
}
if(data.extraData.open_offer_data !== undefined && data.extraData.open_offer_data !== null && RegVehicle.allowViewOrders()){
let allowAddOrderBtn = ``;
if(RegVehicle.allowAddOrder()){
allowAddOrderBtn = `<button type="button" class="btn btn-sm btn-warning" onclick="loadPage('regvehicle_dochead.dataload',${data.id},'true')">${getTranslation("regvehicle_dochead.add")}</button>`;
}
retval.bottom += `
<div class="collapse border border-base-300 bg-base-100 rounded-box mt-4">
<input type="checkbox" />
<summary class="collapse-title text-xl font-medium">
${getTranslation("regvehicle_dochead.overview")}
</summary>
<div class="collapse-content">
${allowAddOrderBtn}
<div class="grid grid-cols-1 md:grid-cols-1 gap-4 pt-6">
${System.GetTable(System.getClassByName("regvehicle_dochead"), data.extraData.open_offer_data, {})}
</div>
<button onclick="loadPage('regvehicle_dochead_history.dataload',${data.id})" class="btn btn-sm btn-primary btn-block" >${getTranslation("view_history")}</button>
</div>
</div>
`;
}
if(data.extraData.part_acceptance !== undefined && data.extraData.part_acceptance !== null && RegVehicle.allowViewRegisteredParts()){
let addNewPartAcceptanceBtn = ``;
if(RegVehicle.allowAddRegisteredParts()){
addNewPartAcceptanceBtn = `<button type="button" class="btn btn-sm btn-warning" onclick="loadPage('regvehicle_partacceptance.add',${data.id},'true',{data:{vehicle_id:'${data.id}'}})">${getTranslation("regvehicle_part_acceptance.add")}</button>`;
}
retval.bottom += `
<div class="collapse border border-base-300 bg-base-100 rounded-box mt-4">
<input type="checkbox" />
<summary class="collapse-title text-xl font-medium">
${getTranslation("regvehicle_part_acceptance.overview")}
</summary>
<div class="collapse-content">
${addNewPartAcceptanceBtn}
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-6">
`;
let i=0;
let temp = "";
for(const row of data.extraData.part_acceptance){
buttons = ``;
if(RegVehicle.allowRemoveRegisteredParts()){
buttons = `<button onclick="deleteData('regvehicle_partacceptance','${row.id}')" class="btn btn-sm btn-error">${getTranslation("revoke")}</button>`;
}
if(i < 9999){
let temp = `
<div class="card w-full bg-neutral text-neutral-content">
<div class="card-body">
<p><strong>${System.buildEmployeeName(row.creator)} - ${System.formatTimestamp(row.createddate)}</strong></p>
<p><strong>${getTranslation("price")}</strong>: $${System.FormatNumber(row.total_price)}</p>
<p></p>
<p class="border border-current rounded-xl p-1 break-all">${row.content.replace(/\n/g,"<br>")}</p>
<p>
<p class="p-1 break-all">${(row["_acceptance_name"] ?? "").replace(/\n/g,"<br>")}</p>
<div class="card-actions justify-start">
${buttons}
</div>
</div>
</div>
`;
retval.bottom += temp;
}
i++;
}
retval.bottom += `
</div>
</div>
</div>
`;
}
if(data.extraData.damages !== undefined && data.extraData.damages !== null && RegVehicle.allowViewDamageReports()){
let addDamageRportBtn = ``;
if(RegVehicle.allowAddDamageReport()){
addDamageRportBtn = `<button type="button" class="btn btn-sm btn-primary" onclick="loadPage('regvehicle_damage.add',-1,'false',{data:{vehicle_id:'${data.id}'}})">${getTranslation("regvehicle_damage.add")}</button>`;
}
retval.bottom += `
<div class="collapse border border-base-300 bg-base-100 rounded-box mt-4">
<input type="checkbox" />
<summary class="collapse-title text-xl font-medium">
${getTranslation("regvehicle_damage.overview")}
</summary>
<div class="collapse-content">
${addDamageRportBtn}
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 pt-6">
`;
let i=0;
let temp = "";
for(const row of data.extraData.damages){
buttons = "";
if(i < 5){
let badges = "";
let contentHTML = "";
if(row.content.replace(/ /g, "") !== ""){
contentHTML = `<p class="border border-current rounded-xl p-1 break-all">${row.content.replace(/\n/g,"<br>")}</p>`;
}
if(row.repaired != true){
buttons += `<button onclick="changeDataInColumn('regvehicle_damage','repaired','${row.id}','1')" class="btn btn-sm btn-primary">${getTranslation("repaired")}</button>`;
}
else{
badges += `<div class="badge badge-primary gap-2 font-bold">${getTranslation("repaired")}</div>`;
}
let temp = `
<div class="card w-full bg-neutral text-neutral-content">
<div class="card-body">
<p><strong>${System.buildEmployeeName(row.creator)} - ${System.formatTimestamp(row.createddate)}</strong></p>
<p></p>
${contentHTML}
<h2>${badges}</h2>
<p></p>
<p></p>
${RegVehicle_Damage.GetVehicleInteractiveModel(row, true, 1)}
<div class="card-actions justify-start">
${buttons}
</div>
</div>
</div>
`;
retval.bottom += temp;
}
i++;
if(i>5){
let temp = `
<div class="card w-full bg-neutral text-neutral-content">
<div class="card-body flex justify-center">
<button onclick="loadPage('regvehicle_damage.dataload',${data.id})" class="btn btn-sm btn-primary btn-block" >${getTranslation("view all")}</button>
</div>
</div>
`;
retval.bottom += temp;
}
}
retval.bottom += `
</div>
</div>
</div>
`;
}
return retval;
}
static TableDataCreate(row, key){
if(key == "id"){
return `
<td>
${Form.getViewButtonIcon(row[key], this.name + ".view")}
${Form.getEditButtonIcon(row[key] , this.name + ".edit", this.allowEdit())}
${Form.getDeleteButtonIcon(row[key], this.name , this.allowDelete())}
</td>`;
}
else if(key == "owner"){
let val = row[key];
if(val == ""){
val = getTranslation("unknown");
}
return `
<td>
${val}
</td>`;
}
else if(key == "mechanic_state"){
let val = row[key];
if(val != ""){
if(val == "in_shop"){
val = `<div class="badge badge-accent font-bold">${getTranslation(row[key])}</div>`;
}
else if(val == "waiting_for_cops"){
val = `<div class="badge badge-error font-bold">${getTranslation(row[key])}</div>`;
}
else if(val == "order_is_done"){
val = `<div class="badge badge-primary font-bold">${getTranslation(row[key])}</div>`;
}
}
return `
<td>
${val}
</td>`;
}
else if(key == "mot"){
if(row[key] == ""){
return `<td></td>`;
}
if(new Date(row[key]) < new Date()){
return `
<td>
<div class="badge badge-error font-bold">${System.formatDate(row[key])}</div>
</td>`
;
}
else{
return `
<td>
<div class="badge badge-success font-bold">${System.formatDate(row[key])}</div>
</td>`
;
}
}
else{
return `<td>${row[key]}</td>`;
}
}
static GetEdit(data={}){
let filesOptions = [
{"id":-1, "name":getTranslation("unknown")}
,{"id":-2, "name":getTranslation("new_file"), "show_extra_field":true}
];
if(sync.isActive("files")){
filesOptions = [
{"id":-1, "name":getTranslation("unknown")}
];
}
filesOptions = [...filesOptions, ...data.extraData.files];
return {
"plate": {
"val" : data.plate ?? ""
,"type" : "text"
,"mandatory":true
}
,"owner": {
"val" : data.owner_id ?? "-1"
,"type" : "searchdropdown"
,"mandatory":false
,options:filesOptions
}
,"veh_type": {
"val" : data.veh_type ?? ""
,"type" : "text"
,"mandatory":false
}
,"veh_model": {
"val" : data.veh_model ?? ""
,"type" : "text"
,"mandatory":false
}
,"color": {
"val" : data.color ?? ""
,"type" : "text"
,"mandatory":false
}
,"-": {
"type" : "divider"
}
,"others": {
"val" : data.others ?? ""
,"type" : "textarea"
,"isRow": true
,"mandatory":false
,autogrow: true
,rows:3
}
}
}
}