chore: Add missing validations
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
index e93fa8c..831c343 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py
@@ -5,12 +5,12 @@
import frappe
from frappe import _
from frappe.query_builder.functions import Sum
-from frappe.utils import flt
+from frappe.utils import add_days, flt
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import (
get_accounting_dimensions,
)
-from erpnext.accounts.utils import get_account_currency
+from erpnext.accounts.utils import get_account_currency, get_fiscal_year, validate_fiscal_year
from erpnext.controllers.accounts_controller import AccountsController
@@ -72,8 +72,6 @@
frappe.throw(_("Currency of the Closing Account must be {0}").format(company_currency))
def validate_posting_date(self):
- from erpnext.accounts.utils import get_fiscal_year, validate_fiscal_year
-
validate_fiscal_year(
self.posting_date, self.fiscal_year, self.company, label=_("Posting Date"), doc=self
)
@@ -82,6 +80,8 @@
self.posting_date, self.fiscal_year, company=self.company
)[1]
+ self.check_if_previous_year_closed()
+
pce = frappe.db.sql(
"""select name from `tabPeriod Closing Voucher`
where posting_date > %s and fiscal_year = %s and docstatus = 1 and company = %s""",
@@ -94,6 +94,17 @@
)
)
+ def check_if_previous_year_closed(self):
+ last_year_closing = add_days(self.year_start_date, -1)
+
+ previous_fiscal_year = get_fiscal_year(last_year_closing, company=self.company, boolean=True)
+
+ if previous_fiscal_year and not frappe.db.exists(
+ "Period Closing Voucher",
+ {"posting_date": ("<=", last_year_closing), "docstatus": 1, "company": self.company},
+ ):
+ frappe.throw(_("Previous Year is not closed, please close it first"))
+
def make_gl_entries(self, get_opening_entries=False):
gl_entries = self.get_gl_entries()
closing_entries = self.get_grouped_gl_entries(get_opening_entries=get_opening_entries)
diff --git a/erpnext/accounts/report/financial_statements.py b/erpnext/accounts/report/financial_statements.py
index d9c3980..9bb05fd 100644
--- a/erpnext/accounts/report/financial_statements.py
+++ b/erpnext/accounts/report/financial_statements.py
@@ -486,8 +486,6 @@
gl_entry.account,
gl_entry.debit,
gl_entry.credit,
- gl_entry.is_opening,
- gl_entry.fiscal_year,
gl_entry.debit_in_account_currency,
gl_entry.credit_in_account_currency,
gl_entry.account_currency,
@@ -498,7 +496,7 @@
query = query.where(gl_entry.account.isin(accounts))
if doctype == "GL Entry":
- query = query.select(gl_entry.posting_date)
+ query = query.select(gl_entry.posting_date, gl_entry.is_opening, gl_entry.fiscal_year)
query = query.where(gl_entry.is_cancelled == 0)
query = query.where(gl_entry.posting_date <= to_date)
else:
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 005a2f1..92906c1 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -51,13 +51,25 @@
@frappe.whitelist()
def get_fiscal_year(
- date=None, fiscal_year=None, label="Date", verbose=1, company=None, as_dict=False
+ date=None, fiscal_year=None, label="Date", verbose=1, company=None, as_dict=False, boolean=False
):
- return get_fiscal_years(date, fiscal_year, label, verbose, company, as_dict=as_dict)[0]
+ fiscal_years = get_fiscal_years(
+ date, fiscal_year, label, verbose, company, as_dict=as_dict, boolean=boolean
+ )
+ if boolean:
+ return fiscal_years
+ else:
+ return fiscal_years[0]
def get_fiscal_years(
- transaction_date=None, fiscal_year=None, label="Date", verbose=1, company=None, as_dict=False
+ transaction_date=None,
+ fiscal_year=None,
+ label="Date",
+ verbose=1,
+ company=None,
+ as_dict=False,
+ boolean=False,
):
fiscal_years = frappe.cache().hget("fiscal_years", company) or []
@@ -121,8 +133,12 @@
if company:
error_msg = _("""{0} for {1}""").format(error_msg, frappe.bold(company))
+ if boolean:
+ return False
+
if verbose == 1:
frappe.msgprint(error_msg)
+
raise FiscalYearError(error_msg)