fix: Updated serial_no filters in maintenance visit.
This commit is contained in:
parent
5d7d338d2a
commit
57f487a16b
@ -65,104 +65,104 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
|
|||||||
}, __("Get Items From"));
|
}, __("Get Items From"));
|
||||||
} else if (this.frm.doc.docstatus === 1) {
|
} else if (this.frm.doc.docstatus === 1) {
|
||||||
var s = me.frm.doc.schedules;
|
var s = me.frm.doc.schedules;
|
||||||
let flag = 0
|
let flag = 0;
|
||||||
for(let i in s){
|
for (let i in s) {
|
||||||
if (s[i].completion_status == pending){
|
if (s[i].completion_status == "Pending") {
|
||||||
flag = 1
|
flag = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(count){
|
if (flag) {
|
||||||
this.frm.add_custom_button(__('Create Maintenance Visit'), function () {
|
this.frm.add_custom_button(__('Create Maintenance Visit'), function () {
|
||||||
let items = me.frm.doc.items;
|
let items = me.frm.doc.items;
|
||||||
let s = me.frm.doc.schedules;
|
let s = me.frm.doc.schedules;
|
||||||
let options = "";
|
let options = "";
|
||||||
let dates = "";
|
let dates = "";
|
||||||
for (let i in items) {
|
for (let i in items) {
|
||||||
for(let d in s){
|
for (let d in s) {
|
||||||
if (s[d].item_name == items[i].item_name && s[d].completion_status == "Pending") {
|
if (s[d].item_name == items[i].item_name && s[d].completion_status == "Pending") {
|
||||||
options = options + '\n' + items[i].item_name
|
options = options + '\n' + items[i].item_name;
|
||||||
break
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
function formatDate(date) {
|
||||||
function formatDate(date) {
|
var d = new Date(date),
|
||||||
var d = new Date(date),
|
month = '' + (d.getMonth() + 1),
|
||||||
month = '' + (d.getMonth() + 1),
|
day = '' + d.getDate(),
|
||||||
day = '' + d.getDate(),
|
year = d.getFullYear();
|
||||||
year = d.getFullYear();
|
|
||||||
|
|
||||||
if (month.length < 2)
|
if (month.length < 2)
|
||||||
month = '0' + month;
|
month = '0' + month;
|
||||||
if (day.length < 2)
|
if (day.length < 2)
|
||||||
day = '0' + day;
|
day = '0' + day;
|
||||||
|
|
||||||
return [day, month, year].join('-');
|
return [day, month, year].join('-');
|
||||||
}
|
|
||||||
var schedule_id = ""
|
|
||||||
var d = new frappe.ui.Dialog({
|
|
||||||
title: __("Enter Visit Details"),
|
|
||||||
fields: [{
|
|
||||||
fieldtype: "Select",
|
|
||||||
fieldname: "item_name",
|
|
||||||
label: __("Item Name"),
|
|
||||||
options: options,
|
|
||||||
reqd: 1,
|
|
||||||
onchange: function () {
|
|
||||||
let field = d.get_field("scheduled_date");
|
|
||||||
dates = ""
|
|
||||||
for (let i in s) {
|
|
||||||
if (s[i].item_name == this.value && s[i].completion_status == "Pending") {
|
|
||||||
dates = dates + '\n' + formatDate(s[i].scheduled_date);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
field.df.options = dates;
|
|
||||||
field.refresh();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: __('Scheduled Date'),
|
|
||||||
fieldname: 'scheduled_date',
|
|
||||||
fieldtype: 'Select',
|
|
||||||
options: dates,
|
|
||||||
reqd: 1,
|
|
||||||
onchange: function(){
|
|
||||||
let field = d.get_field('item_name');
|
|
||||||
for(let i in s ){
|
|
||||||
if(s[i].item_name == field.value && formatDate(s[i].scheduled_date) == this.value){
|
|
||||||
schedule_id = s[i].name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
],
|
|
||||||
primary_action_label: 'Create Visit',
|
|
||||||
primary_action(values) {
|
|
||||||
frappe.call({
|
|
||||||
method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
|
|
||||||
args: {
|
|
||||||
item_name: values.item_name,
|
|
||||||
s_id: schedule_id,
|
|
||||||
source_name: me.frm.doc.name,
|
|
||||||
|
|
||||||
},
|
|
||||||
callback: function (r) {
|
|
||||||
if (!r.exc) {
|
|
||||||
frappe.model.sync(r.message);
|
|
||||||
frappe.set_route("Form", r.message.doctype, r.message.name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
});
|
|
||||||
d.hide();
|
|
||||||
}
|
}
|
||||||
})
|
var schedule_id = "";
|
||||||
d.show()
|
var d = new frappe.ui.Dialog({
|
||||||
|
title: __("Enter Visit Details"),
|
||||||
|
fields: [{
|
||||||
|
fieldtype: "Select",
|
||||||
|
fieldname: "item_name",
|
||||||
|
label: __("Item Name"),
|
||||||
|
options: options,
|
||||||
|
reqd: 1,
|
||||||
|
onchange: function () {
|
||||||
|
let field = d.get_field("scheduled_date");
|
||||||
|
dates = "";
|
||||||
|
for (let i in s) {
|
||||||
|
if (s[i].item_name == this.value && s[i].completion_status == "Pending") {
|
||||||
|
dates = dates + '\n' + formatDate(s[i].scheduled_date);
|
||||||
|
}
|
||||||
|
|
||||||
}, __('Create'));
|
}
|
||||||
|
field.df.options = dates;
|
||||||
|
field.refresh();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: __('Scheduled Date'),
|
||||||
|
fieldname: 'scheduled_date',
|
||||||
|
fieldtype: 'Select',
|
||||||
|
options: dates,
|
||||||
|
reqd: 1,
|
||||||
|
onchange: function () {
|
||||||
|
let field = d.get_field('item_name');
|
||||||
|
for (let i in s) {
|
||||||
|
if (s[i].item_name == field.value && formatDate(s[i].scheduled_date) == this.value) {
|
||||||
|
schedule_id = s[i].name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
],
|
||||||
|
primary_action_label: 'Create Visit',
|
||||||
|
primary_action(values) {
|
||||||
|
frappe.call({
|
||||||
|
method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
|
||||||
|
args: {
|
||||||
|
item_name: values.item_name,
|
||||||
|
s_id: schedule_id,
|
||||||
|
source_name: me.frm.doc.name,
|
||||||
|
|
||||||
|
},
|
||||||
|
callback: function (r) {
|
||||||
|
if (!r.exc) {
|
||||||
|
frappe.model.sync(r.message);
|
||||||
|
frappe.set_route("Form", r.message.doctype, r.message.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
d.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
d.show();
|
||||||
|
|
||||||
|
}, __('Create'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
start_date: function (doc, cdt, cdn) {
|
start_date: function (doc, cdt, cdn) {
|
||||||
|
@ -10,6 +10,7 @@ from frappe import throw, _
|
|||||||
from erpnext.utilities.transaction_base import TransactionBase, delete_events
|
from erpnext.utilities.transaction_base import TransactionBase, delete_events
|
||||||
from erpnext.stock.utils import get_valid_serial_nos
|
from erpnext.stock.utils import get_valid_serial_nos
|
||||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||||
|
from erpnext.stock.doctype.serial_no.serial_no import get_serial_nos
|
||||||
|
|
||||||
class MaintenanceSchedule(TransactionBase):
|
class MaintenanceSchedule(TransactionBase):
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
@ -245,18 +246,28 @@ class MaintenanceSchedule(TransactionBase):
|
|||||||
def on_trash(self):
|
def on_trash(self):
|
||||||
delete_events(self.doctype, self.name)
|
delete_events(self.doctype, self.name)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
|
def update_serial_nos(s_id):
|
||||||
|
serial_nos = frappe.db.get_value('Maintenance Schedule Detail', s_id, 'serial_no')
|
||||||
|
if serial_nos:
|
||||||
|
serial_nos = get_serial_nos(serial_nos)
|
||||||
|
return serial_nos
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
def make_maintenance_visit(source_name, target_doc=None,item_name=None,s_id=None):
|
def make_maintenance_visit(source_name, target_doc=None,item_name=None,s_id=None):
|
||||||
from frappe.model.mapper import get_mapped_doc
|
from frappe.model.mapper import get_mapped_doc
|
||||||
|
|
||||||
def update_status(source, target, parent):
|
def update_status(source, target, parent):
|
||||||
target.maintenance_type = "Scheduled"
|
target.maintenance_type = "Scheduled"
|
||||||
|
|
||||||
def update_sid(source, target, parent):
|
def update_sid(source, target, parent):
|
||||||
target.prevdoc_detail_docname = s_id
|
target.prevdoc_detail_docname = s_id
|
||||||
sales_person = frappe.db.get_value('Maintenance Schedule Detail', s_id, 'sales_person')
|
sales_person = frappe.db.get_value('Maintenance Schedule Detail', s_id, 'sales_person')
|
||||||
target.service_person = sales_person
|
target.service_person = sales_person
|
||||||
|
target.serial_no = ''
|
||||||
|
|
||||||
doclist = get_mapped_doc("Maintenance Schedule", source_name, {
|
doclist = get_mapped_doc("Maintenance Schedule", source_name, {
|
||||||
"Maintenance Schedule": {
|
"Maintenance Schedule": {
|
||||||
"doctype": "Maintenance Visit",
|
"doctype": "Maintenance Visit",
|
||||||
|
@ -2,39 +2,62 @@
|
|||||||
// License: GNU General Public License v3. See license.txt
|
// License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
frappe.provide("erpnext.maintenance");
|
frappe.provide("erpnext.maintenance");
|
||||||
|
var serial_nos = [];
|
||||||
frappe.ui.form.on('Maintenance Visit', {
|
frappe.ui.form.on('Maintenance Visit', {
|
||||||
refresh: function(frm) {
|
refresh: function (frm) {
|
||||||
//filters for serial_no based on item_code
|
//filters for serial_no based on item_code
|
||||||
frm.set_query('serial_no', 'purposes', function(frm, cdt, cdn) {
|
frm.set_query('serial_no', 'purposes', function (frm, cdt, cdn) {
|
||||||
let item = locals[cdt][cdn];
|
let item = locals[cdt][cdn];
|
||||||
return {
|
if (serial_nos) {
|
||||||
filters: {
|
return {
|
||||||
'item_code': item.item_code
|
filters: {
|
||||||
}
|
'item_code': item.item_code,
|
||||||
};
|
'name': ["in", serial_nos]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
'item_code': item.item_code
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
setup: function(frm) {
|
setup: function (frm) {
|
||||||
frm.set_query('contact_person', erpnext.queries.contact_query);
|
frm.set_query('contact_person', erpnext.queries.contact_query);
|
||||||
frm.set_query('customer_address', erpnext.queries.address_query);
|
frm.set_query('customer_address', erpnext.queries.address_query);
|
||||||
frm.set_query('customer', erpnext.queries.customer);
|
frm.set_query('customer', erpnext.queries.customer);
|
||||||
},
|
},
|
||||||
onload: function(frm) {
|
onload: function (frm, cdt, cdn) {
|
||||||
|
let item = locals[cdt][cdn];
|
||||||
|
let s_id = item.purposes[0].prevdoc_detail_docname;
|
||||||
|
frappe.call({
|
||||||
|
method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.update_serial_nos",
|
||||||
|
args: {
|
||||||
|
s_id: s_id
|
||||||
|
},
|
||||||
|
callback: function (r) {
|
||||||
|
serial_nos = r.message;
|
||||||
|
}
|
||||||
|
});
|
||||||
if (!frm.doc.status) {
|
if (!frm.doc.status) {
|
||||||
frm.set_value({status:'Draft'});
|
frm.set_value({ status: 'Draft' });
|
||||||
}
|
}
|
||||||
if (frm.doc.__islocal) {
|
if (frm.doc.__islocal) {
|
||||||
frm.set_value({mntc_date: frappe.datetime.get_today()});
|
frm.set_value({ mntc_date: frappe.datetime.get_today() });
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
customer: function(frm) {
|
customer: function (frm) {
|
||||||
erpnext.utils.get_party_details(frm);
|
erpnext.utils.get_party_details(frm);
|
||||||
},
|
},
|
||||||
customer_address: function(frm) {
|
customer_address: function (frm) {
|
||||||
erpnext.utils.get_address_display(frm, 'customer_address', 'address_display');
|
erpnext.utils.get_address_display(frm, 'customer_address', 'address_display');
|
||||||
},
|
},
|
||||||
contact_person: function(frm) {
|
contact_person: function (frm) {
|
||||||
erpnext.utils.get_contact_details(frm);
|
erpnext.utils.get_contact_details(frm);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,14 +65,14 @@ frappe.ui.form.on('Maintenance Visit', {
|
|||||||
|
|
||||||
// TODO commonify this code
|
// TODO commonify this code
|
||||||
erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
|
erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
|
||||||
refresh: function() {
|
refresh: function () {
|
||||||
frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
|
frappe.dynamic_link = { doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer' };
|
||||||
|
|
||||||
var me = this;
|
var me = this;
|
||||||
|
|
||||||
if (this.frm.doc.docstatus===0) {
|
if (this.frm.doc.docstatus === 0) {
|
||||||
this.frm.add_custom_button(__('Maintenance Schedule'),
|
this.frm.add_custom_button(__('Maintenance Schedule'),
|
||||||
function() {
|
function () {
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
|
method: "erpnext.maintenance.doctype.maintenance_schedule.maintenance_schedule.make_maintenance_visit",
|
||||||
source_doctype: "Maintenance Schedule",
|
source_doctype: "Maintenance Schedule",
|
||||||
@ -64,7 +87,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
|
|||||||
})
|
})
|
||||||
}, __("Get Items From"));
|
}, __("Get Items From"));
|
||||||
this.frm.add_custom_button(__('Warranty Claim'),
|
this.frm.add_custom_button(__('Warranty Claim'),
|
||||||
function() {
|
function () {
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: "erpnext.support.doctype.warranty_claim.warranty_claim.make_maintenance_visit",
|
method: "erpnext.support.doctype.warranty_claim.warranty_claim.make_maintenance_visit",
|
||||||
source_doctype: "Warranty Claim",
|
source_doctype: "Warranty Claim",
|
||||||
@ -80,7 +103,7 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
|
|||||||
})
|
})
|
||||||
}, __("Get Items From"));
|
}, __("Get Items From"));
|
||||||
this.frm.add_custom_button(__('Sales Order'),
|
this.frm.add_custom_button(__('Sales Order'),
|
||||||
function() {
|
function () {
|
||||||
erpnext.utils.map_current_doc({
|
erpnext.utils.map_current_doc({
|
||||||
method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",
|
method: "erpnext.selling.doctype.sales_order.sales_order.make_maintenance_visit",
|
||||||
source_doctype: "Sales Order",
|
source_doctype: "Sales Order",
|
||||||
@ -99,4 +122,4 @@ erpnext.maintenance.MaintenanceVisit = frappe.ui.form.Controller.extend({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
$.extend(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({frm: cur_frm}));
|
$.extend(cur_frm.cscript, new erpnext.maintenance.MaintenanceVisit({ frm: cur_frm }));
|
@ -30,20 +30,21 @@ class MaintenanceVisit(TransactionBase):
|
|||||||
def validate(self):
|
def validate(self):
|
||||||
self.validate_serial_no()
|
self.validate_serial_no()
|
||||||
self.validate_mntc_date()
|
self.validate_mntc_date()
|
||||||
|
|
||||||
|
def get_schedule_datail_ref(self):
|
||||||
|
if self.maintenance_type == "Scheduled":
|
||||||
|
p = self.purposes
|
||||||
|
for i in p:
|
||||||
|
detail_ref = i.prevdoc_detail_docname
|
||||||
|
return detail_ref
|
||||||
|
|
||||||
def update_completion_status(self):
|
def update_completion_status(self):
|
||||||
if self.maintenance_type == "Scheduled":
|
detail_ref = self.get_schedule_datail_ref()
|
||||||
p = self.purposes
|
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'completion_status', self.completion_status)
|
||||||
for i in p:
|
|
||||||
detail_ref = i.prevdoc_detail_docname
|
|
||||||
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'completion_status', self.completion_status)
|
|
||||||
|
|
||||||
def update_actual_date(self):
|
def update_actual_date(self):
|
||||||
if self.maintenance_type == "Scheduled":
|
detail_ref = self.get_schedule_datail_ref()
|
||||||
p = self.purposes
|
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'actual_date', self.mntc_date)
|
||||||
for i in p:
|
|
||||||
detail_ref = i.prevdoc_detail_docname
|
|
||||||
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'actual_date', self.mntc_date)
|
|
||||||
|
|
||||||
def update_customer_issue(self, flag):
|
def update_customer_issue(self, flag):
|
||||||
for d in self.get('purposes'):
|
for d in self.get('purposes'):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user