feat: add `Status` and `Delivered Qty` fields in `Stock Reservation Entry`
diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json
index 4736031..dcd7b1f 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.json
@@ -18,6 +18,7 @@
   "voucher_detail_no",
   "section_break_11",
   "reserved_qty",
+  "delivered_qty",
   "column_break_17",
   "valuation_rate",
   "section_break_21",
@@ -25,6 +26,7 @@
   "stock_uom",
   "project",
   "column_break_26",
+  "status",
   "is_cancelled"
  ],
  "fields": [
@@ -197,12 +199,26 @@
    "print_width": "150px",
    "read_only": 1,
    "width": "150px"
+  },
+  {
+   "fieldname": "status",
+   "fieldtype": "Select",
+   "hidden": 1,
+   "label": "Status",
+   "options": "\nSubmitted\nPartially Delivered\nDelivered\nCancelled",
+   "read_only": 1
+  },
+  {
+   "fieldname": "delivered_qty",
+   "fieldtype": "Float",
+   "label": "Delivered Qty",
+   "read_only": 1
   }
  ],
  "hide_toolbar": 1,
  "index_web_pages_for_search": 1,
  "links": [],
- "modified": "2023-03-20 11:17:35.898760",
+ "modified": "2023-03-20 18:52:46.414108",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Stock Reservation Entry",
diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
index 50a05bc..ed2c4a6 100644
--- a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry.py
@@ -16,6 +16,13 @@
 		validate_disabled_warehouse(self.warehouse)
 		validate_warehouse_company(self.warehouse, self.company)
 
+	def on_submit(self):
+		self.update_status()
+
+	def on_cancel(self):
+		frappe.db.set_value(self.doctype, self.name, "is_cancelled", 1)
+		self.update_status()
+
 	def validate_mandatory(self):
 		mandatory = [
 			"item_code",
@@ -32,5 +39,15 @@
 			if not self.get(d):
 				frappe.throw(_("{0} is required").format(self.meta.get_label(d)))
 
-	def on_cancel(self):
-		frappe.db.set_value(self.doctype, self.name, "is_cancelled", 1)
+	def update_status(self, status=None, update_modified=True):
+		if not status:
+			if self.is_cancelled:
+				status = "Cancelled"
+			elif self.reserved_qty == self.delivered_qty:
+				status = "Delivered"
+			elif self.delivered_qty and self.reserved_qty > self.delivered_qty:
+				status = "Partially Delivered"
+			else:
+				status = "Submitted"
+
+		frappe.db.set_value(self.doctype, self.name, "status", status, update_modified=update_modified)
diff --git a/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js
new file mode 100644
index 0000000..992c566
--- /dev/null
+++ b/erpnext/stock/doctype/stock_reservation_entry/stock_reservation_entry_list.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2023, Frappe Technologies Pvt. Ltd. and contributors
+// For license information, please see license.txt
+
+frappe.listview_settings['Stock Reservation Entry'] = {
+	get_indicator: function (doc) {
+		const status_colors = {
+            'Submitted': 'blue',
+            'Partially Delivered': 'purple',
+            'Delivered': 'green',
+            'Cancelled': 'red',
+		};
+		return [__(doc.status), status_colors[doc.status], 'status,=,' + doc.status];
+	},
+};
\ No newline at end of file