fix: always update the advance payment status
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 1e8cfea..839348a 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -169,20 +169,12 @@
 		elif self.payment_channel == "Phone":
 			self.request_phone_payment()
 
-		if (
-			self.reference_doctype in ["Sales Order"] and ref_doc.advance_payment_status == "Not Requested"
-		):
-			ref_doc.db_set("advance_payment_status", "Requested")
-			ref_doc.set_status(update=True)
-			ref_doc.notify_update()
-
-		if (
-			self.reference_doctype in ["Purchase Order"]
-			and ref_doc.advance_payment_status == "Not Initiated"
-		):
-			ref_doc.db_set("advance_payment_status", "Initiated")
-			ref_doc.set_status(update=True)
-			ref_doc.notify_update()
+		advance_payment_doctypes = frappe.get_hooks(
+			"advance_payment_customer_doctypes"
+		) + frappe.get_hooks("advance_payment_supplier_doctypes")
+		if self.reference_doctype in advance_payment_doctypes:
+			# set advance payment status
+			ref_doc.set_total_advance_paid()
 
 	def request_phone_payment(self):
 		controller = _get_payment_gateway_controller(self.payment_gateway)
@@ -222,38 +214,13 @@
 		self.check_if_payment_entry_exists()
 		self.set_as_cancelled()
 
-		if self.reference_doctype in ["Sales Order", "Purchase Order"]:
-
-			ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
-			if self.reference_doctype in ["Sales Order"] and ref_doc.advance_payment_status == "Requested":
-				peer_pr = frappe.db.count(
-					"Payment Request",
-					{
-						"reference_doctype": self.reference_doctype,
-						"reference_name": self.reference_name,
-						"docstatus": 1,
-					},
-				)
-				if not peer_pr:
-					ref_doc.db_set("advance_payment_status", "Not Requested")
-					ref_doc.set_status(update=True)
-					ref_doc.notify_update()
-
-			if (
-				self.reference_doctype in ["Purchase Order"] and ref_doc.advance_payment_status == "Initiated"
-			):
-				peer_pr = frappe.db.count(
-					"Payment Request",
-					{
-						"reference_doctype": self.reference_doctype,
-						"reference_name": self.reference_name,
-						"docstatus": 1,
-					},
-				)
-				if not peer_pr:
-					ref_doc.db_set("advance_payment_status", "Not Initiated")
-					ref_doc.set_status(update=True)
-					ref_doc.notify_update()
+		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
+		advance_payment_doctypes = frappe.get_hooks(
+			"advance_payment_customer_doctypes"
+		) + frappe.get_hooks("advance_payment_supplier_doctypes")
+		if self.reference_doctype in advance_payment_doctypes:
+			# set advance payment status
+			ref_doc.set_total_advance_paid()
 
 	def make_invoice(self):
 		ref_doc = frappe.get_doc(self.reference_doctype, self.reference_name)
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index ed0c1d7..159e217 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -1766,6 +1766,8 @@
 			.run(as_dict=True)
 		)
 
+		advance_paid, order_total = None, None
+
 		if advance:
 			advance = advance[0]
 
@@ -1794,13 +1796,38 @@
 					).format(formatted_advance_paid, self.name, formatted_order_total)
 				)
 
-			frappe.db.set_value(self.doctype, self.name, "advance_paid", advance_paid)
-			frappe.db.set_value(
-				self.doctype,
-				self.name,
-				"advance_payment_status",
-				"Partially Paid" if advance_paid < order_total else "Paid",
+			self.db_set("advance_paid", advance_paid)
+
+		self.set_advance_payment_status(advance_paid, order_total)
+
+	def set_advance_payment_status(
+		self, advance_paid: float | None = None, order_total: float | None = None
+	):
+		new_status = None
+		# if money is paid set the paid states
+		if advance_paid:
+			new_status = "Partially Paid" if advance_paid < order_total else "Paid"
+
+		if not new_status:
+			prs = frappe.db.count(
+				"Payment Request",
+				{
+					"reference_doctype": self.doctype,
+					"reference_name": self.name,
+					"docstatus": 1,
+				},
 			)
+			if self.doctype in frappe.get_hooks("advance_payment_customer_doctypes"):
+				new_status = "Requested" if prs else "Not Requested"
+			if self.doctype in frappe.get_hooks("advance_payment_supplier_doctypes"):
+				new_status = "Initiated" if prs else "Not Initiated"
+
+		if new_status == self.advance_payment_status:
+			return
+
+		self.db_set("advance_payment_status", new_status)
+		self.set_status(update=True)
+		self.notify_update()
 
 	@property
 	def company_abbr(self):