Skip to content

Commit 042d12b

Browse files
fix: material request status (backport frappe#44917) (frappe#44918)
* fix: material request status (frappe#44917) (cherry picked from commit 1319ce4) * chore: fix test case --------- Co-authored-by: rohitwaghchaure <[email protected]>
1 parent c241262 commit 042d12b

File tree

3 files changed

+49
-1
lines changed

3 files changed

+49
-1
lines changed

erpnext/controllers/status_updater.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -126,9 +126,13 @@ def validate_status(status, options):
126126
"Partially Received",
127127
"eval:self.status != 'Stopped' and self.per_received > 0 and self.per_received < 100 and self.docstatus == 1 and self.material_request_type == 'Purchase'",
128128
],
129+
[
130+
"Partially Received",
131+
"eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1 and self.material_request_type == 'Material Transfer'",
132+
],
129133
[
130134
"Partially Ordered",
131-
"eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1",
135+
"eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1 and self.material_request_type != 'Material Transfer'",
132136
],
133137
[
134138
"Manufactured",

erpnext/stock/doctype/material_request/material_request_list.js

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ frappe.listview_settings["Material Request"] = {
1414
}
1515
} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) == 0) {
1616
return [__("Pending"), "orange", "per_ordered,=,0"];
17+
} else if (
18+
doc.docstatus == 1 &&
19+
flt(doc.per_ordered, precision) < 100 &&
20+
doc.material_request_type == "Material Transfer"
21+
) {
22+
return [__("Partially Received"), "yellow", "per_ordered,<,100"];
1723
} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) < 100) {
1824
return [__("Partially ordered"), "yellow", "per_ordered,<,100"];
1925
} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) == 100) {

erpnext/stock/doctype/material_request/test_material_request.py

+38
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
make_supplier_quotation,
1818
raise_work_orders,
1919
)
20+
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
2021

2122

2223
class TestMaterialRequest(FrappeTestCase):
@@ -59,6 +60,43 @@ def test_make_stock_entry(self):
5960
self.assertEqual(se.doctype, "Stock Entry")
6061
self.assertEqual(len(se.get("items")), len(mr.get("items")))
6162

63+
def test_partial_make_stock_entry(self):
64+
from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry as _make_stock_entry
65+
66+
mr = frappe.copy_doc(test_records[0]).insert()
67+
68+
source_wh = create_warehouse(
69+
warehouse_name="_Test Source Warehouse",
70+
properties={"parent_warehouse": "All Warehouses - _TC"},
71+
company="_Test Company",
72+
)
73+
74+
mr = frappe.get_doc("Material Request", mr.name)
75+
mr.material_request_type = "Material Transfer"
76+
77+
for row in mr.items:
78+
_make_stock_entry(
79+
item_code=row.item_code,
80+
qty=10,
81+
to_warehouse=source_wh,
82+
company="_Test Company",
83+
rate=100,
84+
)
85+
86+
row.from_warehouse = source_wh
87+
row.qty = 10
88+
89+
mr.save()
90+
mr.submit()
91+
92+
se = make_stock_entry(mr.name)
93+
se.get("items")[0].qty = 5
94+
se.insert()
95+
se.submit()
96+
97+
mr.reload()
98+
self.assertEqual(mr.status, "Partially Received")
99+
62100
def test_in_transit_make_stock_entry(self):
63101
mr = frappe.copy_doc(test_records[0]).insert()
64102

0 commit comments

Comments
 (0)