Merge pull request #6364 from rohitwaghchaure/financial_statements_report_issue
[Fix] Financial Statements reports are running very slow
This commit is contained in:
commit
9d095dcec2
@ -12,20 +12,12 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity):
|
|||||||
"""Get a list of dict {"from_date": from_date, "to_date": to_date, "key": key, "label": label}
|
"""Get a list of dict {"from_date": from_date, "to_date": to_date, "key": key, "label": label}
|
||||||
Periodicity can be (Yearly, Quarterly, Monthly)"""
|
Periodicity can be (Yearly, Quarterly, Monthly)"""
|
||||||
|
|
||||||
from_fy_start_end_date = frappe.db.get_value("Fiscal Year", from_fiscal_year, ["year_start_date", "year_end_date"])
|
fiscal_year = get_fiscal_year_data(from_fiscal_year, to_fiscal_year)
|
||||||
to_fy_start_end_date = frappe.db.get_value("Fiscal Year", to_fiscal_year, ["year_start_date", "year_end_date"])
|
validate_fiscal_year(fiscal_year, from_fiscal_year, to_fiscal_year)
|
||||||
|
|
||||||
if not from_fy_start_end_date:
|
|
||||||
frappe.throw(_("Start Year {0} not found.").format(from_fiscal_year))
|
|
||||||
|
|
||||||
if not to_fy_start_end_date:
|
|
||||||
frappe.throw(_("End Year {0} not found.").format(to_fiscal_year))
|
|
||||||
|
|
||||||
# start with first day, so as to avoid year to_dates like 2-April if ever they occur]
|
# start with first day, so as to avoid year to_dates like 2-April if ever they occur]
|
||||||
year_start_date = getdate(from_fy_start_end_date[0])
|
year_start_date = getdate(fiscal_year.year_start_date)
|
||||||
year_end_date = getdate(to_fy_start_end_date[1])
|
year_end_date = getdate(fiscal_year.year_end_date)
|
||||||
|
|
||||||
validate_fiscal_year(year_start_date, year_end_date)
|
|
||||||
|
|
||||||
months_to_add = {
|
months_to_add = {
|
||||||
"Yearly": 12,
|
"Yearly": 12,
|
||||||
@ -85,8 +77,16 @@ def get_period_list(from_fiscal_year, to_fiscal_year, periodicity):
|
|||||||
|
|
||||||
return period_list
|
return period_list
|
||||||
|
|
||||||
def validate_fiscal_year(start_date, end_date):
|
def get_fiscal_year_data(from_fiscal_year, to_fiscal_year):
|
||||||
if date_diff(end_date, start_date) <= 0:
|
fiscal_year = frappe.db.sql("""select min(year_start_date) as year_start_date,
|
||||||
|
max(year_end_date) as year_end_date from `tabFiscal Year` where
|
||||||
|
name between %(from_fiscal_year)s and %(to_fiscal_year)s""",
|
||||||
|
{'from_fiscal_year': from_fiscal_year, 'to_fiscal_year': to_fiscal_year}, as_dict=1)
|
||||||
|
|
||||||
|
return fiscal_year[0] if fiscal_year else {}
|
||||||
|
|
||||||
|
def validate_fiscal_year(fiscal_year, from_fiscal_year, to_fiscal_year):
|
||||||
|
if not fiscal_year.get('year_start_date') and not fiscal_year.get('year_end_date'):
|
||||||
frappe.throw(_("End Year cannot be before Start Year"))
|
frappe.throw(_("End Year cannot be before Start Year"))
|
||||||
|
|
||||||
def get_months(start_date, end_date):
|
def get_months(start_date, end_date):
|
||||||
@ -142,10 +142,9 @@ def calculate_values(accounts_by_name, gl_entries_by_account, period_list, accum
|
|||||||
for period in period_list:
|
for period in period_list:
|
||||||
# check if posting date is within the period
|
# check if posting date is within the period
|
||||||
|
|
||||||
fiscal_year = get_date_fiscal_year(entry.posting_date)
|
|
||||||
if entry.posting_date <= period.to_date:
|
if entry.posting_date <= period.to_date:
|
||||||
if (accumulated_values or entry.posting_date >= period.from_date) and \
|
if (accumulated_values or entry.posting_date >= period.from_date) and \
|
||||||
(fiscal_year == period.to_date_fiscal_year or not ignore_accumulated_values_for_fy):
|
(entry.fiscal_year == period.to_date_fiscal_year or not ignore_accumulated_values_for_fy):
|
||||||
d[period.key] = d.get(period.key, 0.0) + flt(entry.debit) - flt(entry.credit)
|
d[period.key] = d.get(period.key, 0.0) + flt(entry.debit) - flt(entry.credit)
|
||||||
|
|
||||||
if entry.posting_date < period_list[0].year_start_date:
|
if entry.posting_date < period_list[0].year_start_date:
|
||||||
@ -294,7 +293,7 @@ def set_gl_entries_by_account(company, from_date, to_date, root_lft, root_rgt, f
|
|||||||
|
|
||||||
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
|
additional_conditions = get_additional_conditions(from_date, ignore_closing_entries, filters)
|
||||||
|
|
||||||
gl_entries = frappe.db.sql("""select posting_date, account, debit, credit, is_opening from `tabGL Entry`
|
gl_entries = frappe.db.sql("""select posting_date, account, debit, credit, is_opening, fiscal_year from `tabGL Entry`
|
||||||
where company=%(company)s
|
where company=%(company)s
|
||||||
{additional_conditions}
|
{additional_conditions}
|
||||||
and posting_date <= %(to_date)s
|
and posting_date <= %(to_date)s
|
||||||
|
Loading…
Reference in New Issue
Block a user