|
|
@ -1,10 +1,11 @@ |
|
|
|
// Copyright (c) 2021, Hard n Soft Technologies Pvt Ltd and contributors
|
|
|
|
// For license information, please see license.txt
|
|
|
|
|
|
|
|
cur_frm.fields_dict['vehicle_segment'].get_query = function(doc, cdt, cdn) { |
|
|
|
return {query:"smart_service.masters.doctype.vehicle.vehicle.vehicle_segment", |
|
|
|
}; |
|
|
|
cur_frm.fields_dict['vehicle_segment'].get_query = function (doc, cdt, cdn) { |
|
|
|
return { |
|
|
|
query: "smart_service.masters.doctype.vehicle.vehicle.vehicle_segment", |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
var original_display_order = 0; |
|
|
|
var vehicle_count = 0; |
|
|
@ -12,116 +13,116 @@ var skm_array = []; |
|
|
|
var dusted = false; |
|
|
|
|
|
|
|
frappe.ui.form.on('Vehicle', { |
|
|
|
onload: function(frm) { |
|
|
|
onload: function (frm) { |
|
|
|
if (!frm.is_new()) fnLoad_skm_initial_values(frm); |
|
|
|
}, |
|
|
|
}, |
|
|
|
image: function (frm) { |
|
|
|
var file = frm.doc.image; |
|
|
|
if (frm.doc.image) { |
|
|
|
frappe.call({ |
|
|
|
method: "smart_service.masters.doctype.vehicle.vehicle.image_size", |
|
|
|
args: { |
|
|
|
"image": frm.doc.image, |
|
|
|
"doc": frm.doc.name |
|
|
|
}, |
|
|
|
callback: function (r) { |
|
|
|
if(r.message){ |
|
|
|
if(r.message == frm.doc.image){ |
|
|
|
frm.doc.image = ''; |
|
|
|
cur_frm.refresh_field('image'); |
|
|
|
frappe.show_alert({ |
|
|
|
message: __('Max Dimesions are 2048*1080.'), |
|
|
|
indicator: 'yellow' |
|
|
|
}, 10); |
|
|
|
}else{ |
|
|
|
frm.doc.image = ''; |
|
|
|
cur_frm.refresh_field('image'); |
|
|
|
frappe.show_alert({ |
|
|
|
message: __('Max Image Size is 10MB.'), |
|
|
|
indicator: 'yellow' |
|
|
|
}, 10); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}, |
|
|
|
refresh: function(frm) { |
|
|
|
if (frm.is_new()){ |
|
|
|
frm.set_df_property('display_order', 'read_only', 1); |
|
|
|
var file = frm.doc.image; |
|
|
|
if (frm.doc.image) { |
|
|
|
frappe.call({ |
|
|
|
method: "smart_service.masters.doctype.vehicle.vehicle.image_size", |
|
|
|
args: { |
|
|
|
"image": frm.doc.image, |
|
|
|
"doc": frm.doc.name |
|
|
|
}, |
|
|
|
callback: function (r) { |
|
|
|
if (r.message) { |
|
|
|
if (r.message == frm.doc.image) { |
|
|
|
frm.doc.image = ''; |
|
|
|
cur_frm.refresh_field('image'); |
|
|
|
frappe.show_alert({ |
|
|
|
message: __('Max Dimesions are 2048*1080.'), |
|
|
|
indicator: 'yellow' |
|
|
|
}, 10); |
|
|
|
} else { |
|
|
|
frm.doc.image = ''; |
|
|
|
cur_frm.refresh_field('image'); |
|
|
|
frappe.show_alert({ |
|
|
|
message: __('Max Image Size is 10MB.'), |
|
|
|
indicator: 'yellow' |
|
|
|
}, 10); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}, |
|
|
|
refresh: function (frm) { |
|
|
|
if (frm.is_new()) { |
|
|
|
frm.set_df_property('display_order', 'read_only', 1); |
|
|
|
} else { |
|
|
|
frm.set_df_property('display_order', 'read_only', 0); |
|
|
|
frm.set_df_property('display_order', 'read_only', 0); |
|
|
|
} |
|
|
|
if (!frm.is_new()) { |
|
|
|
frm.disable_save(); //*** Check Refresh for Save Function
|
|
|
|
|
|
|
|
frm.add_custom_button(__('Save'), function(){ |
|
|
|
|
|
|
|
frm.add_custom_button(__('Save'), function () { |
|
|
|
fnSave(frm); |
|
|
|
}).addClass("btn-warning").css({'background-color':'#e31a37', 'color':'white'}); |
|
|
|
}).addClass("btn-warning").css({ 'background-color': '#e31a37', 'color': 'white' }); |
|
|
|
} |
|
|
|
|
|
|
|
frappe.db.count('Vehicle') |
|
|
|
frappe.db.count('Vehicle') |
|
|
|
.then(count => { |
|
|
|
vehicle_count = count + 1; |
|
|
|
if (frm.is_new()){ |
|
|
|
frm.set_value("display_order",vehicle_count); |
|
|
|
if (frm.is_new()) { |
|
|
|
frm.set_value("display_order", vehicle_count); |
|
|
|
} else { |
|
|
|
original_display_order = frm.doc.display_order; |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
validate: function(frm) { |
|
|
|
if(frm.doc.vehicle){ |
|
|
|
if (frm.doc.vehicle.length>50){ |
|
|
|
frappe.msgprint("<b>Vehicle:</b> Only <b> 50 </b> characters are allowed") |
|
|
|
|
|
|
|
validated = false; |
|
|
|
} |
|
|
|
if (frm.doc.vehicle.length == 1){ |
|
|
|
frappe.msgprint("<b>Vehicle:</b> Single character not allowed") |
|
|
|
validated = false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (frm.doc.vehicle == "."){ |
|
|
|
frappe.throw(__("Just a <b>.</b> is not prescribed!")); |
|
|
|
frappe.validated = false; |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
validate: function (frm) { |
|
|
|
if (frm.doc.vehicle) { |
|
|
|
if (frm.doc.vehicle.length > 50) { |
|
|
|
frappe.msgprint("<b>Vehicle:</b> Only <b> 50 </b> characters are allowed") |
|
|
|
|
|
|
|
validated = false; |
|
|
|
} |
|
|
|
if (frm.doc.vehicle.length == 1) { |
|
|
|
frappe.msgprint("<b>Vehicle:</b> Single character not allowed") |
|
|
|
validated = false; |
|
|
|
} |
|
|
|
} |
|
|
|
if (frm.doc.vehicle == ".") { |
|
|
|
frappe.throw(__("Just a <b>.</b> is not prescribed!")); |
|
|
|
frappe.validated = false; |
|
|
|
} |
|
|
|
//var regex = /^[A-Za-z0-9&-()@/,.<>_ ]*$/;
|
|
|
|
var regex = /[!@#$%^&*()_+\=\[\]{};'`~:"\\|.<>\/?]+/; |
|
|
|
if(frm.doc.vehicle){ |
|
|
|
if (regex.test(frm.doc.vehicle) === true){ |
|
|
|
frappe.throw(__("<b>Vehicle:</b> Only letters, numbers and <b> -,</b> are allowed.")); |
|
|
|
frappe.validated = false; |
|
|
|
} else if(frm.doc.vehicle) { |
|
|
|
if(frm.doc.vehicle.includes("'")) { |
|
|
|
if (frm.doc.vehicle) { |
|
|
|
if (regex.test(frm.doc.vehicle) === true) { |
|
|
|
frappe.throw(__("<b>Vehicle:</b> Only letters, numbers and <b> -,</b> are allowed.")); |
|
|
|
frappe.validated = false; |
|
|
|
} else if (frm.doc.vehicle) { |
|
|
|
if (frm.doc.vehicle.includes("'")) { |
|
|
|
frappe.throw(__("<b>Vehicle:</b> Only letters, numbers and <b> -,</b> are allowed.")); |
|
|
|
frappe.validated = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (frm.doc.display_order && frm.doc.vehicle && frm.doc.vehicle_segment){ |
|
|
|
|
|
|
|
if (frm.doc.display_order && frm.doc.vehicle && frm.doc.vehicle_segment) { |
|
|
|
//*** check if there is same display_order
|
|
|
|
frappe.db.get_list('Vehicle', { |
|
|
|
fields: ['display_order', 'name'], |
|
|
|
filters: { |
|
|
|
display_order: frm.doc.display_order, |
|
|
|
vehicle:["!=",frm.doc.vehicle] |
|
|
|
vehicle: ["!=", frm.doc.vehicle] |
|
|
|
} |
|
|
|
}).then(records => { |
|
|
|
if (records.length){ |
|
|
|
if (records.length) { |
|
|
|
frappe.db.set_value('Vehicle', records[0].name, { |
|
|
|
display_order: original_display_order |
|
|
|
}).then(r => { |
|
|
|
let doc = r.message; |
|
|
|
frappe.show_alert({ |
|
|
|
message:__('Swapped display order with: ' + records[0].name), |
|
|
|
indicator:'green' |
|
|
|
message: __('Swapped display order with: ' + records[0].name), |
|
|
|
indicator: 'green' |
|
|
|
}, 5); |
|
|
|
}); |
|
|
|
} else { |
|
|
|
if (frm.doc.display_order > vehicle_count){ |
|
|
|
if (frm.doc.display_order >= vehicle_count) { |
|
|
|
let display_vehicle_count = vehicle_count - 1; |
|
|
|
msgprint('There are only ' + display_vehicle_count + ' vehicle(s)'); |
|
|
|
frappe.validated = false; |
|
|
@ -129,23 +130,23 @@ frappe.ui.form.on('Vehicle', { |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
service_kilometers: function(frm) { |
|
|
|
service_kilometers: function (frm) { |
|
|
|
//*** Check & add any KM got added in Service Kilometers
|
|
|
|
|
|
|
|
dusted = true; |
|
|
|
frm.doc.service_kilometers.forEach(row => { |
|
|
|
let index = skm_array.findIndex(o => o.name === row.name); |
|
|
|
if (index < 0){ |
|
|
|
if (index < 0) { |
|
|
|
let index1 = skm_array.findIndex(o => o.skm_initial === row.service_kilometers); |
|
|
|
if (index1 >= 0){ |
|
|
|
if (index1 >= 0) { |
|
|
|
skm_array[index1].type = "Initial"; |
|
|
|
} else { |
|
|
|
var valueToPush = {}; |
|
|
|
valueToPush.type = "New"; |
|
|
|
valueToPush.name = row.name; |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers); |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null : row.service_kilometers); |
|
|
|
skm_array.push(valueToPush); |
|
|
|
} |
|
|
|
} |
|
|
@ -155,20 +156,20 @@ frappe.ui.form.on('Vehicle', { |
|
|
|
var valueToPush = {}; |
|
|
|
valueToPush.type = "Initial"; |
|
|
|
valueToPush.name = row.name; |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers); |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null : row.service_kilometers); |
|
|
|
current_skm_array.push(valueToPush); |
|
|
|
}); |
|
|
|
|
|
|
|
//*** Check & remove any KM got Removed in Service Kilometers
|
|
|
|
var idx=0; |
|
|
|
var idx = 0; |
|
|
|
skm_array.forEach(row => { |
|
|
|
idx++; |
|
|
|
let index = current_skm_array.findIndex(o => o.skm_initial === row.skm_initial); |
|
|
|
if (index < 0){ |
|
|
|
if (index < 0) { |
|
|
|
//row.type = row.type === "New" ? "No Action": "Deleted";
|
|
|
|
if (row.type == "New"){ |
|
|
|
skm_array.splice(idx-1, 1); |
|
|
|
}else{ |
|
|
|
if (row.type == "New") { |
|
|
|
skm_array.splice(idx - 1, 1); |
|
|
|
} else { |
|
|
|
row.type = "Deleted"; |
|
|
|
} |
|
|
|
} |
|
|
@ -177,74 +178,74 @@ frappe.ui.form.on('Vehicle', { |
|
|
|
}); |
|
|
|
|
|
|
|
frappe.ui.form.on('Vehicle', { |
|
|
|
after_save1: function(frm) { |
|
|
|
frappe.call({ |
|
|
|
after_save1: function (frm) { |
|
|
|
frappe.call({ |
|
|
|
"method": "smart_service.masters.doctype.vehicle.vehicle.update_km_mapping", |
|
|
|
"args": { |
|
|
|
"doc":frm.doc.name, |
|
|
|
"doc": frm.doc.name, |
|
|
|
"skm_array": skm_array, |
|
|
|
"skm": frm.doc.service_kilometers |
|
|
|
}, |
|
|
|
freeze: true, |
|
|
|
async:false, |
|
|
|
callback:function(r){} |
|
|
|
}, |
|
|
|
freeze: true, |
|
|
|
async: false, |
|
|
|
callback: function (r) { } |
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
function fnLoad_skm_initial_values(frm){ |
|
|
|
function fnLoad_skm_initial_values(frm) { |
|
|
|
// ***Store the Initial Service Kilometer values
|
|
|
|
skm_array.length = 0; |
|
|
|
frm.doc.service_kilometers.forEach(row => { |
|
|
|
var valueToPush = {}; |
|
|
|
valueToPush.type = "Initial"; |
|
|
|
valueToPush.name = row.name; |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null:row.service_kilometers); |
|
|
|
valueToPush.skm_initial = (row.service_kilometers === undefined ? null : row.service_kilometers); |
|
|
|
skm_array.push(valueToPush); |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
function fnSave(frm){ |
|
|
|
if (dusted){ |
|
|
|
function fnSave(frm) { |
|
|
|
if (dusted) { |
|
|
|
frappe.confirm('Changes will impact KM Mapping associated with this vehicle: <b>' + frm.doc.vehicle + '</b>', |
|
|
|
() => { |
|
|
|
//*** Change the State to Draft for KM
|
|
|
|
frm.save(); |
|
|
|
skm_array.forEach((array_row) => { |
|
|
|
|
|
|
|
|
|
|
|
//*** Add Edit Delete the respective Kiolmeter with Updated/Deleted SKM
|
|
|
|
if (array_row.type !== "Initial"){ |
|
|
|
if (array_row.type !== "Initial") { |
|
|
|
frappe.call({ |
|
|
|
"method": "smart_service.masters.doctype.vehicle.vehicle.update_km_mapping", |
|
|
|
"args": { |
|
|
|
"doc": frm.doc.name, |
|
|
|
"vehicle":frm.doc.vehicle, |
|
|
|
"type":array_row.type, |
|
|
|
"skm_initial":array_row.skm_initial |
|
|
|
}, |
|
|
|
freeze: true, |
|
|
|
async:false, |
|
|
|
callback:function(r){} |
|
|
|
"vehicle": frm.doc.vehicle, |
|
|
|
"type": array_row.type, |
|
|
|
"skm_initial": array_row.skm_initial |
|
|
|
}, |
|
|
|
freeze: true, |
|
|
|
async: false, |
|
|
|
callback: function (r) { } |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
frappe.show_alert({ |
|
|
|
message:__('Inserted Rows in Respective KM Doc & made as Draft Mode!'), |
|
|
|
indicator:'green' |
|
|
|
message: __('Inserted Rows in Respective KM Doc & made as Draft Mode!'), |
|
|
|
indicator: 'green' |
|
|
|
}, 5); |
|
|
|
fnLoad_skm_initial_values(frm); |
|
|
|
}, () => { |
|
|
|
// action to perform if No is selected
|
|
|
|
}); |
|
|
|
} else if(frm.is_dirty()){ |
|
|
|
}); |
|
|
|
} else if (frm.is_dirty()) { |
|
|
|
frm.save(); |
|
|
|
fnLoad_skm_initial_values(frm); |
|
|
|
} else { |
|
|
|
frappe.show_alert({ |
|
|
|
message:__('No updates for Kilometer Mapping... '), |
|
|
|
indicator:'yellow' |
|
|
|
message: __('No updates for Kilometer Mapping... '), |
|
|
|
indicator: 'yellow' |
|
|
|
}, 5); |
|
|
|
} |
|
|
|
} |