Skip to content

Commit 1da781f

Browse files
mergify[bot]Navin-S-Rrohitwaghchaure
authored
fix(stock entry): calculate transferred quantity using transfer_qty (backport #51656) (#51675)
* fix(stock entry): calculate transferred quantity using transfer_qty (cherry picked from commit 4e6d86d) # Conflicts: # erpnext/stock/doctype/stock_entry/stock_entry.py * test: allow from_warehouse while creating material request (cherry picked from commit 7e99148) * test: validate transferred quantity for material transfer entry (cherry picked from commit bf2ab32) * chore: fix conflicts --------- Co-authored-by: Navin-S-R <navin@aerele.in> Co-authored-by: rohitwaghchaure <rohitw1991@gmail.com>
1 parent e2b5388 commit 1da781f

3 files changed

Lines changed: 64 additions & 2 deletions

File tree

erpnext/stock/doctype/material_request/test_material_request.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1004,7 +1004,8 @@ def make_material_request(**args):
10041004
mr = frappe.new_doc("Material Request")
10051005
mr.material_request_type = args.material_request_type or "Purchase"
10061006
mr.company = args.company or "_Test Company"
1007-
mr.customer = args.customer or "_Test Customer"
1007+
if mr.material_request_type == "Customer Provided":
1008+
mr.customer = args.customer or "_Test Customer"
10081009
mr.append(
10091010
"items",
10101011
{
@@ -1013,6 +1014,7 @@ def make_material_request(**args):
10131014
"uom": args.uom or "_Test UOM",
10141015
"conversion_factor": args.conversion_factor or 1,
10151016
"schedule_date": args.schedule_date or today(),
1017+
"from_warehouse": args.from_warehouse,
10161018
"warehouse": args.warehouse or "_Test Warehouse - _TC",
10171019
"cost_center": args.cost_center or "_Test Cost Center - _TC",
10181020
},

erpnext/stock/doctype/stock_entry/stock_entry.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2807,7 +2807,7 @@ def update_transferred_qty(self):
28072807
stock_entries_child_list.append(d.ste_detail)
28082808
transferred_qty = frappe.get_all(
28092809
"Stock Entry Detail",
2810-
fields=["sum(qty) as qty"],
2810+
fields=["sum(transfer_qty) as qty"],
28112811
filters={
28122812
"against_stock_entry": d.against_stock_entry,
28132813
"ste_detail": d.ste_detail,

erpnext/stock/doctype/stock_entry/test_stock_entry.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
make_item_variant,
1515
set_item_variant_settings,
1616
)
17+
from erpnext.stock.doctype.material_request.material_request import (
18+
make_in_transit_stock_entry,
19+
)
20+
from erpnext.stock.doctype.material_request.test_material_request import (
21+
get_in_transit_warehouse,
22+
make_material_request,
23+
)
1724
from erpnext.stock.doctype.serial_and_batch_bundle.test_serial_and_batch_bundle import (
1825
get_batch_from_bundle,
1926
get_serial_nos_from_bundle,
@@ -2127,6 +2134,59 @@ def test_prevent_reuse_delivered_serial_no_in_repack(self):
21272134
self.assertEqual(se.purpose, "Repack")
21282135
self.assertRaises(frappe.ValidationError, se.submit)
21292136

2137+
def test_transferred_qty_in_material_transfer(self):
2138+
item_code = "_Test Item"
2139+
source_warehouse = "_Test Warehouse - _TC"
2140+
target_warehouse = "_Test Warehouse 1 - _TC"
2141+
2142+
if not frappe.db.get_value("UOM Conversion Detail", {"parent": item_code, "uom": "Box"}):
2143+
item_doc = frappe.get_doc("Item", item_code)
2144+
item_doc.append("uoms", {"uom": "Box", "conversion_factor": 12})
2145+
item_doc.save(ignore_permissions=True)
2146+
2147+
make_stock_entry(item_code=item_code, target=source_warehouse, qty=12, rate=100)
2148+
2149+
# Create a Material Request for Material Transfer
2150+
material_request = make_material_request(
2151+
material_request_type="Material Transfer",
2152+
qty=1,
2153+
item_code=item_code,
2154+
uom="Box",
2155+
conversion_factor=12,
2156+
from_warehouse=source_warehouse,
2157+
warehouse=target_warehouse,
2158+
)
2159+
in_transit_wh = get_in_transit_warehouse(material_request.company)
2160+
2161+
# Create first Stock Entry (Source -> In-Transit)
2162+
stock_entry_1 = make_in_transit_stock_entry(material_request.name, in_transit_wh)
2163+
stock_entry_1.items[0].update(
2164+
{
2165+
"qty": 1,
2166+
"s_warehouse": source_warehouse,
2167+
}
2168+
)
2169+
stock_entry_1.save().submit()
2170+
2171+
# Validate transfer status after first transfer
2172+
material_request.reload()
2173+
self.assertEqual(material_request.transfer_status, "In Transit")
2174+
2175+
# Create final Stock Entry (In-Transit -> Target)
2176+
end_transit_1 = make_stock_in_entry(stock_entry_1.name)
2177+
end_transit_1.save().submit()
2178+
end_transit_1.reload()
2179+
2180+
# Validate quantities
2181+
stock_entry_1.reload()
2182+
self.assertEqual(stock_entry_1.items[0].qty, 1)
2183+
self.assertEqual(stock_entry_1.items[0].transfer_qty, 12)
2184+
self.assertEqual(stock_entry_1.items[0].transferred_qty, 12)
2185+
2186+
# Validate transfer status after final transfer
2187+
material_request.reload()
2188+
self.assertEqual(material_request.transfer_status, "Completed")
2189+
21302190

21312191
def make_serialized_item(**args):
21322192
args = frappe._dict(args)

0 commit comments

Comments
 (0)