Merge pull request #30872 from frappe/mergify/bp/develop/pr-30852

fix: Vat Audit report fixes (backport #30852)
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index ad5a840..0b334ae 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -38,6 +38,15 @@
 				]
 			};
 		});
+
+		this.frm.set_query("cost_center", () => {
+			return {
+				"filters": {
+					"company": this.frm.doc.company,
+					"is_group": 0
+				}
+			}
+		});
 	}
 
 	refresh() {
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
index eb0c20f..18d3485 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.json
@@ -24,6 +24,7 @@
   "invoice_limit",
   "payment_limit",
   "bank_cash_account",
+  "cost_center",
   "sec_break1",
   "invoices",
   "column_break_15",
@@ -178,13 +179,19 @@
   {
    "fieldname": "column_break_11",
    "fieldtype": "Column Break"
+  },
+  {
+   "fieldname": "cost_center",
+   "fieldtype": "Link",
+   "label": "Cost Center",
+   "options": "Cost Center"
   }
  ],
  "hide_toolbar": 1,
  "icon": "icon-resize-horizontal",
  "issingle": 1,
  "links": [],
- "modified": "2021-10-04 20:27:11.114194",
+ "modified": "2022-04-29 15:37:10.246831",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Payment Reconciliation",
@@ -209,5 +216,6 @@
  ],
  "sort_field": "modified",
  "sort_order": "DESC",
+ "states": [],
  "track_changes": 1
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index b596df9..e5b942f 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -332,6 +332,9 @@
 	def get_conditions(self, get_invoices=False, get_payments=False, get_return_invoices=False):
 		condition = " and company = '{0}' ".format(self.company)
 
+		if self.get("cost_center") and (get_invoices or get_payments or get_return_invoices):
+			condition = " and cost_center = '{0}' ".format(self.cost_center)
+
 		if get_invoices:
 			condition += (
 				" and posting_date >= {0}".format(frappe.db.escape(self.from_invoice_date))
diff --git a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py
index 2271f48..d2374b7 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/test_payment_reconciliation.py
@@ -1,9 +1,96 @@
 # Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and Contributors
 # See license.txt
 
-# import frappe
 import unittest
 
+import frappe
+from frappe.utils import add_days, getdate
+
+from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
+
 
 class TestPaymentReconciliation(unittest.TestCase):
-	pass
+	@classmethod
+	def setUpClass(cls):
+		make_customer()
+		make_invoice_and_payment()
+
+	def test_payment_reconciliation(self):
+		payment_reco = frappe.get_doc("Payment Reconciliation")
+		payment_reco.company = "_Test Company"
+		payment_reco.party_type = "Customer"
+		payment_reco.party = "_Test Payment Reco Customer"
+		payment_reco.receivable_payable_account = "Debtors - _TC"
+		payment_reco.from_invoice_date = add_days(getdate(), -1)
+		payment_reco.to_invoice_date = getdate()
+		payment_reco.from_payment_date = add_days(getdate(), -1)
+		payment_reco.to_payment_date = getdate()
+		payment_reco.maximum_invoice_amount = 1000
+		payment_reco.maximum_payment_amount = 1000
+		payment_reco.invoice_limit = 10
+		payment_reco.payment_limit = 10
+		payment_reco.bank_cash_account = "_Test Bank - _TC"
+		payment_reco.cost_center = "_Test Cost Center - _TC"
+		payment_reco.get_unreconciled_entries()
+
+		self.assertEqual(len(payment_reco.get("invoices")), 1)
+		self.assertEqual(len(payment_reco.get("payments")), 1)
+
+		payment_entry = payment_reco.get("payments")[0].reference_name
+		invoice = payment_reco.get("invoices")[0].invoice_number
+
+		payment_reco.allocate_entries(
+			{
+				"payments": [payment_reco.get("payments")[0].as_dict()],
+				"invoices": [payment_reco.get("invoices")[0].as_dict()],
+			}
+		)
+		payment_reco.reconcile()
+
+		payment_entry_doc = frappe.get_doc("Payment Entry", payment_entry)
+		self.assertEqual(payment_entry_doc.get("references")[0].reference_name, invoice)
+
+
+def make_customer():
+	if not frappe.db.get_value("Customer", "_Test Payment Reco Customer"):
+		frappe.get_doc(
+			{
+				"doctype": "Customer",
+				"customer_name": "_Test Payment Reco Customer",
+				"customer_type": "Individual",
+				"customer_group": "_Test Customer Group",
+				"territory": "_Test Territory",
+			}
+		).insert()
+
+
+def make_invoice_and_payment():
+	si = create_sales_invoice(
+		customer="_Test Payment Reco Customer", qty=1, rate=690, do_not_save=True
+	)
+	si.cost_center = "_Test Cost Center - _TC"
+	si.save()
+	si.submit()
+
+	pe = frappe.get_doc(
+		{
+			"doctype": "Payment Entry",
+			"payment_type": "Receive",
+			"party_type": "Customer",
+			"party": "_Test Payment Reco Customer",
+			"company": "_Test Company",
+			"paid_from_account_currency": "INR",
+			"paid_to_account_currency": "INR",
+			"source_exchange_rate": 1,
+			"target_exchange_rate": 1,
+			"reference_no": "1",
+			"reference_date": getdate(),
+			"received_amount": 690,
+			"paid_amount": 690,
+			"paid_from": "Debtors - _TC",
+			"paid_to": "_Test Bank - _TC",
+			"cost_center": "_Test Cost Center - _TC",
+		}
+	)
+	pe.insert()
+	pe.submit()