Merge pull request #37330 from ruthra-kumar/provision_to_pick_exc_rate_on_transaction_date

refactor: checkbox to toggle exchange rate inheritence in PO->PI
diff --git a/.github/helper/install.sh b/.github/helper/install.sh
index d1a97f8..915a463 100644
--- a/.github/helper/install.sh
+++ b/.github/helper/install.sh
@@ -4,7 +4,9 @@
 
 cd ~ || exit
 
-sudo apt update && sudo apt install redis-server libcups2-dev
+sudo apt update
+sudo apt remove mysql-server mysql-client
+sudo apt install libcups2-dev redis-server mariadb-client-10.6
 
 pip install frappe-bench
 
@@ -25,14 +27,14 @@
 
 
 if [ "$DB" == "mariadb" ];then
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL character_set_server = 'utf8mb4'"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "SET GLOBAL collation_server = 'utf8mb4_unicode_ci'"
 
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE USER 'test_frappe'@'localhost' IDENTIFIED BY 'test_frappe'"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "CREATE DATABASE test_frappe"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "GRANT ALL PRIVILEGES ON \`test_frappe\`.* TO 'test_frappe'@'localhost'"
 
-    mysql --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
+    mariadb --host 127.0.0.1 --port 3306 -u root -proot -e "FLUSH PRIVILEGES"
 fi
 
 if [ "$DB" == "postgres" ];then
diff --git a/.github/workflows/initiate_release.yml b/.github/workflows/initiate_release.yml
index ee60bad..7034773 100644
--- a/.github/workflows/initiate_release.yml
+++ b/.github/workflows/initiate_release.yml
@@ -30,23 +30,3 @@
           head: version-${{ matrix.version }}-hotfix
         env:
           GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
-
-  beta-release:
-    name: Release
-    runs-on: ubuntu-latest
-    strategy:
-      fail-fast: false
-
-    steps:
-      - uses: octokit/request-action@v2.x
-        with:
-          route: POST /repos/{owner}/{repo}/pulls
-          owner: frappe
-          repo: erpnext
-          title: |-
-            "chore: release v15 beta"
-          body: "Automated beta release."
-          base: version-15-beta
-          head: develop
-        env:
-          GITHUB_TOKEN: ${{ secrets.RELEASE_TOKEN }}
diff --git a/.github/workflows/patch.yml b/.github/workflows/patch.yml
index 07b8de7..21dd3d4 100644
--- a/.github/workflows/patch.yml
+++ b/.github/workflows/patch.yml
@@ -28,7 +28,7 @@
           MARIADB_ROOT_PASSWORD: 'root'
         ports:
           - 3306:3306
-        options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+        options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
 
     steps:
       - name: Clone
diff --git a/.github/workflows/server-tests-mariadb.yml b/.github/workflows/server-tests-mariadb.yml
index 559be06..ccdfc8c 100644
--- a/.github/workflows/server-tests-mariadb.yml
+++ b/.github/workflows/server-tests-mariadb.yml
@@ -47,7 +47,7 @@
           MARIADB_ROOT_PASSWORD: 'root'
         ports:
           - 3306:3306
-        options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
+        options: --health-cmd="mariadb-admin ping" --health-interval=5s --health-timeout=2s --health-retries=3
 
     steps:
       - name: Clone
diff --git a/erpnext/accounts/doctype/account_closing_balance/account_closing_balance.py b/erpnext/accounts/doctype/account_closing_balance/account_closing_balance.py
index e75af70..d06bd83 100644
--- a/erpnext/accounts/doctype/account_closing_balance/account_closing_balance.py
+++ b/erpnext/accounts/doctype/account_closing_balance/account_closing_balance.py
@@ -37,6 +37,7 @@
 			}
 		)
 		cle.flags.ignore_permissions = True
+		cle.flags.ignore_links = True
 		cle.submit()
 
 
diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
index 6857ba3..061bab3 100644
--- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
+++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json
@@ -32,6 +32,7 @@
   "column_break_19",
   "add_taxes_from_item_tax_template",
   "book_tax_discount_loss",
+  "round_row_wise_tax",
   "print_settings",
   "show_inclusive_tax_in_print",
   "show_taxes_as_table_in_print",
@@ -414,6 +415,13 @@
    "fieldname": "ignore_account_closing_balance",
    "fieldtype": "Check",
    "label": "Ignore Account Closing Balance"
+  },
+  {
+   "default": "0",
+   "description": "Tax Amount will be rounded on a row(items) level",
+   "fieldname": "round_row_wise_tax",
+   "fieldtype": "Check",
+   "label": "Round Tax Amount Row-wise"
   }
  ],
  "icon": "icon-cog",
@@ -421,7 +429,7 @@
  "index_web_pages_for_search": 1,
  "issingle": 1,
  "links": [],
- "modified": "2023-07-27 15:05:34.000264",
+ "modified": "2023-08-28 00:12:02.740633",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Accounts Settings",
diff --git a/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py b/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
index 2a18830..ace751b 100644
--- a/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
+++ b/erpnext/accounts/doctype/bank_clearance/test_bank_clearance.py
@@ -43,6 +43,7 @@
 		def create_loan_masters():
 			create_loan_product(
 				"Clearance Loan",
+				"Clearance Loan",
 				2000000,
 				13.5,
 				25,
diff --git a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
index 04af323..a70af7a 100644
--- a/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
+++ b/erpnext/accounts/doctype/bank_statement_import/bank_statement_import.js
@@ -352,10 +352,11 @@
 
 	export_errored_rows(frm) {
 		open_url_post(
-			"/api/method/frappe.core.doctype.data_import.data_import.download_errored_template",
+			"/api/method/erpnext.accounts.doctype.bank_statement_import.bank_statement_import.download_errored_template",
 			{
 				data_import_name: frm.doc.name,
-			}
+			},
+			true
 		);
 	},
 
diff --git a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
index 2a504f6..4a6491d 100644
--- a/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
+++ b/erpnext/accounts/doctype/bank_transaction/test_bank_transaction.py
@@ -422,6 +422,7 @@
 
 	create_loan_product(
 		"Personal Loan",
+		"Personal Loan",
 		500000,
 		8.4,
 		is_term_loan=1,
diff --git a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.json b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
index c62b711..df232a5 100644
--- a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
+++ b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.json
@@ -9,6 +9,7 @@
   "disabled",
   "service_provider",
   "api_endpoint",
+  "access_key",
   "url",
   "column_break_3",
   "help",
@@ -84,12 +85,18 @@
    "fieldname": "disabled",
    "fieldtype": "Check",
    "label": "Disabled"
+  },
+  {
+   "depends_on": "eval:doc.service_provider == 'exchangerate.host';",
+   "fieldname": "access_key",
+   "fieldtype": "Data",
+   "label": "Access Key"
   }
  ],
  "index_web_pages_for_search": 1,
  "issingle": 1,
  "links": [],
- "modified": "2023-01-09 12:19:03.955906",
+ "modified": "2023-10-04 15:30:25.333860",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Currency Exchange Settings",
diff --git a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.py b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.py
index d618c5c..117d5ff 100644
--- a/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.py
+++ b/erpnext/accounts/doctype/currency_exchange_settings/currency_exchange_settings.py
@@ -18,11 +18,21 @@
 
 	def set_parameters_and_result(self):
 		if self.service_provider == "exchangerate.host":
+
+			if not self.access_key:
+				frappe.throw(
+					_("Access Key is required for Service Provider: {0}").format(
+						frappe.bold(self.service_provider)
+					)
+				)
+
 			self.set("result_key", [])
 			self.set("req_params", [])
 
 			self.api_endpoint = "https://api.exchangerate.host/convert"
 			self.append("result_key", {"key": "result"})
+			self.append("req_params", {"key": "access_key", "value": self.access_key})
+			self.append("req_params", {"key": "amount", "value": "1"})
 			self.append("req_params", {"key": "date", "value": "{transaction_date}"})
 			self.append("req_params", {"key": "from", "value": "{from_currency}"})
 			self.append("req_params", {"key": "to", "value": "{to_currency}"})
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index cdd1203..22b6880 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -53,7 +53,15 @@
 
 		erpnext.accounts.unreconcile_payments.add_unreconcile_btn(frm);
 	},
-
+	before_save: function(frm) {
+		if ((frm.doc.docstatus == 0) && (!frm.doc.is_system_generated)) {
+			let payment_entry_references = frm.doc.accounts.filter(elem => (elem.reference_type == "Payment Entry"));
+			if (payment_entry_references.length > 0) {
+				let rows = payment_entry_references.map(x => "#"+x.idx);
+				frappe.throw(__("Rows: {0} have 'Payment Entry' as reference_type. This should not be set manually.", [frappe.utils.comma_and(rows)]));
+			}
+		}
+	},
 	make_inter_company_journal_entry: function(frm) {
 		var d = new frappe.ui.Dialog({
 			title: __("Select Company"),
diff --git a/erpnext/accounts/doctype/opening_invoice_creation_tool/test_opening_invoice_creation_tool.py b/erpnext/accounts/doctype/opening_invoice_creation_tool/test_opening_invoice_creation_tool.py
index 1e22c64..02c2c67 100644
--- a/erpnext/accounts/doctype/opening_invoice_creation_tool/test_opening_invoice_creation_tool.py
+++ b/erpnext/accounts/doctype/opening_invoice_creation_tool/test_opening_invoice_creation_tool.py
@@ -218,6 +218,7 @@
 			"territory": "All Territories",
 		}
 	)
+
 	if not frappe.db.exists("Customer", customer_name):
 		customer.insert(ignore_permissions=True)
 		return customer.name
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 38a5209..e6403fd 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -271,16 +271,18 @@
 
 				# if no payment template is used by invoice and has a custom term(no `payment_term`), then invoice outstanding will be in 'None' key
 				latest = latest.get(d.payment_term) or latest.get(None)
-
 				# The reference has already been fully paid
 				if not latest:
 					frappe.throw(
 						_("{0} {1} has already been fully paid.").format(_(d.reference_doctype), d.reference_name)
 					)
 				# The reference has already been partly paid
-				elif latest.outstanding_amount < latest.invoice_amount and flt(
-					d.outstanding_amount, d.precision("outstanding_amount")
-				) != flt(latest.outstanding_amount, d.precision("outstanding_amount")):
+				elif (
+					latest.outstanding_amount < latest.invoice_amount
+					and flt(d.outstanding_amount, d.precision("outstanding_amount"))
+					!= flt(latest.outstanding_amount, d.precision("outstanding_amount"))
+					and d.payment_term == ""
+				):
 					frappe.throw(
 						_(
 							"{0} {1} has already been partly paid. Please use the 'Get Outstanding Invoice' or the 'Get Outstanding Orders' button to get the latest outstanding amounts."
@@ -1751,11 +1753,10 @@
 										"voucher_type": d.voucher_type,
 										"posting_date": d.posting_date,
 										"invoice_amount": flt(d.invoice_amount),
-										"outstanding_amount": flt(d.outstanding_amount),
-										"payment_term_outstanding": payment_term_outstanding,
-										"allocated_amount": payment_term_outstanding
+										"outstanding_amount": payment_term_outstanding
 										if payment_term_outstanding
 										else d.outstanding_amount,
+										"payment_term_outstanding": payment_term_outstanding,
 										"payment_amount": payment_term.payment_amount,
 										"payment_term": payment_term.payment_term,
 										"account": d.account,
diff --git a/erpnext/accounts/doctype/payment_request/payment_request.py b/erpnext/accounts/doctype/payment_request/payment_request.py
index 11d6d5f..ce15bcf 100644
--- a/erpnext/accounts/doctype/payment_request/payment_request.py
+++ b/erpnext/accounts/doctype/payment_request/payment_request.py
@@ -20,7 +20,6 @@
 from erpnext.accounts.doctype.subscription_plan.subscription_plan import get_plan_rate
 from erpnext.accounts.party import get_party_account, get_party_bank_account
 from erpnext.accounts.utils import get_account_currency
-from erpnext.erpnext_integrations.stripe_integration import create_stripe_subscription
 from erpnext.utilities import payment_app_import_guard
 
 
@@ -249,7 +248,7 @@
 		if (
 			party_account_currency == ref_doc.company_currency and party_account_currency != self.currency
 		):
-			party_amount = ref_doc.base_grand_total
+			party_amount = ref_doc.get("base_rounded_total") or ref_doc.get("base_grand_total")
 		else:
 			party_amount = self.grand_total
 
@@ -393,6 +392,9 @@
 
 	def create_subscription(self, payment_provider, gateway_controller, data):
 		if payment_provider == "stripe":
+			with payment_app_import_guard():
+				from payments.payment_gateways.stripe_integration import create_stripe_subscription
+
 			return create_stripe_subscription(gateway_controller, data)
 
 
diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
index 52ae951..6c959ba 100644
--- a/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
+++ b/erpnext/accounts/doctype/process_statement_of_accounts/process_statement_of_accounts.py
@@ -48,6 +48,20 @@
 
 
 def get_report_pdf(doc, consolidated=True):
+	statement_dict = get_statement_dict(doc)
+	if not bool(statement_dict):
+		return False
+	elif consolidated:
+		delimiter = '<div style="page-break-before: always;"></div>' if doc.include_break else ""
+		result = delimiter.join(list(statement_dict.values()))
+		return get_pdf(result, {"orientation": doc.orientation})
+	else:
+		for customer, statement_html in statement_dict.items():
+			statement_dict[customer] = get_pdf(statement_html, {"orientation": doc.orientation})
+		return statement_dict
+
+
+def get_statement_dict(doc, get_statement_dict=False):
 	statement_dict = {}
 	ageing = ""
 
@@ -78,18 +92,11 @@
 			if not res:
 				continue
 
-		statement_dict[entry.customer] = get_html(doc, filters, entry, col, res, ageing)
+		statement_dict[entry.customer] = (
+			[res, ageing] if get_statement_dict else get_html(doc, filters, entry, col, res, ageing)
+		)
 
-	if not bool(statement_dict):
-		return False
-	elif consolidated:
-		delimiter = '<div style="page-break-before: always;"></div>' if doc.include_break else ""
-		result = delimiter.join(list(statement_dict.values()))
-		return get_pdf(result, {"orientation": doc.orientation})
-	else:
-		for customer, statement_html in statement_dict.items():
-			statement_dict[customer] = get_pdf(statement_html, {"orientation": doc.orientation})
-		return statement_dict
+	return statement_dict
 
 
 def set_ageing(doc, entry):
@@ -102,7 +109,8 @@
 			"range2": 60,
 			"range3": 90,
 			"range4": 120,
-			"customer": entry.customer,
+			"party_type": "Customer",
+			"party": [entry.customer],
 		}
 	)
 	col1, ageing = get_ageing(ageing_filters)
diff --git a/erpnext/accounts/doctype/process_statement_of_accounts/test_process_statement_of_accounts.py b/erpnext/accounts/doctype/process_statement_of_accounts/test_process_statement_of_accounts.py
index fb0d8d1..a3a74df 100644
--- a/erpnext/accounts/doctype/process_statement_of_accounts/test_process_statement_of_accounts.py
+++ b/erpnext/accounts/doctype/process_statement_of_accounts/test_process_statement_of_accounts.py
@@ -4,39 +4,107 @@
 import unittest
 
 import frappe
+from frappe.tests.utils import FrappeTestCase
 from frappe.utils import add_days, getdate, today
 
 from erpnext.accounts.doctype.process_statement_of_accounts.process_statement_of_accounts import (
+	get_statement_dict,
 	send_emails,
 )
 from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
+from erpnext.accounts.test.accounts_mixin import AccountsTestMixin
 
 
-class TestProcessStatementOfAccounts(unittest.TestCase):
+class TestProcessStatementOfAccounts(AccountsTestMixin, FrappeTestCase):
 	def setUp(self):
+		self.create_company()
+		self.create_customer()
+		self.create_customer(customer_name="Other Customer")
+		self.clear_old_entries()
 		self.si = create_sales_invoice()
-		self.process_soa = create_process_soa()
+		create_sales_invoice(customer="Other Customer")
+
+	def test_process_soa_for_gl(self):
+		"""Tests the utils for Statement of Accounts(General Ledger)"""
+		process_soa = create_process_soa(
+			name="_Test Process SOA for GL",
+			customers=[{"customer": "_Test Customer"}, {"customer": "Other Customer"}],
+		)
+		statement_dict = get_statement_dict(process_soa, get_statement_dict=True)
+
+		# Checks if the statements are filtered based on the Customer
+		self.assertIn("Other Customer", statement_dict)
+		self.assertIn("_Test Customer", statement_dict)
+
+		# Checks if the correct number of receivable entries exist
+		# 3 rows for opening and closing and 1 row for SI
+		receivable_entries = statement_dict["_Test Customer"][0]
+		self.assertEqual(len(receivable_entries), 4)
+
+		# Checks the amount for the receivable entry
+		self.assertEqual(receivable_entries[1].voucher_no, self.si.name)
+		self.assertEqual(receivable_entries[1].balance, 100)
+
+	def test_process_soa_for_ar(self):
+		"""Tests the utils for Statement of Accounts(Accounts Receivable)"""
+		process_soa = create_process_soa(name="_Test Process SOA for AR", report="Accounts Receivable")
+		statement_dict = get_statement_dict(process_soa, get_statement_dict=True)
+
+		# Checks if the statements are filtered based on the Customer
+		self.assertNotIn("Other Customer", statement_dict)
+		self.assertIn("_Test Customer", statement_dict)
+
+		# Checks if the correct number of receivable entries exist
+		receivable_entries = statement_dict["_Test Customer"][0]
+		self.assertEqual(len(receivable_entries), 1)
+
+		# Checks the amount for the receivable entry
+		self.assertEqual(receivable_entries[0].voucher_no, self.si.name)
+		self.assertEqual(receivable_entries[0].total_due, 100)
+
+		# Checks the ageing summary for AR
+		ageing_summary = statement_dict["_Test Customer"][1][0]
+		expected_summary = frappe._dict(
+			range1=100,
+			range2=0,
+			range3=0,
+			range4=0,
+			range5=0,
+		)
+		self.check_ageing_summary(ageing_summary, expected_summary)
 
 	def test_auto_email_for_process_soa_ar(self):
-		send_emails(self.process_soa.name, from_scheduler=True)
-		self.process_soa.load_from_db()
-		self.assertEqual(self.process_soa.posting_date, getdate(add_days(today(), 7)))
+		process_soa = create_process_soa(
+			name="_Test Process SOA", enable_auto_email=1, report="Accounts Receivable"
+		)
+		send_emails(process_soa.name, from_scheduler=True)
+		process_soa.load_from_db()
+		self.assertEqual(process_soa.posting_date, getdate(add_days(today(), 7)))
+
+	def check_ageing_summary(self, ageing, expected_ageing):
+		for age_range in expected_ageing:
+			self.assertEqual(expected_ageing[age_range], ageing.get(age_range))
 
 	def tearDown(self):
-		frappe.delete_doc_if_exists("Process Statement Of Accounts", "Test Process SOA")
+		frappe.db.rollback()
 
 
-def create_process_soa():
-	frappe.delete_doc_if_exists("Process Statement Of Accounts", "Test Process SOA")
+def create_process_soa(**args):
+	args = frappe._dict(args)
+	frappe.delete_doc_if_exists("Process Statement Of Accounts", args.name)
 	process_soa = frappe.new_doc("Process Statement Of Accounts")
-	soa_dict = {
-		"name": "Test Process SOA",
-		"company": "_Test Company",
-	}
+	soa_dict = frappe._dict(
+		name=args.name,
+		company=args.company or "_Test Company",
+		customers=args.customers or [{"customer": "_Test Customer"}],
+		enable_auto_email=1 if args.enable_auto_email else 0,
+		frequency=args.frequency or "Weekly",
+		report=args.report or "General Ledger",
+		from_date=args.from_date or getdate(today()),
+		to_date=args.to_date or getdate(today()),
+		posting_date=args.posting_date or getdate(today()),
+		include_ageing=1,
+	)
 	process_soa.update(soa_dict)
-	process_soa.set("customers", [{"customer": "_Test Customer"}])
-	process_soa.enable_auto_email = 1
-	process_soa.frequency = "Weekly"
-	process_soa.report = "Accounts Receivable"
 	process_soa.save()
 	return process_soa
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index 095617d..2eaa337 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -479,6 +479,12 @@
 	}
 });
 
+cur_frm.set_query("wip_composite_asset", "items", function() {
+	return {
+		filters: {'is_composite_asset': 1, 'docstatus': 0 }
+	}
+});
+
 cur_frm.cscript.expense_account = function(doc, cdt, cdn){
 	var d = locals[cdt][cdn];
 	if(d.idx == 1 && d.expense_account){
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 85ed126..2433268 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -539,8 +539,9 @@
 			]
 			child_tables = {"items": ("expense_account",), "taxes": ("account_head",)}
 			self.needs_repost = self.check_if_fields_updated(fields_to_check, child_tables)
-			self.validate_for_repost()
-			self.db_set("repost_required", self.needs_repost)
+			if self.needs_repost:
+				self.validate_for_repost()
+				self.db_set("repost_required", self.needs_repost)
 
 	def make_gl_entries(self, gl_entries=None, from_repost=False):
 		if not gl_entries:
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index 0aaea06..e365d60 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -5,7 +5,7 @@
 import unittest
 
 import frappe
-from frappe.tests.utils import change_settings
+from frappe.tests.utils import FrappeTestCase, change_settings
 from frappe.utils import add_days, cint, flt, getdate, nowdate, today
 
 import erpnext
@@ -38,7 +38,7 @@
 test_ignore = ["Serial No"]
 
 
-class TestPurchaseInvoice(unittest.TestCase, StockTestMixin):
+class TestPurchaseInvoice(FrappeTestCase, StockTestMixin):
 	@classmethod
 	def setUpClass(self):
 		unlink_payment_on_cancel_of_invoice()
@@ -48,6 +48,9 @@
 	def tearDownClass(self):
 		unlink_payment_on_cancel_of_invoice(0)
 
+	def tearDown(self):
+		frappe.db.rollback()
+
 	def test_purchase_invoice_received_qty(self):
 		"""
 		1. Test if received qty is validated against accepted + rejected
@@ -422,6 +425,7 @@
 			self.assertEqual(tax.tax_amount, expected_values[i][1])
 			self.assertEqual(tax.total, expected_values[i][2])
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_purchase_invoice_with_advance(self):
 		from erpnext.accounts.doctype.journal_entry.test_journal_entry import (
 			test_records as jv_test_records,
@@ -476,6 +480,7 @@
 			)
 		)
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_invoice_with_advance_and_multi_payment_terms(self):
 		from erpnext.accounts.doctype.journal_entry.test_journal_entry import (
 			test_records as jv_test_records,
@@ -1220,6 +1225,7 @@
 		acc_settings.submit_journal_entriessubmit_journal_entries = 0
 		acc_settings.save()
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_gain_loss_with_advance_entry(self):
 		unlink_enabled = frappe.db.get_value(
 			"Accounts Settings", "Accounts Settings", "unlink_payment_on_cancel_of_invoice"
@@ -1420,6 +1426,7 @@
 		)
 		frappe.db.set_value("Company", "_Test Company", "exchange_gain_loss_account", original_account)
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_purchase_invoice_advance_taxes(self):
 		from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
 
@@ -1916,6 +1923,32 @@
 		pi.load_from_db()
 		self.assertFalse(pi.repost_required)
 
+	@change_settings("Buying Settings", {"supplier_group": None})
+	def test_purchase_invoice_without_supplier_group(self):
+		# Create a Supplier
+		test_supplier_name = "_Test Supplier Without Supplier Group"
+		if not frappe.db.exists("Supplier", test_supplier_name):
+			supplier = frappe.get_doc(
+				{
+					"doctype": "Supplier",
+					"supplier_name": test_supplier_name,
+				}
+			).insert(ignore_permissions=True)
+
+			self.assertEqual(supplier.supplier_group, None)
+
+		po = create_purchase_order(
+			supplier=test_supplier_name,
+			rate=3000,
+			item="_Test Non Stock Item",
+			posting_date="2021-09-15",
+		)
+
+		pi = make_purchase_invoice(supplier=test_supplier_name)
+
+		self.assertEqual(po.docstatus, 1)
+		self.assertEqual(pi.docstatus, 1)
+
 
 def set_advance_flag(company, flag, default_account):
 	frappe.db.set_value(
diff --git a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
index 3690142..424e942 100644
--- a/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
+++ b/erpnext/accounts/doctype/purchase_invoice_item/purchase_invoice_item.json
@@ -77,6 +77,7 @@
   "manufacturer_part_no",
   "accounting",
   "expense_account",
+  "wip_composite_asset",
   "col_break5",
   "is_fixed_asset",
   "asset_location",
@@ -903,12 +904,18 @@
    "no_copy": 1,
    "options": "Serial and Batch Bundle",
    "print_hide": 1
+  },
+  {
+   "fieldname": "wip_composite_asset",
+   "fieldtype": "Link",
+   "label": "WIP Composite Asset",
+   "options": "Asset"
   }
  ],
  "idx": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-07-26 12:54:53.178156",
+ "modified": "2023-10-03 21:01:01.824892",
  "modified_by": "Administrator",
  "module": "Accounts",
  "name": "Purchase Invoice Item",
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index f380825..f6d9c93 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -536,8 +536,9 @@
 				"taxes": ("account_head",),
 			}
 			self.needs_repost = self.check_if_fields_updated(fields_to_check, child_tables)
-			self.validate_for_repost()
-			self.db_set("repost_required", self.needs_repost)
+			if self.needs_repost:
+				self.validate_for_repost()
+				self.db_set("repost_required", self.needs_repost)
 
 	def set_paid_amount(self):
 		paid_amount = 0.0
diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
index 84b0149..c1adffd 100644
--- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py
@@ -6,7 +6,7 @@
 
 import frappe
 from frappe.model.dynamic_links import get_dynamic_link_map
-from frappe.tests.utils import change_settings
+from frappe.tests.utils import FrappeTestCase, change_settings
 from frappe.utils import add_days, flt, getdate, nowdate, today
 
 import erpnext
@@ -26,6 +26,7 @@
 from erpnext.controllers.accounts_controller import update_invoice_status
 from erpnext.controllers.taxes_and_totals import get_itemised_tax_breakup_data
 from erpnext.exceptions import InvalidAccountCurrency, InvalidCurrency
+from erpnext.selling.doctype.customer.test_customer import get_customer_dict
 from erpnext.stock.doctype.delivery_note.delivery_note import make_sales_invoice
 from erpnext.stock.doctype.item.test_item import create_item
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import make_purchase_receipt
@@ -44,13 +45,17 @@
 from erpnext.stock.utils import get_incoming_rate, get_stock_balance
 
 
-class TestSalesInvoice(unittest.TestCase):
+class TestSalesInvoice(FrappeTestCase):
 	def setUp(self):
 		from erpnext.stock.doctype.stock_ledger_entry.test_stock_ledger_entry import create_items
 
 		create_items(["_Test Internal Transfer Item"], uoms=[{"uom": "Box", "conversion_factor": 10}])
 		create_internal_parties()
 		setup_accounts()
+		frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None)
+
+	def tearDown(self):
+		frappe.db.rollback()
 
 	def make(self):
 		w = frappe.copy_doc(test_records[0])
@@ -178,6 +183,7 @@
 		self.assertRaises(frappe.LinkExistsError, si.cancel)
 		unlink_payment_on_cancel_of_invoice()
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_payment_entry_unlink_against_standalone_credit_note(self):
 		from erpnext.accounts.doctype.payment_entry.test_payment_entry import get_payment_entry
 
@@ -1299,6 +1305,7 @@
 		dn.submit()
 		return dn
 
+	@change_settings("Accounts Settings", {"unlink_payment_on_cancellation_of_invoice": 1})
 	def test_sales_invoice_with_advance(self):
 		from erpnext.accounts.doctype.journal_entry.test_journal_entry import (
 			test_records as jv_test_records,
@@ -2774,6 +2781,13 @@
 			company="_Test Company",
 		)
 
+		tds_payable_account = create_account(
+			account_name="TDS Payable",
+			account_type="Tax",
+			parent_account="Duties and Taxes - _TC",
+			company="_Test Company",
+		)
+
 		si = create_sales_invoice(parent_cost_center="Main - _TC", do_not_save=1)
 		si.apply_discount_on = "Grand Total"
 		si.additional_discount_account = additional_discount_account
@@ -3072,8 +3086,8 @@
 			si.commission_rate = commission_rate
 			self.assertRaises(frappe.ValidationError, si.save)
 
+	@change_settings("Accounts Settings", {"acc_frozen_upto": add_days(getdate(), 1)})
 	def test_sales_invoice_submission_post_account_freezing_date(self):
-		frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", add_days(getdate(), 1))
 		si = create_sales_invoice(do_not_save=True)
 		si.posting_date = add_days(getdate(), 1)
 		si.save()
@@ -3082,8 +3096,6 @@
 		si.posting_date = getdate()
 		si.submit()
 
-		frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None)
-
 	def test_over_billing_case_against_delivery_note(self):
 		"""
 		Test a case where duplicating the item with qty = 1 in the invoice
@@ -3112,6 +3124,13 @@
 
 		frappe.db.set_single_value("Accounts Settings", "over_billing_allowance", over_billing_allowance)
 
+	@change_settings(
+		"Accounts Settings",
+		{
+			"book_deferred_entries_via_journal_entry": 1,
+			"submit_journal_entries": 1,
+		},
+	)
 	def test_multi_currency_deferred_revenue_via_journal_entry(self):
 		deferred_account = create_account(
 			account_name="Deferred Revenue",
@@ -3119,11 +3138,6 @@
 			company="_Test Company",
 		)
 
-		acc_settings = frappe.get_single("Accounts Settings")
-		acc_settings.book_deferred_entries_via_journal_entry = 1
-		acc_settings.submit_journal_entries = 1
-		acc_settings.save()
-
 		item = create_item("_Test Item for Deferred Accounting")
 		item.enable_deferred_expense = 1
 		item.item_defaults[0].deferred_revenue_account = deferred_account
@@ -3189,13 +3203,6 @@
 			self.assertEqual(expected_gle[i][2], gle.debit)
 			self.assertEqual(getdate(expected_gle[i][3]), gle.posting_date)
 
-		acc_settings = frappe.get_single("Accounts Settings")
-		acc_settings.book_deferred_entries_via_journal_entry = 0
-		acc_settings.submit_journal_entries = 0
-		acc_settings.save()
-
-		frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None)
-
 	def test_standalone_serial_no_return(self):
 		si = create_sales_invoice(
 			item_code="_Test Serialized Item With Series", update_stock=True, is_return=True, qty=-1
@@ -3400,6 +3407,24 @@
 
 		set_advance_flag(company="_Test Company", flag=0, default_account="")
 
+	@change_settings("Selling Settings", {"customer_group": None, "territory": None})
+	def test_sales_invoice_without_customer_group_and_territory(self):
+		# create a customer
+		if not frappe.db.exists("Customer", "_Test Simple Customer"):
+			customer_dict = get_customer_dict("_Test Simple Customer")
+			customer_dict.pop("customer_group")
+			customer_dict.pop("territory")
+			customer = frappe.get_doc(customer_dict).insert(ignore_permissions=True)
+
+			self.assertEqual(customer.customer_group, None)
+			self.assertEqual(customer.territory, None)
+
+		# create a sales invoice
+		si = create_sales_invoice(customer="_Test Simple Customer")
+		self.assertEqual(si.docstatus, 1)
+		self.assertEqual(si.customer_group, None)
+		self.assertEqual(si.territory, None)
+
 	@change_settings("Selling Settings", {"allow_negative_rates_for_items": 0})
 	def test_sales_return_negative_rate(self):
 		si = create_sales_invoice(is_return=1, qty=-2, rate=-10, do_not_save=True)
diff --git a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
index abeaab1..5d2764b 100644
--- a/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
+++ b/erpnext/accounts/doctype/sales_invoice_item/sales_invoice_item.json
@@ -157,7 +157,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Text",
    "print_width": "200px",
-   "reqd": 1,
    "width": "200px"
   },
   {
@@ -912,4 +911,4 @@
  "sort_field": "modified",
  "sort_order": "DESC",
  "states": []
-}
\ No newline at end of file
+}
diff --git a/erpnext/accounts/doctype/subscription/test_subscription.py b/erpnext/accounts/doctype/subscription/test_subscription.py
index 803e879..785fd04 100644
--- a/erpnext/accounts/doctype/subscription/test_subscription.py
+++ b/erpnext/accounts/doctype/subscription/test_subscription.py
@@ -4,6 +4,7 @@
 import unittest
 
 import frappe
+from frappe.tests.utils import FrappeTestCase
 from frappe.utils.data import (
 	add_days,
 	add_months,
@@ -21,11 +22,15 @@
 test_dependencies = ("UOM", "Item Group", "Item")
 
 
-class TestSubscription(unittest.TestCase):
+class TestSubscription(FrappeTestCase):
 	def setUp(self):
 		make_plans()
 		create_parties()
 		reset_settings()
+		frappe.db.set_single_value("Accounts Settings", "acc_frozen_upto", None)
+
+	def tearDown(self):
+		frappe.db.rollback()
 
 	def test_create_subscription_with_trial_with_correct_period(self):
 		subscription = create_subscription(
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
index cffc878..60274cd 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.py
@@ -99,13 +99,11 @@
 
 			# Add all amount columns
 			for k in list(self.party_total[d.party]):
-				if k not in ["currency", "sales_person"]:
-
-					self.party_total[d.party][k] += d.get(k, 0.0)
+				if isinstance(self.party_total[d.party][k], float):
+					self.party_total[d.party][k] += d.get(k) or 0.0
 
 			# set territory, customer_group, sales person etc
 			self.set_party_details(d)
-			self.party_total[d.party].update({"party_type": d.party_type})
 
 	def init_party_total(self, row):
 		self.party_total.setdefault(
@@ -124,6 +122,7 @@
 					"total_due": 0.0,
 					"future_amount": 0.0,
 					"sales_person": [],
+					"party_type": row.party_type,
 				}
 			),
 		)
@@ -133,13 +132,12 @@
 
 		for key in ("territory", "customer_group", "supplier_group"):
 			if row.get(key):
-				self.party_total[row.party][key] = row.get(key)
-
+				self.party_total[row.party][key] = row.get(key, "")
 		if row.sales_person:
-			self.party_total[row.party].sales_person.append(row.sales_person)
+			self.party_total[row.party].sales_person.append(row.get("sales_person", ""))
 
 		if self.filters.sales_partner:
-			self.party_total[row.party]["default_sales_partner"] = row.get("default_sales_partner")
+			self.party_total[row.party]["default_sales_partner"] = row.get("default_sales_partner", "")
 
 	def get_columns(self):
 		self.columns = []
diff --git a/erpnext/accounts/report/balance_sheet/balance_sheet.js b/erpnext/accounts/report/balance_sheet/balance_sheet.js
index ecc13d7..c2b57f7 100644
--- a/erpnext/accounts/report/balance_sheet/balance_sheet.js
+++ b/erpnext/accounts/report/balance_sheet/balance_sheet.js
@@ -1,25 +1,23 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js", function () {
-	frappe.query_reports["Balance Sheet"] = $.extend(
-		{},
-		erpnext.financial_statements
-	);
+frappe.query_reports["Balance Sheet"] = $.extend(
+	{},
+	erpnext.financial_statements
+);
 
-	erpnext.utils.add_dimensions("Balance Sheet", 10);
+erpnext.utils.add_dimensions("Balance Sheet", 10);
 
-	frappe.query_reports["Balance Sheet"]["filters"].push({
-		fieldname: "accumulated_values",
-		label: __("Accumulated Values"),
-		fieldtype: "Check",
-		default: 1,
-	});
+frappe.query_reports["Balance Sheet"]["filters"].push({
+	fieldname: "accumulated_values",
+	label: __("Accumulated Values"),
+	fieldtype: "Check",
+	default: 1,
+});
 
-	frappe.query_reports["Balance Sheet"]["filters"].push({
-		fieldname: "include_default_book_entries",
-		label: __("Include Default Book Entries"),
-		fieldtype: "Check",
-		default: 1,
-	});
+frappe.query_reports["Balance Sheet"]["filters"].push({
+	fieldname: "include_default_book_entries",
+	label: __("Include Default Book Entries"),
+	fieldtype: "Check",
+	default: 1,
 });
diff --git a/erpnext/accounts/report/cash_flow/cash_flow.js b/erpnext/accounts/report/cash_flow/cash_flow.js
index a2c34c6..6b8ed27 100644
--- a/erpnext/accounts/report/cash_flow/cash_flow.js
+++ b/erpnext/accounts/report/cash_flow/cash_flow.js
@@ -1,24 +1,24 @@
 // Copyright (c) 2013, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Cash Flow"] = $.extend({},
-		erpnext.financial_statements);
+frappe.query_reports["Cash Flow"] = $.extend(
+	{},
+	erpnext.financial_statements
+);
 
-	erpnext.utils.add_dimensions('Cash Flow', 10);
+erpnext.utils.add_dimensions('Cash Flow', 10);
 
-	// The last item in the array is the definition for Presentation Currency
-	// filter. It won't be used in cash flow for now so we pop it. Please take
-	// of this if you are working here.
+// The last item in the array is the definition for Presentation Currency
+// filter. It won't be used in cash flow for now so we pop it. Please take
+// of this if you are working here.
 
-	frappe.query_reports["Cash Flow"]["filters"].splice(8, 1);
+frappe.query_reports["Cash Flow"]["filters"].splice(8, 1);
 
-	frappe.query_reports["Cash Flow"]["filters"].push(
-		{
-			"fieldname": "include_default_book_entries",
-			"label": __("Include Default Book Entries"),
-			"fieldtype": "Check",
-			"default": 1
-		}
-	);
-});
+frappe.query_reports["Cash Flow"]["filters"].push(
+	{
+		"fieldname": "include_default_book_entries",
+		"label": __("Include Default Book Entries"),
+		"fieldtype": "Check",
+		"default": 1
+	}
+);
diff --git a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
index 1afa8d5..590408c 100644
--- a/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
+++ b/erpnext/accounts/report/consolidated_financial_statement/consolidated_financial_statement.js
@@ -2,152 +2,150 @@
 // For license information, please see license.txt
 
 
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Consolidated Financial Statement"] = {
-		"filters": [
-			{
-				"fieldname":"company",
-				"label": __("Company"),
-				"fieldtype": "Link",
-				"options": "Company",
-				"default": frappe.defaults.get_user_default("Company"),
-				"reqd": 1
-			},
-			{
-				"fieldname":"filter_based_on",
-				"label": __("Filter Based On"),
-				"fieldtype": "Select",
-				"options": ["Fiscal Year", "Date Range"],
-				"default": ["Fiscal Year"],
-				"reqd": 1,
-				on_change: function() {
-					let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
-					frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
-					frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
-					frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
-					frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
-
-					frappe.query_report.refresh();
-				}
-			},
-			{
-				"fieldname":"period_start_date",
-				"label": __("Start Date"),
-				"fieldtype": "Date",
-				"hidden": 1,
-				"reqd": 1
-			},
-			{
-				"fieldname":"period_end_date",
-				"label": __("End Date"),
-				"fieldtype": "Date",
-				"hidden": 1,
-				"reqd": 1
-			},
-			{
-				"fieldname":"from_fiscal_year",
-				"label": __("Start Year"),
-				"fieldtype": "Link",
-				"options": "Fiscal Year",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-				"reqd": 1,
-				on_change: () => {
-					frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), function(r) {
-						let year_start_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), "year_start_date");
-						frappe.query_report.set_filter_value({
-							period_start_date: year_start_date
-						});
-					});
-				}
-			},
-			{
-				"fieldname":"to_fiscal_year",
-				"label": __("End Year"),
-				"fieldtype": "Link",
-				"options": "Fiscal Year",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-				"reqd": 1,
-				on_change: () => {
-					frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), function(r) {
-						let year_end_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), "year_end_date");
-						frappe.query_report.set_filter_value({
-							period_end_date: year_end_date
-						});
-					});
-				}
-			},
-			{
-				"fieldname":"finance_book",
-				"label": __("Finance Book"),
-				"fieldtype": "Link",
-				"options": "Finance Book"
-			},
-			{
-				"fieldname":"report",
-				"label": __("Report"),
-				"fieldtype": "Select",
-				"options": ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
-				"default": "Balance Sheet",
-				"reqd": 1
-			},
-			{
-				"fieldname": "presentation_currency",
-				"label": __("Currency"),
-				"fieldtype": "Select",
-				"options": erpnext.get_presentation_currency_list(),
-				"default": frappe.defaults.get_user_default("Currency")
-			},
-			{
-				"fieldname":"accumulated_in_group_company",
-				"label": __("Accumulated Values in Group Company"),
-				"fieldtype": "Check",
-				"default": 0
-			},
-			{
-				"fieldname": "include_default_book_entries",
-				"label": __("Include Default Book Entries"),
-				"fieldtype": "Check",
-				"default": 1
-			},
-			{
-				"fieldname": "show_zero_values",
-				"label": __("Show zero values"),
-				"fieldtype": "Check"
-			}
-		],
-		"formatter": function(value, row, column, data, default_formatter) {
-			if (data && column.fieldname=="account") {
-				value = data.account_name || value;
-
-				column.link_onclick =
-				"erpnext.financial_statements.open_general_ledger(" + JSON.stringify(data) + ")";
-				column.is_tree = true;
-			}
-
-			if (data && data.account && column.apply_currency_formatter) {
-				data.currency = erpnext.get_currency(column.company_name);
-			}
-
-			value = default_formatter(value, row, column, data);
-			if (!data.parent_account) {
-				value = $(`<span>${value}</span>`);
-
-				var $value = $(value).css("font-weight", "bold");
-
-				value = $value.wrap("<p></p>").parent().html();
-			}
-			return value;
+frappe.query_reports["Consolidated Financial Statement"] = {
+	"filters": [
+		{
+			"fieldname":"company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("Company"),
+			"reqd": 1
 		},
-		onload: function() {
-			let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
+		{
+			"fieldname":"filter_based_on",
+			"label": __("Filter Based On"),
+			"fieldtype": "Select",
+			"options": ["Fiscal Year", "Date Range"],
+			"default": ["Fiscal Year"],
+			"reqd": 1,
+			on_change: function() {
+				let filter_based_on = frappe.query_report.get_filter_value('filter_based_on');
+				frappe.query_report.toggle_filter_display('from_fiscal_year', filter_based_on === 'Date Range');
+				frappe.query_report.toggle_filter_display('to_fiscal_year', filter_based_on === 'Date Range');
+				frappe.query_report.toggle_filter_display('period_start_date', filter_based_on === 'Fiscal Year');
+				frappe.query_report.toggle_filter_display('period_end_date', filter_based_on === 'Fiscal Year');
 
-			frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
-				var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
-				frappe.query_report.set_filter_value({
-					period_start_date: fy.year_start_date,
-					period_end_date: fy.year_end_date
+				frappe.query_report.refresh();
+			}
+		},
+		{
+			"fieldname":"period_start_date",
+			"label": __("Start Date"),
+			"fieldtype": "Date",
+			"hidden": 1,
+			"reqd": 1
+		},
+		{
+			"fieldname":"period_end_date",
+			"label": __("End Date"),
+			"fieldtype": "Date",
+			"hidden": 1,
+			"reqd": 1
+		},
+		{
+			"fieldname":"from_fiscal_year",
+			"label": __("Start Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			"reqd": 1,
+			on_change: () => {
+				frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), function(r) {
+					let year_start_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('from_fiscal_year'), "year_start_date");
+					frappe.query_report.set_filter_value({
+						period_start_date: year_start_date
+					});
 				});
-			});
+			}
+		},
+		{
+			"fieldname":"to_fiscal_year",
+			"label": __("End Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			"reqd": 1,
+			on_change: () => {
+				frappe.model.with_doc("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), function(r) {
+					let year_end_date = frappe.model.get_value("Fiscal Year", frappe.query_report.get_filter_value('to_fiscal_year'), "year_end_date");
+					frappe.query_report.set_filter_value({
+						period_end_date: year_end_date
+					});
+				});
+			}
+		},
+		{
+			"fieldname":"finance_book",
+			"label": __("Finance Book"),
+			"fieldtype": "Link",
+			"options": "Finance Book"
+		},
+		{
+			"fieldname":"report",
+			"label": __("Report"),
+			"fieldtype": "Select",
+			"options": ["Profit and Loss Statement", "Balance Sheet", "Cash Flow"],
+			"default": "Balance Sheet",
+			"reqd": 1
+		},
+		{
+			"fieldname": "presentation_currency",
+			"label": __("Currency"),
+			"fieldtype": "Select",
+			"options": erpnext.get_presentation_currency_list(),
+			"default": frappe.defaults.get_user_default("Currency")
+		},
+		{
+			"fieldname":"accumulated_in_group_company",
+			"label": __("Accumulated Values in Group Company"),
+			"fieldtype": "Check",
+			"default": 0
+		},
+		{
+			"fieldname": "include_default_book_entries",
+			"label": __("Include Default Book Entries"),
+			"fieldtype": "Check",
+			"default": 1
+		},
+		{
+			"fieldname": "show_zero_values",
+			"label": __("Show zero values"),
+			"fieldtype": "Check"
 		}
+	],
+	"formatter": function(value, row, column, data, default_formatter) {
+		if (data && column.fieldname=="account") {
+			value = data.account_name || value;
+
+			column.link_onclick =
+				"erpnext.financial_statements.open_general_ledger(" + JSON.stringify(data) + ")";
+			column.is_tree = true;
+		}
+
+		if (data && data.account && column.apply_currency_formatter) {
+			data.currency = erpnext.get_currency(column.company_name);
+		}
+
+		value = default_formatter(value, row, column, data);
+		if (!data.parent_account) {
+			value = $(`<span>${value}</span>`);
+
+			var $value = $(value).css("font-weight", "bold");
+
+			value = $value.wrap("<p></p>").parent().html();
+		}
+		return value;
+	},
+	onload: function() {
+		let fiscal_year = erpnext.utils.get_fiscal_year(frappe.datetime.get_today());
+
+		frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+			var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+			frappe.query_report.set_filter_value({
+				period_start_date: fy.year_start_date,
+				period_end_date: fy.year_end_date
+			});
+		});
 	}
-});
+}
diff --git a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
index 79e5a09..51fa8c8 100644
--- a/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
+++ b/erpnext/accounts/report/dimension_wise_accounts_balance_report/dimension_wise_accounts_balance_report.js
@@ -2,83 +2,81 @@
 // For license information, please see license.txt
 
 
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Dimension-wise Accounts Balance Report"] = {
-		"filters": [
-			{
-				"fieldname": "company",
-				"label": __("Company"),
-				"fieldtype": "Link",
-				"options": "Company",
-				"default": frappe.defaults.get_user_default("Company"),
-				"reqd": 1
-			},
-			{
-				"fieldname": "fiscal_year",
-				"label": __("Fiscal Year"),
-				"fieldtype": "Link",
-				"options": "Fiscal Year",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-				"reqd": 1,
-				"on_change": function(query_report) {
-					var fiscal_year = query_report.get_values().fiscal_year;
-					if (!fiscal_year) {
-						return;
-					}
-					frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
-						var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
-						frappe.query_report.set_filter_value({
-							from_date: fy.year_start_date,
-							to_date: fy.year_end_date
-						});
-					});
+frappe.query_reports["Dimension-wise Accounts Balance Report"] = {
+	"filters": [
+		{
+			"fieldname": "company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("Company"),
+			"reqd": 1
+		},
+		{
+			"fieldname": "fiscal_year",
+			"label": __("Fiscal Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			"reqd": 1,
+			"on_change": function(query_report) {
+				var fiscal_year = query_report.get_values().fiscal_year;
+				if (!fiscal_year) {
+					return;
 				}
-			},
-			{
-				"fieldname": "from_date",
-				"label": __("From Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-				"reqd": 1
-			},
-			{
-				"fieldname": "to_date",
-				"label": __("To Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-				"reqd": 1
-			},
-			{
-				"fieldname": "finance_book",
-				"label": __("Finance Book"),
-				"fieldtype": "Link",
-				"options": "Finance Book",
-			},
-			{
-				"fieldname": "dimension",
-				"label": __("Select Dimension"),
-				"fieldtype": "Select",
-				"default": "Cost Center",
-				"options": get_accounting_dimension_options(),
-				"reqd": 1,
-			},
-		],
-		"formatter": erpnext.financial_statements.formatter,
-		"tree": true,
-		"name_field": "account",
-		"parent_field": "parent_account",
-		"initial_depth": 3
-	}
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+					frappe.query_report.set_filter_value({
+						from_date: fy.year_start_date,
+						to_date: fy.year_end_date
+					});
+				});
+			}
+		},
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+			"reqd": 1
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+			"reqd": 1
+		},
+		{
+			"fieldname": "finance_book",
+			"label": __("Finance Book"),
+			"fieldtype": "Link",
+			"options": "Finance Book",
+		},
+		{
+			"fieldname": "dimension",
+			"label": __("Select Dimension"),
+			"fieldtype": "Select",
+			"default": "Cost Center",
+			"options": get_accounting_dimension_options(),
+			"reqd": 1,
+		},
+	],
+	"formatter": erpnext.financial_statements.formatter,
+	"tree": true,
+	"name_field": "account",
+	"parent_field": "parent_account",
+	"initial_depth": 3
+}
 
-});
 
 function get_accounting_dimension_options() {
 	let options =["Cost Center", "Project"];
 	frappe.db.get_list('Accounting Dimension',
-		{fields:['document_type']}).then((res) => {
-			res.forEach((dimension) => {
-				options.push(dimension.document_type);
-			});
-		});
+			   {fields:['document_type']}).then((res) => {
+				   res.forEach((dimension) => {
+					   options.push(dimension.document_type);
+				   });
+			   });
 	return options
 }
diff --git a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py
index 553c137..099884a 100644
--- a/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py
+++ b/erpnext/accounts/report/general_and_payment_ledger_comparison/general_and_payment_ledger_comparison.py
@@ -133,15 +133,17 @@
 			self.gle_balances = set(val.gle) | self.gle_balances
 			self.ple_balances = set(val.ple) | self.ple_balances
 
-		self.diff1 = self.gle_balances.difference(self.ple_balances)
-		self.diff2 = self.ple_balances.difference(self.gle_balances)
+		self.variation_in_payment_ledger = self.gle_balances.difference(self.ple_balances)
+		self.variation_in_general_ledger = self.ple_balances.difference(self.gle_balances)
 		self.diff = frappe._dict({})
 
-		for x in self.diff1:
+		for x in self.variation_in_payment_ledger:
 			self.diff[(x[0], x[1], x[2], x[3])] = frappe._dict({"gl_balance": x[4]})
 
-		for x in self.diff2:
-			self.diff[(x[0], x[1], x[2], x[3])].update(frappe._dict({"pl_balance": x[4]}))
+		for x in self.variation_in_general_ledger:
+			self.diff.setdefault((x[0], x[1], x[2], x[3]), frappe._dict({"gl_balance": 0.0})).update(
+				frappe._dict({"pl_balance": x[4]})
+			)
 
 	def generate_data(self):
 		self.data = []
diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
index f6b0b8c..40d4259 100644
--- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
+++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.js
@@ -2,20 +2,15 @@
 // For license information, please see license.txt
 
 
-frappe.query_reports["Gross and Net Profit Report"] = {
-	"filters": [
+frappe.query_reports["Gross and Net Profit Report"] = $.extend(
+	{},
+	erpnext.financial_statements
+);
 
-	]
-}
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Gross and Net Profit Report"] = $.extend({},
-		erpnext.financial_statements);
-
-	frappe.query_reports["Gross and Net Profit Report"]["filters"].push(
-		{
-			"fieldname": "accumulated_values",
-			"label": __("Accumulated Values"),
-			"fieldtype": "Check"
-		}
-	);
-});
+frappe.query_reports["Gross and Net Profit Report"]["filters"].push(
+	{
+		"fieldname": "accumulated_values",
+		"label": __("Accumulated Values"),
+		"fieldtype": "Check"
+	}
+);
diff --git a/erpnext/accounts/report/gross_profit/gross_profit.py b/erpnext/accounts/report/gross_profit/gross_profit.py
index 3324a73..38060bb 100644
--- a/erpnext/accounts/report/gross_profit/gross_profit.py
+++ b/erpnext/accounts/report/gross_profit/gross_profit.py
@@ -544,6 +544,8 @@
 						new_row.qty += flt(row.qty)
 						new_row.buying_amount += flt(row.buying_amount, self.currency_precision)
 						new_row.base_amount += flt(row.base_amount, self.currency_precision)
+						if self.filters.get("group_by") == "Sales Person":
+							new_row.allocated_amount += flt(row.allocated_amount, self.currency_precision)
 				new_row = self.set_average_rate(new_row)
 				self.grouped_data.append(new_row)
 
diff --git a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
index 9fe93b9..e5898bf 100644
--- a/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
+++ b/erpnext/accounts/report/profit_and_loss_statement/profit_and_loss_statement.js
@@ -1,18 +1,16 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js", function () {
-	frappe.query_reports["Profit and Loss Statement"] = $.extend(
-		{},
-		erpnext.financial_statements
-	);
+frappe.query_reports["Profit and Loss Statement"] = $.extend(
+	{},
+	erpnext.financial_statements
+);
 
-	erpnext.utils.add_dimensions("Profit and Loss Statement", 10);
+erpnext.utils.add_dimensions("Profit and Loss Statement", 10);
 
-	frappe.query_reports["Profit and Loss Statement"]["filters"].push({
-		fieldname: "accumulated_values",
-		label: __("Accumulated Values"),
-		fieldtype: "Check",
-		default: 1,
-	});
+frappe.query_reports["Profit and Loss Statement"]["filters"].push({
+	fieldname: "accumulated_values",
+	label: __("Accumulated Values"),
+	fieldtype: "Check",
+	default: 1,
 });
diff --git a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
index ebd0ec1..4a3d9bb 100644
--- a/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
+++ b/erpnext/accounts/report/profitability_analysis/profitability_analysis.js
@@ -1,133 +1,131 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Profitability Analysis"] = {
-		"filters": [
-			{
-				"fieldname": "company",
-				"label": __("Company"),
-				"fieldtype": "Link",
-				"options": "Company",
-				"default": frappe.defaults.get_user_default("Company"),
-				"reqd": 1
-			},
-			{
-				"fieldname": "based_on",
-				"label": __("Based On"),
-				"fieldtype": "Select",
-				"options": ["Cost Center", "Project", "Accounting Dimension"],
-				"default": "Cost Center",
-				"reqd": 1,
-				"on_change": function(query_report){
-					let based_on = query_report.get_values().based_on;
-					if(based_on!='Accounting Dimension'){
-						frappe.query_report.set_filter_value({
-							accounting_dimension: ''
-						});
-					}
-				}
-			},
-			{
-				"fieldname": "accounting_dimension",
-				"label": __("Accounting Dimension"),
-				"fieldtype": "Link",
-				"options": "Accounting Dimension",
-				"get_query": () =>{
-					return {
-						filters: {
-							"disabled": 0
-						}
-					}
-				}
-			},
-			{
-				"fieldname": "fiscal_year",
-				"label": __("Fiscal Year"),
-				"fieldtype": "Link",
-				"options": "Fiscal Year",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-				"reqd": 1,
-				"on_change": function(query_report) {
-					var fiscal_year = query_report.get_values().fiscal_year;
-					if (!fiscal_year) {
-						return;
-					}
-					frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
-						var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
-						frappe.query_report.set_filter_value({
-							from_date: fy.year_start_date,
-							to_date: fy.year_end_date
-						});
+frappe.query_reports["Profitability Analysis"] = {
+	"filters": [
+		{
+			"fieldname": "company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("Company"),
+			"reqd": 1
+		},
+		{
+			"fieldname": "based_on",
+			"label": __("Based On"),
+			"fieldtype": "Select",
+			"options": ["Cost Center", "Project", "Accounting Dimension"],
+			"default": "Cost Center",
+			"reqd": 1,
+			"on_change": function(query_report){
+				let based_on = query_report.get_values().based_on;
+				if(based_on!='Accounting Dimension'){
+					frappe.query_report.set_filter_value({
+						accounting_dimension: ''
 					});
 				}
-			},
-			{
-				"fieldname": "from_date",
-				"label": __("From Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			},
-			{
-				"fieldname": "to_date",
-				"label": __("To Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			},
-			{
-				"fieldname": "show_zero_values",
-				"label": __("Show zero values"),
-				"fieldtype": "Check"
 			}
-		],
-		"formatter": function(value, row, column, data, default_formatter) {
-			if (column.fieldname=="account") {
-				value = data.account_name;
-
-				column.link_onclick =
-					"frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" + JSON.stringify(data) + ")";
-				column.is_tree = true;
-			}
-
-			value = default_formatter(value, row, column, data);
-
-			if (!data.parent_account && data.based_on != 'project') {
-				value = $(`<span>${value}</span>`);
-				var $value = $(value).css("font-weight", "bold");
-				if (data.warn_if_negative && data[column.fieldname] < 0) {
-					$value.addClass("text-danger");
+		},
+		{
+			"fieldname": "accounting_dimension",
+			"label": __("Accounting Dimension"),
+			"fieldtype": "Link",
+			"options": "Accounting Dimension",
+			"get_query": () =>{
+				return {
+					filters: {
+						"disabled": 0
+					}
 				}
+			}
+		},
+		{
+			"fieldname": "fiscal_year",
+			"label": __("Fiscal Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			"reqd": 1,
+			"on_change": function(query_report) {
+				var fiscal_year = query_report.get_values().fiscal_year;
+				if (!fiscal_year) {
+					return;
+				}
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+					frappe.query_report.set_filter_value({
+						from_date: fy.year_start_date,
+						to_date: fy.year_end_date
+					});
+				});
+			}
+		},
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+		},
+		{
+			"fieldname": "show_zero_values",
+			"label": __("Show zero values"),
+			"fieldtype": "Check"
+		}
+	],
+	"formatter": function(value, row, column, data, default_formatter) {
+		if (column.fieldname=="account") {
+			value = data.account_name;
 
-				value = $value.wrap("<p></p>").parent().html();
+			column.link_onclick =
+				"frappe.query_reports['Profitability Analysis'].open_profit_and_loss_statement(" + JSON.stringify(data) + ")";
+			column.is_tree = true;
+		}
+
+		value = default_formatter(value, row, column, data);
+
+		if (!data.parent_account && data.based_on != 'project') {
+			value = $(`<span>${value}</span>`);
+			var $value = $(value).css("font-weight", "bold");
+			if (data.warn_if_negative && data[column.fieldname] < 0) {
+				$value.addClass("text-danger");
 			}
 
-			return value;
-		},
-		"open_profit_and_loss_statement": function(data) {
-			if (!data.account) return;
+			value = $value.wrap("<p></p>").parent().html();
+		}
 
-			frappe.route_options = {
-				"company": frappe.query_report.get_filter_value('company'),
-				"from_fiscal_year": data.fiscal_year,
-				"to_fiscal_year": data.fiscal_year
-			};
+		return value;
+	},
+	"open_profit_and_loss_statement": function(data) {
+		if (!data.account) return;
 
-			if(data.based_on == 'Cost Center'){
-				frappe.route_options["cost_center"] = data.account
-			} else {
-				frappe.route_options["project"] = data.account
-			}
+		frappe.route_options = {
+			"company": frappe.query_report.get_filter_value('company'),
+			"from_fiscal_year": data.fiscal_year,
+			"to_fiscal_year": data.fiscal_year
+		};
 
-			frappe.set_route("query-report", "Profit and Loss Statement");
-		},
-		"tree": true,
-		"name_field": "account",
-		"parent_field": "parent_account",
-		"initial_depth": 3
-	}
+		if(data.based_on == 'Cost Center'){
+			frappe.route_options["cost_center"] = data.account
+		} else {
+			frappe.route_options["project"] = data.account
+		}
 
-	erpnext.dimension_filters.forEach((dimension) => {
-		frappe.query_reports["Profitability Analysis"].filters[1].options.push(dimension["document_type"]);
-	});
+		frappe.set_route("query-report", "Profit and Loss Statement");
+	},
+	"tree": true,
+	"name_field": "account",
+	"parent_field": "parent_account",
+	"initial_depth": 3
+}
 
+erpnext.dimension_filters.forEach((dimension) => {
+	frappe.query_reports["Profitability Analysis"].filters[1].options.push(dimension["document_type"]);
 });
+
diff --git a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py
index 91ad3d6..f2ec31c 100644
--- a/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py
+++ b/erpnext/accounts/report/tax_withholding_details/tax_withholding_details.py
@@ -68,7 +68,11 @@
 				tax_amount += entry.credit - entry.debit
 
 			if net_total_map.get(name):
-				total_amount, grand_total, base_total = net_total_map.get(name)
+				if voucher_type == "Journal Entry":
+					# back calcalute total amount from rate and tax_amount
+					total_amount = grand_total = base_total = tax_amount / (rate / 100)
+				else:
+					total_amount, grand_total, base_total = net_total_map.get(name)
 			else:
 				total_amount += entry.credit
 
diff --git a/erpnext/accounts/report/trial_balance/trial_balance.js b/erpnext/accounts/report/trial_balance/trial_balance.js
index c12ab0f..edd40b6 100644
--- a/erpnext/accounts/report/trial_balance/trial_balance.js
+++ b/erpnext/accounts/report/trial_balance/trial_balance.js
@@ -1,118 +1,116 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-frappe.require("assets/erpnext/js/financial_statements.js", function() {
-	frappe.query_reports["Trial Balance"] = {
-		"filters": [
-			{
-				"fieldname": "company",
-				"label": __("Company"),
-				"fieldtype": "Link",
-				"options": "Company",
-				"default": frappe.defaults.get_user_default("Company"),
-				"reqd": 1
-			},
-			{
-				"fieldname": "fiscal_year",
-				"label": __("Fiscal Year"),
-				"fieldtype": "Link",
-				"options": "Fiscal Year",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
-				"reqd": 1,
-				"on_change": function(query_report) {
-					var fiscal_year = query_report.get_values().fiscal_year;
-					if (!fiscal_year) {
-						return;
-					}
-					frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
-						var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
-						frappe.query_report.set_filter_value({
-							from_date: fy.year_start_date,
-							to_date: fy.year_end_date
-						});
+frappe.query_reports["Trial Balance"] = {
+	"filters": [
+		{
+			"fieldname": "company",
+			"label": __("Company"),
+			"fieldtype": "Link",
+			"options": "Company",
+			"default": frappe.defaults.get_user_default("Company"),
+			"reqd": 1
+		},
+		{
+			"fieldname": "fiscal_year",
+			"label": __("Fiscal Year"),
+			"fieldtype": "Link",
+			"options": "Fiscal Year",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today()),
+			"reqd": 1,
+			"on_change": function(query_report) {
+				var fiscal_year = query_report.get_values().fiscal_year;
+				if (!fiscal_year) {
+					return;
+				}
+				frappe.model.with_doc("Fiscal Year", fiscal_year, function(r) {
+					var fy = frappe.model.get_doc("Fiscal Year", fiscal_year);
+					frappe.query_report.set_filter_value({
+						from_date: fy.year_start_date,
+						to_date: fy.year_end_date
 					});
-				}
-			},
-			{
-				"fieldname": "from_date",
-				"label": __("From Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
-			},
-			{
-				"fieldname": "to_date",
-				"label": __("To Date"),
-				"fieldtype": "Date",
-				"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
-			},
-			{
-				"fieldname": "cost_center",
-				"label": __("Cost Center"),
-				"fieldtype": "Link",
-				"options": "Cost Center",
-				"get_query": function() {
-					var company = frappe.query_report.get_filter_value('company');
-					return {
-						"doctype": "Cost Center",
-						"filters": {
-							"company": company,
-						}
+				});
+			}
+		},
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[1],
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": erpnext.utils.get_fiscal_year(frappe.datetime.get_today(), true)[2],
+		},
+		{
+			"fieldname": "cost_center",
+			"label": __("Cost Center"),
+			"fieldtype": "Link",
+			"options": "Cost Center",
+			"get_query": function() {
+				var company = frappe.query_report.get_filter_value('company');
+				return {
+					"doctype": "Cost Center",
+					"filters": {
+						"company": company,
 					}
 				}
-			},
-			{
-				"fieldname": "project",
-				"label": __("Project"),
-				"fieldtype": "Link",
-				"options": "Project"
-			},
-			{
-				"fieldname": "finance_book",
-				"label": __("Finance Book"),
-				"fieldtype": "Link",
-				"options": "Finance Book",
-			},
-			{
-				"fieldname": "presentation_currency",
-				"label": __("Currency"),
-				"fieldtype": "Select",
-				"options": erpnext.get_presentation_currency_list()
-			},
-			{
-				"fieldname": "with_period_closing_entry",
-				"label": __("Period Closing Entry"),
-				"fieldtype": "Check",
-				"default": 1
-			},
-			{
-				"fieldname": "show_zero_values",
-				"label": __("Show zero values"),
-				"fieldtype": "Check"
-			},
-			{
-				"fieldname": "show_unclosed_fy_pl_balances",
-				"label": __("Show unclosed fiscal year's P&L balances"),
-				"fieldtype": "Check"
-			},
-			{
-				"fieldname": "include_default_book_entries",
-				"label": __("Include Default Book Entries"),
-				"fieldtype": "Check",
-				"default": 1
-			},
-			{
-				"fieldname": "show_net_values",
-				"label": __("Show net values in opening and closing columns"),
-				"fieldtype": "Check",
-				"default": 1
 			}
-		],
-		"formatter": erpnext.financial_statements.formatter,
-		"tree": true,
-		"name_field": "account",
-		"parent_field": "parent_account",
-		"initial_depth": 3
-	}
+		},
+		{
+			"fieldname": "project",
+			"label": __("Project"),
+			"fieldtype": "Link",
+			"options": "Project"
+		},
+		{
+			"fieldname": "finance_book",
+			"label": __("Finance Book"),
+			"fieldtype": "Link",
+			"options": "Finance Book",
+		},
+		{
+			"fieldname": "presentation_currency",
+			"label": __("Currency"),
+			"fieldtype": "Select",
+			"options": erpnext.get_presentation_currency_list()
+		},
+		{
+			"fieldname": "with_period_closing_entry",
+			"label": __("Period Closing Entry"),
+			"fieldtype": "Check",
+			"default": 1
+		},
+		{
+			"fieldname": "show_zero_values",
+			"label": __("Show zero values"),
+			"fieldtype": "Check"
+		},
+		{
+			"fieldname": "show_unclosed_fy_pl_balances",
+			"label": __("Show unclosed fiscal year's P&L balances"),
+			"fieldtype": "Check"
+		},
+		{
+			"fieldname": "include_default_book_entries",
+			"label": __("Include Default Book Entries"),
+			"fieldtype": "Check",
+			"default": 1
+		},
+		{
+			"fieldname": "show_net_values",
+			"label": __("Show net values in opening and closing columns"),
+			"fieldtype": "Check",
+			"default": 1
+		}
+	],
+	"formatter": erpnext.financial_statements.formatter,
+	"tree": true,
+	"name_field": "account",
+	"parent_field": "parent_account",
+	"initial_depth": 3
+}
 
-	erpnext.utils.add_dimensions('Trial Balance', 6);
-});
+erpnext.utils.add_dimensions('Trial Balance', 6);
diff --git a/erpnext/assets/doctype/asset/asset.js b/erpnext/assets/doctype/asset/asset.js
index 962292b..f0e4c82 100644
--- a/erpnext/assets/doctype/asset/asset.js
+++ b/erpnext/assets/doctype/asset/asset.js
@@ -148,6 +148,15 @@
 
 		if (frm.doc.docstatus == 0) {
 			frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
+
+			if (frm.doc.is_composite_asset && !frm.doc.capitalized_in) {
+				$('.primary-action').prop('hidden', true);
+				$('.form-message').text('Capitalize this asset to confirm');
+
+				frm.add_custom_button(__("Capitalize Asset"), function() {
+					frm.trigger("create_asset_capitalization");
+				});
+			}
 		}
 	},
 
@@ -169,7 +178,7 @@
 			frm.set_df_property('purchase_invoice', 'read_only', 1);
 			frm.set_df_property('purchase_receipt', 'read_only', 1);
 		}
-		else if (frm.doc.is_existing_asset) {
+		else if (frm.doc.is_existing_asset || frm.doc.is_composite_asset) {
 			frm.toggle_reqd('purchase_receipt', 0);
 			frm.toggle_reqd('purchase_invoice', 0);
 		}
@@ -239,7 +248,7 @@
 
 		datatable.style.setStyle(`.dt-scrollable`, {'font-size': '0.75rem', 'margin-bottom': '1rem', 'margin-left': '0.35rem', 'margin-right': '0.35rem'});
 		datatable.style.setStyle(`.dt-header`, {'margin-left': '0.35rem', 'margin-right': '0.35rem'});
-		datatable.style.setStyle(`.dt-cell--header`, {'color': 'var(--text-muted)'});
+		datatable.style.setStyle(`.dt-cell--header .dt-cell__content`, {'color': 'var(--gray-600)', 'font-size': 'var(--text-sm)'});
 		datatable.style.setStyle(`.dt-cell`, {'color': 'var(--text-color)'});
 		datatable.style.setStyle(`.dt-cell--col-1`, {'text-align': 'center'});
 		datatable.style.setStyle(`.dt-cell--col-2`, {'font-weight': 600});
@@ -328,7 +337,7 @@
 
 
 	item_code: function(frm) {
-		if(frm.doc.item_code && frm.doc.calculate_depreciation) {
+		if(frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
 			frm.trigger('set_finance_book');
 		} else {
 			frm.set_value('finance_books', []);
@@ -340,7 +349,8 @@
 			method: "erpnext.assets.doctype.asset.asset.get_item_details",
 			args: {
 				item_code: frm.doc.item_code,
-				asset_category: frm.doc.asset_category
+				asset_category: frm.doc.asset_category,
+				gross_purchase_amount: frm.doc.gross_purchase_amount
 			},
 			callback: function(r, rt) {
 				if(r.message) {
@@ -352,7 +362,17 @@
 
 	is_existing_asset: function(frm) {
 		frm.trigger("toggle_reference_doc");
-		// frm.toggle_reqd("next_depreciation_date", (!frm.doc.is_existing_asset && frm.doc.calculate_depreciation));
+	},
+
+	is_composite_asset: function(frm) {
+		if(frm.doc.is_composite_asset) {
+			frm.set_value('gross_purchase_amount', 0);
+			frm.set_df_property('gross_purchase_amount', 'read_only', 1);
+		} else {
+			frm.set_df_property('gross_purchase_amount', 'read_only', 0);
+		}
+
+		frm.trigger("toggle_reference_doc");
 	},
 
 	make_sales_invoice: function(frm) {
@@ -402,6 +422,19 @@
 		});
 	},
 
+	create_asset_capitalization: function(frm) {
+		frappe.call({
+			args: {
+				"asset": frm.doc.name,
+			},
+			method: "erpnext.assets.doctype.asset.asset.create_asset_capitalization",
+			callback: function(r) {
+				var doclist = frappe.model.sync(r.message);
+				frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
+			}
+		});
+	},
+
 	split_asset: function(frm) {
 		const title = __('Split Asset');
 
@@ -457,7 +490,7 @@
 
 	calculate_depreciation: function(frm) {
 		frm.toggle_reqd("finance_books", frm.doc.calculate_depreciation);
-		if (frm.doc.item_code && frm.doc.calculate_depreciation ) {
+		if (frm.doc.item_code && frm.doc.calculate_depreciation && frm.doc.gross_purchase_amount) {
 			frm.trigger("set_finance_book");
 		} else {
 			frm.set_value("finance_books", []);
@@ -465,9 +498,11 @@
 	},
 
 	gross_purchase_amount: function(frm) {
-		frm.doc.finance_books.forEach(d => {
-			frm.events.set_depreciation_rate(frm, d);
-		})
+		if (frm.doc.finance_books) {
+			frm.doc.finance_books.forEach(d => {
+				frm.events.set_depreciation_rate(frm, d);
+			})
+		}
 	},
 
 	purchase_receipt: (frm) => {
@@ -546,7 +581,21 @@
 				}
 			});
 		}
-	}
+	},
+
+	set_salvage_value_percentage_or_expected_value_after_useful_life: function(frm, row, salvage_value_percentage_changed, expected_value_after_useful_life_changed) {
+		if (expected_value_after_useful_life_changed) {
+			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
+			const new_salvage_value_percentage = flt((row.expected_value_after_useful_life * 100) / frm.doc.gross_purchase_amount, precision("salvage_value_percentage", row));
+			frappe.model.set_value(row.doctype, row.name, "salvage_value_percentage", new_salvage_value_percentage);
+			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
+		} else if (salvage_value_percentage_changed) {
+			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = true;
+			const new_expected_value_after_useful_life = flt(frm.doc.gross_purchase_amount * (row.salvage_value_percentage / 100), precision('gross_purchase_amount'));
+			frappe.model.set_value(row.doctype, row.name, "expected_value_after_useful_life", new_expected_value_after_useful_life);
+			frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life = false;
+		}
+	},
 });
 
 frappe.ui.form.on('Asset Finance Book', {
@@ -557,9 +606,19 @@
 
 	expected_value_after_useful_life: function(frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
+		if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
+			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, false, true);
+		}
 		frm.events.set_depreciation_rate(frm, row);
 	},
 
+	salvage_value_percentage: function(frm, cdt, cdn) {
+		const row = locals[cdt][cdn];
+		if (!frappe.flags.from_set_salvage_value_percentage_or_expected_value_after_useful_life) {
+			frm.events.set_salvage_value_percentage_or_expected_value_after_useful_life(frm, row, true, false);
+		}
+	},
+
 	frequency_of_depreciation: function(frm, cdt, cdn) {
 		const row = locals[cdt][cdn];
 		frm.events.set_depreciation_rate(frm, row);
diff --git a/erpnext/assets/doctype/asset/asset.json b/erpnext/assets/doctype/asset/asset.json
index befb524..c7d08e2 100644
--- a/erpnext/assets/doctype/asset/asset.json
+++ b/erpnext/assets/doctype/asset/asset.json
@@ -14,6 +14,7 @@
   "asset_owner",
   "asset_owner_company",
   "is_existing_asset",
+  "is_composite_asset",
   "supplier",
   "customer",
   "image",
@@ -72,7 +73,8 @@
   "purchase_receipt_amount",
   "default_finance_book",
   "depr_entry_posting_status",
-  "amended_from"
+  "amended_from",
+  "capitalized_in"
  ],
  "fields": [
   {
@@ -199,7 +201,7 @@
    "fieldtype": "Date",
    "label": "Purchase Date",
    "read_only": 1,
-   "read_only_depends_on": "eval:!doc.is_existing_asset",
+   "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset",
    "reqd": 1
   },
   {
@@ -237,10 +239,12 @@
    "default": "0",
    "fieldname": "calculate_depreciation",
    "fieldtype": "Check",
-   "label": "Calculate Depreciation"
+   "label": "Calculate Depreciation",
+   "read_only_depends_on": "eval:doc.is_composite_asset && !doc.gross_purchase_amount"
   },
   {
    "default": "0",
+   "depends_on": "eval:!doc.is_composite_asset",
    "fieldname": "is_existing_asset",
    "fieldtype": "Check",
    "label": "Is Existing Asset"
@@ -478,7 +482,7 @@
    "fieldname": "asset_quantity",
    "fieldtype": "Int",
    "label": "Asset Quantity",
-   "read_only_depends_on": "eval:!doc.is_existing_asset"
+   "read_only_depends_on": "eval:!doc.is_existing_asset && !doc.is_composite_asset"
   },
   {
    "fieldname": "depr_entry_posting_status",
@@ -507,6 +511,21 @@
    "fieldname": "is_fully_depreciated",
    "fieldtype": "Check",
    "label": "Is Fully Depreciated"
+  },
+  {
+   "default": "0",
+   "depends_on": "eval:!doc.is_existing_asset",
+   "fieldname": "is_composite_asset",
+   "fieldtype": "Check",
+   "label": "Is Composite Asset"
+  },
+  {
+   "fieldname": "capitalized_in",
+   "fieldtype": "Link",
+   "hidden": 1,
+   "label": "Capitalized In",
+   "options": "Asset Capitalization",
+   "read_only": 1
   }
  ],
  "idx": 72,
@@ -545,7 +564,7 @@
    "table_fieldname": "accounts"
   }
  ],
- "modified": "2023-07-28 20:12:44.819616",
+ "modified": "2023-10-03 23:28:26.732269",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset",
diff --git a/erpnext/assets/doctype/asset/asset.py b/erpnext/assets/doctype/asset/asset.py
index 0dbed87..9d35634 100644
--- a/erpnext/assets/doctype/asset/asset.py
+++ b/erpnext/assets/doctype/asset/asset.py
@@ -198,7 +198,9 @@
 			self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
 
 		if self.item_code and not self.get("finance_books"):
-			finance_books = get_item_details(self.item_code, self.asset_category)
+			finance_books = get_item_details(
+				self.item_code, self.asset_category, self.gross_purchase_amount
+			)
 			self.set("finance_books", finance_books)
 
 	def validate_finance_books(self):
@@ -226,7 +228,7 @@
 		if not self.asset_category:
 			self.asset_category = frappe.get_cached_value("Item", self.item_code, "asset_category")
 
-		if not flt(self.gross_purchase_amount):
+		if not flt(self.gross_purchase_amount) and not self.is_composite_asset:
 			frappe.throw(_("Gross Purchase Amount is mandatory"), frappe.MandatoryError)
 
 		if is_cwip_accounting_enabled(self.asset_category):
@@ -767,6 +769,15 @@
 
 
 @frappe.whitelist()
+def create_asset_capitalization(asset):
+	asset_capitalization = frappe.new_doc("Asset Capitalization")
+	asset_capitalization.update(
+		{"target_asset": asset, "capitalization_method": "Choose a WIP composite asset"}
+	)
+	return asset_capitalization
+
+
+@frappe.whitelist()
 def create_asset_value_adjustment(asset, asset_category, company):
 	asset_value_adjustment = frappe.new_doc("Asset Value Adjustment")
 	asset_value_adjustment.update(
@@ -797,7 +808,7 @@
 
 
 @frappe.whitelist()
-def get_item_details(item_code, asset_category):
+def get_item_details(item_code, asset_category, gross_purchase_amount):
 	asset_category_doc = frappe.get_doc("Asset Category", asset_category)
 	books = []
 	for d in asset_category_doc.finance_books:
@@ -807,7 +818,11 @@
 				"depreciation_method": d.depreciation_method,
 				"total_number_of_depreciations": d.total_number_of_depreciations,
 				"frequency_of_depreciation": d.frequency_of_depreciation,
-				"start_date": nowdate(),
+				"daily_depreciation": d.daily_depreciation,
+				"salvage_value_percentage": d.salvage_value_percentage,
+				"expected_value_after_useful_life": flt(gross_purchase_amount)
+				* flt(d.salvage_value_percentage / 100),
+				"depreciation_start_date": d.depreciation_start_date or nowdate(),
 			}
 		)
 
diff --git a/erpnext/assets/doctype/asset/test_asset.py b/erpnext/assets/doctype/asset/test_asset.py
index 39fcb21..88ef69c 100644
--- a/erpnext/assets/doctype/asset/test_asset.py
+++ b/erpnext/assets/doctype/asset/test_asset.py
@@ -1744,6 +1744,7 @@
 			"location": args.location or "Test Location",
 			"asset_owner": args.asset_owner or "Company",
 			"is_existing_asset": args.is_existing_asset or 1,
+			"is_composite_asset": args.is_composite_asset or 0,
 			"asset_quantity": args.get("asset_quantity") or 1,
 			"depr_entry_posting_status": args.depr_entry_posting_status or "",
 		}
diff --git a/erpnext/assets/doctype/asset_activity/asset_activity.json b/erpnext/assets/doctype/asset_activity/asset_activity.json
index 476fb27..00992e2 100644
--- a/erpnext/assets/doctype/asset_activity/asset_activity.json
+++ b/erpnext/assets/doctype/asset_activity/asset_activity.json
@@ -75,13 +75,14 @@
  "in_create": 1,
  "index_web_pages_for_search": 1,
  "links": [],
- "modified": "2023-08-01 11:09:52.584482",
+ "modified": "2023-09-29 15:56:17.608643",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset Activity",
  "owner": "Administrator",
  "permissions": [
   {
+   "delete": 1,
    "email": 1,
    "read": 1,
    "report": 1,
@@ -89,6 +90,7 @@
    "share": 1
   },
   {
+   "delete": 1,
    "email": 1,
    "read": 1,
    "report": 1,
@@ -96,6 +98,7 @@
    "share": 1
   },
   {
+   "delete": 1,
    "email": 1,
    "read": 1,
    "report": 1,
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
index 6d55d77..be78d9e 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.js
@@ -16,9 +16,15 @@
 
 	refresh() {
 		this.show_general_ledger();
+
 		if ((this.frm.doc.stock_items && this.frm.doc.stock_items.length) || !this.frm.doc.target_is_fixed_asset) {
 			this.show_stock_ledger();
 		}
+
+		if (this.frm.doc.stock_items && !this.frm.doc.stock_items.length && this.frm.doc.target_asset && this.frm.doc.capitalization_method === "Choose a WIP composite asset") {
+			this.set_consumed_stock_items_tagged_to_wip_composite_asset(this.frm.doc.target_asset);
+			this.get_target_asset_details();
+		}
 	}
 
 	setup_queries() {
@@ -35,18 +41,9 @@
 		});
 
 		me.frm.set_query("target_asset", function() {
-			var filters = {};
-
-			if (me.frm.doc.target_item_code) {
-				filters['item_code'] = me.frm.doc.target_item_code;
-			}
-
-			filters['status'] = ["not in", ["Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"]];
-			filters['docstatus'] = 1;
-
 			return {
-				filters: filters
-			};
+				filters: {'is_composite_asset': 1, 'docstatus': 0 }
+			}
 		});
 
 		me.frm.set_query("asset", "asset_items", function() {
@@ -128,6 +125,39 @@
 		return this.get_target_item_details();
 	}
 
+	target_asset() {
+		if (this.frm.doc.target_asset && this.frm.doc.capitalization_method === "Choose a WIP composite asset") {
+			this.set_consumed_stock_items_tagged_to_wip_composite_asset(this.frm.doc.target_asset);
+			this.get_target_asset_details();
+		}
+	}
+
+	set_consumed_stock_items_tagged_to_wip_composite_asset(asset) {
+		var me = this;
+
+		if (asset) {
+			return me.frm.call({
+				method: "erpnext.assets.doctype.asset_capitalization.asset_capitalization.get_items_tagged_to_wip_composite_asset",
+				args: {
+					asset: asset,
+				},
+				callback: function (r) {
+					if (!r.exc && r.message) {
+						me.frm.clear_table("stock_items");
+
+						for (let item of r.message) {
+							me.frm.add_child("stock_items", item);
+						}
+
+						refresh_field("stock_items");
+
+						me.calculate_totals();
+					}
+				}
+			});
+		}
+	}
+
 	item_code(doc, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
 		if (cdt === "Asset Capitalization Stock Item") {
@@ -242,6 +272,26 @@
 		}
 	}
 
+	get_target_asset_details() {
+		var me = this;
+
+		if (me.frm.doc.target_asset) {
+			return me.frm.call({
+				method: "erpnext.assets.doctype.asset_capitalization.asset_capitalization.get_target_asset_details",
+				child: me.frm.doc,
+				args: {
+					asset: me.frm.doc.target_asset,
+					company: me.frm.doc.company,
+				},
+				callback: function (r) {
+					if (!r.exc) {
+						me.frm.refresh_fields();
+					}
+				}
+			});
+		}
+	}
+
 	get_consumed_stock_item_details(row) {
 		var me = this;
 
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
index 04b0c4e..9ddc442 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.json
@@ -8,24 +8,25 @@
  "engine": "InnoDB",
  "field_order": [
   "title",
+  "company",
   "naming_series",
   "entry_type",
-  "target_item_code",
-  "target_asset",
   "target_item_name",
   "target_is_fixed_asset",
   "target_has_batch_no",
   "target_has_serial_no",
   "column_break_9",
-  "target_asset_name",
+  "capitalization_method",
+  "target_item_code",
   "target_asset_location",
+  "target_asset",
+  "target_asset_name",
   "target_warehouse",
   "target_qty",
   "target_stock_uom",
   "target_batch_no",
   "target_serial_no",
   "column_break_5",
-  "company",
   "finance_book",
   "posting_date",
   "posting_time",
@@ -57,12 +58,13 @@
    "label": "Title"
   },
   {
+   "depends_on": "eval:(doc.target_item_code && !doc.__islocal && doc.capitalization_method !== 'Choose a WIP composite asset') || ((doc.entry_type=='Capitalization' && doc.capitalization_method=='Create a new composite asset') || doc.entry_type=='Decapitalization')",
    "fieldname": "target_item_code",
    "fieldtype": "Link",
    "in_standard_filter": 1,
    "label": "Target Item Code",
-   "options": "Item",
-   "reqd": 1
+   "mandatory_depends_on": "eval:(doc.entry_type=='Capitalization' && doc.capitalization_method=='Create a new composite asset') || doc.entry_type=='Decapitalization'",
+   "options": "Item"
   },
   {
    "depends_on": "eval:doc.target_item_code && doc.target_item_name != doc.target_item_code",
@@ -86,16 +88,18 @@
    "fieldtype": "Column Break"
   },
   {
+   "depends_on": "eval:(doc.target_asset && !doc.__islocal) || (doc.entry_type=='Capitalization' && doc.capitalization_method=='Choose a WIP composite asset')",
    "fieldname": "target_asset",
    "fieldtype": "Link",
    "in_standard_filter": 1,
    "label": "Target Asset",
+   "mandatory_depends_on": "eval:doc.entry_type=='Capitalization' && doc.capitalization_method=='Choose a WIP composite asset'",
    "no_copy": 1,
    "options": "Asset",
-   "read_only": 1
+   "read_only_depends_on": "eval:(doc.entry_type=='Decapitalization') || (doc.entry_type=='Capitalization' && doc.capitalization_method=='Create a new composite asset')"
   },
   {
-   "depends_on": "eval:doc.entry_type=='Capitalization'",
+   "depends_on": "eval:(doc.target_asset_name && !doc.__islocal) || (doc.target_asset && doc.entry_type=='Capitalization' && doc.capitalization_method=='Choose a WIP composite asset')",
    "fetch_from": "target_asset.asset_name",
    "fieldname": "target_asset_name",
    "fieldtype": "Data",
@@ -186,12 +190,14 @@
   },
   {
    "default": "1",
+   "depends_on": "eval:doc.entry_type=='Decapitalization'",
    "fieldname": "target_qty",
    "fieldtype": "Float",
    "label": "Target Qty",
    "read_only_depends_on": "eval:doc.entry_type=='Capitalization'"
   },
   {
+   "depends_on": "eval:doc.entry_type=='Decapitalization'",
    "fetch_from": "target_item_code.stock_uom",
    "fieldname": "target_stock_uom",
    "fieldtype": "Link",
@@ -331,18 +337,26 @@
    "read_only": 1
   },
   {
-   "depends_on": "eval:doc.entry_type=='Capitalization'",
+   "depends_on": "eval:doc.entry_type=='Capitalization' && doc.capitalization_method=='Create a new composite asset'",
    "fieldname": "target_asset_location",
    "fieldtype": "Link",
    "label": "Target Asset Location",
-   "mandatory_depends_on": "eval:doc.entry_type=='Capitalization'",
+   "mandatory_depends_on": "eval:doc.entry_type=='Capitalization' && doc.capitalization_method=='Create a new composite asset'",
    "options": "Location"
+  },
+  {
+   "depends_on": "eval:doc.entry_type=='Capitalization'",
+   "fieldname": "capitalization_method",
+   "fieldtype": "Select",
+   "label": "Capitalization Method",
+   "mandatory_depends_on": "eval:doc.entry_type=='Capitalization'",
+   "options": "\nCreate a new composite asset\nChoose a WIP composite asset"
   }
  ],
  "index_web_pages_for_search": 1,
  "is_submittable": 1,
  "links": [],
- "modified": "2023-06-22 14:17:07.995120",
+ "modified": "2023-10-03 22:55:59.461456",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset Capitalization",
diff --git a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
index 662e4b9..0d6f6b4 100644
--- a/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/asset_capitalization.py
@@ -53,6 +53,7 @@
 		self.validate_posting_time()
 		self.set_missing_values(for_validate=True)
 		self.validate_target_item()
+		self.validate_target_asset()
 		self.validate_consumed_stock_item()
 		self.validate_consumed_asset_item()
 		self.validate_service_item()
@@ -67,12 +68,12 @@
 
 	def before_submit(self):
 		self.validate_source_mandatory()
-		if self.entry_type == "Capitalization":
-			self.create_target_asset()
+		self.create_target_asset()
 
 	def on_submit(self):
 		self.update_stock_ledger()
 		self.make_gl_entries()
+		self.update_target_asset()
 
 	def on_cancel(self):
 		self.ignore_linked_doctypes = (
@@ -94,6 +95,11 @@
 			if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
 				self.set(k, v)
 
+		target_asset_details = get_target_asset_details(self.target_asset, self.company)
+		for k, v in target_asset_details.items():
+			if self.meta.has_field(k) and (not self.get(k) or k in force_fields):
+				self.set(k, v)
+
 		for d in self.stock_items:
 			args = self.as_dict()
 			args.update(d.as_dict())
@@ -155,6 +161,33 @@
 
 		self.validate_item(target_item)
 
+	def validate_target_asset(self):
+		if self.target_asset:
+			target_asset = self.get_asset_for_validation(self.target_asset)
+
+			if not target_asset.is_composite_asset:
+				frappe.throw(_("Target Asset {0} needs to be composite asset").format(target_asset.name))
+
+			if target_asset.item_code != self.target_item_code:
+				frappe.throw(
+					_("Asset {0} does not belong to Item {1}").format(self.target_asset, self.target_item_code)
+				)
+
+			if target_asset.status in ("Scrapped", "Sold", "Capitalized", "Decapitalized"):
+				frappe.throw(
+					_("Target Asset {0} cannot be {1}").format(target_asset.name, target_asset.status)
+				)
+
+			if target_asset.docstatus == 1:
+				frappe.throw(_("Target Asset {0} cannot be submitted").format(target_asset.name))
+			elif target_asset.docstatus == 2:
+				frappe.throw(_("Target Asset {0} cannot be cancelled").format(target_asset.name))
+
+			if target_asset.company != self.company:
+				frappe.throw(
+					_("Target Asset {0} does not belong to company {1}").format(target_asset.name, self.company)
+				)
+
 	def validate_consumed_stock_item(self):
 		for d in self.stock_items:
 			if d.item_code:
@@ -179,7 +212,23 @@
 					)
 
 				asset = self.get_asset_for_validation(d.asset)
-				self.validate_asset(asset)
+
+				if asset.status in ("Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"):
+					frappe.throw(
+						_("Row #{0}: Consumed Asset {1} cannot be {2}").format(d.idx, asset.name, asset.status)
+					)
+
+				if asset.docstatus == 0:
+					frappe.throw(_("Row #{0}: Consumed Asset {1} cannot be Draft").format(d.idx, asset.name))
+				elif asset.docstatus == 2:
+					frappe.throw(_("Row #{0}: Consumed Asset {1} cannot be cancelled").format(d.idx, asset.name))
+
+				if asset.company != self.company:
+					frappe.throw(
+						_("Row #{0}: Consumed Asset {1} does not belong to company {2}").format(
+							d.idx, asset.name, self.company
+						)
+					)
 
 	def validate_service_item(self):
 		for d in self.service_items:
@@ -214,21 +263,12 @@
 
 	def get_asset_for_validation(self, asset):
 		return frappe.db.get_value(
-			"Asset", asset, ["name", "item_code", "company", "status", "docstatus"], as_dict=1
+			"Asset",
+			asset,
+			["name", "item_code", "company", "status", "docstatus", "is_composite_asset"],
+			as_dict=1,
 		)
 
-	def validate_asset(self, asset):
-		if asset.status in ("Draft", "Scrapped", "Sold", "Capitalized", "Decapitalized"):
-			frappe.throw(_("Asset {0} is {1}").format(asset.name, asset.status))
-
-		if asset.docstatus == 0:
-			frappe.throw(_("Asset {0} is Draft").format(asset.name))
-		if asset.docstatus == 2:
-			frappe.throw(_("Asset {0} is cancelled").format(asset.name))
-
-		if asset.company != self.company:
-			frappe.throw(_("Asset {0} does not belong to company {1}").format(asset.name, self.company))
-
 	@frappe.whitelist()
 	def set_warehouse_details(self):
 		for d in self.get("stock_items"):
@@ -495,16 +535,25 @@
 				)
 
 	def create_target_asset(self):
+		if (
+			self.entry_type != "Capitalization"
+			or self.capitalization_method != "Create a new composite asset"
+		):
+			return
+
 		total_target_asset_value = flt(self.total_value, self.precision("total_value"))
+
 		asset_doc = frappe.new_doc("Asset")
 		asset_doc.company = self.company
 		asset_doc.item_code = self.target_item_code
-		asset_doc.is_existing_asset = 1
+		asset_doc.is_composite_asset = 1
 		asset_doc.location = self.target_asset_location
 		asset_doc.available_for_use_date = self.posting_date
 		asset_doc.purchase_date = self.posting_date
 		asset_doc.gross_purchase_amount = total_target_asset_value
 		asset_doc.purchase_receipt_amount = total_target_asset_value
+		asset_doc.purchase_receipt_amount = total_target_asset_value
+		asset_doc.capitalized_in = self.name
 		asset_doc.flags.ignore_validate = True
 		asset_doc.flags.asset_created_via_asset_capitalization = True
 		asset_doc.insert()
@@ -528,6 +577,28 @@
 			).format(get_link_to_form("Asset", asset_doc.name))
 		)
 
+	def update_target_asset(self):
+		if (
+			self.entry_type != "Capitalization"
+			or self.capitalization_method != "Choose a WIP composite asset"
+		):
+			return
+
+		total_target_asset_value = flt(self.total_value, self.precision("total_value"))
+
+		asset_doc = frappe.get_doc("Asset", self.target_asset)
+		asset_doc.gross_purchase_amount = total_target_asset_value
+		asset_doc.purchase_receipt_amount = total_target_asset_value
+		asset_doc.capitalized_in = self.name
+		asset_doc.flags.ignore_validate = True
+		asset_doc.save()
+
+		frappe.msgprint(
+			_(
+				"Asset {0} has been updated. Please set the depreciation details if any and submit it."
+			).format(get_link_to_form("Asset", asset_doc.name))
+		)
+
 	def restore_consumed_asset_items(self):
 		for item in self.asset_items:
 			asset = frappe.get_doc("Asset", item.asset)
@@ -613,6 +684,33 @@
 
 
 @frappe.whitelist()
+def get_target_asset_details(asset=None, company=None):
+	out = frappe._dict()
+
+	# Get Asset Details
+	asset_details = frappe._dict()
+	if asset:
+		asset_details = frappe.db.get_value("Asset", asset, ["asset_name", "item_code"], as_dict=1)
+		if not asset_details:
+			frappe.throw(_("Asset {0} does not exist").format(asset))
+
+		# Re-set item code from Asset
+		out.target_item_code = asset_details.item_code
+
+	# Set Asset Details
+	out.asset_name = asset_details.asset_name
+
+	if asset_details.item_code:
+		out.target_fixed_asset_account = get_asset_category_account(
+			"fixed_asset_account", item=asset_details.item_code, company=company
+		)
+	else:
+		out.target_fixed_asset_account = None
+
+	return out
+
+
+@frappe.whitelist()
 def get_consumed_stock_item_details(args):
 	if isinstance(args, str):
 		args = json.loads(args)
@@ -760,3 +858,30 @@
 	)
 
 	return out
+
+
+@frappe.whitelist()
+def get_items_tagged_to_wip_composite_asset(asset):
+	fields = [
+		"item_code",
+		"item_name",
+		"batch_no",
+		"serial_no",
+		"stock_qty",
+		"stock_uom",
+		"warehouse",
+		"cost_center",
+		"qty",
+		"valuation_rate",
+		"amount",
+	]
+
+	pi_items = frappe.get_all(
+		"Purchase Invoice Item", filters={"wip_composite_asset": asset}, fields=fields
+	)
+
+	pr_items = frappe.get_all(
+		"Purchase Receipt Item", filters={"wip_composite_asset": asset}, fields=fields
+	)
+
+	return pi_items + pr_items
diff --git a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
index 6e0a685..ac7c90d 100644
--- a/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
+++ b/erpnext/assets/doctype/asset_capitalization/test_asset_capitalization.py
@@ -58,6 +58,7 @@
 		# Create and submit Asset Captitalization
 		asset_capitalization = create_asset_capitalization(
 			entry_type="Capitalization",
+			capitalization_method="Create a new composite asset",
 			target_item_code="Macbook Pro",
 			target_asset_location="Test Location",
 			stock_qty=stock_qty,
@@ -147,6 +148,7 @@
 		# Create and submit Asset Captitalization
 		asset_capitalization = create_asset_capitalization(
 			entry_type="Capitalization",
+			capitalization_method="Create a new composite asset",
 			target_item_code="Macbook Pro",
 			target_asset_location="Test Location",
 			stock_qty=stock_qty,
@@ -211,6 +213,77 @@
 		self.assertFalse(get_actual_gle_dict(asset_capitalization.name))
 		self.assertFalse(get_actual_sle_dict(asset_capitalization.name))
 
+	def test_capitalization_with_wip_composite_asset(self):
+		company = "_Test Company with perpetual inventory"
+		set_depreciation_settings_in_company(company=company)
+
+		stock_rate = 1000
+		stock_qty = 2
+		stock_amount = 2000
+
+		total_amount = 2000
+
+		wip_composite_asset = create_asset(
+			asset_name="Asset Capitalization WIP Composite Asset",
+			is_composite_asset=1,
+			warehouse="Stores - TCP1",
+			company=company,
+		)
+
+		# Create and submit Asset Captitalization
+		asset_capitalization = create_asset_capitalization(
+			entry_type="Capitalization",
+			capitalization_method="Choose a WIP composite asset",
+			target_asset=wip_composite_asset.name,
+			target_asset_location="Test Location",
+			stock_qty=stock_qty,
+			stock_rate=stock_rate,
+			service_expense_account="Expenses Included In Asset Valuation - TCP1",
+			company=company,
+			submit=1,
+		)
+
+		# Test Asset Capitalization values
+		self.assertEqual(asset_capitalization.entry_type, "Capitalization")
+		self.assertEqual(asset_capitalization.capitalization_method, "Choose a WIP composite asset")
+		self.assertEqual(asset_capitalization.target_qty, 1)
+
+		self.assertEqual(asset_capitalization.stock_items[0].valuation_rate, stock_rate)
+		self.assertEqual(asset_capitalization.stock_items[0].amount, stock_amount)
+		self.assertEqual(asset_capitalization.stock_items_total, stock_amount)
+
+		self.assertEqual(asset_capitalization.total_value, total_amount)
+		self.assertEqual(asset_capitalization.target_incoming_rate, total_amount)
+
+		# Test Target Asset values
+		target_asset = frappe.get_doc("Asset", asset_capitalization.target_asset)
+		self.assertEqual(target_asset.gross_purchase_amount, total_amount)
+		self.assertEqual(target_asset.purchase_receipt_amount, total_amount)
+
+		# Test General Ledger Entries
+		expected_gle = {
+			"_Test Fixed Asset - TCP1": 2000,
+			"_Test Warehouse - TCP1": -2000,
+		}
+		actual_gle = get_actual_gle_dict(asset_capitalization.name)
+
+		self.assertEqual(actual_gle, expected_gle)
+
+		# Test Stock Ledger Entries
+		expected_sle = {
+			("Capitalization Source Stock Item", "_Test Warehouse - TCP1"): {
+				"actual_qty": -stock_qty,
+				"stock_value_difference": -stock_amount,
+			}
+		}
+		actual_sle = get_actual_sle_dict(asset_capitalization.name)
+		self.assertEqual(actual_sle, expected_sle)
+
+		# Cancel Asset Capitalization and make test entries and status are reversed
+		asset_capitalization.cancel()
+		self.assertFalse(get_actual_gle_dict(asset_capitalization.name))
+		self.assertFalse(get_actual_sle_dict(asset_capitalization.name))
+
 	def test_decapitalization_with_depreciation(self):
 		# Variables
 		purchase_date = "2020-01-01"
@@ -347,6 +420,7 @@
 	asset_capitalization.update(
 		{
 			"entry_type": args.entry_type or "Capitalization",
+			"capitalization_method": args.capitalization_method or None,
 			"company": company,
 			"posting_date": args.posting_date or now.strftime("%Y-%m-%d"),
 			"posting_time": args.posting_time or now.strftime("%H:%M:%S.%f"),
diff --git a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
index 4121302..2c27dc9 100644
--- a/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
+++ b/erpnext/assets/doctype/asset_finance_book/asset_finance_book.json
@@ -12,6 +12,7 @@
   "column_break_5",
   "frequency_of_depreciation",
   "depreciation_start_date",
+  "salvage_value_percentage",
   "expected_value_after_useful_life",
   "value_after_depreciation",
   "rate_of_depreciation"
@@ -91,12 +92,17 @@
    "fieldname": "daily_depreciation",
    "fieldtype": "Check",
    "label": "Daily Depreciation"
+  },
+  {
+   "fieldname": "salvage_value_percentage",
+   "fieldtype": "Percent",
+   "label": "Salvage Value Percentage"
   }
  ],
  "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-08-10 22:10:36.576199",
+ "modified": "2023-09-29 15:39:52.740594",
  "modified_by": "Administrator",
  "module": "Assets",
  "name": "Asset Finance Book",
diff --git a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json
index f79b622..6b29984 100644
--- a/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json
+++ b/erpnext/buying/doctype/purchase_order_item/purchase_order_item.json
@@ -180,7 +180,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -916,4 +915,4 @@
  "sort_order": "DESC",
  "states": [],
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
index e07f462..82fcfa2 100644
--- a/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
+++ b/erpnext/buying/doctype/request_for_quotation_item/request_for_quotation_item.json
@@ -84,7 +84,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -270,4 +269,4 @@
  "sort_field": "modified",
  "sort_order": "DESC",
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/buying/doctype/supplier/supplier.json b/erpnext/buying/doctype/supplier/supplier.json
index 19972ca..f37db5f 100644
--- a/erpnext/buying/doctype/supplier/supplier.json
+++ b/erpnext/buying/doctype/supplier/supplier.json
@@ -167,8 +167,7 @@
    "label": "Supplier Group",
    "oldfieldname": "supplier_type",
    "oldfieldtype": "Link",
-   "options": "Supplier Group",
-   "reqd": 1
+   "options": "Supplier Group"
   },
   {
    "default": "Company",
@@ -486,7 +485,7 @@
    "link_fieldname": "party"
   }
  ],
- "modified": "2023-09-21 12:24:20.398889",
+ "modified": "2023-09-25 12:48:21.869563",
  "modified_by": "Administrator",
  "module": "Buying",
  "name": "Supplier",
diff --git a/erpnext/buying/doctype/supplier/test_supplier.py b/erpnext/buying/doctype/supplier/test_supplier.py
index ee2ada3..350a25f 100644
--- a/erpnext/buying/doctype/supplier/test_supplier.py
+++ b/erpnext/buying/doctype/supplier/test_supplier.py
@@ -207,11 +207,14 @@
 			"doctype": "Supplier",
 			"supplier_name": args.supplier_name,
 			"default_currency": args.default_currency,
-			"supplier_group": args.supplier_group or "Services",
 			"supplier_type": args.supplier_type or "Company",
 			"tax_withholding_category": args.tax_withholding_category,
 		}
-	).insert()
+	)
+	if not args.without_supplier_group:
+		doc.supplier_group = args.supplier_group or "Services"
+
+	doc.insert()
 
 	return doc
 
diff --git a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json
index 638cde0..8d491fb 100644
--- a/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json
+++ b/erpnext/buying/doctype/supplier_quotation_item/supplier_quotation_item.json
@@ -126,7 +126,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -569,4 +568,4 @@
  "sort_field": "modified",
  "sort_order": "DESC",
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py
index a728290..01ff28d 100644
--- a/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py
+++ b/erpnext/buying/report/supplier_quotation_comparison/supplier_quotation_comparison.py
@@ -35,8 +35,12 @@
 			sq_item.parent,
 			sq_item.item_code,
 			sq_item.qty,
+			sq.currency,
 			sq_item.stock_qty,
 			sq_item.amount,
+			sq_item.base_rate,
+			sq_item.base_amount,
+			sq.price_list_currency,
 			sq_item.uom,
 			sq_item.stock_uom,
 			sq_item.request_for_quotation,
@@ -105,7 +109,11 @@
 			"qty": data.get("qty"),
 			"price": flt(data.get("amount") * exchange_rate, float_precision),
 			"uom": data.get("uom"),
+			"price_list_currency": data.get("price_list_currency"),
+			"currency": data.get("currency"),
 			"stock_uom": data.get("stock_uom"),
+			"base_amount": flt(data.get("base_amount"), float_precision),
+			"base_rate": flt(data.get("base_rate"), float_precision),
 			"request_for_quotation": data.get("request_for_quotation"),
 			"valid_till": data.get("valid_till"),
 			"lead_time_days": data.get("lead_time_days"),
@@ -183,6 +191,8 @@
 
 
 def get_columns(filters):
+	currency = frappe.get_cached_value("Company", filters.get("company"), "default_currency")
+
 	group_by_columns = [
 		{
 			"fieldname": "supplier_name",
@@ -204,10 +214,17 @@
 		{"fieldname": "uom", "label": _("UOM"), "fieldtype": "Link", "options": "UOM", "width": 90},
 		{"fieldname": "qty", "label": _("Quantity"), "fieldtype": "Float", "width": 80},
 		{
+			"fieldname": "currency",
+			"label": _("Currency"),
+			"fieldtype": "Link",
+			"options": "Currency",
+			"width": 110,
+		},
+		{
 			"fieldname": "price",
 			"label": _("Price"),
 			"fieldtype": "Currency",
-			"options": "Company:company:default_currency",
+			"options": "currency",
 			"width": 110,
 		},
 		{
@@ -221,10 +238,24 @@
 			"fieldname": "price_per_unit",
 			"label": _("Price per Unit (Stock UOM)"),
 			"fieldtype": "Currency",
-			"options": "Company:company:default_currency",
+			"options": "currency",
 			"width": 120,
 		},
 		{
+			"fieldname": "base_amount",
+			"label": _("Price ({0})").format(currency),
+			"fieldtype": "Currency",
+			"options": "price_list_currency",
+			"width": 180,
+		},
+		{
+			"fieldname": "base_rate",
+			"label": _("Price Per Unit ({0})").format(currency),
+			"fieldtype": "Currency",
+			"options": "price_list_currency",
+			"width": 180,
+		},
+		{
 			"fieldname": "quotation",
 			"label": _("Supplier Quotation"),
 			"fieldtype": "Link",
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 2beee28..cc5d643 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -13,6 +13,7 @@
 	add_days,
 	add_months,
 	cint,
+	comma_and,
 	flt,
 	fmt_money,
 	formatdate,
@@ -181,6 +182,17 @@
 		self.validate_party_account_currency()
 
 		if self.doctype in ["Purchase Invoice", "Sales Invoice"]:
+			if invalid_advances := [
+				x for x in self.advances if not x.reference_type or not x.reference_name
+			]:
+				frappe.throw(
+					_(
+						"Rows: {0} in {1} section are Invalid. Reference Name should point to a valid Payment Entry or Journal Entry."
+					).format(
+						frappe.bold(comma_and([x.idx for x in invalid_advances])), frappe.bold(_("Advance Payments"))
+					)
+				)
+
 			pos_check_field = "is_pos" if self.doctype == "Sales Invoice" else "is_paid"
 			if cint(self.allocate_advances_automatically) and not cint(self.get(pos_check_field)):
 				self.set_advances()
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 9014662..418a56f 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -288,7 +288,9 @@
 			last_valuation_rate_in_sales_uom = last_valuation_rate * (item.conversion_factor or 1)
 
 			if flt(item.base_net_rate) < flt(last_valuation_rate_in_sales_uom):
-				throw_message(item.idx, item.item_name, last_valuation_rate_in_sales_uom, "valuation rate")
+				throw_message(
+					item.idx, item.item_name, last_valuation_rate_in_sales_uom, "valuation rate (Moving Average)"
+				)
 
 	def get_item_list(self):
 		il = []
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index 62d4c53..96284d6 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -25,6 +25,9 @@
 	def __init__(self, doc: Document):
 		self.doc = doc
 		frappe.flags.round_off_applicable_accounts = []
+		frappe.flags.round_row_wise_tax = frappe.db.get_single_value(
+			"Accounts Settings", "round_row_wise_tax"
+		)
 
 		self._items = self.filter_rows() if self.doc.doctype == "Quotation" else self.doc.get("items")
 
@@ -190,7 +193,9 @@
 
 				item.net_rate = item.rate
 
-				if not item.qty and self.doc.get("is_return"):
+				if (
+					not item.qty and self.doc.get("is_return") and self.doc.get("doctype") != "Purchase Receipt"
+				):
 					item.amount = flt(-1 * item.rate, item.precision("amount"))
 				elif not item.qty and self.doc.get("is_debit_note"):
 					item.amount = flt(item.rate, item.precision("amount"))
@@ -368,6 +373,8 @@
 			for i, tax in enumerate(self.doc.get("taxes")):
 				# tax_amount represents the amount of tax for the current step
 				current_tax_amount = self.get_current_tax_amount(item, tax, item_tax_map)
+				if frappe.flags.round_row_wise_tax:
+					current_tax_amount = flt(current_tax_amount, tax.precision("tax_amount"))
 
 				# Adjust divisional loss to the last item
 				if tax.charge_type == "Actual":
@@ -478,10 +485,19 @@
 		# store tax breakup for each item
 		key = item.item_code or item.item_name
 		item_wise_tax_amount = current_tax_amount * self.doc.conversion_rate
-		if tax.item_wise_tax_detail.get(key):
-			item_wise_tax_amount += tax.item_wise_tax_detail[key][1]
+		if frappe.flags.round_row_wise_tax:
+			item_wise_tax_amount = flt(item_wise_tax_amount, tax.precision("tax_amount"))
+			if tax.item_wise_tax_detail.get(key):
+				item_wise_tax_amount += flt(tax.item_wise_tax_detail[key][1], tax.precision("tax_amount"))
+			tax.item_wise_tax_detail[key] = [
+				tax_rate,
+				flt(item_wise_tax_amount, tax.precision("tax_amount")),
+			]
+		else:
+			if tax.item_wise_tax_detail.get(key):
+				item_wise_tax_amount += tax.item_wise_tax_detail[key][1]
 
-		tax.item_wise_tax_detail[key] = [tax_rate, flt(item_wise_tax_amount)]
+			tax.item_wise_tax_detail[key] = [tax_rate, flt(item_wise_tax_amount)]
 
 	def round_off_totals(self, tax):
 		if tax.account_head in frappe.flags.round_off_applicable_accounts:
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index 105c58d..e897ba4 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -379,7 +379,7 @@
 		}
 	)
 
-	set_address_details(out, lead, "Lead")
+	set_address_details(out, lead, "Lead", company=company)
 
 	taxes_and_charges = set_taxes(
 		None,
diff --git a/erpnext/crm/report/lead_details/lead_details.py b/erpnext/crm/report/lead_details/lead_details.py
index 7b8c43b..98dfbec 100644
--- a/erpnext/crm/report/lead_details/lead_details.py
+++ b/erpnext/crm/report/lead_details/lead_details.py
@@ -4,6 +4,7 @@
 
 import frappe
 from frappe import _
+from frappe.query_builder.functions import Concat_ws, Date
 
 
 def execute(filters=None):
@@ -69,53 +70,41 @@
 
 
 def get_data(filters):
-	return frappe.db.sql(
-		"""
-		SELECT
-			`tabLead`.name,
-			`tabLead`.lead_name,
-			`tabLead`.status,
-			`tabLead`.lead_owner,
-			`tabLead`.territory,
-			`tabLead`.source,
-			`tabLead`.email_id,
-			`tabLead`.mobile_no,
-			`tabLead`.phone,
-			`tabLead`.owner,
-			`tabLead`.company,
-			concat_ws(', ',
-				trim(',' from `tabAddress`.address_line1),
-				trim(',' from tabAddress.address_line2)
-			) AS address,
-			`tabAddress`.state,
-			`tabAddress`.pincode,
-			`tabAddress`.country
-		FROM
-			`tabLead` left join `tabDynamic Link` on (
-			`tabLead`.name = `tabDynamic Link`.link_name and
-			`tabDynamic Link`.parenttype = 'Address')
-			left join `tabAddress` on (
-			`tabAddress`.name=`tabDynamic Link`.parent)
-		WHERE
-			company = %(company)s
-			AND DATE(`tabLead`.creation) BETWEEN %(from_date)s AND %(to_date)s
-			{conditions}
-		ORDER BY
-			`tabLead`.creation asc """.format(
-			conditions=get_conditions(filters)
-		),
-		filters,
-		as_dict=1,
+	lead = frappe.qb.DocType("Lead")
+	address = frappe.qb.DocType("Address")
+	dynamic_link = frappe.qb.DocType("Dynamic Link")
+
+	query = (
+		frappe.qb.from_(lead)
+		.left_join(dynamic_link)
+		.on((lead.name == dynamic_link.link_name) & (dynamic_link.parenttype == "Address"))
+		.left_join(address)
+		.on(address.name == dynamic_link.parent)
+		.select(
+			lead.name,
+			lead.lead_name,
+			lead.status,
+			lead.lead_owner,
+			lead.territory,
+			lead.source,
+			lead.email_id,
+			lead.mobile_no,
+			lead.phone,
+			lead.owner,
+			lead.company,
+			(Concat_ws(", ", address.address_line1, address.address_line2)).as_("address"),
+			address.state,
+			address.pincode,
+			address.country,
+		)
+		.where(lead.company == filters.company)
+		.where(Date(lead.creation).between(filters.from_date, filters.to_date))
 	)
 
-
-def get_conditions(filters):
-	conditions = []
-
 	if filters.get("territory"):
-		conditions.append(" and `tabLead`.territory=%(territory)s")
+		query = query.where(lead.territory == filters.get("territory"))
 
 	if filters.get("status"):
-		conditions.append(" and `tabLead`.status=%(status)s")
+		query = query.where(lead.status == filters.get("status"))
 
-	return " ".join(conditions) if conditions else ""
+	return query.run(as_dict=1)
diff --git a/erpnext/e_commerce/shopping_cart/test_shopping_cart.py b/erpnext/e_commerce/shopping_cart/test_shopping_cart.py
index 951039d..8210f97 100644
--- a/erpnext/e_commerce/shopping_cart/test_shopping_cart.py
+++ b/erpnext/e_commerce/shopping_cart/test_shopping_cart.py
@@ -17,7 +17,6 @@
 	request_for_quotation,
 	update_cart,
 )
-from erpnext.tests.utils import create_test_contact_and_address
 
 
 class TestShoppingCart(unittest.TestCase):
@@ -28,7 +27,6 @@
 
 	def setUp(self):
 		frappe.set_user("Administrator")
-		create_test_contact_and_address()
 		self.enable_shopping_cart()
 		if not frappe.db.exists("Website Item", {"item_code": "_Test Item"}):
 			make_website_item(frappe.get_cached_doc("Item", "_Test Item"))
@@ -46,48 +44,57 @@
 		frappe.db.sql("delete from `tabTax Rule`")
 
 	def test_get_cart_new_user(self):
-		self.login_as_new_user()
-
+		self.login_as_customer(
+			"test_contact_two_customer@example.com", "_Test Contact 2 For _Test Customer"
+		)
+		create_address_and_contact(
+			address_title="_Test Address for Customer 2",
+			first_name="_Test Contact for Customer 2",
+			email="test_contact_two_customer@example.com",
+			customer="_Test Customer 2",
+		)
 		# test if lead is created and quotation with new lead is fetched
-		quotation = _get_cart_quotation()
+		customer = frappe.get_doc("Customer", "_Test Customer 2")
+		quotation = _get_cart_quotation(party=customer)
 		self.assertEqual(quotation.quotation_to, "Customer")
 		self.assertEqual(
 			quotation.contact_person,
-			frappe.db.get_value("Contact", dict(email_id="test_cart_user@example.com")),
+			frappe.db.get_value("Contact", dict(email_id="test_contact_two_customer@example.com")),
 		)
 		self.assertEqual(quotation.contact_email, frappe.session.user)
 
 		return quotation
 
-	def test_get_cart_customer(self):
-		def validate_quotation():
+	def test_get_cart_customer(self, customer="_Test Customer 2"):
+		def validate_quotation(customer_name):
 			# test if quotation with customer is fetched
-			quotation = _get_cart_quotation()
+			party = frappe.get_doc("Customer", customer_name)
+			quotation = _get_cart_quotation(party=party)
 			self.assertEqual(quotation.quotation_to, "Customer")
-			self.assertEqual(quotation.party_name, "_Test Customer")
+			self.assertEqual(quotation.party_name, customer_name)
 			self.assertEqual(quotation.contact_email, frappe.session.user)
 			return quotation
 
-		self.login_as_customer(
-			"test_contact_two_customer@example.com", "_Test Contact 2 For _Test Customer"
-		)
-		validate_quotation()
-
-		self.login_as_customer()
-		quotation = validate_quotation()
-
+		quotation = validate_quotation(customer)
 		return quotation
 
 	def test_add_to_cart(self):
-		self.login_as_customer()
-
+		self.login_as_customer(
+			"test_contact_two_customer@example.com", "_Test Contact 2 For _Test Customer"
+		)
+		create_address_and_contact(
+			address_title="_Test Address for Customer 2",
+			first_name="_Test Contact for Customer 2",
+			email="test_contact_two_customer@example.com",
+			customer="_Test Customer 2",
+		)
 		# clear existing quotations
 		self.clear_existing_quotations()
 
 		# add first item
 		update_cart("_Test Item", 1)
 
-		quotation = self.test_get_cart_customer()
+		quotation = self.test_get_cart_customer("_Test Customer 2")
 
 		self.assertEqual(quotation.get("items")[0].item_code, "_Test Item")
 		self.assertEqual(quotation.get("items")[0].qty, 1)
@@ -95,7 +102,7 @@
 
 		# add second item
 		update_cart("_Test Item 2", 1)
-		quotation = self.test_get_cart_customer()
+		quotation = self.test_get_cart_customer("_Test Customer 2")
 		self.assertEqual(quotation.get("items")[1].item_code, "_Test Item 2")
 		self.assertEqual(quotation.get("items")[1].qty, 1)
 		self.assertEqual(quotation.get("items")[1].amount, 20)
@@ -108,7 +115,7 @@
 
 		# update first item
 		update_cart("_Test Item", 5)
-		quotation = self.test_get_cart_customer()
+		quotation = self.test_get_cart_customer("_Test Customer 2")
 		self.assertEqual(quotation.get("items")[0].item_code, "_Test Item")
 		self.assertEqual(quotation.get("items")[0].qty, 5)
 		self.assertEqual(quotation.get("items")[0].amount, 50)
@@ -121,7 +128,7 @@
 
 		# remove first item
 		update_cart("_Test Item", 0)
-		quotation = self.test_get_cart_customer()
+		quotation = self.test_get_cart_customer("_Test Customer 2")
 
 		self.assertEqual(quotation.get("items")[0].item_code, "_Test Item 2")
 		self.assertEqual(quotation.get("items")[0].qty, 1)
@@ -132,7 +139,17 @@
 	@unittest.skip("Flaky in CI")
 	def test_tax_rule(self):
 		self.create_tax_rule()
-		self.login_as_customer()
+
+		self.login_as_customer(
+			"test_contact_two_customer@example.com", "_Test Contact 2 For _Test Customer"
+		)
+		create_address_and_contact(
+			address_title="_Test Address for Customer 2",
+			first_name="_Test Contact for Customer 2",
+			email="test_contact_two_customer@example.com",
+			customer="_Test Customer 2",
+		)
+
 		quotation = self.create_quotation()
 
 		from erpnext.accounts.party import set_taxes
@@ -320,7 +337,7 @@
 		if frappe.db.exists("User", email):
 			return
 
-		frappe.get_doc(
+		user = frappe.get_doc(
 			{
 				"doctype": "User",
 				"user_type": "Website User",
@@ -330,6 +347,40 @@
 			}
 		).insert(ignore_permissions=True)
 
+		user.add_roles("Customer")
+
+
+def create_address_and_contact(**kwargs):
+	if not frappe.db.get_value("Address", {"address_title": kwargs.get("address_title")}):
+		frappe.get_doc(
+			{
+				"doctype": "Address",
+				"address_title": kwargs.get("address_title"),
+				"address_type": kwargs.get("address_type") or "Office",
+				"address_line1": kwargs.get("address_line1") or "Station Road",
+				"city": kwargs.get("city") or "_Test City",
+				"state": kwargs.get("state") or "Test State",
+				"country": kwargs.get("country") or "India",
+				"links": [
+					{"link_doctype": "Customer", "link_name": kwargs.get("customer") or "_Test Customer"}
+				],
+			}
+		).insert()
+
+	if not frappe.db.get_value("Contact", {"first_name": kwargs.get("first_name")}):
+		contact = frappe.get_doc(
+			{
+				"doctype": "Contact",
+				"first_name": kwargs.get("first_name"),
+				"links": [
+					{"link_doctype": "Customer", "link_name": kwargs.get("customer") or "_Test Customer"}
+				],
+			}
+		)
+		contact.add_email(kwargs.get("email") or "test_contact_customer@example.com", is_primary=True)
+		contact.add_phone(kwargs.get("phone") or "+91 0000000000", is_primary_phone=True)
+		contact.insert()
+
 
 test_dependencies = [
 	"Sales Taxes and Charges Template",
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_mandate/__init__.py b/erpnext/erpnext_integrations/doctype/gocardless_mandate/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_mandate/__init__.py
+++ /dev/null
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.js b/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.js
deleted file mode 100644
index 37f9f7b..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('GoCardless Mandate', {
-});
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.json b/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.json
deleted file mode 100644
index edf652c..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.json
+++ /dev/null
@@ -1,184 +0,0 @@
-{
- "allow_copy": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "autoname": "field:mandate",
- "beta": 0,
- "creation": "2018-02-08 11:33:15.721919",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "disabled",
-   "fieldtype": "Check",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Disabled",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "customer",
-   "fieldtype": "Link",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Customer",
-   "length": 0,
-   "no_copy": 0,
-   "options": "Customer",
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "mandate",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Mandate",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 1,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "gocardless_customer",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "GoCardless Customer",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 1,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  }
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2018-02-11 12:28:03.183095",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "GoCardless Mandate",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  }
- ],
- "quick_entry": 1,
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0
-}
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.py b/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.py
deleted file mode 100644
index bceb3ca..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_mandate/gocardless_mandate.py
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-
-from frappe.model.document import Document
-
-
-class GoCardlessMandate(Document):
-	pass
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_mandate/test_gocardless_mandate.py b/erpnext/erpnext_integrations/doctype/gocardless_mandate/test_gocardless_mandate.py
deleted file mode 100644
index 0c1952a..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_mandate/test_gocardless_mandate.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestGoCardlessMandate(unittest.TestCase):
-	pass
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_settings/__init__.py b/erpnext/erpnext_integrations/doctype/gocardless_settings/__init__.py
deleted file mode 100644
index 65be599..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_settings/__init__.py
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-
-import hashlib
-import hmac
-import json
-
-import frappe
-
-
-@frappe.whitelist(allow_guest=True)
-def webhooks():
-	r = frappe.request
-	if not r:
-		return
-
-	if not authenticate_signature(r):
-		raise frappe.AuthenticationError
-
-	gocardless_events = json.loads(r.get_data()) or []
-	for event in gocardless_events["events"]:
-		set_status(event)
-
-	return 200
-
-
-def set_status(event):
-	resource_type = event.get("resource_type", {})
-
-	if resource_type == "mandates":
-		set_mandate_status(event)
-
-
-def set_mandate_status(event):
-	mandates = []
-	if isinstance(event["links"], (list,)):
-		for link in event["links"]:
-			mandates.append(link["mandate"])
-	else:
-		mandates.append(event["links"]["mandate"])
-
-	if (
-		event["action"] == "pending_customer_approval"
-		or event["action"] == "pending_submission"
-		or event["action"] == "submitted"
-		or event["action"] == "active"
-	):
-		disabled = 0
-	else:
-		disabled = 1
-
-	for mandate in mandates:
-		frappe.db.set_value("GoCardless Mandate", mandate, "disabled", disabled)
-
-
-def authenticate_signature(r):
-	"""Returns True if the received signature matches the generated signature"""
-	received_signature = frappe.get_request_header("Webhook-Signature")
-
-	if not received_signature:
-		return False
-
-	for key in get_webhook_keys():
-		computed_signature = hmac.new(key.encode("utf-8"), r.get_data(), hashlib.sha256).hexdigest()
-		if hmac.compare_digest(str(received_signature), computed_signature):
-			return True
-
-	return False
-
-
-def get_webhook_keys():
-	def _get_webhook_keys():
-		webhook_keys = [
-			d.webhooks_secret
-			for d in frappe.get_all(
-				"GoCardless Settings",
-				fields=["webhooks_secret"],
-			)
-			if d.webhooks_secret
-		]
-
-		return webhook_keys
-
-	return frappe.cache().get_value("gocardless_webhooks_secret", _get_webhook_keys)
-
-
-def clear_cache():
-	frappe.cache().delete_value("gocardless_webhooks_secret")
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.js b/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.js
deleted file mode 100644
index 2411297..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2018, Frappe Technologies and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('GoCardless Settings', {
-	refresh: function(frm) {
-		erpnext.utils.check_payments_app();
-	}
-});
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.json b/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.json
deleted file mode 100644
index cca3653..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.json
+++ /dev/null
@@ -1,211 +0,0 @@
-{
- "allow_copy": 0,
- "allow_guest_to_view": 0,
- "allow_import": 0,
- "allow_rename": 0,
- "autoname": "field:gateway_name",
- "beta": 0,
- "creation": "2018-02-06 16:11:10.028249",
- "custom": 0,
- "docstatus": 0,
- "doctype": "DocType",
- "document_type": "",
- "editable_grid": 1,
- "engine": "InnoDB",
- "fields": [
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "gateway_name",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Payment Gateway Name",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "section_break_2",
-   "fieldtype": "Section Break",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "access_token",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 1,
-   "in_standard_filter": 0,
-   "label": "Access Token",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 1,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "webhooks_secret",
-   "fieldtype": "Data",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Webhooks Secret",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  },
-  {
-   "allow_bulk_edit": 0,
-   "allow_on_submit": 0,
-   "bold": 0,
-   "collapsible": 0,
-   "columns": 0,
-   "fieldname": "use_sandbox",
-   "fieldtype": "Check",
-   "hidden": 0,
-   "ignore_user_permissions": 0,
-   "ignore_xss_filter": 0,
-   "in_filter": 0,
-   "in_global_search": 0,
-   "in_list_view": 0,
-   "in_standard_filter": 0,
-   "label": "Use Sandbox",
-   "length": 0,
-   "no_copy": 0,
-   "permlevel": 0,
-   "precision": "",
-   "print_hide": 0,
-   "print_hide_if_no_value": 0,
-   "read_only": 0,
-   "remember_last_selected_value": 0,
-   "report_hide": 0,
-   "reqd": 0,
-   "search_index": 0,
-   "set_only_once": 0,
-   "unique": 0
-  }
- ],
- "has_web_view": 0,
- "hide_heading": 0,
- "hide_toolbar": 0,
- "idx": 0,
- "image_view": 0,
- "in_create": 0,
- "is_submittable": 0,
- "issingle": 0,
- "istable": 0,
- "max_attachments": 0,
- "modified": "2022-02-12 14:18:47.209114",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "GoCardless Settings",
- "name_case": "",
- "owner": "Administrator",
- "permissions": [
-  {
-   "amend": 0,
-   "apply_user_permissions": 0,
-   "cancel": 0,
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "if_owner": 0,
-   "import": 0,
-   "permlevel": 0,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "set_user_permissions": 0,
-   "share": 1,
-   "submit": 0,
-   "write": 1
-  }
- ],
- "read_only": 0,
- "read_only_onload": 0,
- "show_name_in_global_search": 0,
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1,
- "track_seen": 0
-}
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.py b/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.py
deleted file mode 100644
index 4a29a6a..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_settings/gocardless_settings.py
+++ /dev/null
@@ -1,220 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-
-from urllib.parse import urlencode
-
-import frappe
-import gocardless_pro
-from frappe import _
-from frappe.integrations.utils import create_request_log
-from frappe.model.document import Document
-from frappe.utils import call_hook_method, cint, flt, get_url
-
-from erpnext.utilities import payment_app_import_guard
-
-
-class GoCardlessSettings(Document):
-	supported_currencies = ["EUR", "DKK", "GBP", "SEK", "AUD", "NZD", "CAD", "USD"]
-
-	def validate(self):
-		self.initialize_client()
-
-	def initialize_client(self):
-		self.environment = self.get_environment()
-		try:
-			self.client = gocardless_pro.Client(
-				access_token=self.access_token, environment=self.environment
-			)
-			return self.client
-		except Exception as e:
-			frappe.throw(e)
-
-	def on_update(self):
-		with payment_app_import_guard():
-			from payments.utils import create_payment_gateway
-
-		create_payment_gateway(
-			"GoCardless-" + self.gateway_name, settings="GoCardLess Settings", controller=self.gateway_name
-		)
-		call_hook_method("payment_gateway_enabled", gateway="GoCardless-" + self.gateway_name)
-
-	def on_payment_request_submission(self, data):
-		if data.reference_doctype != "Fees":
-			customer_data = frappe.db.get_value(
-				data.reference_doctype, data.reference_name, ["company", "customer_name"], as_dict=1
-			)
-
-		data = {
-			"amount": flt(data.grand_total, data.precision("grand_total")),
-			"title": customer_data.company.encode("utf-8"),
-			"description": data.subject.encode("utf-8"),
-			"reference_doctype": data.doctype,
-			"reference_docname": data.name,
-			"payer_email": data.email_to or frappe.session.user,
-			"payer_name": customer_data.customer_name,
-			"order_id": data.name,
-			"currency": data.currency,
-		}
-
-		valid_mandate = self.check_mandate_validity(data)
-		if valid_mandate is not None:
-			data.update(valid_mandate)
-
-			self.create_payment_request(data)
-			return False
-		else:
-			return True
-
-	def check_mandate_validity(self, data):
-
-		if frappe.db.exists("GoCardless Mandate", dict(customer=data.get("payer_name"), disabled=0)):
-			registered_mandate = frappe.db.get_value(
-				"GoCardless Mandate", dict(customer=data.get("payer_name"), disabled=0), "mandate"
-			)
-			self.initialize_client()
-			mandate = self.client.mandates.get(registered_mandate)
-
-			if (
-				mandate.status == "pending_customer_approval"
-				or mandate.status == "pending_submission"
-				or mandate.status == "submitted"
-				or mandate.status == "active"
-			):
-				return {"mandate": registered_mandate}
-			else:
-				return None
-		else:
-			return None
-
-	def get_environment(self):
-		if self.use_sandbox:
-			return "sandbox"
-		else:
-			return "live"
-
-	def validate_transaction_currency(self, currency):
-		if currency not in self.supported_currencies:
-			frappe.throw(
-				_(
-					"Please select another payment method. Go Cardless does not support transactions in currency '{0}'"
-				).format(currency)
-			)
-
-	def get_payment_url(self, **kwargs):
-		return get_url("./integrations/gocardless_checkout?{0}".format(urlencode(kwargs)))
-
-	def create_payment_request(self, data):
-		self.data = frappe._dict(data)
-
-		try:
-			self.integration_request = create_request_log(self.data, "Host", "GoCardless")
-			return self.create_charge_on_gocardless()
-
-		except Exception:
-			frappe.log_error("Gocardless payment reqeust failed")
-			return {
-				"redirect_to": frappe.redirect_to_message(
-					_("Server Error"),
-					_(
-						"There seems to be an issue with the server's GoCardless configuration. Don't worry, in case of failure, the amount will get refunded to your account."
-					),
-				),
-				"status": 401,
-			}
-
-	def create_charge_on_gocardless(self):
-		redirect_to = self.data.get("redirect_to") or None
-		redirect_message = self.data.get("redirect_message") or None
-
-		reference_doc = frappe.get_doc(
-			self.data.get("reference_doctype"), self.data.get("reference_docname")
-		)
-		self.initialize_client()
-
-		try:
-			payment = self.client.payments.create(
-				params={
-					"amount": cint(reference_doc.grand_total * 100),
-					"currency": reference_doc.currency,
-					"links": {"mandate": self.data.get("mandate")},
-					"metadata": {
-						"reference_doctype": reference_doc.doctype,
-						"reference_document": reference_doc.name,
-					},
-				},
-				headers={
-					"Idempotency-Key": self.data.get("reference_docname"),
-				},
-			)
-
-			if (
-				payment.status == "pending_submission"
-				or payment.status == "pending_customer_approval"
-				or payment.status == "submitted"
-			):
-				self.integration_request.db_set("status", "Authorized", update_modified=False)
-				self.flags.status_changed_to = "Completed"
-				self.integration_request.db_set("output", payment.status, update_modified=False)
-
-			elif payment.status == "confirmed" or payment.status == "paid_out":
-				self.integration_request.db_set("status", "Completed", update_modified=False)
-				self.flags.status_changed_to = "Completed"
-				self.integration_request.db_set("output", payment.status, update_modified=False)
-
-			elif (
-				payment.status == "cancelled"
-				or payment.status == "customer_approval_denied"
-				or payment.status == "charged_back"
-			):
-				self.integration_request.db_set("status", "Cancelled", update_modified=False)
-				frappe.log_error("Gocardless payment cancelled")
-				self.integration_request.db_set("error", payment.status, update_modified=False)
-			else:
-				self.integration_request.db_set("status", "Failed", update_modified=False)
-				frappe.log_error("Gocardless payment failed")
-				self.integration_request.db_set("error", payment.status, update_modified=False)
-
-		except Exception as e:
-			frappe.log_error("GoCardless Payment Error")
-
-		if self.flags.status_changed_to == "Completed":
-			status = "Completed"
-			if "reference_doctype" in self.data and "reference_docname" in self.data:
-				custom_redirect_to = None
-				try:
-					custom_redirect_to = frappe.get_doc(
-						self.data.get("reference_doctype"), self.data.get("reference_docname")
-					).run_method("on_payment_authorized", self.flags.status_changed_to)
-				except Exception:
-					frappe.log_error("Gocardless redirect failed")
-
-				if custom_redirect_to:
-					redirect_to = custom_redirect_to
-
-			redirect_url = redirect_to
-		else:
-			status = "Error"
-			redirect_url = "payment-failed"
-
-			if redirect_message:
-				redirect_url += "&" + urlencode({"redirect_message": redirect_message})
-
-			redirect_url = get_url(redirect_url)
-
-		return {"redirect_to": redirect_url, "status": status}
-
-
-def get_gateway_controller(doc):
-	payment_request = frappe.get_doc("Payment Request", doc)
-	gateway_controller = frappe.db.get_value(
-		"Payment Gateway", payment_request.payment_gateway, "gateway_controller"
-	)
-	return gateway_controller
-
-
-def gocardless_initialization(doc):
-	gateway_controller = get_gateway_controller(doc)
-	settings = frappe.get_doc("GoCardless Settings", gateway_controller)
-	client = settings.initialize_client()
-	return client
diff --git a/erpnext/erpnext_integrations/doctype/gocardless_settings/test_gocardless_settings.py b/erpnext/erpnext_integrations/doctype/gocardless_settings/test_gocardless_settings.py
deleted file mode 100644
index 379afe5..0000000
--- a/erpnext/erpnext_integrations/doctype/gocardless_settings/test_gocardless_settings.py
+++ /dev/null
@@ -1,8 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies and Contributors
-# See license.txt
-
-import unittest
-
-
-class TestGoCardlessSettings(unittest.TestCase):
-	pass
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/__init__.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/__init__.py
+++ /dev/null
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/account_balance.html b/erpnext/erpnext_integrations/doctype/mpesa_settings/account_balance.html
deleted file mode 100644
index b74a718..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/account_balance.html
+++ /dev/null
@@ -1,28 +0,0 @@
-
-{% if not jQuery.isEmptyObject(data) %}
-<h5 style="margin-top: 20px;"> {{ __("Balance Details") }} </h5>
-<table class="table table-bordered small">
-	<thead>
-		<tr>
-			<th style="width: 20%">{{ __("Account Type") }}</th>
-			<th style="width: 20%" class="text-right">{{ __("Current Balance") }}</th>
-			<th style="width: 20%" class="text-right">{{ __("Available Balance") }}</th>
-			<th style="width: 20%" class="text-right">{{ __("Reserved Balance") }}</th>
-			<th style="width: 20%" class="text-right">{{ __("Uncleared Balance") }}</th>
-		</tr>
-	</thead>
-	<tbody>
-		{% for(const [key, value] of Object.entries(data)) { %}
-			<tr>
-				<td> {%= key %} </td>
-				<td class="text-right"> {%= value["current_balance"] %} </td>
-				<td class="text-right"> {%= value["available_balance"] %} </td>
-				<td class="text-right"> {%= value["reserved_balance"] %} </td>
-				<td class="text-right"> {%= value["uncleared_balance"] %} </td>
-			</tr>
-		{% } %}
-	</tbody>
-</table>
-{% else %}
-<p style="margin-top: 30px;"> Account Balance Information Not Available. </p>
-{% endif %}
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_connector.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_connector.py
deleted file mode 100644
index a577e7f..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_connector.py
+++ /dev/null
@@ -1,149 +0,0 @@
-import base64
-import datetime
-
-import requests
-from requests.auth import HTTPBasicAuth
-
-
-class MpesaConnector:
-	def __init__(
-		self,
-		env="sandbox",
-		app_key=None,
-		app_secret=None,
-		sandbox_url="https://sandbox.safaricom.co.ke",
-		live_url="https://api.safaricom.co.ke",
-	):
-		"""Setup configuration for Mpesa connector and generate new access token."""
-		self.env = env
-		self.app_key = app_key
-		self.app_secret = app_secret
-		if env == "sandbox":
-			self.base_url = sandbox_url
-		else:
-			self.base_url = live_url
-		self.authenticate()
-
-	def authenticate(self):
-		"""
-		This method is used to fetch the access token required by Mpesa.
-
-		Returns:
-		        access_token (str): This token is to be used with the Bearer header for further API calls to Mpesa.
-		"""
-		authenticate_uri = "/oauth/v1/generate?grant_type=client_credentials"
-		authenticate_url = "{0}{1}".format(self.base_url, authenticate_uri)
-		r = requests.get(authenticate_url, auth=HTTPBasicAuth(self.app_key, self.app_secret))
-		self.authentication_token = r.json()["access_token"]
-		return r.json()["access_token"]
-
-	def get_balance(
-		self,
-		initiator=None,
-		security_credential=None,
-		party_a=None,
-		identifier_type=None,
-		remarks=None,
-		queue_timeout_url=None,
-		result_url=None,
-	):
-		"""
-		This method uses Mpesa's Account Balance API to to enquire the balance on a M-Pesa BuyGoods (Till Number).
-
-		Args:
-		        initiator (str): Username used to authenticate the transaction.
-		        security_credential (str): Generate from developer portal.
-		        command_id (str): AccountBalance.
-		        party_a (int): Till number being queried.
-		        identifier_type (int): Type of organization receiving the transaction. (MSISDN/Till Number/Organization short code)
-		        remarks (str): Comments that are sent along with the transaction(maximum 100 characters).
-		        queue_timeout_url (str): The url that handles information of timed out transactions.
-		        result_url (str): The url that receives results from M-Pesa api call.
-
-		Returns:
-		        OriginatorConverstionID (str): The unique request ID for tracking a transaction.
-		        ConversationID (str): The unique request ID returned by mpesa for each request made
-		        ResponseDescription (str): Response Description message
-		"""
-
-		payload = {
-			"Initiator": initiator,
-			"SecurityCredential": security_credential,
-			"CommandID": "AccountBalance",
-			"PartyA": party_a,
-			"IdentifierType": identifier_type,
-			"Remarks": remarks,
-			"QueueTimeOutURL": queue_timeout_url,
-			"ResultURL": result_url,
-		}
-		headers = {
-			"Authorization": "Bearer {0}".format(self.authentication_token),
-			"Content-Type": "application/json",
-		}
-		saf_url = "{0}{1}".format(self.base_url, "/mpesa/accountbalance/v1/query")
-		r = requests.post(saf_url, headers=headers, json=payload)
-		return r.json()
-
-	def stk_push(
-		self,
-		business_shortcode=None,
-		passcode=None,
-		amount=None,
-		callback_url=None,
-		reference_code=None,
-		phone_number=None,
-		description=None,
-	):
-		"""
-		This method uses Mpesa's Express API to initiate online payment on behalf of a customer.
-
-		Args:
-		        business_shortcode (int): The short code of the organization.
-		        passcode (str): Get from developer portal
-		        amount (int): The amount being transacted
-		        callback_url (str): A CallBack URL is a valid secure URL that is used to receive notifications from M-Pesa API.
-		        reference_code(str): Account Reference: This is an Alpha-Numeric parameter that is defined by your system as an Identifier of the transaction for CustomerPayBillOnline transaction type.
-		        phone_number(int): The Mobile Number to receive the STK Pin Prompt.
-		        description(str): This is any additional information/comment that can be sent along with the request from your system. MAX 13 characters
-
-		Success Response:
-		        CustomerMessage(str): Messages that customers can understand.
-		        CheckoutRequestID(str): This is a global unique identifier of the processed checkout transaction request.
-		        ResponseDescription(str): Describes Success or failure
-		        MerchantRequestID(str): This is a global unique Identifier for any submitted payment request.
-		        ResponseCode(int): 0 means success all others are error codes. e.g.404.001.03
-
-		Error Reponse:
-		        requestId(str): This is a unique requestID for the payment request
-		        errorCode(str): This is a predefined code that indicates the reason for request failure.
-		        errorMessage(str): This is a predefined code that indicates the reason for request failure.
-		"""
-
-		time = (
-			str(datetime.datetime.now()).split(".")[0].replace("-", "").replace(" ", "").replace(":", "")
-		)
-		password = "{0}{1}{2}".format(str(business_shortcode), str(passcode), time)
-		encoded = base64.b64encode(bytes(password, encoding="utf8"))
-		payload = {
-			"BusinessShortCode": business_shortcode,
-			"Password": encoded.decode("utf-8"),
-			"Timestamp": time,
-			"Amount": amount,
-			"PartyA": int(phone_number),
-			"PartyB": reference_code,
-			"PhoneNumber": int(phone_number),
-			"CallBackURL": callback_url,
-			"AccountReference": reference_code,
-			"TransactionDesc": description,
-			"TransactionType": "CustomerPayBillOnline"
-			if self.env == "sandbox"
-			else "CustomerBuyGoodsOnline",
-		}
-		headers = {
-			"Authorization": "Bearer {0}".format(self.authentication_token),
-			"Content-Type": "application/json",
-		}
-
-		saf_url = "{0}{1}".format(self.base_url, "/mpesa/stkpush/v1/processrequest")
-		r = requests.post(saf_url, headers=headers, json=payload)
-		return r.json()
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_custom_fields.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_custom_fields.py
deleted file mode 100644
index c92edc5..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_custom_fields.py
+++ /dev/null
@@ -1,56 +0,0 @@
-import frappe
-from frappe.custom.doctype.custom_field.custom_field import create_custom_fields
-
-
-def create_custom_pos_fields():
-	"""Create custom fields corresponding to POS Settings and POS Invoice."""
-	pos_field = {
-		"POS Invoice": [
-			{
-				"fieldname": "request_for_payment",
-				"label": "Request for Payment",
-				"fieldtype": "Button",
-				"hidden": 1,
-				"insert_after": "contact_email",
-			},
-			{
-				"fieldname": "mpesa_receipt_number",
-				"label": "Mpesa Receipt Number",
-				"fieldtype": "Data",
-				"read_only": 1,
-				"insert_after": "company",
-			},
-		]
-	}
-	if not frappe.get_meta("POS Invoice").has_field("request_for_payment"):
-		create_custom_fields(pos_field)
-
-	record_dict = [
-		{
-			"doctype": "POS Field",
-			"fieldname": "contact_mobile",
-			"label": "Mobile No",
-			"fieldtype": "Data",
-			"options": "Phone",
-			"parenttype": "POS Settings",
-			"parent": "POS Settings",
-			"parentfield": "invoice_fields",
-		},
-		{
-			"doctype": "POS Field",
-			"fieldname": "request_for_payment",
-			"label": "Request for Payment",
-			"fieldtype": "Button",
-			"parenttype": "POS Settings",
-			"parent": "POS Settings",
-			"parentfield": "invoice_fields",
-		},
-	]
-	create_pos_settings(record_dict)
-
-
-def create_pos_settings(record_dict):
-	for record in record_dict:
-		if frappe.db.exists("POS Field", {"fieldname": record.get("fieldname")}):
-			continue
-		frappe.get_doc(record).insert()
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.js b/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.js
deleted file mode 100644
index 447d720..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
-// For license information, please see license.txt
-
-frappe.ui.form.on('Mpesa Settings', {
-	onload_post_render: function(frm) {
-		frm.events.setup_account_balance_html(frm);
-	},
-
-	refresh: function(frm) {
-		erpnext.utils.check_payments_app();
-
-		frappe.realtime.on("refresh_mpesa_dashboard", function(){
-			frm.reload_doc();
-			frm.events.setup_account_balance_html(frm);
-		});
-	},
-
-	get_account_balance: function(frm) {
-		if (!frm.doc.initiator_name && !frm.doc.security_credential) {
-			frappe.throw(__("Please set the initiator name and the security credential"));
-		}
-		frappe.call({
-			method: "get_account_balance_info",
-			doc: frm.doc
-		});
-	},
-
-	setup_account_balance_html: function(frm) {
-		if (!frm.doc.account_balance) return;
-		$("div").remove(".form-dashboard-section.custom");
-		frm.dashboard.add_section(
-			frappe.render_template('account_balance', {
-				data: JSON.parse(frm.doc.account_balance)
-			})
-		);
-		frm.dashboard.show();
-	}
-
-});
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.json b/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.json
deleted file mode 100644
index 8f3b427..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.json
+++ /dev/null
@@ -1,152 +0,0 @@
-{
- "actions": [],
- "autoname": "field:payment_gateway_name",
- "creation": "2020-09-10 13:21:27.398088",
- "doctype": "DocType",
- "editable_grid": 1,
- "engine": "InnoDB",
- "field_order": [
-  "payment_gateway_name",
-  "consumer_key",
-  "consumer_secret",
-  "initiator_name",
-  "till_number",
-  "transaction_limit",
-  "sandbox",
-  "column_break_4",
-  "business_shortcode",
-  "online_passkey",
-  "security_credential",
-  "get_account_balance",
-  "account_balance"
- ],
- "fields": [
-  {
-   "fieldname": "payment_gateway_name",
-   "fieldtype": "Data",
-   "label": "Payment Gateway Name",
-   "reqd": 1,
-   "unique": 1
-  },
-  {
-   "fieldname": "consumer_key",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Consumer Key",
-   "reqd": 1
-  },
-  {
-   "fieldname": "consumer_secret",
-   "fieldtype": "Password",
-   "in_list_view": 1,
-   "label": "Consumer Secret",
-   "reqd": 1
-  },
-  {
-   "fieldname": "till_number",
-   "fieldtype": "Data",
-   "in_list_view": 1,
-   "label": "Till Number",
-   "reqd": 1
-  },
-  {
-   "default": "0",
-   "fieldname": "sandbox",
-   "fieldtype": "Check",
-   "label": "Sandbox"
-  },
-  {
-   "fieldname": "column_break_4",
-   "fieldtype": "Column Break"
-  },
-  {
-   "fieldname": "online_passkey",
-   "fieldtype": "Password",
-   "label": " Online PassKey",
-   "reqd": 1
-  },
-  {
-   "fieldname": "initiator_name",
-   "fieldtype": "Data",
-   "label": "Initiator Name"
-  },
-  {
-   "fieldname": "security_credential",
-   "fieldtype": "Small Text",
-   "label": "Security Credential"
-  },
-  {
-   "fieldname": "account_balance",
-   "fieldtype": "Long Text",
-   "hidden": 1,
-   "label": "Account Balance",
-   "read_only": 1
-  },
-  {
-   "fieldname": "get_account_balance",
-   "fieldtype": "Button",
-   "label": "Get Account Balance"
-  },
-  {
-   "depends_on": "eval:(doc.sandbox==0)",
-   "fieldname": "business_shortcode",
-   "fieldtype": "Data",
-   "label": "Business Shortcode",
-   "mandatory_depends_on": "eval:(doc.sandbox==0)"
-  },
-  {
-   "default": "150000",
-   "fieldname": "transaction_limit",
-   "fieldtype": "Float",
-   "label": "Transaction Limit",
-   "non_negative": 1
-  }
- ],
- "links": [],
- "modified": "2021-03-02 17:35:14.084342",
- "modified_by": "Administrator",
- "module": "ERPNext Integrations",
- "name": "Mpesa Settings",
- "owner": "Administrator",
- "permissions": [
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "System Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Accounts Manager",
-   "share": 1,
-   "write": 1
-  },
-  {
-   "create": 1,
-   "delete": 1,
-   "email": 1,
-   "export": 1,
-   "print": 1,
-   "read": 1,
-   "report": 1,
-   "role": "Accounts User",
-   "share": 1,
-   "write": 1
-  }
- ],
- "sort_field": "modified",
- "sort_order": "DESC",
- "track_changes": 1
-}
\ No newline at end of file
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.py
deleted file mode 100644
index a298e11..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/mpesa_settings.py
+++ /dev/null
@@ -1,354 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies and contributors
-# For license information, please see license.txt
-
-
-from json import dumps, loads
-
-import frappe
-from frappe import _
-from frappe.integrations.utils import create_request_log
-from frappe.model.document import Document
-from frappe.utils import call_hook_method, fmt_money, get_request_site_address
-
-from erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_connector import MpesaConnector
-from erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_custom_fields import (
-	create_custom_pos_fields,
-)
-from erpnext.erpnext_integrations.utils import create_mode_of_payment
-from erpnext.utilities import payment_app_import_guard
-
-
-class MpesaSettings(Document):
-	supported_currencies = ["KES"]
-
-	def validate_transaction_currency(self, currency):
-		if currency not in self.supported_currencies:
-			frappe.throw(
-				_(
-					"Please select another payment method. Mpesa does not support transactions in currency '{0}'"
-				).format(currency)
-			)
-
-	def on_update(self):
-		with payment_app_import_guard():
-			from payments.utils import create_payment_gateway
-
-		create_custom_pos_fields()
-		create_payment_gateway(
-			"Mpesa-" + self.payment_gateway_name,
-			settings="Mpesa Settings",
-			controller=self.payment_gateway_name,
-		)
-		call_hook_method(
-			"payment_gateway_enabled", gateway="Mpesa-" + self.payment_gateway_name, payment_channel="Phone"
-		)
-
-		# required to fetch the bank account details from the payment gateway account
-		frappe.db.commit()
-		create_mode_of_payment("Mpesa-" + self.payment_gateway_name, payment_type="Phone")
-
-	def request_for_payment(self, **kwargs):
-		args = frappe._dict(kwargs)
-		request_amounts = self.split_request_amount_according_to_transaction_limit(args)
-
-		for i, amount in enumerate(request_amounts):
-			args.request_amount = amount
-			if frappe.flags.in_test:
-				from erpnext.erpnext_integrations.doctype.mpesa_settings.test_mpesa_settings import (
-					get_payment_request_response_payload,
-				)
-
-				response = frappe._dict(get_payment_request_response_payload(amount))
-			else:
-				response = frappe._dict(generate_stk_push(**args))
-
-			self.handle_api_response("CheckoutRequestID", args, response)
-
-	def split_request_amount_according_to_transaction_limit(self, args):
-		request_amount = args.request_amount
-		if request_amount > self.transaction_limit:
-			# make multiple requests
-			request_amounts = []
-			requests_to_be_made = frappe.utils.ceil(
-				request_amount / self.transaction_limit
-			)  # 480/150 = ceil(3.2) = 4
-			for i in range(requests_to_be_made):
-				amount = self.transaction_limit
-				if i == requests_to_be_made - 1:
-					amount = request_amount - (
-						self.transaction_limit * i
-					)  # for 4th request, 480 - (150 * 3) = 30
-				request_amounts.append(amount)
-		else:
-			request_amounts = [request_amount]
-
-		return request_amounts
-
-	@frappe.whitelist()
-	def get_account_balance_info(self):
-		payload = dict(
-			reference_doctype="Mpesa Settings", reference_docname=self.name, doc_details=vars(self)
-		)
-
-		if frappe.flags.in_test:
-			from erpnext.erpnext_integrations.doctype.mpesa_settings.test_mpesa_settings import (
-				get_test_account_balance_response,
-			)
-
-			response = frappe._dict(get_test_account_balance_response())
-		else:
-			response = frappe._dict(get_account_balance(payload))
-
-		self.handle_api_response("ConversationID", payload, response)
-
-	def handle_api_response(self, global_id, request_dict, response):
-		"""Response received from API calls returns a global identifier for each transaction, this code is returned during the callback."""
-		# check error response
-		if getattr(response, "requestId"):
-			req_name = getattr(response, "requestId")
-			error = response
-		else:
-			# global checkout id used as request name
-			req_name = getattr(response, global_id)
-			error = None
-
-		if not frappe.db.exists("Integration Request", req_name):
-			create_request_log(request_dict, "Host", "Mpesa", req_name, error)
-
-		if error:
-			frappe.throw(_(getattr(response, "errorMessage")), title=_("Transaction Error"))
-
-
-def generate_stk_push(**kwargs):
-	"""Generate stk push by making a API call to the stk push API."""
-	args = frappe._dict(kwargs)
-	try:
-		callback_url = (
-			get_request_site_address(True)
-			+ "/api/method/erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_settings.verify_transaction"
-		)
-
-		mpesa_settings = frappe.get_doc("Mpesa Settings", args.payment_gateway[6:])
-		env = "production" if not mpesa_settings.sandbox else "sandbox"
-		# for sandbox, business shortcode is same as till number
-		business_shortcode = (
-			mpesa_settings.business_shortcode if env == "production" else mpesa_settings.till_number
-		)
-
-		connector = MpesaConnector(
-			env=env,
-			app_key=mpesa_settings.consumer_key,
-			app_secret=mpesa_settings.get_password("consumer_secret"),
-		)
-
-		mobile_number = sanitize_mobile_number(args.sender)
-
-		response = connector.stk_push(
-			business_shortcode=business_shortcode,
-			amount=args.request_amount,
-			passcode=mpesa_settings.get_password("online_passkey"),
-			callback_url=callback_url,
-			reference_code=mpesa_settings.till_number,
-			phone_number=mobile_number,
-			description="POS Payment",
-		)
-
-		return response
-
-	except Exception:
-		frappe.log_error("Mpesa Express Transaction Error")
-		frappe.throw(
-			_("Issue detected with Mpesa configuration, check the error logs for more details"),
-			title=_("Mpesa Express Error"),
-		)
-
-
-def sanitize_mobile_number(number):
-	"""Add country code and strip leading zeroes from the phone number."""
-	return "254" + str(number).lstrip("0")
-
-
-@frappe.whitelist(allow_guest=True)
-def verify_transaction(**kwargs):
-	"""Verify the transaction result received via callback from stk."""
-	transaction_response = frappe._dict(kwargs["Body"]["stkCallback"])
-
-	checkout_id = getattr(transaction_response, "CheckoutRequestID", "")
-	if not isinstance(checkout_id, str):
-		frappe.throw(_("Invalid Checkout Request ID"))
-
-	integration_request = frappe.get_doc("Integration Request", checkout_id)
-	transaction_data = frappe._dict(loads(integration_request.data))
-	total_paid = 0  # for multiple integration request made against a pos invoice
-	success = False  # for reporting successfull callback to point of sale ui
-
-	if transaction_response["ResultCode"] == 0:
-		if integration_request.reference_doctype and integration_request.reference_docname:
-			try:
-				item_response = transaction_response["CallbackMetadata"]["Item"]
-				amount = fetch_param_value(item_response, "Amount", "Name")
-				mpesa_receipt = fetch_param_value(item_response, "MpesaReceiptNumber", "Name")
-				pr = frappe.get_doc(
-					integration_request.reference_doctype, integration_request.reference_docname
-				)
-
-				mpesa_receipts, completed_payments = get_completed_integration_requests_info(
-					integration_request.reference_doctype, integration_request.reference_docname, checkout_id
-				)
-
-				total_paid = amount + sum(completed_payments)
-				mpesa_receipts = ", ".join(mpesa_receipts + [mpesa_receipt])
-
-				if total_paid >= pr.grand_total:
-					pr.run_method("on_payment_authorized", "Completed")
-					success = True
-
-				frappe.db.set_value("POS Invoice", pr.reference_name, "mpesa_receipt_number", mpesa_receipts)
-				integration_request.handle_success(transaction_response)
-			except Exception:
-				integration_request.handle_failure(transaction_response)
-				frappe.log_error("Mpesa: Failed to verify transaction")
-
-	else:
-		integration_request.handle_failure(transaction_response)
-
-	frappe.publish_realtime(
-		event="process_phone_payment",
-		doctype="POS Invoice",
-		docname=transaction_data.payment_reference,
-		user=integration_request.owner,
-		message={
-			"amount": total_paid,
-			"success": success,
-			"failure_message": transaction_response["ResultDesc"]
-			if transaction_response["ResultCode"] != 0
-			else "",
-		},
-	)
-
-
-def get_completed_integration_requests_info(reference_doctype, reference_docname, checkout_id):
-	output_of_other_completed_requests = frappe.get_all(
-		"Integration Request",
-		filters={
-			"name": ["!=", checkout_id],
-			"reference_doctype": reference_doctype,
-			"reference_docname": reference_docname,
-			"status": "Completed",
-		},
-		pluck="output",
-	)
-
-	mpesa_receipts, completed_payments = [], []
-
-	for out in output_of_other_completed_requests:
-		out = frappe._dict(loads(out))
-		item_response = out["CallbackMetadata"]["Item"]
-		completed_amount = fetch_param_value(item_response, "Amount", "Name")
-		completed_mpesa_receipt = fetch_param_value(item_response, "MpesaReceiptNumber", "Name")
-		completed_payments.append(completed_amount)
-		mpesa_receipts.append(completed_mpesa_receipt)
-
-	return mpesa_receipts, completed_payments
-
-
-def get_account_balance(request_payload):
-	"""Call account balance API to send the request to the Mpesa Servers."""
-	try:
-		mpesa_settings = frappe.get_doc("Mpesa Settings", request_payload.get("reference_docname"))
-		env = "production" if not mpesa_settings.sandbox else "sandbox"
-		connector = MpesaConnector(
-			env=env,
-			app_key=mpesa_settings.consumer_key,
-			app_secret=mpesa_settings.get_password("consumer_secret"),
-		)
-
-		callback_url = (
-			get_request_site_address(True)
-			+ "/api/method/erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_settings.process_balance_info"
-		)
-
-		response = connector.get_balance(
-			mpesa_settings.initiator_name,
-			mpesa_settings.security_credential,
-			mpesa_settings.till_number,
-			4,
-			mpesa_settings.name,
-			callback_url,
-			callback_url,
-		)
-		return response
-	except Exception:
-		frappe.log_error("Mpesa: Failed to get account balance")
-		frappe.throw(_("Please check your configuration and try again"), title=_("Error"))
-
-
-@frappe.whitelist(allow_guest=True)
-def process_balance_info(**kwargs):
-	"""Process and store account balance information received via callback from the account balance API call."""
-	account_balance_response = frappe._dict(kwargs["Result"])
-
-	conversation_id = getattr(account_balance_response, "ConversationID", "")
-	if not isinstance(conversation_id, str):
-		frappe.throw(_("Invalid Conversation ID"))
-
-	request = frappe.get_doc("Integration Request", conversation_id)
-
-	if request.status == "Completed":
-		return
-
-	transaction_data = frappe._dict(loads(request.data))
-
-	if account_balance_response["ResultCode"] == 0:
-		try:
-			result_params = account_balance_response["ResultParameters"]["ResultParameter"]
-
-			balance_info = fetch_param_value(result_params, "AccountBalance", "Key")
-			balance_info = format_string_to_json(balance_info)
-
-			ref_doc = frappe.get_doc(transaction_data.reference_doctype, transaction_data.reference_docname)
-			ref_doc.db_set("account_balance", balance_info)
-
-			request.handle_success(account_balance_response)
-			frappe.publish_realtime(
-				"refresh_mpesa_dashboard",
-				doctype="Mpesa Settings",
-				docname=transaction_data.reference_docname,
-				user=transaction_data.owner,
-			)
-		except Exception:
-			request.handle_failure(account_balance_response)
-			frappe.log_error(
-				title="Mpesa Account Balance Processing Error", message=account_balance_response
-			)
-	else:
-		request.handle_failure(account_balance_response)
-
-
-def format_string_to_json(balance_info):
-	"""
-	Format string to json.
-
-	e.g: '''Working Account|KES|481000.00|481000.00|0.00|0.00'''
-	=> {'Working Account': {'current_balance': '481000.00',
-	        'available_balance': '481000.00',
-	        'reserved_balance': '0.00',
-	        'uncleared_balance': '0.00'}}
-	"""
-	balance_dict = frappe._dict()
-	for account_info in balance_info.split("&"):
-		account_info = account_info.split("|")
-		balance_dict[account_info[0]] = dict(
-			current_balance=fmt_money(account_info[2], currency="KES"),
-			available_balance=fmt_money(account_info[3], currency="KES"),
-			reserved_balance=fmt_money(account_info[4], currency="KES"),
-			uncleared_balance=fmt_money(account_info[5], currency="KES"),
-		)
-	return dumps(balance_dict)
-
-
-def fetch_param_value(response, key, key_field):
-	"""Fetch the specified key from list of dictionary. Key is identified via the key field."""
-	for param in response:
-		if param[key_field] == key:
-			return param["Value"]
diff --git a/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py b/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py
deleted file mode 100644
index b526624..0000000
--- a/erpnext/erpnext_integrations/doctype/mpesa_settings/test_mpesa_settings.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and Contributors
-# See license.txt
-
-import unittest
-from json import dumps
-
-import frappe
-
-from erpnext.accounts.doctype.pos_invoice.test_pos_invoice import create_pos_invoice
-from erpnext.erpnext_integrations.doctype.mpesa_settings.mpesa_settings import (
-	process_balance_info,
-	verify_transaction,
-)
-from erpnext.erpnext_integrations.utils import create_mode_of_payment
-
-
-class TestMpesaSettings(unittest.TestCase):
-	def setUp(self):
-		# create payment gateway in setup
-		create_mpesa_settings(payment_gateway_name="_Test")
-		create_mpesa_settings(payment_gateway_name="_Account Balance")
-		create_mpesa_settings(payment_gateway_name="Payment")
-
-	def tearDown(self):
-		frappe.db.sql("delete from `tabMpesa Settings`")
-		frappe.db.sql("delete from `tabIntegration Request` where integration_request_service = 'Mpesa'")
-
-	def test_creation_of_payment_gateway(self):
-		mode_of_payment = create_mode_of_payment("Mpesa-_Test", payment_type="Phone")
-		self.assertTrue(frappe.db.exists("Payment Gateway Account", {"payment_gateway": "Mpesa-_Test"}))
-		self.assertTrue(mode_of_payment.name)
-		self.assertEqual(mode_of_payment.type, "Phone")
-
-	def test_processing_of_account_balance(self):
-		mpesa_doc = create_mpesa_settings(payment_gateway_name="_Account Balance")
-		mpesa_doc.get_account_balance_info()
-
-		callback_response = get_account_balance_callback_payload()
-		process_balance_info(**callback_response)
-		integration_request = frappe.get_doc("Integration Request", "AG_20200927_00007cdb1f9fb6494315")
-
-		# test integration request creation and successful update of the status on receiving callback response
-		self.assertTrue(integration_request)
-		self.assertEqual(integration_request.status, "Completed")
-
-		# test formatting of account balance received as string to json with appropriate currency symbol
-		mpesa_doc.reload()
-		self.assertEqual(
-			mpesa_doc.account_balance,
-			dumps(
-				{
-					"Working Account": {
-						"current_balance": "Sh 481,000.00",
-						"available_balance": "Sh 481,000.00",
-						"reserved_balance": "Sh 0.00",
-						"uncleared_balance": "Sh 0.00",
-					}
-				}
-			),
-		)
-
-		integration_request.delete()
-
-	def test_processing_of_callback_payload(self):
-		mpesa_account = frappe.db.get_value(
-			"Payment Gateway Account", {"payment_gateway": "Mpesa-Payment"}, "payment_account"
-		)
-		frappe.db.set_value("Account", mpesa_account, "account_currency", "KES")
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "KES")
-
-		pos_invoice = create_pos_invoice(do_not_submit=1)
-		pos_invoice.append(
-			"payments", {"mode_of_payment": "Mpesa-Payment", "account": mpesa_account, "amount": 500}
-		)
-		pos_invoice.contact_mobile = "093456543894"
-		pos_invoice.currency = "KES"
-		pos_invoice.save()
-
-		pr = pos_invoice.create_payment_request()
-		# test payment request creation
-		self.assertEqual(pr.payment_gateway, "Mpesa-Payment")
-
-		# submitting payment request creates integration requests with random id
-		integration_req_ids = frappe.get_all(
-			"Integration Request",
-			filters={
-				"reference_doctype": pr.doctype,
-				"reference_docname": pr.name,
-			},
-			pluck="name",
-		)
-
-		callback_response = get_payment_callback_payload(
-			Amount=500, CheckoutRequestID=integration_req_ids[0]
-		)
-		verify_transaction(**callback_response)
-		# test creation of integration request
-		integration_request = frappe.get_doc("Integration Request", integration_req_ids[0])
-
-		# test integration request creation and successful update of the status on receiving callback response
-		self.assertTrue(integration_request)
-		self.assertEqual(integration_request.status, "Completed")
-
-		pos_invoice.reload()
-		integration_request.reload()
-		self.assertEqual(pos_invoice.mpesa_receipt_number, "LGR7OWQX0R")
-		self.assertEqual(integration_request.status, "Completed")
-
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "")
-		integration_request.delete()
-		pr.reload()
-		pr.cancel()
-		pr.delete()
-		pos_invoice.delete()
-
-	def test_processing_of_multiple_callback_payload(self):
-		mpesa_account = frappe.db.get_value(
-			"Payment Gateway Account", {"payment_gateway": "Mpesa-Payment"}, "payment_account"
-		)
-		frappe.db.set_value("Account", mpesa_account, "account_currency", "KES")
-		frappe.db.set_value("Mpesa Settings", "Payment", "transaction_limit", "500")
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "KES")
-
-		pos_invoice = create_pos_invoice(do_not_submit=1)
-		pos_invoice.append(
-			"payments", {"mode_of_payment": "Mpesa-Payment", "account": mpesa_account, "amount": 1000}
-		)
-		pos_invoice.contact_mobile = "093456543894"
-		pos_invoice.currency = "KES"
-		pos_invoice.save()
-
-		pr = pos_invoice.create_payment_request()
-		# test payment request creation
-		self.assertEqual(pr.payment_gateway, "Mpesa-Payment")
-
-		# submitting payment request creates integration requests with random id
-		integration_req_ids = frappe.get_all(
-			"Integration Request",
-			filters={
-				"reference_doctype": pr.doctype,
-				"reference_docname": pr.name,
-			},
-			pluck="name",
-		)
-
-		# create random receipt nos and send it as response to callback handler
-		mpesa_receipt_numbers = [frappe.utils.random_string(5) for d in integration_req_ids]
-
-		integration_requests = []
-		for i in range(len(integration_req_ids)):
-			callback_response = get_payment_callback_payload(
-				Amount=500,
-				CheckoutRequestID=integration_req_ids[i],
-				MpesaReceiptNumber=mpesa_receipt_numbers[i],
-			)
-			# handle response manually
-			verify_transaction(**callback_response)
-			# test completion of integration request
-			integration_request = frappe.get_doc("Integration Request", integration_req_ids[i])
-			self.assertEqual(integration_request.status, "Completed")
-			integration_requests.append(integration_request)
-
-		# check receipt number once all the integration requests are completed
-		pos_invoice.reload()
-		self.assertEqual(pos_invoice.mpesa_receipt_number, ", ".join(mpesa_receipt_numbers))
-
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "")
-		[d.delete() for d in integration_requests]
-		pr.reload()
-		pr.cancel()
-		pr.delete()
-		pos_invoice.delete()
-
-	def test_processing_of_only_one_succes_callback_payload(self):
-		mpesa_account = frappe.db.get_value(
-			"Payment Gateway Account", {"payment_gateway": "Mpesa-Payment"}, "payment_account"
-		)
-		frappe.db.set_value("Account", mpesa_account, "account_currency", "KES")
-		frappe.db.set_value("Mpesa Settings", "Payment", "transaction_limit", "500")
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "KES")
-
-		pos_invoice = create_pos_invoice(do_not_submit=1)
-		pos_invoice.append(
-			"payments", {"mode_of_payment": "Mpesa-Payment", "account": mpesa_account, "amount": 1000}
-		)
-		pos_invoice.contact_mobile = "093456543894"
-		pos_invoice.currency = "KES"
-		pos_invoice.save()
-
-		pr = pos_invoice.create_payment_request()
-		# test payment request creation
-		self.assertEqual(pr.payment_gateway, "Mpesa-Payment")
-
-		# submitting payment request creates integration requests with random id
-		integration_req_ids = frappe.get_all(
-			"Integration Request",
-			filters={
-				"reference_doctype": pr.doctype,
-				"reference_docname": pr.name,
-			},
-			pluck="name",
-		)
-
-		# create random receipt nos and send it as response to callback handler
-		mpesa_receipt_numbers = [frappe.utils.random_string(5) for d in integration_req_ids]
-
-		callback_response = get_payment_callback_payload(
-			Amount=500,
-			CheckoutRequestID=integration_req_ids[0],
-			MpesaReceiptNumber=mpesa_receipt_numbers[0],
-		)
-		# handle response manually
-		verify_transaction(**callback_response)
-		# test completion of integration request
-		integration_request = frappe.get_doc("Integration Request", integration_req_ids[0])
-		self.assertEqual(integration_request.status, "Completed")
-
-		# now one request is completed
-		# second integration request fails
-		# now retrying payment request should make only one integration request again
-		pr = pos_invoice.create_payment_request()
-		new_integration_req_ids = frappe.get_all(
-			"Integration Request",
-			filters={
-				"reference_doctype": pr.doctype,
-				"reference_docname": pr.name,
-				"name": ["not in", integration_req_ids],
-			},
-			pluck="name",
-		)
-
-		self.assertEqual(len(new_integration_req_ids), 1)
-
-		frappe.db.set_value("Customer", "_Test Customer", "default_currency", "")
-		frappe.db.sql("delete from `tabIntegration Request` where integration_request_service = 'Mpesa'")
-		pr.reload()
-		pr.cancel()
-		pr.delete()
-		pos_invoice.delete()
-
-
-def create_mpesa_settings(payment_gateway_name="Express"):
-	if frappe.db.exists("Mpesa Settings", payment_gateway_name):
-		return frappe.get_doc("Mpesa Settings", payment_gateway_name)
-
-	doc = frappe.get_doc(
-		dict(  # nosec
-			doctype="Mpesa Settings",
-			sandbox=1,
-			payment_gateway_name=payment_gateway_name,
-			consumer_key="5sMu9LVI1oS3oBGPJfh3JyvLHwZOdTKn",
-			consumer_secret="VI1oS3oBGPJfh3JyvLHw",
-			online_passkey="LVI1oS3oBGPJfh3JyvLHwZOd",
-			till_number="174379",
-		)
-	)
-
-	doc.insert(ignore_permissions=True)
-	return doc
-
-
-def get_test_account_balance_response():
-	"""Response received after calling the account balance API."""
-	return {
-		"ResultType": 0,
-		"ResultCode": 0,
-		"ResultDesc": "The service request has been accepted successfully.",
-		"OriginatorConversationID": "10816-694520-2",
-		"ConversationID": "AG_20200927_00007cdb1f9fb6494315",
-		"TransactionID": "LGR0000000",
-		"ResultParameters": {
-			"ResultParameter": [
-				{"Key": "ReceiptNo", "Value": "LGR919G2AV"},
-				{"Key": "Conversation ID", "Value": "AG_20170727_00004492b1b6d0078fbe"},
-				{"Key": "FinalisedTime", "Value": 20170727101415},
-				{"Key": "Amount", "Value": 10},
-				{"Key": "TransactionStatus", "Value": "Completed"},
-				{"Key": "ReasonType", "Value": "Salary Payment via API"},
-				{"Key": "TransactionReason"},
-				{"Key": "DebitPartyCharges", "Value": "Fee For B2C Payment|KES|33.00"},
-				{"Key": "DebitAccountType", "Value": "Utility Account"},
-				{"Key": "InitiatedTime", "Value": 20170727101415},
-				{"Key": "Originator Conversation ID", "Value": "19455-773836-1"},
-				{"Key": "CreditPartyName", "Value": "254708374149 - John Doe"},
-				{"Key": "DebitPartyName", "Value": "600134 - Safaricom157"},
-			]
-		},
-		"ReferenceData": {"ReferenceItem": {"Key": "Occasion", "Value": "aaaa"}},
-	}
-
-
-def get_payment_request_response_payload(Amount=500):
-	"""Response received after successfully calling the stk push process request API."""
-
-	CheckoutRequestID = frappe.utils.random_string(10)
-
-	return {
-		"MerchantRequestID": "8071-27184008-1",
-		"CheckoutRequestID": CheckoutRequestID,
-		"ResultCode": 0,
-		"ResultDesc": "The service request is processed successfully.",
-		"CallbackMetadata": {
-			"Item": [
-				{"Name": "Amount", "Value": Amount},
-				{"Name": "MpesaReceiptNumber", "Value": "LGR7OWQX0R"},
-				{"Name": "TransactionDate", "Value": 20201006113336},
-				{"Name": "PhoneNumber", "Value": 254723575670},
-			]
-		},
-	}
-
-
-def get_payment_callback_payload(
-	Amount=500, CheckoutRequestID="ws_CO_061020201133231972", MpesaReceiptNumber="LGR7OWQX0R"
-):
-	"""Response received from the server as callback after calling the stkpush process request API."""
-	return {
-		"Body": {
-			"stkCallback": {
-				"MerchantRequestID": "19465-780693-1",
-				"CheckoutRequestID": CheckoutRequestID,
-				"ResultCode": 0,
-				"ResultDesc": "The service request is processed successfully.",
-				"CallbackMetadata": {
-					"Item": [
-						{"Name": "Amount", "Value": Amount},
-						{"Name": "MpesaReceiptNumber", "Value": MpesaReceiptNumber},
-						{"Name": "Balance"},
-						{"Name": "TransactionDate", "Value": 20170727154800},
-						{"Name": "PhoneNumber", "Value": 254721566839},
-					]
-				},
-			}
-		}
-	}
-
-
-def get_account_balance_callback_payload():
-	"""Response received from the server as callback after calling the account balance API."""
-	return {
-		"Result": {
-			"ResultType": 0,
-			"ResultCode": 0,
-			"ResultDesc": "The service request is processed successfully.",
-			"OriginatorConversationID": "16470-170099139-1",
-			"ConversationID": "AG_20200927_00007cdb1f9fb6494315",
-			"TransactionID": "OIR0000000",
-			"ResultParameters": {
-				"ResultParameter": [
-					{"Key": "AccountBalance", "Value": "Working Account|KES|481000.00|481000.00|0.00|0.00"},
-					{"Key": "BOCompletedTime", "Value": 20200927234123},
-				]
-			},
-			"ReferenceData": {
-				"ReferenceItem": {
-					"Key": "QueueTimeoutURL",
-					"Value": "https://internalsandbox.safaricom.co.ke/mpesa/abresults/v1/submit",
-				}
-			},
-		}
-	}
diff --git a/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py b/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py
index 86e1b31..6716853 100644
--- a/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py
+++ b/erpnext/erpnext_integrations/doctype/plaid_settings/test_plaid_settings.py
@@ -43,40 +43,6 @@
 		add_account_subtype("loan")
 		self.assertEqual(frappe.get_doc("Bank Account Subtype", "loan").name, "loan")
 
-	def test_default_bank_account(self):
-		if not frappe.db.exists("Bank", "Citi"):
-			frappe.get_doc({"doctype": "Bank", "bank_name": "Citi"}).insert()
-
-		bank_accounts = {
-			"account": {
-				"subtype": "checking",
-				"mask": "0000",
-				"type": "depository",
-				"id": "6GbM6RRQgdfy3lAqGz4JUnpmR948WZFg8DjQK",
-				"name": "Plaid Checking",
-			},
-			"account_id": "6GbM6RRQgdfy3lAqGz4JUnpmR948WZFg8DjQK",
-			"link_session_id": "db673d75-61aa-442a-864f-9b3f174f3725",
-			"accounts": [
-				{
-					"type": "depository",
-					"subtype": "checking",
-					"mask": "0000",
-					"id": "6GbM6RRQgdfy3lAqGz4JUnpmR948WZFg8DjQK",
-					"name": "Plaid Checking",
-				}
-			],
-			"institution": {"institution_id": "ins_6", "name": "Citi"},
-		}
-
-		bank = json.dumps(frappe.get_doc("Bank", "Citi").as_dict(), default=json_handler)
-		company = frappe.db.get_single_value("Global Defaults", "default_company")
-		frappe.db.set_value("Company", company, "default_bank_account", None)
-
-		self.assertRaises(
-			frappe.ValidationError, add_bank_accounts, response=bank_accounts, bank=bank, company=company
-		)
-
 	def test_new_transaction(self):
 		if not frappe.db.exists("Bank", "Citi"):
 			frappe.get_doc({"doctype": "Bank", "bank_name": "Citi"}).insert()
diff --git a/erpnext/erpnext_integrations/stripe_integration.py b/erpnext/erpnext_integrations/stripe_integration.py
deleted file mode 100644
index 634e5c2..0000000
--- a/erpnext/erpnext_integrations/stripe_integration.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
-# For license information, please see license.txt
-
-import frappe
-from frappe import _
-from frappe.integrations.utils import create_request_log
-
-from erpnext.utilities import payment_app_import_guard
-
-
-def create_stripe_subscription(gateway_controller, data):
-	with payment_app_import_guard():
-		import stripe
-
-	stripe_settings = frappe.get_doc("Stripe Settings", gateway_controller)
-	stripe_settings.data = frappe._dict(data)
-
-	stripe.api_key = stripe_settings.get_password(fieldname="secret_key", raise_exception=False)
-	stripe.default_http_client = stripe.http_client.RequestsClient()
-
-	try:
-		stripe_settings.integration_request = create_request_log(stripe_settings.data, "Host", "Stripe")
-		stripe_settings.payment_plans = frappe.get_doc(
-			"Payment Request", stripe_settings.data.reference_docname
-		).subscription_plans
-		return create_subscription_on_stripe(stripe_settings)
-
-	except Exception:
-		stripe_settings.log_error("Unable to create Stripe subscription")
-		return {
-			"redirect_to": frappe.redirect_to_message(
-				_("Server Error"),
-				_(
-					"It seems that there is an issue with the server's stripe configuration. In case of failure, the amount will get refunded to your account."
-				),
-			),
-			"status": 401,
-		}
-
-
-def create_subscription_on_stripe(stripe_settings):
-	with payment_app_import_guard():
-		import stripe
-
-	items = []
-	for payment_plan in stripe_settings.payment_plans:
-		plan = frappe.db.get_value("Subscription Plan", payment_plan.plan, "product_price_id")
-		items.append({"price": plan, "quantity": payment_plan.qty})
-
-	try:
-		customer = stripe.Customer.create(
-			source=stripe_settings.data.stripe_token_id,
-			description=stripe_settings.data.payer_name,
-			email=stripe_settings.data.payer_email,
-		)
-
-		subscription = stripe.Subscription.create(customer=customer, items=items)
-
-		if subscription.status == "active":
-			stripe_settings.integration_request.db_set("status", "Completed", update_modified=False)
-			stripe_settings.flags.status_changed_to = "Completed"
-
-		else:
-			stripe_settings.integration_request.db_set("status", "Failed", update_modified=False)
-			frappe.log_error(f"Stripe Subscription ID {subscription.id}: Payment failed")
-	except Exception:
-		stripe_settings.integration_request.db_set("status", "Failed", update_modified=False)
-		stripe_settings.log_error("Unable to create Stripe subscription")
-
-	return stripe_settings.finalize_request()
diff --git a/erpnext/erpnext_integrations/utils.py b/erpnext/erpnext_integrations/utils.py
index 981486e..8984f1b 100644
--- a/erpnext/erpnext_integrations/utils.py
+++ b/erpnext/erpnext_integrations/utils.py
@@ -6,8 +6,6 @@
 import frappe
 from frappe import _
 
-from erpnext import get_default_company
-
 
 def validate_webhooks_request(doctype, hmac_key, secret_key="secret"):
 	def innerfn(fn):
@@ -47,35 +45,6 @@
 	return server_url
 
 
-def create_mode_of_payment(gateway, payment_type="General"):
-	payment_gateway_account = frappe.db.get_value(
-		"Payment Gateway Account", {"payment_gateway": gateway}, ["payment_account"]
-	)
-
-	mode_of_payment = frappe.db.exists("Mode of Payment", gateway)
-	if not mode_of_payment and payment_gateway_account:
-		mode_of_payment = frappe.get_doc(
-			{
-				"doctype": "Mode of Payment",
-				"mode_of_payment": gateway,
-				"enabled": 1,
-				"type": payment_type,
-				"accounts": [
-					{
-						"doctype": "Mode of Payment Account",
-						"company": get_default_company(),
-						"default_account": payment_gateway_account,
-					}
-				],
-			}
-		)
-		mode_of_payment.insert(ignore_permissions=True)
-
-		return mode_of_payment
-	elif mode_of_payment:
-		return frappe.get_doc("Mode of Payment", mode_of_payment)
-
-
 def get_tracking_url(carrier, tracking_number):
 	# Return the formatted Tracking URL.
 	tracking_url = ""
diff --git a/erpnext/manufacturing/doctype/production_plan/production_plan.py b/erpnext/manufacturing/doctype/production_plan/production_plan.py
index fabdafc..ddd9375 100644
--- a/erpnext/manufacturing/doctype/production_plan/production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/production_plan.py
@@ -1617,18 +1617,25 @@
 	table = frappe.qb.DocType("Production Plan")
 	child = frappe.qb.DocType("Material Request Plan Item")
 
+	non_completed_production_plans = get_non_completed_production_plans()
+
 	query = (
 		frappe.qb.from_(table)
 		.inner_join(child)
 		.on(table.name == child.parent)
-		.select(Sum(child.quantity * IfNull(child.conversion_factor, 1.0)))
+		.select(Sum(child.required_bom_qty))
 		.where(
 			(table.docstatus == 1)
 			& (child.item_code == item_code)
 			& (child.warehouse == warehouse)
 			& (table.status.notin(["Completed", "Closed"]))
 		)
-	).run()
+	)
+
+	if non_completed_production_plans:
+		query = query.where(table.name.isin(non_completed_production_plans))
+
+	query = query.run()
 
 	if not query:
 		return 0.0
@@ -1636,7 +1643,9 @@
 	reserved_qty_for_production_plan = flt(query[0][0])
 
 	reserved_qty_for_production = flt(
-		get_reserved_qty_for_production(item_code, warehouse, check_production_plan=True)
+		get_reserved_qty_for_production(
+			item_code, warehouse, non_completed_production_plans, check_production_plan=True
+		)
 	)
 
 	if reserved_qty_for_production > reserved_qty_for_production_plan:
@@ -1645,6 +1654,25 @@
 	return reserved_qty_for_production_plan - reserved_qty_for_production
 
 
+def get_non_completed_production_plans():
+	table = frappe.qb.DocType("Production Plan")
+	child = frappe.qb.DocType("Production Plan Item")
+
+	query = (
+		frappe.qb.from_(table)
+		.inner_join(child)
+		.on(table.name == child.parent)
+		.select(table.name)
+		.where(
+			(table.docstatus == 1)
+			& (table.status.notin(["Completed", "Closed"]))
+			& (child.planned_qty > child.ordered_qty)
+		)
+	).run(as_dict=True)
+
+	return list(set([d.name for d in query]))
+
+
 def get_raw_materials_of_sub_assembly_items(
 	item_details, company, bom_no, include_non_stock_items, sub_assembly_items, planned_qty=1
 ):
diff --git a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
index 5d54c41..6ab9232 100644
--- a/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
+++ b/erpnext/manufacturing/doctype/production_plan/test_production_plan.py
@@ -7,6 +7,7 @@
 from erpnext.controllers.item_variant import create_variant
 from erpnext.manufacturing.doctype.production_plan.production_plan import (
 	get_items_for_material_requests,
+	get_non_completed_production_plans,
 	get_sales_orders,
 	get_warehouse_list,
 )
@@ -1103,6 +1104,49 @@
 
 			self.assertEqual(after_qty, before_qty)
 
+	def test_resered_qty_for_production_plan_for_less_rm_qty(self):
+		from erpnext.stock.utils import get_or_make_bin
+
+		bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
+		before_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
+
+		pln = create_production_plan(item_code="Test Production Item 1", planned_qty=10)
+
+		bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
+		after_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
+
+		self.assertEqual(after_qty - before_qty, 10)
+
+		pln.make_work_order()
+
+		plans = []
+		for row in frappe.get_all("Work Order", filters={"production_plan": pln.name}, fields=["name"]):
+			wo_doc = frappe.get_doc("Work Order", row.name)
+			wo_doc.source_warehouse = "_Test Warehouse - _TC"
+			wo_doc.wip_warehouse = "_Test Warehouse 1 - _TC"
+			wo_doc.fg_warehouse = "_Test Warehouse - _TC"
+			for d in wo_doc.required_items:
+				d.source_warehouse = "_Test Warehouse - _TC"
+				d.required_qty -= 5
+				make_stock_entry(
+					item_code=d.item_code,
+					qty=d.required_qty,
+					rate=100,
+					target="_Test Warehouse - _TC",
+				)
+
+			wo_doc.submit()
+			plans.append(pln.name)
+
+		bin_name = get_or_make_bin("Raw Material Item 1", "_Test Warehouse - _TC")
+		after_qty = flt(frappe.db.get_value("Bin", bin_name, "reserved_qty_for_production_plan"))
+
+		self.assertEqual(after_qty, before_qty)
+
+		completed_plans = get_non_completed_production_plans()
+		for plan in plans:
+			self.assertFalse(plan in completed_plans)
+
 	def test_resered_qty_for_production_plan_for_material_requests_with_multi_UOM(self):
 		from erpnext.stock.utils import get_or_make_bin
 
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index d8fc220..f9fddcb 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -358,10 +358,10 @@
 		else:
 			self.update_work_order_qty_in_so()
 
+		self.update_ordered_qty()
 		self.update_reserved_qty_for_production()
 		self.update_completed_qty_in_material_request()
 		self.update_planned_qty()
-		self.update_ordered_qty()
 		self.create_job_card()
 
 	def on_cancel(self):
@@ -1513,7 +1513,10 @@
 
 
 def get_reserved_qty_for_production(
-	item_code: str, warehouse: str, check_production_plan: bool = False
+	item_code: str,
+	warehouse: str,
+	non_completed_production_plans: list = None,
+	check_production_plan: bool = False,
 ) -> float:
 	"""Get total reserved quantity for any item in specified warehouse"""
 	wo = frappe.qb.DocType("Work Order")
@@ -1535,16 +1538,22 @@
 			& (wo_item.parent == wo.name)
 			& (wo.docstatus == 1)
 			& (wo_item.source_warehouse == warehouse)
-			& (wo.status.notin(["Stopped", "Completed", "Closed"]))
-			& (
-				(wo_item.required_qty > wo_item.transferred_qty)
-				| (wo_item.required_qty > wo_item.consumed_qty)
-			)
 		)
 	)
 
 	if check_production_plan:
 		query = query.where(wo.production_plan.isnotnull())
+	else:
+		query = query.where(
+			(wo.status.notin(["Stopped", "Completed", "Closed"]))
+			& (
+				(wo_item.required_qty > wo_item.transferred_qty)
+				| (wo_item.required_qty > wo_item.consumed_qty)
+			)
+		)
+
+	if non_completed_production_plans:
+		query = query.where(wo.production_plan.isin(non_completed_production_plans))
 
 	return query.run()[0][0] or 0.0
 
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e9c056e..8f2d076 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -344,5 +344,6 @@
 erpnext.patches.v14_0.migrate_deferred_accounts_to_item_defaults
 erpnext.patches.v14_0.update_invoicing_period_in_subscription
 execute:frappe.delete_doc("Page", "welcome-to-erpnext")
+erpnext.patches.v15_0.delete_payment_gateway_doctypes
 # below migration patch should always run last
 erpnext.patches.v14_0.migrate_gl_to_payment_ledger
diff --git a/erpnext/patches/v15_0/delete_payment_gateway_doctypes.py b/erpnext/patches/v15_0/delete_payment_gateway_doctypes.py
new file mode 100644
index 0000000..959b065
--- /dev/null
+++ b/erpnext/patches/v15_0/delete_payment_gateway_doctypes.py
@@ -0,0 +1,6 @@
+import frappe
+
+
+def execute():
+	for dt in ("GoCardless Settings", "GoCardless Mandate", "Mpesa Settings"):
+		frappe.delete_doc("DocType", dt, ignore_missing=True)
diff --git a/erpnext/projects/doctype/task_depends_on/task_depends_on.json b/erpnext/projects/doctype/task_depends_on/task_depends_on.json
index dbbe9d3..5102986 100644
--- a/erpnext/projects/doctype/task_depends_on/task_depends_on.json
+++ b/erpnext/projects/doctype/task_depends_on/task_depends_on.json
@@ -1,156 +1,52 @@
 {
- "allow_copy": 0, 
- "allow_import": 0, 
- "allow_rename": 0, 
- "beta": 0, 
- "creation": "2015-04-29 04:52:48.868079", 
- "custom": 0, 
- "docstatus": 0, 
- "doctype": "DocType", 
- "document_type": "", 
- "editable_grid": 1, 
+ "actions": [],
+ "creation": "2015-04-29 04:52:48.868079",
+ "doctype": "DocType",
+ "editable_grid": 1,
+ "engine": "InnoDB",
+ "field_order": [
+  "task",
+  "column_break_2",
+  "subject",
+  "project"
+ ],
  "fields": [
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "task", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Task", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Task", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "task",
+   "fieldtype": "Link",
+   "in_list_view": 1,
+   "label": "Task",
+   "options": "Task"
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "column_break_2", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 0, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
+   "fieldname": "column_break_2",
+   "fieldtype": "Column Break"
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "subject", 
-   "fieldtype": "Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 1, 
-   "in_standard_filter": 0, 
-   "label": "Subject", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
+   "fetch_from": "task.subject",
+   "fieldname": "subject",
+   "fieldtype": "Text",
+   "in_list_view": 1,
+   "label": "Subject",
+   "read_only": 1
+  },
   {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "columns": 0, 
-   "fieldname": "project", 
-   "fieldtype": "Text", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_global_search": 0, 
-   "in_list_view": 0, 
-   "in_standard_filter": 0, 
-   "label": "Project", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "remember_last_selected_value": 0, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
+   "fetch_from": "task.project",
+   "fieldname": "project",
+   "fieldtype": "Text",
+   "label": "Project",
+   "read_only": 1
   }
- ], 
- "hide_heading": 0, 
- "hide_toolbar": 0, 
- "idx": 0, 
- "image_view": 0, 
- "in_create": 0, 
-
- "is_submittable": 0, 
- "issingle": 0, 
- "istable": 1, 
- "max_attachments": 0, 
- "modified": "2017-02-24 04:56:04.862502", 
- "modified_by": "Administrator", 
- "module": "Projects", 
- "name": "Task Depends On", 
- "name_case": "", 
- "owner": "Administrator", 
- "permissions": [], 
- "quick_entry": 0, 
- "read_only": 0, 
- "read_only_onload": 0, 
- "show_name_in_global_search": 0, 
- "sort_field": "modified", 
- "sort_order": "DESC", 
- "track_changes": 0, 
- "track_seen": 0
+ ],
+ "istable": 1,
+ "links": [],
+ "modified": "2023-10-09 11:34:14.335853",
+ "modified_by": "Administrator",
+ "module": "Projects",
+ "name": "Task Depends On",
+ "owner": "Administrator",
+ "permissions": [],
+ "sort_field": "modified",
+ "sort_order": "DESC",
+ "states": []
 }
\ No newline at end of file
diff --git a/erpnext/public/js/controllers/accounts.js b/erpnext/public/js/controllers/accounts.js
index a2e4bda..3545521 100644
--- a/erpnext/public/js/controllers/accounts.js
+++ b/erpnext/public/js/controllers/accounts.js
@@ -116,7 +116,7 @@
 			account_head: function(frm, cdt, cdn) {
 				let d = locals[cdt][cdn];
 
-				if (doc.docstatus == 1) {
+				if (d.docstatus == 1) {
 					// Should not trigger any changes on change post submit
 					return;
 				}
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index eeb09cb..6b613ce 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -135,7 +135,15 @@
 				}
 				else {
 					// allow for '0' qty on Credit/Debit notes
-					let qty = item.qty || (me.frm.doc.is_debit_note ? 1 : -1);
+					let qty = flt(item.qty);
+					if (!qty) {
+						qty = (me.frm.doc.is_debit_note ? 1 : -1);
+						if (me.frm.doc.doctype !== "Purchase Receipt" && me.frm.doc.is_return === 1) {
+							// In case of Purchase Receipt, qty can be 0 if all items are rejected
+							qty = flt(item.qty);
+						}
+					}
+
 					item.net_amount = item.amount = flt(item.rate * qty, precision("amount", item));
 				}
 
@@ -185,7 +193,7 @@
 		frappe.flags.round_off_applicable_accounts = [];
 
 		if (me.frm.doc.company) {
-			return frappe.call({
+			frappe.call({
 				"method": "erpnext.controllers.taxes_and_totals.get_round_off_applicable_accounts",
 				"args": {
 					"company": me.frm.doc.company,
@@ -198,6 +206,11 @@
 				}
 			});
 		}
+
+		frappe.db.get_single_value("Accounts Settings", "round_row_wise_tax")
+			.then((round_row_wise_tax) => {
+				frappe.flags.round_row_wise_tax = round_row_wise_tax;
+			})
 	}
 
 	determine_exclusive_rate() {
@@ -338,6 +351,9 @@
 			$.each(me.frm.doc["taxes"] || [], function(i, tax) {
 				// tax_amount represents the amount of tax for the current step
 				var current_tax_amount = me.get_current_tax_amount(item, tax, item_tax_map);
+				if (frappe.flags.round_row_wise_tax) {
+					current_tax_amount = flt(current_tax_amount, precision("tax_amount", tax));
+				}
 
 				// Adjust divisional loss to the last item
 				if (tax.charge_type == "Actual") {
@@ -472,8 +488,15 @@
 		}
 
 		let item_wise_tax_amount = current_tax_amount * this.frm.doc.conversion_rate;
-		if (tax_detail && tax_detail[key])
-			item_wise_tax_amount += tax_detail[key][1];
+		if (frappe.flags.round_row_wise_tax) {
+			item_wise_tax_amount = flt(item_wise_tax_amount, precision("tax_amount", tax));
+			if (tax_detail && tax_detail[key]) {
+				item_wise_tax_amount += flt(tax_detail[key][1], precision("tax_amount", tax));
+			}
+		} else {
+			if (tax_detail && tax_detail[key])
+				item_wise_tax_amount += tax_detail[key][1];
+		}
 
 		tax_detail[key] = [tax_rate, flt(item_wise_tax_amount, precision("base_tax_amount", tax))];
 	}
diff --git a/erpnext/public/js/erpnext.bundle.js b/erpnext/public/js/erpnext.bundle.js
index 0e1b23b..dee9a06 100644
--- a/erpnext/public/js/erpnext.bundle.js
+++ b/erpnext/public/js/erpnext.bundle.js
@@ -30,5 +30,6 @@
 import "./utils/sales_common.js";
 import "./controllers/buying.js";
 import "./utils/demo.js";
+import "./financial_statements.js";
 
 // import { sum } from 'frappe/public/utils/util.js'
diff --git a/erpnext/public/js/utils/item_selector.js b/erpnext/public/js/utils/item_selector.js
index 9fc2640..e74d291 100644
--- a/erpnext/public/js/utils/item_selector.js
+++ b/erpnext/public/js/utils/item_selector.js
@@ -97,14 +97,14 @@
 		}
 
 		var me = this;
-		frappe.link_search("Item", args, function(r) {
-			$.each(r.values, function(i, d) {
+		frappe.link_search("Item", args, function(results) {
+			$.each(results, function(i, d) {
 				if(!d.image) {
 					d.abbr = frappe.get_abbr(d.item_name);
 					d.color = frappe.get_palette(d.item_name);
 				}
 			});
-			me.dialog.results.html(frappe.render_template('item_selector', {'data':r.values}));
+			me.dialog.results.html(frappe.render_template('item_selector', {'data': results}));
 		});
 	}
 };
diff --git a/erpnext/regional/united_arab_emirates/utils.py b/erpnext/regional/united_arab_emirates/utils.py
index a910af6..efeaeed 100644
--- a/erpnext/regional/united_arab_emirates/utils.py
+++ b/erpnext/regional/united_arab_emirates/utils.py
@@ -7,32 +7,32 @@
 
 
 def update_itemised_tax_data(doc):
+	# maybe this should be a standard function rather than a regional one
 	if not doc.taxes:
 		return
 
+	if not doc.items:
+		return
+
+	meta = frappe.get_meta(doc.items[0].doctype)
+	if not meta.has_field("tax_rate"):
+		return
+
 	itemised_tax = get_itemised_tax(doc.taxes)
 
 	for row in doc.items:
-		tax_rate = 0.0
-		item_tax_rate = 0.0
+		tax_rate, tax_amount = 0.0, 0.0
+		# dont even bother checking in item tax template as it contains both input and output accounts - double the tax rate
+		item_code = row.item_code or row.item_name
+		if itemised_tax.get(item_code):
+			for tax in itemised_tax.get(row.item_code).values():
+				_tax_rate = flt(tax.get("tax_rate", 0), row.precision("tax_rate"))
+				tax_amount += flt((row.net_amount * _tax_rate) / 100, row.precision("tax_amount"))
+				tax_rate += _tax_rate
 
-		if row.item_tax_rate:
-			item_tax_rate = frappe.parse_json(row.item_tax_rate)
-
-		# First check if tax rate is present
-		# If not then look up in item_wise_tax_detail
-		if item_tax_rate:
-			for account, rate in item_tax_rate.items():
-				tax_rate += rate
-		elif row.item_code and itemised_tax.get(row.item_code):
-			tax_rate = sum([tax.get("tax_rate", 0) for d, tax in itemised_tax.get(row.item_code).items()])
-
-		meta = frappe.get_meta(row.doctype)
-
-		if meta.has_field("tax_rate"):
-			row.tax_rate = flt(tax_rate, row.precision("tax_rate"))
-			row.tax_amount = flt((row.net_amount * tax_rate) / 100, row.precision("net_amount"))
-			row.total_amount = flt((row.net_amount + row.tax_amount), row.precision("total_amount"))
+		row.tax_rate = flt(tax_rate, row.precision("tax_rate"))
+		row.tax_amount = flt(tax_amount, row.precision("tax_amount"))
+		row.total_amount = flt((row.net_amount + row.tax_amount), row.precision("total_amount"))
 
 
 def get_account_currency(account):
diff --git a/erpnext/selling/doctype/customer/customer.json b/erpnext/selling/doctype/customer/customer.json
index 0f42def..40cab9f 100644
--- a/erpnext/selling/doctype/customer/customer.json
+++ b/erpnext/selling/doctype/customer/customer.json
@@ -181,7 +181,6 @@
    "oldfieldname": "customer_group",
    "oldfieldtype": "Link",
    "options": "Customer Group",
-   "reqd": 1,
    "search_index": 1
   },
   {
@@ -193,8 +192,7 @@
    "oldfieldname": "territory",
    "oldfieldtype": "Link",
    "options": "Territory",
-   "print_hide": 1,
-   "reqd": 1
+   "print_hide": 1
   },
   {
    "fieldname": "tax_id",
diff --git a/erpnext/selling/doctype/customer/customer.py b/erpnext/selling/doctype/customer/customer.py
index d351c3c..a7a1aa2 100644
--- a/erpnext/selling/doctype/customer/customer.py
+++ b/erpnext/selling/doctype/customer/customer.py
@@ -15,14 +15,9 @@
 from frappe.model.naming import set_name_by_naming_series, set_name_from_naming_options
 from frappe.model.utils.rename_doc import update_linked_doctypes
 from frappe.utils import cint, cstr, flt, get_formatted_email, today
-from frappe.utils.nestedset import get_root_of
 from frappe.utils.user import get_users_with_role
 
-from erpnext.accounts.party import (  # noqa
-	get_dashboard_info,
-	get_timeline_data,
-	validate_party_accounts,
-)
+from erpnext.accounts.party import get_dashboard_info, validate_party_accounts  # noqa
 from erpnext.controllers.website_list_for_contact import add_role_for_portal_user
 from erpnext.utilities.transaction_base import TransactionBase
 
@@ -81,7 +76,6 @@
 		validate_party_accounts(self)
 		self.validate_credit_limit_on_change()
 		self.set_loyalty_program()
-		self.set_territory_and_group()
 		self.check_customer_group_change()
 		self.validate_default_bank_account()
 		self.validate_internal_customer()
@@ -140,12 +134,6 @@
 					_("{0} is not a company bank account").format(frappe.bold(self.default_bank_account))
 				)
 
-	def set_territory_and_group(self):
-		if not self.territory:
-			self.territory = get_root_of("Territory")
-		if not self.customer_group:
-			self.customer_group = get_root_of("Customer Group")
-
 	def validate_internal_customer(self):
 		if not self.is_internal_customer:
 			self.represents_company = ""
diff --git a/erpnext/selling/doctype/quotation_item/quotation_item.json b/erpnext/selling/doctype/quotation_item/quotation_item.json
index dde2f9b..5016f1f 100644
--- a/erpnext/selling/doctype/quotation_item/quotation_item.json
+++ b/erpnext/selling/doctype/quotation_item/quotation_item.json
@@ -132,7 +132,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -677,4 +676,4 @@
  "sort_order": "DESC",
  "states": [],
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index aae0fee..b91002e 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -606,29 +606,37 @@
 
 
 def get_requested_item_qty(sales_order):
-	return frappe._dict(
-		frappe.db.sql(
-			"""
-		select sales_order_item, sum(qty)
-		from `tabMaterial Request Item`
-		where docstatus = 1
-			and sales_order = %s
-		group by sales_order_item
-	""",
-			sales_order,
-		)
-	)
+	result = {}
+	for d in frappe.db.get_all(
+		"Material Request Item",
+		filters={"docstatus": 1, "sales_order": sales_order},
+		fields=["sales_order_item", "sum(qty) as qty", "sum(received_qty) as received_qty"],
+		group_by="sales_order_item",
+	):
+		result[d.sales_order_item] = frappe._dict({"qty": d.qty, "received_qty": d.received_qty})
+
+	return result
 
 
 @frappe.whitelist()
 def make_material_request(source_name, target_doc=None):
 	requested_item_qty = get_requested_item_qty(source_name)
 
+	def get_remaining_qty(so_item):
+		return flt(
+			flt(so_item.qty)
+			- flt(requested_item_qty.get(so_item.name, {}).get("qty"))
+			- max(
+				flt(so_item.get("delivered_qty"))
+				- flt(requested_item_qty.get(so_item.name, {}).get("received_qty")),
+				0,
+			)
+		)
+
 	def update_item(source, target, source_parent):
 		# qty is for packed items, because packed items don't have stock_qty field
-		qty = source.get("qty")
 		target.project = source_parent.project
-		target.qty = qty - requested_item_qty.get(source.name, 0) - flt(source.get("delivered_qty"))
+		target.qty = get_remaining_qty(source)
 		target.stock_qty = flt(target.qty) * flt(target.conversion_factor)
 
 		args = target.as_dict().copy()
@@ -661,8 +669,8 @@
 			"Sales Order Item": {
 				"doctype": "Material Request Item",
 				"field_map": {"name": "sales_order_item", "parent": "sales_order"},
-				"condition": lambda doc: not frappe.db.exists("Product Bundle", doc.item_code)
-				and (doc.stock_qty - flt(doc.get("delivered_qty"))) > requested_item_qty.get(doc.name, 0),
+				"condition": lambda item: not frappe.db.exists("Product Bundle", item.item_code)
+				and get_remaining_qty(item) > 0,
 				"postprocess": update_item,
 			},
 		},
diff --git a/erpnext/selling/doctype/sales_order_item/sales_order_item.json b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
index 07565c3..e6f7456 100644
--- a/erpnext/selling/doctype/sales_order_item/sales_order_item.json
+++ b/erpnext/selling/doctype/sales_order_item/sales_order_item.json
@@ -162,7 +162,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -906,4 +905,4 @@
  "sort_order": "DESC",
  "states": [],
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/doctype/currency_exchange/test_currency_exchange.py b/erpnext/setup/doctype/currency_exchange/test_currency_exchange.py
index 3b48c2b..8477984 100644
--- a/erpnext/setup/doctype/currency_exchange/test_currency_exchange.py
+++ b/erpnext/setup/doctype/currency_exchange/test_currency_exchange.py
@@ -121,6 +121,7 @@
 		# Update Currency Exchange Rate
 		settings = frappe.get_single("Currency Exchange Settings")
 		settings.service_provider = "exchangerate.host"
+		settings.access_key = "12345667890"
 		settings.save()
 
 		# Update exchange
diff --git a/erpnext/setup/doctype/driver/driver.json b/erpnext/setup/doctype/driver/driver.json
index 8d426cc..2e994b5 100644
--- a/erpnext/setup/doctype/driver/driver.json
+++ b/erpnext/setup/doctype/driver/driver.json
@@ -157,6 +157,22 @@
    "role": "HR Manager",
    "share": 1,
    "write": 1
+  },
+  {
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery User"
+  },
+  {
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery Manager",
+   "share": 1,
+   "write": 1
   }
  ],
  "quick_entry": 1,
@@ -166,4 +182,4 @@
  "sort_order": "DESC",
  "title_field": "full_name",
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/doctype/employee/employee.json b/erpnext/setup/doctype/employee/employee.json
index 6cb4292..1143ccb 100644
--- a/erpnext/setup/doctype/employee/employee.json
+++ b/erpnext/setup/doctype/employee/employee.json
@@ -616,6 +616,7 @@
    "fieldname": "relieving_date",
    "fieldtype": "Date",
    "label": "Relieving Date",
+   "no_copy": 1,
    "mandatory_depends_on": "eval:doc.status == \"Left\"",
    "oldfieldname": "relieving_date",
    "oldfieldtype": "Date"
@@ -822,7 +823,7 @@
  "idx": 24,
  "image_field": "image",
  "links": [],
- "modified": "2023-03-30 15:57:05.174592",
+ "modified": "2023-10-04 10:57:05.174592",
  "modified_by": "Administrator",
  "module": "Setup",
  "name": "Employee",
@@ -870,4 +871,4 @@
  "sort_order": "DESC",
  "states": [],
  "title_field": "employee_name"
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/doctype/vehicle/vehicle.json b/erpnext/setup/doctype/vehicle/vehicle.json
index ed803a7..b19d459 100644
--- a/erpnext/setup/doctype/vehicle/vehicle.json
+++ b/erpnext/setup/doctype/vehicle/vehicle.json
@@ -860,6 +860,22 @@
    "share": 1,
    "submit": 0,
    "write": 1
+  },
+  {
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery User"
+  },
+  {
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery Manager",
+   "share": 1,
+   "write": 1
   }
  ],
  "quick_entry": 1,
@@ -872,4 +888,4 @@
  "title_field": "",
  "track_changes": 1,
  "track_seen": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/setup/install.py b/erpnext/setup/install.py
index 85eaf5f..b106cfc 100644
--- a/erpnext/setup/install.py
+++ b/erpnext/setup/install.py
@@ -33,6 +33,7 @@
 	add_app_name()
 	setup_log_settings()
 	hide_workspaces()
+	update_roles()
 	frappe.db.commit()
 
 
@@ -232,6 +233,12 @@
 		frappe.db.set_value("Workspace", ws, "public", 0)
 
 
+def update_roles():
+	website_user_roles = ("Customer", "Supplier")
+	for role in website_user_roles:
+		frappe.db.set_value("Role", role, "desk_access", 0)
+
+
 def create_default_role_profiles():
 	for role_profile_name, roles in DEFAULT_ROLE_PROFILES.items():
 		role_profile = frappe.new_doc("Role Profile")
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.json b/erpnext/stock/doctype/delivery_note/delivery_note.json
index e0d4919..b85f296 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.json
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.json
@@ -1460,6 +1460,36 @@
    "read": 1,
    "role": "Stock Manager",
    "write": 1
+  },
+  {
+   "amend": 1,
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery User",
+   "share": 1,
+   "submit": 1,
+   "write": 1
+  },
+  {
+   "amend": 1,
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery Manager",
+   "share": 1,
+   "submit": 1,
+   "write": 1
   }
  ],
  "search_fields": "status,customer,customer_name, territory,base_grand_total",
diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
index d3236ba..6148950 100644
--- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
+++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json
@@ -165,7 +165,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Small Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -726,7 +725,8 @@
    "label": "Against Delivery Note Item",
    "no_copy": 1,
    "print_hide": 1,
-   "read_only": 1
+   "read_only": 1,
+   "search_index": 1
   },
   {
    "fieldname": "stock_qty_sec_break",
@@ -893,7 +893,7 @@
  "index_web_pages_for_search": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-07-26 12:53:49.357171",
+ "modified": "2023-10-16 16:18:18.013379",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Delivery Note Item",
diff --git a/erpnext/stock/doctype/delivery_settings/delivery_settings.json b/erpnext/stock/doctype/delivery_settings/delivery_settings.json
index 963403b..ad0ac45 100644
--- a/erpnext/stock/doctype/delivery_settings/delivery_settings.json
+++ b/erpnext/stock/doctype/delivery_settings/delivery_settings.json
@@ -239,7 +239,7 @@
    "print": 1, 
    "read": 1, 
    "report": 0, 
-   "role": "System Manager", 
+   "role": "Delivery Manager",
    "set_user_permissions": 0, 
    "share": 1, 
    "submit": 0, 
@@ -255,4 +255,4 @@
  "track_changes": 1, 
  "track_seen": 0, 
  "track_views": 0
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/delivery_trip/delivery_trip.json b/erpnext/stock/doctype/delivery_trip/delivery_trip.json
index 9d8fe46..ec72af8 100644
--- a/erpnext/stock/doctype/delivery_trip/delivery_trip.json
+++ b/erpnext/stock/doctype/delivery_trip/delivery_trip.json
@@ -188,7 +188,7 @@
  ],
  "is_submittable": 1,
  "links": [],
- "modified": "2023-06-27 11:22:27.927637",
+ "modified": "2023-10-01 07:06:06.314503",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Delivery Trip",
@@ -224,10 +224,40 @@
    "share": 1,
    "submit": 1,
    "write": 1
+  },
+  {
+   "amend": 1,
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery User",
+   "share": 1,
+   "submit": 1,
+   "write": 1
+  },
+  {
+   "amend": 1,
+   "cancel": 1,
+   "create": 1,
+   "delete": 1,
+   "email": 1,
+   "export": 1,
+   "print": 1,
+   "read": 1,
+   "report": 1,
+   "role": "Delivery Manager",
+   "share": 1,
+   "submit": 1,
+   "write": 1
   }
  ],
  "sort_field": "modified",
  "sort_order": "DESC",
  "states": [],
  "title_field": "driver_name"
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
index 0310682..35d1c02 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.js
@@ -37,7 +37,7 @@
 		if (frm.doc.__onload && frm.doc.__onload.has_stock_ledger
 			&& frm.doc.__onload.has_stock_ledger.length) {
 			let allow_to_edit_fields = ['disabled', 'fetch_from_parent',
-				'type_of_transaction', 'condition', 'mandatory_depends_on'];
+				'type_of_transaction', 'condition', 'mandatory_depends_on', 'validate_negative_stock'];
 
 			frm.fields.forEach((field) => {
 				if (!in_list(allow_to_edit_fields, field.df.fieldname)) {
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
index eb6102a..0e40552 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.json
@@ -17,6 +17,8 @@
   "target_fieldname",
   "applicable_for_documents_tab",
   "apply_to_all_doctypes",
+  "column_break_niy2u",
+  "validate_negative_stock",
   "column_break_13",
   "document_type",
   "type_of_transaction",
@@ -173,11 +175,21 @@
    "fieldname": "reqd",
    "fieldtype": "Check",
    "label": "Mandatory"
+  },
+  {
+   "fieldname": "column_break_niy2u",
+   "fieldtype": "Column Break"
+  },
+  {
+   "default": "0",
+   "fieldname": "validate_negative_stock",
+   "fieldtype": "Check",
+   "label": "Validate Negative Stock"
   }
  ],
  "index_web_pages_for_search": 1,
  "links": [],
- "modified": "2023-01-31 13:44:38.507698",
+ "modified": "2023-10-05 12:52:18.705431",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Inventory Dimension",
diff --git a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
index 8bff4d5..257d18f 100644
--- a/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/inventory_dimension.py
@@ -60,6 +60,7 @@
 			"fetch_from_parent",
 			"type_of_transaction",
 			"condition",
+			"validate_negative_stock",
 		]
 
 		for field in frappe.get_meta("Inventory Dimension").fields:
@@ -160,6 +161,7 @@
 				insert_after="inventory_dimension",
 				options=self.reference_document,
 				label=label,
+				search_index=1,
 				reqd=self.reqd,
 				mandatory_depends_on=self.mandatory_depends_on,
 			),
@@ -255,7 +257,7 @@
 def get_inventory_documents(
 	doctype=None, txt=None, searchfield=None, start=None, page_len=None, filters=None
 ):
-	and_filters = [["DocField", "parent", "not in", ["Batch", "Serial No"]]]
+	and_filters = [["DocField", "parent", "not in", ["Batch", "Serial No", "Item Price"]]]
 	or_filters = [
 		["DocField", "options", "in", ["Batch", "Serial No"]],
 		["DocField", "parent", "in", ["Putaway Rule"]],
@@ -340,6 +342,7 @@
 			fields=[
 				"distinct target_fieldname as fieldname",
 				"reference_document as doctype",
+				"validate_negative_stock",
 			],
 			filters={"disabled": 0},
 		)
diff --git a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
index 2d273c6..33394e5 100644
--- a/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
+++ b/erpnext/stock/doctype/inventory_dimension/test_inventory_dimension.py
@@ -414,6 +414,53 @@
 			else:
 				self.assertEqual(d.store, "Inter Transfer Store 2")
 
+	def test_validate_negative_stock_for_inventory_dimension(self):
+		frappe.local.inventory_dimensions = {}
+		item_code = "Test Negative Inventory Dimension Item"
+		frappe.db.set_single_value("Stock Settings", "allow_negative_stock", 1)
+		create_item(item_code)
+
+		inv_dimension = create_inventory_dimension(
+			apply_to_all_doctypes=1,
+			dimension_name="Inv Site",
+			reference_document="Inv Site",
+			document_type="Inv Site",
+			validate_negative_stock=1,
+		)
+
+		warehouse = create_warehouse("Negative Stock Warehouse")
+		doc = make_stock_entry(item_code=item_code, target=warehouse, qty=10, do_not_submit=True)
+
+		doc.items[0].to_inv_site = "Site 1"
+		doc.submit()
+
+		site_name = frappe.get_all(
+			"Stock Ledger Entry", filters={"voucher_no": doc.name, "is_cancelled": 0}, fields=["inv_site"]
+		)[0].inv_site
+
+		self.assertEqual(site_name, "Site 1")
+
+		doc = make_stock_entry(item_code=item_code, source=warehouse, qty=100, do_not_submit=True)
+
+		doc.items[0].inv_site = "Site 1"
+		self.assertRaises(frappe.ValidationError, doc.submit)
+
+		inv_dimension.reload()
+		inv_dimension.db_set("validate_negative_stock", 0)
+		frappe.local.inventory_dimensions = {}
+
+		doc = make_stock_entry(item_code=item_code, source=warehouse, qty=100, do_not_submit=True)
+
+		doc.items[0].inv_site = "Site 1"
+		doc.submit()
+		self.assertEqual(doc.docstatus, 1)
+
+		site_name = frappe.get_all(
+			"Stock Ledger Entry", filters={"voucher_no": doc.name, "is_cancelled": 0}, fields=["inv_site"]
+		)[0].inv_site
+
+		self.assertEqual(site_name, "Site 1")
+
 
 def get_voucher_sl_entries(voucher_no, fields):
 	return frappe.get_all(
@@ -504,6 +551,26 @@
 			}
 		).insert(ignore_permissions=True)
 
+	if not frappe.db.exists("DocType", "Inv Site"):
+		frappe.get_doc(
+			{
+				"doctype": "DocType",
+				"name": "Inv Site",
+				"module": "Stock",
+				"custom": 1,
+				"naming_rule": "By fieldname",
+				"autoname": "field:site_name",
+				"fields": [{"label": "Site Name", "fieldname": "site_name", "fieldtype": "Data"}],
+				"permissions": [
+					{"role": "System Manager", "permlevel": 0, "read": 1, "write": 1, "create": 1, "delete": 1}
+				],
+			}
+		).insert(ignore_permissions=True)
+
+	for site in ["Site 1", "Site 2"]:
+		if not frappe.db.exists("Inv Site", site):
+			frappe.get_doc({"doctype": "Inv Site", "site_name": site}).insert(ignore_permissions=True)
+
 
 def create_inventory_dimension(**args):
 	args = frappe._dict(args)
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index bf3301f..9673a70 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -102,6 +102,12 @@
 
 		if (frm.doc.docstatus == 1 && frm.doc.status != 'Stopped') {
 			let precision = frappe.defaults.get_default("float_precision");
+
+			if (flt(frm.doc.per_received, precision) < 100) {
+				frm.add_custom_button(__('Stop'),
+					() => frm.events.update_status(frm, 'Stopped'));
+			}
+
 			if (flt(frm.doc.per_ordered, precision) < 100) {
 				let add_create_pick_list_button = () => {
 					frm.add_custom_button(__('Pick List'),
@@ -148,11 +154,6 @@
 				}
 
 				frm.page.set_inner_btn_group_as_primary(__('Create'));
-
-				// stop
-				frm.add_custom_button(__('Stop'),
-					() => frm.events.update_status(frm, 'Stopped'));
-
 			}
 		}
 
diff --git a/erpnext/stock/doctype/material_request_item/material_request_item.json b/erpnext/stock/doctype/material_request_item/material_request_item.json
index 770dacd..c585d6c 100644
--- a/erpnext/stock/doctype/material_request_item/material_request_item.json
+++ b/erpnext/stock/doctype/material_request_item/material_request_item.json
@@ -104,7 +104,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Text",
    "print_width": "250px",
-   "reqd": 1,
    "width": "250px"
   },
   {
@@ -472,4 +471,4 @@
  "sort_order": "DESC",
  "states": [],
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 2bb479b..6552cd7 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -37,6 +37,12 @@
 			}
 		});
 
+		frm.set_query("wip_composite_asset", "items", function() {
+			return {
+				filters: {'is_composite_asset': 1, 'docstatus': 0 }
+			}
+		});
+
 		frm.set_query("taxes_and_charges", function() {
 			return {
 				filters: {'company': frm.doc.company }
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
index 04eff54..de0db1a 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -339,7 +339,7 @@
 		exchange_rate_map, net_rate_map = get_purchase_document_details(self)
 
 		for d in self.get("items"):
-			if d.item_code in stock_items and flt(d.valuation_rate) and flt(d.qty):
+			if d.item_code in stock_items and flt(d.qty) and (flt(d.valuation_rate) or self.is_return):
 				if warehouse_account.get(d.warehouse):
 					stock_value_diff = frappe.db.get_value(
 						"Stock Ledger Entry",
@@ -956,6 +956,10 @@
 
 		total_amount += total_billable_amount
 		total_billed_amount += flt(item.billed_amt)
+
+		if pr_doc.get("is_return") and not total_amount and total_billed_amount:
+			total_amount = total_billed_amount
+
 		if adjust_incoming_rate:
 			adjusted_amt = 0.0
 			if item.billed_amt and item.amount:
diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
index b7712ee..cdf5053 100644
--- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
+++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py
@@ -2060,6 +2060,88 @@
 		company.enable_provisional_accounting_for_non_stock_items = 0
 		company.save()
 
+	def test_purchase_return_status_with_debit_note(self):
+		pr = make_purchase_receipt(rejected_qty=10, received_qty=10, rate=100, do_not_save=1)
+		pr.items[0].qty = 0
+		pr.items[0].stock_qty = 0
+		pr.submit()
+
+		return_pr = make_purchase_receipt(
+			is_return=1,
+			return_against=pr.name,
+			qty=0,
+			rejected_qty=10 * -1,
+			received_qty=10 * -1,
+			do_not_save=1,
+		)
+		return_pr.items[0].qty = 0.0
+		return_pr.items[0].stock_qty = 0.0
+		return_pr.submit()
+
+		self.assertEqual(return_pr.status, "To Bill")
+
+		pi = make_purchase_invoice(return_pr.name)
+		pi.submit()
+
+		return_pr.reload()
+		self.assertEqual(return_pr.status, "Completed")
+
+	def test_purchase_return_with_zero_rate(self):
+		company = "_Test Company with perpetual inventory"
+
+		# Step - 1: Create Item
+		item, warehouse = (
+			make_item(properties={"is_stock_item": 1, "valuation_method": "Moving Average"}).name,
+			"Stores - TCP1",
+		)
+
+		# Step - 2: Create Stock Entry (Material Receipt)
+		from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry
+
+		se = make_stock_entry(
+			purpose="Material Receipt",
+			item_code=item,
+			qty=100,
+			basic_rate=100,
+			to_warehouse=warehouse,
+			company=company,
+		)
+
+		# Step - 3: Create Purchase Receipt
+		pr = make_purchase_receipt(
+			item_code=item,
+			qty=5,
+			rate=0,
+			warehouse=warehouse,
+			company=company,
+		)
+
+		# Step - 4: Create Purchase Return
+		from erpnext.controllers.sales_and_purchase_return import make_return_doc
+
+		pr_return = make_return_doc("Purchase Receipt", pr.name)
+		pr_return.save()
+		pr_return.submit()
+
+		sl_entries = get_sl_entries(pr_return.doctype, pr_return.name)
+		gl_entries = get_gl_entries(pr_return.doctype, pr_return.name)
+
+		# Test - 1: SLE Stock Value Difference should be equal to Qty * Average Rate
+		average_rate = (
+			(se.items[0].qty * se.items[0].basic_rate) + (pr.items[0].qty * pr.items[0].rate)
+		) / (se.items[0].qty + pr.items[0].qty)
+		expected_stock_value_difference = pr_return.items[0].qty * average_rate
+		self.assertEqual(
+			flt(sl_entries[0].stock_value_difference, 2), flt(expected_stock_value_difference, 2)
+		)
+
+		# Test - 2: GL Entries should be created for Stock Value Difference
+		self.assertEqual(len(gl_entries), 2)
+
+		# Test - 3: SLE Stock Value Difference should be equal to Debit or Credit of GL Entries.
+		for entry in gl_entries:
+			self.assertEqual(abs(entry.debit + entry.credit), abs(sl_entries[0].stock_value_difference))
+
 
 def prepare_data_for_internal_transfer():
 	from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_internal_supplier
diff --git a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
index 5eb3656..d93d21c 100644
--- a/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
+++ b/erpnext/stock/doctype/purchase_receipt_item/purchase_receipt_item.json
@@ -117,6 +117,7 @@
   "accounting_details_section",
   "expense_account",
   "item_tax_rate",
+  "wip_composite_asset",
   "column_break_102",
   "provisional_expense_account",
   "accounting_dimensions_section",
@@ -186,7 +187,6 @@
    "oldfieldname": "description",
    "oldfieldtype": "Text",
    "print_width": "300px",
-   "reqd": 1,
    "width": "300px"
   },
   {
@@ -1056,12 +1056,18 @@
    "fieldname": "add_serial_batch_bundle",
    "fieldtype": "Button",
    "label": "Add Serial / Batch No"
+  },
+  {
+   "fieldname": "wip_composite_asset",
+   "fieldtype": "Link",
+   "label": "WIP Composite Asset",
+   "options": "Asset"
   }
  ],
  "idx": 1,
  "istable": 1,
  "links": [],
- "modified": "2023-08-11 16:16:16.504549",
+ "modified": "2023-10-03 21:11:50.547261",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Purchase Receipt Item",
@@ -1072,4 +1078,4 @@
  "sort_field": "modified",
  "sort_order": "DESC",
  "states": []
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
index 3ca4bad..c1b2051 100644
--- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
+++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py
@@ -5,14 +5,16 @@
 from datetime import date
 
 import frappe
-from frappe import _
+from frappe import _, bold
 from frappe.core.doctype.role.role import get_users
 from frappe.model.document import Document
-from frappe.utils import add_days, cint, formatdate, get_datetime, getdate
+from frappe.utils import add_days, cint, flt, formatdate, get_datetime, getdate
 
 from erpnext.accounts.utils import get_fiscal_year
 from erpnext.controllers.item_variant import ItemTemplateCannotHaveStock
+from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions
 from erpnext.stock.serial_batch_bundle import SerialBatchBundle
+from erpnext.stock.stock_ledger import get_previous_sle
 
 
 class StockFreezeError(frappe.ValidationError):
@@ -48,6 +50,69 @@
 		self.validate_and_set_fiscal_year()
 		self.block_transactions_against_group_warehouse()
 		self.validate_with_last_transaction_posting_time()
+		self.validate_inventory_dimension_negative_stock()
+
+	def validate_inventory_dimension_negative_stock(self):
+		extra_cond = ""
+		kwargs = {}
+
+		dimensions = self._get_inventory_dimensions()
+		if not dimensions:
+			return
+
+		for dimension, values in dimensions.items():
+			kwargs[dimension] = values.get("value")
+			extra_cond += f" and {dimension} = %({dimension})s"
+
+		kwargs.update(
+			{
+				"item_code": self.item_code,
+				"warehouse": self.warehouse,
+				"posting_date": self.posting_date,
+				"posting_time": self.posting_time,
+				"company": self.company,
+			}
+		)
+
+		sle = get_previous_sle(kwargs, extra_cond=extra_cond)
+		if sle:
+			flt_precision = cint(frappe.db.get_default("float_precision")) or 2
+			diff = sle.qty_after_transaction + flt(self.actual_qty)
+			diff = flt(diff, flt_precision)
+			if diff < 0 and abs(diff) > 0.0001:
+				self.throw_validation_error(diff, dimensions)
+
+	def throw_validation_error(self, diff, dimensions):
+		dimension_msg = _(", with the inventory {0}: {1}").format(
+			"dimensions" if len(dimensions) > 1 else "dimension",
+			", ".join(f"{bold(d.doctype)} ({d.value})" for k, d in dimensions.items()),
+		)
+
+		msg = _(
+			"{0} units of {1} are required in {2}{3}, on {4} {5} for {6} to complete the transaction."
+		).format(
+			abs(diff),
+			frappe.get_desk_link("Item", self.item_code),
+			frappe.get_desk_link("Warehouse", self.warehouse),
+			dimension_msg,
+			self.posting_date,
+			self.posting_time,
+			frappe.get_desk_link(self.voucher_type, self.voucher_no),
+		)
+
+		frappe.throw(msg, title=_("Inventory Dimension Negative Stock"))
+
+	def _get_inventory_dimensions(self):
+		inv_dimensions = get_inventory_dimensions()
+		inv_dimension_dict = {}
+		for dimension in inv_dimensions:
+			if not dimension.get("validate_negative_stock") or not self.get(dimension.fieldname):
+				continue
+
+			dimension["value"] = self.get(dimension.fieldname)
+			inv_dimension_dict.setdefault(dimension.fieldname, dimension)
+
+		return inv_dimension_dict
 
 	def on_submit(self):
 		self.check_stock_frozen_date()
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
index e36d576..98b4ffd 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
@@ -12,6 +12,7 @@
 from erpnext.accounts.utils import get_company_default
 from erpnext.controllers.stock_controller import StockController
 from erpnext.stock.doctype.batch.batch import get_available_batches, get_batch_qty
+from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions
 from erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle import (
 	get_available_serial_nos,
 )
@@ -50,6 +51,7 @@
 		self.clean_serial_nos()
 		self.set_total_qty_and_amount()
 		self.validate_putaway_capacity()
+		self.validate_inventory_dimension()
 
 		if self._action == "submit":
 			self.validate_reserved_stock()
@@ -57,6 +59,17 @@
 	def on_update(self):
 		self.set_serial_and_batch_bundle(ignore_validate=True)
 
+	def validate_inventory_dimension(self):
+		dimensions = get_inventory_dimensions()
+		for dimension in dimensions:
+			for row in self.items:
+				if not row.batch_no and row.current_qty and row.get(dimension.get("fieldname")):
+					frappe.throw(
+						_(
+							"Row #{0}: You cannot use the inventory dimension '{1}' in Stock Reconciliation to modify the quantity or valuation rate. Stock reconciliation with inventory dimensions is intended solely for performing opening entries."
+						).format(row.idx, bold(dimension.get("doctype")))
+					)
+
 	def on_submit(self):
 		self.update_stock_ledger()
 		self.make_gl_entries()
@@ -202,8 +215,19 @@
 				self.calculate_difference_amount(item, bundle_data)
 				return True
 
+			inventory_dimensions_dict = {}
+			if not item.batch_no and not item.serial_no:
+				for dimension in get_inventory_dimensions():
+					if item.get(dimension.get("fieldname")):
+						inventory_dimensions_dict[dimension.get("fieldname")] = item.get(dimension.get("fieldname"))
+
 			item_dict = get_stock_balance_for(
-				item.item_code, item.warehouse, self.posting_date, self.posting_time, batch_no=item.batch_no
+				item.item_code,
+				item.warehouse,
+				self.posting_date,
+				self.posting_time,
+				batch_no=item.batch_no,
+				inventory_dimensions_dict=inventory_dimensions_dict,
 			)
 
 			if (item.qty is None or item.qty == item_dict.get("qty")) and (
@@ -507,7 +531,13 @@
 		if not row.batch_no:
 			data.qty_after_transaction = flt(row.qty, row.precision("qty"))
 
-		if self.docstatus == 2:
+		dimensions = get_inventory_dimensions()
+		has_dimensions = False
+		for dimension in dimensions:
+			if row.get(dimension.get("fieldname")):
+				has_dimensions = True
+
+		if self.docstatus == 2 and (not row.batch_no or not row.serial_and_batch_bundle):
 			if row.current_qty:
 				data.actual_qty = -1 * row.current_qty
 				data.qty_after_transaction = flt(row.current_qty)
@@ -523,6 +553,13 @@
 				data.valuation_rate = flt(row.valuation_rate)
 				data.stock_value_difference = -1 * flt(row.amount_difference)
 
+		elif (
+			self.docstatus == 1 and has_dimensions and (not row.batch_no or not row.serial_and_batch_bundle)
+		):
+			data.actual_qty = row.qty
+			data.qty_after_transaction = 0.0
+			data.incoming_rate = flt(row.valuation_rate)
+
 		self.update_inventory_dimensions(row, data)
 
 		return data
@@ -911,6 +948,7 @@
 	posting_time,
 	batch_no: Optional[str] = None,
 	with_valuation_rate: bool = True,
+	inventory_dimensions_dict=None,
 ):
 	frappe.has_permission("Stock Reconciliation", "write", throw=True)
 
@@ -939,6 +977,7 @@
 		posting_time,
 		with_valuation_rate=with_valuation_rate,
 		with_serial_no=has_serial_no,
+		inventory_dimensions_dict=inventory_dimensions_dict,
 	)
 
 	if has_serial_no:
diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.json b/erpnext/stock/doctype/stock_settings/stock_settings.json
index 4fbc0eb..2052daa 100644
--- a/erpnext/stock/doctype/stock_settings/stock_settings.json
+++ b/erpnext/stock/doctype/stock_settings/stock_settings.json
@@ -428,7 +428,7 @@
  "index_web_pages_for_search": 1,
  "issingle": 1,
  "links": [],
- "modified": "2023-09-01 16:16:34.018947",
+ "modified": "2023-10-01 14:22:36.136111",
  "modified_by": "Administrator",
  "module": "Stock",
  "name": "Stock Settings",
@@ -442,6 +442,10 @@
    "role": "Stock Manager",
    "share": 1,
    "write": 1
+  },
+  {
+   "read": 1,
+   "role": "Sales User"
   }
  ],
  "quick_entry": 1,
@@ -449,4 +453,4 @@
  "sort_order": "ASC",
  "states": [],
  "track_changes": 1
-}
\ No newline at end of file
+}
diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py
index d3807b0..48119b8 100644
--- a/erpnext/stock/stock_ledger.py
+++ b/erpnext/stock/stock_ledger.py
@@ -24,6 +24,7 @@
 
 import erpnext
 from erpnext.stock.doctype.bin.bin import update_qty as update_bin_qty
+from erpnext.stock.doctype.inventory_dimension.inventory_dimension import get_inventory_dimensions
 from erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry import (
 	get_sre_reserved_qty_for_item_and_warehouse as get_reserved_stock,
 )
@@ -711,10 +712,17 @@
 		):
 			sle.outgoing_rate = get_incoming_rate_for_inter_company_transfer(sle)
 
+		dimensions = get_inventory_dimensions()
+		has_dimensions = False
+		if dimensions:
+			for dimension in dimensions:
+				if sle.get(dimension.get("fieldname")):
+					has_dimensions = True
+
 		if sle.serial_and_batch_bundle:
 			self.calculate_valuation_for_serial_batch_bundle(sle)
 		else:
-			if sle.voucher_type == "Stock Reconciliation" and not sle.batch_no:
+			if sle.voucher_type == "Stock Reconciliation" and not sle.batch_no and not has_dimensions:
 				# assert
 				self.wh_data.valuation_rate = sle.valuation_rate
 				self.wh_data.qty_after_transaction = sle.qty_after_transaction
@@ -1297,7 +1305,7 @@
 	return sle[0] if sle else frappe._dict()
 
 
-def get_previous_sle(args, for_update=False):
+def get_previous_sle(args, for_update=False, extra_cond=None):
 	"""
 	get the last sle on or before the current time-bucket,
 	to get actual qty before transaction, this function
@@ -1312,7 +1320,9 @@
 	}
 	"""
 	args["name"] = args.get("sle", None) or ""
-	sle = get_stock_ledger_entries(args, "<=", "desc", "limit 1", for_update=for_update)
+	sle = get_stock_ledger_entries(
+		args, "<=", "desc", "limit 1", for_update=for_update, extra_cond=extra_cond
+	)
 	return sle and sle[0] or {}
 
 
@@ -1324,6 +1334,7 @@
 	for_update=False,
 	debug=False,
 	check_serial_no=True,
+	extra_cond=None,
 ):
 	"""get stock ledger entries filtered by specific posting datetime conditions"""
 	conditions = " and timestamp(posting_date, posting_time) {0} timestamp(%(posting_date)s, %(posting_time)s)".format(
@@ -1361,6 +1372,9 @@
 	if operator in (">", "<=") and previous_sle.get("name"):
 		conditions += " and name!=%(name)s"
 
+	if extra_cond:
+		conditions += f"{extra_cond}"
+
 	return frappe.db.sql(
 		"""
 		select *, timestamp(posting_date, posting_time) as "timestamp"
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index 0244406..bd0d469 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -95,6 +95,7 @@
 	posting_time=None,
 	with_valuation_rate=False,
 	with_serial_no=False,
+	inventory_dimensions_dict=None,
 ):
 	"""Returns stock balance quantity at given warehouse on given posting date or current date.
 
@@ -114,7 +115,13 @@
 		"posting_time": posting_time,
 	}
 
-	last_entry = get_previous_sle(args)
+	extra_cond = ""
+	if inventory_dimensions_dict:
+		for field, value in inventory_dimensions_dict.items():
+			args[field] = value
+			extra_cond += f" and {field} = %({field})s"
+
+	last_entry = get_previous_sle(args, extra_cond=extra_cond)
 
 	if with_valuation_rate:
 		if with_serial_no:
diff --git a/erpnext/templates/includes/integrations/gocardless_checkout.js b/erpnext/templates/includes/integrations/gocardless_checkout.js
deleted file mode 100644
index b18d550..0000000
--- a/erpnext/templates/includes/integrations/gocardless_checkout.js
+++ /dev/null
@@ -1,24 +0,0 @@
-$(document).ready(function() {
-	var data = {{ frappe.form_dict | json }};
-	var doctype = "{{ reference_doctype }}"
-	var docname = "{{ reference_docname }}"
-
-	frappe.call({
-		method: "erpnext.templates.pages.integrations.gocardless_checkout.check_mandate",
-		freeze: true,
-		headers: {
-			"X-Requested-With": "XMLHttpRequest"
-		},
-		args: {
-			"data": JSON.stringify(data),
-			"reference_doctype": doctype,
-			"reference_docname": docname
-		},
-		callback: function(r) {
-			if (r.message) {
-				window.location.href = r.message.redirect_to
-			}
-		}
-	})
-
-})
diff --git a/erpnext/templates/includes/integrations/gocardless_confirmation.js b/erpnext/templates/includes/integrations/gocardless_confirmation.js
deleted file mode 100644
index fee1d2b..0000000
--- a/erpnext/templates/includes/integrations/gocardless_confirmation.js
+++ /dev/null
@@ -1,24 +0,0 @@
-$(document).ready(function() {
-	var redirect_flow_id = "{{ redirect_flow_id }}";
-	var doctype = "{{ reference_doctype }}";
-	var docname = "{{ reference_docname }}";
-
-	frappe.call({
-		method: "erpnext.templates.pages.integrations.gocardless_confirmation.confirm_payment",
-		freeze: true,
-		headers: {
-			"X-Requested-With": "XMLHttpRequest"
-		},
-		args: {
-			"redirect_flow_id": redirect_flow_id,
-			"reference_doctype": doctype,
-			"reference_docname": docname
-		},
-		callback: function(r) {
-			if (r.message) {
-				window.location.href = r.message.redirect_to;
-			}
-		}
-	});
-
-});
diff --git a/erpnext/templates/includes/transaction_row.html b/erpnext/templates/includes/transaction_row.html
index 72d498c..a498ba0 100644
--- a/erpnext/templates/includes/transaction_row.html
+++ b/erpnext/templates/includes/transaction_row.html
@@ -15,10 +15,14 @@
 				{{ doc.items_preview }}
 			</div>
 		</div>
-		{% if doc.get('grand_total') %}
+		{% if doc.is_rounded_total_disabled() and doc.get('grand_total') %}
 			<div class="col-sm-3 text-right font-weight-bold item-total">
 				{{ doc.get_formatted("grand_total") }}
 			</div>
+		{% elif doc.get('rounded_total') %}
+			<div class="col-sm-3 text-right font-weight-bold item-total">
+				{{ doc.get_formatted("rounded_total") }}
+			</div>
 		{% endif %}
 	</div>
 	<a class="transaction-item-link" href="/{{ pathname }}/{{ doc.name }}">Link</a>
diff --git a/erpnext/templates/pages/integrations/__init__.py b/erpnext/templates/pages/integrations/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/templates/pages/integrations/__init__.py
+++ /dev/null
diff --git a/erpnext/templates/pages/integrations/gocardless_checkout.html b/erpnext/templates/pages/integrations/gocardless_checkout.html
deleted file mode 100644
index 6072db4..0000000
--- a/erpnext/templates/pages/integrations/gocardless_checkout.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "templates/web.html" %}
-
-{% block title %} Payment {% endblock %}
-
-{%- block header -%}{% endblock %}
-
-{% block script %}
-<script>{% include "templates/includes/integrations/gocardless_checkout.js" %}</script>
-{% endblock %}
-
-{%- block page_content -%}
-<p class='lead text-center'>
-	<span class='gocardless-loading'>{{ _("Loading Payment System") }}</span>
-</p>
-
-{% endblock %}
diff --git a/erpnext/templates/pages/integrations/gocardless_checkout.py b/erpnext/templates/pages/integrations/gocardless_checkout.py
deleted file mode 100644
index 655be52..0000000
--- a/erpnext/templates/pages/integrations/gocardless_checkout.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import json
-
-import frappe
-from frappe import _
-from frappe.utils import flt, get_url
-
-from erpnext.erpnext_integrations.doctype.gocardless_settings.gocardless_settings import (
-	get_gateway_controller,
-	gocardless_initialization,
-)
-
-no_cache = 1
-
-expected_keys = (
-	"amount",
-	"title",
-	"description",
-	"reference_doctype",
-	"reference_docname",
-	"payer_name",
-	"payer_email",
-	"order_id",
-	"currency",
-)
-
-
-def get_context(context):
-	context.no_cache = 1
-
-	# all these keys exist in form_dict
-	if not (set(expected_keys) - set(frappe.form_dict.keys())):
-		for key in expected_keys:
-			context[key] = frappe.form_dict[key]
-
-		context["amount"] = flt(context["amount"])
-
-		gateway_controller = get_gateway_controller(context.reference_docname)
-		context["header_img"] = frappe.db.get_value(
-			"GoCardless Settings", gateway_controller, "header_img"
-		)
-
-	else:
-		frappe.redirect_to_message(
-			_("Some information is missing"),
-			_("Looks like someone sent you to an incomplete URL. Please ask them to look into it."),
-		)
-		frappe.local.flags.redirect_location = frappe.local.response.location
-		raise frappe.Redirect
-
-
-@frappe.whitelist(allow_guest=True)
-def check_mandate(data, reference_doctype, reference_docname):
-	data = json.loads(data)
-
-	client = gocardless_initialization(reference_docname)
-
-	payer = frappe.get_doc("Customer", data["payer_name"])
-
-	if payer.customer_type == "Individual" and payer.customer_primary_contact is not None:
-		primary_contact = frappe.get_doc("Contact", payer.customer_primary_contact)
-		prefilled_customer = {
-			"company_name": payer.name,
-			"given_name": primary_contact.first_name,
-		}
-		if primary_contact.last_name is not None:
-			prefilled_customer.update({"family_name": primary_contact.last_name})
-
-		if primary_contact.email_id is not None:
-			prefilled_customer.update({"email": primary_contact.email_id})
-		else:
-			prefilled_customer.update({"email": frappe.session.user})
-
-	else:
-		prefilled_customer = {"company_name": payer.name, "email": frappe.session.user}
-
-	success_url = get_url(
-		"./integrations/gocardless_confirmation?reference_doctype="
-		+ reference_doctype
-		+ "&reference_docname="
-		+ reference_docname
-	)
-
-	try:
-		redirect_flow = client.redirect_flows.create(
-			params={
-				"description": _("Pay {0} {1}").format(data["amount"], data["currency"]),
-				"session_token": frappe.session.user,
-				"success_redirect_url": success_url,
-				"prefilled_customer": prefilled_customer,
-			}
-		)
-
-		return {"redirect_to": redirect_flow.redirect_url}
-
-	except Exception as e:
-		frappe.log_error("GoCardless Payment Error")
-		return {"redirect_to": "/integrations/payment-failed"}
diff --git a/erpnext/templates/pages/integrations/gocardless_confirmation.html b/erpnext/templates/pages/integrations/gocardless_confirmation.html
deleted file mode 100644
index d961c63..0000000
--- a/erpnext/templates/pages/integrations/gocardless_confirmation.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% extends "templates/web.html" %}
-
-{% block title %} Payment {% endblock %}
-
-{%- block header -%}{% endblock %}
-
-{% block script %}
-<script>{% include "templates/includes/integrations/gocardless_confirmation.js" %}</script>
-{% endblock %}
-
-{%- block page_content -%}
-<p class='lead text-center'>
-	<span class='gocardless-loading'>{{ _("Payment Confirmation") }}</span>
-</p>
-
-{% endblock %}
diff --git a/erpnext/templates/pages/integrations/gocardless_confirmation.py b/erpnext/templates/pages/integrations/gocardless_confirmation.py
deleted file mode 100644
index 559aa48..0000000
--- a/erpnext/templates/pages/integrations/gocardless_confirmation.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and Contributors
-# License: GNU General Public License v3. See license.txt
-
-import frappe
-from frappe import _
-
-from erpnext.erpnext_integrations.doctype.gocardless_settings.gocardless_settings import (
-	get_gateway_controller,
-	gocardless_initialization,
-)
-
-no_cache = 1
-
-expected_keys = ("redirect_flow_id", "reference_doctype", "reference_docname")
-
-
-def get_context(context):
-	context.no_cache = 1
-
-	# all these keys exist in form_dict
-	if not (set(expected_keys) - set(frappe.form_dict.keys())):
-		for key in expected_keys:
-			context[key] = frappe.form_dict[key]
-
-	else:
-		frappe.redirect_to_message(
-			_("Some information is missing"),
-			_("Looks like someone sent you to an incomplete URL. Please ask them to look into it."),
-		)
-		frappe.local.flags.redirect_location = frappe.local.response.location
-		raise frappe.Redirect
-
-
-@frappe.whitelist(allow_guest=True)
-def confirm_payment(redirect_flow_id, reference_doctype, reference_docname):
-
-	client = gocardless_initialization(reference_docname)
-
-	try:
-		redirect_flow = client.redirect_flows.complete(
-			redirect_flow_id, params={"session_token": frappe.session.user}
-		)
-
-		confirmation_url = redirect_flow.confirmation_url
-		gocardless_success_page = frappe.get_hooks("gocardless_success_page")
-		if gocardless_success_page:
-			confirmation_url = frappe.get_attr(gocardless_success_page[-1])(
-				reference_doctype, reference_docname
-			)
-
-		data = {
-			"mandate": redirect_flow.links.mandate,
-			"customer": redirect_flow.links.customer,
-			"redirect_to": confirmation_url,
-			"redirect_message": "Mandate successfully created",
-			"reference_doctype": reference_doctype,
-			"reference_docname": reference_docname,
-		}
-
-		try:
-			create_mandate(data)
-		except Exception as e:
-			frappe.log_error("GoCardless Mandate Registration Error")
-
-		gateway_controller = get_gateway_controller(reference_docname)
-		frappe.get_doc("GoCardless Settings", gateway_controller).create_payment_request(data)
-
-		return {"redirect_to": confirmation_url}
-
-	except Exception as e:
-		frappe.log_error("GoCardless Payment Error")
-		return {"redirect_to": "/integrations/payment-failed"}
-
-
-def create_mandate(data):
-	data = frappe._dict(data)
-	frappe.logger().debug(data)
-
-	mandate = data.get("mandate")
-
-	if frappe.db.exists("GoCardless Mandate", mandate):
-		return
-
-	else:
-		reference_doc = frappe.db.get_value(
-			data.get("reference_doctype"),
-			data.get("reference_docname"),
-			["reference_doctype", "reference_name"],
-			as_dict=1,
-		)
-		erpnext_customer = frappe.db.get_value(
-			reference_doc.reference_doctype, reference_doc.reference_name, ["customer_name"], as_dict=1
-		)
-
-		try:
-			frappe.get_doc(
-				{
-					"doctype": "GoCardless Mandate",
-					"mandate": mandate,
-					"customer": erpnext_customer.customer_name,
-					"gocardless_customer": data.get("customer"),
-				}
-			).insert(ignore_permissions=True)
-
-		except Exception:
-			frappe.log_error("Gocardless: Unable to create mandate")
diff --git a/erpnext/translations/af.csv b/erpnext/translations/af.csv
index 218bd69..d4b823d 100644
--- a/erpnext/translations/af.csv
+++ b/erpnext/translations/af.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Outo-herhaal dokument opgedateer,
 Automotive,Automotive,
 Available,beskikbaar,
-Available Leaves,Beskikbare blare,
 Available Qty,Beskikbare hoeveelheid,
 Available Selling,Beskikbaar verkoop,
 Available for use date is required,Beskikbaar vir gebruik datum is nodig,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub-sinkronisasie-ID,
 Human Resource,Menslike hulpbronne,
 Human Resources,Menslike hulpbronne,
-IFSC Code,IFSC-kode,
 IGST Amount,IGST Bedrag,
 IP Address,IP adres,
 ITC Available (whether in full op part),ITC beskikbaar (of dit volledig is),
@@ -1666,7 +1664,6 @@
 Other,ander,
 Other Reports,Ander verslae,
 "Other outward supplies(Nil rated,Exempted)","Ander voorrade (nul beoordeel, vrygestel)",
-Others,ander,
 Out Qty,Uit Aantal,
 Out Value,Uitwaarde,
 Out of Order,Buite werking,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totaal (Sonder Belasting),
 Total Achieved,Totaal behaal,
 Total Actual,Totaal Werklik,
-Total Allocated Leaves,Totale toegekende blare,
 Total Amount,Totale bedrag,
 Total Amount Credited,Totale bedrag gekrediteer,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Totale Toepaslike Koste in Aankoopontvangste-items moet dieselfde wees as Totale Belasting en Heffings,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Laai jou briefhoof en logo op. (jy kan dit later wysig).,
 Upper Income,Boonste Inkomste,
 Use Sandbox,Gebruik Sandbox,
-Used Leaves,Gebruikte Blare,
 User,gebruiker,
 User ID,Gebruikers-ID,
 User ID not set for Employee {0},Gebruiker ID nie ingestel vir Werknemer {0},
@@ -7949,12 +7944,10 @@
 Approvers,Betogers,
 The first Approver in the list will be set as the default Approver.,Die eerste goedkeuring in die lys sal as die standaard goedkeuring gestel word.,
 Shift Request Approver,Goedkeuring vir skofversoek,
-PAN Number,PAN-nommer,
 Provident Fund Account,Voorsorgfondsrekening,
 MICR Code,MICR-kode,
 Repay unclaimed amount from salary,Betaal onopgeëiste bedrag terug van die salaris,
 Deduction from salary,Aftrekking van salaris,
-Expired Leaves,Verlore blare,
 If this is not checked the loan by default will be considered as a Demand Loan,"As dit nie gekontroleer word nie, sal die lening by verstek as &#39;n vraaglening beskou word",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Hierdie rekening word gebruik om lenings van die lener terug te betaal en ook om lenings aan die lener uit te betaal,
 This account is capital account which is used to allocate capital for loan disbursal account ,Hierdie rekening is &#39;n kapitaalrekening wat gebruik word om kapitaal toe te ken vir die uitbetaling van lenings,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Is verpligtend,
 WhatsApp,WhatsApp,
 Make a call,Maak &#39;n oproep,
+Approve,goed te keur,
+Reject,verwerp,
diff --git a/erpnext/translations/am.csv b/erpnext/translations/am.csv
index 3ea1c78..764868d 100644
--- a/erpnext/translations/am.csv
+++ b/erpnext/translations/am.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,በቀጥታ ተዘምኗል,
 Automotive,አውቶሞቲቭ,
 Available,ይገኛል,
-Available Leaves,የሚገኝ ቅጠሎች,
 Available Qty,ይገኛል ብዛት,
 Available Selling,ሊሸጥ የሚቻል,
 Available for use date is required,ለመጠቀም ቀን ሊገኝ ይችላል,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,የሃብ ማመሳሰል መታወቂያ,
 Human Resource,የሰው ኃይል,
 Human Resources,የሰው ሀይል አስተዳደር,
-IFSC Code,የ IFSC ኮድ,
 IGST Amount,IGST ሂሳብ,
 IP Address,የአይፒ አድራሻ,
 ITC Available (whether in full op part),ITC አለ (በሙሉ ኦፕሬም ክፍል ውስጥም ቢሆን),
@@ -1666,7 +1664,6 @@
 Other,ሌላ,
 Other Reports,ሌሎች ሪፖርቶች,
 "Other outward supplies(Nil rated,Exempted)",ሌሎች የውጪ አቅርቦቶች (ኒል ደረጃ የተሰጠው ፣ ነፃ ...),
-Others,ሌሎች,
 Out Qty,ብዛት ውጪ,
 Out Value,ውጪ ዋጋ,
 Out of Order,ከትዕዛዝ ውጪ,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),ጠቅላላ (ያለ ግብር),
 Total Achieved,ጠቅላላ አሳክቷል,
 Total Actual,ትክክለኛ ጠቅላላ,
-Total Allocated Leaves,ጠቅላላ ድጐማዎችን,
 Total Amount,አጠቃላይ ድምሩ,
 Total Amount Credited,ጠቅላላ መጠን ተቀጠረ,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,የግዢ ደረሰኝ ንጥሎች ሰንጠረዥ ውስጥ ጠቅላላ የሚመለከታቸው ክፍያዎች ጠቅላላ ግብሮች እና ክፍያዎች እንደ አንድ አይነት መሆን አለበት,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,የእርስዎን ደብዳቤ ራስ እና አርማ ይስቀሉ. (ቆይተው አርትዕ ማድረግ ይችላሉ).,
 Upper Income,የላይኛው ገቢ,
 Use Sandbox,ይጠቀሙ ማጠሪያ,
-Used Leaves,ጥቅም ላይ የዋሉ ቅጠሎች,
 User,ተጠቃሚው,
 User ID,የተጠቃሚው መለያ,
 User ID not set for Employee {0},የተጠቃሚ መታወቂያ ሰራተኛ ለ ካልተዋቀረ {0},
@@ -7949,12 +7944,10 @@
 Approvers,አወዛጋቢ,
 The first Approver in the list will be set as the default Approver.,በዝርዝሩ ውስጥ የመጀመሪያው አጽዳቂ እንደ ነባሪው ማጽደቂያ ይቀመጣል።,
 Shift Request Approver,የሺፍት ጥያቄ ማጽደቅ,
-PAN Number,የፓን ቁጥር,
 Provident Fund Account,የፕሮቪደንት ፈንድ ሂሳብ,
 MICR Code,MICR ኮድ,
 Repay unclaimed amount from salary,ከደመወዝ ያልተጠየቀውን መጠን ይክፈሉ,
 Deduction from salary,ከደመወዝ መቀነስ,
-Expired Leaves,ጊዜው ያለፈባቸው ቅጠሎች,
 If this is not checked the loan by default will be considered as a Demand Loan,ይህ ካልተረጋገጠ ብድሩ በነባሪነት እንደ ብድር ይቆጠራል,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ይህ ሂሳብ ከተበዳሪው የብድር ክፍያዎችን ለማስያዝ እና እንዲሁም ለተበዳሪው ብድሮችን ለማሰራጨት ያገለግላል,
 This account is capital account which is used to allocate capital for loan disbursal account ,ይህ አካውንት ለብድር ማስከፈያ ሂሳብ ካፒታል ለመመደብ የሚያገለግል የካፒታል ሂሳብ ነው,
@@ -8748,3 +8741,5 @@
 Is Mandatory,አስገዳጅ ነው,
 WhatsApp,ዋትስአፕ,
 Make a call,ደውል,
+Approve,ማጽደቅ,
+Reject,አይቀበሉ,
diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv
index 5858a25..4e03a18 100644
--- a/erpnext/translations/ar.csv
+++ b/erpnext/translations/ar.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,تكرار تلقائي للمستندات المحدثة,
 Automotive,سيارات,
 Available,متاح,
-Available Leaves,المغادارت والاجازات المتاحة,
 Available Qty,الكمية المتاحة,
 Available Selling,المبيعات المتاحة,
 Available for use date is required,مطلوب تاريخ متاح للاستخدام,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,معرف مزامنة المحور,
 Human Resource,Human Resource,
 Human Resources,الموارد البشرية,
-IFSC Code,رمز IFSC,
 IGST Amount,كمية IGST,
 IP Address,عنوان IP,
 ITC Available (whether in full op part),مركز التجارة الدولية متاح (سواء في جزء المرجع الكامل),
@@ -1666,7 +1664,6 @@
 Other,آخر,
 Other Reports,تقارير أخرى,
 "Other outward supplies(Nil rated,Exempted)",اللوازم الخارجية الأخرى (بدون تقييم ، معفاة),
-Others,بدلات أخرى,
 Out Qty,كمية خارجة,
 Out Value,القيمة الخارجه,
 Out of Order,خارج عن السيطرة,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),الإجمالي (بدون ضريبة),
 Total Achieved,الإجمالي المحقق,
 Total Actual,الإجمالي الفعلي,
-Total Allocated Leaves,مجموع الأوراق المخصصة,
 Total Amount,الاعتماد الأساسي,
 Total Amount Credited,مجموع المبلغ المعتمد,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,مجموع الرسوم المطبقة في شراء طاولة إيصال عناصر يجب أن يكون نفس مجموع الضرائب والرسوم,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,تحميل رئيس رسالتكم والشعار. (يمكنك تحريرها لاحقا).,
 Upper Income,أعلى دخل,
 Use Sandbox,استخدام ساندبوكس,
-Used Leaves,مغادرات مستخدمة,
 User,المستعمل,
 User ID,تعريف المستخدم,
 User ID not set for Employee {0},هوية المستخدم لم يتم تعيين موظف ل {0},
@@ -7949,12 +7944,10 @@
 Approvers,الموافقون,
 The first Approver in the list will be set as the default Approver.,سيتم تعيين الموافق الأول في القائمة باعتباره الموافق الافتراضي.,
 Shift Request Approver,الموافق على طلب التحول,
-PAN Number,رقم PAN,
 Provident Fund Account,حساب صندوق الادخار,
 MICR Code,كود MICR,
 Repay unclaimed amount from salary,سداد المبلغ غير المطالب به من الراتب,
 Deduction from salary,خصم من الراتب,
-Expired Leaves,أوراق منتهية الصلاحية,
 If this is not checked the loan by default will be considered as a Demand Loan,إذا لم يتم التحقق من ذلك ، فسيتم اعتبار القرض بشكل افتراضي كقرض تحت الطلب,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,يستخدم هذا الحساب لحجز أقساط سداد القرض من المقترض وأيضًا صرف القروض للمقترض,
 This account is capital account which is used to allocate capital for loan disbursal account ,هذا الحساب هو حساب رأس المال الذي يستخدم لتخصيص رأس المال لحساب صرف القرض,
@@ -8748,3 +8741,5 @@
 Is Mandatory,إلزامي,
 WhatsApp,ال WhatsApp,
 Make a call,إجراء مكالمة,
+Approve,وافق,
+Reject,رفض,
diff --git a/erpnext/translations/bg.csv b/erpnext/translations/bg.csv
index 8c94c5c..8dff755 100644
--- a/erpnext/translations/bg.csv
+++ b/erpnext/translations/bg.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Автоматичното повторение на документа е актуализиран,
 Automotive,автомобилен,
 Available,Наличен,
-Available Leaves,Налични листа,
 Available Qty,В наличност Количество,
 Available Selling,Налични продажби,
 Available for use date is required,Необходима е дата за употреба,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Идент,
 Human Resource,Човешки ресурси,
 Human Resources,Човешки ресурси,
-IFSC Code,Кодекс на IFSC,
 IGST Amount,IGST Сума,
 IP Address,IP адрес,
 ITC Available (whether in full op part),Наличен ITC (независимо дали в пълната част),
@@ -1666,7 +1664,6 @@
 Other,Друг,
 Other Reports,Други справки,
 "Other outward supplies(Nil rated,Exempted)","Други външни доставки (с нулева оценка, освободени)",
-Others,Други,
 Out Qty,Изх. Количество,
 Out Value,Изх. стойност,
 Out of Order,Извънредно,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Общо (без данъци),
 Total Achieved,Общо постигнати,
 Total Actual,Общо Край,
-Total Allocated Leaves,Общо разпределени листа,
 Total Amount,Обща сума,
 Total Amount Credited,Общата сума е кредитирана,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Общо приложими такси в Покупка получаване артикули маса трябва да са същите, както Общо данъци и такси",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Качете ваш дизайн за заглавно писмо и лого. (Можете да ги редактирате по-късно).,
 Upper Income,Upper подоходно,
 Use Sandbox,Използвайте Sandbox,
-Used Leaves,Използвани листа,
 User,потребител,
 User ID,User ID,
 User ID not set for Employee {0},User ID не е конфигуриран за служител {0},
@@ -7949,12 +7944,10 @@
 Approvers,Одобряващи,
 The first Approver in the list will be set as the default Approver.,Първият одобряващ в списъка ще бъде зададен като одобряващ по подразбиране.,
 Shift Request Approver,Одобряващ заявка за смяна,
-PAN Number,Номер на PAN,
 Provident Fund Account,Провиден фонд,
 MICR Code,MICR код,
 Repay unclaimed amount from salary,Изплатете непотърсена сума от заплата,
 Deduction from salary,Приспадане от заплата,
-Expired Leaves,Листа с изтекъл срок на годност,
 If this is not checked the loan by default will be considered as a Demand Loan,"Ако това не е отметнато, заемът по подразбиране ще се счита за кредит за търсене",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Тази сметка се използва за резервиране на изплащане на заеми от кредитополучателя, както и за изплащане на заеми на кредитополучателя",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Тази сметка е капиталова сметка, която се използва за разпределяне на капитал за сметка за оттегляне на заеми",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Задължително,
 WhatsApp,WhatsApp,
 Make a call,Обадете се,
+Approve,одобрявам,
+Reject,Отхвърляне,
diff --git a/erpnext/translations/bn.csv b/erpnext/translations/bn.csv
index 49617da..8a698df 100644
--- a/erpnext/translations/bn.csv
+++ b/erpnext/translations/bn.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,স্বতঃ পুনরাবৃত্ত নথি আপডেট করা হয়েছে,
 Automotive,স্বয়ংচালিত,
 Available,উপলভ্য,
-Available Leaves,উপলব্ধ পাতা,
 Available Qty,প্রাপ্তিসাধ্য Qty,
 Available Selling,উপলভ্য বিক্রি,
 Available for use date is required,ব্যবহারের তারিখের জন্য উপলভ্য প্রয়োজন,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,হাব সিঙ্ক আইডি,
 Human Resource,মানব সম্পদ,
 Human Resources,মানব সম্পদ,
-IFSC Code,আইএফসিসি কোড,
 IGST Amount,IGST পরিমাণ,
 IP Address,আইপি ঠিকানা,
 ITC Available (whether in full op part),আইটিসি উপলব্ধ (সম্পূর্ণ বিকল্প অংশে থাকুক না কেন),
@@ -1666,7 +1664,6 @@
 Other,অন্যান্য,
 Other Reports,অন্যান্য রিপোর্ট,
 "Other outward supplies(Nil rated,Exempted)","অন্যান্য বাহ্যিক সরবরাহ (নিল রেটড, অব্যাহতিপ্রাপ্ত)",
-Others,অন্যরা,
 Out Qty,Qty আউট,
 Out Value,আউট মূল্য,
 Out of Order,অর্ডার আউট,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),মোট (কর ছাড়),
 Total Achieved,মোট অর্জন,
 Total Actual,প্রকৃত মোট,
-Total Allocated Leaves,মোট বরাদ্দ পাতা,
 Total Amount,মোট পরিমাণ,
 Total Amount Credited,মোট পরিমাণ কৃতিত্ব,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ক্রয় রশিদ সামগ্রী টেবিলের মোট প্রযোজ্য চার্জ মোট কর ও চার্জ হিসাবে একই হতে হবে,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,আপনার চিঠি মাথা এবং লোগো আপলোড করুন. (আপনি তাদের পরে সম্পাদনা করতে পারেন).,
 Upper Income,আপার আয়,
 Use Sandbox,ব্যবহারের স্যান্ডবক্স,
-Used Leaves,ব্যবহৃত পাখি,
 User,ব্যবহারকারী,
 User ID,ব্যবহারকারী আইডি,
 User ID not set for Employee {0},ইউজার আইডি কর্মচারী জন্য নির্ধারণ করে না {0},
@@ -7949,12 +7944,10 @@
 Approvers,বিতর্ক,
 The first Approver in the list will be set as the default Approver.,তালিকার প্রথম অনুমোদিতটি ডিফল্ট অনুমোদনকারী হিসাবে সেট করা হবে।,
 Shift Request Approver,শিফট অনুরোধ অনুমোদনকারী,
-PAN Number,প্যান নম্বর,
 Provident Fund Account,প্রভিডেন্ট ফান্ড অ্যাকাউন্ট,
 MICR Code,এমআইসিআর কোড,
 Repay unclaimed amount from salary,বেতন থেকে দায়হীন পরিমাণ পরিশোধ করুন ay,
 Deduction from salary,বেতন থেকে ছাড়,
-Expired Leaves,মেয়াদ শেষ হয়ে গেছে,
 If this is not checked the loan by default will be considered as a Demand Loan,এটি যদি চেক না করা হয় তবে ডিফল্ট হিসাবে loanণকে ডিমান্ড anণ হিসাবে বিবেচনা করা হবে,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,এই অ্যাকাউন্টটি orণগ্রহীতা থেকে repণ পরিশোধের বুকিং এবং orণগ্রহীতাকে loansণ বিতরণের জন্য ব্যবহৃত হয়,
 This account is capital account which is used to allocate capital for loan disbursal account ,এই অ্যাকাউন্টটি মূলধন অ্যাকাউন্ট যা disণ বিতরণ অ্যাকাউন্টের জন্য মূলধন বরাদ্দ করতে ব্যবহৃত হয়,
@@ -8748,3 +8741,5 @@
 Is Mandatory,আবশ্যক,
 WhatsApp,হোয়াটসঅ্যাপ,
 Make a call,ফোন করুন,
+Approve,অনুমোদন করা,
+Reject,প্রত্যাখ্যান,
diff --git a/erpnext/translations/bs.csv b/erpnext/translations/bs.csv
index 0805228..7ba4a88 100644
--- a/erpnext/translations/bs.csv
+++ b/erpnext/translations/bs.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatsko ponavljanje dokumenta je ažurirano,
 Automotive,Automobilska industrija,
 Available,Dostupno,
-Available Leaves,Raspoložive liste,
 Available Qty,Dostupno Količina,
 Available Selling,Dostupna prodaja,
 Available for use date is required,Potreban je datum upotrebe,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Human Resource,
 Human Resources,Ljudski resursi,
-IFSC Code,IFSC kod,
 IGST Amount,IGST Iznos,
 IP Address,IP adresa,
 ITC Available (whether in full op part),Dostupan ITC (bilo u cjelini op. Dio),
@@ -1666,7 +1664,6 @@
 Other,Drugi,
 Other Reports,Ostali izveštaji,
 "Other outward supplies(Nil rated,Exempted)","Ostale vanjske zalihe (Nil ocijenjeno, Izuzeti)",
-Others,Drugi,
 Out Qty,Od kol,
 Out Value,out vrijednost,
 Out of Order,Ne radi,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Ukupno (bez poreza),
 Total Achieved,Ukupno Ostvareni,
 Total Actual,Ukupno Actual,
-Total Allocated Leaves,Ukupno izdvojene liste,
 Total Amount,Ukupan iznos,
 Total Amount Credited,Ukupan iznos kredita,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Ukupno Primjenjivo Optužbe na račun za prodaju Predmeti sto mora biti isti kao Ukupni porezi i naknada,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Unos glavu pismo i logo. (Možete ih kasnije uređivanje).,
 Upper Income,Viši Prihodi,
 Use Sandbox,Koristite Sandbox,
-Used Leaves,Korišćeni listovi,
 User,User,
 User ID,Korisnički ID,
 User ID not set for Employee {0},Korisnik ID nije postavljen za zaposlenika {0},
@@ -7949,12 +7944,10 @@
 Approvers,Odobrivači,
 The first Approver in the list will be set as the default Approver.,Prvi odobravatelj na listi postavit će se kao zadani odobravatelj.,
 Shift Request Approver,Odobrivač zahtjeva za smjenom,
-PAN Number,PAN broj,
 Provident Fund Account,Račun osiguravajućeg fonda,
 MICR Code,MICR kod,
 Repay unclaimed amount from salary,Otplatite neiskorišteni iznos iz plate,
 Deduction from salary,Odbitak od plate,
-Expired Leaves,Isteklo lišće,
 If this is not checked the loan by default will be considered as a Demand Loan,"Ako ovo nije potvrđeno, zajam će se prema zadanim postavkama smatrati zajmom na zahtjev",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ovaj račun koristi se za rezerviranje otplate zajma od zajmoprimca i za isplatu zajmova zajmoprimcu,
 This account is capital account which is used to allocate capital for loan disbursal account ,Ovaj račun je račun kapitala koji se koristi za alokaciju kapitala za račun izdvajanja kredita,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Je obavezna,
 WhatsApp,WhatsApp,
 Make a call,Pozovite,
+Approve,odobriti,
+Reject,odbiti,
diff --git a/erpnext/translations/ca.csv b/erpnext/translations/ca.csv
index ba108e2..cce1f3a 100644
--- a/erpnext/translations/ca.csv
+++ b/erpnext/translations/ca.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,S&#39;ha actualitzat el document de repetició automàtica,
 Automotive,Automòbil,
 Available,Disponible,
-Available Leaves,Fulles disponibles,
 Available Qty,Disponible Quantitat,
 Available Selling,Venda disponible,
 Available for use date is required,Disponible per a la data d&#39;ús,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Identificador de sincronització del concentrador,
 Human Resource,Recursos humans,
 Human Resources,Recursos humans,
-IFSC Code,Codi IFSC,
 IGST Amount,Import de l&#39;IGST,
 IP Address,Adreça IP,
 ITC Available (whether in full op part),TIC disponible (en qualsevol part opcional),
@@ -1666,7 +1664,6 @@
 Other,Un altre,
 Other Reports,Altres informes,
 "Other outward supplies(Nil rated,Exempted)","Altres subministraments externs (Nil, eximitat)",
-Others,Altres,
 Out Qty,Quantitat de sortida,
 Out Value,Valor fora,
 Out of Order,No funciona,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (sense impostos),
 Total Achieved,Total aconseguit,
 Total Actual,Actual total,
-Total Allocated Leaves,Total Allocated Leaves,
 Total Amount,Quantitat total,
 Total Amount Credited,Import total acreditat,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total d&#39;comissions aplicables en la compra Taula de rebuts Els articles han de ser iguals que les taxes totals i càrrecs,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Puja el teu cap lletra i logotip. (Pots editar més tard).,
 Upper Income,Ingrés Alt,
 Use Sandbox,ús Sandbox,
-Used Leaves,Fulles utilitzades,
 User,Usuari,
 User ID,ID d'usuari,
 User ID not set for Employee {0},ID d'usuari no entrat per l'Empleat {0},
@@ -7949,12 +7944,10 @@
 Approvers,Aprovadors,
 The first Approver in the list will be set as the default Approver.,El primer aprovador de la llista s&#39;establirà com a aprovador predeterminat.,
 Shift Request Approver,Aprovador de sol·licituds de torn,
-PAN Number,Número PAN,
 Provident Fund Account,Compte de fons de previsió,
 MICR Code,Codi MICR,
 Repay unclaimed amount from salary,Reemborsar l’import no reclamat del salari,
 Deduction from salary,Deducció del salari,
-Expired Leaves,Fulles caducades,
 If this is not checked the loan by default will be considered as a Demand Loan,"Si no es comprova això, el préstec per defecte es considerarà un préstec a la demanda",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Aquest compte s’utilitza per reservar els pagaments de préstecs del prestatari i també per desemborsar préstecs al prestatari,
 This account is capital account which is used to allocate capital for loan disbursal account ,Aquest compte és un compte de capital que s’utilitza per assignar capital per al compte de desemborsament del préstec,
@@ -8748,3 +8741,5 @@
 Is Mandatory,És obligatori,
 WhatsApp,Què tal,
 Make a call,Fer una trucada,
+Approve,aprovar,
+Reject,Rebutjar,
diff --git a/erpnext/translations/cs.csv b/erpnext/translations/cs.csv
index 4cd3ac5..1072ed3 100644
--- a/erpnext/translations/cs.csv
+++ b/erpnext/translations/cs.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Dokument byl aktualizován automaticky,
 Automotive,Automobilový,
 Available,K dispozici,
-Available Leaves,Dostupné listy,
 Available Qty,Množství k dispozici,
 Available Selling,Dostupné prodeje,
 Available for use date is required,K dispozici je datum k dispozici pro použití,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID synchronizace Hubu,
 Human Resource,Lidské zdroje,
 Human Resources,Lidské zdroje,
-IFSC Code,Kód IFSC,
 IGST Amount,IGST částka,
 IP Address,IP adresa,
 ITC Available (whether in full op part),ITC k dispozici (ať už v plné op části),
@@ -1666,7 +1664,6 @@
 Other,Ostatní,
 Other Reports,Ostatní zprávy,
 "Other outward supplies(Nil rated,Exempted)","Ostatní pasivní dodávky (bez hodnocení, osvobozeno)",
-Others,Ostatní,
 Out Qty,Out Množství,
 Out Value,limitu,
 Out of Order,Mimo provoz,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Celkem (bez daně),
 Total Achieved,Celkem Dosažená,
 Total Actual,Celkem Aktuální,
-Total Allocated Leaves,Celkové přidělené listy,
 Total Amount,Celková částka,
 Total Amount Credited,Celková částka připsána,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Celkový počet použitelných poplatcích v dokladu o koupi zboží, které tabulky musí být stejná jako celkem daní a poplatků",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Nahrajte svůj dopis hlavu a logo. (Můžete je upravit později).,
 Upper Income,Horní příjmů,
 Use Sandbox,použití Sandbox,
-Used Leaves,Použité listy,
 User,Uživatel,
 User ID,User ID,
 User ID not set for Employee {0},User ID není nastavena pro zaměstnance {0},
@@ -7949,12 +7944,10 @@
 Approvers,Schvalovatelé,
 The first Approver in the list will be set as the default Approver.,První schvalovatel v seznamu bude nastaven jako výchozí schvalovatel.,
 Shift Request Approver,Schvalovatel žádosti o změnu,
-PAN Number,PAN číslo,
 Provident Fund Account,Účet fondu Provident,
 MICR Code,Kód MICR,
 Repay unclaimed amount from salary,Vrátit nevyzvednutou částku z platu,
 Deduction from salary,Srážka z platu,
-Expired Leaves,Vypršela platnost listů,
 If this is not checked the loan by default will be considered as a Demand Loan,"Pokud to není zaškrtnuto, bude se úvěr ve výchozím nastavení považovat za půjčku na vyžádání",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tento účet slouží k rezervaci splátek půjčky od dlužníka a také k vyplácení půjček dlužníkovi,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Tento účet je kapitálovým účtem, který se používá k přidělení kapitálu pro účet vyplácení půjček",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Je povinná,
 WhatsApp,WhatsApp,
 Make a call,Zavolat,
+Approve,Schvalovat,
+Reject,Odmítnout,
diff --git a/erpnext/translations/da.csv b/erpnext/translations/da.csv
index b89f39c..138da5d 100644
--- a/erpnext/translations/da.csv
+++ b/erpnext/translations/da.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatisk gentag dokument opdateret,
 Automotive,Bil,
 Available,Tilgængelig,
-Available Leaves,Tilgængelige blade,
 Available Qty,Tilgængelig antal,
 Available Selling,Tilgængelig salg,
 Available for use date is required,Tilgængelig til brug dato er påkrævet,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Menneskelige ressourcer,
 Human Resources,Medarbejdere,
-IFSC Code,IFSC-kode,
 IGST Amount,IGST Beløb,
 IP Address,IP-adresse,
 ITC Available (whether in full op part),ITC tilgængelig (uanset om det er i fuld op-del),
@@ -1666,7 +1664,6 @@
 Other,Andre,
 Other Reports,Andre rapporter,
 "Other outward supplies(Nil rated,Exempted)","Andre udgående leverancer (Nul bedømt, undtaget)",
-Others,Andre,
 Out Qty,Out Antal,
 Out Value,Out Value,
 Out of Order,Virker ikke,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),I alt (uden skat),
 Total Achieved,Total Opnået,
 Total Actual,Samlede faktiske,
-Total Allocated Leaves,Samlede tildelte blade,
 Total Amount,Samlet beløb,
 Total Amount Credited,Samlede beløb krediteret,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total gældende takster i købskvitteringsvaretabel skal være det samme som de samlede skatter og afgifter,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Upload dit brevhoved og logo. (du kan redigere dem senere).,
 Upper Income,Upper Indkomst,
 Use Sandbox,Brug Sandbox,
-Used Leaves,Brugte blade,
 User,Bruger,
 User ID,Bruger-id,
 User ID not set for Employee {0},Bruger-id ikke indstillet til Medarbejder {0},
@@ -7949,12 +7944,10 @@
 Approvers,Approverser,
 The first Approver in the list will be set as the default Approver.,Den første godkender på listen indstilles som standardgodkenderen.,
 Shift Request Approver,Godkendelse af skiftanmodning,
-PAN Number,PAN-nummer,
 Provident Fund Account,Provident Fund-konto,
 MICR Code,MICR-kode,
 Repay unclaimed amount from salary,Tilbagebetal ikke-krævet beløb fra løn,
 Deduction from salary,Fradrag fra løn,
-Expired Leaves,Udløbne blade,
 If this is not checked the loan by default will be considered as a Demand Loan,"Hvis dette ikke er markeret, vil lånet som standard blive betragtet som et behovslån",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Denne konto bruges til at booke tilbagebetaling af lån fra låntager og også udbetale lån til låntager,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Denne konto er en kapitalkonto, der bruges til at allokere kapital til udbetaling af lånekonto",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Er obligatorisk,
 WhatsApp,WhatsApp,
 Make a call,Ringe,
+Approve,Godkende,
+Reject,Afvise,
diff --git a/erpnext/translations/de.csv b/erpnext/translations/de.csv
index 03e9de4..79b9574 100644
--- a/erpnext/translations/de.csv
+++ b/erpnext/translations/de.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatisches Wiederholungsdokument aktualisiert,
 Automotive,Fahrzeugbau,
 Available,Verfügbar,
-Available Leaves,Verfügbare Blätter,
 Available Qty,Verfügbare Menge,
 Available Selling,Verfügbarer Verkauf,
 Available for use date is required,Verfügbar für das Nutzungsdatum ist erforderlich,
@@ -1129,7 +1128,6 @@
 Hub Sync ID,Hub-Synchronisierungs-ID,
 Human Resource,Personal,
 Human Resources,Personalwesen,
-IFSC Code,IFSC-Code,
 IGST Amount,IGST Betrag,
 IP Address,IP Adresse,
 ITC Available (whether in full op part),ITC verfügbar (ob vollständig oder teilweise),
@@ -1675,7 +1673,6 @@
 Other,Andere,
 Other Reports,Weitere Berichte,
 "Other outward supplies(Nil rated,Exempted)","Sonstige Auslandslieferungen (ohne Rating, ausgenommen)",
-Others,Andere,
 Out Qty,Ausgabe-Menge,
 Out Value,Out Wert,
 Out of Order,Außer Betrieb,
@@ -2825,7 +2822,6 @@
 Total (Without Tax),Summe (ohne Steuern),
 Total Achieved,Gesamtsumme erreicht,
 Total Actual,Summe Tatsächlich,
-Total Allocated Leaves,Insgesamt zugeteilte Blätter,
 Total Amount,Gesamtsumme,
 Total Amount Credited,Gesamtbetrag der Gutschrift,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Gesamt Die Gebühren in Kauf Eingangspositionen Tabelle muss als Gesamt Steuern und Abgaben gleich sein,
@@ -2935,7 +2931,6 @@
 Upload your letter head and logo. (you can edit them later).,Briefkopf und Logo hochladen. (Beides kann später noch bearbeitet werden.),
 Upper Income,Gehobenes Einkommen,
 Use Sandbox,Sandkastenmodus verwenden,
-Used Leaves,Genutzter Urlaub,
 User,Nutzer,
 User ID,Benutzer-ID,
 User ID not set for Employee {0},Benutzer-ID ist für Mitarbeiter {0} nicht eingegeben,
@@ -4591,7 +4586,7 @@
 Tax Withholding Category,Steuereinbehalt Kategorie,
 Edit Posting Date and Time,Buchungsdatum und -uhrzeit bearbeiten,
 Is Paid,Ist bezahlt,
-Is Return (Debit Note),ist Rücklieferung (Lastschrift),
+Is Return (Debit Note),Ist Rechnungskorrektur (Retoure),
 Apply Tax Withholding Amount,Steuereinbehaltungsbetrag anwenden,
 Accounting Dimensions ,Buchhaltung Dimensionen,
 Supplier Invoice Details,Lieferant Rechnungsdetails,
@@ -4715,7 +4710,7 @@
 ACC-SINV-.YYYY.-,ACC-SINV-.JJJJ.-,
 Include Payment (POS),(POS) Zahlung einschließen,
 Offline POS Name,Offline-Verkaufsstellen-Name,
-Is Return (Credit Note),ist Rücklieferung (Gutschrift),
+Is Return (Credit Note),Ist Rechnungskorrektur (Retoure),
 Update Billed Amount in Sales Order,Aktualisierung des Rechnungsbetrags im Auftrag,
 Customer PO Details,Auftragsdetails,
 Customer's Purchase Order,Bestellung des Kunden,
@@ -7003,7 +6998,7 @@
 Tariff Number,Tarifnummer,
 Delivery To,Lieferung an,
 MAT-DN-.YYYY.-,MAT-DN-.YYYY.-,
-Is Return,Ist Rückgabe,
+Is Return,Ist Retoure,
 Issue Credit Note,Gutschrift ausgeben,
 Return Against Delivery Note,Zurück zum Lieferschein,
 Customer's Purchase Order No,Bestellnummer des Kunden,
@@ -7966,12 +7961,10 @@
 Approvers,Genehmiger,
 The first Approver in the list will be set as the default Approver.,Der erste Genehmiger in der Liste wird als Standardgenehmiger festgelegt.,
 Shift Request Approver,Schichtanforderungsgenehmiger,
-PAN Number,PAN-Nummer,
 Provident Fund Account,Vorsorgefonds-Konto,
 MICR Code,MICR-Code,
 Repay unclaimed amount from salary,Nicht zurückgeforderten Betrag vom Gehalt zurückzahlen,
 Deduction from salary,Abzug vom Gehalt,
-Expired Leaves,Abgelaufene Blätter,
 If this is not checked the loan by default will be considered as a Demand Loan,"Wenn dies nicht aktiviert ist, wird das Darlehen standardmäßig als Nachfragedarlehen betrachtet",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Dieses Konto wird zur Buchung von Kreditrückzahlungen vom Kreditnehmer und zur Auszahlung von Krediten an den Kreditnehmer verwendet,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Dieses Konto ist ein Kapitalkonto, das zur Zuweisung von Kapital für das Darlehensauszahlungskonto verwendet wird",
@@ -8670,7 +8663,7 @@
 Please set default Cash or Bank account in Mode of Payments {},Bitte setzen Sie das Standard-Bargeld- oder Bankkonto im Zahlungsmodus {},
 Please ensure {} account is a Balance Sheet account. You can change the parent account to a Balance Sheet account or select a different account.,"Bitte stellen Sie sicher, dass das Konto {} ein Bilanzkonto ist. Sie können das übergeordnete Konto in ein Bilanzkonto ändern oder ein anderes Konto auswählen.",
 Please ensure {} account is a Payable account. Change the account type to Payable or select a different account.,"Bitte stellen Sie sicher, dass das Konto {} ein zahlbares Konto ist. Ändern Sie den Kontotyp in &quot;Verbindlichkeiten&quot; oder wählen Sie ein anderes Konto aus.",
-"Row {0}: Expense Head changed to {1} because account {2} is not linked to warehouse {3} or it is not the default inventory account","Zeile {0}: Aufwandskonto geändert zu {1}, weil das Konto {2} nicht mit dem Lager {3} verknüpft ist oder es nicht das Standard-Inventarkonto ist",
+Row {0}: Expense Head changed to {1} because account {2} is not linked to warehouse {3} or it is not the default inventory account,"Zeile {0}: Aufwandskonto geändert zu {1}, weil das Konto {2} nicht mit dem Lager {3} verknüpft ist oder es nicht das Standard-Inventarkonto ist",
 Row {0}: Expense Head changed to {1} because expense is booked against this account in Purchase Receipt {2},"Zeile {0}: Aufwandskonto geändert zu {1}, da dieses bereits in Eingangsbeleg {2} verwendet wurde",
 Row {0}: Expense Head changed to {1} as no Purchase Receipt is created against Item {2}.,"Zeile {0}: Aufwandskonto geändert zu {1}, da kein Eingangsbeleg für Artikel {2} erstellt wird.",
 This is done to handle accounting for cases when Purchase Receipt is created after Purchase Invoice,"Dies erfolgt zur Abrechnung von Fällen, in denen der Eingangsbeleg nach der Eingangsrechnung erstellt wird",
@@ -8833,3 +8826,5 @@
 Is Mandatory,Ist obligatorisch,
 WhatsApp,WhatsApp,
 Make a call,Einen Anruf tätigen,
+Approve,Genehmigen,
+Reject,Ablehnen,
diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv
index 8d48c3a..7a83cc5 100644
--- a/erpnext/translations/el.csv
+++ b/erpnext/translations/el.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Το έγγραφο αυτόματης επανάληψης ενημερώθηκε,
 Automotive,Αυτοκίνητο,
 Available,Διαθέσιμος,
-Available Leaves,Διαθέσιμα φύλλα,
 Available Qty,Διαθέσιμη ποσότητα,
 Available Selling,Διαθέσιμη πώληση,
 Available for use date is required,Απαιτείται ημερομηνία διαθέσιμη για χρήση,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Αναγνωριστικό συγχρονισμού Hub,
 Human Resource,Ανθρώπινο δυναμικό,
 Human Resources,Ανθρώπινοι πόροι,
-IFSC Code,Κωδικός IFSC,
 IGST Amount,Ποσό IGST,
 IP Address,Διεύθυνση IP,
 ITC Available (whether in full op part),ITC Διαθέσιμο (είτε σε πλήρη op μέρος),
@@ -1666,7 +1664,6 @@
 Other,Άλλος,
 Other Reports,άλλες εκθέσεις,
 "Other outward supplies(Nil rated,Exempted)","Άλλες παροχές προς το εξωτερικό (μη διαβαθμισμένες, απαλλαγμένες)",
-Others,Άλλα,
 Out Qty,Ποσότητα εκτός,
 Out Value,από Αξία,
 Out of Order,Εκτός λειτουργίας,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Σύνολο (χωρίς Φόρο),
 Total Achieved,Σύνολο που επιτεύχθηκε,
 Total Actual,Πραγματικό σύνολο,
-Total Allocated Leaves,Συνολικά κατανεμημένα φύλλα,
 Total Amount,Συνολικό ποσό,
 Total Amount Credited,Συνολικό ποσό που πιστώνεται,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Σύνολο χρεώσεων που επιβάλλονται στην Αγορά Παραλαβή Είδη πίνακα πρέπει να είναι ίδιο με το συνολικό φόροι και επιβαρύνσεις,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Ανεβάστε την κεφαλίδα επιστολόχαρτου και το λογότυπό σας. (Μπορείτε να τα επεξεργαστείτε αργότερα).,
 Upper Income,Άνω εισοδήματος,
 Use Sandbox,χρήση Sandbox,
-Used Leaves,Χρησιμοποιημένα φύλλα,
 User,Χρήστης,
 User ID,ID χρήστη,
 User ID not set for Employee {0},Το ID χρήστη δεν έχει οριστεί για τον υπάλληλο {0},
@@ -7949,12 +7944,10 @@
 Approvers,Εγκρίνει,
 The first Approver in the list will be set as the default Approver.,Η πρώτη έγκριση στη λίστα θα οριστεί ως η προεπιλεγμένη έγκριση.,
 Shift Request Approver,Έγκριση αιτήματος Shift,
-PAN Number,Αριθμός PAN,
 Provident Fund Account,Λογαριασμός Ταμείου Προνοίας,
 MICR Code,Κωδικός MICR,
 Repay unclaimed amount from salary,Επιστρέψτε το ποσό που δεν ζητήθηκε από το μισθό,
 Deduction from salary,Έκπτωση από το μισθό,
-Expired Leaves,Έληξε φύλλα,
 If this is not checked the loan by default will be considered as a Demand Loan,"Εάν αυτό δεν ελεγχθεί, το δάνειο από προεπιλογή θα θεωρείται ως Δάνειο Ζήτησης",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Αυτός ο λογαριασμός χρησιμοποιείται για την κράτηση αποπληρωμών δανείου από τον δανειολήπτη και επίσης για την εκταμίευση δανείων προς τον οφειλέτη,
 This account is capital account which is used to allocate capital for loan disbursal account ,Αυτός ο λογαριασμός είναι λογαριασμός κεφαλαίου που χρησιμοποιείται για την κατανομή κεφαλαίου για λογαριασμό εκταμίευσης δανείου,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Ειναι υποχρεωτικό,
 WhatsApp,WhatsApp,
 Make a call,Τηλεφώνησε,
+Approve,Εγκρίνω,
+Reject,Απορρίπτω,
diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv
index 50af180..fadf7a7 100644
--- a/erpnext/translations/es.csv
+++ b/erpnext/translations/es.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Documento automático editado,
 Automotive,Automotores,
 Available,Disponible,
-Available Leaves,Licencias Disponibles,
 Available Qty,Cantidad disponible,
 Available Selling,Venta disponible,
 Available for use date is required,Disponible para la fecha de uso es obligatorio,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID de Sincronización del Hub,
 Human Resource,Recursos humanos,
 Human Resources,Recursos humanos,
-IFSC Code,Código IFSC,
 IGST Amount,Monto IGST,
 IP Address,Dirección IP,
 ITC Available (whether in full op part),ITC disponible (ya sea en la parte op completa),
@@ -1666,7 +1664,6 @@
 Other,Otro,
 Other Reports,Otros Reportes,
 "Other outward supplies(Nil rated,Exempted)","Otros suministros externos (sin calificación, exentos)",
-Others,Otros,
 Out Qty,Cant. enviada,
 Out Value,Fuera de Valor,
 Out of Order,Fuera de servicio,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (Sin Impuestos),
 Total Achieved,Total Conseguido,
 Total Actual,Total Actual,
-Total Allocated Leaves,Total de Licencias Asignadas,
 Total Amount,Importe total,
 Total Amount Credited,Monto Total Acreditado,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total de comisiones aplicables en la compra Tabla de recibos Los artículos deben ser iguales que las tasas totales y cargos,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Cargue su membrete y el logotipo. (Estos pueden editarse más tarde).,
 Upper Income,Ingresos superior,
 Use Sandbox,Utilizar Sandbox,
-Used Leaves,Licencias Usadas,
 User,Usuario,
 User ID,ID de usuario,
 User ID not set for Employee {0},ID de usuario no establecido para el empleado {0},
@@ -7949,12 +7944,10 @@
 Approvers,Aprobadores,
 The first Approver in the list will be set as the default Approver.,El primer Aprobador de la lista se establecerá como Aprobador predeterminado.,
 Shift Request Approver,Aprobador de solicitud de turno,
-PAN Number,Número PAN,
 Provident Fund Account,Cuenta del fondo de previsión,
 MICR Code,Código MICR,
 Repay unclaimed amount from salary,Reembolsar la cantidad no reclamada del salario,
 Deduction from salary,Deducción del salario,
-Expired Leaves,Hojas caducadas,
 If this is not checked the loan by default will be considered as a Demand Loan,"Si no se marca, el préstamo por defecto se considerará Préstamo a la vista.",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Esta cuenta se utiliza para registrar los reembolsos de préstamos del prestatario y también para desembolsar préstamos al prestatario.,
 This account is capital account which is used to allocate capital for loan disbursal account ,Esta cuenta es una cuenta de capital que se utiliza para asignar capital para la cuenta de desembolso de préstamos.,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Es obligatorio,
 WhatsApp,WhatsApp,
 Make a call,Haz una llamada,
+Approve,Aprobar,
+Reject,Rechazar,
diff --git a/erpnext/translations/et.csv b/erpnext/translations/et.csv
index e5da343..4e26a82 100644
--- a/erpnext/translations/et.csv
+++ b/erpnext/translations/et.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Auto kordusdokument uuendatud,
 Automotive,Autod,
 Available,Saadaval,
-Available Leaves,Saadaolevad lehed,
 Available Qty,Saadaval Kogus,
 Available Selling,Saadaval müügil,
 Available for use date is required,Kasutatav kasutuskuupäev on vajalik,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Inimressurss,
 Human Resources,Inimressursid,
-IFSC Code,IFSC kood,
 IGST Amount,IGST summa,
 IP Address,IP-aadress,
 ITC Available (whether in full op part),ITC saadaval (kas täielikult op),
@@ -1666,7 +1664,6 @@
 Other,Muud,
 Other Reports,Teised aruanded,
 "Other outward supplies(Nil rated,Exempted)","Muud välistarbed (null, erand)",
-Others,Teised,
 Out Qty,Out Kogus,
 Out Value,välja väärtus,
 Out of Order,Korrast ära,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Kokku (maksudeta),
 Total Achieved,Kokku saavutatud,
 Total Actual,Kokku Tegelik,
-Total Allocated Leaves,Kokku eraldatud lehed,
 Total Amount,Kogu summa,
 Total Amount Credited,Kogu summa krediteeritakse,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Kokku kohaldatavate tasude kohta ostutšekk Esemed tabel peab olema sama Kokku maksud ja tasud,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Laadi üles oma kirjas pea ja logo. (seda saab muuta hiljem).,
 Upper Income,Ülemine tulu,
 Use Sandbox,Kasuta liivakasti,
-Used Leaves,Kasutatud lehed,
 User,Kasutaja,
 User ID,kasutaja ID,
 User ID not set for Employee {0},Kasutaja ID ei seatud Töötaja {0},
@@ -7949,12 +7944,10 @@
 Approvers,Heakskiitjad,
 The first Approver in the list will be set as the default Approver.,Loendi esimene heakskiitja määratakse vaikimisi kinnitajaks.,
 Shift Request Approver,Vahetustaotluse kinnitaja,
-PAN Number,PAN-number,
 Provident Fund Account,Providence Fundi konto,
 MICR Code,MICR-kood,
 Repay unclaimed amount from salary,Tagasimakstud summa palgast tagasi maksta,
 Deduction from salary,Palgast mahaarvamine,
-Expired Leaves,Aegunud lehed,
 If this is not checked the loan by default will be considered as a Demand Loan,"Kui seda ei kontrollita, käsitatakse laenu vaikimisi nõudmislaenuna",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Seda kontot kasutatakse laenusaaja tagasimaksete broneerimiseks ja ka laenuvõtjale laenude väljamaksmiseks,
 This account is capital account which is used to allocate capital for loan disbursal account ,"See konto on kapitalikonto, mida kasutatakse kapitali eraldamiseks laenu väljamaksekontole",
@@ -8748,3 +8741,5 @@
 Is Mandatory,On kohustuslik,
 WhatsApp,WhatsApp,
 Make a call,Helistage,
+Approve,kinnitama,
+Reject,tagasi lükkama,
diff --git a/erpnext/translations/fa.csv b/erpnext/translations/fa.csv
index e59023d..530965d 100644
--- a/erpnext/translations/fa.csv
+++ b/erpnext/translations/fa.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,تکرار خودکار سند به روز شد,
 Automotive,خودرو,
 Available,در دسترس,
-Available Leaves,برگهای موجود,
 Available Qty,در دسترس تعداد,
 Available Selling,فروش موجود,
 Available for use date is required,برای تاریخ استفاده لازم است,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,شناسه همگام سازی هاب,
 Human Resource,منابع انسانی,
 Human Resources,منابع انسانی,
-IFSC Code,کد IFSC,
 IGST Amount,مقدار IGST,
 IP Address,نشانی آیپی,
 ITC Available (whether in full op part),ITC موجود (چه در بخش کامل عمل),
@@ -1666,7 +1664,6 @@
 Other,دیگر,
 Other Reports,سایر گزارش,
 "Other outward supplies(Nil rated,Exempted)",سایر لوازم خارجی (امتیاز صفر ، معافیت),
-Others,دیگران,
 Out Qty,از تعداد,
 Out Value,ارزش از,
 Out of Order,خارج از سفارش,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),مجموع (بدون مالیات),
 Total Achieved,مجموع بهدستآمده,
 Total Actual,مجموع واقعی,
-Total Allocated Leaves,مجموع برگه های برگزیده,
 Total Amount,مقدار کل,
 Total Amount Credited,مبلغ کل اعتبار,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,مجموع اتهامات قابل اجرا در خرید اقلام دریافت جدول باید همان مجموع مالیات و هزینه شود,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,آپلود سر نامه و آرم خود را. (شما می توانید آنها را بعد از ویرایش).,
 Upper Income,درآمد بالاتر,
 Use Sandbox,استفاده از گودال ماسهبازی,
-Used Leaves,برگهای مورد استفاده,
 User,کاربر,
 User ID,ID کاربر,
 User ID not set for Employee {0},ID کاربر برای کارمند تنظیم نشده {0},
@@ -7949,12 +7944,10 @@
 Approvers,متقن,
 The first Approver in the list will be set as the default Approver.,اولین تأیید کننده در لیست به عنوان تأیید کننده پیش فرض تنظیم می شود.,
 Shift Request Approver,تأیید کننده درخواست شیفت,
-PAN Number,شماره PAN,
 Provident Fund Account,حساب صندوق تأمین مالی,
 MICR Code,کد MICR,
 Repay unclaimed amount from salary,مبلغ مطالبه نشده از حقوق را بازپرداخت کنید,
 Deduction from salary,کسر از حقوق,
-Expired Leaves,برگهای منقضی شده,
 If this is not checked the loan by default will be considered as a Demand Loan,اگر این مورد بررسی نشود ، وام به طور پیش فرض به عنوان وام تقاضا در نظر گرفته می شود,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,این حساب برای رزرو بازپرداخت وام از وام گیرنده و همچنین پرداخت وام به وام گیرنده استفاده می شود,
 This account is capital account which is used to allocate capital for loan disbursal account ,این حساب حساب سرمایه ای است که برای تخصیص سرمایه برای حساب پرداخت وام استفاده می شود,
@@ -8748,3 +8741,5 @@
 Is Mandatory,اجباری است,
 WhatsApp,واتس اپ,
 Make a call,تماس بگیر,
+Approve,تایید,
+Reject,رد کردن,
diff --git a/erpnext/translations/fi.csv b/erpnext/translations/fi.csv
index 6a58343..6e9380c 100644
--- a/erpnext/translations/fi.csv
+++ b/erpnext/translations/fi.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automaattinen toistuva asiakirja päivitetty,
 Automotive,Automotive,
 Available,saatavissa,
-Available Leaves,Saatavilla olevat lehdet,
 Available Qty,saatava yksikkömäärä,
 Available Selling,Saatavana myyntiin,
 Available for use date is required,Käytettävä päivämäärä on pakollinen,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub-synkronointitunnus,
 Human Resource,henkilöstöresurssi,
 Human Resources,Henkilöstöresurssit,
-IFSC Code,IFSC-koodi,
 IGST Amount,IGST Määrä,
 IP Address,IP-osoite,
 ITC Available (whether in full op part),ITC käytettävissä (onko täysin op-osa),
@@ -1666,7 +1664,6 @@
 Other,muut,
 Other Reports,Muut raportit,
 "Other outward supplies(Nil rated,Exempted)","Muut ulkoiset tarvikkeet (nolla, vapautettu)",
-Others,Muut,
 Out Qty,ulkona yksikkömäärä,
 Out Value,out Arvo,
 Out of Order,Epäkunnossa,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Yhteensä (ilman veroa),
 Total Achieved,"Yhteensä, saavutettu",
 Total Actual,Kiinteä summa yhteensä,
-Total Allocated Leaves,Kokonaisrajaiset lehdet,
 Total Amount,Yhteensä,
 Total Amount Credited,Laskettu kokonaismäärä,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Saapumistositteen riveillä olevat maksut pitää olla sama kuin verot ja maksut osiossa,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Tuo kirjeen ylätunniste ja logo. (voit muokata niitä myöhemmin),
 Upper Income,Ylemmät tulot,
 Use Sandbox,Käytä Sandbox,
-Used Leaves,Käytetyt lehdet,
 User,käyttäjä,
 User ID,käyttäjätunnus,
 User ID not set for Employee {0},Käyttäjätunnusta ei asetettu työntekijälle {0},
@@ -7949,12 +7944,10 @@
 Approvers,Hyväksyjät,
 The first Approver in the list will be set as the default Approver.,Luettelon ensimmäinen hyväksyntä asetetaan oletuksen hyväksyjäksi.,
 Shift Request Approver,Vaihtopyynnön hyväksyntä,
-PAN Number,PAN-numero,
 Provident Fund Account,Provident Fund -tili,
 MICR Code,MICR-koodi,
 Repay unclaimed amount from salary,Palauta takaisin perimät palkat,
 Deduction from salary,Vähennys palkasta,
-Expired Leaves,Vanhentuneet lehdet,
 If this is not checked the loan by default will be considered as a Demand Loan,"Jos tätä ei ole valittu, laina katsotaan oletuksena kysyntälainaksi",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tätä tiliä käytetään lainan takaisinmaksun varaamiseen luotonsaajalta ja lainojen maksamiseen myös luotonottajalle,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Tämä tili on pääomatili, jota käytetään pääoman kohdistamiseen lainan maksamiseen",
@@ -8748,3 +8741,5 @@
 Is Mandatory,On pakollinen,
 WhatsApp,WhatsApp,
 Make a call,Soita,
+Approve,Hyväksyä,
+Reject,Hylätä,
diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv
index 4f4a61f..32fe9ff 100644
--- a/erpnext/translations/fr.csv
+++ b/erpnext/translations/fr.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Document de répétition automatique mis à jour,
 Automotive,Automobile,
 Available,Disponible,
-Available Leaves,Congés disponibles,
 Available Qty,Qté disponible,
 Available Selling,Vente disponible,
 Available for use date is required,La date de mise en service est nécessaire,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Ressource humaine,
 Human Resources,Ressources humaines,
-IFSC Code,Code IFSC,
 IGST Amount,IGST Montant,
 IP Address,Adresse IP,
 ITC Available (whether in full op part),CIT Disponible (que ce soit en partie op),
@@ -1665,7 +1663,6 @@
 Other,Autre,
 Other Reports,Autres rapports,
 "Other outward supplies(Nil rated,Exempted)","Autres livraisons sortantes (cotations nulles, exemptées)",
-Others,Autres,
 Out Qty,Qté Sortante,
 Out Value,Valeur Sortante,
 Out of Order,Hors service,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (hors taxes),
 Total Achieved,Total Obtenu,
 Total Actual,Total réel,
-Total Allocated Leaves,Total des congés alloués,
 Total Amount,Montant total,
 Total Amount Credited,Montant total crédité,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total des Frais Applicables dans la Table des Articles de Reçus d’Achat doit être égal au Total des Taxes et Frais,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Charger votre en-tête et logo. (vous pouvez les modifier ultérieurement).,
 Upper Income,Revenu Élevé,
 Use Sandbox,Utiliser Sandbox,
-Used Leaves,Congés utilisés,
 User,Utilisateur,
 User ID,Identifiant d'utilisateur,
 User ID not set for Employee {0},ID de l'Utilisateur non défini pour l'Employé {0},
@@ -7945,12 +7940,10 @@
 Approvers,Approbateurs,
 The first Approver in the list will be set as the default Approver.,Le premier approbateur de la liste sera défini comme approbateur par défaut.,
 Shift Request Approver,Approbateur de demande de quart,
-PAN Number,Numéro PAN,
 Provident Fund Account,Compte de prévoyance,
 MICR Code,Code MICR,
 Repay unclaimed amount from salary,Rembourser le montant non réclamé sur le salaire,
 Deduction from salary,Déduction du salaire,
-Expired Leaves,Feuilles expirées,
 If this is not checked the loan by default will be considered as a Demand Loan,"Si cette case n'est pas cochée, le prêt par défaut sera considéré comme un prêt à vue",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ce compte est utilisé pour enregistrer les remboursements de prêts de l'emprunteur et également pour décaisser les prêts à l'emprunteur,
 This account is capital account which is used to allocate capital for loan disbursal account ,Ce compte est un compte de capital qui est utilisé pour allouer du capital au compte de décaissement du prêt,
@@ -8858,3 +8851,5 @@
 Probability,Probabilité
 Closing,Clôture
 Allow Sales,Autoriser à la vente
+Approve,Approuver,
+Reject,Rejeter,
diff --git a/erpnext/translations/gu.csv b/erpnext/translations/gu.csv
index 3e22bd9..e2de8ce 100644
--- a/erpnext/translations/gu.csv
+++ b/erpnext/translations/gu.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,સ્વતઃ પુનરાવર્તિત દસ્તાવેજ અપડેટ થયો,
 Automotive,ઓટોમોટિવ,
 Available,ઉપલબ્ધ,
-Available Leaves,ઉપલબ્ધ પાંદડા,
 Available Qty,ઉપલબ્ધ Qty,
 Available Selling,ઉપલબ્ધ વેચાણ,
 Available for use date is required,ઉપયોગ તારીખ માટે ઉપલબ્ધ જરૂરી છે,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,હબ સમન્વયન ID,
 Human Resource,માનવ સંસાધન,
 Human Resources,માનવ સંસાધન,
-IFSC Code,આઈએફએસસી કોડ,
 IGST Amount,IGST રકમ,
 IP Address,IP સરનામું,
 ITC Available (whether in full op part),આઇટીસી ઉપલબ્ધ છે (સંપૂર્ણ ઓપ ભાગમાં છે કે નહીં),
@@ -1666,7 +1664,6 @@
 Other,અન્ય,
 Other Reports,અન્ય અહેવાલો,
 "Other outward supplies(Nil rated,Exempted)","અન્ય બાહ્ય પુરવઠો (નીલ રેટેડ, મુકત)",
-Others,અન્ય,
 Out Qty,Qty આઉટ,
 Out Value,મૂલ્ય,
 Out of Order,હુકમ બહાર,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),કુલ (કર વગર),
 Total Achieved,કુલ પ્રાપ્ત,
 Total Actual,વાસ્તવિક કુલ,
-Total Allocated Leaves,કુલ ફાળવેલ પાંદડા,
 Total Amount,કુલ રકમ,
 Total Amount Credited,કુલ રકમનો શ્રેય,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ખરીદી રસીદ વસ્તુઓ ટેબલ કુલ લાગુ ખર્ચ કુલ કર અને ખર્ચ તરીકે જ હોવી જોઈએ,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,તમારો પત્ર વડા અને લોગો અપલોડ કરો. (જો તમે પછીથી તેમને ફેરફાર કરી શકો છો).,
 Upper Income,ઉચ્ચ આવક,
 Use Sandbox,ઉપયોગ સેન્ડબોક્સ,
-Used Leaves,વપરાયેલ પાંદડા,
 User,વપરાશકર્તા,
 User ID,વપરાશકર્તા ID,
 User ID not set for Employee {0},વપરાશકર્તા ID કર્મચારી માટે સેટ નથી {0},
@@ -7949,12 +7944,10 @@
 Approvers,વિવાદ,
 The first Approver in the list will be set as the default Approver.,સૂચિમાં પ્રથમ મંજૂરી આપનારને ડિફ defaultલ્ટ મંજૂરી તરીકે સેટ કરવામાં આવશે.,
 Shift Request Approver,શિફ્ટ વિનંતી મંજૂરી,
-PAN Number,પાન નંબર,
 Provident Fund Account,પ્રોવિડન્ટ ફંડ એકાઉન્ટ,
 MICR Code,એમઆઈસીઆર કોડ,
 Repay unclaimed amount from salary,પગારમાંથી દાવેદારી રકમ પરત કરો,
 Deduction from salary,પગારમાંથી કપાત,
-Expired Leaves,સમાપ્ત પાંદડા,
 If this is not checked the loan by default will be considered as a Demand Loan,જો આને તપાસવામાં નહીં આવે તો ડિફોલ્ટ રૂપે લોનને ડિમાન્ડ લોન માનવામાં આવશે,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,આ એકાઉન્ટનો ઉપયોગ orણ લેનારા પાસેથી લોન ચુકવણી બુક કરવા અને લેનારાને લોન વહેંચવા માટે થાય છે.,
 This account is capital account which is used to allocate capital for loan disbursal account ,આ એકાઉન્ટ કેપિટલ એકાઉન્ટ છે જેનો ઉપયોગ લોન વિતરણ ખાતા માટે મૂડી ફાળવવા માટે થાય છે,
@@ -8748,3 +8741,5 @@
 Is Mandatory,ફરજિયાત છે,
 WhatsApp,વોટ્સેપ,
 Make a call,કોલ કરો,
+Approve,મંજૂર,
+Reject,નકારો,
diff --git a/erpnext/translations/he.csv b/erpnext/translations/he.csv
index b0e6306..6cd900a 100644
--- a/erpnext/translations/he.csv
+++ b/erpnext/translations/he.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,מסמך חזרה אוטומטית עודכן,
 Automotive,רכב,
 Available,זמין,
-Available Leaves,עלים זמינים,
 Available Qty,כמות זמינה,
 Available Selling,מכירה זמינה,
 Available for use date is required,נדרש לתאריך השימוש,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,מזהה סנכרון רכזת,
 Human Resource,משאבי אנוש,
 Human Resources,משאבי אנוש,
-IFSC Code,קוד IFSC,
 IGST Amount,סכום IGST,
 IP Address,כתובת ה - IP,
 ITC Available (whether in full op part),ITC זמין (אם בחלק אופ מלא),
@@ -1666,7 +1664,6 @@
 Other,אחר,
 Other Reports,דוחות נוספים,
 "Other outward supplies(Nil rated,Exempted)","אספקה חיצונית אחרת (מדורג אפס, פטור)",
-Others,אחרים,
 Out Qty,מתוך כמות,
 Out Value,ערך מתוך,
 Out of Order,מקולקל,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),סה&quot;כ (ללא מס),
 Total Achieved,"סה""כ הושג",
 Total Actual,"סה""כ בפועל",
-Total Allocated Leaves,סה&quot;כ עלים שהוקצו,
 Total Amount,"סה""כ לתשלום",
 Total Amount Credited,סכום כולל אשראי,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,סה&quot;כ החיובים החלים בטבלת פריטי קבלה לרכישה חייבים להיות זהים לסכומי המסים והחיובים,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,העלה ראש המכתב ואת הלוגו שלך. (אתה יכול לערוך אותם מאוחר יותר).,
 Upper Income,עליון הכנסה,
 Use Sandbox,השתמש בארגז חול,
-Used Leaves,עלים משומשים,
 User,מִשׁתַמֵשׁ,
 User ID,זיהוי משתמש,
 User ID not set for Employee {0},זיהוי משתמש לא נקבע לעובדים {0},
@@ -7949,12 +7944,10 @@
 Approvers,מחלוקת,
 The first Approver in the list will be set as the default Approver.,המאשר הראשון ברשימה יוגדר כמאשר ברירת המחדל.,
 Shift Request Approver,אישור בקשת משמרת,
-PAN Number,מספר PAN,
 Provident Fund Account,חשבון קופת גמל,
 MICR Code,קוד MICR,
 Repay unclaimed amount from salary,החזר סכום שלא נתבע מהמשכורת,
 Deduction from salary,ניכוי משכר,
-Expired Leaves,עלים שפג תוקפם,
 If this is not checked the loan by default will be considered as a Demand Loan,אם זה לא מסומן ההלוואה כברירת מחדל תיחשב כהלוואת דרישה,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,חשבון זה משמש להזמנת החזרי הלוואות מהלווה וגם להוצאת הלוואות ללווה,
 This account is capital account which is used to allocate capital for loan disbursal account ,חשבון זה הוא חשבון הון המשמש להקצאת הון לחשבון פרסום הלוואות,
@@ -8748,3 +8741,5 @@
 Is Mandatory,זה חובה,
 WhatsApp,ווטסאפ,
 Make a call,להתקשר,
+Approve,לְאַשֵׁר,
+Reject,לִדחוֹת,
diff --git a/erpnext/translations/hi.csv b/erpnext/translations/hi.csv
index 35c4b81..388b502 100644
--- a/erpnext/translations/hi.csv
+++ b/erpnext/translations/hi.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,ऑटो दोहराना दस्तावेज़ अद्यतन,
 Automotive,मोटर वाहन,
 Available,उपलब्ध,
-Available Leaves,उपलब्ध पत्तियां,
 Available Qty,उपलब्ध मात्रा,
 Available Selling,उपलब्ध बेचना,
 Available for use date is required,उपयोग की तारीख के लिए उपलब्ध है,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,हब सिंक आईडी,
 Human Resource,मानव संसाधन,
 Human Resources,मानवीय संसाधन,
-IFSC Code,आईएफएससी कोड,
 IGST Amount,आईजीएसटी राशि,
 IP Address,आईपी पता,
 ITC Available (whether in full op part),ITC उपलब्ध (पूर्ण ऑप भाग में),
@@ -1666,7 +1664,6 @@
 Other,अन्य,
 Other Reports,अन्य रिपोर्टें,
 "Other outward supplies(Nil rated,Exempted)","अन्य बाहरी आपूर्ति (निल रेटेड, छूट)",
-Others,दूसरों,
 Out Qty,मात्रा बाहर,
 Out Value,आउट मान,
 Out of Order,खराब,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),कुल (कर के बिना),
 Total Achieved,कुल प्राप्त,
 Total Actual,वास्तविक कुल,
-Total Allocated Leaves,कुल आवंटित पत्तियां,
 Total Amount,कुल राशि,
 Total Amount Credited,कुल राशि क्रेडिट,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,खरीद रसीद आइटम तालिका में कुल लागू शुल्कों के कुल करों और शुल्कों के रूप में ही होना चाहिए,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,अपने पत्र सिर और लोगो अपलोड करें। (आप उन्हें बाद में संपादित कर सकते हैं)।,
 Upper Income,ऊपरी आय,
 Use Sandbox,उपयोग सैंडबॉक्स,
-Used Leaves,प्रयुक्त पत्तियां,
 User,उपयोगकर्ता,
 User ID,प्रयोक्ता आईडी,
 User ID not set for Employee {0},यूजर आईडी कर्मचारी के लिए सेट नहीं {0},
@@ -7949,12 +7944,10 @@
 Approvers,approvers,
 The first Approver in the list will be set as the default Approver.,सूची में पहले अनुमोदन डिफ़ॉल्ट डिफ़ॉल्ट के रूप में सेट किया जाएगा।,
 Shift Request Approver,शिफ्ट रिक्वेस्ट अप्रूवर,
-PAN Number,पैन नंबर,
 Provident Fund Account,भविष्य निधि खाता,
 MICR Code,MICR कोड,
 Repay unclaimed amount from salary,वेतन से लावारिस राशि को चुकाएं,
 Deduction from salary,वेतन से कटौती,
-Expired Leaves,समय सीमा समाप्त,
 If this is not checked the loan by default will be considered as a Demand Loan,"यदि यह डिफ़ॉल्ट रूप से ऋण की जाँच नहीं है, तो इसे डिमांड लोन माना जाएगा",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,इस खाते का उपयोग उधारकर्ता से ऋण चुकौती की बुकिंग के लिए किया जाता है और उधारकर्ता को ऋण का वितरण भी किया जाता है,
 This account is capital account which is used to allocate capital for loan disbursal account ,यह खाता पूंजी खाता है जिसका उपयोग ऋण वितरण खाते के लिए पूंजी आवंटित करने के लिए किया जाता है,
@@ -8748,3 +8741,5 @@
 Is Mandatory,अनिवार्य है,
 WhatsApp,WhatsApp,
 Make a call,कॉल करें,
+Approve,मंजूर,
+Reject,अस्वीकार,
diff --git a/erpnext/translations/hr.csv b/erpnext/translations/hr.csv
index c44d421..b44babc 100644
--- a/erpnext/translations/hr.csv
+++ b/erpnext/translations/hr.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Ažurira se automatski ponavljanje dokumenta,
 Automotive,Automobilska industrija,
 Available,Dostupno,
-Available Leaves,Dostupni lišće,
 Available Qty,Dostupno Količina,
 Available Selling,Dostupna prodaja,
 Available for use date is required,Dostupan je za datum upotrebe,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID sinkronizacije huba,
 Human Resource,Ljudski resursi,
 Human Resources,Ljudski resursi,
-IFSC Code,IFSC kod,
 IGST Amount,Iznos IGST,
 IP Address,IP adresa,
 ITC Available (whether in full op part),Dostupan ITC (bilo u cijelom op. Dijelu),
@@ -1666,7 +1664,6 @@
 Other,Drugi,
 Other Reports,Ostala izvješća,
 "Other outward supplies(Nil rated,Exempted)","Ostale vanjske zalihe (ocjenjivano bez vrijednosti, izuzeće)",
-Others,Ostali,
 Out Qty,Od kol,
 Out Value,Iz vrijednost,
 Out of Order,Izvanredno,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Ukupno (bez poreza),
 Total Achieved,Ukupno Ostvareno,
 Total Actual,Ukupno Stvarni,
-Total Allocated Leaves,Ukupno dopuštena lišća,
 Total Amount,Ukupan iznos,
 Total Amount Credited,Ukupan iznos je odobren,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Ukupno odgovarajuće naknade u potvrdi o kupnji stavke stolu mora biti ista kao i Total poreza i naknada,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Upload Vaše pismo glavu i logotip. (Možete ih uređivati kasnije).,
 Upper Income,Gornja Prihodi,
 Use Sandbox,Sandbox,
-Used Leaves,Koristi lišće,
 User,Korisnik,
 User ID,Korisnički ID,
 User ID not set for Employee {0},Korisnik ID nije postavljen za zaposlenika {0},
@@ -7949,12 +7944,10 @@
 Approvers,Odobrivači,
 The first Approver in the list will be set as the default Approver.,Prvi odobravatelj s popisa postavit će se kao zadani odobravatelj.,
 Shift Request Approver,Odobritelj zahtjeva za smjenom,
-PAN Number,PAN broj,
 Provident Fund Account,Račun osiguravajućeg fonda,
 MICR Code,MICR kod,
 Repay unclaimed amount from salary,Otplatite neiskorišteni iznos iz plaće,
 Deduction from salary,Odbitak od plaće,
-Expired Leaves,Isteklo lišće,
 If this is not checked the loan by default will be considered as a Demand Loan,"Ako se ovo ne potvrdi, zajam će se prema zadanim postavkama smatrati zajmom na zahtjev",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ovaj se račun koristi za rezerviranje otplate zajma od zajmoprimca i za isplatu zajmova zajmoprimcu,
 This account is capital account which is used to allocate capital for loan disbursal account ,Ovaj račun je račun kapitala koji se koristi za raspodjelu kapitala za račun izdvajanja zajma,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Je obavezno,
 WhatsApp,Što ima,
 Make a call,Uputi poziv,
+Approve,Odobriti,
+Reject,Odbiti,
diff --git a/erpnext/translations/hu.csv b/erpnext/translations/hu.csv
index c707a1e..4ea5b9a 100644
--- a/erpnext/translations/hu.csv
+++ b/erpnext/translations/hu.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Az automatikus ismétlődő dokumentum frissítve,
 Automotive,Autóipar,
 Available,Elérhető,
-Available Leaves,Lehetséges távollétek,
 Available Qty,Elérhető Menny.,
 Available Selling,Elérhető értékesítés,
 Available for use date is required,Rendelkezésre állási dátum szükséges,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub szinkronizálási azonosító ID,
 Human Resource,Emberi Erőforrás HR,
 Human Resources,Emberi erőforrások HR,
-IFSC Code,IFSC kód,
 IGST Amount,IGST összeg,
 IP Address,IP-cím,
 ITC Available (whether in full op part),ITC elérhető (teljes opcióban),
@@ -1666,7 +1664,6 @@
 Other,Egyéb,
 Other Reports,Más jelentések,
 "Other outward supplies(Nil rated,Exempted)","Egyéb külső készletek (nulla, mentes)",
-Others,Egyéb,
 Out Qty,Mennyiségen kívül,
 Out Value,Értéken kívül,
 Out of Order,Üzemen kívül,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Összesen (adó nélkül/nettó),
 Total Achieved,Összes Elért,
 Total Actual,Összes Aktuális,
-Total Allocated Leaves,Teljes elosztott távollétek száma,
 Total Amount,Összesen,
 Total Amount Credited,Összesen jóváírt összeg,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Összesen alkalmazandó díjak a vásárlási nyugta tételek táblázatban egyeznie kell az Összes adókkal és illetékekkel,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Kérjük töltse fel levele fejlécét és logo-ját. (Ezeket később szerkesztheti).,
 Upper Income,Magasabb jövedelem,
 Use Sandbox,Sandbox felhasználása,
-Used Leaves,Felhasznált távollétek,
 User,használó,
 User ID,Felhasználó ID,
 User ID not set for Employee {0},Felhasználói azonosítót nem állított be az Alkalmazotthoz: {0},
@@ -7949,12 +7944,10 @@
 Approvers,Jóváhagyó,
 The first Approver in the list will be set as the default Approver.,A lista első jóváhagyója lesz az alapértelmezett jóváhagyó.,
 Shift Request Approver,Shift Request Approver,
-PAN Number,PAN szám,
 Provident Fund Account,Provident Fund számla,
 MICR Code,MICR kód,
 Repay unclaimed amount from salary,Visszafizetni az igényelt összeget a fizetésből,
 Deduction from salary,A fizetés levonása,
-Expired Leaves,Lejárt levelek,
 If this is not checked the loan by default will be considered as a Demand Loan,"Ha ez nincs bejelölve, akkor a hitelt alapértelmezés szerint Igény szerinti kölcsönnek kell tekinteni",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Ezt a számlát arra használják, hogy foglalják le a hiteltől származó hiteltörlesztéseket, és kölcsönöket is folyósítanak a hitelfelvevőnek",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Ez a számla tőkeszámla, amelyet a hitel folyósítási számlájához szükséges tőke allokálására használnak",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Kötelező,
 WhatsApp,WhatsApp,
 Make a call,Hívást kezdeményezni,
+Approve,Jóváhagy,
+Reject,Elutasít,
diff --git a/erpnext/translations/id.csv b/erpnext/translations/id.csv
index 2ec17e6..d84c3fd 100644
--- a/erpnext/translations/id.csv
+++ b/erpnext/translations/id.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Pembaruan dokumen otomatis diperbarui,
 Automotive,Otomotif,
 Available,Tersedia,
-Available Leaves,Cuti Yang Tersedia,
 Available Qty,Qty Tersedia,
 Available Selling,Jual Beli,
 Available for use date is required,Tersedia untuk tanggal penggunaan diperlukan,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Sumber daya manusia,
 Human Resources,Sumber daya manusia,
-IFSC Code,Kode IFSC,
 IGST Amount,Jumlah IGST,
 IP Address,Alamat IP,
 ITC Available (whether in full op part),ITC Tersedia (baik dalam bagian op penuh),
@@ -1666,7 +1664,6 @@
 Other,Lain-lain,
 Other Reports,Laporan Lainnya,
 "Other outward supplies(Nil rated,Exempted)","Persediaan luar lainnya (nilai nol, Dibebaskan)",
-Others,Lainnya,
 Out Qty,Out Qty,
 Out Value,out Nilai,
 Out of Order,Habis,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (Tanpa Pajak),
 Total Achieved,Total Dicapai,
 Total Actual,Total Aktual,
-Total Allocated Leaves,Total Cuti Yang Dialokasikan,
 Total Amount,Nilai Total,
 Total Amount Credited,Jumlah Total Dikreditkan,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total Biaya Berlaku di Purchase meja Jenis Penerimaan harus sama dengan jumlah Pajak dan Biaya,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Unggah kop surat dan logo. (Anda dapat mengubahnya nanti).,
 Upper Income,Penghasilan Atas,
 Use Sandbox,Gunakan Sandbox,
-Used Leaves,Cuti Yang Telah Digunakan,
 User,Pengguna,
 User ID,ID Pengguna,
 User ID not set for Employee {0},User ID tidak ditetapkan untuk Karyawan {0},
@@ -7949,12 +7944,10 @@
 Approvers,Pemberi persetujuan,
 The first Approver in the list will be set as the default Approver.,Pemberi Persetujuan pertama dalam daftar akan ditetapkan sebagai Pemberi Persetujuan default.,
 Shift Request Approver,Penyetuju Permintaan Shift,
-PAN Number,Nomor PAN,
 Provident Fund Account,Rekening Dana Provident,
 MICR Code,Kode MICR,
 Repay unclaimed amount from salary,Membayar kembali jumlah gaji yang belum diklaim,
 Deduction from salary,Pemotongan gaji,
-Expired Leaves,Daun kadaluarsa,
 If this is not checked the loan by default will be considered as a Demand Loan,"Jika tidak dicentang, pinjaman secara default akan dianggap sebagai Pinjaman Permintaan",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Rekening ini digunakan untuk membukukan pembayaran pinjaman dari peminjam dan juga menyalurkan pinjaman kepada peminjam,
 This account is capital account which is used to allocate capital for loan disbursal account ,Akun ini adalah akun modal yang digunakan untuk mengalokasikan modal ke akun pencairan pinjaman,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Apakah Wajib,
 WhatsApp,Ada apa,
 Make a call,Menelpon,
+Approve,Menyetujui,
+Reject,Menolak,
diff --git a/erpnext/translations/is.csv b/erpnext/translations/is.csv
index 93df452..7687e4a 100644
--- a/erpnext/translations/is.csv
+++ b/erpnext/translations/is.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Sjálfvirk endurtaka skjal uppfært,
 Automotive,Automotive,
 Available,Laus,
-Available Leaves,Lausar blöð,
 Available Qty,Laus magn,
 Available Selling,Laus selja,
 Available for use date is required,Til staðar er hægt að nota dagsetninguna,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Mannauðs,
 Human Resources,Mannauður,
-IFSC Code,IFSC-kóði,
 IGST Amount,IGST upphæð,
 IP Address,IP-tölu,
 ITC Available (whether in full op part),ITC í boði (hvort sem það er í heild hluta),
@@ -1666,7 +1664,6 @@
 Other,Annað,
 Other Reports,Aðrar skýrslur,
 "Other outward supplies(Nil rated,Exempted)","Aðrar birgðir út á við (ekki metnar, undanþegnar)",
-Others,Aðrir,
 Out Qty,Út magn,
 Out Value,út Value,
 Out of Order,Bilað,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Samtals (án skatta),
 Total Achieved,alls Náð,
 Total Actual,alls Raunveruleg,
-Total Allocated Leaves,Samtals úthlutað blöð,
 Total Amount,Heildarupphæð,
 Total Amount Credited,Heildarfjárhæð innheimt,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Samtals greiðsla í kvittun atriðum borðið verður að vera það sama og Samtals skatta og gjöld,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Hlaða bréf höfuðið og merki. (Þú getur breytt þeim síðar).,
 Upper Income,Efri tekjur,
 Use Sandbox,Nota Sandbox,
-Used Leaves,Notaðar blöð,
 User,Notandi,
 User ID,notandanafn,
 User ID not set for Employee {0},User ID ekki sett fyrir Starfsmaður {0},
@@ -7949,12 +7944,10 @@
 Approvers,Ágreiningsmenn,
 The first Approver in the list will be set as the default Approver.,Fyrsti samþykkur listans verður stilltur sem sjálfgefinn samþykkur.,
 Shift Request Approver,Samþykki vaktabeiðni,
-PAN Number,PAN númer,
 Provident Fund Account,Reikningur sjóðsins,
 MICR Code,MICR kóði,
 Repay unclaimed amount from salary,Endurgreiða óheimta upphæð af launum,
 Deduction from salary,Frádráttur frá launum,
-Expired Leaves,Útrunnið lauf,
 If this is not checked the loan by default will be considered as a Demand Loan,Ef ekki er hakað við þetta verður lánið sjálfgefið litið á sem eftirspurnarlán,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Þessi reikningur er notaður til að bóka endurgreiðslur lána frá lántakanda og einnig til að greiða út lán til lántakanda,
 This account is capital account which is used to allocate capital for loan disbursal account ,Þessi reikningur er fjármagnsreikningur sem er notaður til að úthluta fjármagni til útborgunarreiknings lána,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Er skylda,
 WhatsApp,WhatsApp,
 Make a call,Hringja,
+Approve,Samþykkja,
+Reject,Hafna,
diff --git a/erpnext/translations/it.csv b/erpnext/translations/it.csv
index 558b091..b88cada 100644
--- a/erpnext/translations/it.csv
+++ b/erpnext/translations/it.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Ripetizione automatica aggiornata,
 Automotive,Automotive,
 Available,Disponibile,
-Available Leaves,Ferie disponibili,
 Available Qty,Disponibile Quantità,
 Available Selling,Vendita disponibile,
 Available for use date is required,Disponibile per la data di utilizzo è richiesto,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID di sincronizzazione Hub,
 Human Resource,Risorsa Umana,
 Human Resources,Risorse umane,
-IFSC Code,Codice IFSC,
 IGST Amount,Quantità IGST,
 IP Address,Indirizzo IP,
 ITC Available (whether in full op part),ITC disponibile (sia nella parte operativa completa),
@@ -1666,7 +1664,6 @@
 Other,Altro,
 Other Reports,Altri Reports,
 "Other outward supplies(Nil rated,Exempted)","Altre forniture esterne (esenti da zero, esenti)",
-Others,Altri,
 Out Qty,out Quantità,
 Out Value,Valore out,
 Out of Order,Guasto,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totale (senza tasse),
 Total Achieved,Totale raggiunto,
 Total Actual,Totale Actual,
-Total Allocated Leaves,Ferie totali allocate,
 Total Amount,Totale Importo,
 Total Amount Credited,Importo totale accreditato,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Totale oneri addebitati in Acquisto tabella di carico Gli articoli devono essere uguale Totale imposte e oneri,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Carica la tua testa lettera e logo. (È possibile modificare in un secondo momento).,
 Upper Income,Reddito superiore,
 Use Sandbox,Usa Sandbox,
-Used Leaves,Ferie Usate,
 User,Utente,
 User ID,ID utente,
 User ID not set for Employee {0},ID utente non impostato per Dipedente {0},
@@ -7949,12 +7944,10 @@
 Approvers,Approvatori,
 The first Approver in the list will be set as the default Approver.,Il primo approvatore nell&#39;elenco verrà impostato come approvatore predefinito.,
 Shift Request Approver,Approvatore richiesta di turno,
-PAN Number,Numero PAN,
 Provident Fund Account,Conto del fondo di previdenza,
 MICR Code,Codice MICR,
 Repay unclaimed amount from salary,Rimborsare l&#39;importo non reclamato dallo stipendio,
 Deduction from salary,Detrazione dallo stipendio,
-Expired Leaves,Foglie scadute,
 If this is not checked the loan by default will be considered as a Demand Loan,"Se questa opzione non è selezionata, il prestito di default sarà considerato come un prestito a vista",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Questo conto viene utilizzato per la prenotazione del rimborso del prestito dal mutuatario e anche per l&#39;erogazione dei prestiti al mutuatario,
 This account is capital account which is used to allocate capital for loan disbursal account ,Questo conto è un conto capitale utilizzato per allocare il capitale per il conto di erogazione del prestito,
@@ -8748,3 +8741,5 @@
 Is Mandatory,È obbligatorio,
 WhatsApp,WhatsApp,
 Make a call,Effettuare una chiamata,
+Approve,Approva,
+Reject,Rifiutare,
diff --git a/erpnext/translations/ja.csv b/erpnext/translations/ja.csv
index 9a7bebe..11455bd 100644
--- a/erpnext/translations/ja.csv
+++ b/erpnext/translations/ja.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,自動繰り返し文書が更新されました,
 Automotive,自動車,
 Available,利用可,
-Available Leaves,利用可能な葉,
 Available Qty,利用可能な数量,
 Available Selling,販売可能,
 Available for use date is required,使用可能な日付が必要です,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ハブ同期ID,
 Human Resource,人材,
 Human Resources,人事,
-IFSC Code,IFSCコード,
 IGST Amount,IGST金額,
 IP Address,IPアドレス,
 ITC Available (whether in full op part),利用可能なITC(完全な一部かどうかにかかわらず),
@@ -1666,7 +1664,6 @@
 Other,その他,
 Other Reports,その他のレポート,
 "Other outward supplies(Nil rated,Exempted)",その他の外部供給品(定格なし、免除),
-Others,その他,
 Out Qty,出量,
 Out Value,タイムアウト値,
 Out of Order,故障中,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),合計(税なし),
 Total Achieved,達成計,
 Total Actual,実費計,
-Total Allocated Leaves,割り当てられた合計葉,
 Total Amount,合計,
 Total Amount Credited,合計金額,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,購入レシートItemsテーブル内の合計有料合計税金、料金と同じでなければなりません,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,レターヘッドとロゴをアップロードします(後で編集可能です),
 Upper Income,高収益,
 Use Sandbox,サンドボックスを使用,
-Used Leaves,中古の葉,
 User,ユーザー,
 User ID,ユーザー ID,
 User ID not set for Employee {0},従業員{0}のユーザーIDが未設定です。,
@@ -7949,12 +7944,10 @@
 Approvers,承認者,
 The first Approver in the list will be set as the default Approver.,リストの最初の承認者がデフォルトの承認者として設定されます。,
 Shift Request Approver,シフトリクエスト承認者,
-PAN Number,PAN番号,
 Provident Fund Account,プロビデントファンドアカウント,
 MICR Code,MICRコード,
 Repay unclaimed amount from salary,未請求額を給与から返済する,
 Deduction from salary,給与からの控除,
-Expired Leaves,期限切れの葉,
 If this is not checked the loan by default will be considered as a Demand Loan,これがチェックされていない場合、デフォルトでローンはデマンドローンと見なされます,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,このアカウントは、借り手からのローン返済の予約と、借り手へのローンの支払いに使用されます。,
 This account is capital account which is used to allocate capital for loan disbursal account ,この口座は、ローン実行口座に資本を割り当てるために使用される資本口座です。,
@@ -8748,3 +8741,5 @@
 Is Mandatory,必須です,
 WhatsApp,WhatsApp,
 Make a call,電話を掛ける,
+Approve,承認,
+Reject,拒否,
diff --git a/erpnext/translations/km.csv b/erpnext/translations/km.csv
index 425940c..46dcaba 100644
--- a/erpnext/translations/km.csv
+++ b/erpnext/translations/km.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,បានធ្វើបច្ចុប្បន្នភាពឯកសារដោយស្វ័យប្រវត្តិ,
 Automotive,រថយន្ដ,
 Available,ដែលអាចប្រើបាន,
-Available Leaves,មានស្លឹក,
 Available Qty,ដែលអាចប្រើបាន Qty,
 Available Selling,លក់ដែលអាចប្រើបាន,
 Available for use date is required,អាចរកបានសម្រាប់កាលបរិច្ឆេទប្រើ,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,ធនធានមនុស្ស,
 Human Resources,ធនធានមនុស្ស,
-IFSC Code,កូដ IFSC,
 IGST Amount,បរិមាណ IGST,
 IP Address,អាសយដ្ឋាន IP,
 ITC Available (whether in full op part),មានអាយ។ ស៊ី។ ធី។ (មិនថាជាផ្នែកពេញលេញ),
@@ -1666,7 +1664,6 @@
 Other,ផ្សេងទៀត,
 Other Reports,របាយការណ៍ផ្សេងទៀត,
 "Other outward supplies(Nil rated,Exempted)",ការផ្គត់ផ្គង់ខាងក្រៅផ្សេងទៀត (បានវាយតម្លៃមិនលើកលែង),
-Others,អ្នកផ្សេងទៀត,
 Out Qty,ចេញ Qty,
 Out Value,តម្លៃចេញ,
 Out of Order,ចេញពីលំដាប់,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),សរុប (ដោយគ្មានពន្ធ),
 Total Achieved,សរុបសម្រេច,
 Total Actual,សរុបជាក់ស្តែង,
-Total Allocated Leaves,ស្លឹកបម្រុងសរុប,
 Total Amount,ចំនួនសរុប,
 Total Amount Credited,ចំនួនទឹកប្រាក់សរុបដែលបានផ្ទៀងផ្ទាត់,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ការចោទប្រកាន់អនុវត្តសរុបនៅក្នុងការទិញតារាងការទទួលធាតុត្រូវដូចគ្នាដែលជាពន្ធសរុបនិងការចោទប្រកាន់,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,ផ្ទុកឡើងក្បាលលិខិតនិងស្លាកសញ្ញារបស់អ្នក។ (អ្នកអាចកែសម្រួលពួកវានៅពេលក្រោយ) ។,
 Upper Income,ផ្នែកខាងលើប្រាក់ចំណូល,
 Use Sandbox,ប្រើសេនបក់,
-Used Leaves,ប្រើស្លឹក,
 User,អ្នកប្រើ,
 User ID,លេខសម្គាល់អ្នកប្រើ,
 User ID not set for Employee {0},លេខសម្គាល់អ្នកប្រើដែលមិនបានកំណត់សម្រាប់បុគ្គលិក {0},
@@ -7949,12 +7944,10 @@
 Approvers,គួរឱ្យសង្ស័យ,
 The first Approver in the list will be set as the default Approver.,អ្នកផ្តល់យោបល់ដំបូងគេនៅក្នុងបញ្ជីនឹងត្រូវបានកំណត់ជាអ្នកផ្តល់យោបល់លំនាំដើម,
 Shift Request Approver,ផ្លាស់ប្តូរសំណើរសុំការផ្លាស់ប្តូរ,
-PAN Number,លេខ PAN,
 Provident Fund Account,គណនីមូលនិធិអ្នកផ្តល់សេវា,
 MICR Code,MICR កូដ,
 Repay unclaimed amount from salary,សងចំនួនទឹកប្រាក់ដែលមិនបានទាមទារពីប្រាក់ខែ,
 Deduction from salary,ការកាត់បន្ថយពីប្រាក់ខែ,
-Expired Leaves,ស្លឹកផុតកំណត់,
 If this is not checked the loan by default will be considered as a Demand Loan,ប្រសិនបើនេះមិនត្រូវបានពិនិត្យប្រាក់កម្ចីតាមលំនាំដើមនឹងត្រូវបានចាត់ទុកថាជាប្រាក់កម្ចីតម្រូវការ,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,គណនីនេះត្រូវបានប្រើសម្រាប់ការកក់ការសងប្រាក់កម្ចីពីអ្នកខ្ចីហើយថែមទាំងផ្តល់ប្រាក់កម្ចីដល់អ្នកខ្ចីផងដែរ,
 This account is capital account which is used to allocate capital for loan disbursal account ,គណនីនេះគឺជាគណនីដើមទុនដែលត្រូវបានប្រើដើម្បីបែងចែកដើមទុនសម្រាប់គណនីប្រាក់កម្ចី,
@@ -8748,3 +8741,5 @@
 Is Mandatory,គឺចាំបាច់,
 WhatsApp,WhatsApp,
 Make a call,ធ្វើការហៅ,
+Approve,អនុម័ត,
+Reject,ច្រានចោល,
diff --git a/erpnext/translations/kn.csv b/erpnext/translations/kn.csv
index 5b42113..18e44a1 100644
--- a/erpnext/translations/kn.csv
+++ b/erpnext/translations/kn.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,ಸ್ವಯಂ ಪುನರಾವರ್ತಿತ ಡಾಕ್ಯುಮೆಂಟ್ ಅನ್ನು ನವೀಕರಿಸಲಾಗಿದೆ,
 Automotive,ಆಟೋಮೋಟಿವ್,
 Available,ಲಭ್ಯ,
-Available Leaves,ಲಭ್ಯವಿರುವ ಎಲೆಗಳು,
 Available Qty,ಲಭ್ಯವಿರುವ ಪ್ರಮಾಣ,
 Available Selling,ಲಭ್ಯವಿರುವ ಮಾರಾಟ,
 Available for use date is required,ಬಳಕೆ ದಿನಾಂಕಕ್ಕೆ ಲಭ್ಯವಿದೆ,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ಹಬ್ ಸಿಂಕ್ ID,
 Human Resource,ಮಾನವ ಸಂಪನ್ಮೂಲ,
 Human Resources,ಮಾನವ ಸಂಪನ್ಮೂಲ,
-IFSC Code,IFSC ಕೋಡ್,
 IGST Amount,IGST ಮೊತ್ತ,
 IP Address,IP ವಿಳಾಸ,
 ITC Available (whether in full op part),ಐಟಿಸಿ ಲಭ್ಯವಿದೆ (ಪೂರ್ಣ ಆಪ್ ಭಾಗದಲ್ಲಿರಲಿ),
@@ -1666,7 +1664,6 @@
 Other,ಇತರ,
 Other Reports,ಇತರ ವರದಿಗಳು,
 "Other outward supplies(Nil rated,Exempted)","ಇತರ ಬಾಹ್ಯ ಸರಬರಾಜುಗಳು (ನಿಲ್ ರೇಟ್, ವಿನಾಯಿತಿ)",
-Others,ಇತರೆ,
 Out Qty,ಪ್ರಮಾಣ ಔಟ್,
 Out Value,ಔಟ್ ಮೌಲ್ಯ,
 Out of Order,ಆದೇಶದ ಹೊರಗೆ,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),ಒಟ್ಟು (ತೆರಿಗೆ ಇಲ್ಲದೆ),
 Total Achieved,ಒಟ್ಟು ಸಾಧಿಸಿದ,
 Total Actual,ನಿಜವಾದ ಒಟ್ಟು,
-Total Allocated Leaves,ಒಟ್ಟು ಹಂಚಲ್ಪಟ್ಟ ಎಲೆಗಳು,
 Total Amount,ಒಟ್ಟು ಪ್ರಮಾಣ,
 Total Amount Credited,ಒಟ್ಟು ಮೊತ್ತವನ್ನು ಕ್ರೆಡಿಟ್ ಮಾಡಲಾಗಿದೆ,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ಖರೀದಿ ರಸೀತಿ ವಸ್ತುಗಳು ಕೋಷ್ಟಕದಲ್ಲಿ ಒಟ್ಟು ಅನ್ವಯಿಸುವ ತೆರಿಗೆ ಒಟ್ಟು ತೆರಿಗೆಗಳು ಮತ್ತು ಶುಲ್ಕಗಳು ಅದೇ ಇರಬೇಕು,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,ನಿಮ್ಮ ಪತ್ರ ತಲೆ ಮತ್ತು ಲೋಗೋ ಅಪ್ಲೋಡ್. (ನೀವು ಅವುಗಳನ್ನು ನಂತರ ಸಂಪಾದಿಸಬಹುದು).,
 Upper Income,ಮೇಲ್ ವರಮಾನ,
 Use Sandbox,ಸ್ಯಾಂಡ್ಬಾಕ್ಸ್ ಬಳಸಿ,
-Used Leaves,ಉಪಯೋಗಿಸಿದ ಎಲೆಗಳು,
 User,ಬಳಕೆದಾರ,
 User ID,ಬಳಕೆದಾರ ID,
 User ID not set for Employee {0},ಬಳಕೆದಾರ ID ನೌಕರ ಸೆಟ್ {0},
@@ -7949,12 +7944,10 @@
 Approvers,ಅನುಮೋದಕರು,
 The first Approver in the list will be set as the default Approver.,ಪಟ್ಟಿಯಲ್ಲಿನ ಮೊದಲ ಅನುಮೋದಕವನ್ನು ಡೀಫಾಲ್ಟ್ ಅನುಮೋದಕ ಎಂದು ಹೊಂದಿಸಲಾಗುವುದು.,
 Shift Request Approver,ಶಿಫ್ಟ್ ವಿನಂತಿ ಅನುಮೋದನೆ,
-PAN Number,ಪ್ಯಾನ್ ಸಂಖ್ಯೆ,
 Provident Fund Account,ಭವಿಷ್ಯ ನಿಧಿ ಖಾತೆ,
 MICR Code,MICR ಕೋಡ್,
 Repay unclaimed amount from salary,ಹಕ್ಕು ಪಡೆಯದ ಮೊತ್ತವನ್ನು ಸಂಬಳದಿಂದ ಮರುಪಾವತಿ ಮಾಡಿ,
 Deduction from salary,ಸಂಬಳದಿಂದ ಕಡಿತ,
-Expired Leaves,ಅವಧಿ ಮುಗಿದ ಎಲೆಗಳು,
 If this is not checked the loan by default will be considered as a Demand Loan,ಇದನ್ನು ಪರಿಶೀಲಿಸದಿದ್ದರೆ ಸಾಲವನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಬೇಡಿಕೆ ಸಾಲವೆಂದು ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ಈ ಖಾತೆಯನ್ನು ಸಾಲಗಾರರಿಂದ ಸಾಲ ಮರುಪಾವತಿಯನ್ನು ಕಾಯ್ದಿರಿಸಲು ಮತ್ತು ಸಾಲಗಾರನಿಗೆ ಸಾಲವನ್ನು ವಿತರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ,
 This account is capital account which is used to allocate capital for loan disbursal account ,"ಈ ಖಾತೆಯು ಬಂಡವಾಳ ಖಾತೆಯಾಗಿದ್ದು, ಸಾಲ ವಿತರಣಾ ಖಾತೆಗೆ ಬಂಡವಾಳವನ್ನು ನಿಯೋಜಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ",
@@ -8748,3 +8741,5 @@
 Is Mandatory,ಕಡ್ಡಾಯವಾಗಿದೆ,
 WhatsApp,ವಾಟ್ಸಾಪ್,
 Make a call,ಕರೆ ಮಾಡಿ,
+Approve,ಅನುಮೋದಿಸಿ,
+Reject,ರಿಜೆಕ್ಟ್,
diff --git a/erpnext/translations/ko.csv b/erpnext/translations/ko.csv
index 48a3e0c..788655c 100644
--- a/erpnext/translations/ko.csv
+++ b/erpnext/translations/ko.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,자동 반복 문서 업데이트 됨,
 Automotive,자동차,
 Available,사용 가능함,
-Available Leaves,사용 가능한 잎,
 Available Qty,사용 가능한 수량,
 Available Selling,판매 가능,
 Available for use date is required,사용 가능한 날짜가 필요합니다.,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,허브 동기화 ID,
 Human Resource,인적 자원,
 Human Resources,인적 자원,
-IFSC Code,IFSC 코드,
 IGST Amount,IGST 금액,
 IP Address,IP 주소,
 ITC Available (whether in full op part),ITC 가능 (전체 운영 부분 포함),
@@ -1666,7 +1664,6 @@
 Other,기타,
 Other Reports,기타 보고서,
 "Other outward supplies(Nil rated,Exempted)","기타 외부 공급 (Nil rated, Exempted)",
-Others,기타사항,
 Out Qty,수량 아웃,
 Out Value,제한 값,
 Out of Order,고장난,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),합계 (세금 제외),
 Total Achieved,전체 달성,
 Total Actual,실제 총,
-Total Allocated Leaves,총 할당 된 잎,
 Total Amount,총액,
 Total Amount Credited,총 크레딧 금액,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,구매 영수증 항목 테이블에 전체 적용 요금은 총 세금 및 요금과 동일해야합니다,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,편지의 머리와 로고를 업로드합니다. (나중에 편집 할 수 있습니다).,
 Upper Income,위 소득,
 Use Sandbox,사용 샌드 박스,
-Used Leaves,중고 잎,
 User,사용자,
 User ID,사용자 ID,
 User ID not set for Employee {0},사용자 ID 직원에 대한 설정하지 {0},
@@ -7949,12 +7944,10 @@
 Approvers,승인자,
 The first Approver in the list will be set as the default Approver.,목록의 첫 번째 승인자가 기본 승인자로 설정됩니다.,
 Shift Request Approver,교대 요청 승인자,
-PAN Number,PAN 번호,
 Provident Fund Account,프로 비 던트 펀드 계정,
 MICR Code,MICR 코드,
 Repay unclaimed amount from salary,급여에서 미 청구 금액 상환,
 Deduction from salary,급여에서 공제,
-Expired Leaves,만료 된 잎,
 If this is not checked the loan by default will be considered as a Demand Loan,선택하지 않으면 기본적으로 대출이 수요 대출로 간주됩니다.,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,이 계정은 차용인의 대출 상환을 예약하고 차용인에게 대출금을 지급하는 데 사용됩니다.,
 This account is capital account which is used to allocate capital for loan disbursal account ,이 계정은 대출 지급 계정에 자본을 할당하는 데 사용되는 자본 계정입니다.,
@@ -8748,3 +8741,5 @@
 Is Mandatory,필수,
 WhatsApp,WhatsApp,
 Make a call,전화하다,
+Approve,승인,
+Reject,받지 않다,
diff --git a/erpnext/translations/ku.csv b/erpnext/translations/ku.csv
index f1972e8..a7fcf4e 100644
--- a/erpnext/translations/ku.csv
+++ b/erpnext/translations/ku.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Vebijêrkek belgekirinê nûve bike,
 Automotive,Automotive,
 Available,Berdeste,
-Available Leaves,Leaves Available,
 Available Qty,Available Qty,
 Available Selling,Bazirganiya Bazirganî,
 Available for use date is required,Ji bo karanîna karanîna pêdivî ye,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Nasnameya Hub Sync,
 Human Resource,çavkaniyê binirxîne mirovan,
 Human Resources,Çavkaniyên Mirovî,
-IFSC Code,Kodê IFSC,
 IGST Amount,Amûr IGST,
 IP Address,Navnîşana IP&#39;yê,
 ITC Available (whether in full op part),Danûstandinên ITC (gelo di beşa tevahiya opoyê de),
@@ -1666,7 +1664,6 @@
 Other,Yên din,
 Other Reports,din Reports,
 "Other outward supplies(Nil rated,Exempted)","Materyalên din ên derveyî (Nil nirxandin, Pezakirin)",
-Others,yên din,
 Out Qty,out Qty,
 Out Value,Nirx out,
 Out of Order,Xirab,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Tiştek Bacê,
 Total Achieved,Total nebine,
 Total Actual,Total Actual,
-Total Allocated Leaves,Niştecîhên Teva Allocated,
 Total Amount,Temamê meblaxa,
 Total Amount Credited,Jimareya Giştî ya Credited,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Total doz li wergirtinê li Purchase Nawy Meqbûz sifrê divê eynî wek Total Bac, û doz li be",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Upload nameya serokê û logo xwe. (Tu ji wan paşê biguherîne).,
 Upper Income,Dahata Upper,
 Use Sandbox,bikaranîna Ceriban,
-Used Leaves,Leaves Used,
 User,Bikaranîvan,
 User ID,ID&#39;ya bikarhêner,
 User ID not set for Employee {0},ID&#39;ya bikarhêner ji bo karkirinê set ne {0},
@@ -7949,12 +7944,10 @@
 Approvers,Têgihiştin,
 The first Approver in the list will be set as the default Approver.,Di lîsteyê de Pejirandina yekem dê wekî Destûra Pêşniyar were saz kirin.,
 Shift Request Approver,Pejirandina Daxwaza Guherînê,
-PAN Number,Hejmara PAN,
 Provident Fund Account,Hesabê Fona Pêşbîn,
 MICR Code,MICR Code,
 Repay unclaimed amount from salary,Mûçeya nevekirî ji meaşê paşde bidin,
 Deduction from salary,Daxistina ji meaş,
-Expired Leaves,Pelên Dawî,
 If this is not checked the loan by default will be considered as a Demand Loan,Ger ev neyê kontrol kirin dê deyn bi default dê wekî Krediyek Daxwaz were hesibandin,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ev hesab ji bo veqetandina vegerandinên deyn ji deyndêr û her weha dayîna deyn ji deyndêr re tê bikar anîn,
 This account is capital account which is used to allocate capital for loan disbursal account ,Ev hesab hesabê sermiyan e ku ji bo veqetandina sermaye ji bo hesabê dayîna kredî tê bikar anîn,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Erkdar e,
 WhatsApp,WhatsApp,
 Make a call,Bang bikin,
+Approve,Destûrdan,
+Reject,Refzkirin,
diff --git a/erpnext/translations/lo.csv b/erpnext/translations/lo.csv
index cdb6f66..9b74f65 100644
--- a/erpnext/translations/lo.csv
+++ b/erpnext/translations/lo.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,ການປັບປຸງເອກະສານຊ້ໍາອັດຕະໂນມັດ,
 Automotive,ຍານຍົນ,
 Available,ສາມາດໃຊ້ໄດ້,
-Available Leaves,Available Leaves,
 Available Qty,ມີຈໍານວນ,
 Available Selling,Available Selling,
 Available for use date is required,ຕ້ອງມີວັນທີ່ໃຊ້ສໍາລັບການນໍາໃຊ້,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,ຊັບພະຍາກອນມະນຸດ,
 Human Resources,ຊັບພະຍາກອນມະນຸດ,
-IFSC Code,IFSC Code,
 IGST Amount,IGST Amount,
 IP Address,ທີ່ຢູ່ IP,
 ITC Available (whether in full op part),ມີ ITC (ບໍ່ວ່າຈະຢູ່ໃນສ່ວນເຕັມ),
@@ -1666,7 +1664,6 @@
 Other,ອື່ນ ໆ,
 Other Reports,ບົດລາຍງານອື່ນ ໆ,
 "Other outward supplies(Nil rated,Exempted)","ເຄື່ອງໃຊ້ພາຍນອກອື່ນໆ (ອັນດັບ, ຍົກເວັ້ນ)",
-Others,ຄົນອື່ນ,
 Out Qty,ອອກຈໍານວນ,
 Out Value,ມູນຄ່າອອກ,
 Out of Order,ອອກຈາກຄໍາສັ່ງ,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),ລວມ (ໂດຍບໍ່ມີພາສີ),
 Total Achieved,ທັງຫມົດບັນລຸ,
 Total Actual,ທັງຫມົດທີ່ເກີດຂຶ້ນຈິງ,
-Total Allocated Leaves,ຈໍານວນໃບທີ່ຖືກມອບຫມາຍ,
 Total Amount,ຈໍານວນທັງຫມົດ,
 Total Amount Credited,ຈໍານວນເງິນທີ່ໄດ້ຮັບການຢັ້ງຢືນ,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ຄ່າໃຊ້ຈ່າຍທັງຫມົດໃນການຊື້ຕາຕະລາງໃບລາຍການຈະຕ້ອງເຊັ່ນດຽວກັນກັບພາສີອາກອນທັງຫມົດແລະຄ່າບໍລິການ,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,ອັບຫົວຈົດຫມາຍສະບັບແລະສັນຍາລັກຂອງທ່ານ. (ທ່ານສາມາດແກ້ໄຂໃຫ້ເຂົາເຈົ້າຕໍ່ມາ).,
 Upper Income,Upper ລາຍໄດ້,
 Use Sandbox,ການນໍາໃຊ້ Sandbox,
-Used Leaves,Used Leaves,
 User,ຜູ້ໃຊ້,
 User ID,User ID,
 User ID not set for Employee {0},User ID ບໍ່ກໍານົດສໍາລັບພະນັກງານ {0},
@@ -7949,12 +7944,10 @@
 Approvers,ຄວາມເປັນຫ່ວງ,
 The first Approver in the list will be set as the default Approver.,The Approver ຄັ້ງ ທຳ ອິດໃນລາຍຊື່ຈະຖືກຕັ້ງເປັນຄ່າເລີ່ມຕົ້ນຂອງ Approver.,
 Shift Request Approver,ການຂໍວິທີການປ່ຽນ,
-PAN Number,ເລກ PAN,
 Provident Fund Account,ບັນຊີກອງທຶນຜູ້ໃຫ້ບໍລິການ,
 MICR Code,ລະຫັດ MICR,
 Repay unclaimed amount from salary,ຈ່າຍຄືນ ຈຳ ນວນທີ່ບໍ່ໄດ້ຮັບຈາກເງິນເດືອນ,
 Deduction from salary,ການຫັກລົບຈາກເງິນເດືອນ,
-Expired Leaves,ໃບ ໝົດ ອາຍຸ,
 If this is not checked the loan by default will be considered as a Demand Loan,ຖ້າສິ່ງນີ້ບໍ່ຖືກກວດກາເງິນກູ້ໂດຍຄ່າເລີ່ມຕົ້ນຈະຖືກພິຈາລະນາເປັນເງິນກູ້ຕາມຄວາມຕ້ອງການ,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ບັນຊີນີ້ໃຊ້ເພື່ອຈອງການຈ່າຍຄືນເງິນກູ້ຈາກຜູ້ກູ້ຢືມແລະຍັງຈ່າຍເງິນກູ້ໃຫ້ຜູ້ກູ້ຢືມອີກດ້ວຍ,
 This account is capital account which is used to allocate capital for loan disbursal account ,ບັນຊີນີ້ແມ່ນບັນຊີທຶນເຊິ່ງຖືກ ນຳ ໃຊ້ເພື່ອຈັດສັນທຶນ ສຳ ລັບບັນຊີການເບີກຈ່າຍເງິນກູ້,
@@ -8748,3 +8741,5 @@
 Is Mandatory,ແມ່ນບັງຄັບ,
 WhatsApp,WhatsApp,
 Make a call,ໂທອອກ,
+Approve,ອະນຸມັດ,
+Reject,ປະຕິເສດ,
diff --git a/erpnext/translations/lt.csv b/erpnext/translations/lt.csv
index 44bd069..2c87256 100644
--- a/erpnext/translations/lt.csv
+++ b/erpnext/translations/lt.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Auto pakartotinis dokumentas atnaujintas,
 Automotive,Automobiliai,
 Available,pasiekiamas,
-Available Leaves,Galimos lapai,
 Available Qty,Turimas Kiekis,
 Available Selling,Galima parduoti,
 Available for use date is required,Reikia naudoti datą,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Žmogiškasis išteklis,
 Human Resources,Žmogiškieji ištekliai,
-IFSC Code,IFSC kodas,
 IGST Amount,IGST suma,
 IP Address,IP adresas,
 ITC Available (whether in full op part),ITC yra prieinamas (ar visa jo dalis),
@@ -1666,7 +1664,6 @@
 Other,kitas,
 Other Reports,Kiti pranešimai,
 "Other outward supplies(Nil rated,Exempted)","Kiti išoriniai reikmenys (nulinis, neapmokestinamas)",
-Others,Kiti,
 Out Qty,iš Kiekis,
 Out Value,iš Vertė,
 Out of Order,Neveikia,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Iš viso (be mokesčio),
 Total Achieved,Iš viso Pasiektas,
 Total Actual,Iš viso Tikrasis,
-Total Allocated Leaves,Iš viso paskirstytų lapų,
 Total Amount,Visas kiekis,
 Total Amount Credited,Iš viso kredituota suma,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Iš viso taikomi mokesčiai į pirkimo kvito sumų lentelė turi būti tokios pačios kaip viso mokesčių ir rinkliavų,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Įkelti savo laiške galvą ir logotipą. (Galite redaguoti juos vėliau).,
 Upper Income,viršutinė pajamos,
 Use Sandbox,Naudokite Smėlio,
-Used Leaves,Naudotos lapai,
 User,Vartotojas,
 User ID,Vartotojo ID,
 User ID not set for Employee {0},Vartotojo ID nenustatyti Darbuotojo {0},
@@ -7949,12 +7944,10 @@
 Approvers,Patvirtina,
 The first Approver in the list will be set as the default Approver.,Pirmasis patvirtintojas sąraše bus nustatytas kaip numatytasis patvirtintojas.,
 Shift Request Approver,„Shift Request Approver“,
-PAN Number,PAN numeris,
 Provident Fund Account,„Provident Fund“ sąskaita,
 MICR Code,MICR kodas,
 Repay unclaimed amount from salary,Iš atlyginimo grąžinkite neprašytą sumą,
 Deduction from salary,Išskaičiavimas iš atlyginimo,
-Expired Leaves,Pasibaigę lapai,
 If this is not checked the loan by default will be considered as a Demand Loan,"Jei tai nėra pažymėta, paskola pagal numatytuosius nustatymus bus laikoma paklausos paskola",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ši sąskaita naudojama paskolos grąžinimo iš skolininko rezervavimui ir paskolos paskolos gavėjui išmokėjimui,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Ši sąskaita yra kapitalo sąskaita, naudojama paskirstyti kapitalą paskolos išmokėjimo sąskaitai",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Yra privaloma,
 WhatsApp,„WhatsApp“,
 Make a call,Paskambinti,
+Approve,Patvirtinti,
+Reject,Atmesti,
diff --git a/erpnext/translations/lv.csv b/erpnext/translations/lv.csv
index 131f94a..2cfa130 100644
--- a/erpnext/translations/lv.csv
+++ b/erpnext/translations/lv.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Auto atkārtots dokuments ir atjaunināts,
 Automotive,Automobiļu,
 Available,Pieejams,
-Available Leaves,Pieejamie lapas,
 Available Qty,Pieejams Daudz,
 Available Selling,Pieejams pārdošana,
 Available for use date is required,Pieejams izmantošanas datums ir nepieciešams,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Cilvēkresursi,
 Human Resources,Cilvēkresursi,
-IFSC Code,IFSC kods,
 IGST Amount,IGST summa,
 IP Address,IP adrese,
 ITC Available (whether in full op part),Pieejams ITC (vai nu pilnā variantā),
@@ -1666,7 +1664,6 @@
 Other,Cits,
 Other Reports,citas Ziņojumi,
 "Other outward supplies(Nil rated,Exempted)","Citi izejmateriāli (bez nulles, ar atbrīvojumu)",
-Others,Pārējie,
 Out Qty,Out Daudz,
 Out Value,out Value,
 Out of Order,Nestrādā,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Kopā (bez nodokļiem),
 Total Achieved,Kopā Izpildīts,
 Total Actual,Kopā Faktiskais,
-Total Allocated Leaves,Kopējais izdalīto lapu skaits,
 Total Amount,Kopējā summa,
 Total Amount Credited,Kopējā kredīta summa,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Kopā piemērojamām izmaksām, kas pirkuma čeka Items galda jābūt tāds pats kā Kopā nodokļiem un nodevām",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Augšupielādēt jūsu vēstules galva un logo. (Jūs varat rediģēt tos vēlāk).,
 Upper Income,Upper Ienākumi,
 Use Sandbox,Izmantot Sandbox,
-Used Leaves,Izmantotās lapas,
 User,Lietotājs,
 User ID,Lietotāja ID,
 User ID not set for Employee {0},"Lietotāja ID nav noteikts, Darbinieka {0}",
@@ -7949,12 +7944,10 @@
 Approvers,Apstiprinātāji,
 The first Approver in the list will be set as the default Approver.,Pirmais apstiprinātājs sarakstā tiks iestatīts kā noklusējuma apstiprinātājs.,
 Shift Request Approver,Maiņas pieprasījuma apstiprinātājs,
-PAN Number,PAN numurs,
 Provident Fund Account,Provident Fund konts,
 MICR Code,MICR kods,
 Repay unclaimed amount from salary,Atmaksājiet nepieprasīto summu no algas,
 Deduction from salary,Atskaitīšana no algas,
-Expired Leaves,"Lapas, kurām beidzies derīguma termiņš",
 If this is not checked the loan by default will be considered as a Demand Loan,"Ja tas nav pārbaudīts, aizdevums pēc noklusējuma tiks uzskatīts par Pieprasījuma aizdevumu",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Šis konts tiek izmantots, lai rezervētu aizdevuma atmaksu no aizņēmēja un arī aizdevuma izmaksu aizņēmējam",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Šis konts ir kapitāla konts, ko izmanto, lai piešķirtu kapitālu aizdevuma izmaksas kontam",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Ir obligāta,
 WhatsApp,WhatsApp,
 Make a call,Piezvanīt,
+Approve,Apstiprināt,
+Reject,Noraidīt,
diff --git a/erpnext/translations/mk.csv b/erpnext/translations/mk.csv
index 1084b12..f01b1b0 100644
--- a/erpnext/translations/mk.csv
+++ b/erpnext/translations/mk.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Автоматско повторување на документот се ажурира,
 Automotive,Автомобилски,
 Available,Достапни,
-Available Leaves,Достапни листови,
 Available Qty,На располагање Количина,
 Available Selling,Достапно Продажба,
 Available for use date is required,Достапен е датум за користење,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Човечки ресурси,
 Human Resources,Човечки ресурси,
-IFSC Code,IFSC код,
 IGST Amount,Износ на IGST,
 IP Address,IP адреса,
 ITC Available (whether in full op part),ИТЦ достапен (без разлика дали е во целост опција),
@@ -1666,7 +1664,6 @@
 Other,Други,
 Other Reports,Други извештаи,
 "Other outward supplies(Nil rated,Exempted)","Други надворешни материјали (нула со оценка, Ослободена)",
-Others,"Други, пак,",
 Out Qty,Од Количина,
 Out Value,Од вредност,
 Out of Order,Надвор од нарачката,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Вкупно (без данок),
 Total Achieved,Вкупно Постигнати,
 Total Actual,Вкупно Крај,
-Total Allocated Leaves,Вкупно распределени листови,
 Total Amount,Вкупен износ,
 Total Amount Credited,Вкупен износ на кредит,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Вкупно применливи давачки во Набавка Потврда Предмети маса мора да биде иста како и вкупните даноци и давачки,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Внеси писмо главата и логото. (Можете да ги менувате подоцна).,
 Upper Income,Горниот дел од приходите,
 Use Sandbox,Користете Sandbox,
-Used Leaves,Користени листови,
 User,Корисник,
 User ID,ID на корисникот,
 User ID not set for Employee {0},ID на корисникот не е поставена за вработените {0},
@@ -7949,12 +7944,10 @@
 Approvers,Аверверзно,
 The first Approver in the list will be set as the default Approver.,Првиот Одобрувач во списокот ќе биде поставен како стандарден Одобрувач.,
 Shift Request Approver,Одобрувач на барање за смена,
-PAN Number,Број на ПАН,
 Provident Fund Account,Сметка на фондот за провиденција,
 MICR Code,МИКР-код,
 Repay unclaimed amount from salary,Отплати небаран износ од плата,
 Deduction from salary,Намалување од плата,
-Expired Leaves,Истечени лисја,
 If this is not checked the loan by default will be considered as a Demand Loan,"Доколку ова не е проверено, заемот по дифолт ќе се смета како заем за побарувачка",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Оваа сметка се користи за резервирање на отплати на заеми од заемопримачот и исто така за исплата на заеми на заемопримачот,
 This account is capital account which is used to allocate capital for loan disbursal account ,Оваа сметка е капитална сметка што се користи за алокација на капитал за сметка за исплата на заем,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Задолжително е,
 WhatsApp,WhatsApp,
 Make a call,Направи повик,
+Approve,Одобри,
+Reject,Reject,
diff --git a/erpnext/translations/ml.csv b/erpnext/translations/ml.csv
index 2ddec21..59d3160 100644
--- a/erpnext/translations/ml.csv
+++ b/erpnext/translations/ml.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,സ്വയം ആവർത്തന പ്രമാണം അപ്ഡേറ്റുചെയ്തു,
 Automotive,ഓട്ടോമോട്ടീവ്,
 Available,ലഭ്യമായ,
-Available Leaves,ലഭ്യമായ ഇലകൾ,
 Available Qty,ലഭ്യമായ Qty,
 Available Selling,വിൽക്കൽ ലഭ്യമാണ്,
 Available for use date is required,ഉപയോഗ തീയതിക്ക് ആവശ്യമാണ്,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ഹബ് സമന്വയ ID,
 Human Resource,മാനവ വിഭവശേഷി,
 Human Resources,ഹ്യൂമൻ റിസോഴ്സസ്,
-IFSC Code,IFSC കോഡ്,
 IGST Amount,IGST തുക,
 IP Address,IP വിലാസം,
 ITC Available (whether in full op part),ഐടിസി ലഭ്യമാണ് (പൂർണ്ണമായ ഭാഗമാണെങ്കിലും),
@@ -1666,7 +1664,6 @@
 Other,മറ്റുള്ളവ,
 Other Reports,മറ്റ് റിപ്പോർട്ടുകളിൽ,
 "Other outward supplies(Nil rated,Exempted)","മറ്റ് ബാഹ്യ വിതരണങ്ങൾ (ഇല്ല റേറ്റുചെയ്തു, ഒഴിവാക്കി)",
-Others,മറ്റുള്ളവ,
 Out Qty,Qty ഔട്ട്,
 Out Value,മൂല്യം ഔട്ട്,
 Out of Order,പ്രവർത്തനരഹിതം,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),ആകെ (നികുതി കൂടാതെ),
 Total Achieved,മികച്ച വിജയം ആകെ,
 Total Actual,യഥാർത്ഥ ആകെ,
-Total Allocated Leaves,ആകെ അനുവദിച്ച ഇലകൾ,
 Total Amount,മൊത്തം തുക,
 Total Amount Credited,മൊത്തം തുക ലഭിച്ചു,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,വാങ്ങൽ രസീത് ഇനങ്ങൾ പട്ടികയിൽ ആകെ ബാധകമായ നിരക്കുകളും ആകെ നികുതി ചാർജുകളും തുല്യമായിരിക്കണം,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,നിങ്ങളുടെ കത്ത് തലയും ലോഗോ അപ്ലോഡ്. (നിങ്ങൾക്ക് പിന്നീട് എഡിറ്റ് ചെയ്യാൻ കഴിയും).,
 Upper Income,അപ്പർ ആദായ,
 Use Sandbox,താങ്കളെ,
-Used Leaves,ഉപയോഗിച്ച ഇലകൾ,
 User,ഉപയോക്താവ്,
 User ID,യൂസർ ഐഡി,
 User ID not set for Employee {0},ഉപയോക്തൃ ഐഡി ജീവനക്കാരുടെ {0} വെച്ചിരിക്കുന്നു അല്ല,
@@ -7949,12 +7944,10 @@
 Approvers,അംഗങ്ങൾ,
 The first Approver in the list will be set as the default Approver.,ലിസ്റ്റിലെ ആദ്യ അംഗീകാരം സ്ഥിരസ്ഥിതി അംഗീകാരമായി സജ്ജമാക്കും.,
 Shift Request Approver,ഷിഫ്റ്റ് അഭ്യർത്ഥന അംഗീകാരം,
-PAN Number,പാൻ നമ്പർ,
 Provident Fund Account,പ്രൊവിഡന്റ് ഫണ്ട് അക്കൗണ്ട്,
 MICR Code,MICR കോഡ്,
 Repay unclaimed amount from salary,ക്ലെയിം ചെയ്യാത്ത തുക ശമ്പളത്തിൽ നിന്ന് തിരിച്ചടയ്ക്കുക,
 Deduction from salary,ശമ്പളത്തിൽ നിന്ന് കിഴിവ്,
-Expired Leaves,കാലഹരണപ്പെട്ട ഇലകൾ,
 If this is not checked the loan by default will be considered as a Demand Loan,ഇത് പരിശോധിച്ചില്ലെങ്കിൽ സ്ഥിരസ്ഥിതിയായി വായ്പ ഒരു ഡിമാൻഡ് വായ്പയായി കണക്കാക്കും,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,വായ്പക്കാരനിൽ നിന്ന് വായ്പ തിരിച്ചടവ് ബുക്ക് ചെയ്യുന്നതിനും വായ്പക്കാരന് വായ്പ വിതരണം ചെയ്യുന്നതിനും ഈ അക്കൗണ്ട് ഉപയോഗിക്കുന്നു,
 This account is capital account which is used to allocate capital for loan disbursal account ,വായ്പാ വിതരണ അക്കൗണ്ടിനായി മൂലധനം അനുവദിക്കുന്നതിന് ഉപയോഗിക്കുന്ന മൂലധന അക്കൗണ്ടാണ് ഈ അക്കൗണ്ട്,
@@ -8748,3 +8741,5 @@
 Is Mandatory,നിർബന്ധമാണ്,
 WhatsApp,വാട്ട്‌സ്ആപ്പ്,
 Make a call,ഒരു കാൾ ചെയ്യുക,
+Approve,അംഗീകരിക്കുക,
+Reject,നിരസിക്കുക,
diff --git a/erpnext/translations/mr.csv b/erpnext/translations/mr.csv
index 4206335..ff339b6 100644
--- a/erpnext/translations/mr.csv
+++ b/erpnext/translations/mr.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,स्वयं पुनरावृत्ती कागदजत्र अद्यतनित केले,
 Automotive,ऑटोमोटिव्ह,
 Available,उपलब्ध,
-Available Leaves,उपलब्ध पाने,
 Available Qty,उपलब्ध Qty,
 Available Selling,उपलब्ध विक्री,
 Available for use date is required,वापरण्याच्या तारखेसाठी उपलब्ध असणे आवश्यक आहे,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,हब सिंक ID,
 Human Resource,मानव संसाधन,
 Human Resources,मानव संसाधन,
-IFSC Code,आयएफएससी कोड,
 IGST Amount,आयजीएसटी रक्कम,
 IP Address,IP पत्ता,
 ITC Available (whether in full op part),आयटीसी उपलब्ध (पूर्ण ऑप भागातील आहे की नाही),
@@ -1666,7 +1664,6 @@
 Other,इतर,
 Other Reports,इतर अहवाल,
 "Other outward supplies(Nil rated,Exempted)","इतर बाह्य पुरवठा (शून्य रेट नाही, सूट दिलेला)",
-Others,इतर,
 Out Qty,आउट Qty,
 Out Value,मूल्य Qty,
 Out of Order,नियमबाह्य,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),एकूण (कर न करता),
 Total Achieved,एकूण गाठले,
 Total Actual,वास्तविक एकूण,
-Total Allocated Leaves,एकूण वाटप पाने,
 Total Amount,एकूण रक्कम,
 Total Amount Credited,एकूण रक्कम श्रेय,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,खरेदी पावती आयटम टेबल एकूण लागू शुल्क एकूण कर आणि शुल्क म्हणून समान असणे आवश्यक आहे,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,आपले पत्र डोके आणि लोगो अपलोड करा. (आपण नंतर संपादित करू शकता).,
 Upper Income,उच्च उत्पन्न,
 Use Sandbox,Sandbox वापर,
-Used Leaves,वापरले पाने,
 User,वापरकर्ता,
 User ID,वापरकर्ता आयडी,
 User ID not set for Employee {0},वापरकर्ता आयडी कर्मचारी  {0}साठी सेट नाही,
@@ -7949,12 +7944,10 @@
 Approvers,वाद,
 The first Approver in the list will be set as the default Approver.,सूचीतील प्रथम मंजूर डीफॉल्ट मंजूर म्हणून सेट केला जाईल.,
 Shift Request Approver,शिफ्ट विनंती मंजूर,
-PAN Number,पॅन क्रमांक,
 Provident Fund Account,भविष्य निर्वाह निधी,
 MICR Code,एमआयसीआर कोड,
 Repay unclaimed amount from salary,वेतनातून दावा न केलेली रक्कम परत द्या,
 Deduction from salary,वेतनातून वजावट,
-Expired Leaves,कालबाह्य झालेले पाने,
 If this is not checked the loan by default will be considered as a Demand Loan,हे तपासले नाही तर डीफॉल्टनुसार कर्ज डिमांड लोन मानले जाईल,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,हे खाते कर्जदाराकडून कर्ज परतफेड बुक करण्यासाठी आणि कर्जदाराला कर्ज वितरणासाठी वापरले जाते.,
 This account is capital account which is used to allocate capital for loan disbursal account ,हे खाते भांडवल खाते आहे जे कर्ज वितरण खात्यासाठी भांडवल वाटप करण्यासाठी वापरले जाते,
@@ -8748,3 +8741,5 @@
 Is Mandatory,अनिवार्य आहे,
 WhatsApp,व्हॉट्सअ‍ॅप,
 Make a call,कॉल करा,
+Approve,मंजूर,
+Reject,नकार,
diff --git a/erpnext/translations/ms.csv b/erpnext/translations/ms.csv
index ebfc36c..2258a18 100644
--- a/erpnext/translations/ms.csv
+++ b/erpnext/translations/ms.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Dokumen pengulang automatik dikemas kini,
 Automotive,Automotif,
 Available,Tersedia,
-Available Leaves,Daun yang disediakan,
 Available Qty,Terdapat Qty,
 Available Selling,Jualan Sedia Ada,
 Available for use date is required,Tersedia untuk tarikh penggunaan,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID Sync Hub,
 Human Resource,Sumber Manusia,
 Human Resources,Sumber Manusia,
-IFSC Code,Kod IFSC,
 IGST Amount,Jumlah IGST,
 IP Address,Alamat IP,
 ITC Available (whether in full op part),ITC Tersedia (sama ada dalam bahagian penuh),
@@ -1666,7 +1664,6 @@
 Other,Lain-lain,
 Other Reports,Laporan Lain,
 "Other outward supplies(Nil rated,Exempted)","Bekalan luaran lain (Tiada nilai, Dikecualikan)",
-Others,Lain,
 Out Qty,Keluar Qty,
 Out Value,Nilai Keluar,
 Out of Order,Telah habis,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Jumlah (Tanpa Cukai),
 Total Achieved,Jumlah Pencapaian,
 Total Actual,Jumlah Sebenar,
-Total Allocated Leaves,Jumlah Dikelilingi Daun,
 Total Amount,Jumlah,
 Total Amount Credited,Jumlah Jumlah Dikreditkan,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Jumlah Caj Terpakai di Purchase meja Resit Item mesti sama dengan Jumlah Cukai dan Caj,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Memuat naik kepala surat dan logo. (Anda boleh mengeditnya kemudian).,
 Upper Income,Pendapatan Atas,
 Use Sandbox,Penggunaan Sandbox,
-Used Leaves,Daun yang digunakan,
 User,Pengguna,
 User ID,ID Pengguna,
 User ID not set for Employee {0},ID Pengguna tidak ditetapkan untuk Pekerja {0},
@@ -7949,12 +7944,10 @@
 Approvers,Meluluskan,
 The first Approver in the list will be set as the default Approver.,Pelulus pertama dalam senarai akan ditetapkan sebagai Pelulus lalai.,
 Shift Request Approver,Kelulusan Permintaan Shift,
-PAN Number,Nombor PAN,
 Provident Fund Account,Akaun Kumpulan Wang Simpanan,
 MICR Code,Kod MICR,
 Repay unclaimed amount from salary,Bayar balik jumlah yang tidak dituntut dari gaji,
 Deduction from salary,Potongan gaji,
-Expired Leaves,Daun Tamat Tempoh,
 If this is not checked the loan by default will be considered as a Demand Loan,"Sekiranya ini tidak diperiksa, pinjaman secara lalai akan dianggap sebagai Permintaan Pinjaman",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Akaun ini digunakan untuk membuat pembayaran pinjaman dari peminjam dan juga mengeluarkan pinjaman kepada peminjam,
 This account is capital account which is used to allocate capital for loan disbursal account ,Akaun ini adalah akaun modal yang digunakan untuk memperuntukkan modal untuk akaun pengeluaran pinjaman,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Adakah Wajib,
 WhatsApp,WhatsApp,
 Make a call,Buat panggilan,
+Approve,Terima,
+Reject,Tolak,
diff --git a/erpnext/translations/my.csv b/erpnext/translations/my.csv
index 82015c8..dc5ab12 100644
--- a/erpnext/translations/my.csv
+++ b/erpnext/translations/my.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,အော်တိုထပ်စာရွက်စာတမ်း updated,
 Automotive,မော်တော်ယာဉ်,
 Available,ရရှိနိုင်,
-Available Leaves,ရရှိနိုင်အရွက်,
 Available Qty,ရရှိနိုင်သည့် Qty,
 Available Selling,ရောင်းချခြင်းရရှိနိုင်,
 Available for use date is required,အသုံးပြုမှုနေ့စွဲများအတွက်ရရှိနိုင်လိုအပ်ပါသည်,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,hub Sync ကို ID ကို,
 Human Resource,လူ့စွမ်းအားအရင်းအမြစ်,
 Human Resources,လူ့အင်အားအရင်းအမြစ်,
-IFSC Code,IFSC Code ကို,
 IGST Amount,IGST ငွေပမာဏ,
 IP Address,IP Address ကို,
 ITC Available (whether in full op part),(အပြည့်အဝ op အစိတ်အပိုင်းအတွက်ရှိမရှိ) ရရှိနိုင် ITC,
@@ -1666,7 +1664,6 @@
 Other,အခြား,
 Other Reports,အခြားအစီရင်ခံစာများ,
 "Other outward supplies(Nil rated,Exempted)","သည်အခြားအပြင်ထောက်ပံ့ရေးပစ္စည်းများ (nil rated, ကင်းလွတ်ခွင့်)",
-Others,အခြားသူများ,
 Out Qty,Qty out,
 Out Value,Value တစ်ခုအထဲက,
 Out of Order,အမိန့်များထဲက,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),(အခွန်မပါ) စုစုပေါင်း,
 Total Achieved,အကောင်အထည်ဖော်ခဲ့သောစုစုပေါင်း,
 Total Actual,အမှန်တကယ်စုစုပေါင်း,
-Total Allocated Leaves,စုစုပေါင်းခွဲဝေအရွက်,
 Total Amount,စုစုပေါင်းတန်ဘိုး,
 Total Amount Credited,စုစုပေါင်းငွေပမာဏအသိအမှတ်ပြု,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,အရစ်ကျငွေလက်ခံပြေစာပစ္စည်းများ table ထဲမှာစုစုပေါင်းသက်ဆိုင်သောစွပ်စွဲချက်စုစုပေါင်းအခွန်နှင့်စွပ်စွဲချက်အဖြစ်အတူတူပင်ဖြစ်ရပါမည်,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,သင့်ရဲ့စာကိုဦးခေါင်းနှင့်လိုဂို upload ။ (သင်နောက်ပိုင်းမှာသူတို့ကိုတည်းဖြတ်နိုင်သည်) ။,
 Upper Income,အထက်ဝင်ငွေခွန်,
 Use Sandbox,Sandbox ကိုသုံးပါ,
-Used Leaves,တပတ်ရစ်အရွက်,
 User,အသုံးပြုသူကို,
 User ID,သုံးစွဲသူအိုင်ဒီ,
 User ID not set for Employee {0},အသုံးပြုသူ ID န်ထမ်း {0} သည်စွဲလမ်းခြင်းမ,
@@ -7949,12 +7944,10 @@
 Approvers,ခွင့်ပြုချက်,
 The first Approver in the list will be set as the default Approver.,စာရင်းထဲတွင်ပထမအတည်ပြုချက်ကိုမူလအတည်ပြုချက်အဖြစ်သတ်မှတ်မည်။,
 Shift Request Approver,Shift Request Approver,
-PAN Number,PAN နံပါတ်,
 Provident Fund Account,Provident ရန်ပုံငွေအကောင့်,
 MICR Code,MICR ကုဒ်,
 Repay unclaimed amount from salary,မတောင်းဆိုသောငွေကိုလစာမှပြန်ပေးပါ,
 Deduction from salary,လစာမှနှုတ်ယူခြင်း,
-Expired Leaves,သက်တမ်းကုန်ဆုံးသောအရွက်,
 If this is not checked the loan by default will be considered as a Demand Loan,အကယ်၍ ၎င်းကိုမစစ်ဆေးပါကပုံမှန်အားဖြင့်ချေးငွေကို Demand Loan အဖြစ်သတ်မှတ်မည်,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ဒီအကောင့်ကိုငွေချေးသူထံမှချေးငွေပြန်ဆပ်မှုကိုကြိုတင်မှာကြားပြီးငွေချေးသူမှချေးငွေများထုတ်ပေးသည်,
 This account is capital account which is used to allocate capital for loan disbursal account ,ဤအကောင့်သည်ငွေရင်းငွေစာရင်းဖြစ်သည်,
@@ -8748,3 +8741,5 @@
 Is Mandatory,မသင်မနေရဖြစ်ပါတယ်,
 WhatsApp,နင်,
 Make a call,ခေါ်ဆိုပါ,
+Approve,အတည်ပြု,
+Reject,ပယ်ချ,
diff --git a/erpnext/translations/nl.csv b/erpnext/translations/nl.csv
index 862d585..ad11eae 100644
--- a/erpnext/translations/nl.csv
+++ b/erpnext/translations/nl.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatisch herhaalde document bijgewerkt,
 Automotive,Automotive,
 Available,Beschikbaar,
-Available Leaves,Beschikbare bladeren,
 Available Qty,Beschikbaar aantal,
 Available Selling,Beschikbare verkoop,
 Available for use date is required,Beschikbaar voor gebruik datum is vereist,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Human Resource,
 Human Resources,Human Resources,
-IFSC Code,IFSC-code,
 IGST Amount,IGST Bedrag,
 IP Address,IP adres,
 ITC Available (whether in full op part),ITC beschikbaar (al dan niet volledig),
@@ -1666,7 +1664,6 @@
 Other,Ander,
 Other Reports,Andere rapporten,
 "Other outward supplies(Nil rated,Exempted)","Andere uitgaande leveringen (nul, vrijgesteld)",
-Others,anderen,
 Out Qty,out Aantal,
 Out Value,out Value,
 Out of Order,Out of Order,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totaal (zonder btw),
 Total Achieved,Totaal Bereikt,
 Total Actual,Totaal Werkelijke,
-Total Allocated Leaves,Totaal toegewezen bladeren,
 Total Amount,Totaal bedrag,
 Total Amount Credited,Totaal gecrediteerd bedrag,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Totaal van toepassing zijnde kosten in Kwitantie Items tabel moet hetzelfde zijn als de totale belastingen en heffingen,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Upload uw brief hoofd en logo. (Je kunt ze later bewerken).,
 Upper Income,Bovenste Inkomen,
 Use Sandbox,Gebruik Sandbox,
-Used Leaves,Gebruikte bladeren,
 User,Gebruiker,
 User ID,Gebruikers-ID,
 User ID not set for Employee {0},Gebruikers-ID niet ingesteld voor werknemer {0},
@@ -7949,12 +7944,10 @@
 Approvers,Goedkeurders,
 The first Approver in the list will be set as the default Approver.,De eerste goedkeurder in de lijst wordt ingesteld als de standaard goedkeurder.,
 Shift Request Approver,Shift Request Approver,
-PAN Number,PAN-nummer,
 Provident Fund Account,Provident Fund-account,
 MICR Code,MICR-code,
 Repay unclaimed amount from salary,Betaal niet-opgeëiste bedrag terug van salaris,
 Deduction from salary,Inhouding op salaris,
-Expired Leaves,Verlopen bladeren,
 If this is not checked the loan by default will be considered as a Demand Loan,"Als dit niet is aangevinkt, wordt de lening standaard beschouwd als een opeisbare lening",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Deze rekening wordt gebruikt voor het boeken van aflossingen van leningen van de lener en ook voor het uitbetalen van leningen aan de lener,
 This account is capital account which is used to allocate capital for loan disbursal account ,Deze rekening is een kapitaalrekening die wordt gebruikt om kapitaal toe te wijzen voor het uitbetalen van leningen,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Is verplicht,
 WhatsApp,WhatsApp,
 Make a call,Bellen,
+Approve,Goedkeuren,
+Reject,afwijzen,
diff --git a/erpnext/translations/no.csv b/erpnext/translations/no.csv
index 0c1cfac..b136e97 100644
--- a/erpnext/translations/no.csv
+++ b/erpnext/translations/no.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatisk gjentatt dokument oppdatert,
 Automotive,Automotive,
 Available,Tilgjengelig,
-Available Leaves,Tilgjengelige blader,
 Available Qty,Tilgjengelig antall,
 Available Selling,Tilgjengelig salg,
 Available for use date is required,Tilgjengelig for bruk er nødvendig,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Menneskelig Resurs,
 Human Resources,Menneskelige ressurser,
-IFSC Code,IFSC-kode,
 IGST Amount,IGST Beløp,
 IP Address,IP adresse,
 ITC Available (whether in full op part),ITC tilgjengelig (om fullstendig del),
@@ -1666,7 +1664,6 @@
 Other,Andre,
 Other Reports,Andre rapporter,
 "Other outward supplies(Nil rated,Exempted)","Andre forsyninger (ikke vurdert, unntatt)",
-Others,Annet,
 Out Qty,Ut Antall,
 Out Value,ut Verdi,
 Out of Order,I ustand,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totalt (uten skatt),
 Total Achieved,Oppnådd Total,
 Total Actual,Total Actual,
-Total Allocated Leaves,Totalt tildelte blad,
 Total Amount,Totalbeløp,
 Total Amount Credited,Totalt beløp krevet,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Totalt gjeldende avgifter i kvitteringen Elementer tabellen må være det samme som total skatter og avgifter,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Last opp din brevhode og logo. (Du kan redigere dem senere).,
 Upper Income,Øvre inntekt,
 Use Sandbox,bruk Sandbox,
-Used Leaves,Brukte blad,
 User,Bruker,
 User ID,bruker-ID,
 User ID not set for Employee {0},Bruker-ID ikke satt for Employee {0},
@@ -7949,12 +7944,10 @@
 Approvers,Tilstridende,
 The first Approver in the list will be set as the default Approver.,Den første godkjenneren i listen blir angitt som standard godkjenner.,
 Shift Request Approver,Godkjenning av skiftforespørsel,
-PAN Number,PAN-nummer,
 Provident Fund Account,Forsikringskonto,
 MICR Code,MICR-kode,
 Repay unclaimed amount from salary,Tilbakebetalt uavhentet beløp fra lønn,
 Deduction from salary,Trekk fra lønn,
-Expired Leaves,Utløpte blader,
 If this is not checked the loan by default will be considered as a Demand Loan,"Hvis dette ikke er sjekket, vil lånet som standard bli betraktet som et etterspørsel",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Denne kontoen brukes til å bestille tilbakebetaling av lån fra låntaker og også utbetale lån til låner,
 This account is capital account which is used to allocate capital for loan disbursal account ,Denne kontoen er en kapitalkonto som brukes til å fordele kapital til utbetaling av lån,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Er obligatorisk,
 WhatsApp,Hva skjer,
 Make a call,Ta en telefon,
+Approve,Vedta,
+Reject,Avvis,
diff --git a/erpnext/translations/pl.csv b/erpnext/translations/pl.csv
index 272e2fc..9be56f3 100644
--- a/erpnext/translations/pl.csv
+++ b/erpnext/translations/pl.csv
@@ -285,7 +285,6 @@
 Auto Repeat,Auto Repeat,
 Auto repeat document updated,Automatycznie powtórzony dokument został zaktualizowany,
 Available,Dostępny,
-Available Leaves,Dostępne Nieobecności,
 Available Qty,Dostępne szt,
 Available Selling,Dostępne sprzedawanie,
 Available for use date is required,Dostępna jest data przydatności do użycia,
@@ -1121,7 +1120,6 @@
 Hub Sync ID,Identyfikator Hub Sync,
 Human Resource,Zasoby ludzkie,
 Human Resources,Kadry,
-IFSC Code,Kod IFSC,
 IGST Amount,Wielkość IGST,
 IP Address,Adres IP,
 ITC Available (whether in full op part),Dostępne ITC (czy w pełnej wersji),
@@ -1659,7 +1657,6 @@
 Other,Inne,
 Other Reports,Inne raporty,
 "Other outward supplies(Nil rated,Exempted)","Inne dostawy zewnętrzne (bez oceny, zwolnione)",
-Others,Inni,
 Out Qty,Brak Ilości,
 Out Value,Brak Wartości,
 Out of Order,Nieczynny,
@@ -2788,7 +2785,6 @@
 Total (Without Tax),Razem (bez podatku),
 Total Achieved,Razem Osiągnięte,
 Total Actual,Razem Rzeczywisty,
-Total Allocated Leaves,Całkowicie Przydzielone Nieobecności,
 Total Amount,Wartość całkowita,
 Total Amount Credited,Całkowita kwota kredytu,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Wszystkich obowiązujących opłat w ZAKUPU Elementy tabeli muszą być takie same jak Wszystkich podatkach i opłatach,
@@ -2898,7 +2894,6 @@
 Upload your letter head and logo. (you can edit them later).,Prześlij nagłówek firmowy i logo. (Można je edytować później).,
 Upper Income,Wzrost Wpływów,
 Use Sandbox,Korzystanie Sandbox,
-Used Leaves,Wykorzystane Nieobecności,
 User,Użytkownik,
 User ID,ID Użytkownika,
 User ID not set for Employee {0},ID Użytkownika nie ustawiony dla Pracownika {0},
@@ -7860,12 +7855,10 @@
 Approvers,Osoby zatwierdzające,
 The first Approver in the list will be set as the default Approver.,Pierwsza osoba zatwierdzająca na liście zostanie ustawiona jako domyślna osoba zatwierdzająca.,
 Shift Request Approver,Zatwierdzający prośbę o zmianę,
-PAN Number,Numer PAN,
 Provident Fund Account,Konto funduszu rezerwowego,
 MICR Code,Kod MICR,
 Repay unclaimed amount from salary,Zwróć nieodebraną kwotę z wynagrodzenia,
 Deduction from salary,Odliczenie od wynagrodzenia,
-Expired Leaves,Wygasłe liście,
 If this is not checked the loan by default will be considered as a Demand Loan,"Jeśli opcja ta nie zostanie zaznaczona, pożyczka domyślnie zostanie uznana za pożyczkę na żądanie",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"To konto służy do księgowania spłat pożyczki od pożyczkobiorcy, a także do wypłaty pożyczki pożyczkobiorcy",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Rachunek ten jest rachunkiem kapitałowym, który służy do alokacji kapitału na rachunek wypłat pożyczki",
@@ -8659,3 +8652,5 @@
 Is Mandatory,Jest obowiązkowe,
 WhatsApp,WhatsApp,
 Make a call,Zadzwoń,
+Approve,Zatwierdzać,
+Reject,Odrzucać,
diff --git a/erpnext/translations/ps.csv b/erpnext/translations/ps.csv
index 8d4e467..8033752 100644
--- a/erpnext/translations/ps.csv
+++ b/erpnext/translations/ps.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,د اتوم بیاکتنه سند تازه شوی,
 Automotive,مشين,
 Available,شته,
-Available Leaves,شتون لري,
 Available Qty,موجود Qty,
 Available Selling,موجود پلورل,
 Available for use date is required,د کارولو نیټه اړینه ده,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,د کور همکاري ID,
 Human Resource,د بشري منابعو,
 Human Resources,بشري منابع,
-IFSC Code,د IFSC کود,
 IGST Amount,د IGST مقدار,
 IP Address,IP پته,
 ITC Available (whether in full op part),ITC شتون لري (ایا په بشپړ انتخابي برخه کې),
@@ -1666,7 +1664,6 @@
 Other,نور,
 Other Reports,نور راپورونه,
 "Other outward supplies(Nil rated,Exempted)",نور خارجی اکمالات (نیل ارزول شوی ، معاف شوی),
-Others,نور,
 Out Qty,له جملې څخه Qty,
 Out Value,له جملې څخه د ارزښت,
 Out of Order,له کاره وتلی,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),ټول (د مالیې پرته),
 Total Achieved,Total السته,
 Total Actual,Total واقعي,
-Total Allocated Leaves,ټول ټاکل شوي پاڼي,
 Total Amount,جمله پیسی,
 Total Amount Credited,ټولې پیسې اعتبار شوي,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,په رانيول رسيد توکي جدول ټولې د تطبیق په تور باید په توګه ټول ماليات او په تور ورته وي,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,پورته ستاسو لیک مشر او لوګو. (کولی شئ چې وروسته د سمولو لپاره).,
 Upper Income,د مشرانو پر عايداتو,
 Use Sandbox,sandbox استعمال,
-Used Leaves,استعمال شوي پاڼي,
 User,کارن,
 User ID,کارن نوم,
 User ID not set for Employee {0},کارن تذکرو لپاره د کارکونکو نه {0},
@@ -7949,12 +7944,10 @@
 Approvers,مخالفت,
 The first Approver in the list will be set as the default Approver.,په لیست کې لومړی تصویبونکی به د ډیفالټ تصویب کونکي په توګه وټاکل شي.,
 Shift Request Approver,د شفټ غوښتنه تصویب,
-PAN Number,د پان شمیره,
 Provident Fund Account,د راتلونکي فنډ حساب,
 MICR Code,د MICR کوډ,
 Repay unclaimed amount from salary,له تنخوا څخه نامعلومه اندازه پیسې بیرته ورکړئ,
 Deduction from salary,له معاش څخه تخفیف,
-Expired Leaves,ختم شوې پاvesې,
 If this is not checked the loan by default will be considered as a Demand Loan,که چیرې دا چک نه شي نو په ډیفالټ ډول به د غوښتنې پور په توګه وګ .ل شي,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,دا حساب د پور ورکونکي څخه د پور بیرته تادیات کولو لپاره او هم پور اخیستونکي ته د پورونو توزیع لپاره کارول کیږي,
 This account is capital account which is used to allocate capital for loan disbursal account ,دا حساب د پانګوونې حساب دی چې د پور توزیع شوي حساب لپاره د پانګو ځانګړي کولو لپاره کارول کیږي,
@@ -8748,3 +8741,5 @@
 Is Mandatory,لازمي دی,
 WhatsApp,WhatsApp,
 Make a call,یو زنګ ووهه,
+Approve,منظور کړل,
+Reject,رد,
diff --git a/erpnext/translations/pt-BR.csv b/erpnext/translations/pt-BR.csv
index 0b7fa7e..9823470 100644
--- a/erpnext/translations/pt-BR.csv
+++ b/erpnext/translations/pt-BR.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Auto repetir documento atualizado,
 Automotive,Automotivo,
 Available,Disponível,
-Available Leaves,Folhas Disponíveis,
 Available Qty,Qtde Disponível,
 Available Selling,Venda Disponível,
 Available for use date is required,Disponível para data de uso é obrigatório,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Identificação da Sincronização do Hub,
 Human Resource,Recursos Humanos,
 Human Resources,Recursos Humanos,
-IFSC Code,Código IFSC,
 IGST Amount,Valor IGST,
 IP Address,Endereço de Ip,
 ITC Available (whether in full op part),ITC disponível (seja na parte operacional completa),
@@ -1666,7 +1664,6 @@
 Other,Outro,
 Other Reports,Relatórios Adicionais,
 "Other outward supplies(Nil rated,Exempted)","Outras fontes externas (valor nominal nominal, isentos)",
-Others,Outros,
 Out Qty,Qtde Saída,
 Out Value,Valor Saída,
 Out of Order,Fora de Serviço,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (sem Imposto),
 Total Achieved,Total de Alcançados,
 Total Actual,Total Atual,
-Total Allocated Leaves,Total de Folhas Alocadas,
 Total Amount,Valor Total,
 Total Amount Credited,Quantidade Total Creditada,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total de encargos aplicáveis em Purchase mesa Itens recibo deve ser o mesmo que o total Tributos e Encargos,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Publique seu timbre e logotipo. (Você pode editá-las mais tarde).,
 Upper Income,Alta Renda,
 Use Sandbox,Use Sandbox,
-Used Leaves,Folhas Usadas,
 User,Usuário,
 User ID,ID de Usuário,
 User ID not set for Employee {0},ID de Usuário Não Definida Para Colaborador {0},
@@ -7949,12 +7944,10 @@
 Approvers,Aprovadores,
 The first Approver in the list will be set as the default Approver.,O primeiro aprovador da lista será definido como o aprovador padrão.,
 Shift Request Approver,Aprovador de Solicitação de Turno,
-PAN Number,Número PAN,
 Provident Fund Account,Conta do Fundo de Previdência,
 MICR Code,Código MICR,
 Repay unclaimed amount from salary,Reembolsar quantia não reclamada do salário,
 Deduction from salary,Dedução do salário,
-Expired Leaves,Folhas Vencidas,
 If this is not checked the loan by default will be considered as a Demand Loan,Se esta opção não for marcada o empréstimo por padrão será considerado um empréstimo à vista,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Esta conta é usada para registrar reembolsos de empréstimos do mutuário e também desembolsar empréstimos para o mutuário,
 This account is capital account which is used to allocate capital for loan disbursal account ,Esta conta é a conta de capital que é usada para alocar capital para a conta de desembolso do empréstimo,
@@ -8748,3 +8741,5 @@
 Is Mandatory,É mandatório,
 WhatsApp,Whatsapp,
 Make a call,Faça uma ligação,
+Approve,Aprovar,
+Reject,Rejeitar,
diff --git a/erpnext/translations/pt.csv b/erpnext/translations/pt.csv
index 10f1b71..c2afe32 100644
--- a/erpnext/translations/pt.csv
+++ b/erpnext/translations/pt.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Auto repetir documento atualizado,
 Automotive,Automóvel,
 Available,Disponível,
-Available Leaves,Folhas Disponíveis,
 Available Qty,Qtd disponível,
 Available Selling,Venda disponível,
 Available for use date is required,Disponível para data de uso é obrigatório,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Identificação da Sincronização do Hub,
 Human Resource,Recursos humanos,
 Human Resources,Recursos humanos,
-IFSC Code,Código IFSC,
 IGST Amount,Valor IGST,
 IP Address,Endereço de IP,
 ITC Available (whether in full op part),ITC disponível (seja na parte operacional completa),
@@ -1666,7 +1664,6 @@
 Other,Outro,
 Other Reports,Outros relatórios,
 "Other outward supplies(Nil rated,Exempted)","Outras fontes externas (valor nominal nominal, isentos)",
-Others,Outros,
 Out Qty,Qtd de Saída,
 Out Value,Valor de Saída,
 Out of Order,Fora de serviço,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (sem imposto),
 Total Achieved,Total Alcançado,
 Total Actual,Total real,
-Total Allocated Leaves,Total de Folhas Alocadas,
 Total Amount,Valor total,
 Total Amount Credited,Quantidade Total Creditada,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Total de encargos aplicáveis em Purchase mesa Itens recibo deve ser o mesmo que o total Tributos e Encargos,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Carregue o cabeçalho e logótipo da carta. (Pode editá-los mais tarde.),
 Upper Income,Rendimento Superior,
 Use Sandbox,Use Sandbox,
-Used Leaves,Folhas Usadas,
 User,Do utilizador,
 User ID,ID de Utiliz.,
 User ID not set for Employee {0},Não está definido a ID do utilizador para o Funcionário {0},
@@ -7949,12 +7944,10 @@
 Approvers,Aprovadores,
 The first Approver in the list will be set as the default Approver.,O primeiro aprovador da lista será definido como o aprovador padrão.,
 Shift Request Approver,Aprovador de solicitação de turno,
-PAN Number,Número PAN,
 Provident Fund Account,Conta do fundo de previdência,
 MICR Code,Código MICR,
 Repay unclaimed amount from salary,Reembolsar quantia não reclamada do salário,
 Deduction from salary,Dedução do salário,
-Expired Leaves,Folhas Vencidas,
 If this is not checked the loan by default will be considered as a Demand Loan,"Se esta opção não for marcada, o empréstimo, por padrão, será considerado um empréstimo à vista",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Esta conta é usada para registrar reembolsos de empréstimos do mutuário e também desembolsar empréstimos para o mutuário,
 This account is capital account which is used to allocate capital for loan disbursal account ,Esta conta é a conta de capital que é usada para alocar capital para a conta de desembolso do empréstimo,
@@ -8748,3 +8741,5 @@
 Is Mandatory,É mandatório,
 WhatsApp,Whatsapp,
 Make a call,Faça uma ligação,
+Approve,Aprovar,
+Reject,Rejeitar,
diff --git a/erpnext/translations/ro.csv b/erpnext/translations/ro.csv
index 80c32aa..0cb3f84 100644
--- a/erpnext/translations/ro.csv
+++ b/erpnext/translations/ro.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Documentul repetat automat a fost actualizat,
 Automotive,Autopropulsat,
 Available,Disponibil,
-Available Leaves,Frunzele disponibile,
 Available Qty,Cantitate disponibilă,
 Available Selling,Vânzări disponibile,
 Available for use date is required,Data de utilizare disponibilă pentru utilizare este necesară,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub ID de sincronizare,
 Human Resource,Resurse umane,
 Human Resources,Resurse umane,
-IFSC Code,Codul IFSC,
 IGST Amount,Suma IGST,
 IP Address,Adresa IP,
 ITC Available (whether in full op part),ITC Disponibil (fie în opțiune integrală),
@@ -1666,7 +1664,6 @@
 Other,Altul,
 Other Reports,Alte rapoarte,
 "Other outward supplies(Nil rated,Exempted)","Alte consumabile exterioare (Nil evaluat, scutit)",
-Others,Altel,
 Out Qty,Out Cantitate,
 Out Value,Valoarea afară,
 Out of Order,Scos din uz,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Total (fără taxe),
 Total Achieved,Raport Realizat,
 Total Actual,Raport real,
-Total Allocated Leaves,Frunzele totale alocate,
 Total Amount,Suma totală,
 Total Amount Credited,Suma totală creditată,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Taxe totale aplicabile în tabelul de achiziție Chitanță Elementele trebuie să fie la fel ca total impozite și taxe,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Încărcați capul scrisoare și logo-ul. (Le puteți edita mai târziu).,
 Upper Income,Venituri de sus,
 Use Sandbox,utilizare Sandbox,
-Used Leaves,Frunze utilizate,
 User,Utilizator,
 User ID,ID-ul de utilizator,
 User ID not set for Employee {0},ID-ul de utilizator nu este setat pentru Angajat {0},
@@ -7949,12 +7944,10 @@
 Approvers,Aprobatori,
 The first Approver in the list will be set as the default Approver.,Primul aprobator din listă va fi setat ca aprobator implicit.,
 Shift Request Approver,Aprobarea cererii de schimbare,
-PAN Number,Număr PAN,
 Provident Fund Account,Contul Fondului Provident,
 MICR Code,Cod MICR,
 Repay unclaimed amount from salary,Rambursați suma nepreluată din salariu,
 Deduction from salary,Deducerea din salariu,
-Expired Leaves,Frunze expirate,
 If this is not checked the loan by default will be considered as a Demand Loan,"Dacă acest lucru nu este verificat, împrumutul implicit va fi considerat un împrumut la cerere",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Acest cont este utilizat pentru rezervarea rambursărilor de împrumut de la împrumutat și, de asemenea, pentru a plăti împrumuturi către împrumutat",
 This account is capital account which is used to allocate capital for loan disbursal account ,Acest cont este un cont de capital care este utilizat pentru alocarea de capital pentru contul de debursare a împrumutului,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Este obligatoriu,
 WhatsApp,WhatsApp,
 Make a call,Efectua un apel,
+Approve,Aproba,
+Reject,Respinge,
diff --git a/erpnext/translations/ru.csv b/erpnext/translations/ru.csv
index 6a7e79f..da4e1be 100644
--- a/erpnext/translations/ru.csv
+++ b/erpnext/translations/ru.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Автоматический повторный документ обновлен,
 Automotive,Автомобилестроение,
 Available,Доступно,
-Available Leaves,Доступные листья,
 Available Qty,Доступное количество,
 Available Selling,Доступные продажи,
 Available for use date is required,Доступна дата использования.,
@@ -1120,7 +1119,6 @@
 Hub Sync ID,Идентификатор синхронизации концентратора,
 Human Resource,Кадры,
 Human Resources,Персонал,
-IFSC Code,Код IFSC,
 IGST Amount,Сумма IGST,
 IP Address,IP адрес,
 ITC Available (whether in full op part),ITC Доступен (будь то в полной части оп),
@@ -1664,7 +1662,6 @@
 Other,Другое,
 Other Reports,Другие отчеты,
 "Other outward supplies(Nil rated,Exempted)","Другие внешние поставки (Ноль оценили, освобождены)",
-Others,Другое,
 Out Qty,Из кол-ва,
 Out Value,Выходное значение,
 Out of Order,Вышел из строя,
@@ -2810,7 +2807,6 @@
 Total (Without Tax),Всего (без налога),
 Total Achieved,Всего выполнено,
 Total Actual,Общий фактический,
-Total Allocated Leaves,Всего выделенных листов,
 Total Amount,Общая сумма,
 Total Amount Credited,Общая сумма кредита,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Всего Применимые сборы в таблице Purchase квитанций Элементов должны быть такими же, как все налоги и сборы",
@@ -2920,7 +2916,6 @@
 Upload your letter head and logo. (you can edit them later).,Загрузить шапку фирменного бланка и логотип. (Вы можете отредактировать их позднее).,
 Upper Income,Высокий уровень дохода,
 Use Sandbox,Использовать «песочницу»,
-Used Leaves,Используемые листы,
 User,Пользователь,
 User ID,ID пользователя,
 User ID not set for Employee {0},ID пользователя не установлен для сотрудника {0},
@@ -7861,12 +7856,10 @@
 Approvers,Утверждающие,
 The first Approver in the list will be set as the default Approver.,Первый утверждающий в списке будет установлен как утверждающий по умолчанию.,
 Shift Request Approver,Утверждающий запрос смены,
-PAN Number,Номер PAN,
 Provident Fund Account,Счет фонда обеспечения персонала,
 MICR Code,Код MICR,
 Repay unclaimed amount from salary,Вернуть невостребованную сумму из заработной платы,
 Deduction from salary,Удержание из заработной платы,
-Expired Leaves,Просроченные листья,
 If this is not checked the loan by default will be considered as a Demand Loan,"Если этот флажок не установлен, ссуда по умолчанию будет считаться ссудой до востребования.",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Этот счет используется для регистрации платежей по ссуде от заемщика, а также для выдачи ссуд заемщику.",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Этот счет является счетом движения капитала, который используется для распределения капитала на счет выдачи кредита.",
@@ -8668,3 +8661,5 @@
 WhatsApp,WhatsApp,
 Make a call,Позвонить,
 Is Template,Является шаблоном,
+Approve,Одобрить,
+Reject,Отклонить,
diff --git a/erpnext/translations/rw.csv b/erpnext/translations/rw.csv
index f487f19..ae0cb3a 100644
--- a/erpnext/translations/rw.csv
+++ b/erpnext/translations/rw.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Ongera usubiremo inyandiko ivugururwa,
 Automotive,Imodoka,
 Available,Birashoboka,
-Available Leaves,Amababi aboneka,
 Available Qty,Kuboneka Qty,
 Available Selling,Kugurisha Kuboneka,
 Available for use date is required,Kuboneka kumatariki yo gukoresha birakenewe,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Indangamuntu ya Hub,
 Human Resource,Abakozi,
 Human Resources,Abakozi,
-IFSC Code,Kode ya IFSC,
 IGST Amount,Amafaranga IGST,
 IP Address,Aderesi ya IP,
 ITC Available (whether in full op part),ITC Iraboneka (haba mubice byuzuye op),
@@ -1666,7 +1664,6 @@
 Other,Ibindi,
 Other Reports,Izindi Raporo,
 "Other outward supplies(Nil rated,Exempted)","Ibindi bikoresho byo hanze (Nil rated, Usonewe)",
-Others,Abandi,
 Out Qty,Hanze Qty,
 Out Value,Agaciro,
 Out of Order,Bitemewe,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Igiteranyo (Nta musoro),
 Total Achieved,Byose Byagezweho,
 Total Actual,Igiteranyo Cyuzuye,
-Total Allocated Leaves,Amababi yose yatanzwe,
 Total Amount,Umubare wose,
 Total Amount Credited,Amafaranga yose yatanzwe,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Amafaranga yose akoreshwa muburyo bwo kugura ibicuruzwa byakiriwe bigomba kumera nkimisoro yose hamwe,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Kuramo ibaruwa yawe umutwe hamwe nikirangantego. (urashobora kubihindura nyuma).,
 Upper Income,Amafaranga yinjira,
 Use Sandbox,Koresha Sandbox,
-Used Leaves,Amababi yakoreshejwe,
 User,Umukoresha,
 User ID,Indangamuntu,
 User ID not set for Employee {0},Indangamuntu yumukoresha ntabwo yashyizweho kubakozi {0},
@@ -7949,12 +7944,10 @@
 Approvers,Abashinzwe,
 The first Approver in the list will be set as the default Approver.,Icyemezo cya mbere murutonde kizashyirwaho nkibisanzwe byemewe.,
 Shift Request Approver,Guhindura Gusaba,
-PAN Number,Numero ya PAN,
 Provident Fund Account,Konti y&#39;Ikigega cy&#39;Imari,
 MICR Code,Kode ya MICR,
 Repay unclaimed amount from salary,Subiza amafaranga atasabwe kuva kumushahara,
 Deduction from salary,Gukurwa ku mushahara,
-Expired Leaves,Amababi yarangiye,
 If this is not checked the loan by default will be considered as a Demand Loan,Niba ibi bitagenzuwe inguzanyo byanze bikunze bizafatwa nkinguzanyo isabwa,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Iyi konti ikoreshwa mugutanga inguzanyo zishyuwe nuwagurijwe kandi ikanatanga inguzanyo kubagurijwe,
 This account is capital account which is used to allocate capital for loan disbursal account ,Konti ni konti shingiro ikoreshwa mugutanga igishoro kuri konti yo gutanga inguzanyo,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Ni itegeko,
 WhatsApp,WhatsApp,
 Make a call,Hamagara,
+Approve,Emeza,
+Reject,Wange,
diff --git a/erpnext/translations/si.csv b/erpnext/translations/si.csv
index fff7817..fa6fbf0 100644
--- a/erpnext/translations/si.csv
+++ b/erpnext/translations/si.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,ස්වයං යාවත්කාලීන ලියවිල්ල යාවත්කාලීන කරන ලදි,
 Automotive,රථ,
 Available,ඇත,
-Available Leaves,පවතින ලීස්,
 Available Qty,ලබා ගත හැකි යවන ලද,
 Available Selling,විකුණා තිබේ,
 Available for use date is required,භාවිතයට ගත හැකි දිනය සඳහා අවශ්ය වේ,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,මානව සම්පත්,
 Human Resources,මානව සම්පත්,
-IFSC Code,IFSC සංග්රහය,
 IGST Amount,IGST මුදල,
 IP Address,IP ලිපිනය,
 ITC Available (whether in full op part),ITC ලබා ගත හැකිය (පූර්ණ වශයෙන් වුවද),
@@ -1666,7 +1664,6 @@
 Other,වෙනත්,
 Other Reports,වෙනත් වාර්තා,
 "Other outward supplies(Nil rated,Exempted)","වෙනත් බාහිර සැපයුම් (නිල් ශ්‍රේණිගත, නිදහස්)",
-Others,අන් අය,
 Out Qty,යවන ලද අතරින්,
 Out Value,අගය පෙන්වා,
 Out of Order,ක්රියාවිරහිත වී ඇත,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),මුළු (බදු රහිත),
 Total Achieved,මුළු ලබාගත්,
 Total Actual,මුළු තත,
-Total Allocated Leaves,සමස්ථ වෙන් කළ කොළ,
 Total Amount,මුලු වටිනාකම,
 Total Amount Credited,මුළු මුදල අයකෙරේ,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,මිලදී ගැනීම රිසිට්පත අයිතම වගුවේ මුළු අදාළ ගාස්තු මුළු බදු හා ගාස්තු ලෙස එම විය යුතුය,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,ඔබේ ලිපිය හිස සහ ලාංඡනය උඩුගත කරන්න. (ඔබ ඔවුන්ට පසුව සංස්කරණය කළ හැකි).,
 Upper Income,ඉහළ ආදායම්,
 Use Sandbox,වැලිපිල්ල භාවිතා,
-Used Leaves,පාවිච්චි කළ කොළ,
 User,පරිශීලක,
 User ID,පරිශීලක ID,
 User ID not set for Employee {0},සේවක {0} සඳහා පරිශීලක අනන්යාංකය පිහිටුවා නැත,
@@ -7949,12 +7944,10 @@
 Approvers,අනුමත කරන්නන්,
 The first Approver in the list will be set as the default Approver.,ලැයිස්තුවේ පළමු අනුමත කරන්නා පෙරනිමි අනුමත කරන්නා ලෙස සකසනු ඇත.,
 Shift Request Approver,මාරුව ඉල්ලීම් අනුමත කරන්නා,
-PAN Number,පෑන් අංකය,
 Provident Fund Account,අර්ථසාධක අරමුදල් ගිණුම,
 MICR Code,MICR කේතය,
 Repay unclaimed amount from salary,ඉල්ලුම් නොකළ මුදල වැටුපෙන් ආපසු ගෙවන්න,
 Deduction from salary,වැටුපෙන් අඩු කිරීම,
-Expired Leaves,කල් ඉකුත් වූ කොළ,
 If this is not checked the loan by default will be considered as a Demand Loan,මෙය පරීක්‍ෂා නොකළ හොත් ණය පෙරනිමියෙන් ඉල්ලුම් ණය ලෙස සැලකේ,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,මෙම ගිණුම ණය ගැනුම්කරුගෙන් ණය ආපසු ගෙවීම් වෙන්කරවා ගැනීම සඳහා සහ ණය ගැනුම්කරුට ණය ලබා දීම සඳහා යොදා ගනී,
 This account is capital account which is used to allocate capital for loan disbursal account ,මෙම ගිණුම ණය බෙදා හැරීමේ ගිණුම සඳහා ප්‍රාග්ධනය වෙන් කිරීම සඳහා භාවිතා කරන ප්‍රාග්ධන ගිණුමකි,
@@ -8748,3 +8741,5 @@
 Is Mandatory,අනිවාර්යයි,
 WhatsApp,WhatsApp,
 Make a call,ඇමතුමක් ගන්න,
+Approve,අනුමත,
+Reject,ප්රතික්ෂේප,
diff --git a/erpnext/translations/sk.csv b/erpnext/translations/sk.csv
index 05d3496..0e51158 100644
--- a/erpnext/translations/sk.csv
+++ b/erpnext/translations/sk.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Dokument bol aktualizovaný automaticky,
 Automotive,Automobilový,
 Available,K dispozici,
-Available Leaves,Dostupné listy,
 Available Qty,Množství k dispozici,
 Available Selling,Dostupný predaj,
 Available for use date is required,Je potrebný dátum použiteľného na použitie,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID synchronizácie Hubu,
 Human Resource,Ľudské Zdroje,
 Human Resources,Lidské zdroje,
-IFSC Code,Kód IFSC,
 IGST Amount,Suma IGST,
 IP Address,IP adresa,
 ITC Available (whether in full op part),ITC k dispozícii (či už v plnej op časti),
@@ -1666,7 +1664,6 @@
 Other,Ostatní,
 Other Reports,Ostatné správy,
 "Other outward supplies(Nil rated,Exempted)","Ostatné pasívne výrobky (bez hodnotenia, oslobodené)",
-Others,Ostatní,
 Out Qty,Out Množství,
 Out Value,limitu,
 Out of Order,Mimo prevádzky,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Spolu (bez dane),
 Total Achieved,Celkem Dosažená,
 Total Actual,Celkem Aktuální,
-Total Allocated Leaves,Celkové pridelené listy,
 Total Amount,Celková částka,
 Total Amount Credited,Celková čiastka bola pripísaná,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Celkom Použiteľné Poplatky v doklade o kúpe tovaru, ktorý tabuľky musí byť rovnaká ako celkom daní a poplatkov",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Nahrajte svoju hlavičku a logo pre dokumenty. (Môžete ich upravovať neskôr.),
 Upper Income,Horní příjmů,
 Use Sandbox,použitie Sandbox,
-Used Leaves,Použité listy,
 User,užívateľ,
 User ID,User ID,
 User ID not set for Employee {0},User ID není nastavena pro zaměstnance {0},
@@ -7949,12 +7944,10 @@
 Approvers,Schvaľovatelia,
 The first Approver in the list will be set as the default Approver.,Prvý schvaľovateľ v zozname bude nastavený ako predvolený schvaľovateľ.,
 Shift Request Approver,Schvaľovateľ žiadosti o zmenu,
-PAN Number,Číslo PAN,
 Provident Fund Account,Účet podielového fondu,
 MICR Code,Kód MICR,
 Repay unclaimed amount from salary,Vrátiť nevyzdvihnutú sumu z platu,
 Deduction from salary,Odpočet z platu,
-Expired Leaves,Vypršala platnosť,
 If this is not checked the loan by default will be considered as a Demand Loan,"Pokiaľ to nie je zaškrtnuté, pôžička sa štandardne bude považovať za pôžičku na požiadanie",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tento účet sa používa na rezerváciu splátok pôžičky od dlžníka a tiež na vyplácanie pôžičiek dlžníkovi,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Tento účet je kapitálovým účtom, ktorý sa používa na pridelenie kapitálu pre účet vyplácania pôžičiek",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Je povinné,
 WhatsApp,WhatsApp,
 Make a call,Zavolať,
+Approve,schvaľovať,
+Reject,Odmietnuť,
diff --git a/erpnext/translations/sl.csv b/erpnext/translations/sl.csv
index 8eafe41..7c4e11b 100644
--- a/erpnext/translations/sl.csv
+++ b/erpnext/translations/sl.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Posodobljen samodejno ponavljanje dokumenta,
 Automotive,Avtomobilizem,
 Available,Na voljo,
-Available Leaves,Na voljo listi,
 Available Qty,Na voljo Količina,
 Available Selling,Razpoložljiva prodaja,
 Available for use date is required,Potreben je datum uporabe,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Sync ID vozlišča,
 Human Resource,Človeški vir,
 Human Resources,Človeški viri,
-IFSC Code,Kodeks IFSC,
 IGST Amount,Znesek IGST,
 IP Address,IP naslov,
 ITC Available (whether in full op part),ITC Na voljo (v celoti v delu),
@@ -1666,7 +1664,6 @@
 Other,Drugi,
 Other Reports,Druga poročila,
 "Other outward supplies(Nil rated,Exempted)","Druge zunanje dobave (ničelno, oproščeno)",
-Others,Drugi,
 Out Qty,Out Kol,
 Out Value,iz Vrednost,
 Out of Order,Ne deluje,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Skupaj (brez davka),
 Total Achieved,Skupaj Doseženi,
 Total Actual,Skupaj Actual,
-Total Allocated Leaves,Skupna dodeljena lista,
 Total Amount,Skupni znesek,
 Total Amount Credited,Skupni znesek kredita,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Skupaj veljavnih cenah na Potrdilo o nakupu postavke tabele mora biti enaka kot Skupaj davkov in dajatev,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Naložite svoje pismo glavo in logotip. (lahko jih uredite kasneje).,
 Upper Income,Zgornja Prihodki,
 Use Sandbox,uporaba Sandbox,
-Used Leaves,Uporabljeni listi,
 User,Uporabnik,
 User ID,Uporabniško ime,
 User ID not set for Employee {0},ID uporabnika ni nastavljena za Employee {0},
@@ -7949,12 +7944,10 @@
 Approvers,Odobritelji,
 The first Approver in the list will be set as the default Approver.,Prvi odobritelj na seznamu bo nastavljen kot privzeti odobritelj.,
 Shift Request Approver,Odobritelj zahteve za premik,
-PAN Number,Številka PAN,
 Provident Fund Account,Račun rezervnega sklada,
 MICR Code,Koda MICR,
 Repay unclaimed amount from salary,Vrnite neizterjani znesek iz plače,
 Deduction from salary,Odbitek od plače,
-Expired Leaves,Potekli listi,
 If this is not checked the loan by default will be considered as a Demand Loan,"Če to ni potrjeno, bo posojilo privzeto obravnavano kot posojilo na zahtevo",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ta račun se uporablja za rezervacijo odplačil posojilojemalca in tudi za izplačilo posojil posojilojemalcu,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Ta račun je račun kapitala, ki se uporablja za dodelitev kapitala za račun izplačila posojila",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Je obvezno,
 WhatsApp,WhatsApp,
 Make a call,Opraviti klic,
+Approve,Odobri,
+Reject,Zavrni,
diff --git a/erpnext/translations/sq.csv b/erpnext/translations/sq.csv
index 8c9a2ed..0f10795 100644
--- a/erpnext/translations/sq.csv
+++ b/erpnext/translations/sq.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Dokumenti i përsëritjes automatike përditësohej,
 Automotive,automobilistik,
 Available,në dispozicion,
-Available Leaves,Lejet e disponueshme,
 Available Qty,Qty në dispozicion,
 Available Selling,Shitja në dispozicion,
 Available for use date is required,Kërkohet data e përdorimit,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID e sinkronizimit të Hub,
 Human Resource,Burimeve Njerëzore,
 Human Resources,Burimeve Njerëzore,
-IFSC Code,Kodi IFSC,
 IGST Amount,Shuma IGST,
 IP Address,Adresa IP,
 ITC Available (whether in full op part),ITC në dispozicion (qoftë në pjesën e plotë të op),
@@ -1666,7 +1664,6 @@
 Other,Tjetër,
 Other Reports,Raportet tjera,
 "Other outward supplies(Nil rated,Exempted)","Furnizime të tjera të jashtme (vlerësuar me Nil, Përjashtuar)",
-Others,Të tjerët,
 Out Qty,Nga Qty,
 Out Value,Vlera out,
 Out of Order,Jashtë përdorimit,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totali (Pa Tatimore),
 Total Achieved,Gjithsej Arritur,
 Total Actual,Gjithsej aktuale,
-Total Allocated Leaves,Totali i lëkundjeve të alokuara,
 Total Amount,Shuma totale,
 Total Amount Credited,Shuma totale e kredituar,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Akuzat totale të zbatueshme në Blerje tryezë Receipt artikujt duhet të jetë i njëjtë si Total taksat dhe tarifat,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Ngarko kokën tuaj letër dhe logo. (Ju mund të modifikoni ato më vonë).,
 Upper Income,Të ardhurat e sipërme,
 Use Sandbox,Përdorimi Sandbox,
-Used Leaves,Lë të përdorura,
 User,përdorues,
 User ID,User ID,
 User ID not set for Employee {0},Përdoruesi ID nuk është caktuar për punonjësit {0},
@@ -7949,12 +7944,10 @@
 Approvers,Përgjegjës,
 The first Approver in the list will be set as the default Approver.,Miratuesi i parë në listë do të caktohet si Miratuesi i paracaktuar.,
 Shift Request Approver,Miratuesi i kërkesës për ndërrim,
-PAN Number,Numri PAN,
 Provident Fund Account,Llogaria e Fondit të Providencës,
 MICR Code,Kodi MICR,
 Repay unclaimed amount from salary,Shlyeni shumën e pakërkuar nga paga,
 Deduction from salary,Zbritja nga paga,
-Expired Leaves,Gjethet e skaduara,
 If this is not checked the loan by default will be considered as a Demand Loan,"Nëse kjo nuk kontrollohet, kredia si parazgjedhje do të konsiderohet si një Kredi e Kërkesës",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Kjo llogari përdoret për rezervimin e ripagimeve të huasë nga huamarrësi dhe gjithashtu disbursimin e huamarrësve,
 This account is capital account which is used to allocate capital for loan disbursal account ,Kjo llogari është llogari kapitale e cila përdoret për të alokuar kapitalin për llogarinë e disbursimit të kredisë,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Shtë e Detyrueshme,
 WhatsApp,WhatsApp,
 Make a call,Bej nje telefonate,
+Approve,miratoj,
+Reject,hedh poshtë,
diff --git a/erpnext/translations/sr-SP.csv b/erpnext/translations/sr-SP.csv
index c70ae81..ac5711f 100644
--- a/erpnext/translations/sr-SP.csv
+++ b/erpnext/translations/sr-SP.csv
@@ -7,10 +7,8 @@
 Warehouse {0} does not exist,Skladište {0} ne postoji,
 Confirmed orders from Customers.,Potvrđene porudžbine od strane kupaca,
 Healthcare (beta),Klinika (beta)
-Salary Structure,Структура плата
 Item Reorder,Dopuna artikla,
 Report an Issue,Prijavi grešku,
-Net Pay,Neto plaćanje,
 Internal Transfer,Interni prenos,
 Item Tax Rate,Poreska stopa,
 Create a new Customer,Kreirajte novog kupca,
@@ -52,7 +50,6 @@
 You can only select a maximum of one option from the list of check boxes.,Из листе поља за потврду можете изабрати највише једну опцију.
 Group by Voucher,Grupiši po knjiženjima,
 Total Outstanding,Ukupno preostalo,
-Email Salary Slip to Employee,Pošalji platnu listu Zaposlenom,
 Customer Code,Šifra kupca,
 Allow multiple Sales Orders against a Customer's Purchase Order,Dozvolite više prodajnih naloga koji su vezani sa porudžbenicom kupca,
 Total Outgoing,Ukupno isporučeno,
@@ -61,7 +58,6 @@
 %  Delivered,% Isporučeno,
 Appraisal {0} created for Employee {1} in the given date range,Procjena {0} kreirana za Zaposlenog {1} za dati period,
 Party Balance,Stanje kupca,
-{0} already allocated for Employee {1} for period {2} to {3},{0} već dodijeljeno zaposlenom {1} za period {2} {3}
 Customers,Kupci,
 Please set User ID field in an Employee record to set Employee Role,Molimo podesite polje Korisnički ID u evidenciji Zaposlenih radi podešavanja zaduženja Zaposlenih,
 Task Completion,Završenost zadataka,
@@ -89,7 +85,6 @@
 Consultations,Pregledi,
 Classification of Customers by region,Klasifikacija kupaca po regiji,
 Quotation To,Ponuda za,
-Payroll Employee Detail,Detalji o platnom spisku Zaposlenih,
 Timesheet for tasks.,Potrošeno vrijeme za zadatke,
 Remark,Napomena,
 Tree of Item Groups.,Stablo Vrste artikala,
@@ -122,13 +117,11 @@
 `Freeze Stocks Older Than` should be smaller than %d days.,"""Zamrzni akcije starije"" trebalo bi da budu manje %d dana."
 Patient Age,Starost pacijenta,
 Employee cannot report to himself.,Zaposleni ne može izvještavati sebi,
-You can only submit Leave Encashment for a valid encashment amount,Можете поднети Исплату одсуства само са валидном количином за исплату.
 Customer Address,Adresa kupca,
 Total Amount {0},Ukupan iznos {0}
 Total (Credit),Ukupno bez PDV-a (duguje)
 In Words (Export) will be visible once you save the Delivery Note.,Slovima (izvoz) će biti vidljiv onda kad sačuvate otpremnicu,
 Opportunity Date,Datum prilike,
-Marked Attendance HTML,Označeno prisustvo HTML,
 Delivery Note Item,Pozicija otpremnice,
 Customer's Purchase Order,Porudžbenica kupca,
 Get items from,Dodaj stavke iz,
@@ -150,14 +143,12 @@
 Account: {0} can only be updated via Stock Transactions,Računovodstvo: {0} može samo da se ažurira u dijelu Promjene na zalihama,
 Leave Approver,Odobrava izlaske s posla,
 Customer or Item,Kupac ili proizvod,
-Attendance To Date,Prisustvo do danas,
 Requested Qty,Tražena kol,
 Attendance Freeze Date,Datum zamrzavanja prisustva,
 No Item with Serial No {0},Ne postoji artikal sa serijskim brojem {0}
 Taxes and Charges,Porezi i naknade,
 Serial Number Series,Serijski broj serije,
 Delivered,Isporučeno,
-No employee found,Zaposleni nije pronađen,
 Default Territory,Podrazumijevana država,
 Asset Category,Grupe osnovnih sredstava,
 Customer Warehouse (Optional),Skladište kupca (opciono)
@@ -190,10 +181,8 @@
 Sales Partners Commission,Provizija za prodajne partnere,
 Territory,Teritorija,
 Sales Order Message,Poruka prodajnog naloga,
-Employees HTML,HTML Zaposlenih,
 Employee Leave Balance,Pregled odsustva Zaposlenih,
 Minute,Minut,
-Emails salary slip to employee based on preferred email selected in Employee,Pošalji platnu listu Zaposlenom na željenu adresu označenu u tab-u ZAPOSLENI,
 Litre,Litar,
 Opening (Cr),Početno stanje (Po)
 Academics User,Akademski korisnik,
@@ -222,11 +211,9 @@
 Product Bundle Item,Sastavljeni proizvodi,
 Select Employees,Odaberite Zaposlene,
 "Create Employee records to manage leaves, expense claims and payroll","Kreiraj evidenciju o Zaposlenom kako bi upravljali odsustvom, potraživanjima za troškove i platnim spiskovima"
-This is based on the attendance of this Employee,Ovo se zasniva na pohađanju ovog zaposlenog,
 Address & Contact,Adresa i kontakt,
 Reserved Qty for Production,Rezervisana kol. za proizvodnju,
 This is based on stock movement. See {0} for details,Ovo praćenje je zasnovano na kretanje zaliha. Pogledajte {0} za više detalja,
-Training Event Employee,Obuke Zaposlenih,
 All Contacts.,Svi kontakti,
 Sales Person,Prodajni agent,
 Default Warehouse,Podrazumijevano skladište,
@@ -237,7 +224,6 @@
 Credit,Potražuje,
 Grand Total,Za plaćanje,
 Human Resource,Ljudski resursi,
-Employees,Zaposleni,
 Delivery Note Required,Otpremnica je obavezna,
 Type of Payment,Vrsta plaćanja,
 UOM,JM,
@@ -284,15 +270,12 @@
 Customer is required,Kupac je obavezan podatak,
 Manufacturer,Proizvođač
 Selling Amount,Prodajni iznos,
-Please set the Date Of Joining for employee {0},Molimo podesite datum zasnivanja radnog odnosa {0}
 Allow over delivery or receipt upto this percent,Dozvolite isporukuili prijem robe ukoliko ne premaši ovaj procenat,
 Orders,Porudžbine,
 Stock Transactions,Promjene na zalihama,
-You are not authorized to approve leaves on Block Dates,Немате дозволу да одобравате одсуства на Блок Датумима.
 Daily Timesheet Summary,Pregled dnevnog potrošenog vremena,
 View Timesheet,Pogledaj potrošeno vrijeme,
 Rounded Total (Company Currency),Zaokruženi ukupan iznos (valuta preduzeća)
-Salary Slip of employee {0} already created for this period,Isplatna lista Zaposlenog {0} kreirana je već za ovaj period,
 "If this item has variants, then it cannot be selected in sales orders etc.","Ako ovaj artikal ima varijante, onda ne može biti biran u prodajnom nalogu."
 You can only redeem max {0} points in this order.,Можете унети највише {0} поена у овој наруџбини.
 No leave record found for employee {0} for {1},Nije nađena evidancija o odsustvu Zaposlenog {0} za {1}
@@ -312,7 +295,6 @@
 Additional Operating Cost,Dodatni operativni troškovi,
 Rejected Warehouse,Odbijeno skladište,
 Manufacturing Manager,Menadžer proizvodnje,
-You are not present all day(s) between compensatory leave request days,Нисте присутни свих дана између захтева за компензацијски одмор.
 Is Fixed Asset,Artikal je osnovno sredstvo,
 POS,POS,
 Timesheet {0} is already completed or cancelled,Potrošeno vrijeme {0} je već potvrđeno ili otkazano,
@@ -327,7 +309,6 @@
 Sync Offline Invoices,Sinhronizuj offline fakture,
 Manufacturing,Proizvodnja,
 {0}% Delivered,{0}% Isporučeno,
-Attendance,Prisustvo,
 Customer's Purchase Order No,Broj porudžbenice kupca,
 Please enter Sales Orders in the above table,U tabelu iznad unesite prodajni nalog,
 Report Date,Datum izvještaja,
@@ -338,7 +319,6 @@
 Payment Request,Upit za plaćanje,
 Purchase Analytics,Analiza nabavke,
 Tree Details,Detalji stabla,
-Upload Attendance,Priloži evidenciju,
 Against,Povezano sa,
 Requested Amount,Traženi iznos,
 "Record of all communications of type email, phone, chat, visit, etc.","Snimanje svih komunikacija tipa email, telefon, poruke, posjete, itd."
@@ -381,7 +361,6 @@
 Please select a warehouse,Izaberite skladište,
 Received and Accepted,Primio i prihvatio,
 Project will be accessible on the website to these users,Projekat će biti dostupan na sajtu sledećim korisnicima,
-Upload HTML,Priloži HTML,
 Services,Usluge,
 Item Cart,Korpa sa artiklima,
 Total Paid Amt,Ukupno plaćeno,
@@ -390,7 +369,6 @@
 Employee Advance,Napredak Zaposlenog,
 Warehouse and Reference,Skladište i veza,
 {0} {1}: Account {2} is inactive,{0} {1}: Nalog {2} je neaktivan,
-Fiscal Year {0} not found,Fiskalna godina {0} nije pronađena,
 No Remarks,Nema napomene,
 Purchase Receipt Message,Poruka u Prijemu robe,
 Taxes and Charges Deducted,Umanjeni porezi i naknade,
@@ -427,7 +405,6 @@
 Closing Date,Datum zatvaranja,
 Cheque/Reference Date,Datum izvoda,
 Planned Qty,Planirana količina,
-Payment Date,Datum plaćanja,
 Additional Details,Dodatni detalji,
 Create Chart Of Accounts Based On,Kreiraj kontni plan prema,
 You can not change rate if BOM mentioned agianst any item,Не можете променити цену ако постоји Саставница за било коју ставку.
@@ -440,8 +417,6 @@
 Add Employees,Dodaj Zaposlenog,
 Setting up Employees,Podešavanja Zaposlenih,
 Warehouse not found in the system,Skladište nije pronađeno u sistemu,
-Attendance for employee {0} is already marked for this day,Prisustvo zaposlenog {0} је već označeno za ovaj dan,
-Employee relieved on {0} must be set as 'Left',"Zaposleni smijenjen na {0} mora biti označen kao ""Napustio"""
  Shipping Bill Number,Broj isporuke,
 Lab Test Report,Izvještaj labaratorijskog testa,
 You cannot credit and debit same account at the same time,Не можете кредитирати и дебитовати исти налог у исто време.
@@ -475,17 +450,14 @@
 Reserved for manufacturing,Rezervisana za proizvodnju,
 Pricing Rule Help,Pravilnik za cijene pomoć
 Ageing Range 2,Opseg dospijeća 2,
-Employee Benefits,Primanja Zaposlenih,
 POS Item Group,POS Vrsta artikala,
 Lead,Lead,
-Employee Settings,Podešavanja zaposlenih,
 View All Products,Pogledajte sve proizvode,
 Patient Medical Record,Medicinski karton pacijenta,
 Batch,Serija,
 Purchase Receipt,Prijem robe,
 Warranty Period (in days),Garantni rok (u danima)
 Customer database.,Korisnička baza podataka,
-Attendance Date,Datum prisustva,
 Notify Employee,Obavijestiti Zaposlenog,
 User ID not set for Employee {0},Korisnički ID nije podešen za Zaposlenog {0}
 Stock Projected Qty,Projektovana količina na zalihama,
@@ -507,7 +479,6 @@
 Task,Zadatak,
 Add / Edit Prices,Dodaj / Izmijeni cijene,
 Item Prices,Cijene artikala,
-Salary Component,Компонента плате
 Customer's Purchase Order Date,Datum porudžbenice kupca,
 Country of Origin,Zemlja porijekla,
 Please select Employee Record first.,Molimo izaberite registar Zaposlenih prvo,
@@ -520,7 +491,6 @@
 {0} against Bill {1} dated {2},{0} veza sa računom {1} na datum {2}
 You are not authorized to set Frozen value,Немате дозволу да постављате замрзнуту вредност
 Requested Items To Be Ordered,Tražene stavke za isporuku,
-Unmarked Attendance,Neobilježeno prisustvo,
 Sales Order {0} is not submitted,Prodajni nalog {0} nije potvrđen,
 Default Material Request Type,Podrazumijevani zahtjev za tip materijala,
 Sales Pipeline,Prodajna linija,
@@ -580,7 +550,6 @@
 Warning: Another {0} # {1} exists against stock entry {2},Upozorenje: Još jedan  {0} # {1} postoji u vezanom Unosu zaliha {2}
 Suplier,Dobavljač
 Has Serial No,Ima serijski broj,
-Employee {0} on Half day on {1},Zaposleni {0} na pola radnog vremena {1}
 Difference Amount (Company Currency),Razlika u iznosu (Valuta)
 Add Serial No,Dodaj serijski broj,
 Company and Accounts,Preduzeće i računi,
@@ -614,7 +583,6 @@
 Customer / Item Name,Kupac / Naziv proizvoda,
 Total Billed Amount,Ukupno fakturisano,
 In Value,Prijem vrije.
-Employees Email Id,ID email Zaposlenih,
 Tree Type,Tip stabla,
 Update Rate and Availability,Izmijenite cijenu i dostupnost,
 Supplier Quotation,Ponuda dobavljača,
@@ -643,11 +611,8 @@
 Purchase Receipt Item,Stavka Prijema robe,
 Invoices,Fakture,
 Task Progress,% završenosti zadataka,
-Employee Attendance Tool,Alat za prisustvo Zaposlenih,
-Payment Days,Dana za plaćanje,
 Recruitment,Zapošljavanje,
 Taxes and Charges Calculation,Izračun Poreza,
-For Employee,Za Zaposlenog,
 Terms and Conditions Template,Uslovi i odredbe šablon,
 Change,Kusur,
 Stock Entry {0} created,Unos zaliha {0} je kreiran,
@@ -672,7 +637,6 @@
 Income Account,Račun prihoda,
 Account Balance,Knjigovodstveno stanje,
 'Expected Start Date' can not be greater than 'Expected End Date',Očekivani datum početka ne može biti veći od očekivanog datuma završetka,
-Employee Emails,Elektronska pošta Zaposlenog,
 Opening Qty,Početna količina,
 Reorder level based on Warehouse,Nivo dopune u zavisnosti od skladišta,
 To Warehouse,U skladište,
@@ -683,7 +647,6 @@
 Request for Quotation Supplier,Zahtjev za ponudu dobavljača,
 LeaderBoard,Tabla,
 Lab Test Groups,Labaratorijske grupe,
-Training Result Employee,Rezultati obuke Zaposlenih,
 Invoice Details,Detalji fakture,
 Banking and Payments,Bakarstvo i plaćanja,
 Employee Name,Ime Zaposlenog,
@@ -702,10 +665,8 @@
 Transaction reference no {0} dated {1},Broj izvoda {0} na datum {1}
 Make Sales Order,Kreiraj prodajni nalog,
 Items,Artikli,
-Employees working on a holiday,Zaposleni koji rade za vrijeme praznika,
 Allocate Payment Amount,Poveži uplaćeni iznos,
 Patient ID,ID pacijenta,
-Printed On,Datum i vrijeme štampe,
 Debit To,Zaduženje za,
 Global Settings,Globalna podešavanja,
 Make Employee,Keriraj Zaposlenog,
@@ -732,7 +693,6 @@
 Target Warehouse,Ciljno skladište,
 Delivery Note Trends,Trendovi Otpremnica,
 Default Source Warehouse,Izdajno skladište,
-"{0}: Employee email not found, hence email not sent","{0}: Email zaposlenog nije pronađena, stoga email nije poslat"
 All Warehouses,Sva skladišta,
 Difference Amount,Razlika u iznosu,
 User Remark,Korisnička napomena,
@@ -775,22 +735,18 @@
 Ageing Range 1,Opseg dospijeća 1,
 Incoming Rate,Nabavna cijena,
 Timesheets,Potrošnja vremena,
-Attendance From Date,Datum početka prisustva,
 Stock Items,Artikli na zalihama,
 New Cart,Nova korpa,
 Opening Value,Početna vrijednost,
 "Setting Events to {0}, since the Employee attached to the below Sales Persons does not have a User ID{1}","Podešavanje stanja na {0}, pošto Zaposleni koji se priključio Prodavcima nema koririsnički ID {1}"
-Import Attendance,Uvoz prisustva,
 Bank Balance,Stanje na računu,
 Employee Number,Broj Zaposlenog,
 Rate and Amount,Cijena i vrijednost sa popustom,
 'Total','Ukupno bez PDV-a'
 Total Taxes and Charges,Porez,
-No active or default Salary Structure found for employee {0} for the given dates,Nisu pronađene aktivne ili podrazumjevane strukture plate za Zaposlenog {0} za dati period,
 Supplier Part Number,Dobavljačeva šifra,
 Project Task,Projektni zadatak,
 Parent Item Group,Nadređena Vrsta artikala,
-Mark Attendance,Označi prisustvo,
 {0} created,Kreirao je korisnik {0}
 Advance Paid,Avansno plačanje,
 Projected,Projektovana količina na zalihama,
@@ -824,7 +780,6 @@
 Purchase Price List,Nabavni cjenovnik,
 Accounts Payable Summary,Pregled obaveze prema dobavljačima,
 Delivery Notes {0} must be cancelled before cancelling this Sales Order,Otpremnice {0} moraju biti otkazane prije otkazivanja prodajnog naloga,
-Total Payment,Ukupno plaćeno,
 POS Settings,POS podešavanja,
 Buying Amount,Iznos nabavke,
 Valuation Rate,Prosječna nab. cijena,
@@ -906,7 +861,6 @@
 From Customer,Od kupca,
 Maintain Stock,Vođenje zalihe,
 Sales Order Item,Pozicija prodajnog naloga,
-Attendance From Date and Attendance To Date is mandatory,Datum početka prisustva i prisustvo do danas su obavezni,
 Reserved Qty,Rezervisana kol.
 Not items found,Ništa nije pronađeno,
 Copy From Item Group,Kopiraj iz vrste artikala,
@@ -932,7 +886,6 @@
 Due Date is mandatory,Datum dospijeća je obavezan,
 Cart,Korpa,
 Stock transactions before {0} are frozen,Promjene na zalihama prije {0} su zamrznute,
-Employee {0} is not active or does not exist,Zaposleni {0} nije aktivan ili ne postoji,
 You have entered duplicate items. Please rectify and try again.,Унели сте дупликате. Молимо проверите и покушајте поново.
 Closing (Dr),Saldo (Du)
 Product Bundle Help,Sastavnica Pomoć
@@ -947,7 +900,6 @@
 Gantt Chart,Gant dijagram,
 Requested Quantity,Tražena količina,
 Chart Of Accounts Template,Templejt za kontni plan,
-Marked Attendance,Označeno prisustvo,
 Please set a default Holiday List for Employee {0} or Company {1},Molimo podesite podrazumjevanu listu praznika za Zaposlenog {0} ili Preduzeće {1}
 Pending Amount,Iznos na čekanju,
 Supplier Invoice No,Broj fakture dobavljača,
@@ -973,18 +925,15 @@
 You cannot delete Project Type 'External',"Не можете обрисати ""Спољни"" тип пројекта."
 Delivery Note,Otpremnice,
 In Words will be visible once you save the Sales Order.,U riječima će biti vidljivo tek kada sačuvate prodajni nalog.
-Show Salary Slip,Прикажи одсечак плате
 Activity Cost per Employee,Troškovi aktivnosti po zaposlenom,
 Sales Order,Prodajni nalog,
 Customer or Supplier Details,Detalji kupca ili dobavljača,
 Sell,Prodaja,
-Salary Slip of employee {0} already created for time sheet {1},Isplatna lista Zaposlenog {0} kreirana je već za raspored {1}
 Additional Discount Percentage,Dodatni procenat popusta,
 HR User,Korisnik za ljudske resure,
 Stock Reports,Izvještaji zaliha robe,
 Return Against Sales Invoice,Povraćaj u vezi sa Fakturom prodaje,
 Naming Series,Vrste dokumenta,
-Monthly Attendance Sheet,Mjesečni list prisustva,
 Stock Ledger,Skladišni karton,
 Sales Invoice {0} must be cancelled before cancelling this Sales Order,Faktura {0} mora biti otkazana prije otkazivanja ovog prodajnog naloga,
 New Quotations,Nove ponude,
diff --git a/erpnext/translations/sr.csv b/erpnext/translations/sr.csv
index cf32d36..38116ec 100644
--- a/erpnext/translations/sr.csv
+++ b/erpnext/translations/sr.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Аутоматско понављање документа је ажурирано,
 Automotive,аутомобилски,
 Available,Доступно,
-Available Leaves,Расположиве листе,
 Available Qty,Доступно ком,
 Available Selling,Доступна продаја,
 Available for use date is required,Потребан је датум употребе,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Хуб Синц ИД,
 Human Resource,Људски ресурси,
 Human Resources,Человеческие ресурсы,
-IFSC Code,ИФСЦ код,
 IGST Amount,ИГСТ Износ,
 IP Address,ИП адреса,
 ITC Available (whether in full op part),Доступан ИТЦ (било у целокупном делу),
@@ -1666,7 +1664,6 @@
 Other,Други,
 Other Reports,Остали извештаји,
 "Other outward supplies(Nil rated,Exempted)","Остале спољне залихе (Нил, Ослобођено)",
-Others,другие,
 Out Qty,Од Кол,
 Out Value,od Вредност,
 Out of Order,Неисправно,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Укупно (без пореза),
 Total Achieved,Укупно Постигнута,
 Total Actual,Укупно Стварна,
-Total Allocated Leaves,Укупно издвојене листе,
 Total Amount,Укупан износ,
 Total Amount Credited,Укупан износ кредита,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Укупно Важећи Оптужбе у куповини потврда за ставке табели мора бити исти као и укупних пореза и накнада,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Уплоад главу писмо и лого. (Можете их уредити касније).,
 Upper Income,Горња прихода,
 Use Sandbox,Употреба Песак,
-Used Leaves,Користи Леавес,
 User,Усер,
 User ID,Кориснички ИД,
 User ID not set for Employee {0},ID пользователя не установлен Требуются {0},
@@ -7949,12 +7944,10 @@
 Approvers,Одобривачи,
 The first Approver in the list will be set as the default Approver.,Први одобравач на листи биће постављен као подразумевани одобраватељ.,
 Shift Request Approver,Одобривач захтева за смену,
-PAN Number,ПАН број,
 Provident Fund Account,Рачун осигуравајућег фонда,
 MICR Code,МИЦР код,
 Repay unclaimed amount from salary,Отплати неискоришћени износ из плате,
 Deduction from salary,Одбитак од зараде,
-Expired Leaves,Истекло лишће,
 If this is not checked the loan by default will be considered as a Demand Loan,"Ако ово није потврђено, зајам ће се подразумевано сматрати зајмом на захтев",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Овај рачун се користи за резервирање отплате зајма од зајмопримца и за исплату зајмова зајмопримцу,
 This account is capital account which is used to allocate capital for loan disbursal account ,Овај рачун је рачун капитала који се користи за алокацију капитала за рачун за издвајање кредита,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Је обавезно,
 WhatsApp,ВхатсАпп,
 Make a call,Позивање,
+Approve,одобрити,
+Reject,Одбити,
diff --git a/erpnext/translations/sv.csv b/erpnext/translations/sv.csv
index c07fda2..c4d46ea 100644
--- a/erpnext/translations/sv.csv
+++ b/erpnext/translations/sv.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Automatisk upprepa dokument uppdaterad,
 Automotive,Fordon,
 Available,Tillgängligt,
-Available Leaves,Tillgängliga löv,
 Available Qty,Tillgång Antal,
 Available Selling,Tillgänglig försäljning,
 Available for use date is required,Tillgängligt för användning datum krävs,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Sync ID,
 Human Resource,Personal administration,
 Human Resources,Personal Resurser,
-IFSC Code,IFSC-kod,
 IGST Amount,IGST-belopp,
 IP Address,IP-adress,
 ITC Available (whether in full op part),ITC tillgängligt (oavsett om det är fullständigt),
@@ -1666,7 +1664,6 @@
 Other,Annat,
 Other Reports,Andra rapporter,
 "Other outward supplies(Nil rated,Exempted)","Andra leveranser utifrån (noll betyg, undantagna)",
-Others,Annat,
 Out Qty,Ut antal,
 Out Value,ut Värde,
 Out of Order,Trasig,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Totalt (utan skatt),
 Total Achieved,Totalt Uppnått,
 Total Actual,Totalt Faktisk,
-Total Allocated Leaves,Totalt tilldelade blad,
 Total Amount,Totala summan,
 Total Amount Credited,Summa belopp Credited,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Totalt tillämpliga avgifter i inköpskvittot Items tabellen måste vara densamma som den totala skatter och avgifter,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Ladda upp din brevhuvud och logotyp. (Du kan redigera dem senare).,
 Upper Income,Övre inkomst,
 Use Sandbox,användning Sandbox,
-Used Leaves,Använda löv,
 User,Användare,
 User ID,användar ID,
 User ID not set for Employee {0},Användar-ID inte satt för anställd {0},
@@ -7949,12 +7944,10 @@
 Approvers,Omstridda,
 The first Approver in the list will be set as the default Approver.,Den första godkännaren i listan kommer att ställas in som standard godkännare.,
 Shift Request Approver,Skiftbegäran godkännare,
-PAN Number,PAN-nummer,
 Provident Fund Account,Försäkringskassakonto,
 MICR Code,MICR-kod,
 Repay unclaimed amount from salary,Återbetala obefogat belopp från lönen,
 Deduction from salary,Avdrag från lön,
-Expired Leaves,Utgångna löv,
 If this is not checked the loan by default will be considered as a Demand Loan,Om detta inte är markerat kommer lånet som standard att betraktas som ett efterfrågelån,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Detta konto används för bokning av återbetalningar av lån från låntagaren och för utbetalning av lån till låntagaren,
 This account is capital account which is used to allocate capital for loan disbursal account ,Det här kontot är ett kapitalkonto som används för att fördela kapital för lånekonto,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Är obligatorisk,
 WhatsApp,WhatsApp,
 Make a call,Ringa ett samtal,
+Approve,Godkänna,
+Reject,Avvisa,
diff --git a/erpnext/translations/sw.csv b/erpnext/translations/sw.csv
index 243994f..ad144f0 100644
--- a/erpnext/translations/sw.csv
+++ b/erpnext/translations/sw.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Rudia tena hati iliyosasishwa,
 Automotive,Magari,
 Available,Inapatikana,
-Available Leaves,Majani Inapatikana,
 Available Qty,Uchina unaopatikana,
 Available Selling,Inapatikana Kuuza,
 Available for use date is required,Inapatikana kwa tarehe ya matumizi inahitajika,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID ya Usawazishaji wa Hub,
 Human Resource,Rasilimali watu,
 Human Resources,Rasilimali,
-IFSC Code,IFSC Kanuni,
 IGST Amount,IGST Kiasi,
 IP Address,Anwani ya IP,
 ITC Available (whether in full op part),ITC Inapatikana (iwe katika sehemu kamili),
@@ -1666,7 +1664,6 @@
 Other,Nyingine,
 Other Reports,Taarifa nyingine,
 "Other outward supplies(Nil rated,Exempted)","Vifaa vingine vya nje (Nilikadiriwa, Imesamehewa)",
-Others,Wengine,
 Out Qty,Nje ya Uchina,
 Out Value,Thamani ya nje,
 Out of Order,Nje ya Utaratibu,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Jumla (bila ya Kodi),
 Total Achieved,Jumla imefikia,
 Total Actual,Jumla halisi,
-Total Allocated Leaves,Jumla ya Majani yaliyowekwa,
 Total Amount,Jumla,
 Total Amount Credited,Jumla ya Kizuizi,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Malipo Yote ya Kuhitajika katika Jedwali la Vipokezi vya Ununuzi lazima lifanane na Jumla ya Kodi na Malipo,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Pakia kichwa chako na alama. (unaweza kuwahariri baadaye).,
 Upper Income,Mapato ya Juu,
 Use Sandbox,Tumia Sandbox,
-Used Leaves,Majani yaliyotumika,
 User,Mtumiaji,
 User ID,Kitambulisho cha mtumiaji,
 User ID not set for Employee {0},Kitambulisho cha mtumiaji hakiwekwa kwa Waajiriwa {0},
@@ -7949,12 +7944,10 @@
 Approvers,Waunga mkono,
 The first Approver in the list will be set as the default Approver.,Mtangazaji wa kwanza kwenye orodha atawekwa kama Mtoaji Mbadala.,
 Shift Request Approver,Ombi la Shift Liidhinishe,
-PAN Number,Nambari ya PAN,
 Provident Fund Account,Akaunti ya Mfuko wa Utoaji,
 MICR Code,Nambari ya MICR,
 Repay unclaimed amount from salary,Lipa kiasi ambacho hakijadai kutoka kwa mshahara,
 Deduction from salary,Utoaji kutoka kwa mshahara,
-Expired Leaves,Majani yaliyomalizika,
 If this is not checked the loan by default will be considered as a Demand Loan,Ikiwa hii haijakaguliwa mkopo kwa chaguo-msingi utazingatiwa kama Mkopo wa Mahitaji,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Akaunti hii inatumika kwa uhifadhi wa mikopo kutoka kwa akopaye na pia kutoa mikopo kwa akopaye,
 This account is capital account which is used to allocate capital for loan disbursal account ,Akaunti hii ni akaunti kuu ambayo hutumiwa kutenga mtaji kwa akaunti ya utoaji wa mkopo,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Ni lazima,
 WhatsApp,WhatsApp,
 Make a call,Piga simu,
+Approve,Thibitisha,
+Reject,Kataa,
diff --git a/erpnext/translations/ta.csv b/erpnext/translations/ta.csv
index d2c3dfb..5ccabc0 100644
--- a/erpnext/translations/ta.csv
+++ b/erpnext/translations/ta.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,தானியங்கு திரும்ப ஆவணம் புதுப்பிக்கப்பட்டது,
 Automotive,வாகன,
 Available,கிடைக்கக்கூடிய,
-Available Leaves,கிடைக்கும் இலைகள்,
 Available Qty,கிடைக்கும் அளவு,
 Available Selling,கிடைக்கும் விற்பனை,
 Available for use date is required,உபயோகத்திற்கான தேதி கிடைக்க வேண்டும்,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,மைய ஒருங்கிணைப்பு ஐடி,
 Human Resource,மையம்  வள,
 Human Resources,மனித வளங்கள்,
-IFSC Code,IFSC கோட்,
 IGST Amount,IGST தொகை,
 IP Address,ஐபி முகவரி,
 ITC Available (whether in full op part),ஐ.டி.சி கிடைக்கிறது (முழு ஒப் பகுதியாக இருந்தாலும்),
@@ -1666,7 +1664,6 @@
 Other,வேறு,
 Other Reports,பிற அறிக்கைகள்,
 "Other outward supplies(Nil rated,Exempted)","பிற வெளிப்புற பொருட்கள் (இல்லை மதிப்பிடப்பட்டது, விலக்கு)",
-Others,மற்றவை,
 Out Qty,அளவு அவுட்,
 Out Value,அவுட் மதிப்பு,
 Out of Order,ஆர்டர் அவுட்,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),மொத்தம் (வரி இல்லாமல்),
 Total Achieved,மொத்த Achieved,
 Total Actual,உண்மையான மொத்த,
-Total Allocated Leaves,மொத்த ஒதுக்கப்பட்ட இலைகள்,
 Total Amount,மொத்த தொகை,
 Total Amount Credited,மொத்த தொகை பாராட்டப்பட்டது,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,கொள்முதல் ரசீது பொருட்கள் அட்டவணையில் மொத்த பொருந்தும் கட்டணங்கள் மொத்த வரி மற்றும் கட்டணங்கள் அதே இருக்க வேண்டும்,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,உங்கள் கடிதம் தலை மற்றும் சின்னம் பதிவேற்ற. (நீங்கள் பின்னர் அவர்களை திருத்த முடியும்).,
 Upper Income,உயர் வருமானம்,
 Use Sandbox,சாண்ட்பாக்ஸினைப் பயன்படுத்தவும்,
-Used Leaves,பயன்படுத்திய இலைகள்,
 User,பயனர்,
 User ID,பயனர் ஐடி,
 User ID not set for Employee {0},பயனர் ஐடி பணியாளர் அமைக்க{0},
@@ -7949,12 +7944,10 @@
 Approvers,ஒப்புதல்கள்,
 The first Approver in the list will be set as the default Approver.,பட்டியலில் முதல் ஒப்புதல் இயல்புநிலை ஒப்புதலாக அமைக்கப்படும்.,
 Shift Request Approver,ஷிப்ட் கோரிக்கை ஒப்புதல்,
-PAN Number,பான் எண்,
 Provident Fund Account,வருங்கால வைப்பு நிதி கணக்கு,
 MICR Code,MICR குறியீடு,
 Repay unclaimed amount from salary,கோரப்படாத தொகையை சம்பளத்திலிருந்து திருப்பிச் செலுத்துங்கள்,
 Deduction from salary,சம்பளத்திலிருந்து கழித்தல்,
-Expired Leaves,காலாவதியான இலைகள்,
 If this is not checked the loan by default will be considered as a Demand Loan,"இது சரிபார்க்கப்படாவிட்டால், இயல்புநிலையாக கடன் தேவை கடனாக கருதப்படும்",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,கடன் வாங்கியவரிடமிருந்து கடன் திருப்பிச் செலுத்துவதற்கு முன்பதிவு செய்வதற்கும் கடன் வாங்கியவருக்கு கடன்களை வழங்குவதற்கும் இந்த கணக்கு பயன்படுத்தப்படுகிறது,
 This account is capital account which is used to allocate capital for loan disbursal account ,"இந்த கணக்கு மூலதன கணக்கு ஆகும், இது கடன் வழங்கல் கணக்கிற்கு மூலதனத்தை ஒதுக்க பயன்படுகிறது",
@@ -8748,3 +8741,5 @@
 Is Mandatory,அத்தியாவசியமானதாகும்,
 WhatsApp,பகிரி,
 Make a call,அழைப்பு விடுங்கள்,
+Approve,ஒப்புதல்,
+Reject,நிராகரி,
diff --git a/erpnext/translations/te.csv b/erpnext/translations/te.csv
index 228f293..8472163 100644
--- a/erpnext/translations/te.csv
+++ b/erpnext/translations/te.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,ఆటో రిపీట్ పత్రం నవీకరించబడింది,
 Automotive,ఆటోమోటివ్,
 Available,అందుబాటులో,
-Available Leaves,అందుబాటులో ఉన్న ఆకులు,
 Available Qty,అందుబాటులో ప్యాక్ చేసిన అంశాల,
 Available Selling,అందుబాటులో సెల్లింగ్,
 Available for use date is required,ఉపయోగ తేదీ కోసం అందుబాటులో ఉంది,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,హబ్ సమకాలీకరణ ID,
 Human Resource,మానవ వనరుల,
 Human Resources,మానవ వనరులు,
-IFSC Code,IFSC కోడ్,
 IGST Amount,IGST మొత్తం,
 IP Address,IP చిరునామా,
 ITC Available (whether in full op part),ఐటిసి అందుబాటులో ఉంది (పూర్తిస్థాయిలో ఉన్నా),
@@ -1666,7 +1664,6 @@
 Other,ఇతర,
 Other Reports,ఇతర నివేదికలు,
 "Other outward supplies(Nil rated,Exempted)","ఇతర బాహ్య సామాగ్రి (నిల్ రేట్, మినహాయింపు)",
-Others,ఇతరత్రా,
 Out Qty,ప్యాక్ చేసిన అంశాల అవుట్,
 Out Value,అవుట్ విలువ,
 Out of Order,పనిచేయటంలేదు,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),మొత్తం (పన్ను లేకుండా),
 Total Achieved,మొత్తం ఆర్జిత,
 Total Actual,యదార్థమైన మొత్తం,
-Total Allocated Leaves,మొత్తం కేటాయించిన ఆకులు,
 Total Amount,మొత్తం డబ్బు,
 Total Amount Credited,మొత్తం మొత్తంలో పొందింది,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,కొనుగోలు స్వీకరణపై అంశాలు పట్టికలో మొత్తం వర్తించే ఛార్జీలు మొత్తం పన్నులు మరియు ఆరోపణలు అదే ఉండాలి,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,మీ లేఖ తల మరియు లోగో అప్లోడ్. (మీరు తర్వాత వాటిని సవరించవచ్చు).,
 Upper Income,ఉన్నత ఆదాయపు,
 Use Sandbox,శాండ్బాక్స్ ఉపయోగించండి,
-Used Leaves,వాడిన ఆకులు,
 User,వాడుకరి,
 User ID,వినియోగదారుని గుర్తింపు,
 User ID not set for Employee {0},వాడుకరి ID ఉద్యోగి సెట్ {0},
@@ -7949,12 +7944,10 @@
 Approvers,అప్రూవర్స్,
 The first Approver in the list will be set as the default Approver.,జాబితాలోని మొదటి ఆమోదం డిఫాల్ట్ ఆమోదంగా సెట్ చేయబడుతుంది.,
 Shift Request Approver,షిఫ్ట్ అభ్యర్థన ఆమోదం,
-PAN Number,పాన్ సంఖ్య,
 Provident Fund Account,ప్రావిడెంట్ ఫండ్ ఖాతా,
 MICR Code,MICR కోడ్,
 Repay unclaimed amount from salary,క్లెయిమ్ చేయని మొత్తాన్ని జీతం నుండి తిరిగి చెల్లించండి,
 Deduction from salary,జీతం నుండి మినహాయింపు,
-Expired Leaves,గడువు ముగిసిన ఆకులు,
 If this is not checked the loan by default will be considered as a Demand Loan,ఇది తనిఖీ చేయకపోతే అప్పును అప్పుగా డిమాండ్ లోన్‌గా పరిగణిస్తారు,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,ఈ ఖాతా రుణగ్రహీత నుండి రుణ తిరిగి చెల్లించటానికి మరియు రుణగ్రహీతకు రుణాలు పంపిణీ చేయడానికి ఉపయోగించబడుతుంది,
 This account is capital account which is used to allocate capital for loan disbursal account ,"ఈ ఖాతా మూలధన ఖాతా, ఇది రుణ పంపిణీ ఖాతాకు మూలధనాన్ని కేటాయించడానికి ఉపయోగించబడుతుంది",
@@ -8748,3 +8741,5 @@
 Is Mandatory,తప్పనిసరి,
 WhatsApp,వాట్సాప్,
 Make a call,కాల్ చేయుము,
+Approve,ఆమోదించడానికి,
+Reject,తిరస్కరించు,
diff --git a/erpnext/translations/th.csv b/erpnext/translations/th.csv
index 86b8d15..dcd632b 100644
--- a/erpnext/translations/th.csv
+++ b/erpnext/translations/th.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,อัปเดตเอกสารซ้ำอัตโนมัติแล้ว,
 Automotive,ยานยนต์,
 Available,ที่มีจำหน่าย,
-Available Leaves,มีใบ,
 Available Qty,จำนวนที่มีจำหน่าย,
 Available Selling,ขายได้,
 Available for use date is required,ต้องมีวันที่ใช้งาน,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,รหัสการซิงค์ของ Hub,
 Human Resource,ทรัพยากรมนุษย์,
 Human Resources,ทรัพยากรบุคคล,
-IFSC Code,รหัส IFSC,
 IGST Amount,IGST Amount,
 IP Address,ที่อยู่ IP,
 ITC Available (whether in full op part),ITC ว่าง (ไม่ว่าจะอยู่ในส่วน op แบบเต็ม),
@@ -1666,7 +1664,6 @@
 Other,อื่น ๆ,
 Other Reports,รายงานอื่น ๆ,
 "Other outward supplies(Nil rated,Exempted)","วัสดุภายนอกอื่น ๆ (ไม่มีการจัดอันดับ, ยกเว้น)",
-Others,คนอื่น ๆ,
 Out Qty,ออก จำนวน,
 Out Value,ราคาออกมา,
 Out of Order,ชำรุด,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),รวม (ไม่มีภาษี),
 Total Achieved,รวมประสบความสำเร็จ,
 Total Actual,ทั้งหมดที่เกิดขึ้นจริง,
-Total Allocated Leaves,ยอดรวมใบ,
 Total Amount,รวมเป็นเงิน,
 Total Amount Credited,ยอดรวมเครดิต,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,ค่าใช้จ่ายรวมในการซื้อโต๊ะใบเสร็จรับเงินรายการที่จะต้องเป็นเช่นเดียวกับภาษีและค่าใช้จ่ายรวม,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,อัปโหลดหัวจดหมายของคุณและโลโก้ (คุณสามารถแก้ไขได้ในภายหลัง),
 Upper Income,รายได้บน,
 Use Sandbox,ใช้ Sandbox,
-Used Leaves,ใบที่ใช้แล้ว,
 User,ผู้ใช้งาน,
 User ID,รหัสผู้ใช้,
 User ID not set for Employee {0},รหัสผู้ใช้ ไม่ได้ ตั้งไว้สำหรับ พนักงาน {0},
@@ -7949,12 +7944,10 @@
 Approvers,ผู้อนุมัติ,
 The first Approver in the list will be set as the default Approver.,ผู้อนุมัติคนแรกในรายการจะถูกตั้งเป็นผู้อนุมัติเริ่มต้น,
 Shift Request Approver,ผู้อนุมัติคำขอกะ,
-PAN Number,หมายเลข PAN,
 Provident Fund Account,บัญชีกองทุนสำรองเลี้ยงชีพ,
 MICR Code,รหัส MICR,
 Repay unclaimed amount from salary,ชำระคืนจำนวนเงินที่ไม่มีการเรียกร้องจากเงินเดือน,
 Deduction from salary,หักจากเงินเดือน,
-Expired Leaves,ใบหมดอายุ,
 If this is not checked the loan by default will be considered as a Demand Loan,หากไม่ได้ตรวจสอบเงินกู้โดยค่าเริ่มต้นจะถือว่าเป็น Demand Loan,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,บัญชีนี้ใช้สำหรับจองการชำระคืนเงินกู้จากผู้กู้และการเบิกจ่ายเงินกู้ให้กับผู้กู้,
 This account is capital account which is used to allocate capital for loan disbursal account ,บัญชีนี้เป็นบัญชีทุนที่ใช้ในการจัดสรรเงินทุนสำหรับบัญชีการเบิกจ่ายเงินกู้,
@@ -8748,3 +8741,5 @@
 Is Mandatory,เป็นข้อบังคับ,
 WhatsApp,WhatsApp,
 Make a call,ทำการโทร,
+Approve,อนุมัติ,
+Reject,ปฏิเสธ,
diff --git a/erpnext/translations/tr.csv b/erpnext/translations/tr.csv
index 78d6a79..3708246 100644
--- a/erpnext/translations/tr.csv
+++ b/erpnext/translations/tr.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Otomatik tekrar dokümanı güncellendi,
 Automotive,Otomotiv,
 Available,Mevcut,
-Available Leaves,Mevcut İzinler,
 Available Qty,Mevcut Miktar,
 Available Selling,Mevcut Satış,
 Available for use date is required,Kullanılabilir olacağı tarih gereklidir,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Hub Senkronizasyon Kimliği,
 Human Resource,İnsan Kaynağı,
 Human Resources,İnsan Kaynakları,
-IFSC Code,IFSC Kodu,
 IGST Amount,IGST Tutarı,
 IP Address,IP adresi,
 ITC Available (whether in full op part),ITC Müsait (tam hüküm olsun),
@@ -1666,7 +1664,6 @@
 Other,Diğer,
 Other Reports,Diğer Raporlar,
 "Other outward supplies(Nil rated,Exempted)","Diğer dış sarf malzemeleri (Nil puan, Muaf)",
-Others,Diğer,
 Out Qty,Çıkış Miktarı,
 Out Value,Çıkış Değeri,
 Out of Order,bozuk,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Toplam (Vergi hariç),
 Total Achieved,Toplam Eldeki,
 Total Actual,Gerçek Toplam,
-Total Allocated Leaves,Toplam Tahsis Edilen İzin,
 Total Amount,Toplam Tutar,
 Total Amount Credited,Kredili Toplam Tutar,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Satınalma Makbuzu Vergi Öğeleri tablosundaki toplam uygulanabilir Masraflar Toplam ve Masraflar aynı olmalıdır,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Mektup baş ve logo yükleyin. (Daha sonra bunları düzenleyebilirsiniz).,
 Upper Income,üst gelir,
 Use Sandbox,Kullanım Sandbox,
-Used Leaves,Kullanılan İzin,
 User,Kullanıcı,
 User ID,Kullanıcı kimliği,
 User ID not set for Employee {0},Çalışan {0} için kullanıcı sıfatı ayarlanmamış,
@@ -7948,12 +7943,10 @@
 Approvers,Onaylayanlar,
 The first Approver in the list will be set as the default Approver.,"Listedeki ilk Onaylayan, varsayılan Onaylayan olarak ayarlanacaktır.",
 Shift Request Approver,Vardiya İsteği Onaylayıcısı,
-PAN Number,PAN Numarası,
 Provident Fund Account,İhtiyat Fonu Hesabı,
 MICR Code,MICR Kodu,
 Repay unclaimed amount from salary,Talep edilmeyen maaştan geri ödeyin,
 Deduction from salary,Maaştan kesinti,
-Expired Leaves,Süresi biten İzinler,
 If this is not checked the loan by default will be considered as a Demand Loan,"Bu kontrol reddedilirse, varsayılan olarak kredi bir Talep Kredisi olarak kabul edilecektir.",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Bu hesap, borçludan kredi geri ödemelerini yapmak ve ayrıca borçluya kredi vermek için kullanılır.",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Bu hesap, kredi ödeme hesabına sermaye tahsis etmek için kullanılan sermaye hesabıdır.",
@@ -9005,3 +8998,5 @@
 Is Mandatory,Zorunludur,
 WhatsApp,WhatsApp,
 Make a call,Arama yap,
+Approve,Onayla,
+Reject,Reddet,
diff --git a/erpnext/translations/uk.csv b/erpnext/translations/uk.csv
index 3ad588c..1752330 100644
--- a/erpnext/translations/uk.csv
+++ b/erpnext/translations/uk.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Автоматичний повторення документа оновлено,
 Automotive,Автомобільний,
 Available,наявний,
-Available Leaves,Доступні листи,
 Available Qty,Доступна к-сть,
 Available Selling,Доступні продажі,
 Available for use date is required,Необхідна дата для використання,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Ідентифікатор концентратора синхронізації,
 Human Resource,Людський ресурс,
 Human Resources,Кадри,
-IFSC Code,IFSC Code,
 IGST Amount,Сума IGST,
 IP Address,IP-адреса,
 ITC Available (whether in full op part),Доступний ITC (будь то в повній частині,
@@ -1666,7 +1664,6 @@
 Other,Інший,
 Other Reports,Інші звіти,
 "Other outward supplies(Nil rated,Exempted)","Інші зовнішні поставки (з нульовою оцінкою, звільнено)",
-Others,Інші,
 Out Qty,Розхід у к-сті,
 Out Value,Розхід у Сумі,
 Out of Order,Вийшов з ладу,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Усього (без податку),
 Total Achieved,Всього Виконано,
 Total Actual,Загальний фактичний,
-Total Allocated Leaves,Усього виділених листів,
 Total Amount,Загалом,
 Total Amount Credited,Загальна сума кредитується,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,"Всього Застосовуються збори в таблиці Purchase квитанцій Елементів повинні бути такими ж, як всі податки і збори",
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Відвантажити ваш фірмовий заголовок та логотип. (Ви зможете відредагувати їх пізніше).,
 Upper Income,Верхня прибуток,
 Use Sandbox,Використання Пісочниця,
-Used Leaves,Використовувані листи,
 User,Користувач,
 User ID,ідентифікатор користувача,
 User ID not set for Employee {0},Ідентифікатор користувача не встановлений Employee {0},
@@ -7949,12 +7944,10 @@
 Approvers,Схвалювачі,
 The first Approver in the list will be set as the default Approver.,Перший затверджувач у списку буде встановлений як затверджувач за замовчуванням.,
 Shift Request Approver,Затверджувач запиту на зміну,
-PAN Number,Номер PAN,
 Provident Fund Account,Рахунок забезпеченого фонду,
 MICR Code,Кодекс MICR,
 Repay unclaimed amount from salary,Повернути незатребувану суму із заробітної плати,
 Deduction from salary,Відрахування із зарплати,
-Expired Leaves,Листя закінчилися,
 If this is not checked the loan by default will be considered as a Demand Loan,"Якщо це не позначено, позика за замовчуванням буде розглядатися як позика на вимогу",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,"Цей рахунок використовується для бронювання виплат позики у позичальника, а також для видачі позик позичальнику",
 This account is capital account which is used to allocate capital for loan disbursal account ,"Цей рахунок є рахунком капіталу, який використовується для розподілу капіталу на рахунок виплати позики",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Обов’язковий,
 WhatsApp,WhatsApp,
 Make a call,Зроби дзвінок,
+Approve,Затвердити,
+Reject,відхиляти,
diff --git a/erpnext/translations/ur.csv b/erpnext/translations/ur.csv
index c5610f0..504cc8d 100644
--- a/erpnext/translations/ur.csv
+++ b/erpnext/translations/ur.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,خود بخود دستاویز کو اپ ڈیٹ کیا,
 Automotive,آٹوموٹو,
 Available,دستیاب,
-Available Leaves,دستیاب پتیوں,
 Available Qty,دستیاب مقدار,
 Available Selling,دستیاب فروخت,
 Available for use date is required,استعمال کی تاریخ کے لئے دستیاب ہے,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,حب ہم آہنگی کی شناخت,
 Human Resource,انسانی وسائل,
 Human Resources,انسانی وسائل,
-IFSC Code,IFSC کوڈ,
 IGST Amount,IGST رقم,
 IP Address,IP پتہ,
 ITC Available (whether in full op part),آئی ٹی سی دستیاب ہے (چاہے وہ پوری طرح سے ہو),
@@ -1666,7 +1664,6 @@
 Other,دیگر,
 Other Reports,دیگر رپورٹوں,
 "Other outward supplies(Nil rated,Exempted)",دیگر ظاہری رسد (نیل ریٹیڈ ، مستثنیٰ),
-Others,دیگر,
 Out Qty,مقدار باہر,
 Out Value,آؤٹ ویلیو,
 Out of Order,حکم سے باہر,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),کل (ٹیکس کے بغیر),
 Total Achieved,کل حاصل کیا,
 Total Actual,اصل کل,
-Total Allocated Leaves,کل مختص شدہ پتیوں,
 Total Amount,کل رقم,
 Total Amount Credited,کریڈٹ کل رقم,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,خریداری کی رسید اشیا ٹیبل میں تمام قابل اطلاق چارجز کل ٹیکس اور الزامات طور پر ایک ہی ہونا چاہیے,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,اپنے خط سر اور علامت (لوگو). (آپ کو بعد ان میں ترمیم کر سکتے ہیں).,
 Upper Income,بالائی آمدنی,
 Use Sandbox,سینڈباکس استعمال,
-Used Leaves,استعمال شدہ پتیوں,
 User,صارف,
 User ID,صارف کی شناخت,
 User ID not set for Employee {0},صارف ID ملازم کے لئے مقرر نہیں {0},
@@ -7949,12 +7944,10 @@
 Approvers,تنازعہ,
 The first Approver in the list will be set as the default Approver.,فہرست میں پہلا منظور نامہ پہلے سے طے شدہ منظوری کے طور پر مقرر کیا جائے گا۔,
 Shift Request Approver,شفٹ کی درخواست منظور کریں,
-PAN Number,پین نمبر,
 Provident Fund Account,پروویڈنٹ فنڈ اکاؤنٹ,
 MICR Code,ایم آئی سی آر کوڈ,
 Repay unclaimed amount from salary,تنخواہ سے غیر دعویدار رقم واپس کریں,
 Deduction from salary,تنخواہ سے کٹوتی,
-Expired Leaves,ختم شدہ پتے,
 If this is not checked the loan by default will be considered as a Demand Loan,اگر اس کی جانچ نہیں کی گئی تو قرض کو بطور ڈیفانٹ لون سمجھا جائے گا,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,یہ اکاؤنٹ قرض لینے والے سے قرض کی واپسیوں کی بکنگ اور قرض لینے والے کو قرضوں کی تقسیم کے لئے استعمال ہوتا ہے,
 This account is capital account which is used to allocate capital for loan disbursal account ,یہ کھاتہ دارالحکومت کا کھاتہ ہے جو قرض تقسیم کے اکاؤنٹ کے لئے سرمایہ مختص کرنے کے لئے استعمال ہوتا ہے,
@@ -8748,3 +8741,5 @@
 Is Mandatory,لازمی ہے,
 WhatsApp,واٹس ایپ,
 Make a call,بنائیں ایک کال,
+Approve,منظور کریں,
+Reject,مسترد,
diff --git a/erpnext/translations/uz.csv b/erpnext/translations/uz.csv
index a3fc3f4..6b25e7b 100644
--- a/erpnext/translations/uz.csv
+++ b/erpnext/translations/uz.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Avtomatik qayta-qayta hujjat yangilandi,
 Automotive,Avto,
 Available,Mavjud,
-Available Leaves,Mavjud barglar,
 Available Qty,Mavjud Miqdor,
 Available Selling,Sotuvga tayyor,
 Available for use date is required,Foydalanish uchun mavjud bo&#39;lgan sana talab qilinadi,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,Uyadagi sinxronlash identifikatori,
 Human Resource,Inson resursi,
 Human Resources,Kadrlar bo&#39;limi,
-IFSC Code,IFSC kodi,
 IGST Amount,IGST miqdori,
 IP Address,IP manzili,
 ITC Available (whether in full op part),ITC mavjud (to&#39;liq holatda bo&#39;lsin),
@@ -1666,7 +1664,6 @@
 Other,Boshqa,
 Other Reports,Boshqa hisobotlar,
 "Other outward supplies(Nil rated,Exempted)","Boshqa tashqi etkazib berish (Nil baholanmagan, ozod qilingan)",
-Others,Boshqalar,
 Out Qty,Miqdori,
 Out Value,Chiqish qiymati,
 Out of Order,Tartibsiz,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Hammasi bo&#39;lib (soliqsiz),
 Total Achieved,Jami erishildi,
 Total Actual,Jami haqiqiy,
-Total Allocated Leaves,Jami ajratilgan barglar,
 Total Amount,Umumiy hisob,
 Total Amount Credited,Jami kredit miqdori,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Buyurtma olish bo&#39;yicha ma&#39;lumotlar jamlanmasi jami soliqlar va yig&#39;imlar bilan bir xil bo&#39;lishi kerak,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Sizning xat boshingizni va logotipingizni yuklang. (keyinchalik ularni tahrirlashingiz mumkin).,
 Upper Income,Yuqori daromad,
 Use Sandbox,Sandboxdan foydalaning,
-Used Leaves,Ishlatilgan barglar,
 User,Foydalanuvchi,
 User ID,foydalanuvchi IDsi,
 User ID not set for Employee {0},Foydalanuvchining identifikatori {0} xizmatdoshiga o&#39;rnatilmagan,
@@ -7949,12 +7944,10 @@
 Approvers,Qarama-qarshilik,
 The first Approver in the list will be set as the default Approver.,Ro&#39;yxatdagi birinchi Approver standart Approver sifatida o&#39;rnatiladi.,
 Shift Request Approver,Shift so&#39;rovini tasdiqlovchi,
-PAN Number,PAN raqami,
 Provident Fund Account,Provayder fondining hisobvarag&#39;i,
 MICR Code,MICR kodi,
 Repay unclaimed amount from salary,Talab qilinmagan miqdorni ish haqidan qaytaring,
 Deduction from salary,Ish haqidan ushlab qolish,
-Expired Leaves,Muddati o&#39;tgan barglar,
 If this is not checked the loan by default will be considered as a Demand Loan,"Agar bu tekshirilmasa, sukut bo&#39;yicha qarz talabga javob beradigan kredit sifatida qabul qilinadi",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Ushbu hisob qarz oluvchidan kreditni to&#39;lashni bron qilish va qarz oluvchiga qarz berish uchun ishlatiladi,
 This account is capital account which is used to allocate capital for loan disbursal account ,"Ushbu hisob kapital hisobvarag&#39;i bo&#39;lib, u ssudani to&#39;lash hisobiga kapital ajratish uchun ishlatiladi",
@@ -8748,3 +8741,5 @@
 Is Mandatory,Majburiy,
 WhatsApp,WhatsApp,
 Make a call,Qo&#39;ng&#39;iroq qiling,
+Approve,Tasdiqlang,
+Reject,Rad etish,
diff --git a/erpnext/translations/vi.csv b/erpnext/translations/vi.csv
index 10bc92a..e576ef7 100644
--- a/erpnext/translations/vi.csv
+++ b/erpnext/translations/vi.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,Tự động cập nhật tài liệu được cập nhật,
 Automotive,Ô tô,
 Available,Khả dụng,
-Available Leaves,Lá có sẵn,
 Available Qty,Số lượng có sẵn,
 Available Selling,Bán có sẵn,
 Available for use date is required,Có sẵn cho ngày sử dụng là bắt buộc,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,ID đồng bộ hóa của Hub,
 Human Resource,Nguồn nhân lực,
 Human Resources,Nhân sự,
-IFSC Code,Mã IFSC,
 IGST Amount,Lượng IGST,
 IP Address,Địa chỉ IP,
 ITC Available (whether in full op part),ITC Có sẵn (cho dù trong phần op đầy đủ),
@@ -1666,7 +1664,6 @@
 Other,Khác,
 Other Reports,Báo cáo khác,
 "Other outward supplies(Nil rated,Exempted)","Các nguồn cung bên ngoài khác (Không được xếp hạng, Được miễn)",
-Others,Các thông tin khác,
 Out Qty,Số lượng ra,
 Out Value,Giá trị hiện,
 Out of Order,Out of Order,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),Tổng (Không Thuế),
 Total Achieved,Tổng số đã đạt được,
 Total Actual,Tổng số thực tế,
-Total Allocated Leaves,Tổng số lá được phân bổ,
 Total Amount,Tổng số,
 Total Amount Credited,Tổng số tiền được ghi có,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,Tổng phí tại biên lai mua các mẫu hàng phải giống như tổng các loại thuế và phí,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,Tải lên tiêu đề trang và logo. (Bạn có thể chỉnh sửa chúng sau này).,
 Upper Income,Thu nhập trên,
 Use Sandbox,sử dụng Sandbox,
-Used Leaves,Lá đã qua sử dụng,
 User,Người dùng,
 User ID,ID người dùng,
 User ID not set for Employee {0},ID người dùng không thiết lập cho nhân viên {0},
@@ -7949,12 +7944,10 @@
 Approvers,Người phê duyệt,
 The first Approver in the list will be set as the default Approver.,Người phê duyệt đầu tiên trong danh sách sẽ được đặt làm Người phê duyệt mặc định.,
 Shift Request Approver,Người phê duyệt yêu cầu thay đổi,
-PAN Number,Số PAN,
 Provident Fund Account,Tài khoản Quỹ cấp,
 MICR Code,Mã MICR,
 Repay unclaimed amount from salary,Hoàn trả số tiền chưa nhận được từ tiền lương,
 Deduction from salary,Khấu trừ lương,
-Expired Leaves,Lá hết hạn,
 If this is not checked the loan by default will be considered as a Demand Loan,"Nếu điều này không được kiểm tra, khoản vay mặc định sẽ được coi là Khoản vay không kỳ hạn",
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,Tài khoản này được sử dụng để hoàn trả khoản vay từ người đi vay và cũng để giải ngân các khoản vay cho người vay,
 This account is capital account which is used to allocate capital for loan disbursal account ,Tài khoản này là tài khoản vốn dùng để cấp vốn cho tài khoản giải ngân cho vay,
@@ -8748,3 +8741,5 @@
 Is Mandatory,Bắt buộc,
 WhatsApp,WhatsApp,
 Make a call,Thực hiện cuộc gọi,
+Approve,Tán thành,
+Reject,Từ chối,
diff --git a/erpnext/translations/zh-TW.csv b/erpnext/translations/zh-TW.csv
index 752c1f5..699d802 100644
--- a/erpnext/translations/zh-TW.csv
+++ b/erpnext/translations/zh-TW.csv
@@ -712,7 +712,6 @@
 Account {0} does not belong to company: {1},科目{0}不屬於公司:{1}
 Abbreviation already used for another company,另一家公司已使用此縮寫
 Default Customer Group,預設客戶群組
-IFSC Code,IFSC代碼
 "If disable, 'Rounded Total' field will not be visible in any transaction",如果禁用,“圓角總計”字段將不可見的任何交易
 Operating Cost,營業成本
 Produced Items,生產物品
@@ -4144,7 +4143,6 @@
 Finance Book Id,金融書籍ID,
 Safety Stock,安全庫存
 Healthcare Settings,醫療設置
-Total Allocated Leaves,總分配的葉子
 Progress % for a task cannot be more than 100.,為任務進度百分比不能超過100個。
 Before reconciliation,調整前
 Taxes and Charges Added (Company Currency),稅收和收費上架(公司貨幣)
@@ -4523,7 +4521,6 @@
 Settings for website homepage,對網站的主頁設置
 {0} is on hold till {1},{0}一直保持到{1}
 RFQs are not allowed for {0} due to a scorecard standing of {1},由於{1}的記分卡,{0}不允許使用RFQ,
-Used Leaves,使用的葉子
 Link Options,鏈接選項
 Total Amount {0},總金額{0}
 Invalid attribute {0} {1},無效的屬性{0} {1}
@@ -4654,7 +4651,6 @@
 Contact Desc,聯絡倒序
 Send regular summary reports via Email.,使用電子郵件發送定期匯總報告。
 Please set default account in Expense Claim Type {0},請報銷類型設置默認科目{0}
-Available Leaves,可用的葉子
 Student Name,學生姓名
 Item Manager,項目經理
 Payroll Payable,應付職工薪酬
@@ -5975,3 +5971,4 @@
 Payment Gateway,支付網關
 Address and Contacts,地址和聯絡方式
 Plan Name,計劃名稱
+Reject,拒絕
diff --git a/erpnext/translations/zh.csv b/erpnext/translations/zh.csv
index bb30bd4..70ec81a 100644
--- a/erpnext/translations/zh.csv
+++ b/erpnext/translations/zh.csv
@@ -286,7 +286,6 @@
 Auto repeat document updated,自动重复文件更新,
 Automotive,汽车,
 Available,可用的,
-Available Leaves,可用休假天数,
 Available Qty,可用数量,
 Available Selling,可用销售,
 Available for use date is required,需要使用可用日期,
@@ -1122,7 +1121,6 @@
 Hub Sync ID,集线器同步ID,
 Human Resource,人力资源,
 Human Resources,人力资源,
-IFSC Code,IFSC代码,
 IGST Amount,IGST金额,
 IP Address,IP地址,
 ITC Available (whether in full op part),ITC可用(无论是全部操作部分),
@@ -1666,7 +1664,6 @@
 Other,其他,
 Other Reports,其他报表,
 "Other outward supplies(Nil rated,Exempted)",其他外向供应(未评级,豁免),
-Others,他人,
 Out Qty,发出数量,
 Out Value,输出值,
 Out of Order,乱序,
@@ -2812,7 +2809,6 @@
 Total (Without Tax),总计(不含税),
 Total Achieved,总体上实现的,
 Total Actual,实际总和,
-Total Allocated Leaves,合计已分配休假天数,
 Total Amount,总金额,
 Total Amount Credited,记入贷方的总金额,
 Total Applicable Charges in Purchase Receipt Items table must be same as Total Taxes and Charges,基于采购收货单信息计算的总税费必须与采购单(单头)的总税费一致,
@@ -2922,7 +2918,6 @@
 Upload your letter head and logo. (you can edit them later).,上传你的信头和logo。(您可以在以后对其进行编辑)。,
 Upper Income,高收入,
 Use Sandbox,使用沙盒,
-Used Leaves,已休假(天数),
 User,用户,
 User ID,用户ID,
 User ID not set for Employee {0},员工设置{0}为设置用户ID,
@@ -7949,12 +7944,10 @@
 Approvers,批准人,
 The first Approver in the list will be set as the default Approver.,列表中的第一个批准人将被设置为默认批准人。,
 Shift Request Approver,轮班请求批准人,
-PAN Number,PAN号码,
 Provident Fund Account,公积金帐户,
 MICR Code,MICR代码,
 Repay unclaimed amount from salary,从工资中偿还无人认领的金额,
 Deduction from salary,从工资中扣除,
-Expired Leaves,过期的叶子,
 If this is not checked the loan by default will be considered as a Demand Loan,如果未选中此选项,则默认情况下该贷款将被视为需求贷款,
 This account is used for booking loan repayments from the borrower and also disbursing loans to the borrower,此帐户用于预订借款人的还款,也用于向借款人发放贷款,
 This account is capital account which is used to allocate capital for loan disbursal account ,该帐户是资本帐户,用于为贷款支付帐户分配资本,
@@ -8748,3 +8741,5 @@
 Is Mandatory,是强制性的,
 WhatsApp,WhatsApp的,
 Make a call,打个电话,
+Approve,同意,
+Reject,拒绝,
diff --git a/pyproject.toml b/pyproject.toml
index 7841c92..604aa44 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,11 +16,9 @@
     "holidays~=0.28",
 
     # integration dependencies
-    "gocardless-pro~=1.22.0",
     "googlemaps",
     "plaid-python~=7.2.1",
     "python-youtube~=0.8.0",
-    "tweepy~=4.14.0",
 
     # Not used directly - required by PyQRCode for PNG generation
     "pypng~=0.20220715.0",