This commit is contained in:
gsinghpal
2026-03-13 12:38:28 -04:00
parent db4b9aa278
commit fc3c966484
2975 changed files with 1614 additions and 498 deletions

View File

@@ -1,41 +1,74 @@
# -*- coding: utf-8 -*-
import json
import werkzeug.exceptions
import logging
from odoo import http
from odoo.http import request
from odoo.tools.safe_eval import safe_eval, time
_logger = logging.getLogger(__name__)
class PrintPreviewController(http.Controller):
@http.route('/pdf_print_preview/get_report_name', type='json', auth='user')
def get_report_name(self, report_name=False, data={}):
class FusionPDFPreviewController(http.Controller):
@http.route('/fusion_pdf_preview/get_report_name', type='json', auth='user')
def get_report_name(self, report_name=False, data=None):
file_name = ''
if not report_name:
raise werkzeug.exceptions.HTTPException(
description="Cannot found report name in param")
raise request.not_found(
description="Cannot find report name in parameters")
report = request.env['ir.actions.report']._get_report_from_name(
report_name)
if not report:
raise werkzeug.exceptions.HTTPException(
description=f"Cannot found report with name ( {report_name} )")
raise request.not_found(
description=f"Cannot find report with name ({report_name})")
print_report_name = report.print_report_name
data = json.loads(data)
if data:
data = json.loads(data)
else:
data = {}
res_ids = data.get('active_ids', [])
records = request.env[report.model].browse(res_ids)
try:
if print_report_name and not len(records) > 1:
file_name = safe_eval(print_report_name, {
'object': records, 'time': time})
except:
pass
file_name = safe_eval(print_report_name, {
'object': records, 'time': time})
except Exception:
_logger.warning(
"Failed to evaluate print_report_name for report %s",
report_name, exc_info=True)
return {
'file_name': file_name,
'wkhtmltopdf_state': request.env['ir.actions.report'].get_wkhtmltopdf_state(),
'fusion_preview_mode': report.fusion_preview_mode or 'default',
}
@http.route('/fusion_pdf_preview/log_action', type='json', auth='user')
def log_action(self, report_name=False, action_type=False, record_ids=False, model_name=False):
"""Create an audit log entry for PDF preview/print/download actions."""
if not report_name or not action_type:
return {'success': False}
report = request.env['ir.actions.report']._get_report_from_name(report_name)
vals = {
'user_id': request.env.uid,
'report_name': report.name if report else report_name,
'report_id': report.id if report else False,
'action_type': action_type,
'record_ids': record_ids or '',
'model_name': model_name or (report.model if report else ''),
}
try:
request.env['fusion.pdf.preview.log'].sudo().create(vals)
except Exception:
_logger.warning("Failed to create PDF preview log entry", exc_info=True)
return {'success': False}
return {'success': True}