diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index f2c76ff681bdcae17a5a4dcfe0909bfa5d093d19..efa150f47fd7f87c81100e02f51a22b3f04690c1 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -130,9 +130,13 @@ status_map = { "Partially Received", "eval:self.status != 'Stopped' and self.per_received > 0 and self.per_received < 100 and self.docstatus == 1 and self.material_request_type == 'Purchase'", ], + [ + "Partially Received", + "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'", + ], [ "Partially Ordered", - "eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1", + "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'", ], [ "Manufactured", diff --git a/erpnext/stock/doctype/material_request/material_request_list.js b/erpnext/stock/doctype/material_request/material_request_list.js index c85bd715f2d4d596c4373b681d527dba6ab11788..8cb84c5fa2ba68921ef6a4ab720c79e9c03e5551 100644 --- a/erpnext/stock/doctype/material_request/material_request_list.js +++ b/erpnext/stock/doctype/material_request/material_request_list.js @@ -14,7 +14,13 @@ frappe.listview_settings['Material Request'] = { } } else if (doc.docstatus==1 && flt(doc.per_ordered, precision) == 0) { return [__("Pending"), "orange", "per_ordered,=,0"]; - } else if (doc.docstatus==1 && flt(doc.per_ordered, precision) < 100) { + } else if ( + doc.docstatus == 1 && + flt(doc.per_ordered, precision) < 100 && + doc.material_request_type == "Material Transfer" + ) { + return [__("Partially Received"), "yellow", "per_ordered,<,100"]; + } else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) < 100) { return [__("Partially ordered"), "yellow", "per_ordered,<,100"]; } else if (doc.docstatus==1 && flt(doc.per_ordered, precision) == 100) { if (doc.material_request_type == "Purchase" && flt(doc.per_received, precision) < 100 && flt(doc.per_received, precision) > 0) { diff --git a/erpnext/stock/doctype/material_request/test_material_request.py b/erpnext/stock/doctype/material_request/test_material_request.py index 285a12ba896cbc7e8df6b36752ebe223796e50ac..edb085dc495503042497b42223f53cb4b533f224 100644 --- a/erpnext/stock/doctype/material_request/test_material_request.py +++ b/erpnext/stock/doctype/material_request/test_material_request.py @@ -15,6 +15,7 @@ from erpnext.stock.doctype.material_request.material_request import ( make_supplier_quotation, raise_work_orders, ) +from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse class TestMaterialRequest(FrappeTestCase): @@ -57,6 +58,43 @@ class TestMaterialRequest(FrappeTestCase): self.assertEqual(se.doctype, "Stock Entry") self.assertEqual(len(se.get("items")), len(mr.get("items"))) + def test_partial_make_stock_entry(self): + from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry as _make_stock_entry + + mr = frappe.copy_doc(test_records[0]).insert() + + source_wh = create_warehouse( + warehouse_name="_Test Source Warehouse", + properties={"parent_warehouse": "All Warehouses - _TC"}, + company="_Test Company", + ) + + mr = frappe.get_doc("Material Request", mr.name) + mr.material_request_type = "Material Transfer" + + for row in mr.items: + _make_stock_entry( + item_code=row.item_code, + qty=10, + to_warehouse=source_wh, + company="_Test Company", + rate=100, + ) + + row.from_warehouse = source_wh + row.qty = 10 + + mr.save() + mr.submit() + + se = make_stock_entry(mr.name) + se.get("items")[0].qty = 5 + se.insert() + se.submit() + + mr.reload() + self.assertEqual(mr.status, "Partially Received") + def test_in_transit_make_stock_entry(self): mr = frappe.copy_doc(test_records[0]).insert()