Reference Document Type must be one of Sales Order, Sales Invoice, Journal Entry, or Dunning

Anyone familiar with this error message in Payment Entry, I have added a new doctype “Lot Reservation Entry” in reference_doctype so that I can make a payment transaction against “Lot Reservation”, I was able to include the new doctype “Lot Reservation Entry” in reference_doctype options but when i try to hit enter that error comes out, anybody here knows how to override that validation error? Thank you in advance.

per below code

	def validate_reference_documents(self):
		valid_reference_doctypes = self.get_valid_reference_doctypes()

		if not valid_reference_doctypes:
			return

		for d in self.get("references"):
			if not d.allocated_amount:
				continue
			if d.reference_doctype not in valid_reference_doctypes:
				frappe.throw(
					_("Reference Doctype must be one of {0}").format(comma_or(valid_reference_doctypes))
				)

			elif d.reference_name:
				if not frappe.db.exists(d.reference_doctype, d.reference_name):
					frappe.throw(_("{0} {1} does not exist").format(d.reference_doctype, d.reference_name))
				else:
					ref_doc = frappe.get_doc(d.reference_doctype, d.reference_name)

					if d.reference_doctype != "Journal Entry":
						if self.party != ref_doc.get(scrub(self.party_type)):
							frappe.throw(
								_("{0} {1} is not associated with {2} {3}").format(
									d.reference_doctype, d.reference_name, self.party_type, self.party
								)
							)
					else:
						self.validate_journal_entry()

					if d.reference_doctype in frappe.get_hooks("invoice_doctypes"):
						if self.party_type == "Customer":
							ref_party_account = (
								get_party_account_based_on_invoice_discounting(d.reference_name) or ref_doc.debit_to
							)
						elif self.party_type == "Supplier":
							ref_party_account = ref_doc.credit_to
						elif self.party_type == "Employee":
							ref_party_account = ref_doc.payable_account

						if ref_party_account != self.party_account:
							frappe.throw(
								_("{0} {1} is associated with {2}, but Party Account is {3}").format(
									d.reference_doctype, d.reference_name, ref_party_account, self.party_account
								)
							)

						if ref_doc.doctype == "Purchase Invoice" and ref_doc.get("on_hold"):
							frappe.throw(
								_("{0} {1} is on hold").format(d.reference_doctype, d.reference_name),
								title=_("Invalid Invoice"),
							)

					if ref_doc.docstatus != 1:
						frappe.throw(_("{0} {1} must be submitted").format(d.reference_doctype, d.reference_name))

	def get_valid_reference_doctypes(self):
		if self.party_type == "Customer":
			return ("Sales Order", "Sales Invoice", "Journal Entry", "Dunning")
		elif self.party_type == "Supplier":
			return ("Purchase Order", "Purchase Invoice", "Journal Entry")
		elif self.party_type == "Shareholder":
			return ("Journal Entry",)
		elif self.party_type == "Employee":
			return ("Journal Entry",)

you have 2 options

  1. add one extra party type
  2. override the Payment Entry Class and implement your own version of validate_reference_documents.

How can i implement these codes? In client script? Thanks in advance.

I don’t understand your two suggestions on this topic, can you further explain how to do it if i choose option 1 or if i choose option 2. Thank you.