fix(fusion_accounting_reports): engine accepts report_code to disambiguate
When multiple fusion.report rows share a report_type (e.g. 4 PnL-typed reports: pnl, cash_flow, executive_summary, annual_statements), the engine's _get_report previously returned whichever matched the type filter first \u2014 so all four reports rendered the canonical P&L line_specs regardless of which report the user selected. Adds report_code kwarg to compute_pnl, compute_balance_sheet, compute_trial_balance, compute_gl. Controller /fusion/reports/run now accepts and forwards report_code. _get_report has a 3-tier resolution: 1. Exact code match (validates type) 2. Canonical (code == report_type) 3. First by sequence Two new tests assert distinct line_specs render for distinct codes and that wrong-type code raises ValidationError. Verified live on westin-v19: pnl/cash_flow/executive_summary/ annual_statements now return 3/9/7/5 rows respectively (was all 3 before). Made-with: Cursor
This commit is contained in:
@@ -65,7 +65,7 @@ class FusionReportsController(http.Controller):
|
||||
|
||||
@http.route('/fusion/reports/run', type='jsonrpc', auth='user')
|
||||
def run(self, report_type, date_from=None, date_to=None,
|
||||
comparison='none', company_id=None):
|
||||
comparison='none', company_id=None, report_code=None):
|
||||
if report_type not in REPORT_TYPES:
|
||||
raise ValidationError(_("Unknown report type: %s") % report_type)
|
||||
company_id = int(company_id) if company_id else request.env.company.id
|
||||
@@ -75,16 +75,20 @@ class FusionReportsController(http.Controller):
|
||||
period = _build_period(date_from, date_to)
|
||||
return engine.compute_pnl(
|
||||
period, comparison=comparison, company_id=company_id,
|
||||
report_code=report_code,
|
||||
)
|
||||
if report_type == 'balance_sheet':
|
||||
return engine.compute_balance_sheet(
|
||||
_parse_date(date_to),
|
||||
comparison=comparison,
|
||||
company_id=company_id,
|
||||
report_code=report_code,
|
||||
)
|
||||
if report_type == 'trial_balance':
|
||||
period = _build_period(date_from, date_to)
|
||||
return engine.compute_trial_balance(period, company_id=company_id)
|
||||
return engine.compute_trial_balance(
|
||||
period, company_id=company_id, report_code=report_code,
|
||||
)
|
||||
if report_type in PARTNER_GROUPED_ACCOUNT_TYPE:
|
||||
period = _build_period(date_from, date_to)
|
||||
return engine.compute_partner_grouped(
|
||||
@@ -95,7 +99,9 @@ class FusionReportsController(http.Controller):
|
||||
)
|
||||
# general_ledger
|
||||
period = _build_period(date_from, date_to)
|
||||
return engine.compute_gl(period, company_id=company_id)
|
||||
return engine.compute_gl(
|
||||
period, company_id=company_id, report_code=report_code,
|
||||
)
|
||||
|
||||
@http.route('/fusion/reports/drill_down', type='jsonrpc', auth='user')
|
||||
def drill_down(self, account_id, date_from, date_to, company_id=None):
|
||||
|
||||
Reference in New Issue
Block a user