feat(fusion_accounting_reports): PDF export with QWeb template
Adds an AbstractModel report (report_pdf.py) and a single multi-purpose QWeb template (report_pdf_template.xml) that renders P&L, Balance Sheet, Trial Balance, and General Ledger results from the engine. Wires the controller's /fusion/reports/export_pdf endpoint to actually return base64-encoded PDF bytes via _render_qweb_pdf. The template walks the result['rows'] list and applies indentation/bold based on level and is_subtotal flags, with optional comparison columns when present. Tests: 2 new (test_pdf_export.py) + 1 controller test updated to assert the real PDF response. Net 109 -> 111. Made-with: Cursor
This commit is contained in:
@@ -210,9 +210,25 @@ class FusionReportsController(http.Controller):
|
||||
@http.route('/fusion/reports/export_pdf', type='jsonrpc', auth='user')
|
||||
def export_pdf(self, report_type, date_from, date_to,
|
||||
comparison='none', company_id=None):
|
||||
Report = request.env['fusion.report']
|
||||
report_def = Report.search([('report_type', '=', report_type)], limit=1)
|
||||
if not report_def:
|
||||
return {'status': 'error', 'message': f'No report definition for {report_type}'}
|
||||
company_id = int(company_id) if company_id else request.env.company.id
|
||||
pdf, _ct = request.env['ir.actions.report'].sudo()._render_qweb_pdf(
|
||||
'fusion_accounting_reports.report_pdf_template',
|
||||
res_ids=[report_def.id],
|
||||
data={
|
||||
'report_type': report_type,
|
||||
'date_from': date_from, 'date_to': date_to,
|
||||
'comparison': comparison, 'company_id': company_id,
|
||||
},
|
||||
)
|
||||
import base64
|
||||
return {
|
||||
'status': 'not_implemented',
|
||||
'message': 'PDF export shipping in Task 34',
|
||||
'status': 'ok',
|
||||
'pdf_base64': base64.b64encode(pdf).decode('ascii'),
|
||||
'filename': f'{report_type}_{date_from}_{date_to}.pdf',
|
||||
}
|
||||
|
||||
@http.route('/fusion/reports/export_xlsx', type='jsonrpc', auth='user')
|
||||
|
||||
Reference in New Issue
Block a user