mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-28 06:08:25 +00:00
Merge pull request #55974 from aerele/fix/support-70978
fix(stock): update transfer status for mixed transfer flows
This commit is contained in:
@@ -1145,6 +1145,52 @@ class TestMaterialRequest(ERPNextTestSuite):
|
|||||||
se.save()
|
se.save()
|
||||||
se.submit()
|
se.submit()
|
||||||
|
|
||||||
|
def test_mr_status_for_mixed_direct_and_transit_transfer(self):
|
||||||
|
material_request = make_material_request(
|
||||||
|
material_request_type="Material Transfer",
|
||||||
|
item_code="_Test Item Home Desktop 100",
|
||||||
|
qty=5,
|
||||||
|
)
|
||||||
|
|
||||||
|
in_transit_wh = get_in_transit_warehouse(material_request.company)
|
||||||
|
|
||||||
|
# Make stock available
|
||||||
|
self._insert_stock_entry(20.0, 20.0)
|
||||||
|
|
||||||
|
# Direct Transfer for 3 Qty
|
||||||
|
direct_transfer = make_stock_entry(material_request.name)
|
||||||
|
direct_transfer.items[0].update(
|
||||||
|
{
|
||||||
|
"qty": 3,
|
||||||
|
"transfer_qty": 3,
|
||||||
|
"s_warehouse": "_Test Warehouse 1 - _TC",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
direct_transfer.save()
|
||||||
|
direct_transfer.submit()
|
||||||
|
|
||||||
|
# In Transit Transfer for remaining 2 Qty
|
||||||
|
transit_transfer = make_in_transit_stock_entry(material_request.name, in_transit_wh)
|
||||||
|
transit_transfer.items[0].update(
|
||||||
|
{
|
||||||
|
"qty": 2,
|
||||||
|
"s_warehouse": "_Test Warehouse 1 - _TC",
|
||||||
|
}
|
||||||
|
)
|
||||||
|
transit_transfer.save()
|
||||||
|
transit_transfer.submit()
|
||||||
|
|
||||||
|
# Complete End Transit
|
||||||
|
end_transit = make_stock_in_entry(transit_transfer.name)
|
||||||
|
end_transit.save()
|
||||||
|
end_transit.submit()
|
||||||
|
|
||||||
|
material_request.reload()
|
||||||
|
|
||||||
|
self.assertEqual(material_request.per_ordered, 100)
|
||||||
|
self.assertEqual(material_request.status, "Transferred")
|
||||||
|
self.assertEqual(material_request.transfer_status, "Completed")
|
||||||
|
|
||||||
|
|
||||||
def get_in_transit_warehouse(company):
|
def get_in_transit_warehouse(company):
|
||||||
if not frappe.db.exists("Warehouse Type", "Transit"):
|
if not frappe.db.exists("Warehouse Type", "Transit"):
|
||||||
|
|||||||
@@ -429,9 +429,15 @@ def _resolve_transfer_qty(desire_to_transfer, pending_to_issue, can_transfer):
|
|||||||
|
|
||||||
|
|
||||||
def get_transferred_qty(material_request):
|
def get_transferred_qty(material_request):
|
||||||
|
from pypika import Case
|
||||||
|
|
||||||
|
se = frappe.qb.DocType("Stock Entry")
|
||||||
sed = frappe.qb.DocType("Stock Entry Detail")
|
sed = frappe.qb.DocType("Stock Entry Detail")
|
||||||
|
completed_qty = Case().when(se.add_to_transit == 1, sed.transferred_qty).else_(sed.transfer_qty)
|
||||||
return (
|
return (
|
||||||
frappe.qb.from_(sed)
|
frappe.qb.from_(sed)
|
||||||
.select(Sum(sed.transfer_qty).as_("transfer_qty"), Sum(sed.transferred_qty).as_("transferred_qty"))
|
.inner_join(se)
|
||||||
|
.on(se.name == sed.parent)
|
||||||
|
.select(Sum(sed.transfer_qty).as_("transfer_qty"), Sum(completed_qty).as_("transferred_qty"))
|
||||||
.where((sed.material_request == material_request) & (sed.docstatus == 1))
|
.where((sed.material_request == material_request) & (sed.docstatus == 1))
|
||||||
).run(as_dict=True)[0]
|
).run(as_dict=True)[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user