changes
This commit is contained in:
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user