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):
