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',