mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-25 07:54:46 +00:00
feat: provision to add items in Stock Reservation dialog
This commit is contained in:
@@ -207,6 +207,50 @@ frappe.ui.form.on("Sales Order", {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{fieldtype: "Column Break"},
|
{fieldtype: "Column Break"},
|
||||||
|
{
|
||||||
|
fieldname: "add_item",
|
||||||
|
fieldtype: "Link",
|
||||||
|
label: __("Add Item"),
|
||||||
|
options: "Sales Order Item",
|
||||||
|
get_query: () => {
|
||||||
|
return {
|
||||||
|
query: "erpnext.controllers.queries.get_filtered_child_rows",
|
||||||
|
filters: {
|
||||||
|
"parenttype": frm.doc.doctype,
|
||||||
|
"parent": frm.doc.name,
|
||||||
|
"reserve_stock": 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onchange: () => {
|
||||||
|
let sales_order_item = dialog.get_value("add_item");
|
||||||
|
|
||||||
|
if (sales_order_item) {
|
||||||
|
frm.doc.items.forEach(item => {
|
||||||
|
if (item.name === sales_order_item) {
|
||||||
|
let unreserved_qty = (flt(item.stock_qty) - (item.stock_reserved_qty ? flt(item.stock_reserved_qty) : (flt(item.delivered_qty) * flt(item.conversion_factor)))) / flt(item.conversion_factor);
|
||||||
|
|
||||||
|
if (unreserved_qty > 0) {
|
||||||
|
dialog.fields_dict.items.df.data.forEach((row) => {
|
||||||
|
if (row.sales_order_item === sales_order_item) {
|
||||||
|
unreserved_qty -= row.qty_to_reserve;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
dialog.fields_dict.items.df.data.push({
|
||||||
|
'sales_order_item': item.name,
|
||||||
|
'item_code': item.item_code,
|
||||||
|
'warehouse': dialog.get_value("set_warehouse") || item.warehouse,
|
||||||
|
'qty_to_reserve': Math.max(unreserved_qty, 0)
|
||||||
|
});
|
||||||
|
dialog.fields_dict.items.grid.refresh();
|
||||||
|
dialog.set_value("add_item", undefined);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
{fieldtype: "Section Break"},
|
{fieldtype: "Section Break"},
|
||||||
{
|
{
|
||||||
fieldname: "items",
|
fieldname: "items",
|
||||||
@@ -308,14 +352,14 @@ frappe.ui.form.on("Sales Order", {
|
|||||||
|
|
||||||
frm.doc.items.forEach(item => {
|
frm.doc.items.forEach(item => {
|
||||||
if (item.reserve_stock) {
|
if (item.reserve_stock) {
|
||||||
let unreserved_qty = (flt(item.stock_qty) - (item.stock_reserved_qty ? flt(item.stock_reserved_qty) : (flt(item.delivered_qty) * flt(item.conversion_factor))))
|
let unreserved_qty = (flt(item.stock_qty) - (item.stock_reserved_qty ? flt(item.stock_reserved_qty) : (flt(item.delivered_qty) * flt(item.conversion_factor)))) / flt(item.conversion_factor);
|
||||||
|
|
||||||
if (unreserved_qty > 0) {
|
if (unreserved_qty > 0) {
|
||||||
dialog.fields_dict.items.df.data.push({
|
dialog.fields_dict.items.df.data.push({
|
||||||
'sales_order_item': item.name,
|
'sales_order_item': item.name,
|
||||||
'item_code': item.item_code,
|
'item_code': item.item_code,
|
||||||
'warehouse': item.warehouse,
|
'warehouse': item.warehouse,
|
||||||
'qty_to_reserve': (unreserved_qty / flt(item.conversion_factor))
|
'qty_to_reserve': unreserved_qty
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user