diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index f17fea37c0eff852303e18faf4514bf0d5ae19d9..3a661b9ee0f68224251c9d4de7870d3bda896cec 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -310,6 +310,10 @@ frappe.ui.form.on('Stock Entry', { } }) }, __("Get items from")); + + frm.add_custom_button(__("Warehouse"), function() { + frm.events.get_items_from_warehouse(frm); + }, __("Get items from")); } if (frm.doc.docstatus === 0 && frm.doc.purpose == "Material Issue") { @@ -704,7 +708,68 @@ frappe.ui.form.on('Stock Entry', { frm.doc.process_loss_qty = flt((frm.doc.fg_completed_qty * frm.doc.process_loss_percentage) / 100 , precision("process_loss_qty", frm.doc)); refresh_field("process_loss_qty"); } - } + }, + + get_items_from_warehouse: function(frm) { + let fields = [ + { + label: 'Warehouse', + fieldname: 'warehouse', + fieldtype: 'Link', + options: 'Warehouse', + default: frm.doc.purpose=='Material Receipt' ? frm.doc.to_warehouse : frm.doc.from_warehouse, + reqd: 1, + "get_query": function() { + return { + "filters": { + "company": frm.doc.company, + } + }; + } + }, + { + label: "Item Code", + fieldname: "item_code", + fieldtype: "Link", + options: "Item", + }, + { + label: __("Ignore Empty Stock"), + fieldname: "ignore_empty_stock", + fieldtype: "Check", + default: 1 + } + ]; + + frappe.prompt(fields, function(data) { + frappe.call({ + method: "erpnext.stock.doctype.stock_reconciliation.stock_reconciliation.get_items", + args: { + warehouse: data.warehouse, + posting_date: frm.doc.posting_date, + posting_time: frm.doc.posting_time, + company: frm.doc.company, + item_code: data.item_code, + ignore_empty_stock: data.ignore_empty_stock + } + }).then(r => { + if (r.exc || !r.message || !r.message.length) return; + + frm.clear_table("items"); + + r.message.forEach((row) => { + let item = frm.add_child("items", row); + + item.qty = item.qty || 0; + item.valuation_rate = item.valuation_rate || 0; + item.conversion_factor = 1; + item.uom = item.stock_uom; + }); + frm.refresh_field("items"); + frm.set_value(frm.doc.purpose=='Material Receipt' ? "to_warehouse" : "from_warehouse", data.warehouse) + }); + }, __("Get Items"), __("Update")); + }, }); frappe.ui.form.on('Stock Entry Detail', { diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 6bbc45f8e28adb42037c99987affd0084ff6d5d3..ba3b5c94ea98e40c44fecc5cedf195ee917cdf19 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -1044,7 +1044,7 @@ def get_items_for_stock_reco(warehouse, company): items = frappe.db.sql( f""" select - i.name as item_code, i.item_name, bin.warehouse as warehouse, i.has_serial_no, i.has_batch_no + i.name as item_code, i.item_name, bin.warehouse as warehouse, i.has_serial_no, i.has_batch_no, i.stock_uom from `tabBin` bin, `tabItem` i where @@ -1062,7 +1062,7 @@ def get_items_for_stock_reco(warehouse, company): items += frappe.db.sql( """ select - i.name as item_code, i.item_name, id.default_warehouse as warehouse, i.has_serial_no, i.has_batch_no + i.name as item_code, i.item_name, id.default_warehouse as warehouse, i.has_serial_no, i.has_batch_no, i.stock_uom from `tabItem` i, `tabItem Default` id where