mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-18 00:55:02 +00:00
Merge pull request #50655 from mihir-kandoi/gh49528
This commit is contained in:
@@ -7,7 +7,7 @@ from itertools import groupby
|
||||
|
||||
import frappe
|
||||
from frappe import _, bold
|
||||
from frappe.model.mapper import get_mapped_doc, map_child_doc
|
||||
from frappe.model.mapper import map_child_doc
|
||||
from frappe.query_builder import Case
|
||||
from frappe.query_builder.custom import GROUP_CONCAT
|
||||
from frappe.query_builder.functions import Coalesce, Locate, Replace, Sum
|
||||
@@ -639,8 +639,8 @@ class PickList(TransactionBase):
|
||||
product_bundles = self._get_product_bundles()
|
||||
product_bundle_qty_map = self._get_product_bundle_qty_map(product_bundles.values())
|
||||
|
||||
for so_row, item_code in product_bundles.items():
|
||||
picked_qty = self._compute_picked_qty_for_bundle(so_row, product_bundle_qty_map[item_code])
|
||||
for so_row, value in product_bundles.items():
|
||||
picked_qty = self._compute_picked_qty_for_bundle(so_row, product_bundle_qty_map[value.item_code])
|
||||
item_table = "Sales Order Item"
|
||||
already_picked = frappe.db.get_value(item_table, so_row, "picked_qty", for_update=True)
|
||||
frappe.db.set_value(
|
||||
@@ -763,19 +763,23 @@ class PickList(TransactionBase):
|
||||
if not item.product_bundle_item:
|
||||
continue
|
||||
|
||||
product_bundles[item.sales_order_item] = frappe.db.get_value(
|
||||
"Sales Order Item",
|
||||
item.sales_order_item,
|
||||
"item_code",
|
||||
product_bundles[item.sales_order_item] = frappe._dict(
|
||||
{
|
||||
"item_code": frappe.db.get_value(
|
||||
"Sales Order Item",
|
||||
item.sales_order_item,
|
||||
"item_code",
|
||||
),
|
||||
"pick_list_item": item.name,
|
||||
}
|
||||
)
|
||||
return product_bundles
|
||||
|
||||
def _get_product_bundle_qty_map(self, bundles: list[str]) -> dict[str, dict[str, float]]:
|
||||
# bundle_item_code: Dict[component, qty]
|
||||
def _get_product_bundle_qty_map(self, bundles) -> dict[str, dict[str, float]]:
|
||||
product_bundle_qty_map = {}
|
||||
for bundle_item_code in bundles:
|
||||
bundle = frappe.get_last_doc("Product Bundle", {"new_item_code": bundle_item_code, "disabled": 0})
|
||||
product_bundle_qty_map[bundle_item_code] = {item.item_code: item.qty for item in bundle.items}
|
||||
for data in bundles:
|
||||
bundle = frappe.get_last_doc("Product Bundle", {"new_item_code": data.item_code, "disabled": 0})
|
||||
product_bundle_qty_map[data.item_code] = {item.item_code: item.qty for item in bundle.items}
|
||||
return product_bundle_qty_map
|
||||
|
||||
def _compute_picked_qty_for_bundle(self, bundle_row, bundle_items) -> int:
|
||||
@@ -1380,15 +1384,16 @@ def add_product_bundles_to_delivery_note(
|
||||
product_bundles = pick_list._get_product_bundles()
|
||||
product_bundle_qty_map = pick_list._get_product_bundle_qty_map(product_bundles.values())
|
||||
|
||||
for so_row, item_code in product_bundles.items():
|
||||
for so_row, value in product_bundles.items():
|
||||
sales_order_item = frappe.get_doc("Sales Order Item", so_row)
|
||||
if sales_order and sales_order_item.parent != sales_order:
|
||||
continue
|
||||
|
||||
dn_bundle_item = map_child_doc(sales_order_item, delivery_note, item_mapper)
|
||||
dn_bundle_item.qty = pick_list._compute_picked_qty_for_bundle(
|
||||
so_row, product_bundle_qty_map[item_code]
|
||||
so_row, product_bundle_qty_map[value.item_code]
|
||||
)
|
||||
dn_bundle_item.pick_list_item = value.pick_list_item
|
||||
dn_bundle_item.against_pick_list = pick_list.name
|
||||
update_delivery_note_item(sales_order_item, dn_bundle_item, delivery_note)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user