mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-02 03:39:11 +00:00
Merge pull request #48599 from frappe/mergify/bp/version-15-hotfix/pr-48408
fix: resolve bundle item into line item if againt default supplier ch… (backport #48408)
This commit is contained in:
@@ -1352,6 +1352,9 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t
|
|||||||
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)
|
||||||
|
|
||||||
suppliers = [item.get("supplier") for item in selected_items if item.get("supplier")]
|
suppliers = [item.get("supplier") for item in selected_items if item.get("supplier")]
|
||||||
suppliers = list(dict.fromkeys(suppliers)) # remove duplicates while preserving order
|
suppliers = list(dict.fromkeys(suppliers)) # remove duplicates while preserving order
|
||||||
|
|
||||||
@@ -1405,13 +1408,35 @@ def make_purchase_order_for_default_supplier(source_name, selected_items=None, t
|
|||||||
"condition": lambda doc: doc.ordered_qty < doc.stock_qty
|
"condition": lambda doc: doc.ordered_qty < doc.stock_qty
|
||||||
and doc.supplier == supplier
|
and doc.supplier == supplier
|
||||||
and doc.item_code in items_to_map
|
and doc.item_code in items_to_map
|
||||||
and doc.delivered_by_supplier == 1,
|
and not is_product_bundle(doc.item_code),
|
||||||
|
},
|
||||||
|
"Packed Item": {
|
||||||
|
"doctype": "Purchase Order Item",
|
||||||
|
"field_map": [
|
||||||
|
["name", "sales_order_packed_item"],
|
||||||
|
["parent", "sales_order"],
|
||||||
|
["uom", "uom"],
|
||||||
|
["conversion_factor", "conversion_factor"],
|
||||||
|
["parent_item", "product_bundle"],
|
||||||
|
["rate", "rate"],
|
||||||
|
],
|
||||||
|
"field_no_map": [
|
||||||
|
"price_list_rate",
|
||||||
|
"item_tax_template",
|
||||||
|
"discount_percentage",
|
||||||
|
"discount_amount",
|
||||||
|
"supplier",
|
||||||
|
"pricing_rules",
|
||||||
|
],
|
||||||
|
"postprocess": update_item_for_packed_item,
|
||||||
|
"condition": lambda doc: doc.parent_item in items_to_map,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
target_doc,
|
target_doc,
|
||||||
set_missing_values,
|
set_missing_values,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
set_delivery_date(doc.items, source_name)
|
||||||
doc.insert()
|
doc.insert()
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
purchase_orders.append(doc)
|
purchase_orders.append(doc)
|
||||||
@@ -1427,9 +1452,7 @@ def make_purchase_order(source_name, selected_items=None, target_doc=None):
|
|||||||
if isinstance(selected_items, str):
|
if isinstance(selected_items, str):
|
||||||
selected_items = json.loads(selected_items)
|
selected_items = json.loads(selected_items)
|
||||||
|
|
||||||
items_to_map = [
|
items_to_map = [item.get("item_code") for item in selected_items if item.get("item_code")]
|
||||||
item.get("item_code") for item in selected_items if item.get("item_code") and item.get("item_code")
|
|
||||||
]
|
|
||||||
items_to_map = list(set(items_to_map))
|
items_to_map = list(set(items_to_map))
|
||||||
|
|
||||||
def is_drop_ship_order(target):
|
def is_drop_ship_order(target):
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
"use_serial_batch_fields",
|
"use_serial_batch_fields",
|
||||||
"column_break_11",
|
"column_break_11",
|
||||||
"serial_and_batch_bundle",
|
"serial_and_batch_bundle",
|
||||||
|
"delivered_by_supplier",
|
||||||
"section_break_bgys",
|
"section_break_bgys",
|
||||||
"serial_no",
|
"serial_no",
|
||||||
"column_break_qlha",
|
"column_break_qlha",
|
||||||
@@ -290,13 +291,20 @@
|
|||||||
{
|
{
|
||||||
"fieldname": "column_break_qlha",
|
"fieldname": "column_break_qlha",
|
||||||
"fieldtype": "Column Break"
|
"fieldtype": "Column Break"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "delivered_by_supplier",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Supplier delivers to Customer",
|
||||||
|
"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": "2025-02-18 13:07:02.789654",
|
"modified": "2025-07-09 19:12:45.850219",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Stock",
|
"module": "Stock",
|
||||||
"name": "Packed Item",
|
"name": "Packed Item",
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ class PackedItem(Document):
|
|||||||
actual_qty: DF.Float
|
actual_qty: DF.Float
|
||||||
batch_no: DF.Link | None
|
batch_no: DF.Link | None
|
||||||
conversion_factor: DF.Float
|
conversion_factor: DF.Float
|
||||||
|
delivered_by_supplier: DF.Check
|
||||||
description: DF.TextEditor | None
|
description: DF.TextEditor | None
|
||||||
incoming_rate: DF.Currency
|
incoming_rate: DF.Currency
|
||||||
item_code: DF.Link | None
|
item_code: DF.Link | None
|
||||||
@@ -209,6 +210,7 @@ def update_packed_item_basic_data(main_item_row, pi_row, packing_item, item_data
|
|||||||
pi_row.uom = item_data.stock_uom
|
pi_row.uom = item_data.stock_uom
|
||||||
pi_row.qty = flt(packing_item.qty) * flt(main_item_row.stock_qty)
|
pi_row.qty = flt(packing_item.qty) * flt(main_item_row.stock_qty)
|
||||||
pi_row.conversion_factor = main_item_row.conversion_factor
|
pi_row.conversion_factor = main_item_row.conversion_factor
|
||||||
|
pi_row.delivered_by_supplier = main_item_row.get("delivered_by_supplier")
|
||||||
|
|
||||||
if not pi_row.description:
|
if not pi_row.description:
|
||||||
pi_row.description = packing_item.get("description")
|
pi_row.description = packing_item.get("description")
|
||||||
|
|||||||
Reference in New Issue
Block a user