forked from Simnation/Main
420 lines
No EOL
14 KiB
JavaScript
420 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 allowFinishmanhunt(){
|
|
return userrights.has("manhunt.finish");
|
|
}
|
|
static allowSetManhunt(){
|
|
return userrights.has("manhunt.add");
|
|
}
|
|
|
|
static GetColumns(){
|
|
return ["plate","veh_type","veh_model","owner","mot","state","id"]
|
|
}
|
|
|
|
static GetExtraForView(data){
|
|
let retval = {
|
|
top:"",
|
|
bottom:""
|
|
}
|
|
|
|
if(data.is_wanted == 1){
|
|
|
|
let btn = ``;
|
|
if(this.allowFinishmanhunt()){
|
|
btn = `<button onclick="finishManhunt('${this.name}','${data.id}')" class="btn btn-sm btn-primary">${getTranslation("is_wanted_end")}</button>`
|
|
}
|
|
|
|
|
|
retval.top = `
|
|
<div class="card w-full bg-error text-error-content">
|
|
<div class="card-body">
|
|
<h2 class="card-title uppercase font-bold">${getTranslation("vehicle_wanted")}</h2>
|
|
<p><strong>${getTranslation("reason")}: </strong>${data.is_wanted_reason}</p>
|
|
<p></p>
|
|
<p>${getTranslation("is_wanted_at_sight")}</p>
|
|
<div class="card-actions justify-start">
|
|
${btn}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`
|
|
}
|
|
|
|
if(data.extraData.mot_data !== undefined && data.extraData.mot_data !== null && showLastMotDetailFromMyMechanicMDT){
|
|
let cardContent = "";
|
|
|
|
if(data.extraData.mot_data.length > 0){
|
|
|
|
let row = data.extraData.mot_data[0];
|
|
|
|
let contentHtml = ``;
|
|
if(row.note !== undefined && row.note !== null && row.note.replace(/ /g, "") != ""){
|
|
contentHtml = `<p class="border border-current rounded-xl p-1 break-all">${row.note.replace(/\n/g,"<br>")}</p>`;
|
|
}
|
|
|
|
cardContent = `
|
|
<p><strong>${System.buildEmployeeName(row.creator)} - ${System.formatTimestamp(row.createddate)}</strong></p>
|
|
<p></p>
|
|
<p><strong>${getTranslation("passed")}</strong>: <span class="badge badge-${row.passed ? "success" : "error"} gap-2 font-bold">${getTranslation(row.passed == 1 ? "yes": "no")}</span></p>
|
|
<p><strong>${getTranslation("new_mot")}</strong>: ${System.formatDate(row.new_mot) }</p>
|
|
<p><strong>${getTranslation("old_mot")}</strong>: ${System.formatDate(row.old_mot) }</p>
|
|
${contentHtml}
|
|
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>${getTranslation("mot.lights")}</th>
|
|
<th>${getTranslation("mot.brakes_tyres")}</th>
|
|
<th>${getTranslation("mot.windows")}</th>
|
|
<th>${getTranslation("mot.others")}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="text-center"><span class="badge badge-${row.headlights ? "success" : "error"} gap-2 font-bold">${getTranslation("headlights")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.front_brakes ? "success" : "error"} gap-2 font-bold">${getTranslation("front_brakes")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.windscreen ? "success" : "error"} gap-2 font-bold">${getTranslation("windscreen")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.horn ? "success" : "error"} gap-2 font-bold">${getTranslation("horn")}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="text-center"><span class="badge badge-${row.rear_lights ? "success" : "error"} gap-2 font-bold">${getTranslation("rear_lights")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.rear_brakes ? "success" : "error"} gap-2 font-bold">${getTranslation("rear_brakes")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.rear_window ? "success" : "error"} gap-2 font-bold">${getTranslation("rear_window")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.exhaust_system ? "success" : "error"} gap-2 font-bold">${getTranslation("exhaust_system")}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="text-center"><span class="badge badge-${row.indicators ? "success" : "error"} gap-2 font-bold">${getTranslation("indicators")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.front_tyres ? "success" : "error"} gap-2 font-bold">${getTranslation("front_tyres")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.side_windows ? "success" : "error"} gap-2 font-bold">${getTranslation("side_windows")}</span></td>
|
|
<td class="text-center"><span class="badge badge-${row.engine ? "success" : "error"} gap-2 font-bold">${getTranslation("engine")}</span></td>
|
|
</tr>
|
|
<tr>
|
|
<td></td>
|
|
<td class="text-center"><span class="badge badge-${row.rear_tyres ? "success" : "error"} gap-2 font-bold">${getTranslation("rear_tyres")}</span></td>
|
|
<td></td>
|
|
<td class="text-center"><span class="badge badge-${row.bodywork ? "success" : "error"} gap-2 font-bold">${getTranslation("bodywork")}</span></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
`;
|
|
|
|
}
|
|
else{
|
|
cardContent = `<h3>${getTranslation("no_data_found")}</h3>`
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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">
|
|
<div class="grid grid-cols-1 md:grid-cols-1 gap-4 pt-2">
|
|
|
|
<div class="card w-full bg-neutral text-neutral-content">
|
|
<div class="card-body">
|
|
${cardContent}
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
if(data.extraData.part_acceptance !== undefined && data.extraData.part_acceptance !== null && showPartAcceptanceFromMyMechanicMDT){
|
|
let cardCols = 2;
|
|
|
|
if(data.extraData.part_acceptance.length == 0){
|
|
cardCols = 1;
|
|
}
|
|
|
|
|
|
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">
|
|
<div class="grid grid-cols-1 md:grid-cols-${cardCols} gap-4 pt-2">
|
|
`;
|
|
|
|
|
|
|
|
|
|
if(data.extraData.part_acceptance.length > 0){
|
|
let i=0;
|
|
for(const row of data.extraData.part_acceptance){
|
|
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 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>
|
|
</div>
|
|
`;
|
|
retval.bottom += temp;
|
|
}
|
|
|
|
i++;
|
|
}
|
|
}
|
|
else{
|
|
retval.bottom+= `
|
|
<div class="card w-full bg-neutral text-neutral-content">
|
|
<div class="card-body">
|
|
<h3>${getTranslation("no_data_found")}</h3>
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
|
|
|
|
retval.bottom += `
|
|
</div>
|
|
</div>
|
|
</div>
|
|
`;
|
|
}
|
|
|
|
return retval;
|
|
}
|
|
|
|
static TableDataCreate(row, key){
|
|
if(key == "state"){
|
|
|
|
let badges = ""
|
|
|
|
|
|
if(row["Impounded"] == 1){
|
|
badges += `<div class="badge badge-secondary font-bold">${getTranslation("tag_impounded")}</div>`;
|
|
}
|
|
|
|
|
|
|
|
if(row[key] == "1"){
|
|
badges += `<div class="badge badge-error font-bold">${getTranslation("tag_is_wanted")}</div>`;
|
|
}
|
|
|
|
return `
|
|
<td>
|
|
${badges}
|
|
</td>`;
|
|
}
|
|
|
|
else if(key == "id"){
|
|
|
|
let isWantedButton = ``;
|
|
|
|
if(this.allowSetManhunt()){
|
|
isWantedButton = Form.getIsWantedButton(row[key], this.name, row.state == "1");
|
|
}
|
|
|
|
return `
|
|
<td>
|
|
${Form.getViewButtonIcon(row[key], this.name + ".view")}
|
|
${Form.getEditButtonIcon(row[key] , this.name + ".edit", this.allowEdit())}
|
|
${isWantedButton}
|
|
${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 == "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={}, readMode = false){
|
|
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];
|
|
|
|
if(!readMode && UseMotDateFromMyMechanicMDT){
|
|
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
|
|
,isRow:true
|
|
}
|
|
,"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
|
|
}
|
|
,"is_wanted": {
|
|
"val" : (data.is_wanted ?? false ? 1 : 0)
|
|
,"type" : (this.allowSetManhunt() ? "dropdown" : "hidden")
|
|
,"isRow": true
|
|
,"mandatory":false
|
|
,"hideInViewMode":true
|
|
,"options":System.GetBooleanOptions()
|
|
}
|
|
,"is_wanted_reason": {
|
|
"val" : data.is_wanted_reason ?? ""
|
|
,"type" : (this.allowSetManhunt() ? "text" : "hidden")
|
|
,"isRow": true
|
|
,"hideInViewMode":true
|
|
,"mandatory":false
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
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
|
|
}
|
|
,"mot": {
|
|
"val" : data.mot ?? ""
|
|
,"type" : "date"
|
|
,"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
|
|
}
|
|
,"is_wanted": {
|
|
"val" : (data.is_wanted ?? false ? 1 : 0)
|
|
,"type" : (this.allowSetManhunt() ? "dropdown" : "hidden")
|
|
,"isRow": true
|
|
,"mandatory":false
|
|
,"hideInViewMode":true
|
|
,"options":System.GetBooleanOptions()
|
|
}
|
|
,"is_wanted_reason": {
|
|
"val" : data.is_wanted_reason ?? ""
|
|
,"type" : (this.allowSetManhunt() ? "text" : "hidden")
|
|
,"isRow": true
|
|
,"hideInViewMode":true
|
|
,"mandatory":false
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
} |