Merge pull request #47243 from ljain112/fix-p&l

fix: accumulate values for all the fiscal years in Profit And Loss Statement
This commit is contained in:
ruthra kumar
2025-05-12 16:46:30 +05:30
committed by GitHub
2 changed files with 63 additions and 4 deletions

View File

@@ -35,7 +35,6 @@ def execute(filters=None):
filters=filters,
accumulated_values=filters.accumulated_values,
ignore_closing_entries=True,
ignore_accumulated_values_for_fy=True,
)
expense = get_data(
@@ -46,7 +45,6 @@ def execute(filters=None):
filters=filters,
accumulated_values=filters.accumulated_values,
ignore_closing_entries=True,
ignore_accumulated_values_for_fy=True,
)
net_profit_loss = get_net_profit_loss(

View File

@@ -4,7 +4,7 @@
import frappe
from frappe.desk.query_report import export_query
from frappe.tests import IntegrationTestCase
from frappe.utils import getdate, today
from frappe.utils import add_days, getdate, today
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
from erpnext.accounts.report.financial_statements import get_period_list
@@ -58,7 +58,7 @@ class TestProfitAndLossStatement(AccountsTestMixin, IntegrationTestCase):
period_end_date=fy.year_end_date,
filter_based_on="Fiscal Year",
periodicity="Monthly",
accumulated_vallues=True,
accumulated_values=False,
)
def test_profit_and_loss_output_and_summary(self):
@@ -109,3 +109,64 @@ class TestProfitAndLossStatement(AccountsTestMixin, IntegrationTestCase):
sales_account = frappe.db.get_value("Company", self.company, "default_income_account")
self.assertIn(sales_account, contents)
def test_accumulate_filter(self):
# ensure 2 fiscal years
cur_fy = self.get_fiscal_year()
find_for = add_days(cur_fy.year_start_date, -1)
_x = frappe.db.get_all(
"Fiscal Year",
filters={"disabled": 0, "year_start_date": ("<=", find_for), "year_end_date": (">=", find_for)},
)[0]
prev_fy = frappe.get_doc("Fiscal Year", _x.name)
prev_fy.append("companies", {"company": self.company})
prev_fy.save()
# make SI on both of them
prev_fy_si = self.create_sales_invoice(qty=1, rate=450, do_not_submit=True)
prev_fy_si.posting_date = add_days(prev_fy.year_end_date, -1)
prev_fy_si.save().submit()
income_acc = prev_fy_si.items[0].income_account
self.create_sales_invoice(qty=1, rate=120)
# Unaccumualted
filters = frappe._dict(
company=self.company,
from_fiscal_year=prev_fy.name,
to_fiscal_year=cur_fy.name,
period_start_date=prev_fy.year_start_date,
period_end_date=cur_fy.year_end_date,
filter_based_on="Date Range",
periodicity="Yearly",
accumulated_values=False,
)
result = execute(filters)
columns = [result[0][2], result[0][3]]
expected = {
"account": income_acc,
columns[0].get("fieldname"): 450.0,
columns[1].get("fieldname"): 120.0,
}
actual = [x for x in result[1] if x.get("account") == income_acc]
self.assertEqual(len(actual), 1)
actual = actual[0]
for key in expected.keys():
with self.subTest(key=key):
self.assertEqual(expected.get(key), actual.get(key))
# accumualted
filters.update({"accumulated_values": True})
expected = {
"account": income_acc,
columns[0].get("fieldname"): 450.0,
columns[1].get("fieldname"): 570.0,
}
result = execute(filters)
columns = [result[0][2], result[0][3]]
actual = [x for x in result[1] if x.get("account") == income_acc]
self.assertEqual(len(actual), 1)
actual = actual[0]
for key in expected.keys():
with self.subTest(key=key):
self.assertEqual(expected.get(key), actual.get(key))