From b62bf788146a689481598ed3009ec2509272193c Mon Sep 17 00:00:00 2001 From: s-aga-r Date: Thu, 27 Apr 2023 19:43:37 +0530 Subject: [PATCH] refactor: `packing_slip.js` --- .../doctype/packing_slip/packing_slip.js | 195 +++++++++--------- 1 file changed, 102 insertions(+), 93 deletions(-) diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js index 40d46852d0..f9cd2bf08c 100644 --- a/erpnext/stock/doctype/packing_slip/packing_slip.js +++ b/erpnext/stock/doctype/packing_slip/packing_slip.js @@ -1,113 +1,122 @@ -// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt +// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors +// For license information, please see license.txt -cur_frm.fields_dict['delivery_note'].get_query = function(doc, cdt, cdn) { - return{ - filters:{ 'docstatus': 0} - } -} +frappe.ui.form.on("Packing Slip", { + setup: (frm) => { + frm.set_query('delivery_note', () => { + return { + filters: { + docstatus: 0, + } + } + }); + frm.set_query('item_code', 'items', (doc, cdt, cdn) => { + if (!doc.delivery_note) { + frappe.throw(__("Please select a Delivery Note")); + } else { + let d = locals[cdt][cdn]; + return { + query: 'erpnext.stock.doctype.packing_slip.packing_slip.item_details', + filters: { + delivery_note: doc.delivery_note, + } + } + } + }); + }, -cur_frm.fields_dict['items'].grid.get_field('item_code').get_query = function(doc, cdt, cdn) { - if(!doc.delivery_note) { - frappe.throw(__("Please select a Delivery Note")); - } else { - return { - query: "erpnext.stock.doctype.packing_slip.packing_slip.item_details", - filters:{ 'delivery_note': doc.delivery_note} + refresh: (frm) => { + frm.toggle_display("misc_details", frm.doc.amended_from); + }, + + validate: (frm) => { + frm.trigger("validate_case_nos"); + frm.trigger("validate_calculate_item_details"); + }, + + onload_post_render: (frm) => { + if(frm.doc.delivery_note && frm.doc.__islocal) { + frm.trigger("get_items"); } - } -} + }, -cur_frm.cscript.onload_post_render = function(doc, cdt, cdn) { - if(doc.delivery_note && doc.__islocal) { - cur_frm.cscript.get_items(doc, cdt, cdn); - } -} + get_items: (frm) => { + return frm.call({ + doc: frm.doc, + method: "get_items", + callback: function(r) { + if(!r.exc) { + frm.refresh(); + } + } + }); + }, -cur_frm.cscript.get_items = function(doc, cdt, cdn) { - return this.frm.call({ - doc: this.frm.doc, - method: "get_items", - callback: function(r) { - if(!r.exc) cur_frm.refresh(); + // To Case No. cannot be less than From Case No. + validate_case_nos: (frm) => { + doc = locals[frm.doc.doctype][frm.doc.name]; + + if(cint(doc.from_case_no) == 0) { + frappe.msgprint(__("The 'From Package No.' field must neither be empty nor it's value less than 1.")); + frappe.validated = false; + } else if(!cint(doc.to_case_no)) { + doc.to_case_no = doc.from_case_no; + refresh_field('to_case_no'); + } else if(cint(doc.to_case_no) < cint(doc.from_case_no)) { + frappe.msgprint(__("'To Case No.' cannot be less than 'From Case No.'")); + frappe.validated = false; } - }); -} + }, -cur_frm.cscript.refresh = function(doc, dt, dn) { - cur_frm.toggle_display("misc_details", doc.amended_from); -} + validate_calculate_item_details: (frm) => { + doc = locals[frm.doc.doctype][frm.doc.name]; + var ps_detail = doc.items || []; -cur_frm.cscript.validate = function(doc, cdt, cdn) { - cur_frm.cscript.validate_case_nos(doc); - cur_frm.cscript.validate_calculate_item_details(doc); -} + frm.events.validate_duplicate_items(doc, ps_detail); + frm.events.calc_net_total_pkg(doc, ps_detail); + }, -// To Case No. cannot be less than From Case No. -cur_frm.cscript.validate_case_nos = function(doc) { - doc = locals[doc.doctype][doc.name]; - if(cint(doc.from_case_no)==0) { - frappe.msgprint(__("The 'From Package No.' field must neither be empty nor it's value less than 1.")); - frappe.validated = false; - } else if(!cint(doc.to_case_no)) { - doc.to_case_no = doc.from_case_no; - refresh_field('to_case_no'); - } else if(cint(doc.to_case_no) < cint(doc.from_case_no)) { - frappe.msgprint(__("'To Case No.' cannot be less than 'From Case No.'")); - frappe.validated = false; - } -} + // Do not allow duplicate items i.e. items with same item_code + // Also check for 0 qty + validate_duplicate_items: (doc, ps_detail) => { + for(var i=0; i { + var net_weight_pkg = 0; + doc.net_weight_uom = (ps_detail && ps_detail.length) ? ps_detail[0].weight_uom : ''; + doc.gross_weight_uom = doc.net_weight_uom; + + for(var i=0; i