Let donors view and download their own tax receipts from ``/my/tax-receipts``: a paginated list, a detail page with the receipt information, its invoices and the native portal chatter, and a PDF download rendered on demand through the configured ``pdf_form`` report. The PDF rendering is delegated to ``pdf_form_report`` and nothing is archived: a confirmed receipt is frozen by ``l10n_fr_tax_receipt``, so rendering it again yields the same document. Two safety nets compensate third-party behaviors: - report resolution by ``report_uuid`` (system parameter ``tax_receipt_in_portal.report_uuid``) with strict validation of report type and target model; - a blank-field guard which resolves every mapped PDF field value before rendering, because ``pdf_form_report`` swallows resolution errors and would otherwise silently serve a receipt with a blank amount. Access is enforced twice: a portal record rule (own commercial partner, confirmed/sent state only) and an explicit controller domain that also covers internal users browsing ``/my``. Tested with 17 tests (portal isolation, draft exposure, chatter data access, blank-field guard, report misconfiguration, private API contract of ``pdf_form_report``), including a mutation check proving the security tests fail when the record rule is opened.
220 lines
7.7 KiB
Plaintext
220 lines
7.7 KiB
Plaintext
# Translation of Odoo Server.
|
|
# This file contains the translation of the following modules:
|
|
# * tax_receipt_in_portal
|
|
#
|
|
msgid ""
|
|
msgstr ""
|
|
"Project-Id-Version: Odoo Server 18.0\n"
|
|
"Report-Msgid-Bugs-To: \n"
|
|
"POT-Creation-Date: 2026-10-20 21:59+0000\n"
|
|
"PO-Revision-Date: 2026-10-20 21:59+0000\n"
|
|
"Last-Translator: \n"
|
|
"Language-Team: \n"
|
|
"MIME-Version: 1.0\n"
|
|
"Content-Type: text/plain; charset=UTF-8\n"
|
|
"Content-Transfer-Encoding: \n"
|
|
"Plural-Forms: \n"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid "(unnamed)"
|
|
msgstr "(sans nom)"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid ""
|
|
"<i class=\"fa fa-download me-1\" role=\"img\"/>\n"
|
|
" <span>PDF</span>"
|
|
msgstr ""
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid ""
|
|
"<i class=\"fa fa-download me-1\" role=\"img\"/>\n"
|
|
" <span>Download PDF</span>"
|
|
msgstr ""
|
|
"<i class=\"fa fa-download me-1\" role=\"img\"/>\n"
|
|
" <span>Télécharger le PDF</span>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Amount</strong>"
|
|
msgstr "<strong>Montant</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Communication</strong>"
|
|
msgstr "<strong>Communication</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Donor:</strong>"
|
|
msgstr "<strong>Donateur :</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>In words</strong>"
|
|
msgstr "<strong>En lettres</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Invoices</strong>"
|
|
msgstr "<strong>Factures</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Last Payment Date</strong>"
|
|
msgstr "<strong>Date du dernier versement</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Receipt #</strong>"
|
|
msgstr "<strong>N° de reçu</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Status</strong>"
|
|
msgstr "<strong>État</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "<strong>Year</strong>"
|
|
msgstr "<strong>Année</strong>"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model:ir.model.fields,field_description:tax_receipt_in_portal.field_l10n_fr_tax_receipt__access_warning
|
|
msgid "Access warning"
|
|
msgstr "Avertissement d'accès"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid "Amount"
|
|
msgstr "Montant"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model:ir.model.fields,help:tax_receipt_in_portal.field_l10n_fr_tax_receipt__access_url
|
|
msgid "Customer Portal URL"
|
|
msgstr "URL portail client"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "Invoice"
|
|
msgstr "Facture"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "Invoice Date"
|
|
msgstr "Date de facture"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid "No report found with report_uuid %(uuid)s, configured in %(param)s."
|
|
msgstr ""
|
|
"Aucun rapport trouvé avec le report_uuid %(uuid)s, configuré dans %(param)s."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid ""
|
|
"No tax receipt report configured. Set the system parameter %(param)s to the "
|
|
"report_uuid of the PDF Form report that renders tax receipts."
|
|
msgstr ""
|
|
"Aucun rapport de reçu fiscal configuré. Renseignez le paramètre système "
|
|
"%(param)s avec le report_uuid du rapport PDF Form qui génère les reçus "
|
|
"fiscaux."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model:ir.model.fields,field_description:tax_receipt_in_portal.field_l10n_fr_tax_receipt__access_url
|
|
msgid "Portal Access URL"
|
|
msgstr "URL d'accès portail"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid "Receipt #"
|
|
msgstr "N° de reçu"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid ""
|
|
"Report %(name)s is of type %(actual)s, but tax receipts require a "
|
|
"%(expected)s report."
|
|
msgstr ""
|
|
"Le rapport %(name)s est de type %(actual)s, alors que les reçus fiscaux "
|
|
"nécessitent un rapport %(expected)s."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid ""
|
|
"Report %(name)s targets model %(actual)s, but tax receipts require a report "
|
|
"on %(expected)s."
|
|
msgstr ""
|
|
"Le rapport %(name)s cible le modèle %(actual)s, alors que les reçus fiscaux "
|
|
"nécessitent un rapport sur %(expected)s."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model:ir.model.fields,field_description:tax_receipt_in_portal.field_l10n_fr_tax_receipt__access_token
|
|
msgid "Security Token"
|
|
msgstr "Jeton de sécurité"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "Tax Receipt -"
|
|
msgstr "Reçu fiscal -"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_breadcrumbs_tax_receipt
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_home_tax_receipt
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid "Tax Receipts"
|
|
msgstr "Reçus fiscaux"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model:ir.model,name:tax_receipt_in_portal.model_l10n_fr_tax_receipt
|
|
msgid "Tax receipt"
|
|
msgstr "Reçu fiscal"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid ""
|
|
"Tax receipt %(receipt)s cannot be rendered: the PDF field(s) %(fields)s "
|
|
"resolve to an empty value. Check the field mapping of report %(report)s."
|
|
msgstr ""
|
|
"Le reçu fiscal %(receipt)s ne peut pas être généré : le ou les champs PDF "
|
|
"%(fields)s donnent une valeur vide. Vérifiez le mappage des champs du "
|
|
"rapport %(report)s."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#. odoo-python
|
|
#: code:addons/tax_receipt_in_portal/models/l10n_fr_tax_receipt.py:0
|
|
msgid ""
|
|
"Tax receipt %(receipt)s is in state %(state)s and cannot be rendered. Only "
|
|
"%(allowed)s receipts can."
|
|
msgstr ""
|
|
"Le reçu fiscal %(receipt)s est à l'état %(state)s et ne peut pas être "
|
|
"généré. Seuls les reçus %(allowed)s peuvent l'être."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid "There is currently no tax receipt for your account."
|
|
msgstr "Aucun reçu fiscal n'est actuellement disponible pour votre compte."
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_tax_receipt_page
|
|
msgid "Total"
|
|
msgstr "Total"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_home_tax_receipt
|
|
msgid "View and download your yearly donation receipts"
|
|
msgstr "Consultez et téléchargez vos reçus fiscaux annuels"
|
|
|
|
#. module: tax_receipt_in_portal
|
|
#: model_terms:ir.ui.view,arch_db:tax_receipt_in_portal.portal_my_tax_receipts
|
|
msgid "Year"
|
|
msgstr "Année"
|