mirror of
https://github.com/frappe/erpnext.git
synced 2026-02-18 00:55:02 +00:00
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:
@@ -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,
|
||||
|
||||
@@ -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"):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user