feat: update ordered qty for packed items

This commit is contained in:
Saqib Ansari 2022-02-22 15:06:19 +05:30
parent 40a45a3139
commit 8005fee656
5 changed files with 58 additions and 3 deletions

View File

@ -316,6 +316,16 @@ class PurchaseOrder(BuyingController):
'target_ref_field': 'stock_qty', 'target_ref_field': 'stock_qty',
'source_field': 'stock_qty' 'source_field': 'stock_qty'
}) })
self.status_updater.append({
'source_dt': 'Purchase Order Item',
'target_dt': 'Packed Item',
'target_field': 'ordered_qty',
'target_parent_dt': 'Sales Order',
'target_parent_field': '',
'join_field': 'sales_order_packed_item',
'target_ref_field': 'qty',
'source_field': 'stock_qty'
})
def update_delivered_qty_in_sales_order(self): def update_delivered_qty_in_sales_order(self):
"""Update delivered qty in Sales Order for drop ship""" """Update delivered qty in Sales Order for drop ship"""

View File

@ -63,6 +63,7 @@
"material_request_item", "material_request_item",
"sales_order", "sales_order",
"sales_order_item", "sales_order_item",
"sales_order_packed_item",
"supplier_quotation", "supplier_quotation",
"supplier_quotation_item", "supplier_quotation_item",
"col_break5", "col_break5",
@ -837,21 +838,31 @@
"label": "Product Bundle", "label": "Product Bundle",
"options": "Product Bundle", "options": "Product Bundle",
"read_only": 1 "read_only": 1
},
{
"fieldname": "sales_order_packed_item",
"fieldtype": "Data",
"label": "Sales Order Packed Item",
"no_copy": 1,
"print_hide": 1,
"search_index": 1
} }
], ],
"idx": 1, "idx": 1,
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2021-08-30 20:06:26.712097", "modified": "2022-02-02 13:10:18.398976",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Buying", "module": "Buying",
"name": "Purchase Order Item", "name": "Purchase Order Item",
"naming_rule": "Random",
"owner": "Administrator", "owner": "Administrator",
"permissions": [], "permissions": [],
"quick_entry": 1, "quick_entry": 1,
"search_fields": "item_name", "search_fields": "item_name",
"sort_field": "modified", "sort_field": "modified",
"sort_order": "DESC", "sort_order": "DESC",
"states": [],
"track_changes": 1 "track_changes": 1
} }

View File

@ -562,6 +562,7 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
var me = this; var me = this;
var dialog = new frappe.ui.Dialog({ var dialog = new frappe.ui.Dialog({
title: __("Select Items"), title: __("Select Items"),
size: "large",
fields: [ fields: [
{ {
"fieldtype": "Check", "fieldtype": "Check",
@ -663,7 +664,8 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
} else { } else {
let po_items = []; let po_items = [];
me.frm.doc.items.forEach(d => { me.frm.doc.items.forEach(d => {
let pending_qty = (flt(d.stock_qty) - flt(d.ordered_qty)) / flt(d.conversion_factor); let ordered_qty = me.get_ordered_qty(d, me.frm.doc);
let pending_qty = (flt(d.stock_qty) - ordered_qty) / flt(d.conversion_factor);
if (pending_qty > 0) { if (pending_qty > 0) {
po_items.push({ po_items.push({
"doctype": "Sales Order Item", "doctype": "Sales Order Item",
@ -689,6 +691,24 @@ erpnext.selling.SalesOrderController = class SalesOrderController extends erpnex
dialog.show(); dialog.show();
} }
get_ordered_qty(item, so) {
let ordered_qty = item.ordered_qty;
if (so.packed_items) {
// calculate ordered qty based on packed items in case of product bundle
let packed_items = so.packed_items.filter(
(pi) => pi.parent_detail_docname == item.name
);
if (packed_items) {
ordered_qty = packed_items.reduce(
(sum, pi) => sum + flt(pi.ordered_qty),
0
);
ordered_qty = ordered_qty / packed_items.length;
}
}
return ordered_qty;
}
hold_sales_order(){ hold_sales_order(){
var me = this; var me = this;
var d = new frappe.ui.Dialog({ var d = new frappe.ui.Dialog({

View File

@ -877,6 +877,9 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None):
target.stock_qty = (flt(source.stock_qty) - flt(source.ordered_qty)) target.stock_qty = (flt(source.stock_qty) - flt(source.ordered_qty))
target.project = source_parent.project target.project = source_parent.project
def update_item_for_packed_item(source, target, source_parent):
target.qty = flt(source.qty) - flt(source.ordered_qty)
# po = frappe.get_list("Purchase Order", filters={"sales_order":source_name, "supplier":supplier, "docstatus": ("<", "2")}) # po = frappe.get_list("Purchase Order", filters={"sales_order":source_name, "supplier":supplier, "docstatus": ("<", "2")})
doc = get_mapped_doc("Sales Order", source_name, { doc = get_mapped_doc("Sales Order", source_name, {
"Sales Order": { "Sales Order": {
@ -920,6 +923,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None):
"Packed Item": { "Packed Item": {
"doctype": "Purchase Order Item", "doctype": "Purchase Order Item",
"field_map": [ "field_map": [
["name", "sales_order_packed_item"],
["parent", "sales_order"], ["parent", "sales_order"],
["uom", "uom"], ["uom", "uom"],
["conversion_factor", "conversion_factor"], ["conversion_factor", "conversion_factor"],
@ -934,6 +938,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None):
"supplier", "supplier",
"pricing_rules" "pricing_rules"
], ],
"postprocess": update_item_for_packed_item,
"condition": lambda doc: doc.parent_item in items_to_map "condition": lambda doc: doc.parent_item in items_to_map
} }
}, target_doc, set_missing_values) }, target_doc, set_missing_values)

View File

@ -26,6 +26,7 @@
"section_break_13", "section_break_13",
"actual_qty", "actual_qty",
"projected_qty", "projected_qty",
"ordered_qty",
"column_break_16", "column_break_16",
"incoming_rate", "incoming_rate",
"page_break", "page_break",
@ -224,13 +225,21 @@
"label": "Rate", "label": "Rate",
"print_hide": 1, "print_hide": 1,
"read_only": 1 "read_only": 1
},
{
"allow_on_submit": 1,
"fieldname": "ordered_qty",
"fieldtype": "Float",
"label": "Ordered Qty",
"no_copy": 1,
"read_only": 1
} }
], ],
"idx": 1, "idx": 1,
"index_web_pages_for_search": 1, "index_web_pages_for_search": 1,
"istable": 1, "istable": 1,
"links": [], "links": [],
"modified": "2022-01-28 16:03:30.780111", "modified": "2022-02-22 12:57:45.325488",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Packed Item", "name": "Packed Item",