409 lines
No EOL
14 KiB
JavaScript
409 lines
No EOL
14 KiB
JavaScript
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
|
|
}
|
|
}
|
|
}
|
|
} |