Merge pull request #50470 from frappe/mergify/bp/version-15-hotfix/pr-50187

fix: Update pick list locations quantity (backport #50187)
This commit is contained in:
rohitwaghchaure
2025-11-11 16:11:03 +05:30
committed by GitHub
3 changed files with 47 additions and 1 deletions

View File

@@ -831,6 +831,16 @@ def raise_work_orders(material_request):
@frappe.whitelist()
def create_pick_list(source_name, target_doc=None):
def update_item(obj, target, source_parent):
qty = (
flt(flt(obj.stock_qty) - flt(obj.ordered_qty)) / target.conversion_factor
if flt(obj.stock_qty) > flt(obj.ordered_qty)
else 0
)
target.qty = qty
target.stock_qty = qty * obj.conversion_factor
target.conversion_factor = obj.conversion_factor
doc = get_mapped_doc(
"Material Request",
source_name,
@@ -843,6 +853,11 @@ def create_pick_list(source_name, target_doc=None):
"Material Request Item": {
"doctype": "Pick List Item",
"field_map": {"name": "material_request_item", "stock_qty": "stock_qty"},
"postprocess": update_item,
"condition": lambda doc: (
flt(doc.ordered_qty, doc.precision("ordered_qty"))
< flt(doc.stock_qty, doc.precision("ordered_qty"))
),
},
},
target_doc,

View File

@@ -12,6 +12,7 @@ from frappe.utils import flt, today
from erpnext.controllers.accounts_controller import InvalidQtyError
from erpnext.stock.doctype.item.test_item import create_item
from erpnext.stock.doctype.material_request.material_request import (
create_pick_list,
make_in_transit_stock_entry,
make_purchase_order,
make_stock_entry,
@@ -895,6 +896,36 @@ class TestMaterialRequest(FrappeTestCase):
self.assertRaises(OverAllowanceError, mr.submit)
def test_pending_qty_in_pick_list(self):
"""Test for pick list mapped doc qty from partially received Material Request Transfer"""
import json
from erpnext.stock.doctype.pick_list.pick_list import create_stock_entry
mr = make_material_request(material_request_type="Material Transfer")
pl = create_pick_list(mr.name)
pl.save()
pl.locations[0].qty = 5
pl.locations[0].stock_qty = 5
pl.submit()
to_warehouse = create_warehouse("Test To Warehouse")
se_data = create_stock_entry(json.dumps(pl.as_dict()))
se = frappe.get_doc(se_data)
se.items[0].t_warehouse = to_warehouse
se.save()
se.submit()
pl.load_from_db()
self.assertEqual(pl.locations[0].picked_qty, se.items[0].qty)
mr.load_from_db()
self.assertEqual(mr.status, "Partially Received")
pl_for_pending = create_pick_list(mr.name)
self.assertEqual(pl_for_pending.locations[0].qty, 5)
def get_in_transit_warehouse(company):
if not frappe.db.exists("Warehouse Type", "Transit"):

View File

@@ -1560,8 +1560,8 @@ def update_stock_entry_items_with_no_reference(pick_list, stock_entry):
def update_common_item_properties(item, location):
item.item_code = location.item_code
item.s_warehouse = location.warehouse
item.qty = location.picked_qty * location.conversion_factor
item.transfer_qty = location.picked_qty
item.qty = location.qty
item.uom = location.uom
item.conversion_factor = location.conversion_factor
item.stock_uom = location.stock_uom