fix: Update Product Bundle price based on the rates of its child Items
This commit is contained in:
parent
b4b6d10b5d
commit
31482a08dc
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user