fix: Updated serial_no filters in maintenance visit.

This commit is contained in:
noahjacob 2021-04-20 13:12:14 +05:30
parent 5d7d338d2a
commit 57f487a16b
4 changed files with 158 additions and 123 deletions

View File

@ -65,13 +65,13 @@ 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;
@ -80,8 +80,8 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
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;
} }
} }
} }
@ -98,7 +98,7 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
return [day, month, year].join('-'); return [day, month, year].join('-');
} }
var schedule_id = "" var schedule_id = "";
var d = new frappe.ui.Dialog({ var d = new frappe.ui.Dialog({
title: __("Enter Visit Details"), title: __("Enter Visit Details"),
fields: [{ fields: [{
@ -109,7 +109,7 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
reqd: 1, reqd: 1,
onchange: function () { onchange: function () {
let field = d.get_field("scheduled_date"); let field = d.get_field("scheduled_date");
dates = "" dates = "";
for (let i in s) { for (let i in s) {
if (s[i].item_name == this.value && s[i].completion_status == "Pending") { if (s[i].item_name == this.value && s[i].completion_status == "Pending") {
dates = dates + '\n' + formatDate(s[i].scheduled_date); dates = dates + '\n' + formatDate(s[i].scheduled_date);
@ -157,8 +157,8 @@ erpnext.maintenance.MaintenanceSchedule = frappe.ui.form.Controller.extend({
}); });
d.hide(); d.hide();
} }
}) });
d.show() d.show();
}, __('Create')); }, __('Create'));
} }

View File

@ -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,6 +246,15 @@ 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
@ -256,6 +266,7 @@ def make_maintenance_visit(source_name, target_doc=None,item_name=None,s_id=None
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": {

View File

@ -2,17 +2,29 @@
// 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];
if (serial_nos) {
return {
filters: {
'item_code': item.item_code,
'name': ["in", serial_nos]
}
};
} else {
return { return {
filters: { filters: {
'item_code': item.item_code 'item_code': item.item_code
} }
}; };
}
}); });
}, },
setup: function (frm) { setup: function (frm) {
@ -20,7 +32,18 @@ frappe.ui.form.on('Maintenance Visit', {
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' });
} }
@ -43,7 +66,7 @@ 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;

View File

@ -31,18 +31,19 @@ class MaintenanceVisit(TransactionBase):
self.validate_serial_no() self.validate_serial_no()
self.validate_mntc_date() self.validate_mntc_date()
def update_completion_status(self): def get_schedule_datail_ref(self):
if self.maintenance_type == "Scheduled": if self.maintenance_type == "Scheduled":
p = self.purposes p = self.purposes
for i in p: for i in p:
detail_ref = i.prevdoc_detail_docname detail_ref = i.prevdoc_detail_docname
return detail_ref
def update_completion_status(self):
detail_ref = self.get_schedule_datail_ref()
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'completion_status', self.completion_status) 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
for i in p:
detail_ref = i.prevdoc_detail_docname
frappe.db.set_value('Maintenance Schedule Detail', detail_ref, 'actual_date', self.mntc_date) 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):