refactor: convert class method to standalone function
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 53d9e21..fa889c0 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -1836,3 +1836,74 @@
 		self.query_for_outstanding()
 
 		return self.voucher_outstandings
+
+
+def create_gain_loss_journal(
+	company,
+	party_type,
+	party,
+	party_account,
+	gain_loss_account,
+	exc_gain_loss,
+	dr_or_cr,
+	reverse_dr_or_cr,
+	ref1_dt,
+	ref1_dn,
+	ref1_detail_no,
+	ref2_dt,
+	ref2_dn,
+	ref2_detail_no,
+) -> str:
+	journal_entry = frappe.new_doc("Journal Entry")
+	journal_entry.voucher_type = "Exchange Gain Or Loss"
+	journal_entry.company = company
+	journal_entry.posting_date = nowdate()
+	journal_entry.multi_currency = 1
+
+	party_account_currency = frappe.get_cached_value("Account", party_account, "account_currency")
+
+	if not gain_loss_account:
+		frappe.throw(_("Please set default Exchange Gain/Loss Account in Company {}").format(company))
+	gain_loss_account_currency = get_account_currency(gain_loss_account)
+	company_currency = frappe.get_cached_value("Company", company, "default_currency")
+
+	if gain_loss_account_currency != company_currency:
+		frappe.throw(_("Currency for {0} must be {1}").format(gain_loss_account, company_currency))
+
+	journal_account = frappe._dict(
+		{
+			"account": party_account,
+			"party_type": party_type,
+			"party": party,
+			"account_currency": party_account_currency,
+			"exchange_rate": 0,
+			"cost_center": erpnext.get_default_cost_center(company),
+			"reference_type": ref1_dt,
+			"reference_name": ref1_dn,
+			"reference_detail_no": ref1_detail_no,
+			dr_or_cr: abs(exc_gain_loss),
+			dr_or_cr + "_in_account_currency": 0,
+		}
+	)
+
+	journal_entry.append("accounts", journal_account)
+
+	journal_account = frappe._dict(
+		{
+			"account": gain_loss_account,
+			"account_currency": gain_loss_account_currency,
+			"exchange_rate": 1,
+			"cost_center": erpnext.get_default_cost_center(company),
+			"reference_type": ref2_dt,
+			"reference_name": ref2_dn,
+			"reference_detail_no": ref2_detail_no,
+			reverse_dr_or_cr + "_in_account_currency": 0,
+			reverse_dr_or_cr: abs(exc_gain_loss),
+		}
+	)
+
+	journal_entry.append("accounts", journal_account)
+
+	journal_entry.save()
+	journal_entry.submit()
+	return journal_entry.name
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 6bf9d29..b9fc082 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -38,7 +38,12 @@
 	get_party_gle_currency,
 	validate_party_frozen_disabled,
 )
-from erpnext.accounts.utils import get_account_currency, get_fiscal_years, validate_fiscal_year
+from erpnext.accounts.utils import (
+	create_gain_loss_journal,
+	get_account_currency,
+	get_fiscal_years,
+	validate_fiscal_year,
+)
 from erpnext.buying.utils import update_last_purchase_rate
 from erpnext.controllers.print_settings import (
 	set_print_templates_for_item_table,
@@ -968,78 +973,6 @@
 
 				d.exchange_gain_loss = difference
 
-	def create_gain_loss_journal(
-		self,
-		party_type,
-		party,
-		party_account,
-		gain_loss_account,
-		exc_gain_loss,
-		dr_or_cr,
-		reverse_dr_or_cr,
-		ref1_dt,
-		ref1_dn,
-		ref1_detail_no,
-		ref2_dt,
-		ref2_dn,
-		ref2_detail_no,
-	) -> str:
-		journal_entry = frappe.new_doc("Journal Entry")
-		journal_entry.voucher_type = "Exchange Gain Or Loss"
-		journal_entry.company = self.company
-		journal_entry.posting_date = nowdate()
-		journal_entry.multi_currency = 1
-
-		party_account_currency = frappe.get_cached_value("Account", party_account, "account_currency")
-
-		if not gain_loss_account:
-			frappe.throw(
-				_("Please set default Exchange Gain/Loss Account in Company {}").format(self.get("company"))
-			)
-		gain_loss_account_currency = get_account_currency(gain_loss_account)
-		company_currency = frappe.get_cached_value("Company", self.company, "default_currency")
-
-		if gain_loss_account_currency != self.company_currency:
-			frappe.throw(_("Currency for {0} must be {1}").format(gain_loss_account, company_currency))
-
-		journal_account = frappe._dict(
-			{
-				"account": party_account,
-				"party_type": party_type,
-				"party": party,
-				"account_currency": party_account_currency,
-				"exchange_rate": 0,
-				"cost_center": erpnext.get_default_cost_center(self.company),
-				"reference_type": ref1_dt,
-				"reference_name": ref1_dn,
-				"reference_detail_no": ref1_detail_no,
-				dr_or_cr: abs(exc_gain_loss),
-				dr_or_cr + "_in_account_currency": 0,
-			}
-		)
-
-		journal_entry.append("accounts", journal_account)
-
-		journal_account = frappe._dict(
-			{
-				"account": gain_loss_account,
-				"account_currency": gain_loss_account_currency,
-				"exchange_rate": 1,
-				"cost_center": erpnext.get_default_cost_center(self.company),
-				"reference_type": ref2_dt,
-				"reference_name": ref2_dn,
-				"reference_detail_no": ref2_detail_no,
-				reverse_dr_or_cr + "_in_account_currency": 0,
-				reverse_dr_or_cr: abs(exc_gain_loss),
-			}
-		)
-
-		journal_entry.append("accounts", journal_account)
-
-		journal_entry.save()
-		journal_entry.submit()
-		return journal_entry.name
-
 	def make_exchange_gain_loss_journal(self, args: dict = None) -> None:
 		"""
 		Make Exchange Gain/Loss journal for Invoices and Payments
@@ -1068,7 +1001,8 @@
 
 							reverse_dr_or_cr = "debit" if dr_or_cr == "credit" else "credit"
 
-							self.create_gain_loss_journal(
+							create_gain_loss_journal(
+								self.company,
 								arg.get("party_type"),
 								arg.get("party"),
 								party_account,
@@ -1140,7 +1074,8 @@
 							"Company", self.company, "exchange_gain_loss_account"
 						)
 
-						self.create_gain_loss_journal(
+						create_gain_loss_journal(
+							self.company,
 							self.party_type,
 							self.party,
 							party_account,