update-report_carbone-to-make-it-work #2

Merged
mondot merged 2 commits from update-report_carbone-to-make-it-work into 18.0 2026-04-23 07:43:53 +00:00
2 changed files with 17 additions and 8 deletions

View File

@@ -90,8 +90,7 @@ class CarboneReportController(ReportController):
carbone_report = request.env["ir.actions.report"]._get_report_from_name(reportname)
self.check_carbone_report(carbone_report)
report_content, extension = request.env["ir.actions.report"]._render_carbone(carbone_report, docids)
filename = f"{carbone_report.report_name}.{extension}"
report_content, extension, filename = request.env["ir.actions.report"]._render_carbone(carbone_report, docids)
headers = _get_headers(extension, report_content, filename)
return request.make_response(report_content, headers)

View File

@@ -541,6 +541,12 @@ class IrActionsReportCarbone(models.Model):
csdk = carbone_sdk.CarboneSDK(access_token)
csdk._api_headers.update({"User-Agent": self.get_default_user_agent()})
api_url = (
self.env["ir.config_parameter"]
.sudo()
.get_param("report-engine.carbone_studio_url")
)
csdk.set_api_url(api_url)
return csdk
def _get_json_data(self, export_json_instance, field_names, record, model, lang_codes):
@@ -645,7 +651,7 @@ class IrActionsReportCarbone(models.Model):
else:
_logger.info("The PDF documents %r are now saved in the database", attachment_names)
def _render_carbone(self, report_ref, docids: str | list, data=None) -> tuple[bytes, str]:
def _render_carbone(self, report_ref, docids: str | list, data=None) -> tuple[bytes, str, str | bool]:
context = dict(self.env.context)
report_sudo = self._get_report(report_ref)
@@ -670,13 +676,14 @@ class IrActionsReportCarbone(models.Model):
streams_to_dl = list(stream_to_ids.keys())
if not context.get("from_ir_report_controller") or len(streams_to_dl) == 1:
pdf_content = streams_to_dl[0].getvalue()
# stream_to_ids[streams_to_dl[0]] contains [record_id, filename, extension]
extension = stream_to_ids[streams_to_dl[0]][2]
return pdf_content, extension
stream = streams_to_dl[0]
pdf_content = stream.getvalue()
filename = stream_to_ids[stream][1]
extension = stream_to_ids[stream][2]
return pdf_content, extension, filename
zip_content = _build_zip_from_data(stream_to_ids)
return zip_content, "zip"
return zip_content, "zip", f"{report_sudo.name}.zip"
def _retrieve_carbone_filename(self, records, output_file_extension: str) -> str:
self.ensure_one()
@@ -852,6 +859,9 @@ class IrActionsReportCarbone(models.Model):
}
res = self.call_carbone_endpoint(endpoint, params, raise_error)
if not isinstance(res, dict):
return False
data_list = res.get("data")
if not data_list:
return False