diff --git a/controllers/main.py b/controllers/main.py index ecafacfbe012fe45cccf1f456a9cf6f93f73e1e0..97b09c9d124ff1a8737bc31d86abe0c0dd7c7213 100644 --- a/controllers/main.py +++ b/controllers/main.py @@ -12,34 +12,34 @@ from odoo.addons.portal.controllers.portal import CustomerPortal class AccAccountMain(CustomerPortal): - @http.route( - ["/invoice/<int:invoice_id>"], - type="http", - auth="public", - website=True, - method=["GET"], - csrf=False, - sitemap=False, - ) - def print_invoice(self, invoice_id, access_token=None, report_type="pdf", **kw): - try: - invoice_sudo = self._document_check_access( - "acc.account", invoice_id, access_token=access_token - ) - except (AccessError, MissingError): - raise AccessError(_("Vous n'êtes pas autorisé à accéder à ce document")) - - if report_type == "pdf": - return self._show_report( - model=invoice_sudo, - report_type=report_type, - report_ref="acc_account.acc_account_invoices", - download=False, - ) - else: - return Response( - _("Aucun document n'est disponible à cette URL."), status=404 - ) + # @http.route( + # ["/invoice/<int:invoice_id>"], + # type="http", + # auth="public", + # website=True, + # method=["GET"], + # csrf=False, + # sitemap=False, + # ) + # def print_invoice(self, invoice_id, access_token=None, report_type="pdf", **kw): + # try: + # invoice_sudo = self._document_check_access( + # "acc.account", invoice_id, access_token=access_token + # ) + # except (AccessError, MissingError): + # raise AccessError(_("Vous n'êtes pas autorisé à accéder à ce document")) + # + # if report_type == "pdf": + # return self._show_report( + # model=invoice_sudo, + # report_type=report_type, + # report_ref="acc_account.acc_account_invoices", + # download=False, + # ) + # else: + # return Response( + # _("Aucun document n'est disponible à cette URL."), status=404 + # ) @http.route( ["/contract/<int:contract_id>"], @@ -82,3 +82,52 @@ class AccAccountMain(CustomerPortal): response.status_code = status return response + + @http.route( + ["/invoice/<int:invoice_id>"], + type="http", + auth="public", + website=True, + csrf=False, + sitemap=False, + ) + def print_invoice(self, invoice_id, access_token=None, **kw): + invoice = request.env["acc.account"].browse([invoice_id]) + invoice_sudo = invoice.with_user(SUPERUSER_ID).exists() + if not invoice_sudo: + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) + if ( + not access_token + or not invoice_sudo.access_token + or not consteq(invoice_sudo.access_token, access_token) + ): + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) + else: + domain = [("res_model", "=", "acc.account"), ("res_id", "=", invoice_id)] + doc_id = request.env["ir.attachment"].search(domain, limit=1) + if not doc_id: + return Response( + _("Aucun document n'est disponible à cette URL."), status=404 + ) + else: + status, headers, content_base64 = ( + request.env["ir.http"] + .sudo() + .binary_content( + model="ir.attachment", + id=doc_id.id, + field="datas", + 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 + + return response