diff --git a/controllers/main.py b/controllers/main.py index f175dee8fa8157bde8c25e94aa2462f84456b6f3..ecafacfbe012fe45cccf1f456a9cf6f93f73e1e0 100644 --- a/controllers/main.py +++ b/controllers/main.py @@ -1,10 +1,11 @@ # Copyright 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +import base64 from odoo import SUPERUSER_ID, _, http from odoo.exceptions import AccessError, MissingError -from odoo.http import request +from odoo.http import Response, request from odoo.tools import consteq from odoo.addons.portal.controllers.portal import CustomerPortal @@ -36,7 +37,9 @@ class AccAccountMain(CustomerPortal): download=False, ) else: - raise AccessError(_("Vous n'êtes pas autorisé à accéder à ce document")) + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) @http.route( ["/contract/<int:contract_id>"], @@ -49,17 +52,33 @@ class AccAccountMain(CustomerPortal): def print_contract(self, contract_id, access_token=None, **kw): contract = request.env["acc.contract"].browse([contract_id]) contract_sudo = contract.with_user(SUPERUSER_ID).exists() + if not contract_sudo: + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) if ( not access_token or not contract_sudo.access_token or not consteq(contract_sudo.access_token, access_token) ): - raise AccessError(_("Vous n'êtes pas autorisé à accéder à ce document")) + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) else: - content_base64 = contract_sudo.document - headers = [ - ("Content-Type", "application/pdf"), - ("Content-Length", len(content_base64)), - ] + status, headers, content_base64 = ( + request.env["ir.http"] + .sudo() + .binary_content( + model="acc.contract", + id=contract_sudo.id, + field="document", + default_mimetype="application/pdf", + download=False, + ) + ) + content = base64.b64decode(content_base64) + headers = http.set_safe_image_headers(headers, content) + response = request.make_response(content, headers) + response.status_code = status - request.make_response(content_base64, headers=headers) + return response diff --git a/models/acc_account.py b/models/acc_account.py index 2db658470bd329a30dac8145bea0f64570217b1a..aa3abed433f6c6f91fe82c054e169e80ebda3f5c 100644 --- a/models/acc_account.py +++ b/models/acc_account.py @@ -141,7 +141,8 @@ class AccAccount(models.Model): move.access_url = "/invoice/%s" % (move.id) def _get_report_base_filename(self): - return "Facture" + self.ensure_one() + return "Facture %s" % (self.name,) @api.depends( "line_ids",