Merge pull request #51083 from aerele/mr-customer-provided-status

This commit is contained in:
Mihir Kandoi
2025-12-13 14:39:35 +05:30
committed by GitHub
3 changed files with 32 additions and 4 deletions

View File

@@ -130,7 +130,7 @@ status_map = {
],
[
"Received",
"eval:self.status != 'Stopped' and self.per_received == 100 and self.docstatus == 1 and self.material_request_type == 'Purchase'",
"eval:self.status != 'Stopped' and self.docstatus == 1 and ((self.per_received == 100 and self.material_request_type == 'Purchase') or (self.per_ordered == 100 and self.material_request_type == 'Customer Provided'))",
],
[
"Partially Received",
@@ -138,11 +138,11 @@ status_map = {
],
[
"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'",
"eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1 and self.material_request_type in ['Material Transfer', 'Customer Provided']",
],
[
"Partially Ordered",
"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'",
"eval:self.status != 'Stopped' and self.per_ordered < 100 and self.per_ordered > 0 and self.docstatus == 1 and self.material_request_type not in ['Material Transfer', 'Customer Provided']",
],
],
"POS Opening Entry": [

View File

@@ -21,7 +21,8 @@ frappe.listview_settings["Material Request"] = {
} else if (
doc.docstatus == 1 &&
flt(doc.per_ordered, precision) < 100 &&
doc.material_request_type == "Material Transfer"
(doc.material_request_type == "Material Transfer" ||
doc.material_request_type == "Customer Provided")
) {
return [__("Partially Received"), "yellow", "per_ordered,<,100"];
} else if (doc.docstatus == 1 && flt(doc.per_ordered, precision) < 100) {

View File

@@ -934,6 +934,33 @@ class TestMaterialRequest(IntegrationTestCase):
self.assertEqual(mr.per_ordered, 100)
self.assertEqual(mr.status, "Ordered")
def test_customer_provided_received_status(self):
create_item("CUST-0989", is_customer_provided_item=1, customer="_Test Customer", is_purchase_item=0)
mr = make_material_request(item_code="CUST-0989", material_request_type="Customer Provided")
se = make_stock_entry(mr.name)
se.insert()
se.submit()
mr.reload()
self.assertEqual(mr.per_ordered, 100)
self.assertEqual(mr.status, "Received")
def test_customer_provided_partially_received_status(self):
create_item("CUST-0990", is_customer_provided_item=1, customer="_Test Customer", is_purchase_item=0)
mr = make_material_request(item_code="CUST-0990", qty=10, material_request_type="Customer Provided")
se = make_stock_entry(mr.name)
se.get("items")[0].qty = 5
se.insert()
se.submit()
mr.reload()
self.assertEqual(mr.per_ordered, 50)
self.assertEqual(mr.status, "Partially Received")
def test_material_request_qty_over_sales_order_limit(self):
from erpnext.controllers.status_updater import OverAllowanceError
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order