From b98612ff5b0ae3931696d01c0cf2908c45197467 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 12:20:42 +0530 Subject: [PATCH 01/14] feat: Added auto fetch logic and button for client --- .../js/utils/serial_no_batch_selector.js | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index b94cdd8c4c3..0e82b180b28 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -344,9 +344,27 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.serial_list = []; return [ {fieldtype: 'Section Break', label: __('Serial No')}, + { + fieldname: 'auto_fetch_toggle', + fieldtype:'Check', + label: __('Fetch based on FIFO'), + default: 0, + onchange: function(e) { + const show_auto_fetch = this.get_value(); + if (show_auto_fetch) { + this.layout.set_df_property('auto_qty', 'hidden', 0); + this.layout.set_df_property('auto_fetch_button', 'hidden', 0); + this.layout.set_df_property('serial_no_select', 'hidden', 1); + } else { + this.layout.set_df_property('serial_no_select', 'hidden', 0); + this.layout.set_df_property('auto_qty', 'hidden', 1); + this.layout.set_df_property('auto_fetch_button', 'hidden', 1); + } + } + }, { fieldtype: 'Link', fieldname: 'serial_no_select', options: 'Serial No', - label: __('Select'), + label: __('Select to add serial no.'), get_query: function() { return { filters: {item_code: me.item_code, warehouse: me.warehouse_details.name}}; }, @@ -379,6 +397,43 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.in_local_change = 0; } }, + { + fieldname: 'auto_qty', + fieldtype:'Float', + read_only: 0, + hidden: 1, + label: __('Auto Fetch Quantity'), + default: 0, + }, + { + fieldname: 'auto_fetch_button', + fieldtype:'Button', + label: __('Fetch Serial Numbers'), + read_only: 0, + hidden: 1, + click: (e) => { + // window.abc = this.dialog + console.log(this.dialog.fields_dict.auto_qty.get_value()) + let auto_fetch_qty_field = this.dialog.fields_dict.auto_qty; + let fetch_qty = auto_fetch_qty_field.get_value(); + let numbers = frappe.call({ + method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", + args: { + qty: fetch_qty, + item_code: me.item_code, + warehouse: me.warehouse_details.name + } + }); + + numbers.then((data) => { + let auto_fetched_serial_numbers = data.message; + let serial_no_list_field = this.layout.fields_dict.serial_no; + numbers = auto_fetched_serial_numbers.join('\n'); + serial_no_list_field.set_value(numbers); + auto_fetch_qty_field.set_value(""); + }) + } + }, {fieldtype: 'Column Break'}, { fieldname: 'serial_no', From 8ec54c2214b9f408859d52d41ea2b9b087080a97 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 12:20:55 +0530 Subject: [PATCH 02/14] feat: Added auto fetch serial numbers API --- erpnext/stock/doctype/serial_no/serial_no.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index cb1d1532447..a421a209bdb 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -459,3 +459,18 @@ def get_delivery_note_serial_no(item_code, qty, delivery_note): serial_nos = '\n'.join(dn_serial_nos) return serial_nos + +@frappe.whitelist() +def auto_fetch_serial_number(qty, item_code, warehouse): + serial_numbers = frappe.db.sql_list("""select name from `tabSerial No` + where + item_code = %(item_code)s + and warehouse = %(warehouse)s + and delivery_document_no is null + and sales_invoice is null + limit {0}""".format(cint(qty)), { + 'item_code': item_code, + 'warehouse': warehouse + }) + + return serial_numbers \ No newline at end of file From 41cf945247b0d690032030a311966d5b959ab698 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 12:47:39 +0530 Subject: [PATCH 03/14] feat (UX): Refactored batch selector --- .../js/utils/serial_no_batch_selector.js | 115 +++++++++--------- 1 file changed, 59 insertions(+), 56 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index 0e82b180b28..93b7ce98bc0 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -68,10 +68,38 @@ erpnext.SerialNoBatchSelector = Class.extend({ { fieldname: 'qty', fieldtype:'Float', - read_only: 1, + read_only: me.has_batch ? 1 : 0, label: __(me.has_batch ? 'Total Qty' : 'Qty'), default: 0 }, + { + fieldname: 'auto_fetch_button', + fieldtype:'Button', + hidden: me.has_batch ? 1 : 0, + label: __(me.has_batch ? 'Fetch Batch Numbers' : 'Fetch Serial Numbers'), + click: (e) => { + // window.abc = this.dialog + // console.log(this.dialog.fields_dict.qty.get_value()) + // let auto_fetch_qty_field = this.dialog.fields_dict.qty; + // let fetch_qty = auto_fetch_qty_field.get_value(); + let numbers = frappe.call({ + method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", + args: { + qty: this.dialog.fields_dict.qty.get_value(), + item_code: me.item_code, + warehouse: me.warehouse_details.name + } + }); + + numbers.then((data) => { + let auto_fetched_serial_numbers = data.message; + let serial_no_list_field = this.dialog.fields_dict.serial_no; + numbers = auto_fetched_serial_numbers.join('\n'); + serial_no_list_field.set_value(numbers); + // auto_fetch_qty_field.set_value(""); + }) + } + } ]; if(this.has_batch) { @@ -234,7 +262,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ var me = this; return [ {fieldtype:'Section Break', label: __('Batches')}, - {fieldname: 'batches', fieldtype: 'Table', + {fieldname: 'batches', fieldtype: 'Table', label: __('Batch Entries'), fields: [ { fieldtype:'Link', @@ -344,24 +372,6 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.serial_list = []; return [ {fieldtype: 'Section Break', label: __('Serial No')}, - { - fieldname: 'auto_fetch_toggle', - fieldtype:'Check', - label: __('Fetch based on FIFO'), - default: 0, - onchange: function(e) { - const show_auto_fetch = this.get_value(); - if (show_auto_fetch) { - this.layout.set_df_property('auto_qty', 'hidden', 0); - this.layout.set_df_property('auto_fetch_button', 'hidden', 0); - this.layout.set_df_property('serial_no_select', 'hidden', 1); - } else { - this.layout.set_df_property('serial_no_select', 'hidden', 0); - this.layout.set_df_property('auto_qty', 'hidden', 1); - this.layout.set_df_property('auto_fetch_button', 'hidden', 1); - } - } - }, { fieldtype: 'Link', fieldname: 'serial_no_select', options: 'Serial No', label: __('Select to add serial no.'), @@ -397,47 +407,40 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.in_local_change = 0; } }, - { - fieldname: 'auto_qty', - fieldtype:'Float', - read_only: 0, - hidden: 1, - label: __('Auto Fetch Quantity'), - default: 0, - }, - { - fieldname: 'auto_fetch_button', - fieldtype:'Button', - label: __('Fetch Serial Numbers'), - read_only: 0, - hidden: 1, - click: (e) => { - // window.abc = this.dialog - console.log(this.dialog.fields_dict.auto_qty.get_value()) - let auto_fetch_qty_field = this.dialog.fields_dict.auto_qty; - let fetch_qty = auto_fetch_qty_field.get_value(); - let numbers = frappe.call({ - method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", - args: { - qty: fetch_qty, - item_code: me.item_code, - warehouse: me.warehouse_details.name - } - }); + // { + // fieldname: 'auto_fetch_button', + // fieldtype:'Button', + // label: __('Fetch Serial Numbers'), + // read_only: 0, + // hidden: 1, + // click: (e) => { + // // window.abc = this.dialog + // console.log(this.dialog.fields_dict.auto_qty.get_value()) + // let auto_fetch_qty_field = this.dialog.fields_dict.auto_qty; + // let fetch_qty = auto_fetch_qty_field.get_value(); + // let numbers = frappe.call({ + // method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", + // args: { + // qty: fetch_qty, + // item_code: me.item_code, + // warehouse: me.warehouse_details.name + // } + // }); - numbers.then((data) => { - let auto_fetched_serial_numbers = data.message; - let serial_no_list_field = this.layout.fields_dict.serial_no; - numbers = auto_fetched_serial_numbers.join('\n'); - serial_no_list_field.set_value(numbers); - auto_fetch_qty_field.set_value(""); - }) - } - }, + // numbers.then((data) => { + // let auto_fetched_serial_numbers = data.message; + // let serial_no_list_field = this.layout.fields_dict.serial_no; + // numbers = auto_fetched_serial_numbers.join('\n'); + // serial_no_list_field.set_value(numbers); + // auto_fetch_qty_field.set_value(""); + // }) + // } + // }, {fieldtype: 'Column Break'}, { fieldname: 'serial_no', fieldtype: 'Small Text', + label: __(me.has_batch ? 'Selected Batch Numbers' : 'Selected Serial Numbers'), onchange: function() { me.serial_list = this.get_value() .replace(/\n/g, ' ').match(/\S+/g) || []; From 19a41ed16d2dc76c46054159c733add578c12473 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 12:51:05 +0530 Subject: [PATCH 04/14] chore: code cleaning --- .../js/utils/serial_no_batch_selector.js | 35 +------------------ 1 file changed, 1 insertion(+), 34 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index 93b7ce98bc0..6a346933acd 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -76,12 +76,8 @@ erpnext.SerialNoBatchSelector = Class.extend({ fieldname: 'auto_fetch_button', fieldtype:'Button', hidden: me.has_batch ? 1 : 0, - label: __(me.has_batch ? 'Fetch Batch Numbers' : 'Fetch Serial Numbers'), + label: __('Fetch Serial Numbers based on FIFO'), click: (e) => { - // window.abc = this.dialog - // console.log(this.dialog.fields_dict.qty.get_value()) - // let auto_fetch_qty_field = this.dialog.fields_dict.qty; - // let fetch_qty = auto_fetch_qty_field.get_value(); let numbers = frappe.call({ method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", args: { @@ -407,35 +403,6 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.in_local_change = 0; } }, - // { - // fieldname: 'auto_fetch_button', - // fieldtype:'Button', - // label: __('Fetch Serial Numbers'), - // read_only: 0, - // hidden: 1, - // click: (e) => { - // // window.abc = this.dialog - // console.log(this.dialog.fields_dict.auto_qty.get_value()) - // let auto_fetch_qty_field = this.dialog.fields_dict.auto_qty; - // let fetch_qty = auto_fetch_qty_field.get_value(); - // let numbers = frappe.call({ - // method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", - // args: { - // qty: fetch_qty, - // item_code: me.item_code, - // warehouse: me.warehouse_details.name - // } - // }); - - // numbers.then((data) => { - // let auto_fetched_serial_numbers = data.message; - // let serial_no_list_field = this.layout.fields_dict.serial_no; - // numbers = auto_fetched_serial_numbers.join('\n'); - // serial_no_list_field.set_value(numbers); - // auto_fetch_qty_field.set_value(""); - // }) - // } - // }, {fieldtype: 'Column Break'}, { fieldname: 'serial_no', From 407496b5282ed70e4af106e1338690b7b05c6b84 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 13:32:41 +0530 Subject: [PATCH 05/14] chore: minor changes to labels --- erpnext/public/js/utils/serial_no_batch_selector.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index 6a346933acd..e8cfc6bf4d3 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -76,7 +76,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ fieldname: 'auto_fetch_button', fieldtype:'Button', hidden: me.has_batch ? 1 : 0, - label: __('Fetch Serial Numbers based on FIFO'), + label: __('Fetch based on FIFO'), click: (e) => { let numbers = frappe.call({ method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", @@ -367,10 +367,10 @@ erpnext.SerialNoBatchSelector = Class.extend({ var me = this; this.serial_list = []; return [ - {fieldtype: 'Section Break', label: __('Serial No')}, + {fieldtype: 'Section Break', label: __('Serial Numbers')}, { fieldtype: 'Link', fieldname: 'serial_no_select', options: 'Serial No', - label: __('Select to add serial no.'), + label: __('Select to add Serial Number.'), get_query: function() { return { filters: {item_code: me.item_code, warehouse: me.warehouse_details.name}}; }, From 61d6b677e4ec66e520654eb9d2a23ae500429157 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 15:17:27 +0530 Subject: [PATCH 06/14] feat: Show standard serial number selector in item grid form --- erpnext/public/js/utils.js | 38 ++------------------------------------ 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index fb4f35081c2..5a6ae323f57 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -58,43 +58,9 @@ $.extend(erpnext, { .css({"margin-bottom": "10px", "margin-top": "10px"}) .appendTo(grid_row.grid_form.fields_dict.serial_no.$wrapper)); + var me = this $btn.on("click", function() { - var d = new frappe.ui.Dialog({ - title: __("Add Serial No"), - fields: [ - { - "fieldtype": "Link", - "fieldname": "serial_no", - "options": "Serial No", - "label": __("Serial No"), - "get_query": function () { - return { - filters: { - item_code:grid_row.doc.item_code, - warehouse:cur_frm.doc.is_return ? null : grid_row.doc.warehouse - } - } - } - }, - { - "fieldtype": "Button", - "fieldname": "add", - "label": __("Add") - } - ] - }); - - d.get_input("add").on("click", function() { - var serial_no = d.get_value("serial_no"); - if(serial_no) { - var val = (grid_row.doc.serial_no || "").split("\n").concat([serial_no]).join("\n"); - grid_row.grid_form.fields_dict.serial_no.set_model_value(val.trim()); - } - d.hide(); - return false; - }); - - d.show(); + me.show_serial_batch_selector(grid_row.frm, grid_row.doc) }); } }); From eee5c38911407189b4d8a67e868fec4df426db6c Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 15:57:51 +0530 Subject: [PATCH 07/14] feat: Use controller for serial no. API --- erpnext/stock/doctype/serial_no/serial_no.py | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index a421a209bdb..c6d1ed24b7b 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -462,15 +462,5 @@ def get_delivery_note_serial_no(item_code, qty, delivery_note): @frappe.whitelist() def auto_fetch_serial_number(qty, item_code, warehouse): - serial_numbers = frappe.db.sql_list("""select name from `tabSerial No` - where - item_code = %(item_code)s - and warehouse = %(warehouse)s - and delivery_document_no is null - and sales_invoice is null - limit {0}""".format(cint(qty)), { - 'item_code': item_code, - 'warehouse': warehouse - }) - + serial_numbers = frappe.get_list("Serial No", filters={"item_code": item_code, "warehouse": warehouse, "delivery_document_no": "", "sales_invoice": ""}, limit=qty, order_by="creation") return serial_numbers \ No newline at end of file From c791c3b24b6d27d01510f5337747f9e98afbd1f5 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 16:07:32 +0530 Subject: [PATCH 08/14] fix: Minor bug in serial no auto fetch api --- erpnext/stock/doctype/serial_no/serial_no.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index c6d1ed24b7b..be26a18f443 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -463,4 +463,4 @@ def get_delivery_note_serial_no(item_code, qty, delivery_note): @frappe.whitelist() def auto_fetch_serial_number(qty, item_code, warehouse): serial_numbers = frappe.get_list("Serial No", filters={"item_code": item_code, "warehouse": warehouse, "delivery_document_no": "", "sales_invoice": ""}, limit=qty, order_by="creation") - return serial_numbers \ No newline at end of file + return [item['name'] for item in serial_numbers] \ No newline at end of file From 46901076be3d1cb2f5cda20abba443c82551f976 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 17:01:01 +0530 Subject: [PATCH 09/14] feat: Use standard serial picker to add as well as update serial numbers --- .../js/utils/serial_no_batch_selector.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index e8cfc6bf4d3..f479066964b 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -2,15 +2,13 @@ erpnext.SerialNoBatchSelector = Class.extend({ init: function(opts, show_dialog) { $.extend(this, opts); - this.show_dialog = show_dialog; + this.show_dialog = show_dialog // frm, item, warehouse_details, has_batch, oldest let d = this.item; - - // Don't show dialog if batch no or serial no already set if(d && d.has_batch_no && (!d.batch_no || this.show_dialog)) { this.has_batch = 1; this.setup(); - } else if(d && d.has_serial_no && (!d.serial_no || this.show_dialog)) { + } else if(d && d.has_serial_no && !(this.show_dialog == false)) { this.has_batch = 0; this.setup(); } @@ -78,10 +76,11 @@ erpnext.SerialNoBatchSelector = Class.extend({ hidden: me.has_batch ? 1 : 0, label: __('Fetch based on FIFO'), click: (e) => { + let qty = this.dialog.fields_dict.qty.get_value() let numbers = frappe.call({ method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", args: { - qty: this.dialog.fields_dict.qty.get_value(), + qty: qty, item_code: me.item_code, warehouse: me.warehouse_details.name } @@ -89,10 +88,13 @@ erpnext.SerialNoBatchSelector = Class.extend({ numbers.then((data) => { let auto_fetched_serial_numbers = data.message; + records_length = auto_fetched_serial_numbers.length + if(records_length < qty) { + frappe.msgprint(`Fetched only ${records_length} serial numbers`) + } let serial_no_list_field = this.dialog.fields_dict.serial_no; numbers = auto_fetched_serial_numbers.join('\n'); serial_no_list_field.set_value(numbers); - // auto_fetch_qty_field.set_value(""); }) } } @@ -111,6 +113,10 @@ erpnext.SerialNoBatchSelector = Class.extend({ fields: fields }); + if (this.item.serial_no) { + this.dialog.fields_dict.serial_no.set_value(this.item.serial_no) + } + this.dialog.set_primary_action(__('Insert'), function() { me.values = me.dialog.get_values(); if(me.validate()) { From ed4b052df82dd3a7413ba2aced154cd8e9025f7e Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 17:03:25 +0530 Subject: [PATCH 10/14] style (codacy): code formatting fixes --- erpnext/public/js/utils.js | 4 ++-- erpnext/public/js/utils/serial_no_batch_selector.js | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js index 5a6ae323f57..6860d6a2384 100755 --- a/erpnext/public/js/utils.js +++ b/erpnext/public/js/utils.js @@ -58,9 +58,9 @@ $.extend(erpnext, { .css({"margin-bottom": "10px", "margin-top": "10px"}) .appendTo(grid_row.grid_form.fields_dict.serial_no.$wrapper)); - var me = this + var me = this; $btn.on("click", function() { - me.show_serial_batch_selector(grid_row.frm, grid_row.doc) + me.show_serial_batch_selector(grid_row.frm, grid_row.doc); }); } }); diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index f479066964b..e0539383daf 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -88,14 +88,14 @@ erpnext.SerialNoBatchSelector = Class.extend({ numbers.then((data) => { let auto_fetched_serial_numbers = data.message; - records_length = auto_fetched_serial_numbers.length + records_length = auto_fetched_serial_numbers.length; if(records_length < qty) { - frappe.msgprint(`Fetched only ${records_length} serial numbers`) + frappe.msgprint(`Fetched only ${records_length} serial numbers.`); } let serial_no_list_field = this.dialog.fields_dict.serial_no; numbers = auto_fetched_serial_numbers.join('\n'); serial_no_list_field.set_value(numbers); - }) + }); } } ]; From 6d3302b0cc2306a6f53296b6ac5f8cffd65c6fc8 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Tue, 16 Apr 2019 18:25:53 +0530 Subject: [PATCH 11/14] style (codacy): code formatting fixes --- erpnext/public/js/utils/serial_no_batch_selector.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index e0539383daf..d02991225be 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -2,7 +2,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ init: function(opts, show_dialog) { $.extend(this, opts); - this.show_dialog = show_dialog + this.show_dialog = show_dialog; // frm, item, warehouse_details, has_batch, oldest let d = this.item; if(d && d.has_batch_no && (!d.batch_no || this.show_dialog)) { @@ -76,7 +76,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ hidden: me.has_batch ? 1 : 0, label: __('Fetch based on FIFO'), click: (e) => { - let qty = this.dialog.fields_dict.qty.get_value() + let qty = this.dialog.fields_dict.qty.get_value(); let numbers = frappe.call({ method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", args: { @@ -88,7 +88,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ numbers.then((data) => { let auto_fetched_serial_numbers = data.message; - records_length = auto_fetched_serial_numbers.length; + let records_length = auto_fetched_serial_numbers.length; if(records_length < qty) { frappe.msgprint(`Fetched only ${records_length} serial numbers.`); } @@ -114,7 +114,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ }); if (this.item.serial_no) { - this.dialog.fields_dict.serial_no.set_value(this.item.serial_no) + this.dialog.fields_dict.serial_no.set_value(this.item.serial_no); } this.dialog.set_primary_action(__('Insert'), function() { From 5522cf8c26c85111b482982bd9c63f60659f7ee4 Mon Sep 17 00:00:00 2001 From: scmmishra Date: Wed, 17 Apr 2019 10:26:21 +0530 Subject: [PATCH 12/14] fix: codacy linting --- erpnext/public/js/utils/serial_no_batch_selector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index d02991225be..5287942819f 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -75,7 +75,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ fieldtype:'Button', hidden: me.has_batch ? 1 : 0, label: __('Fetch based on FIFO'), - click: (e) => { + click: () => { let qty = this.dialog.fields_dict.qty.get_value(); let numbers = frappe.call({ method: "erpnext.stock.doctype.serial_no.serial_no.auto_fetch_serial_number", From 63921ebbc97d84e95e322a36799afa46938771db Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Wed, 17 Apr 2019 15:29:29 +0530 Subject: [PATCH 13/14] style: fixed formatting Fixed formatting for for auto_fetch_serial_number --- erpnext/stock/doctype/serial_no/serial_no.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py index be26a18f443..c1aef95216d 100644 --- a/erpnext/stock/doctype/serial_no/serial_no.py +++ b/erpnext/stock/doctype/serial_no/serial_no.py @@ -462,5 +462,10 @@ def get_delivery_note_serial_no(item_code, qty, delivery_note): @frappe.whitelist() def auto_fetch_serial_number(qty, item_code, warehouse): - serial_numbers = frappe.get_list("Serial No", filters={"item_code": item_code, "warehouse": warehouse, "delivery_document_no": "", "sales_invoice": ""}, limit=qty, order_by="creation") - return [item['name'] for item in serial_numbers] \ No newline at end of file + serial_numbers = frappe.get_list("Serial No", filters={ + "item_code": item_code, + "warehouse": warehouse, + "delivery_document_no": "", + "sales_invoice": "" + }, limit=qty, order_by="creation") + return [item['name'] for item in serial_numbers] From fed4fd0f02bda5f5c61487722ad9ed132d102dde Mon Sep 17 00:00:00 2001 From: scmmishra Date: Wed, 17 Apr 2019 15:46:15 +0530 Subject: [PATCH 14/14] style: linting issue fixed --- erpnext/public/js/utils/serial_no_batch_selector.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/public/js/utils/serial_no_batch_selector.js b/erpnext/public/js/utils/serial_no_batch_selector.js index 5287942819f..b22d5ca4c4e 100644 --- a/erpnext/public/js/utils/serial_no_batch_selector.js +++ b/erpnext/public/js/utils/serial_no_batch_selector.js @@ -5,9 +5,10 @@ erpnext.SerialNoBatchSelector = Class.extend({ this.show_dialog = show_dialog; // frm, item, warehouse_details, has_batch, oldest let d = this.item; - if(d && d.has_batch_no && (!d.batch_no || this.show_dialog)) { + if (d && d.has_batch_no && (!d.batch_no || this.show_dialog)) { this.has_batch = 1; this.setup(); + // !(this.show_dialog == false) ensures that show_dialog is implictly true, even when undefined } else if(d && d.has_serial_no && !(this.show_dialog == false)) { this.has_batch = 0; this.setup(); @@ -66,14 +67,14 @@ erpnext.SerialNoBatchSelector = Class.extend({ { fieldname: 'qty', fieldtype:'Float', - read_only: me.has_batch ? 1 : 0, + read_only: me.has_batch, label: __(me.has_batch ? 'Total Qty' : 'Qty'), default: 0 }, { fieldname: 'auto_fetch_button', fieldtype:'Button', - hidden: me.has_batch ? 1 : 0, + hidden: me.has_batch, label: __('Fetch based on FIFO'), click: () => { let qty = this.dialog.fields_dict.qty.get_value(); @@ -89,7 +90,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ numbers.then((data) => { let auto_fetched_serial_numbers = data.message; let records_length = auto_fetched_serial_numbers.length; - if(records_length < qty) { + if (records_length < qty) { frappe.msgprint(`Fetched only ${records_length} serial numbers.`); } let serial_no_list_field = this.dialog.fields_dict.serial_no; @@ -100,7 +101,7 @@ erpnext.SerialNoBatchSelector = Class.extend({ } ]; - if(this.has_batch) { + if (this.has_batch) { title = __("Select Batch Numbers"); fields = fields.concat(this.get_batch_fields()); } else {