Merge pull request #57586 from aerele/backport-57335-version-15-hotfix

refactor: reuse shared date range validation across reports
This commit is contained in:
Mihir Kandoi
2026-07-29 10:46:55 +05:30
committed by GitHub
5 changed files with 22 additions and 9 deletions

View File

@@ -7,6 +7,7 @@ from frappe import _
from frappe.utils import flt, getdate from frappe.utils import flt, getdate
from pypika import Tuple from pypika import Tuple
from erpnext.accounts.report.utils import validate_mandatory_date_range
from erpnext.accounts.utils import get_currency_precision from erpnext.accounts.utils import get_currency_precision
@@ -33,9 +34,7 @@ def execute(filters=None):
def validate_filters(filters): def validate_filters(filters):
"""Validate if dates are properly set""" """Validate if dates are properly set"""
filters = frappe._dict(filters or {}) validate_mandatory_date_range(filters or {})
if filters.from_date > filters.to_date:
frappe.throw(_("From Date must be before To Date"))
def get_result(filters, tds_accounts, tax_category_map, net_total_map): def get_result(filters, tds_accounts, tax_category_map, net_total_map):

View File

@@ -5,6 +5,7 @@ from erpnext.accounts.report.tax_withholding_details.tax_withholding_details imp
get_result, get_result,
get_tds_docs, get_tds_docs,
) )
from erpnext.accounts.report.utils import validate_mandatory_date_range
from erpnext.accounts.utils import get_fiscal_year from erpnext.accounts.utils import get_fiscal_year
@@ -33,8 +34,7 @@ def execute(filters=None):
def validate_filters(filters): def validate_filters(filters):
"""Validate if dates are properly set and lie in the same fiscal year""" """Validate if dates are properly set and lie in the same fiscal year"""
if filters.from_date > filters.to_date: validate_mandatory_date_range(filters)
frappe.throw(_("From Date must be before To Date"))
from_year = get_fiscal_year(filters.from_date)[0] from_year = get_fiscal_year(filters.from_date)[0]
to_year = get_fiscal_year(filters.to_date)[0] to_year = get_fiscal_year(filters.to_date)[0]

View File

@@ -1,4 +1,5 @@
import frappe import frappe
from frappe import _
from frappe.query_builder.custom import ConstantColumn from frappe.query_builder.custom import ConstantColumn
from frappe.query_builder.functions import Sum from frappe.query_builder.functions import Sum
from frappe.utils import flt, formatdate, get_datetime_str, get_table_name from frappe.utils import flt, formatdate, get_datetime_str, get_table_name
@@ -16,6 +17,19 @@ from erpnext.setup.utils import get_exchange_rate
__exchange_rates = {} __exchange_rates = {}
def validate_mandatory_date_range(filters, from_field="from_date", to_field="to_date"):
from_date = filters.get(from_field)
to_date = filters.get(to_field)
if not from_date or not to_date:
frappe.throw(
_("{0} and {1} are mandatory").format(frappe.bold(_("From Date")), frappe.bold(_("To Date")))
)
if from_date > to_date:
frappe.throw(_("From Date must be before To Date"))
def get_currency(filters): def get_currency(filters):
""" """
Returns a dictionary containing currency information. The keys of the dict are Returns a dictionary containing currency information. The keys of the dict are

View File

@@ -8,6 +8,7 @@ from frappe.utils import add_to_date, cint, flt, get_datetime, get_table_name, g
from frappe.utils.deprecations import deprecated from frappe.utils.deprecations import deprecated
from pypika import functions as fn from pypika import functions as fn
from erpnext.accounts.report.utils import validate_mandatory_date_range
from erpnext.stock.doctype.warehouse.warehouse import apply_warehouse_filter from erpnext.stock.doctype.warehouse.warehouse import apply_warehouse_filter
SLE_COUNT_LIMIT = 100_000 SLE_COUNT_LIMIT = 100_000
@@ -29,8 +30,7 @@ def execute(filters=None):
_("Please select either the Item or Warehouse or Warehouse Type filter to generate the report.") _("Please select either the Item or Warehouse or Warehouse Type filter to generate the report.")
) )
if filters.from_date > filters.to_date: validate_mandatory_date_range(filters)
frappe.throw(_("From Date must be before To Date"))
float_precision = cint(frappe.db.get_default("float_precision")) or 3 float_precision = cint(frappe.db.get_default("float_precision")) or 3

View File

@@ -9,6 +9,7 @@ from frappe import _
from frappe.utils import date_diff from frappe.utils import date_diff
from erpnext.accounts.report.general_ledger.general_ledger import get_gl_entries from erpnext.accounts.report.general_ledger.general_ledger import get_gl_entries
from erpnext.accounts.report.utils import validate_mandatory_date_range
Filters = frappe._dict Filters = frappe._dict
Row = frappe._dict Row = frappe._dict
@@ -34,8 +35,7 @@ def update_filters_with_account(filters: Filters) -> None:
def validate_filters(filters: Filters) -> None: def validate_filters(filters: Filters) -> None:
if filters.from_date > filters.to_date: validate_mandatory_date_range(filters)
frappe.throw(_("From Date must be before To Date"))
def get_columns() -> Columns: def get_columns() -> Columns: