fix: Update Product Bundle price based on the rates of its child Items

This commit is contained in:
GangaManoj 2021-08-24 21:42:44 +05:30
parent b4b6d10b5d
commit 31482a08dc

View File

@ -85,6 +85,7 @@ def make_packing_list(doc):
parent_items.append([d.item_code, d.name]) parent_items.append([d.item_code, d.name])
cleanup_packing_list(doc, parent_items) cleanup_packing_list(doc, parent_items)
update_product_bundle_price(doc, parent_items)
def cleanup_packing_list(doc, parent_items): def cleanup_packing_list(doc, parent_items):
"""Remove all those child items which are no longer present in main item table""" """Remove all those child items which are no longer present in main item table"""
@ -103,6 +104,40 @@ def cleanup_packing_list(doc, parent_items):
if d not in delete_list: if d not in delete_list:
doc.append("packed_items", d) doc.append("packed_items", d)
def update_product_bundle_price(doc, parent_items):
"""Updates the prices of Product Bundles based on the rates of the Items in the bundle."""
parent_items_index = 0
bundle_price = 0
parent_items_doctype = doc.items[0].doctype
for bundle_item in doc.get("packed_items"):
if parent_items[parent_items_index][0] == bundle_item.parent_item:
bundle_price += bundle_item.qty * bundle_item.rate
else:
update_parent_item_price(doc, parent_items_doctype, parent_items[parent_items_index][0], bundle_price)
bundle_price = 0
parent_items_index += 1
# for the last product bundle
update_parent_item_price(doc, parent_items_doctype, parent_items[parent_items_index][0], bundle_price)
doc.reload()
def update_parent_item_price(doc, parent_items_doctype, parent_item_code, bundle_price):
parent_item_doc_name = frappe.db.get_value(
parent_items_doctype,
{
'parent': doc.name,
'item_code': parent_item_code
},
'name'
)
current_parent_item_price = frappe.db.get_value(parent_items_doctype, parent_item_doc_name, 'amount')
if current_parent_item_price != bundle_price:
frappe.db.set_value(parent_items_doctype, parent_item_doc_name, 'amount', bundle_price)
@frappe.whitelist() @frappe.whitelist()
def get_items_from_product_bundle(args): def get_items_from_product_bundle(args):
args = json.loads(args) args = json.loads(args)