Repository: OCA/donation (language: python)

Issue:
Preparing a big reorganisation of the code for v9
For v9, I'm preparing a big re-organisation of the code of the donation project. Let me explain the idea and what I plan to do.

**Main idea**

The donation module is based on dedicated objects donation and donation.line ; so a donation is not related to a sale order nor an invoice. There are several advantages for this approach:
- the user can encode both the donation and the related payment in a single form, so it's fast and easy.
- we can generate an accounting entry that go directly from the bank account to the revenue account, without going through a receivable account, which reduces the number of accounting entries and avoids reconciliation.
- the donation module only depends on the account module

In one of my new projects, I need to support:
- online donation paid by credit card
- mix of regular products (T-shirt, with VAT) and donations in the same order ; the whole order is paid by a single credit card transaction

For this, I need to support donations inside a sale.order (for the online shop, the basket is a draft sale.order in Odoo). So it is quite different from the current implementation and it's not easy to have those 2 implementations "compatible".

In fact, I think it is the same kind of problem between the "sale" module that provide the sale.order/sale.order.line objects and the "point_of_sale" module that provide the pos.order/pos.order.line objects. The sale.order and pos.order objects are technically independant but they are both related to the sale of goods to a customer. Why did the point_of_sale module created a dedicated object "pos.order" instead of using the "sale.order" object ? I guess it was for simplicity reasons: they wanted to have an object that could handle sale+payment+delivery at the same time (whereas the sale.order object only handles the sale and doesn't directly handle the payment and delivery).

So I plan to make this project evolve to the same kind of approach:
1) First solution: the donation/donation.line objects will be used when you have donation+payment at the same time (equivalent to the "point_of_sale"), because it is very simple and we can have a journal item that go directly from the bank account to the revenue account (no reconciliation because we don't use a receivable account).
2) Second solution: the sale.order/sale.order.line object will be used when you have a mix of products and donations in the same transaction and/or when you want to have donations in an online shop. In this solution, an invoice is generated so there are 2 journal items: one from the receivable account to the income account and a second one from the bank account to the receivable account and it require a reconciliation in the receivable account.
You should be able to use only the first solution or only the second solution... or use both ! But, if you use both, you will still have the constraints linked to the fact that donation.line and sale.order.line are different objects. The main difficulty will be to be able to handle annual tax receipts in the scenario where you use the 2 solutions.

**Proposed implementation**

So here are my plans for the code base of this project for v9:
- create a new module "donation_base" that will have the properties on the product object
- create a new module "donation_sale" that will depend on donation_base
- the "donation" module will depend on "donation_base"

I know that this change will introduce more modules and more complexity and I don't want to make this project too complex, so I propose the following simplification: the handling of tax receipts will not be handled in a separate module any more ; the handling of tax receipts will be made in the base module (the donation.tax.receipt object will be defined in the donation_base module). For associations that receive donations but are not allowed to generate tax receipts, the drawback is that they will have menu entries and object fields that they don't need ; so I plan to create a group "Donation Tax Receipt" and you will have to be in that group to see all tax-receipt related info (just like the group "Analytic Accounting").

Please give your feedback on this new idea NOW, because I'm starting the development on this new implementation tomorrow ! :)



Discussion / hints:

Fix patch:
diff --git a/donation/README.rst b/donation/README.rst
new file mode 100644
index 000000000..4ea140a11
--- /dev/null
+++ b/donation/README.rst
@@ -0,0 +1,120 @@
+========
+Donation
+========
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+    :target: https://odoo-community.org/page/development-status
+    :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+    :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github
+    :target: https://github.com/OCA/donation/tree/14.0/donation
+    :alt: OCA/donation
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/donation-14-0/donation-14-0-donation
+    :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+    :target: https://runbot.odoo-community.org/runbot/180/14.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5| 
+
+This module handles donations by cash, check or by credit transfer and generate the corresponding journal entries and tax receipts. Before Odoo v14, support for donations by credit transfer was added by a separate module *donation_bank_statement*.
+
+This module will assist you in writing a thanks letter (before Odoo v14, this feature was added by a separate module *donation_thanks*).
+
+This module also supports in-kind donations (in-kind donations don't generate any accounting entry but can generate a tax receipt).
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Configuration
+=============
+
+To configure this module, you need to:
+
+ * create donation products
+ * make sure you have an inbound payment mode for each payment mode used to receive donations. This payment mode must be configured with *Link to Bank Account* set to *Fixed* and with the donation option active.
+ * if you wish to have a control amount on the donation, add the users to the group *Donation Check Total*
+
+If you receive donations via credit transfer, you must also:
+
+* in the configuration page *Invoicing > Configuration > Settings*, in the *Donations* section, select the product that will be used for donations by credit transfer.
+* on the bank journals corresponding to the bank accounts on which you receive donations by credit transfer, in the *Payments Configuration* tab, select the *Donation by credit transfer account*. This account must allow reconciliation.
+* Make sure that the accountant that processes bank statements has *User* access level or higher on the *Donation* application.
+
+Usage
+=====
+
+This module handles donations by cash, check or by credit transfer:
+
+* for donation by cash or check, you should first create a new donation and validate it. Then, if you have the module *account_check_deposit* from the project `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools>`_, you can create a check deposit.
+* for a donation by credit transfer, the process in inverted: first, import your bank statement file and process it. When you process a statement line that correspond to a donation by credit transfer, make sure that the partner is the good one and, in the *Manual Operations* tab, set the *Donation by credit transfer account* (configured on the corresponding bank journal) as counterpart. When you close the bank statement, Odoo will generate a draft donation for each statement line identified as a donation by credit transfer. Then you should verify and validate these draft donations.
+
+When you validate a donation:
+
+* it will create a journal entry that goes directly from the revenue account to the payment account without going through a receivable account.
+* if the tax receipt option of the donor is configured as *For Each Donation* and the product of the donation line is eligible to a tax receipt, it will generate the tax receipt.
+
+To have some statistics about the donations, go to the menu Donation > Reporting > Donations Analysis.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/donation/issues>`_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback <https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Barroux Abbey
+* Akretion
+
+Contributors
+~~~~~~~~~~~~
+
+* Brother Bernard <informatique - at - barroux.org>
+* Brother Irénée (Barroux Abbey)
+* Alexis de Lattre <alexis.delattre@akretion.com>
+* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
+* Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
+    :target: https://github.com/alexis-via
+    :alt: alexis-via
+
+Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
+
+|maintainer-alexis-via| 
+
+This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/14.0/donation>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/donation/__init__.py b/donation/__init__.py
new file mode 100644
index 000000000..7afd6210b
--- /dev/null
+++ b/donation/__init__.py
@@ -0,0 +1,4 @@
+from . import models
+from . import report
+from . import wizard
+from .post_install import update_account_payment_mode
diff --git a/donation/__manifest__.py b/donation/__manifest__.py
new file mode 100644
index 000000000..aae94a96d
--- /dev/null
+++ b/donation/__manifest__.py
@@ -0,0 +1,37 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+    "name": "Donation",
+    "version": "16.0.1.0.0",
+    "category": "Accounting",
+    "license": "AGPL-3",
+    "summary": "Manage donations",
+    "author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
+    "maintainers": ["alexis-via"],
+    "website": "https://github.com/OCA/donation",
+    "depends": ["donation_base", "account_payment_mode"],
+    "data": [
+        "security/donation_security.xml",
+        "security/ir.model.access.csv",
+        "wizard/tax_receipt_option_switch_view.xml",
+        "wizard/donation_validate_view.xml",
+        "views/donation_tax_receipt.xml",
+        "views/donation.xml",
+        "wizard/res_config_settings.xml",
+        "data/donation_sequence.xml",
+        "views/account_payment_mode.xml",
+        #        "views/account_bank_statement.xml",
+        "views/donation_campaign.xml",
+        "views/donation_thanks_template.xml",
+        "views/res_users.xml",
+        "views/res_partner.xml",
+        "report/donation_report_view.xml",
+        "report/donation_thanks_view.xml",
+        "report/donation_thanks_report.xml",
+    ],
+    "post_init_hook": "update_account_payment_mode",
+    "demo": ["demo/donation_demo.xml"],
+    "installable": True,
+}
diff --git a/donation/data/donation_sequence.xml b/donation/data/donation_sequence.xml
new file mode 100644
index 000000000..37ab9ea2a
--- /dev/null
+++ b/donation/data/donation_sequence.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo noupdate="1">
+
+
+<record id="donation_seq" model="ir.sequence">
+    <field name="name">Donation</field>
+    <field name="code">donation.donation</field>
+    <field name="prefix">DON-%(year)s-</field>
+    <field name="padding">4</field>
+    <field name="use_date_range" eval="True" />
+    <field name="company_id" eval="False" />
+</record>
+
+
+</odoo>
diff --git a/donation/demo/donation_demo.xml b/donation/demo/donation_demo.xml
new file mode 100644
index 000000000..4196cc36b
--- /dev/null
+++ b/donation/demo/donation_demo.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo noupdate="1">
+    <record id="quest_origin" model="donation.campaign">
+        <field name="code">Q1</field>
+        <field name="name">Quest Christmas 2015</field>
+    </record>
+    <record id="prospecting_origin" model="donation.campaign">
+        <field name="code">P1</field>
+        <field name="name">Prospecting 2016</field>
+    </record>
+    <record id="catalog_origin" model="donation.campaign">
+        <field name="code">C1</field>
+        <field name="name">Catalog Q1 2016</field>
+    </record>
+    <record id="base.user_demo" model="res.users">
+        <field name="groups_id" eval="[(4, ref('group_donation_user'))]" />
+    </record>
+    <record id="base.main_company" model="res.company">
+        <field
+            name="donation_credit_transfer_product_id"
+            ref="donation_base.product_product_donation"
+        />
+    </record>
+
+</odoo>
diff --git a/donation/i18n/de.po b/donation/i18n/de.po
new file mode 100644
index 000000000..3aa3336a9
--- /dev/null
+++ b/donation/i18n/de.po
@@ -0,0 +1,1285 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2019-01-26 15:41+0000\n"
+"Last-Translator: kempleton <kimdoelling@gmail.com>\n"
+"Language-Team: none\n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.3\n"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_count
+msgid "# of Donations"
+msgstr "# an Spenden"
+
+#. module: donation
+#: model:ir.actions.report,print_report_name:donation.report_thanks
+msgid ""
+"'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-"
+"draft' or '')"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_campaign_code_company_uniq
+msgid "A campaign with the same code already exists!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr ""
+"Eine abgebrochene Spende sollte nicht mit einer Spendenbescheinigung "
+"verknüpft sein"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to an account move"
+msgstr ""
+"Abgebrochene Spenden sollten nicht mit einer Kontobewegung verknüpft sein"
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_donation_bank_statement_line_uniq
+msgid "A donation already exists for this bank statement line."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__move_id
+msgid "Account Move"
+msgstr "Kontobewegung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__active
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__active
+msgid "Active"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__amount_company_currency
+msgid "Amount"
+msgstr "Betrag"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total
+msgid "Amount Total"
+msgstr "Gesamtbetrag"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total_company_currency
+msgid "Amount Total in Company Currency"
+msgstr "Gesamtbetrag in Unternehmenswährung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount_company_currency
+msgid "Amount in Company Currency"
+msgstr "Betrag in Unternehmenswährung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__analytic_account_id
+msgid "Analytic Account"
+msgstr "Kostenstelle"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__annual
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__annual
+msgid "Annual Tax Receipt"
+msgstr "Sammelspendenbescheinigung"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Archived"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Zurücksetzen auf Entwurf"
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_id
+msgid "Bank Statement"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Kampagne"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__cancel
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Abgebrochen"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it doesn't have any lines!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it is not in draft state."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because the total amount is 0!"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_categ_id
+msgid "Category of Product"
+msgstr "Produktkategorie"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Change"
+msgstr "Ändern"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_tax_receipt_option_switch_action
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Change Tax Receipt Option"
+msgstr "Ändere Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__check_total
+msgid "Check Amount"
+msgstr "Überprüfe Betrag"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__code
+msgid "Code"
+msgstr "Code"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_campaign
+msgid "Code attributed for a Donation Campaign"
+msgstr "Code für eine Spendenkampagne"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__company_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Company"
+msgstr "Unternehmen"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_currency_id
+msgid "Company Currency"
+msgstr "Unternehmenswährung"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_config_settings
+msgid "Config Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_config_menu
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__country_id
+msgid "Country"
+msgstr "Land"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.tax_receipt_annual_create_menu
+msgid "Create Annual Receipts"
+msgstr "Erstelle Sammelspendenbescheinigungen"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__currency_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Currency"
+msgstr "Währung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_campaign_id
+msgid "Current Donation Campaign"
+msgstr "Aktuelle Spendenkampagne"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_payment_mode_id
+msgid "Current Donation Payment Mode"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Datum"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__display_name
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__display_name
+#: model:ir.model.fields,field_description:donation.field_account_journal__display_name
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_donation__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_line__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_report__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate__display_name
+#: model:ir.model.fields,field_description:donation.field_res_company__display_name
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:donation.field_res_partner__display_name
+#: model:ir.model.fields,field_description:donation.field_res_users__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_donation
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__donation_id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__donation_id
+#: model:ir.module.category,name:donation.module_category_donation
+#: model:ir.ui.menu,name:donation.donation_top_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.res_config_settings_donation
+msgid "Donation"
+msgstr "Spende"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but its payment mode '%s' "
+"doesn't have a fixed link to a bank journal. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the donation by credit "
+"transfer account '%s' configured on the journal '%s' linked to its payment "
+"mode '%s' is not reconciliable. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the journal '%s' linked "
+"to its payment mode '%s' doesn't have a donation by credit transfer account. "
+"This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Donation <a href=# data-oe-model=donation.donation data-oe-id=%d>%s</a> "
+"dated %s created for partner <a href=# data-oe-model=res.partner data-oe-id="
+"%d>%s</a>."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__campaign_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__campaign_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+msgid "Donation Campaign"
+msgstr "Spendenkampagne"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_campaign_action
+#: model:ir.ui.menu,name:donation.donation_campaign_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_tree
+msgid "Donation Campaigns"
+msgstr "Spendenkampagnen"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_check_total
+msgid "Donation Check Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__donation_date
+#: model:ir.model.fields,field_description:donation.field_donation_report__donation_date
+msgid "Donation Date"
+msgstr "Spendendatum"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Donation Line"
+msgstr "Spendenzeile"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_line
+#: model:ir.model.fields,field_description:donation.field_donation_donation__line_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Donation Lines"
+msgstr "Spendenzeile"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__number
+msgid "Donation Number"
+msgstr "Spendennummer"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr "Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_thanks_template
+msgid "Donation Thanks Letter Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+msgid "Donation Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_tree
+msgid "Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_journal__donation_account_id
+msgid "Donation by Credit Transfer Account"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid "Donation payment mode '%s' is not an inbound payment mode."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid ""
+"Donation payment mode '%s' must be configured with 'Link to Bank Account' "
+"set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_action
+#: model:ir.actions.act_window,name:donation.partner_donation_action
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_ids
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_ids
+#: model:ir.ui.menu,name:donation.donation_menu
+#: model:ir.ui.menu,name:donation.donation_title_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_form
+#: model_terms:ir.ui.view,arch_db:donation.view_partner_form
+msgid "Donations"
+msgstr "Spenden"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_report_action
+#: model:ir.model,name:donation.model_donation_report
+#: model:ir.ui.menu,name:donation.donation_report_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Donations Analysis"
+msgstr "Spendenanalyse"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_line_action
+msgid "Donations Lines"
+msgstr "Spendenzeilen"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__done
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Done"
+msgstr "Erledigt"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__partner_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Donor"
+msgstr "Spender"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Spender"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__draft
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Entwurf"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__tax_receipt_total
+msgid "Eligible Tax Receipt Sub-total in Company Currency"
+msgstr "berechtigte Zwischensumme Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_ok
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr "Geeignet für Spendenbescheinigung"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Error:"
+msgstr "Fehler:"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Failed to get account for donation line with product '%s'."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__each
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__each
+msgid "For Each Donation"
+msgstr "Für jede Spende"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr "komplette Sachspende: keine Kontobewegung generiert"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Gruppieren nach"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__id
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__id
+#: model:ir.model.fields,field_description:donation.field_account_journal__id
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__id
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__id
+#: model:ir.model.fields,field_description:donation.field_donation_line__id
+#: model:ir.model.fields,field_description:donation.field_donation_report__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__id
+#: model:ir.model.fields,field_description:donation.field_donation_validate__id
+#: model:ir.model.fields,field_description:donation.field_res_company__id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__id
+#: model:ir.model.fields,field_description:donation.field_res_partner__id
+#: model:ir.model.fields,field_description:donation.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_payment_mode__donation
+msgid "If enabled, this payment mode will be available on donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__image
+msgid "Image"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__in_kind
+#: model:ir.model.fields,field_description:donation.field_donation_report__in_kind
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "In Kind"
+msgstr "Sachspende"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr "Ist geeignet für Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Jurnal"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement____last_update
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line____last_update
+#: model:ir.model.fields,field_description:donation.field_account_journal____last_update
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_campaign____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_donation____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_line____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_report____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate____last_update
+#: model:ir.model.fields,field_description:donation.field_res_company____last_update
+#: model:ir.model.fields,field_description:donation.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:donation.field_res_partner____last_update
+#: model:ir.model.fields,field_description:donation.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert von"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: donation
+#: model:ir.module.category,description:donation.module_category_donation
+msgid "Manage donations"
+msgstr "Verwalte Spenden"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_manager
+msgid "Manager"
+msgstr "Manager"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark all selected donation as Thanks Printed?"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark as Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Missing Outstanding Receipts Account on journal '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing Product for Donations via Credit Transfer on company '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Missing inbound payment mode linked to the bank journal '%s' configured with "
+"'Link to Bank Account' set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing partner on bank statement line '%s' dated %s with amount %s."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__name
+msgid "Name"
+msgstr "Name"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+msgid "Name or Code"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__none
+msgid "None"
+msgstr "Keine"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__note
+msgid "Notes"
+msgstr "Notizen"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/res_company.py:0
+#, python-format
+msgid ""
+"On the company %s, the Product for Donations via Credit Transfer (%s) is not "
+"a donation product !"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Other Information"
+msgstr "Weitere Informationen"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__commercial_partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Partner"
+msgstr "Parnter"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__country_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner Country"
+msgstr "Partner Land"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_mode_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Mode"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Payment Mode is not set on donation %s (only fully in-kind donations don't "
+"require a payment mode)."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_payment_mode
+msgid "Payment Modes"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_ref
+msgid "Payment Reference"
+msgstr "Zahlungsreferenz"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_print_menu
+msgid "Print Receipts"
+msgstr "Drucke Bescheinigung"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Print Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Produkt"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Produktkategorie"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_company__donation_credit_transfer_product_id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__donation_credit_transfer_product_id
+msgid "Product for Donations via Credit Transfer"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_product_action
+#: model:ir.ui.menu,name:donation.donation_products
+msgid "Products"
+msgstr "Produkte"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__quantity
+msgid "Quantity"
+msgstr "Menge"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__donation_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_line_form
+msgid "Related Donations"
+msgstr "Verbundene Spenden"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Speicher Default Werte"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Search Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Search Donations"
+msgstr "Suche Spenden"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_line__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__sequence
+msgid "Sequence"
+msgstr "Reihenfolge"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_settings_action
+#: model:ir.ui.menu,name:donation.donation_settings_menu
+msgid "Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_line_id
+msgid "Source Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_line__tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr ""
+"Spezifizieren Sie hier, ob dieses Produkt für die Erstellung einer "
+"Spendenbescheinigung geeignet ist"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__start_date
+msgid "Start Date"
+msgstr "Anfangsdatum"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__state
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "Status"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt_option_switch
+msgid "Switch Donation Tax Receipt Option"
+msgstr "Ändere Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Tax Receipt"
+msgstr "Steuerbeleg"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_total
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_amount
+msgid "Tax Receipt Eligible Amount"
+msgstr "Berechtigter Spendenbescheinigungsbetrag"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_option
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__new_tax_receipt_option
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Tax Receipt Option"
+msgstr "Spendenbescheinigung"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr "Steuerbeleg für Spenden"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_title_menu
+msgid "Tax Receipts"
+msgstr "Spendenbescheinigungen"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__text
+msgid "Text"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.report,name:donation.report_thanks
+msgid "Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_thanks_template_action
+#: model:ir.ui.menu,name:donation.donation_thanks_template_menu
+msgid "Thanks Letter Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_printed
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_printed
+msgid "Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_template_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_template_id
+msgid "Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Thanks to Print"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The amount of donation %s (%s) is different from the sum of the donation "
+"lines (%s)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The date of donation %s should be today or in the past, not in the future!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "The donation '%s' is in Done state, so you cannot delete it."
+msgstr ""
+"Die Spende '%s1 ist im Status 'Erledigt' und kann daher nicht gelöscht "
+"werden."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to an account move, so you cannot delete it."
+msgstr ""
+"Die Spende '%s1 ist mit einer Kontobewegung verknüpft und kann daher nicht "
+"gelöscht werden."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to the tax receipt %s, so you cannot delete it."
+msgstr ""
+"Die Spende '%s1' ist mit dem Steuerbeleg %s2 und kann daher nicht gelöscht "
+"werden."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The payment mode '%s' selected on donation %s is not a donation payment mode."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__thanks_printed
+msgid ""
+"This field automatically becomes active when the thanks letter has been "
+"printed."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "This wizard will validate all the draft donations selected."
+msgstr "Dieser Assistent bestätigt alle ausgewählten Spendenentwürfe."
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr "Gesamt"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_journal__donation_account_id
+msgid ""
+"Transfer account for donations received by credit transfer. Leave empty if "
+"you don't receive donations on this bank account."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr "Wahr"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__unit_price
+msgid "Unit Price"
+msgstr "Preis je Mengeneinheit"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Update"
+msgstr "Aktualisieren"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_user
+msgid "User"
+msgstr "Nutzer"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_users
+msgid "Users"
+msgstr "Nutzer"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate"
+msgstr "Bestätigen"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate Donations"
+msgstr "Bestätige Spenden"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_validate_action
+msgid "Validate Draft Donations"
+msgstr "Bestätige Spenden Entwürfe"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_viewer
+msgid "Viewer"
+msgstr "Betrachter"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"You cannot cancel this donation because it is linked to the tax receipt %s. "
+"You should first delete this tax receipt (but it may not be legally allowed)."
+msgstr ""
+"Sie können die Spende nicht abbrechen, weil sie mit dem Steuerbeleg  %s1 "
+"verbunden ist. Sie müssen zuerst diesen Steuerbeleg löschen (aber dies mag "
+"rechtlich nicht erlaubt sein)."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "You cannot change the Tax Receipt Option when it is Annual."
+msgstr ""
+"Sie können nicht die Steuerbeleg Option ändern, wenn diese jährlich ist."
+
+#~ msgid "Cancelled Donation of %s"
+#~ msgstr "Abgebrochene Spende von %s1"
+
+#~ msgid ""
+#~ "Cannot validate the donation of %s because it doesn't have any lines!"
+#~ msgstr ""
+#~ "Spende %s1 kann nicht bestätigt werden, da keine Zeilen vorhanden sind!"
+
+#~ msgid "Cannot validate the donation of %s because it is not in draft state."
+#~ msgstr ""
+#~ "Die Spende %s1 kann nicht bestätigt werden, da sie sich im Entwurf-Status "
+#~ "befindet."
+
+#~ msgid "Cannot validate the donation of %s because the total amount is 0 !"
+#~ msgstr ""
+#~ "Die Spende %s1 kann nicht bestätigt werden, da der Gesamtbetrag 0 ist!"
+
+#~ msgid "Current Donation Payment Method"
+#~ msgstr "Aktuelle Zahlungsmethode"
+
+#~ msgid "Donation Payment Method"
+#~ msgstr "Zahlungsmethode"
+
+#~ msgid "Donation of %s"
+#~ msgstr "Spende von %s"
+
+#~ msgid "Draft Donation of %s"
+#~ msgstr "Spendenentwurf von %s1"
+
+#~ msgid "Missing Default Debit Account on journal '%s'."
+#~ msgstr "Fehlender Default Passivsaldo im '%s1'-Jurnal."
+
+#~ msgid "Payment Method"
+#~ msgstr "Zahlungsmethode"
+
+#~ msgid "Reports"
+#~ msgstr "Berichte"
+
+#~ msgid ""
+#~ "The amount of the donation of %s (%s) is different from the sum of the "
+#~ "donation lines (%s)."
+#~ msgstr ""
+#~ "Der Betrag der Spende von %s1 (%s2) weicht von der Summe der "
+#~ "Spendenzeilen (%s3) ab."
+
+#~ msgid ""
+#~ "The date of the donation of %s should be today or in the past, not in the "
+#~ "future!"
+#~ msgstr "Das Datum der Spende von %s darf nicht in der Zukunft liegen!"
diff --git a/donation/i18n/donation.pot b/donation/i18n/donation.pot
new file mode 100644
index 000000000..2c97adf15
--- /dev/null
+++ b/donation/i18n/donation.pot
@@ -0,0 +1,1222 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \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: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_count
+msgid "# of Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.report,print_report_name:donation.report_thanks
+msgid ""
+"'donation_thanks-%s%s' % (object.number, object.state == 'draft' and "
+"'-draft' or '')"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_campaign_code_company_uniq
+msgid "A campaign with the same code already exists!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to an account move"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_donation_bank_statement_line_uniq
+msgid "A donation already exists for this bank statement line."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__move_id
+msgid "Account Move"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__active
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__active
+msgid "Active"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__amount_company_currency
+msgid "Amount"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total
+msgid "Amount Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total_company_currency
+msgid "Amount Total in Company Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount_company_currency
+msgid "Amount in Company Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__analytic_account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__annual
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__annual
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Archived"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_id
+msgid "Bank Statement"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__cancel
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it doesn't have any lines!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it is not in draft state."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because the total amount is 0!"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_categ_id
+msgid "Category of Product"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Change"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_tax_receipt_option_switch_action
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Change Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__check_total
+msgid "Check Amount"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__code
+msgid "Code"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_campaign
+msgid "Code attributed for a Donation Campaign"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__company_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Company"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_currency_id
+msgid "Company Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_config_settings
+msgid "Config Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_config_menu
+msgid "Configuration"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__country_id
+msgid "Country"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.tax_receipt_annual_create_menu
+msgid "Create Annual Receipts"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__currency_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_campaign_id
+msgid "Current Donation Campaign"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_payment_mode_id
+msgid "Current Donation Payment Mode"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__display_name
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__display_name
+#: model:ir.model.fields,field_description:donation.field_account_journal__display_name
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_donation__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_line__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_report__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate__display_name
+#: model:ir.model.fields,field_description:donation.field_res_company__display_name
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:donation.field_res_partner__display_name
+#: model:ir.model.fields,field_description:donation.field_res_users__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_donation
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__donation_id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__donation_id
+#: model:ir.module.category,name:donation.module_category_donation
+#: model:ir.ui.menu,name:donation.donation_top_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.res_config_settings_donation
+msgid "Donation"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but its payment mode '%s' "
+"doesn't have a fixed link to a bank journal. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the donation by credit "
+"transfer account '%s' configured on the journal '%s' linked to its payment "
+"mode '%s' is not reconciliable. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the journal '%s' linked "
+"to its payment mode '%s' doesn't have a donation by credit transfer account."
+" This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Donation <a href=# data-oe-model=donation.donation data-oe-id=%d>%s</a> "
+"dated %s created for partner <a href=# data-oe-model=res.partner data-oe-"
+"id=%d>%s</a>."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__campaign_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__campaign_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+msgid "Donation Campaign"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_campaign_action
+#: model:ir.ui.menu,name:donation.donation_campaign_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_tree
+msgid "Donation Campaigns"
+msgstr ""
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_check_total
+msgid "Donation Check Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__donation_date
+#: model:ir.model.fields,field_description:donation.field_donation_report__donation_date
+msgid "Donation Date"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Donation Line"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_line
+#: model:ir.model.fields,field_description:donation.field_donation_donation__line_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Donation Lines"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__number
+msgid "Donation Number"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_thanks_template
+msgid "Donation Thanks Letter Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+msgid "Donation Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_tree
+msgid "Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_journal__donation_account_id
+msgid "Donation by Credit Transfer Account"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid "Donation payment mode '%s' is not an inbound payment mode."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid ""
+"Donation payment mode '%s' must be configured with 'Link to Bank Account' "
+"set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_action
+#: model:ir.actions.act_window,name:donation.partner_donation_action
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_ids
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_ids
+#: model:ir.ui.menu,name:donation.donation_menu
+#: model:ir.ui.menu,name:donation.donation_title_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_form
+#: model_terms:ir.ui.view,arch_db:donation.view_partner_form
+msgid "Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_report_action
+#: model:ir.model,name:donation.model_donation_report
+#: model:ir.ui.menu,name:donation.donation_report_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Donations Analysis"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_line_action
+msgid "Donations Lines"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__done
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Done"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__partner_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__draft
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__tax_receipt_total
+msgid "Eligible Tax Receipt Sub-total in Company Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_ok
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Error:"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Failed to get account for donation line with product '%s'."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__each
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__each
+msgid "For Each Donation"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__id
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__id
+#: model:ir.model.fields,field_description:donation.field_account_journal__id
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__id
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__id
+#: model:ir.model.fields,field_description:donation.field_donation_line__id
+#: model:ir.model.fields,field_description:donation.field_donation_report__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__id
+#: model:ir.model.fields,field_description:donation.field_donation_validate__id
+#: model:ir.model.fields,field_description:donation.field_res_company__id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__id
+#: model:ir.model.fields,field_description:donation.field_res_partner__id
+#: model:ir.model.fields,field_description:donation.field_res_users__id
+msgid "ID"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_payment_mode__donation
+msgid "If enabled, this payment mode will be available on donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__image
+msgid "Image"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__in_kind
+#: model:ir.model.fields,field_description:donation.field_donation_report__in_kind
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "In Kind"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_journal
+msgid "Journal"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement____last_update
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line____last_update
+#: model:ir.model.fields,field_description:donation.field_account_journal____last_update
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_campaign____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_donation____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_line____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_report____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate____last_update
+#: model:ir.model.fields,field_description:donation.field_res_company____last_update
+#: model:ir.model.fields,field_description:donation.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:donation.field_res_partner____last_update
+#: model:ir.model.fields,field_description:donation.field_res_users____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: donation
+#: model:ir.module.category,description:donation.module_category_donation
+msgid "Manage donations"
+msgstr ""
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_manager
+msgid "Manager"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark all selected donation as Thanks Printed?"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark as Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Missing Outstanding Receipts Account on journal '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing Product for Donations via Credit Transfer on company '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Missing inbound payment mode linked to the bank journal '%s' configured with"
+" 'Link to Bank Account' set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing partner on bank statement line '%s' dated %s with amount %s."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__name
+msgid "Name"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+msgid "Name or Code"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#: code:addons/donation/models/donation.py:0
+#: code:addons/donation/models/donation.py:0
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__none
+msgid "None"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__note
+msgid "Notes"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/res_company.py:0
+#, python-format
+msgid ""
+"On the company %s, the Product for Donations via Credit Transfer (%s) is not"
+" a donation product !"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Other Information"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__commercial_partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Partner"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__country_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner Country"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_mode_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Mode"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Payment Mode is not set on donation %s (only fully in-kind donations don't "
+"require a payment mode)."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_payment_mode
+msgid "Payment Modes"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_ref
+msgid "Payment Reference"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_print_menu
+msgid "Print Receipts"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Print Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_company__donation_credit_transfer_product_id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__donation_credit_transfer_product_id
+msgid "Product for Donations via Credit Transfer"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_product_action
+#: model:ir.ui.menu,name:donation.donation_products
+msgid "Products"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__quantity
+msgid "Quantity"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__donation_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_line_form
+msgid "Related Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Search Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Search Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_line__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__sequence
+msgid "Sequence"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_settings_action
+#: model:ir.ui.menu,name:donation.donation_settings_menu
+msgid "Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_line_id
+msgid "Source Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_line__tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__start_date
+msgid "Start Date"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__state
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt_option_switch
+msgid "Switch Donation Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_total
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_amount
+msgid "Tax Receipt Eligible Amount"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_option
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__new_tax_receipt_option
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_title_menu
+msgid "Tax Receipts"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__text
+msgid "Text"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.report,name:donation.report_thanks
+msgid "Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_thanks_template_action
+#: model:ir.ui.menu,name:donation.donation_thanks_template_menu
+msgid "Thanks Letter Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_printed
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_printed
+msgid "Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_template_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_template_id
+msgid "Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Thanks to Print"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The amount of donation %s (%s) is different from the sum of the donation "
+"lines (%s)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The date of donation %s should be today or in the past, not in the future!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "The donation '%s' is in Done state, so you cannot delete it."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to an account move, so you cannot delete it."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to the tax receipt %s, so you cannot delete it."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The payment mode '%s' selected on donation %s is not a donation payment "
+"mode."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__thanks_printed
+msgid ""
+"This field automatically becomes active when the thanks letter has been "
+"printed."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "This wizard will validate all the draft donations selected."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_journal__donation_account_id
+msgid ""
+"Transfer account for donations received by credit transfer. Leave empty if "
+"you don't receive donations on this bank account."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__unit_price
+msgid "Unit Price"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Update"
+msgstr ""
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_user
+msgid "User"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_users
+msgid "Users"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_validate_action
+msgid "Validate Draft Donations"
+msgstr ""
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_viewer
+msgid "Viewer"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"You cannot cancel this donation because it is linked to the tax receipt %s. "
+"You should first delete this tax receipt (but it may not be legally "
+"allowed)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "You cannot change the Tax Receipt Option when it is Annual."
+msgstr ""
diff --git a/donation/i18n/es.po b/donation/i18n/es.po
new file mode 100644
index 000000000..87892a91e
--- /dev/null
+++ b/donation/i18n/es.po
@@ -0,0 +1,1285 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * donation
+#
+# Translators:
+# enjolras <yo@miguelrevilla.com>, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2018-03-11 21:44+0000\n"
+"PO-Revision-Date: 2019-12-19 18:05+0000\n"
+"Last-Translator: Enric Tobella <etobella@creublanca.es>\n"
+"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 3.9.1\n"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_count
+msgid "# of Donations"
+msgstr "# de Donativos"
+
+#. module: donation
+#: model:ir.actions.report,print_report_name:donation.report_thanks
+msgid ""
+"'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-"
+"draft' or '')"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_campaign_code_company_uniq
+msgid "A campaign with the same code already exists!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr "Una donación cancelada no se puede unir a un recibo de impuestos"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to an account move"
+msgstr "Una donación cancelada no se debe unir a un asiento contable"
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_donation_bank_statement_line_uniq
+msgid "A donation already exists for this bank statement line."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__move_id
+msgid "Account Move"
+msgstr "Asiento contable"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__active
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__active
+msgid "Active"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__amount_company_currency
+msgid "Amount"
+msgstr "Importe"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total
+msgid "Amount Total"
+msgstr "Importe total"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total_company_currency
+msgid "Amount Total in Company Currency"
+msgstr "Importe total en moneda de la compañía"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount_company_currency
+msgid "Amount in Company Currency"
+msgstr "Importe en moneda de la Compañía"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__analytic_account_id
+msgid "Analytic Account"
+msgstr "Cuenta analítica"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__annual
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__annual
+msgid "Annual Tax Receipt"
+msgstr "Recibo de impuestos anual"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Archived"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Devolver a Borrador"
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_id
+msgid "Bank Statement"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Campaña"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__cancel
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it doesn't have any lines!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it is not in draft state."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because the total amount is 0!"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_categ_id
+msgid "Category of Product"
+msgstr "Categoría de producto"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Change"
+msgstr "Cambiar"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_tax_receipt_option_switch_action
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Change Tax Receipt Option"
+msgstr "Cambiar la opción del recibo de impuestos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__check_total
+msgid "Check Amount"
+msgstr "Comprobar importe"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__code
+msgid "Code"
+msgstr "Código"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_campaign
+msgid "Code attributed for a Donation Campaign"
+msgstr "Código asignado a una campaña de donativos"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__company_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Company"
+msgstr "Compañía"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_currency_id
+msgid "Company Currency"
+msgstr "Moneda de la Compañía"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_config_settings
+msgid "Config Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_config_menu
+msgid "Configuration"
+msgstr "Configuración"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_partner
+msgid "Contact"
+msgstr "Contacto"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__country_id
+msgid "Country"
+msgstr "País"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.tax_receipt_annual_create_menu
+msgid "Create Annual Receipts"
+msgstr "Crear recibos anuales"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__currency_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Currency"
+msgstr "Moneda"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_campaign_id
+msgid "Current Donation Campaign"
+msgstr "Campaña actual de donativos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_payment_mode_id
+msgid "Current Donation Payment Mode"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Fecha"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__display_name
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__display_name
+#: model:ir.model.fields,field_description:donation.field_account_journal__display_name
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_donation__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_line__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_report__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate__display_name
+#: model:ir.model.fields,field_description:donation.field_res_company__display_name
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:donation.field_res_partner__display_name
+#: model:ir.model.fields,field_description:donation.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_donation
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__donation_id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__donation_id
+#: model:ir.module.category,name:donation.module_category_donation
+#: model:ir.ui.menu,name:donation.donation_top_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.res_config_settings_donation
+msgid "Donation"
+msgstr "Donativo"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but its payment mode '%s' "
+"doesn't have a fixed link to a bank journal. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the donation by credit "
+"transfer account '%s' configured on the journal '%s' linked to its payment "
+"mode '%s' is not reconciliable. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the journal '%s' linked "
+"to its payment mode '%s' doesn't have a donation by credit transfer account. "
+"This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Donation <a href=# data-oe-model=donation.donation data-oe-id=%d>%s</a> "
+"dated %s created for partner <a href=# data-oe-model=res.partner data-oe-id="
+"%d>%s</a>."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__campaign_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__campaign_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+msgid "Donation Campaign"
+msgstr "Campaña de donativo"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_campaign_action
+#: model:ir.ui.menu,name:donation.donation_campaign_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_tree
+msgid "Donation Campaigns"
+msgstr "Campañas de donativos"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_check_total
+msgid "Donation Check Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__donation_date
+#: model:ir.model.fields,field_description:donation.field_donation_report__donation_date
+msgid "Donation Date"
+msgstr "Fecha de la donación"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Donation Line"
+msgstr "Línea de donativos"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_line
+#: model:ir.model.fields,field_description:donation.field_donation_donation__line_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Donation Lines"
+msgstr "Líneas de donativos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__number
+msgid "Donation Number"
+msgstr "Número de donativo"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr "Recibo de impuestos de donativo"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_thanks_template
+msgid "Donation Thanks Letter Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+msgid "Donation Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_tree
+msgid "Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_journal__donation_account_id
+msgid "Donation by Credit Transfer Account"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid "Donation payment mode '%s' is not an inbound payment mode."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid ""
+"Donation payment mode '%s' must be configured with 'Link to Bank Account' "
+"set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_action
+#: model:ir.actions.act_window,name:donation.partner_donation_action
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_ids
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_ids
+#: model:ir.ui.menu,name:donation.donation_menu
+#: model:ir.ui.menu,name:donation.donation_title_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_form
+#: model_terms:ir.ui.view,arch_db:donation.view_partner_form
+msgid "Donations"
+msgstr "Donativos"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_report_action
+#: model:ir.model,name:donation.model_donation_report
+#: model:ir.ui.menu,name:donation.donation_report_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Donations Analysis"
+msgstr "Análisis de donativos"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_line_action
+msgid "Donations Lines"
+msgstr "Líneas de donativos"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__done
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Done"
+msgstr "Realizado"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__partner_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Donor"
+msgstr "Donante"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Donantes"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__draft
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Borrador"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__tax_receipt_total
+msgid "Eligible Tax Receipt Sub-total in Company Currency"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_ok
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr "Elegible para un recibo de impuestos"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Error:"
+msgstr "Error:"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Failed to get account for donation line with product '%s'."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__each
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__each
+msgid "For Each Donation"
+msgstr "Por cada donación"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr "Donación completamente en especie: no se genera asiento contable"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__id
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__id
+#: model:ir.model.fields,field_description:donation.field_account_journal__id
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__id
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__id
+#: model:ir.model.fields,field_description:donation.field_donation_line__id
+#: model:ir.model.fields,field_description:donation.field_donation_report__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__id
+#: model:ir.model.fields,field_description:donation.field_donation_validate__id
+#: model:ir.model.fields,field_description:donation.field_res_company__id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__id
+#: model:ir.model.fields,field_description:donation.field_res_partner__id
+#: model:ir.model.fields,field_description:donation.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_payment_mode__donation
+msgid "If enabled, this payment mode will be available on donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__image
+msgid "Image"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__in_kind
+#: model:ir.model.fields,field_description:donation.field_donation_report__in_kind
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "In Kind"
+msgstr "En especie"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr "Es elegible para un recibo de impuestos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Diario"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement____last_update
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line____last_update
+#: model:ir.model.fields,field_description:donation.field_account_journal____last_update
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_campaign____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_donation____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_line____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_report____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate____last_update
+#: model:ir.model.fields,field_description:donation.field_res_company____last_update
+#: model:ir.model.fields,field_description:donation.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:donation.field_res_partner____last_update
+#: model:ir.model.fields,field_description:donation.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: donation
+#: model:ir.module.category,description:donation.module_category_donation
+msgid "Manage donations"
+msgstr "Gestionar donativos"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_manager
+msgid "Manager"
+msgstr "Gestor"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark all selected donation as Thanks Printed?"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark as Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Missing Outstanding Receipts Account on journal '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing Product for Donations via Credit Transfer on company '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Missing inbound payment mode linked to the bank journal '%s' configured with "
+"'Link to Bank Account' set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing partner on bank statement line '%s' dated %s with amount %s."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__name
+msgid "Name"
+msgstr "Nombre"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+msgid "Name or Code"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__none
+msgid "None"
+msgstr "Ninguno"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__note
+msgid "Notes"
+msgstr "Notas"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/res_company.py:0
+#, python-format
+msgid ""
+"On the company %s, the Product for Donations via Credit Transfer (%s) is not "
+"a donation product !"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Other Information"
+msgstr "Otra información"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__commercial_partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Partner"
+msgstr "Empresa"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__country_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner Country"
+msgstr "País de la empresa"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_mode_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Mode"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Payment Mode is not set on donation %s (only fully in-kind donations don't "
+"require a payment mode)."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_payment_mode
+msgid "Payment Modes"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_ref
+msgid "Payment Reference"
+msgstr "Referencia de pago"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_print_menu
+msgid "Print Receipts"
+msgstr "Imprimir recibos"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Print Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Producto"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Categoría de producto"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_company__donation_credit_transfer_product_id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__donation_credit_transfer_product_id
+msgid "Product for Donations via Credit Transfer"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_product_action
+#: model:ir.ui.menu,name:donation.donation_products
+msgid "Products"
+msgstr "Productos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__quantity
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__donation_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_line_form
+msgid "Related Donations"
+msgstr "Donaciones relacionadas"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Guardar valores por defecto"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Search Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Search Donations"
+msgstr "Buscar Donativos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_line__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__sequence
+msgid "Sequence"
+msgstr "Sequencia"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_settings_action
+#: model:ir.ui.menu,name:donation.donation_settings_menu
+msgid "Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_line_id
+msgid "Source Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_line__tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr "Especifica si el producto es elegible para un recibo de impuestos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__start_date
+msgid "Start Date"
+msgstr "Fecha de inicio"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__state
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "Estado"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt_option_switch
+msgid "Switch Donation Tax Receipt Option"
+msgstr "Cambiar la opción del recibo de impuestos  de donaciones"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Tax Receipt"
+msgstr "Recibo de impuestos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_total
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_amount
+msgid "Tax Receipt Eligible Amount"
+msgstr "Importe elegible para recibo de impuestos"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_option
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__new_tax_receipt_option
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Tax Receipt Option"
+msgstr "Opción de recibo de impuestos"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr "Recibo de impuestos para donaciones"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_title_menu
+msgid "Tax Receipts"
+msgstr "Recibo de donaciones"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__text
+msgid "Text"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.report,name:donation.report_thanks
+msgid "Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_thanks_template_action
+#: model:ir.ui.menu,name:donation.donation_thanks_template_menu
+msgid "Thanks Letter Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_printed
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_printed
+msgid "Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_template_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_template_id
+msgid "Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Thanks to Print"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The amount of donation %s (%s) is different from the sum of the donation "
+"lines (%s)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The date of donation %s should be today or in the past, not in the future!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "The donation '%s' is in Done state, so you cannot delete it."
+msgstr "La donación '%s' está en el estado Realizado, no puede eliminarla."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to an account move, so you cannot delete it."
+msgstr ""
+"La donación '%s' está unida a un asiento contable, así que no puede ser "
+"eliminada."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to the tax receipt %s, so you cannot delete it."
+msgstr ""
+"La donación '%s' está unida al recibo de impuestos %s, así que no puede ser "
+"eliminada."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The payment mode '%s' selected on donation %s is not a donation payment mode."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__thanks_printed
+msgid ""
+"This field automatically becomes active when the thanks letter has been "
+"printed."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "This wizard will validate all the draft donations selected."
+msgstr "El asistente validará todas las donaciones en borrador seleccionadas."
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr "Total"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_journal__donation_account_id
+msgid ""
+"Transfer account for donations received by credit transfer. Leave empty if "
+"you don't receive donations on this bank account."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr "Verdadero"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__unit_price
+msgid "Unit Price"
+msgstr "Precio unitario"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Update"
+msgstr "Actualizar"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_user
+msgid "User"
+msgstr "Usuario"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_users
+msgid "Users"
+msgstr "Usuarios"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate"
+msgstr "Validar"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate Donations"
+msgstr "Validar donativos"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_validate_action
+msgid "Validate Draft Donations"
+msgstr "Validar donativos en borrador"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_viewer
+msgid "Viewer"
+msgstr "Visualizador"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"You cannot cancel this donation because it is linked to the tax receipt %s. "
+"You should first delete this tax receipt (but it may not be legally allowed)."
+msgstr ""
+"No puede cancelar la donación por que está unida al recibo de impuestos %s. "
+"Primero debe eliminar el recibo de impuestos (aunque puede que no sea legal)."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "You cannot change the Tax Receipt Option when it is Annual."
+msgstr "No puede cambiar la opción del recibo de impuestos cuando es Anual."
+
+#~ msgid "Cancelled Donation of %s"
+#~ msgstr "Donación cancelada de %s"
+
+#~ msgid ""
+#~ "Cannot validate the donation of %s because it doesn't have any lines!"
+#~ msgstr "No se puede validar la donación de %s porque no tiene líneas!"
+
+#~ msgid "Cannot validate the donation of %s because it is not in draft state."
+#~ msgstr ""
+#~ "No se puede validar la donación de %s porque no está en estado borrador."
+
+#~ msgid "Cannot validate the donation of %s because the total amount is 0 !"
+#~ msgstr "No se puede validar la donación %s por que el importe total es 0 !"
+
+#~ msgid "Current Donation Payment Method"
+#~ msgstr "Método de pago de la donación actual"
+
+#~ msgid "Donation Payment Method"
+#~ msgstr "Método de pago del donativo"
+
+#~ msgid "Donation of %s"
+#~ msgstr "Donativo de %s"
+
+#~ msgid "Draft Donation of %s"
+#~ msgstr "Donación borrador de %s"
+
+#~ msgid "Missing Default Debit Account on journal '%s'."
+#~ msgstr "Falta la cuenta de débito por defecto del diario '%s'."
+
+#~ msgid "Payment Method"
+#~ msgstr "Método de pago"
+
+#~ msgid "Reports"
+#~ msgstr "Informes"
+
+#~ msgid ""
+#~ "The amount of the donation of %s (%s) is different from the sum of the "
+#~ "donation lines (%s)."
+#~ msgstr ""
+#~ "El importe de la donación de %s (%s) es diferente a la suma de las lineas "
+#~ "de donaciones (%s)."
+
+#~ msgid ""
+#~ "The date of the donation of %s should be today or in the past, not in the "
+#~ "future!"
+#~ msgstr ""
+#~ "La fecha de la donación de %s debe ser hoy o en el pasado, no en el "
+#~ "futuro!"
+
+#~ msgid ""
+#~ "The journal '%s' has the option 'Donation Payment Method', so it's type "
+#~ "should be 'Cash' or 'Bank and Checks'."
+#~ msgstr ""
+#~ "El diario '%s' tiene la opción 'Método de Pago de Donativos', así que el "
+#~ "tipo debe ser 'Efectivo' o 'Banco'."
diff --git a/donation/i18n/fr.po b/donation/i18n/fr.po
new file mode 100644
index 000000000..f56fed933
--- /dev/null
+++ b/donation/i18n/fr.po
@@ -0,0 +1,1323 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 8.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2015-05-29 23:07+0000\n"
+"PO-Revision-Date: 2015-05-29 23:07+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_count
+msgid "# of Donations"
+msgstr "Nombre de dons"
+
+#. module: donation
+#: model:ir.actions.report,print_report_name:donation.report_thanks
+msgid ""
+"'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-"
+"draft' or '')"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_campaign_code_company_uniq
+msgid "A campaign with the same code already exists!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr "Un don annulé ne devrait pas être lié à un reçu fiscal"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "A cancelled donation should not be linked to an account move"
+msgstr "Un don annulé ne devrait pas être lié à une écriture comptable"
+
+#. module: donation
+#: model:ir.model.constraint,message:donation.constraint_donation_donation_bank_statement_line_uniq
+msgid "A donation already exists for this bank statement line."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__move_id
+msgid "Account Move"
+msgstr "Ecriture comptable"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__active
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__active
+msgid "Active"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_ids
+msgid "Activities"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_decoration
+msgid "Activity Exception Decoration"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_state
+msgid "Activity State"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_icon
+msgid "Activity Type Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__amount_company_currency
+msgid "Amount"
+msgstr "Montant"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total
+msgid "Amount Total"
+msgstr "Montant total"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__amount_total_company_currency
+msgid "Amount Total in Company Currency"
+msgstr "Montant total dans la devise de la société"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__amount_company_currency
+msgid "Amount in Company Currency"
+msgstr "Montant dans la devise de la société"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__analytic_account_id
+msgid "Analytic Account"
+msgstr "Compte analytique"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__annual
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__annual
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Archived"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Retour à l'état brouillon"
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_id
+msgid "Bank Statement"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_bank_statement_line
+msgid "Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Campagne de don"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__cancel
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Annulé"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it doesn't have any lines!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because it is not in draft state."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Cannot validate donation %s because the total amount is 0!"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_categ_id
+msgid "Category of Product"
+msgstr "Catégorie de produit"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Change"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_tax_receipt_option_switch_action
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Change Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__check_total
+msgid "Check Amount"
+msgstr "Montant"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__code
+msgid "Code"
+msgstr "Code"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_campaign
+msgid "Code attributed for a Donation Campaign"
+msgstr "Code attribué pour une campagne de don"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_company
+msgid "Companies"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__company_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Company"
+msgstr "Société"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__company_currency_id
+msgid "Company Currency"
+msgstr "Devise de la société"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_config_settings
+msgid "Config Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_config_menu
+msgid "Configuration"
+msgstr "Configuration"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__country_id
+msgid "Country"
+msgstr "Pays"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.tax_receipt_annual_create_menu
+msgid "Create Annual Receipts"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__create_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line__currency_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Currency"
+msgstr "Devise"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_campaign_id
+msgid "Current Donation Campaign"
+msgstr "Campagne de don courante"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_users__context_donation_payment_mode_id
+msgid "Current Donation Payment Mode"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Date"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__display_name
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__display_name
+#: model:ir.model.fields,field_description:donation.field_account_journal__display_name
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_donation__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_line__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_report__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate__display_name
+#: model:ir.model.fields,field_description:donation.field_res_company__display_name
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__display_name
+#: model:ir.model.fields,field_description:donation.field_res_partner__display_name
+#: model:ir.model.fields,field_description:donation.field_res_users__display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_donation
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__donation_id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__donation_id
+#: model:ir.module.category,name:donation.module_category_donation
+#: model:ir.ui.menu,name:donation.donation_top_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.res_config_settings_donation
+msgid "Donation"
+msgstr "Don"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but its payment mode '%s' "
+"doesn't have a fixed link to a bank journal. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the donation by credit "
+"transfer account '%s' configured on the journal '%s' linked to its payment "
+"mode '%s' is not reconciliable. This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Donation %s is linked to a bank statement line, but the journal '%s' linked "
+"to its payment mode '%s' doesn't have a donation by credit transfer account. "
+"This should never happen."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Donation <a href=# data-oe-model=donation.donation data-oe-id=%d>%s</a> "
+"dated %s created for partner <a href=# data-oe-model=res.partner data-oe-id="
+"%d>%s</a>."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__campaign_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__campaign_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_form
+msgid "Donation Campaign"
+msgstr "Campagne de don"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_campaign_action
+#: model:ir.ui.menu,name:donation.donation_campaign_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_tree
+msgid "Donation Campaigns"
+msgstr "Campagnes de don"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_check_total
+msgid "Donation Check Total"
+msgstr "Don : saisie du total"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__donation_date
+#: model:ir.model.fields,field_description:donation.field_donation_report__donation_date
+msgid "Donation Date"
+msgstr "Date du don"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Donation Line"
+msgstr "Ligne de don"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_line
+#: model:ir.model.fields,field_description:donation.field_donation_donation__line_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Donation Lines"
+msgstr "Lignes de don"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__number
+msgid "Donation Number"
+msgstr "Numéro de don"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr "Reçus fiscaux"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_thanks_template
+msgid "Donation Thanks Letter Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_form
+msgid "Donation Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_tree
+msgid "Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_journal__donation_account_id
+msgid "Donation by Credit Transfer Account"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid "Donation payment mode '%s' is not an inbound payment mode."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_payment_mode.py:0
+#, python-format
+msgid ""
+"Donation payment mode '%s' must be configured with 'Link to Bank Account' "
+"set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_action
+#: model:ir.actions.act_window,name:donation.partner_donation_action
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__donation_ids
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_partner__donation_ids
+#: model:ir.model.fields,field_description:donation.field_res_users__donation_ids
+#: model:ir.ui.menu,name:donation.donation_menu
+#: model:ir.ui.menu,name:donation.donation_title_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_form
+#: model_terms:ir.ui.view,arch_db:donation.view_partner_form
+msgid "Donations"
+msgstr "Dons"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_report_action
+#: model:ir.model,name:donation.model_donation_report
+#: model:ir.ui.menu,name:donation.donation_report_menu
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_graph
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Donations Analysis"
+msgstr "Analyse des dons"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_line_action
+msgid "Donations Lines"
+msgstr "Lignes de dons"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__done
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Done"
+msgstr "Validé"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__partner_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Donor"
+msgstr "Donateur"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Donateurs"
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__state__draft
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Brouillon"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__tax_receipt_total
+msgid "Eligible Tax Receipt Sub-total in Company Currency"
+msgstr "Montant éligible au reçu fiscal dans la monnaie de la société"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_ok
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Error:"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Failed to get account for donation line with product '%s'."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_follower_ids
+msgid "Followers"
+msgstr "Followers"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_type_icon
+msgid "Font awesome icon e.g. fa-tasks"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__each
+#: model:ir.model.fields.selection,name:donation.selection__donation_tax_receipt_option_switch__new_tax_receipt_option__each
+msgid "For Each Donation"
+msgstr "Pour chaque don"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr "Don en nature: aucune écriture comptable générée"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Grouper par"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement__id
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line__id
+#: model:ir.model.fields,field_description:donation.field_account_journal__id
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode__id
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__id
+#: model:ir.model.fields,field_description:donation.field_donation_donation__id
+#: model:ir.model.fields,field_description:donation.field_donation_line__id
+#: model:ir.model.fields,field_description:donation.field_donation_report__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__id
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__id
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__id
+#: model:ir.model.fields,field_description:donation.field_donation_validate__id
+#: model:ir.model.fields,field_description:donation.field_res_company__id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__id
+#: model:ir.model.fields,field_description:donation.field_res_partner__id
+#: model:ir.model.fields,field_description:donation.field_res_users__id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_exception_icon
+msgid "Icon"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_icon
+msgid "Icon to indicate an exception activity."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_payment_mode__donation
+msgid "If enabled, this payment mode will be available on donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__image
+msgid "Image"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__in_kind
+#: model:ir.model.fields,field_description:donation.field_donation_report__in_kind
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "In Kind"
+msgstr "En nature"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Journal"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement____last_update
+#: model:ir.model.fields,field_description:donation.field_account_bank_statement_line____last_update
+#: model:ir.model.fields,field_description:donation.field_account_journal____last_update
+#: model:ir.model.fields,field_description:donation.field_account_payment_mode____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_campaign____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_donation____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_line____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_report____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template____last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate____last_update
+#: model:ir.model.fields,field_description:donation.field_res_company____last_update
+#: model:ir.model.fields,field_description:donation.field_res_config_settings____last_update
+#: model:ir.model.fields,field_description:donation.field_res_partner____last_update
+#: model:ir.model.fields,field_description:donation.field_res_users____last_update
+msgid "Last Modified on"
+msgstr "Dernière mise à jour le"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_uid
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_donation__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_line__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__write_date
+#: model:ir.model.fields,field_description:donation.field_donation_validate__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: donation
+#: model:ir.module.category,description:donation.module_category_donation
+msgid "Manage donations"
+msgstr "Gérer les dons"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_manager
+msgid "Manager"
+msgstr "Responsable"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark all selected donation as Thanks Printed?"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+msgid "Mark as Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_ids
+msgid "Messages"
+msgstr "Messages"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "Missing Outstanding Receipts Account on journal '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing Product for Donations via Credit Transfer on company '%s'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid ""
+"Missing inbound payment mode linked to the bank journal '%s' configured with "
+"'Link to Bank Account' set to 'Fixed'."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/account_bank_statement.py:0
+#, python-format
+msgid "Missing partner on bank statement line '%s' dated %s with amount %s."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__my_activity_date_deadline
+msgid "My Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__name
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__name
+msgid "Name"
+msgstr "Nom"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_campaign_search
+msgid "Name or Code"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_date_deadline
+msgid "Next Activity Deadline"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_summary
+msgid "Next Activity Summary"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_type_id
+msgid "Next Activity Type"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields.selection,name:donation.selection__donation_donation__tax_receipt_option__none
+msgid "None"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__note
+msgid "Notes"
+msgstr "Notes"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/res_company.py:0
+#, python-format
+msgid ""
+"On the company %s, the Product for Donations via Credit Transfer (%s) is not "
+"a donation product !"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Other Information"
+msgstr "Autres informations"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__commercial_partner_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Donor"
+msgstr "Donateur parent"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report__country_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner Country"
+msgstr "Pays du partenaire"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_mode_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__payment_mode_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Mode"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"Payment Mode is not set on donation %s (only fully in-kind donations don't "
+"require a payment mode)."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_account_payment_mode
+msgid "Payment Modes"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__payment_ref
+msgid "Payment Reference"
+msgstr "Référence du paiement"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_print_menu
+msgid "Print Receipts"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Print Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__product_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Article"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Catégorie d'article"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_res_company__donation_credit_transfer_product_id
+#: model:ir.model.fields,field_description:donation.field_res_config_settings__donation_credit_transfer_product_id
+msgid "Product for Donations via Credit Transfer"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_product_action
+#: model:ir.ui.menu,name:donation.donation_products
+msgid "Products"
+msgstr "Articles"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__quantity
+msgid "Quantity"
+msgstr "Quantité"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt__donation_ids
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+#: model_terms:ir.ui.view,arch_db:donation.view_bank_statement_line_form
+msgid "Related Donations"
+msgstr "Dons associés"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reporting"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__activity_user_id
+msgid "Responsible User"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Enregistrer les valeurs par défaut"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_thanks_template_search
+msgid "Search Donation Thanks Templates"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Search Donations"
+msgstr "Recherche des dons"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_line__sequence
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__sequence
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_settings_action
+#: model:ir.ui.menu,name:donation.donation_settings_menu
+msgid "Settings"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__bank_statement_line_id
+msgid "Source Bank Statement Line"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_line__tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr "Spécifie si le produit est éligible au reçu fiscal."
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign__start_date
+msgid "Start Date"
+msgstr "Date de départ"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__state
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "État"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_state
+msgid ""
+"Status based on activities\n"
+"Overdue: Due date is already passed\n"
+"Today: Activity date is today\n"
+"Planned: Future activities."
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt_option_switch
+msgid "Switch Donation Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_id
+#: model_terms:ir.ui.view,arch_db:donation.donation_line_tree
+msgid "Tax Receipt"
+msgstr "Reçu fiscal"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_total
+#: model:ir.model.fields,field_description:donation.field_donation_line__tax_receipt_amount
+#: model:ir.model.fields,field_description:donation.field_donation_report__tax_receipt_amount
+msgid "Tax Receipt Eligible Amount"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__tax_receipt_option
+#: model:ir.model.fields,field_description:donation.field_donation_tax_receipt_option_switch__new_tax_receipt_option
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_title_menu
+msgid "Tax Receipts"
+msgstr "Reçus fiscaux"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_thanks_template__text
+msgid "Text"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.report,name:donation.report_thanks
+msgid "Thanks Letter"
+msgstr ""
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_thanks_template_action
+#: model:ir.ui.menu,name:donation.donation_thanks_template_menu
+msgid "Thanks Letter Templates"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_printed
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_printed
+msgid "Thanks Printed"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__thanks_template_id
+#: model:ir.model.fields,field_description:donation.field_donation_report__thanks_template_id
+msgid "Thanks Template"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_search
+msgid "Thanks to Print"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The amount of donation %s (%s) is different from the sum of the donation "
+"lines (%s)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The date of donation %s should be today or in the past, not in the future!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "The donation '%s' is in Done state, so you cannot delete it."
+msgstr "Le don '%s' est à l'état validé, donc vous ne pouvez pas le supprimer."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to an account move, so you cannot delete it."
+msgstr ""
+"Le don '%s' est lié à une écriture comptable, donc vous ne pouvez pas le "
+"supprimer."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The donation '%s' is linked to the tax receipt %s, so you cannot delete it."
+msgstr ""
+"Le don '%s' est lié au reçu fiscal %s, donc vous ne pouvez pas le supprimer."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"The payment mode '%s' selected on donation %s is not a donation payment mode."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__thanks_printed
+msgid ""
+"This field automatically becomes active when the thanks letter has been "
+"printed."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "This wizard will validate all the draft donations selected."
+msgstr "Cet assistant validera tous les dons brouillons sélectionnés."
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_account_journal__donation_account_id
+msgid ""
+"Transfer account for donations received by credit transfer. Leave empty if "
+"you don't receive donations on this bank account."
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__activity_exception_decoration
+msgid "Type of the exception activity on record."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line__unit_price
+msgid "Unit Price"
+msgstr "Prix unitaire"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread
+msgid "Unread Messages"
+msgstr "Unread Messages"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+msgid "Update"
+msgstr ""
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_user
+msgid "User"
+msgstr "Utilisateur"
+
+#. module: donation
+#: model:ir.model,name:donation.model_res_users
+msgid "Users"
+msgstr "Utilisateurs"
+
+#. module: donation
+#: model_terms:ir.ui.view,arch_db:donation.donation_form
+#: model_terms:ir.ui.view,arch_db:donation.donation_tree
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate"
+msgstr "Valider"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model_terms:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Validate Donations"
+msgstr "Valider les dons"
+
+#. module: donation
+#: model:ir.actions.act_window,name:donation.donation_validate_action
+msgid "Validate Draft Donations"
+msgstr "Valider les dons brouillons"
+
+#. module: donation
+#: model:res.groups,name:donation.group_donation_viewer
+msgid "Viewer"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation__website_message_ids
+msgid "Website communication history"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid ""
+"You cannot cancel this donation because it is linked to the tax receipt %s. "
+"You should first delete this tax receipt (but it may not be legally allowed)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:0
+#, python-format
+msgid "You cannot change the Tax Receipt Option when it is Annual."
+msgstr ""
+
+#~ msgid "Cancelled Donation of %s"
+#~ msgstr "Don annulé de %s"
+
+#~ msgid ""
+#~ "Cannot validate the donation of %s because it doesn't have any lines!"
+#~ msgstr ""
+#~ "Impossible de valider le don de %s parce qu'il ne contient aucune ligne !"
+
+#~ msgid "Cannot validate the donation of %s because it is not in draft state."
+#~ msgstr ""
+#~ "Impossible de valider le don de %s parce qu'il n'est pas à l'état "
+#~ "brouillon."
+
+#, fuzzy
+#~ msgid "Cannot validate the donation of %s because the total amount is 0 !"
+#~ msgstr ""
+#~ "Impossible de valider le don de %s parce qu'il ne contient aucune ligne !"
+
+#~ msgid "Current Donation Payment Method"
+#~ msgstr "Méthode de paiement actuelle"
+
+#~ msgid "Donation Payment Method"
+#~ msgstr "Méthode de paiement de don"
+
+#~ msgid "Donation of %s"
+#~ msgstr "Don de %s"
+
+#~ msgid "Draft Donation of %s"
+#~ msgstr "Don brouillon de %s"
+
+#~ msgid "Missing Default Debit Account on journal '%s'."
+#~ msgstr "Compte de débit par défaut manquant sur le journal '%s'."
+
+#~ msgid "Payment Method"
+#~ msgstr "Méthode de paiement"
+
+#~ msgid ""
+#~ "The amount of the donation of %s (%s) is different from the sum of the "
+#~ "donation lines (%s)."
+#~ msgstr ""
+#~ "Le montant du don de %s (%s) est différent de la somme des lignes de don "
+#~ "(%s)."
+
+#~ msgid ""
+#~ "The date of the donation of %s should be today or in the past, not in the "
+#~ "future!"
+#~ msgstr ""
+#~ "La date du don de %s devrait être aujourd'hui ou dans le passé, pas dans "
+#~ "le futur !"
+
+#~ msgid ""
+#~ "The journal '%s' has the option 'Donation Payment Method', so it's type "
+#~ "should be 'Cash' or 'Bank and Checks'."
+#~ msgstr ""
+#~ "Le journal '%s' a l'option 'Méthode de paiement de don', donc il doit "
+#~ "être de type 'Espèce' ou 'Banque et chèque'."
+
+#~ msgid "Date of the last message posted on the record."
+#~ msgstr "Date of the last message posted on the record."
+
+#~ msgid "Donation Validated"
+#~ msgstr "Don validé"
+
+#~ msgid ""
+#~ "Holds the Chatter summary (number of messages, ...). This summary is "
+#~ "directly in html format in order to be inserted in kanban views."
+#~ msgstr ""
+#~ "Holds the Chatter summary (number of messages, ...). This summary is "
+#~ "directly in html format in order to be inserted in kanban views."
+
+#~ msgid "If checked new messages require your attention."
+#~ msgstr "If checked new messages require your attention."
+
+#~ msgid "In-Kind Donation"
+#~ msgstr "Don en nature"
+
+#~ msgid "Is a Follower"
+#~ msgstr "Is a Follower"
+
+#~ msgid "Last Message Date"
+#~ msgstr "Last Message Date"
+
+#~ msgid "Messages and communication history"
+#~ msgstr "Messages and communication history"
+
+#~ msgid ""
+#~ "Missing income account on product '%s' or on it's related product category"
+#~ msgstr ""
+#~ "Compte de produit manquant sur l'article '%s' ou sur sa catégorie interne "
+#~ "associée"
+
+#~ msgid "Product Template"
+#~ msgstr "Modèle d'article"
+
+#~ msgid "Summary"
+#~ msgstr "Résumé"
+
+#~ msgid "This is a donation product."
+#~ msgstr "Ceci est un article de don."
diff --git a/donation/models/__init__.py b/donation/models/__init__.py
new file mode 100644
index 000000000..363dc3463
--- /dev/null
+++ b/donation/models/__init__.py
@@ -0,0 +1,10 @@
+from . import donation
+from . import donation_tax_receipt
+from . import donation_campaign
+from . import account_payment_mode
+from . import donation_thanks_template
+from . import account_bank_statement_line
+from . import account_analytic_applicability
+from . import res_partner
+from . import res_users
+from . import res_company
diff --git a/donation/models/account_analytic_applicability.py b/donation/models/account_analytic_applicability.py
new file mode 100644
index 000000000..9ec9b8df4
--- /dev/null
+++ b/donation/models/account_analytic_applicability.py
@@ -0,0 +1,16 @@
+# Copyright 2023 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class AccountAnalyticApplicability(models.Model):
+    _inherit = "account.analytic.applicability"
+
+    business_domain = fields.Selection(
+        selection_add=[
+            ("donation", "Donation"),
+        ],
+        ondelete={"donation": "cascade"},
+    )
diff --git a/donation/models/account_bank_statement_line.py b/donation/models/account_bank_statement_line.py
new file mode 100644
index 000000000..de64ae542
--- /dev/null
+++ b/donation/models/account_bank_statement_line.py
@@ -0,0 +1,131 @@
+# Copyright 2023 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, fields, models
+from odoo.exceptions import UserError
+from odoo.tools.misc import format_amount
+
+# This code is mostly used in the OCA module donation_bank_statement_oca
+# But it's located in the "donation" module because it can be useful for
+# other modules (alternative reconcile interfaces, module compatible with the Enterprise
+# reconcile interface, etc.)
+
+
+class AccountBankStatementLine(models.Model):
+    _inherit = "account.bank.statement.line"
+
+    donation_ids = fields.One2many(
+        "donation.donation", "bank_statement_line_id", string="Donations", readonly=True
+    )
+
+    def _check_statement_line_donation(self):
+        self.ensure_one()
+        if not self.partner_id:
+            raise UserError(
+                _(
+                    "On bank statement line '%s', the partner is required to "
+                    "process a donation."
+                )
+                % self.display_name
+            )
+        if self.currency_id.compare_amounts(self.amount, 0) <= 0:
+            raise UserError(
+                _(
+                    "On bank statement line '%(line)s', the amount (%(amount)s) "
+                    "is negative so it cannot be processed as a donation.",
+                    line=self.display_name,
+                    amount=format_amount(self.env, self.amount, self.currency_id),
+                )
+            )
+        if not self.company_id.donation_account_id:
+            raise UserError(
+                _(
+                    "The Donation by Credit Transfer Account is not set for company '%s'."
+                )
+                % self.company_id.display_name
+            )
+
+    def _get_payment_mode_donation(self):
+        self.ensure_one()
+        payment_mode = self.env["account.payment.mode"].search(
+            [
+                ("company_id", "=", self.company_id.id),
+                ("payment_type", "=", "inbound"),
+                ("bank_account_link", "=", "fixed"),
+                ("fixed_journal_id", "=", self.journal_id.id),
+            ],
+            limit=1,
+        )
+        if not payment_mode:
+            raise UserError(
+                _(
+                    "Missing inbound payment mode linked to the bank journal '%s' "
+                    "configured with 'Link to Bank Account' set to 'Fixed'."
+                )
+                % self.journal_id.display_name
+            )
+        return payment_mode
+
+    def _get_donation_product(self):
+        self.ensure_one()
+        product = self.company_id.donation_credit_transfer_product_id
+        if not product:
+            raise UserError(
+                _(
+                    "Missing Product for Donations via Credit Transfer "
+                    "for company '%s'."
+                )
+                % self.company_id.display_name
+            )
+        return product
+
+    def _prepare_donation_context(self):
+        self.ensure_one()
+        product = self._get_donation_product()
+        context = {
+            "default_company_id": self.company_id.id,
+            "default_partner_id": self.partner_id.id,
+            "default_currency_id": self.currency_id.id,
+            "default_payment_mode_id": self._get_payment_mode_donation().id,
+            "default_payment_ref": self.payment_ref,
+            "default_donation_date": self.date,
+            "default_bank_statement_line_id": self.id,
+            "default_check_total": self.amount,
+            "default_line_ids": [
+                (
+                    0,
+                    0,
+                    {
+                        "product_id": product.id,
+                        "quantity": 1,
+                        "unit_price": self.amount,
+                    },
+                )
+            ],
+        }
+        return context
+
+    def _prepare_donation_action(self):
+        action = {
+            "type": "ir.actions.act_window",
+            "name": _("Create Donation from Bank Statement Line"),
+            "res_model": "donation.donation",
+            "view_mode": "form",
+            "view_id": self.env.ref(
+                "donation.donation_from_bank_statement_line_form"
+            ).id,
+            "target": "new",
+            "context": self._prepare_donation_context(),
+        }
+        return action
+
+    def _prepare_donation_counterpart_move_line_vals(self, credit):
+        vals = {
+            "move_id": self.move_id.id,
+            "account_id": self.company_id.donation_account_id.id,
+            "partner_id": self.partner_id.id,
+            "credit": credit,
+            "debit": False,
+        }
+        return vals
diff --git a/donation/models/account_payment_mode.py b/donation/models/account_payment_mode.py
new file mode 100644
index 000000000..67e25bb07
--- /dev/null
+++ b/donation/models/account_payment_mode.py
@@ -0,0 +1,36 @@
+# Copyright 2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class AccountPaymentMode(models.Model):
+    _inherit = "account.payment.mode"
+
+    donation = fields.Boolean(
+        help="If enabled, this payment mode will be available on donations",
+    )
+
+    @api.constrains("donation")
+    def _check_donation(self):
+        for mode in self:
+            if mode.donation and mode.payment_type != "inbound":
+                raise ValidationError(
+                    _("Donation payment mode '%s' is not an inbound payment mode.")
+                    % mode.display_name
+                )
+            if mode.donation and mode.bank_account_link != "fixed":
+                raise ValidationError(
+                    _(
+                        "Donation payment mode '%s' must be configured with "
+                        "'Link to Bank Account' set to 'Fixed'."
+                    )
+                    % mode.display_name
+                )
+
+    @api.onchange("donation")
+    def donation_change(self):
+        if self.donation and self.bank_account_link != "fixed":
+            self.bank_account_link = "fixed"
diff --git a/donation/models/donation.py b/donation/models/donation.py
new file mode 100644
index 000000000..ee93db44d
--- /dev/null
+++ b/donation/models/donation.py
@@ -0,0 +1,796 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import logging
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+from odoo.tools.misc import format_amount
+
+logger = logging.getLogger(__name__)
+
+
+class DonationDonation(models.Model):
+    _name = "donation.donation"
+    _inherit = ["mail.thread", "mail.activity.mixin"]
+    _description = "Donation"
+    _order = "id desc"
+    _check_company_auto = True
+
+    currency_id = fields.Many2one(
+        "res.currency",
+        required=True,
+        states={"done": [("readonly", True)]},
+        tracking=True,
+        ondelete="restrict",
+        default=lambda self: self.env.company.currency_id,
+    )
+    partner_id = fields.Many2one(
+        "res.partner",
+        string="Donor",
+        required=True,
+        index=True,
+        states={"done": [("readonly", True)]},
+        tracking=True,
+        ondelete="restrict",
+    )
+    commercial_partner_id = fields.Many2one(
+        related="partner_id.commercial_partner_id",
+        string="Parent Donor",
+        store=True,
+        index=True,
+    )
+    # country_id is here to have stats per country
+    country_id = fields.Many2one(
+        "res.country",
+        compute="_compute_country_id",
+        store=True,
+    )
+    check_total = fields.Monetary(
+        string="Check Amount",
+        states={"done": [("readonly", True)]},
+        currency_field="currency_id",
+        tracking=True,
+    )
+    amount_total = fields.Monetary(
+        compute="_compute_total",
+        currency_field="currency_id",
+        store=True,
+        tracking=True,
+    )
+    amount_total_company_currency = fields.Monetary(
+        compute="_compute_total",
+        string="Amount Total in Company Currency",
+        currency_field="company_currency_id",
+        store=True,
+    )
+    donation_date = fields.Date(
+        required=True,
+        states={"done": [("readonly", True)]},
+        index=True,
+        tracking=True,
+    )
+    company_id = fields.Many2one(
+        "res.company",
+        required=True,
+        states={"done": [("readonly", True)]},
+        default=lambda self: self.env.company,
+    )
+    line_ids = fields.One2many(
+        "donation.line",
+        "donation_id",
+        string="Donation Lines",
+        states={"done": [("readonly", True)]},
+        copy=True,
+    )
+    move_id = fields.Many2one(
+        "account.move",
+        string="Account Move",
+        readonly=True,
+        copy=False,
+        check_company=True,
+    )
+    number = fields.Char(
+        required=True,
+        copy=False,
+        string="Donation Number",
+        index=True,
+        default=lambda self: _("New"),
+        readonly=True,
+        states={"draft": [("readonly", False)]},
+    )
+    payment_mode_id = fields.Many2one(
+        "account.payment.mode",
+        domain="[('company_id', '=', company_id), ('donation', '=', True)]",
+        tracking=True,
+        check_company=True,
+        states={"done": [("readonly", True)]},
+        default=lambda self: self.env.user.context_donation_payment_mode_id,
+    )
+    payment_ref = fields.Char(
+        string="Payment Reference",
+        states={"done": [("readonly", True)]},
+        copy=False,
+    )
+    state = fields.Selection(
+        [("draft", "Draft"), ("done", "Done"), ("cancel", "Cancelled")],
+        readonly=True,
+        copy=False,
+        default="draft",
+        index=True,
+        tracking=True,
+    )
+    company_currency_id = fields.Many2one(
+        related="company_id.currency_id",
+        string="Company Currency",
+        store=True,
+    )
+    campaign_id = fields.Many2one(
+        "donation.campaign",
+        string="Donation Campaign",
+        tracking=True,
+        check_company=True,
+        ondelete="restrict",
+        default=lambda self: self.env.user.context_donation_campaign_id,
+    )
+    tax_receipt_id = fields.Many2one(
+        "donation.tax.receipt",
+        readonly=True,
+        copy=False,
+        tracking=True,
+        check_company=True,
+    )
+    tax_receipt_option = fields.Selection(
+        [
+            ("none", "None"),
+            ("each", "For Each Donation"),
+            ("annual", "Annual Tax Receipt"),
+        ],
+        compute="_compute_tax_receipt_option",
+        states={"done": [("readonly", True)]},
+        index=True,
+        tracking=True,
+        precompute=True,
+        store=True,
+        readonly=False,
+    )
+    tax_receipt_total = fields.Monetary(
+        compute="_compute_total",
+        string="Tax Receipt Eligible Amount",
+        store=True,
+        readonly=True,
+        currency_field="company_currency_id",
+        help="Eligible Tax Receipt Sub-total in Company Currency",
+    )
+    bank_statement_line_id = fields.Many2one(
+        "account.bank.statement.line",
+        string="Source Bank Statement Line",
+        ondelete="restrict",
+        readonly=True,
+    )
+    thanks_printed = fields.Boolean(
+        copy=False,
+        tracking=True,
+        help="This field automatically becomes active when "
+        "the thanks letter has been printed.",
+    )
+    thanks_template_id = fields.Many2one(
+        "donation.thanks.template",
+        ondelete="restrict",
+        copy=False,
+    )
+
+    _sql_constraints = [
+        (
+            "bank_statement_line_uniq",
+            "unique(bank_statement_line_id)",
+            "A donation already exists for this bank statement line.",
+        )
+    ]
+
+    @api.depends(
+        "line_ids.unit_price",
+        "line_ids.quantity",
+        "line_ids.product_id",
+        "donation_date",
+        "currency_id",
+        "company_id",
+    )
+    def _compute_total(self):
+        for donation in self:
+            total = tax_receipt_total = 0.0
+            for line in donation.line_ids:
+                line_total = line.quantity * line.unit_price
+                total += line_total
+                if line.tax_receipt_ok:
+                    tax_receipt_total += line_total
+
+            date = donation.donation_date or fields.Date.context_today(self)
+            donation.amount_total = total
+            donation_currency = donation.currency_id
+            company_currency = donation.company_id.currency_id
+            total_company_currency = donation_currency._convert(
+                total, company_currency, donation.company_id, date
+            )
+            tax_receipt_total_cc = donation_currency._convert(
+                tax_receipt_total,
+                company_currency,
+                donation.company_id,
+                date,
+            )
+            donation.amount_total_company_currency = total_company_currency
+            donation.tax_receipt_total = tax_receipt_total_cc
+
+    # We don't want a depends on partner_id.country_id, because if the partner
+    # moves to another country, we want to keep the old country for
+    # past donations to have good statistics
+    @api.depends("partner_id")
+    def _compute_country_id(self):
+        for donation in self:
+            donation.country_id = donation.partner_id.country_id
+
+    @api.model_create_multi
+    def create(self, vals_list):
+        for vals in vals_list:
+            if "company_id" in vals:
+                self = self.with_company(vals["company_id"])
+            if vals.get("number", _("New")) == _("New"):
+                vals["number"] = self.env["ir.sequence"].next_by_code(
+                    "donation.donation", sequence_date=vals.get("donation_date")
+                ) or _("New")
+        return super().create(vals_list)
+
+    def _prepare_each_tax_receipt(self):
+        self.ensure_one()
+        vals = {
+            "company_id": self.company_id.id,
+            "currency_id": self.company_currency_id.id,
+            "donation_date": self.donation_date,
+            "amount": self.tax_receipt_total,
+            "type": "each",
+            "partner_id": self.commercial_partner_id.id,
+        }
+        return vals
+
+    def _prepare_counterpart_move_line(
+        self, total_company_cur, total_currency, journal
+    ):
+        self.ensure_one()
+        company = journal.company_id
+        if not company.account_journal_payment_debit_account_id:
+            raise UserError(
+                _("Missing Outstanding Receipts Account on company '%s'.")
+                % company.display_name
+            )
+        if self.company_currency_id.compare_amounts(total_company_cur, 0) > 0:
+            debit = total_company_cur
+            credit = 0
+        else:
+            credit = -total_company_cur
+            debit = 0
+        if self.bank_statement_line_id:
+            account_id = company.donation_account_id.id
+        else:
+            payment_method = self.payment_mode_id.payment_method_id
+            account_id = (
+                journal.inbound_payment_method_line_ids.filtered(
+                    lambda x: x.payment_method_id == payment_method
+                ).payment_account_id.id
+                or company.account_journal_payment_debit_account_id.id
+            )
+        vals = {
+            "debit": debit,
+            "credit": credit,
+            "account_id": account_id,
+            "partner_id": self.commercial_partner_id.id,
+            "currency_id": self.currency_id.id,
+            "amount_currency": total_currency,
+            "name": self.number,
+            "display_type": "payment_term",
+        }
+        return vals
+
+    def _prepare_donation_move(self):
+        self.ensure_one()
+        if not self.bank_statement_line_id and not self.payment_mode_id.donation:
+            raise UserError(
+                _(
+                    "The payment mode '%(pay_mode)s' selected on donation "
+                    "%(donation)s is not a donation payment mode.",
+                    pay_mode=self.payment_mode_id.display_name,
+                    donation=self.display_name,
+                )
+            )
+        assert self.payment_mode_id.bank_account_link == "fixed"
+        journal = self.payment_mode_id.fixed_journal_id
+        assert journal
+
+        # Note : we can have negative donations for donors that use direct
+        # debit when their direct debit rejected by the bank
+        total_company_cur = 0.0
+        total_currency = 0.0
+
+        vals = {
+            "company_id": self.company_id.id,
+            "journal_id": journal.id,
+            "date": self.donation_date,
+            "ref": self.payment_ref,
+            "line_ids": [],
+        }
+
+        for line in self.line_ids:
+            if line.in_kind:
+                continue
+            if self.currency_id.is_zero(line.amount):
+                continue
+            account = line._get_account()
+            if not account:
+                raise UserError(
+                    _("Failed to get account for donation line with product '%s'.")
+                    % line.product_id.display_name
+                )
+
+            total_currency += line.amount
+
+            amount_cc = self.currency_id._convert(
+                line.amount,
+                self.company_currency_id,
+                self.company_id,
+                self.donation_date,
+            )
+            total_company_cur += amount_cc
+            if self.company_currency_id.compare_amounts(amount_cc, 0) > 0:
+                credit = amount_cc
+                debit = 0
+            else:
+                debit = -amount_cc
+                credit = 0
+            vals["line_ids"].append(
+                (
+                    0,
+                    0,
+                    {
+                        "display_type": "product",
+                        "product_id": line.product_id.id,
+                        "credit": credit,
+                        "debit": debit,
+                        "account_id": account.id,
+                        "analytic_distribution": line.analytic_distribution,
+                        "partner_id": self.commercial_partner_id.id,
+                        "currency_id": self.currency_id.id,
+                        "amount_currency": -line.amount,
+                    },
+                )
+            )
+
+        if not vals["line_ids"]:
+            return False
+
+        # counter-part
+        ml_vals = self._prepare_counterpart_move_line(
+            total_company_cur, total_currency, journal
+        )
+        vals["line_ids"].append((0, 0, ml_vals))
+        return vals
+
+    def save_as_draft(self):
+        # Used in simple form view used as wizard
+        # Do nothing, just close
+        self.ensure_one()
+        return
+
+    def validate(self):
+        check_total_grp = self.env["res.users"].has_group(
+            "donation.group_donation_check_total"
+        )
+        for donation in self:
+            if donation.donation_date > fields.Date.context_today(self):
+                raise UserError(
+                    _(
+                        "The date of donation %s should be today "
+                        "or in the past, not in the future!"
+                    )
+                    % donation.display_name
+                )
+            if not donation.line_ids:
+                raise UserError(
+                    _(
+                        "Cannot validate donation %s because it doesn't "
+                        "have any lines!"
+                    )
+                    % donation.display_name
+                )
+
+            if donation.currency_id.is_zero(donation.amount_total):
+                raise UserError(
+                    _("Cannot validate donation %s because the total amount is 0!")
+                    % donation.display_name
+                )
+
+            if donation.state != "draft":
+                raise UserError(
+                    _(
+                        "Cannot validate donation %s because it is not "
+                        "in draft state."
+                    )
+                    % donation.display_name
+                )
+
+            if (
+                check_total_grp or donation.bank_statement_line_id
+            ) and donation.currency_id.compare_amounts(
+                donation.check_total, donation.amount_total
+            ):
+                raise UserError(
+                    _(
+                        "The amount of donation %(donation)s (%(check_total)s) is different "
+                        "from the sum of the donation lines (%(amount_total)s).",
+                        donation=donation.display_name,
+                        check_total=format_amount(
+                            self.env, donation.check_total, donation.currency_id
+                        ),
+                        amount_total=format_amount(
+                            self.env, donation.amount_total, donation.currency_id
+                        ),
+                    )
+                )
+            full_in_kind = all([line.in_kind for line in donation.line_ids])
+            if not donation.payment_mode_id and not full_in_kind:
+                raise UserError(
+                    _(
+                        "Payment Mode is not set on donation %s (only fully "
+                        "in-kind donations don't require a payment mode)."
+                    )
+                    % donation.display_name
+                )
+
+            vals = {"state": "done"}
+            if full_in_kind and donation.payment_mode_id:
+                vals["payment_mode_id"] = False
+
+            if not full_in_kind:
+                move_vals = donation._prepare_donation_move()
+                # when we have a full in-kind donation: no account move
+                if move_vals:
+                    move = self.env["account.move"].create(move_vals)
+                    move.with_context(validate_analytic=True)._post(soft=False)
+                    vals["move_id"] = move.id
+            else:
+                donation.message_post(
+                    body=_("Full in-kind donation: no account move generated")
+                )
+
+            receipt = donation.generate_each_tax_receipt()
+            if receipt:
+                vals["tax_receipt_id"] = receipt.id
+
+            donation.write(vals)
+            if donation.bank_statement_line_id:
+                donation._reconcile_donation_from_bank_statement()
+            donation.partner_id._update_donor_rank()
+        return
+
+    def _reconcile_donation_from_bank_statement(self):
+        self.ensure_one()
+        mlines_to_reconcile = self.env["account.move.line"]
+        transit_account = self.company_id.donation_account_id
+        if not transit_account:
+            raise UserError(
+                _(
+                    "Donation %(donation)s is linked to a bank statement line, but "
+                    "the Donation by Credit Transfer Account is not set for company "
+                    "'%(company)s'. This should never happen.",
+                    donation=self.display_name,
+                    company=self.company_id.display_name,
+                )
+            )
+        if not transit_account.reconcile:
+            raise UserError(
+                _(
+                    "The Donation by Credit Transfer Account '%(account)s' "
+                    "for company '%(company)s' is not reconciliable. "
+                    "This should never happen.",
+                    account=transit_account.display_name,
+                    company=self.company_id.display_name,
+                )
+            )
+
+        for donation_mline in self.move_id.line_ids:
+            if (
+                donation_mline.account_id == transit_account
+                and not donation_mline.reconciled
+            ):
+                mlines_to_reconcile |= donation_mline
+                logger.info(
+                    "Found donation move line to reconcile ID=%d" % donation_mline.id
+                )
+                break
+        for statement_mline in self.bank_statement_line_id.move_id.line_ids:
+            if (
+                statement_mline.account_id == transit_account
+                and not statement_mline.reconciled
+            ):
+                mlines_to_reconcile |= statement_mline
+                logger.info(
+                    "Found bank statement move line to reconcile " "ID=%d",
+                    statement_mline.id,
+                )
+                break
+        if len(mlines_to_reconcile) == 2:
+            mlines_to_reconcile.reconcile()
+            logger.info(
+                "Successfull reconcilation between donation and " "bank statement."
+            )
+
+    def generate_each_tax_receipt(self):
+        self.ensure_one()
+        receipt = False
+        if (
+            self.tax_receipt_option == "each"
+            and not self.tax_receipt_id
+            and not self.company_currency_id.is_zero(self.tax_receipt_total)
+        ):
+            receipt_vals = self._prepare_each_tax_receipt()
+            receipt = self.env["donation.tax.receipt"].create(receipt_vals)
+        return receipt
+
+    def save_default_values(self):
+        self.ensure_one()
+        self.env.user.write(
+            {
+                "context_donation_payment_mode_id": self.payment_mode_id.id,
+                "context_donation_campaign_id": self.campaign_id.id,
+            }
+        )
+
+    def done2cancel(self):
+        """from Done state to Cancel state"""
+        for donation in self:
+            if donation.tax_receipt_id:
+                raise UserError(
+                    _(
+                        "You cannot cancel this donation because "
+                        "it is linked to the tax receipt %s. You should first "
+                        "delete this tax receipt (but it may not be legally "
+                        "allowed)."
+                    )
+                    % donation.tax_receipt_id.display_name
+                )
+            if donation.move_id:
+                donation.move_id.button_cancel()
+                donation.with_context(force_delete=True).move_id.unlink()
+            donation.write({"state": "cancel"})
+            donation.partner_id._update_donor_rank()
+
+    def cancel2draft(self):
+        """from Cancel state to Draft state"""
+        for donation in self:
+            if donation.move_id:
+                raise UserError(
+                    _("A cancelled donation should not be linked to an account move")
+                )
+            if donation.tax_receipt_id:
+                raise UserError(
+                    _("A cancelled donation should not be linked to a tax receipt")
+                )
+        self.write({"state": "draft"})
+
+    def unlink(self):
+        for donation in self:
+            if donation.state == "done":
+                raise UserError(
+                    _("The donation '%s' is in Done state, so you cannot delete it.")
+                    % donation.display_name
+                )
+            if donation.move_id:
+                raise UserError(
+                    _(
+                        "The donation '%s' is linked to an account move, "
+                        "so you cannot delete it."
+                    )
+                    % donation.display_name
+                )
+            if donation.tax_receipt_id:
+                raise UserError(
+                    _(
+                        "The donation '%(donation)s' is linked to the tax receipt "
+                        "%(tax_receipt)s, so you cannot delete it.",
+                        donation=donation.display_name,
+                        tax_receipt=donation.tax_receipt_id.display_name,
+                    )
+                )
+        return super().unlink()
+
+    @api.depends("state", "number")
+    def name_get(self):
+        res = []
+        for donation in self:
+            name = donation.number
+            if donation.state != "done":
+                display_state = donation._fields["state"].convert_to_export(
+                    donation.state, donation
+                )
+                name = "%s (%s)" % (name, display_state)
+            res.append((donation.id, name))
+        return res
+
+    @api.depends("partner_id")
+    def _compute_tax_receipt_option(self):
+        for donation in self:
+            donation.tax_receipt_option = (
+                donation.partner_id
+                and donation.partner_id.commercial_partner_id.tax_receipt_option
+                or False
+            )
+
+    @api.onchange("tax_receipt_option")
+    def tax_receipt_option_change(self):
+        res = {}
+        if (
+            self.partner_id
+            and self.partner_id.commercial_partner_id.tax_receipt_option == "annual"
+            and self.tax_receipt_option != "annual"
+        ):
+            res = {
+                "warning": {
+                    "title": _("Error:"),
+                    "message": _(
+                        "You cannot change the Tax Receipt Option when it is Annual."
+                    ),
+                },
+            }
+            self.tax_receipt_option = "annual"
+            return res
+
+    def print_thanks(self):
+        self.ensure_one()
+        self.write({"thanks_printed": True})
+        action = (
+            self.env.ref("donation.report_thanks")
+            .with_context(discard_logo_check=True)
+            .report_action(self)
+        )
+        return action
+
+    def thanks_printed_button(self):
+        self.write({"thanks_printed": True})
+
+
+class DonationLine(models.Model):
+    _name = "donation.line"
+    _description = "Donation Lines"
+    _rec_name = "product_id"
+    _inherit = "analytic.mixin"
+    _check_company_auto = True
+
+    donation_id = fields.Many2one("donation.donation", ondelete="cascade")
+    currency_id = fields.Many2one(
+        related="donation_id.currency_id",
+        store=True,
+    )
+    company_id = fields.Many2one(related="donation_id.company_id", store=True)
+    company_currency_id = fields.Many2one(
+        related="donation_id.company_id.currency_id",
+        string="Company Currency",
+        store=True,
+    )
+    product_id = fields.Many2one(
+        "product.product",
+        required=True,
+        domain=[("detailed_type", "like", "donation")],
+        ondelete="restrict",
+        check_company=True,
+    )
+    product_detailed_type = fields.Selection(
+        related="product_id.detailed_type", store=True, string="Product Type"
+    )
+    quantity = fields.Integer(default=1)
+    unit_price = fields.Monetary(currency_field="currency_id")
+    amount = fields.Monetary(
+        compute="_compute_amount",
+        currency_field="currency_id",
+        store=True,
+    )
+    amount_company_currency = fields.Monetary(
+        compute="_compute_amount",
+        string="Amount in Company Currency",
+        currency_field="company_currency_id",
+        store=True,
+    )
+    tax_receipt_amount = fields.Monetary(
+        compute="_compute_amount",
+        string="Tax Receipt Eligible Amount",
+        currency_field="company_currency_id",
+        store=True,
+    )
+    sequence = fields.Integer()
+    # for the fields tax_receipt_ok and in_kind, we made an important change
+    # between v8 and v9: in v8, it was a reglar field set by an onchange
+    # in v9, it is a related stored field
+    tax_receipt_ok = fields.Boolean(
+        related="product_id.tax_receipt_ok",
+        store=True,
+    )
+    in_kind = fields.Boolean(
+        compute="_compute_in_kind",
+        store=True,
+    )
+
+    @api.depends("product_id")
+    def _compute_in_kind(self):
+        for line in self:
+            in_kind = False
+            if (
+                line.product_id.detailed_type
+                and line.product_id.detailed_type.startswith("donation_in_kind")
+            ):
+                in_kind = True
+            line.in_kind = in_kind
+
+    @api.depends(
+        "unit_price",
+        "quantity",
+        "product_id",
+        "donation_id.currency_id",
+        "donation_id.donation_date",
+        "donation_id.company_id",
+    )
+    def _compute_amount(self):
+        for line in self:
+            amount = line.quantity * line.unit_price
+            line.amount = amount
+            donation_currency = line.donation_id.currency_id
+            date = line.donation_id.donation_date or fields.Date.context_today(self)
+            amount_company_currency = donation_currency._convert(
+                amount,
+                line.donation_id.company_id.currency_id,
+                line.donation_id.company_id,
+                date,
+            )
+            tax_receipt_amount_cc = 0.0
+            if line.product_id.tax_receipt_ok:
+                tax_receipt_amount_cc = amount_company_currency
+            line.amount_company_currency = amount_company_currency
+            line.tax_receipt_amount = tax_receipt_amount_cc
+
+    @api.depends("product_id")
+    def _compute_analytic_distribution(self):
+        for line in self:
+            product = line.product_id
+            if product:
+                account = False
+                try:
+                    account = line._get_account()
+                except Exception:
+                    logger.warning(
+                        "No income account configured for product %s",
+                        product.display_name,
+                    )
+                distribution = self.env[
+                    "account.analytic.distribution.model"
+                ]._get_distribution(
+                    {
+                        "product_id": product.id,
+                        "product_categ_id": product.categ_id.id,
+                        "account_prefix": account and account.code or False,
+                        "company_id": line.donation_id.company_id.id,
+                    }
+                )
+                line.analytic_distribution = distribution or line.analytic_distribution
+
+    @api.onchange("product_id")
+    def product_id_change(self):
+        for line in self:
+            if line.product_id and line.product_id.list_price:
+                # We should change that one day...
+                line.unit_price = line.product_id.list_price
+
+    def _get_account(self):
+        # Method designed to be inherited (in donation_mass for example)
+        self.ensure_one()
+        account = self.with_company(
+            self.company_id.id
+        ).product_id._get_product_accounts()["income"]
+        return account
diff --git a/donation/models/donation_campaign.py b/donation/models/donation_campaign.py
new file mode 100644
index 000000000..f54fade44
--- /dev/null
+++ b/donation/models/donation_campaign.py
@@ -0,0 +1,49 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class DonationCampaign(models.Model):
+    _name = "donation.campaign"
+    _description = "Code attributed for a Donation Campaign"
+    _order = "sequence, id"
+
+    @api.depends("code", "name")
+    def name_get(self):
+        res = []
+        for camp in self:
+            name = camp.name
+            if camp.code:
+                name = "[%s] %s" % (camp.code, name)
+            res.append((camp.id, name))
+        return res
+
+    active = fields.Boolean(default=True)
+    sequence = fields.Integer(default=10)
+    code = fields.Char()
+    name = fields.Char(required=True)
+    start_date = fields.Date(default=fields.Date.context_today)
+    # company_id is NOT required, it is empty by default
+    company_id = fields.Many2one("res.company", ondelete="cascade")
+    note = fields.Text("Notes")
+
+    _sql_constraints = [
+        (
+            "code_company_uniq",
+            "unique(code, company_id)",
+            "A campaign with the same code already exists!",
+        )
+    ]
+
+    @api.model
+    def name_search(self, name="", args=None, operator="ilike", limit=100):
+        if args is None:
+            args = []
+        if name and operator == "ilike":
+            recs = self.search([("code", "=", name)] + args, limit=limit)
+            if recs:
+                return recs.name_get()
+        return super().name_search(name=name, args=args, operator=operator, limit=limit)
diff --git a/donation/models/donation_tax_receipt.py b/donation/models/donation_tax_receipt.py
new file mode 100644
index 000000000..22d9cf24a
--- /dev/null
+++ b/donation/models/donation_tax_receipt.py
@@ -0,0 +1,50 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class DonationTaxReceipt(models.Model):
+    _inherit = "donation.tax.receipt"
+
+    donation_ids = fields.One2many(
+        "donation.donation", "tax_receipt_id", string="Related Donations"
+    )
+
+    @api.model
+    def update_tax_receipt_annual_dict(
+        self, tax_receipt_annual_dict, start_date, end_date, company
+    ):
+        res = super().update_tax_receipt_annual_dict(
+            tax_receipt_annual_dict, start_date, end_date, company
+        )
+        donations = self.env["donation.donation"].search(
+            [
+                ("donation_date", ">=", start_date),
+                ("donation_date", "<=", end_date),
+                ("tax_receipt_option", "=", "annual"),
+                ("tax_receipt_id", "=", False),
+                ("tax_receipt_total", "!=", 0),
+                ("company_id", "=", company.id),
+                ("state", "=", "done"),
+            ]
+        )
+        for donation in donations:
+            # tax_receipt_total is in company currency
+            tax_receipt_amount = donation.tax_receipt_total
+            if company.currency_id.is_zero(tax_receipt_amount):
+                continue
+            partner = donation.commercial_partner_id
+            if partner not in tax_receipt_annual_dict:
+                tax_receipt_annual_dict[partner] = {
+                    "amount": tax_receipt_amount,
+                    "extra_vals": {"donation_ids": [(6, 0, [donation.id])]},
+                }
+            else:
+                tax_receipt_annual_dict[partner]["amount"] += tax_receipt_amount
+                tax_receipt_annual_dict[partner]["extra_vals"]["donation_ids"][0][
+                    2
+                ].append(donation.id)
+        return res
diff --git a/donation/models/donation_thanks_template.py b/donation/models/donation_thanks_template.py
new file mode 100644
index 000000000..56e6a7c2a
--- /dev/null
+++ b/donation/models/donation_thanks_template.py
@@ -0,0 +1,23 @@
+# Copyright 2019 Akretion France
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class DonationThanksTemplate(models.Model):
+    _name = "donation.thanks.template"
+    _description = "Donation Thanks Letter Template"
+    _order = "sequence"
+
+    sequence = fields.Integer(default=10)
+    name = fields.Char(required=True)
+    active = fields.Boolean(default=True)
+    company_id = fields.Many2one(
+        "res.company",
+        string="Company",
+        ondelete="cascade",
+        default=lambda self: self.env.company,
+    )
+    text = fields.Text(translate=True)
+    image = fields.Binary(attachment=True)
diff --git a/donation/models/res_company.py b/donation/models/res_company.py
new file mode 100644
index 000000000..3ec7fd0c3
--- /dev/null
+++ b/donation/models/res_company.py
@@ -0,0 +1,40 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class ResCompany(models.Model):
+    _inherit = "res.company"
+
+    donation_credit_transfer_product_id = fields.Many2one(
+        "product.product",
+        string="Product for Donations via Credit Transfer",
+        domain=[("detailed_type", "=", "donation")],
+        ondelete="restrict",
+    )
+    donation_account_id = fields.Many2one(
+        "account.account",
+        check_company=True,
+        copy=False,
+        ondelete="restrict",
+        string="Donation by Credit Transfer Account",
+        help="Transfer account for donations received by credit transfer. ",
+    )
+
+    @api.constrains("donation_credit_transfer_product_id")
+    def company_donation_bank_statement_check(self):
+        for company in self:
+            product = company.donation_credit_transfer_product_id
+            if product and product.detailed_type != "donation":
+                raise ValidationError(
+                    _(
+                        "On the company %(company)s, the Product for Donations "
+                        "via Credit Transfer (%(product)s) is not a donation product !",
+                        company=company.display_name,
+                        product=product.display_name,
+                    )
+                )
diff --git a/donation/models/res_partner.py b/donation/models/res_partner.py
new file mode 100644
index 000000000..aef3696f4
--- /dev/null
+++ b/donation/models/res_partner.py
@@ -0,0 +1,33 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class ResPartner(models.Model):
+    _inherit = "res.partner"
+
+    @api.depends("donation_ids.partner_id")
+    def _compute_donation_count(self):
+        rg_res = self.env["donation.donation"].read_group(
+            [("partner_id", "in", self.ids), ("state", "=", "done")],
+            ["partner_id"],
+            ["partner_id"],
+        )
+        mapped_data = {x["partner_id"][0]: x["partner_id_count"] for x in rg_res}
+        for partner in self:
+            partner.donation_count = mapped_data.get(partner.id, 0)
+
+    donation_ids = fields.One2many(
+        "donation.donation", "partner_id", string="Donations", readonly=True
+    )
+    donation_count = fields.Integer(
+        compute="_compute_donation_count", string="# of Donations", compute_sudo=True
+    )
+
+    def _prepare_donor_rank(self):
+        rank = super()._prepare_donor_rank()
+        rank += self.donation_count
+        return rank
diff --git a/donation/models/res_users.py b/donation/models/res_users.py
new file mode 100644
index 000000000..e17302031
--- /dev/null
+++ b/donation/models/res_users.py
@@ -0,0 +1,21 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import fields, models
+
+
+class ResUsers(models.Model):
+    _inherit = "res.users"
+
+    # begin with context_ to allow user to change it by himself
+    context_donation_campaign_id = fields.Many2one(
+        "donation.campaign", "Current Donation Campaign"
+    )
+    context_donation_payment_mode_id = fields.Many2one(
+        "account.payment.mode",
+        "Current Donation Payment Mode",
+        domain=[("donation", "=", True)],
+        company_dependent=True,
+    )
diff --git a/donation/post_install.py b/donation/post_install.py
new file mode 100644
index 000000000..151889149
--- /dev/null
+++ b/donation/post_install.py
@@ -0,0 +1,13 @@
+# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import SUPERUSER_ID, api
+
+
+def update_account_payment_mode(cr, registry):
+    env = api.Environment(cr, SUPERUSER_ID, {})
+    modes = env["account.payment.mode"].search(
+        [("payment_type", "=", "inbound"), ("bank_account_link", "=", "fixed")]
+    )
+    modes.write({"donation": True})
diff --git a/donation/readme/CONFIGURE.rst b/donation/readme/CONFIGURE.rst
new file mode 100644
index 000000000..ca7d83139
--- /dev/null
+++ b/donation/readme/CONFIGURE.rst
@@ -0,0 +1,11 @@
+To configure this module, you need to:
+
+ * create donation products
+ * make sure you have an inbound payment mode for each payment mode used to receive donations. This payment mode must be configured with *Link to Bank Account* set to *Fixed* and with the donation option active.
+ * if you wish to have a control amount on the donation, add the users to the group *Donation Check Total*
+
+If you receive donations via credit transfer, you must also:
+
+* in the configuration page *Invoicing > Configuration > Settings*, in the *Donations* section, select the product that will be used for donations by credit transfer.
+* on the bank journals corresponding to the bank accounts on which you receive donations by credit transfer, in the *Payments Configuration* tab, select the *Donation by credit transfer account*. This account must allow reconciliation.
+* Make sure that the accountant that processes bank statements has *User* access level or higher on the *Donation* application.
diff --git a/donation/readme/CONTRIBUTORS.rst b/donation/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..41affeb19
--- /dev/null
+++ b/donation/readme/CONTRIBUTORS.rst
@@ -0,0 +1,5 @@
+* Brother Bernard <informatique - at - barroux.org>
+* Brother Irénée (Barroux Abbey)
+* Alexis de Lattre <alexis.delattre@akretion.com>
+* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
+* Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
diff --git a/donation/readme/DESCRIPTION.rst b/donation/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..7e9e065ce
--- /dev/null
+++ b/donation/readme/DESCRIPTION.rst
@@ -0,0 +1,5 @@
+This module handles donations by cash, check or by credit transfer and generate the corresponding journal entries and tax receipts. To fully support donations by credit transfer, if you are using the OCA bank statement reconcile interface, you also need the module **donation_bank_statement_oca**.
+
+This module will assist you in writing a thanks letter.
+
+This module also supports in-kind donations (in-kind donations don't generate any accounting entry but can generate a tax receipt).
diff --git a/donation/readme/USAGE.rst b/donation/readme/USAGE.rst
new file mode 100644
index 000000000..52ba5b949
--- /dev/null
+++ b/donation/readme/USAGE.rst
@@ -0,0 +1,11 @@
+This module handles donations by cash, check or by credit transfer:
+
+* for donation by cash or check, you should first create a new donation and validate it. Then, if you have the module *account_check_deposit* from the project `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools>`_, you can create a check deposit.
+* for a donation by credit transfer, the process is different: import your bank statement file and, while processing it, you will see a donation button that allow you to create a new donation directly from the bank statement reconcile interface.
+
+When you validate a donation:
+
+* it will create a journal entry that goes directly from the revenue account to the payment account without going through a receivable account.
+* if the tax receipt option of the donor is configured as *For Each Donation* and the product of the donation line is eligible to a tax receipt, it will generate the tax receipt.
+
+To have some statistics about the donations, go to the menu Donation > Reporting > Donations Analysis.
diff --git a/donation/report/__init__.py b/donation/report/__init__.py
new file mode 100644
index 000000000..cc7ec032c
--- /dev/null
+++ b/donation/report/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import donation_report
diff --git a/donation/report/donation_report.py b/donation/report/donation_report.py
new file mode 100644
index 000000000..cf20d8800
--- /dev/null
+++ b/donation/report/donation_report.py
@@ -0,0 +1,117 @@
+# © 2014-2016 Barroux Abbey (http://www.barroux.org)
+# © 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from psycopg2 import sql
+
+from odoo import fields, models, tools
+
+
+class DonationReport(models.Model):
+    _name = "donation.report"
+    _description = "Donations Analysis"
+    _auto = False
+    _rec_name = "donation_date"
+    _order = "donation_date desc"
+
+    donation_date = fields.Date(readonly=True)
+    product_id = fields.Many2one("product.product", readonly=True)
+    product_detailed_type = fields.Selection(
+        related="product_id.detailed_type", store=True
+    )
+    partner_id = fields.Many2one("res.partner", "Donor", readonly=True)
+    country_id = fields.Many2one("res.country", "Partner Country", readonly=True)
+    company_id = fields.Many2one("res.company", readonly=True)
+    product_categ_id = fields.Many2one(
+        "product.category", "Category of Product", readonly=True
+    )
+    campaign_id = fields.Many2one(
+        "donation.campaign", "Donation Campaign", readonly=True
+    )
+    payment_mode_id = fields.Many2one("account.payment.mode", readonly=True)
+    thanks_printed = fields.Boolean(readonly=True)
+    thanks_template_id = fields.Many2one(
+        "donation.thanks.template", string="Thanks Template", readonly=True
+    )
+    in_kind = fields.Boolean()
+    tax_receipt_ok = fields.Boolean("Eligible for a Tax Receipt")
+    company_currency_id = fields.Many2one("res.currency", readonly=True)
+    amount_company_currency = fields.Monetary(
+        "Amount", readonly=True, currency_field="company_currency_id"
+    )
+    tax_receipt_amount = fields.Monetary(
+        "Tax Receipt Eligible Amount",
+        readonly=True,
+        currency_field="company_currency_id",
+    )
+
+    def _select(self):
+        return sql.SQL(
+            """
+            SELECT min(l.id) AS id,
+                d.donation_date,
+                l.product_id,
+                l.product_detailed_type,
+                l.in_kind,
+                l.tax_receipt_ok,
+                pt.categ_id AS product_categ_id,
+                d.company_id,
+                d.payment_mode_id,
+                d.partner_id,
+                d.country_id,
+                d.campaign_id,
+                d.company_currency_id,
+                d.thanks_printed,
+                d.thanks_template_id,
+                sum(l.amount_company_currency) AS amount_company_currency,
+                sum(l.tax_receipt_amount) AS tax_receipt_amount
+                """
+        )
+
+    def _from(self):
+        return sql.SQL(
+            """
+            donation_line l
+                LEFT JOIN donation_donation d ON (d.id=l.donation_id)
+                LEFT JOIN product_product pp ON (l.product_id=pp.id)
+                LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
+            """
+        )
+
+    def _where(self):
+        return sql.SQL(
+            """
+            WHERE d.state='done'
+            """
+        )
+
+    def _group_by(self):
+        return sql.SQL(
+            """
+            GROUP BY l.product_id,
+                l.product_detailed_type,
+                l.in_kind,
+                l.tax_receipt_ok,
+                pt.categ_id,
+                d.donation_date,
+                d.partner_id,
+                d.country_id,
+                d.campaign_id,
+                d.company_id,
+                d.payment_mode_id,
+                d.thanks_printed,
+                d.thanks_template_id,
+                d.company_currency_id
+            """
+        )
+
+    def init(self):
+        tools.drop_view_if_exists(self._cr, self._table)
+        query = sql.SQL("CREATE OR REPLACE VIEW {0} AS ({1} FROM {2} {3} {4})").format(
+            sql.Identifier(self._table),
+            self._select(),
+            self._from(),
+            self._where(),
+            self._group_by(),
+        )  # pylint: disable=sql-injection
+        self._cr.execute(query)
diff --git a/donation/report/donation_report_view.xml b/donation/report/donation_report_view.xml
new file mode 100644
index 000000000..c332d4e30
--- /dev/null
+++ b/donation/report/donation_report_view.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_report_search" model="ir.ui.view">
+        <field name="name">donation.report.search</field>
+        <field name="model">donation.report</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="partner_id" />
+                <field name="product_id" />
+                <field name="product_categ_id" />
+                <group string="Group By" name="groupby">
+                    <filter
+                        name="date_groupby"
+                        string="Date"
+                        context="{'group_by': 'donation_date'}"
+                    />
+                    <filter
+                        name="partner_groupby"
+                        string="Partner"
+                        context="{'group_by': 'partner_id'}"
+                    />
+                    <filter
+                        name="partner_country_groupby"
+                        string="Partner Country"
+                        context="{'group_by': 'country_id'}"
+                    />
+                    <filter
+                        name="company_groupby"
+                        string="Company"
+                        context="{'group_by': 'company_id'}"
+                    />
+                    <filter
+                        name="product_categ_groupby"
+                        string="Product Category"
+                        context="{'group_by': 'product_categ_id'}"
+                    />
+                    <filter
+                        name="product_groupby"
+                        string="Product"
+                        context="{'group_by': 'product_id'}"
+                    />
+                    <filter
+                        name="product_detailed_type_groupby"
+                        string="Product Type"
+                        context="{'group_by': 'product_detailed_type'}"
+                    />
+                    <filter
+                        name="tax_receipt_ok_groupby"
+                        string="Eligible for a Tax Receipt"
+                        context="{'group_by': 'tax_receipt_ok'}"
+                    />
+                    <filter
+                        name="in_kind_groupby"
+                        string="In Kind"
+                        context="{'group_by': 'in_kind'}"
+                    />
+                    <filter
+                        name="campaign_groupby"
+                        string="Campaign"
+                        context="{'group_by': 'campaign_id'}"
+                    />
+                    <filter
+                        name="payment_mode_groupby"
+                        string="Payment Mode"
+                        context="{'group_by': 'payment_mode_id'}"
+                    />
+
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="donation_report_graph" model="ir.ui.view">
+        <field name="name">donation.report.graph</field>
+        <field name="model">donation.report</field>
+        <field name="arch" type="xml">
+            <graph>
+                <field name="donation_date" />
+                <field name="amount_company_currency" type="measure" />
+            </graph>
+        </field>
+    </record>
+    <record id="donation_report_pivot" model="ir.ui.view">
+        <field name="name">donation.report.pivot</field>
+        <field name="model">donation.report</field>
+        <field name="arch" type="xml">
+            <pivot>
+                <field name="donation_date" type="row" interval="month" />
+                <field name="product_id" type="col" />
+                <field name="amount_company_currency" type="measure" />
+            </pivot>
+        </field>
+    </record>
+    <!-- tree view used for drill-through -->
+    <record id="donation_report_tree" model="ir.ui.view">
+        <field name="name">donation.report.tree</field>
+        <field name="model">donation.report</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="partner_id" optional="show" />
+                <field name="donation_date" optional="show" />
+                <field name="country_id" optional="hide" />
+                <field name="payment_mode_id" optional="show" />
+                <field name="campaign_id" optional="hide" />
+                <field name="product_categ_id" optional="hide" />
+                <field name="product_id" optional="show" />
+                <field name="product_detailed_type" optional="hide" />
+                <field name="tax_receipt_ok" optional="show" />
+                <field name="in_kind" optional="show" />
+                <field name="thanks_printed" optional="hide" />
+                <field name="thanks_template_id" optional="hide" />
+                <field name="tax_receipt_amount" sum="1" optional="show" />
+                <field name="amount_company_currency" sum="1" />
+                <field name="company_currency_id" invisible="1" />
+                <field
+                    name="company_id"
+                    groups="base.group_multi_company"
+                    optional="show"
+                />
+            </tree>
+        </field>
+    </record>
+    <record id="donation_report_action" model="ir.actions.act_window">
+        <field name="name">Donations Analysis</field>
+        <field name="res_model">donation.report</field>
+        <field name="view_mode">pivot,graph,tree</field>
+    </record>
+    <menuitem
+        id="donation_report_title_menu"
+        parent="donation_top_menu"
+        name="Reporting"
+        sequence="25"
+    />
+    <menuitem
+        id="donation_report_menu"
+        action="donation_report_action"
+        parent="donation_report_title_menu"
+        sequence="10"
+    />
+</odoo>
diff --git a/donation/report/donation_thanks_report.xml b/donation/report/donation_thanks_report.xml
new file mode 100644
index 000000000..131c885d8
--- /dev/null
+++ b/donation/report/donation_thanks_report.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+
+
+<record id="report_thanks" model="ir.actions.report">
+    <field name="name">Thanks Letter</field>
+    <field name="model">donation.donation</field>
+    <field name="report_name">donation.report_donation_thanks</field>
+    <field name="report_file">donation.report_donation_thanks</field>
+    <field name="report_type">qweb-pdf</field>
+    <field
+            name="print_report_name"
+        >'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-draft' or '')</field>
+    <field name="binding_model_id" ref="model_donation_donation" />
+</record>
+
+
+</odoo>
diff --git a/donation/report/donation_thanks_view.xml b/donation/report/donation_thanks_view.xml
new file mode 100644
index 000000000..045d39ba6
--- /dev/null
+++ b/donation/report/donation_thanks_view.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2021 Akretion (http://www.akretion.com)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <template id="report_donation_thanks">
+        <t t-call="web.html_container">
+            <t t-foreach="docs" t-as="o">
+                <t t-call="web.internal_layout">
+                        <div class="page">
+                                <div
+                            t-field="o.partner_id"
+                            t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
+                        />
+                        </div>
+                </t>
+            </t>
+        </t>
+    </template>
+</odoo>
diff --git a/donation/security/donation_security.xml b/donation/security/donation_security.xml
new file mode 100644
index 000000000..88f46e91d
--- /dev/null
+++ b/donation/security/donation_security.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (www.barroux.org)
+  Copyright 2014-2021 Akretion France (www.akretion.com)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <data noupdate="0">
+        <record id="module_category_donation" model="ir.module.category">
+            <field name="name">Donation</field>
+            <field name="description">Manage donations</field>
+            <field name="sequence">45</field>
+            <field name="parent_id" ref="base.module_category_accounting" />
+        </record>
+        <record id="group_donation_viewer" model="res.groups">
+            <field name="name">Viewer</field>
+            <field name="category_id" ref="module_category_donation" />
+        </record>
+        <record id="group_donation_user" model="res.groups">
+            <field name="name">User</field>
+            <field name="category_id" ref="module_category_donation" />
+            <field name="implied_ids" eval="[(4, ref('group_donation_viewer'))]" />
+        </record>
+        <record id="group_donation_manager" model="res.groups">
+            <field name="name">Manager</field>
+            <field name="category_id" ref="module_category_donation" />
+            <field name="implied_ids" eval="[(4, ref('group_donation_user'))]" />
+            <field name="users" eval="[(4, ref('base.user_root'))]" />
+        </record>
+        <record id="group_donation_check_total" model="res.groups">
+            <field name="name">Donation Check Total</field>
+            <field name="category_id" ref="base.module_category_hidden" />
+        </record>
+    </data>
+    <data noupdate="1">
+        <record id="base.default_user" model="res.users">
+            <field name="groups_id" eval="[(4, ref('group_donation_manager'))]" />
+    </record>
+            <record id="base.user_admin" model="res.users">
+        <field name="groups_id" eval="[(4, ref('group_donation_manager'))]" />
+    </record>
+        <!-- Multi-company Rules -->
+        <record id="donation_company_rule" model="ir.rule">
+            <field name="name">Donation Multi-company</field>
+            <field name="model_id" ref="model_donation_donation" />
+            <field name="domain_force">
+                [('company_id', 'in', company_ids)]</field>
+        </record>
+        <record id="donation_line_company_rule" model="ir.rule">
+            <field name="name">Donation Line Multi-company</field>
+            <field name="model_id" ref="model_donation_line" />
+            <field name="domain_force">
+                [('company_id', 'in', company_ids)]</field>
+        </record>
+
+        <record id="donation_report_company_rule" model="ir.rule">
+            <field name="name">Donation Report Multi-company</field>
+            <field name="model_id" ref="model_donation_report" />
+            <field name="domain_force">[('company_id', 'in', company_ids)]</field>
+        </record>
+        <record id="donation_thanks_template_company_rule" model="ir.rule">
+    <field name="name">Donation Thanks Template multi-company</field>
+    <field name="model_id" ref="model_donation_thanks_template" />
+    <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
+</record>
+        <record id="donation_campaign_company_rule" model="ir.rule">
+    <field name="name">Donation Campaign multi-company</field>
+    <field name="model_id" ref="model_donation_campaign" />
+    <field
+                name="domain_force"
+            >['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
+</record>
+
+    </data>
+</odoo>
diff --git a/donation/security/ir.model.access.csv b/donation/security/ir.model.access.csv
new file mode 100644
index 000000000..2a3f614bc
--- /dev/null
+++ b/donation/security/ir.model.access.csv
@@ -0,0 +1,21 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_donation_donation_viewer,Read access on donation.donation to Donation Viewer,model_donation_donation,group_donation_viewer,1,0,0,0
+access_donation_donation_user,Full access on donation.donation to Donation User,model_donation_donation,group_donation_user,1,1,1,1
+access_donation_campaign_manager,Full access on donation.campaign to Donation Manager,model_donation_campaign,group_donation_manager,1,1,1,1
+access_donation_campaign_viewer,Read access on donation.campaign to Donation Viewer,model_donation_campaign,group_donation_viewer,1,0,0,0
+access_donation_line_viewer,Read access on donation.line to Donation Viewer,model_donation_line,group_donation_viewer,1,0,0,0
+access_donation_line_user,Full access on donation.line to Donation User,model_donation_line,group_donation_user,1,1,1,1
+access_donation_donation_read,Read access on donation.donation to Employee grp,model_donation_donation,base.group_user,1,0,0,0
+access_donation_line_read,Read access on donation.line to Employee grp,model_donation_line,base.group_user,1,0,0,0
+access_account_journal_donation,Read access on account.journal,account.model_account_journal,group_donation_viewer,1,0,0,0
+access_account_move_donation,Full access on account.move,account.model_account_move,group_donation_user,1,1,1,1
+access_account_move_line_donation,Full access on account.move.line,account.model_account_move_line,group_donation_user,1,1,1,1
+access_account_analytic_line_donation,Full access on account.analytic.line to donation user,analytic.model_account_analytic_line,group_donation_user,1,1,1,1
+access_donation_report,Full access on donation.report to Donation Viewer,model_donation_report,group_donation_viewer,1,1,1,1
+access_donation_tax_receipt_viewer,Read access on donation.tax.receipt to Donation Viewer grp,model_donation_tax_receipt,donation.group_donation_viewer,1,0,0,0
+access_donation_tax_receipt,Create access on donation.tax.receipt to Donation User,model_donation_tax_receipt,donation.group_donation_user,1,0,1,0
+access_donation_tax_receipt_full,Full access on donation.tax.receipt to Donation Manager,model_donation_tax_receipt,donation.group_donation_manager,1,1,1,1
+access_donation_thanks_template_manager,Full access on donation.thanks.template to Donation Manager,model_donation_thanks_template,group_donation_manager,1,1,1,1
+access_donation_thanks_template_viewer,Read access on donation.thanks.template to Donation Viewer,model_donation_thanks_template,group_donation_viewer,1,0,0,0
+access_donation_validate,Full access on donation validate wizard,model_donation_validate,donation.group_donation_user,1,1,1,1
+access_donation_tax_receipt_option_switch,Full access on donation_tax_receipt_option_switch wizard,model_donation_tax_receipt_option_switch,donation.group_donation_user,1,1,1,1
diff --git a/donation/static/description/icon.png b/donation/static/description/icon.png
new file mode 100644
index 000000000..a9a295465
Binary files /dev/null and b/donation/static/description/icon.png differ
diff --git a/donation/static/description/icon.svg b/donation/static/description/icon.svg
new file mode 100644
index 000000000..6b8d94559
--- /dev/null
+++ b/donation/static/description/icon.svg
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="100mm"
+   height="100mm"
+   viewBox="0 0 100 100"
+   version="1.1"
+   id="svg8"
+   sodipodi:docname="icon.svg"
+   inkscape:version="0.92.4 (f8dce91, 2019-08-02)"
+   inkscape:export-filename="/home/jaime/Escritorio/icon.png"
+   inkscape:export-xdpi="91"
+   inkscape:export-ydpi="91">
+  <defs
+     id="defs2">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4562">
+      <rect
+         ry="4.1577382"
+         y="13.040181"
+         x="-124.92113"
+         height="98.866074"
+         width="99.811012"
+         id="rect4564"
+         style="fill:#aa0000;stroke-width:0.26458332"
+         clip-path="none" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4578">
+      <rect
+         ry="4.1577382"
+         y="1.5119057"
+         x="-120.00744"
+         height="97.930626"
+         width="99.811012"
+         id="rect4580"
+         style="fill:#aa0000;stroke-width:0.26458332" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath4578-3">
+      <rect
+         ry="4.1577382"
+         y="1.5119057"
+         x="-120.00744"
+         height="97.930626"
+         width="99.811012"
+         id="rect4580-6"
+         style="fill:#aa0000;stroke-width:0.26458332" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="72.826115"
+     inkscape:cy="127.25228"
+     inkscape:document-units="mm"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:snap-page="true"
+     showguides="false"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1853"
+     inkscape:window-height="1025"
+     inkscape:window-x="67"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:snap-global="false">
+    <sodipodi:guide
+       position="31.183035,81.453868"
+       orientation="-0.70710678,0.70710678"
+       id="guide4619"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="65.956845,10.583333"
+       orientation="-0.70710678,0.70710678"
+       id="guide4621"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="67.704985,78.09933"
+       orientation="-0.70710678,0.70710678"
+       id="guide4623"
+       inkscape:locked="false" />
+    <sodipodi:guide
+       position="62.407434,24.722431"
+       orientation="-0.70710678,0.70710678"
+       id="guide4625"
+       inkscape:locked="false" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata5">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Layer 3" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer 2"
+     style="display:inline">
+    <rect
+       y="0"
+       x="0"
+       height="25.164532"
+       width="100"
+       id="rect4535"
+       style="fill:#de8787;stroke-width:0.13272627"
+       ry="4.9136906"
+       inkscape:export-xdpi="91.327972"
+       inkscape:export-ydpi="91.327972" />
+    <rect
+       ry="4.9136906"
+       style="fill:#501616;stroke-width:0.13272627"
+       id="rect4566"
+       width="100"
+       height="25.164532"
+       x="0.18899068"
+       y="74.958138"
+       inkscape:export-xdpi="91.327972"
+       inkscape:export-ydpi="91.327972" />
+    <rect
+       style="fill:#800080;stroke-width:0.26458332"
+       id="rect914"
+       width="99.811012"
+       height="97.930626"
+       x="0.18898809"
+       y="1.1339295"
+       ry="4.1577382"
+       inkscape:export-xdpi="91.327972"
+       inkscape:export-ydpi="91.327972" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m -119.93657,64.635599 -0.25988,-14.100283 v 49.842664 l -0.10009,-17.197917 0.0986,0.188988 63.235934,-16.365413 -62.534814,16.120116 -0.84138,0.0091 57.369031,-57.747002 -9.386044,1.225775 -0.523352,-7.522118"
+       style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75454544;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4576"
+       clip-path="url(#clipPath4578)"
+       transform="translate(120.21264,-0.31639914)"
+       inkscape:export-xdpi="91.327972"
+       inkscape:export-ydpi="91.327972"
+       sodipodi:nodetypes="ccccccccccc" />
+    <path
+       inkscape:connector-curvature="0"
+       d="m -120.69252,82.40048 0.49609,-31.865164 v 49.842664 h 37.697532 l 5.579265,-0.944941 37.911526,-37.53208 c -39.824515,24.042545 -0.242948,0.516749 -4.21358,0.474115 -7.264003,-0.078 -37.597022,15.482201 -33.017329,12.255689 31.028683,-21.860511 4.494348,-15.920349 -0.174165,-18.219814 l 14.199994,-15.528114 -6.929198,-10.869463 -5.626031,6.085025"
+       style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75294118;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4576-7"
+       clip-path="url(#clipPath4578-3)"
+       transform="translate(120.51819,0.47953594)"
+       inkscape:export-xdpi="91.327972"
+       inkscape:export-ydpi="91.327972"
+       sodipodi:nodetypes="ccccccsscccc" />
+    <path
+       style="fill:#000000;stroke-width:0.71428573;fill-opacity:0"
+       d="m 9.9291099,372.78181 c -3.3243104,-1.50995 -8.2615024,-6.88043 -7.6913163,-8.36632 0.2112108,-0.5504 0.1085589,-1.00163 -0.2281152,-1.00273 -0.3366742,-10e-4 -0.6121349,-25.03982 -0.6121349,-55.6416 V 252.13154 L 88.540401,163.21716 c 47.928569,-48.9029 87.185559,-88.873107 87.237739,-88.822673 0.0522,0.05043 -0.0682,2.548093 -0.26755,5.550352 l -0.36245,5.458652 -2.58958,0.430374 c -7.33955,1.219789 -15.15831,7.370133 -18.53946,14.583395 -1.59811,3.40938 -1.90727,5.05306 -1.90727,10.14035 0,5.20396 0.28579,6.65342 2.00026,10.14473 2.35095,4.78743 7.56285,9.75366 12.86245,12.25614 2.03979,0.96319 9.49443,3.25496 16.56586,5.09282 7.07143,1.83786 13.58036,3.8039 14.46429,4.36898 1.96695,1.25743 2.0642,3.21658 0.24152,4.86607 -1.2044,1.08997 -2.57462,1.19237 -11.60714,0.86747 -5.63284,-0.20261 -11.72551,-0.57718 -13.53927,-0.83237 -3.27994,-0.46148 -3.32622,-0.43844 -8.57143,4.26688 -6.00398,5.38599 -7.24201,7.51799 -6.163,10.61324 0.83704,2.40111 6.8498,5.60636 13.17057,7.02088 l 3.79017,0.84821 v 4.20752 c 0,4.30054 1.09503,7.375 3.27272,9.1886 0.78399,0.65292 3.63217,1.1478 7.92245,1.37655 l 6.6984,0.35714 -13.05392,13.62625 -13.05393,13.62626 -18.57143,0.39821 c -20.10746,0.43116 -23.54543,0.95475 -32.40523,4.93521 -5.50381,2.47271 -8.51616,4.60369 -21.565619,15.25583 l -10.081808,8.22967 h -12.4609 c -13.416673,0 -16.223795,0.55781 -18.39309,3.65491 -1.019424,1.45543 -1.164781,4.58911 -1.164781,25.11093 0,25.61654 0.150954,26.66485 4.073459,28.28857 1.483715,0.61418 23.416348,0.77796 85.212259,0.63632 l 83.21428,-0.19073 4.64286,-2.21371 c 3.26851,-1.55843 14.01419,-9.7717 36.30135,-27.74628 17.41216,-14.0429 31.76556,-25.42173 31.89642,-25.28628 0.13086,0.13545 -28.52003,29.57663 -63.66865,65.42484 l -63.90658,65.17857 -78.704127,-0.0157 c -74.913528,-0.0149 -78.843655,-0.0791 -81.6011331,-1.33155 z"
+       id="path4581"
+       inkscape:connector-curvature="0"
+       transform="scale(0.26458333)" />
+  </g>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0,-197)"
+     style="display:inline">
+    <path
+       transform="translate(0,197)"
+       inkscape:connector-curvature="0"
+       style="display:inline;fill:#ffffff;stroke-width:0.11765506"
+       d="m 45.73225,35.693232 6.364116,1.688027 a 1.0073293,1.0139958 0 0 1 0.777484,0.956154 c 0,0.543001 -0.479624,0.991567 -1.069481,0.991567 H 47.62964 A 3.5180301,3.5413125 0 0 1 46.317415,39.069284 C 45.702933,38.809587 44.994636,38.86861 44.52322,39.305371 l -2.228085,2.065766 a 1.3696864,1.3787509 0 0 0 -0.263853,0.313996 1.3391968,1.3480597 0 0 0 0.454999,1.858009 9.8235129,9.8885253 0 0 0 4.046907,1.357503 v 2.089374 c 0,1.038782 0.918206,1.888697 2.036939,1.888697 h 2.036939 c 1.119907,0 2.038113,-0.849915 2.038113,-1.888697 v -2.07757 c 3.861625,-0.424958 6.782764,-3.659356 6.273818,-7.436756 -0.369389,-2.715006 -2.63383,-4.875206 -5.45998,-5.630687 L 47.0949,30.156981 a 1.0073293,1.0139958 0 0 1 -0.777485,-0.956154 c 0,-0.543003 0.479625,-0.991568 1.069481,-0.991568 h 4.17473 a 3.5180301,3.5413125 0 0 1 1.316916,0.259696 c 0.613309,0.259696 1.322779,0.200675 1.794195,-0.236088 l 2.228086,-2.065765 a 1.3262973,1.3350748 0 0 0 0.254471,-0.306914 1.3403695,1.3492401 0 0 0 -0.450308,-1.86273 9.8293764,9.894427 0 0 0 -4.048081,-1.357503 v -2.091736 c 0,-1.038784 -0.917033,-1.888699 -2.036938,-1.888699 h -2.03694 c -1.119906,0 -2.036939,0.849915 -2.036939,1.888699 v 2.077571 c -3.856934,0.424957 -6.783935,3.659356 -6.274994,7.436756 0.368221,2.715006 2.639695,4.875207 5.461156,5.630686 z m 34.501321,21.696442 c -1.383757,-1.263066 -3.541485,-1.180437 -4.995603,0 L 64.402435,66.113105 A 7.4629144,7.512304 0 0 1 59.71173,67.765719 H 45.842482 a 1.8762835,1.8887007 0 0 1 0,-3.777397 h 9.180885 c 1.864556,0 3.601291,-1.286678 3.89915,-3.139963 a 3.6587513,3.682965 0 0 0 0.05394,-0.644525 3.7525655,3.7774 0 0 0 -3.752566,-3.770315 H 36.461068 a 13.797714,13.889027 0 0 0 -8.689535,3.103372 l -5.452946,4.451431 h -6.496629 a 1.8762827,1.8887 0 0 0 -1.876283,1.888699 v 11.3322 a 1.8762827,1.8887 0 0 0 1.876283,1.888699 h 41.837586 a 7.5051308,7.5547997 0 0 0 4.690707,-1.652615 L 80.084642,63.162011 a 3.7525655,3.7774 0 0 0 0.150103,-5.772337 z"
+       id="path2" />
+  </g>
+</svg>
diff --git a/donation/static/description/index.html b/donation/static/description/index.html
new file mode 100644
index 000000000..5da928c59
--- /dev/null
+++ b/donation/static/description/index.html
@@ -0,0 +1,461 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<title>Donation</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="donation">
+<h1 class="title">Donation</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/donation/tree/14.0/donation"><img alt="OCA/donation" src="https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/donation-14-0/donation-14-0-donation"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/180/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>This module handles donations by cash, check or by credit transfer and generate the corresponding journal entries and tax receipts. Before Odoo v14, support for donations by credit transfer was added by a separate module <em>donation_bank_statement</em>.</p>
+<p>This module will assist you in writing a thanks letter (before Odoo v14, this feature was added by a separate module <em>donation_thanks</em>).</p>
+<p>This module also supports in-kind donations (in-kind donations don’t generate any accounting entry but can generate a tax receipt).</p>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
+<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="configuration">
+<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
+<p>To configure this module, you need to:</p>
+<blockquote>
+<ul class="simple">
+<li>create donation products</li>
+<li>make sure you have an inbound payment mode for each payment mode used to receive donations. This payment mode must be configured with <em>Link to Bank Account</em> set to <em>Fixed</em> and with the donation option active.</li>
+<li>if you wish to have a control amount on the donation, add the users to the group <em>Donation Check Total</em></li>
+</ul>
+</blockquote>
+<p>If you receive donations via credit transfer, you must also:</p>
+<ul class="simple">
+<li>in the configuration page <em>Invoicing &gt; Configuration &gt; Settings</em>, in the <em>Donations</em> section, select the product that will be used for donations by credit transfer.</li>
+<li>on the bank journals corresponding to the bank accounts on which you receive donations by credit transfer, in the <em>Payments Configuration</em> tab, select the <em>Donation by credit transfer account</em>. This account must allow reconciliation.</li>
+<li>Make sure that the accountant that processes bank statements has <em>User</em> access level or higher on the <em>Donation</em> application.</li>
+</ul>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<p>This module handles donations by cash, check or by credit transfer:</p>
+<ul class="simple">
+<li>for donation by cash or check, you should first create a new donation and validate it. Then, if you have the module <em>account_check_deposit</em> from the project <a class="reference external" href="https://github.com/OCA/account-financial-tools">OCA/account-financial-tools</a>, you can create a check deposit.</li>
+<li>for a donation by credit transfer, the process in inverted: first, import your bank statement file and process it. When you process a statement line that correspond to a donation by credit transfer, make sure that the partner is the good one and, in the <em>Manual Operations</em> tab, set the <em>Donation by credit transfer account</em> (configured on the corresponding bank journal) as counterpart. When you close the bank statement, Odoo will generate a draft donation for each statement line identified as a donation by credit transfer. Then you should verify and validate these draft donations.</li>
+</ul>
+<p>When you validate a donation:</p>
+<ul class="simple">
+<li>it will create a journal entry that goes directly from the revenue account to the payment account without going through a receivable account.</li>
+<li>if the tax receipt option of the donor is configured as <em>For Each Donation</em> and the product of the donation line is eligible to a tax receipt, it will generate the tax receipt.</li>
+</ul>
+<p>To have some statistics about the donations, go to the menu Donation &gt; Reporting &gt; Donations Analysis.</p>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/donation/issues">GitHub Issues</a>.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+<a class="reference external" href="https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<p>Do not contact contributors directly about support or help with technical issues.</p>
+</div>
+<div class="section" id="credits">
+<h1><a class="toc-backref" href="#id4">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id5">Authors</a></h2>
+<ul class="simple">
+<li>Barroux Abbey</li>
+<li>Akretion</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
+<ul class="simple">
+<li>Brother Bernard &lt;informatique - at - barroux.org&gt;</li>
+<li>Brother Irénée (Barroux Abbey)</li>
+<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
+<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
+<li>Nikul Chaudhary &lt;<a class="reference external" href="mailto:nikul.chaudhary.serpentcs&#64;gmail.com">nikul.chaudhary.serpentcs&#64;gmail.com</a>&gt;</li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
+<p>This module is maintained by the OCA.</p>
+<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.</p>
+<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
+<p><a class="reference external" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/14.0/donation">OCA/donation</a> project on GitHub.</p>
+<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/donation/views/account_payment_mode.xml b/donation/views/account_payment_mode.xml
new file mode 100644
index 000000000..f20966864
--- /dev/null
+++ b/donation/views/account_payment_mode.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo>
+
+
+<record id="account_payment_mode_form" model="ir.ui.view">
+    <field name="name">donation.account.payment.mode.form</field>
+    <field name="model">account.payment.mode</field>
+    <field name="inherit_id" ref="account_payment_mode.account_payment_mode_form" />
+    <field name="arch" type="xml">
+        <field name="payment_type" position="after">
+            <field
+                    name="donation"
+                    attrs="{'invisible': [('payment_type', '!=', 'inbound')]}"
+                />
+        </field>
+    </field>
+</record>
+
+<record id="account_payment_mode_tree" model="ir.ui.view">
+    <field name="name">donation.account.payment.mode.tree</field>
+    <field name="model">account.payment.mode</field>
+    <field name="inherit_id" ref="account_payment_mode.account_payment_mode_tree" />
+    <field name="arch" type="xml">
+        <field name="payment_type" position="after">
+            <field name="donation" optional="hide" />
+        </field>
+    </field>
+</record>
+
+<record id="account_payment_mode_search" model="ir.ui.view">
+        <field name="model">account.payment.mode</field>
+        <field
+            name="inherit_id"
+            ref="account_payment_mode.account_payment_mode_search"
+        />
+        <field name="arch" type="xml">
+                <filter name="outbound" position="after">
+                        <separator />
+                        <filter
+                    name="donation"
+                    domain="[('donation', '=', True)]"
+                    string="Donation"
+                />
+                </filter>
+        </field>
+</record>
+
+<record id="account_payment_mode_donation_action" model="ir.actions.act_window">
+        <field name="name">Payment Modes</field>
+        <field name="res_model">account.payment.mode</field>
+        <field name="view_mode">tree,form</field>
+        <field name="domain">[('payment_type', '=', 'inbound')]</field>
+        <field
+            name="context"
+        >{'default_donation': True, 'search_default_donation': True}</field>
+    </record>
+    <menuitem
+        id="account_payment_mode_donation_menu"
+        action="account_payment_mode_donation_action"
+        parent="donation_config_menu"
+        sequence="30"
+    />
+
+</odoo>
diff --git a/donation/views/donation.xml b/donation/views/donation.xml
new file mode 100644
index 000000000..2b17cd099
--- /dev/null
+++ b/donation/views/donation.xml
@@ -0,0 +1,525 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_form" model="ir.ui.view">
+        <field name="name">donation.form</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <form>
+                <header>
+                    <button
+                        type="object"
+                        name="validate"
+                        string="Validate"
+                        class="oe_highlight"
+                        states="draft"
+                        groups="donation.group_donation_user"
+                        invisible="context.get('recurring_view')"
+                    />
+                    <button
+                        name="print_thanks"
+                        string="Print Thanks Letter"
+                        type="object"
+                        groups="donation.group_donation_user"
+                        attrs="{'invisible': ['|', ('thanks_printed', '=', True), ('state', '!=', 'done')]}"
+                        class="oe_highlight"
+                    />
+                    <button
+                        type="object"
+                        name="cancel2draft"
+                        string="Back to Draft"
+                        states="cancel"
+                        groups="donation.group_donation_user"
+                    />
+                    <button
+                        type="object"
+                        name="done2cancel"
+                        string="Cancel"
+                        groups="donation.group_donation_user"
+                        states="done"
+                        invisible="context.get('recurring_view')"
+                    />
+                    <button
+                        type="object"
+                        name="save_default_values"
+                        string="Save Default Values"
+                        groups="donation.group_donation_user"
+                        invisible="context.get('recurring_view')"
+                    />
+                    <field
+                        name="state"
+                        widget="statusbar"
+                        invisible="context.get('recurring_view')"
+                        statusbar_visible="draft,done"
+                    />
+                </header>
+                <sheet>
+                    <div class="oe_button_box" name="button_box" />
+                    <div class="oe_title">
+                        <h1>
+                            <field name="number" readonly="1" />
+                        </h1>
+                    </div>
+                    <group name="main">
+                        <group name="manual">
+                            <field name="partner_id" />
+                            <field name="commercial_partner_id" invisible="1" />
+                            <field name="payment_mode_id" widget="selection" />
+                            <field
+                                name="currency_id"
+                                groups="base.group_multi_currency"
+                            />
+                                <field name="company_currency_id" invisible="1" />
+                            <field
+                                name="check_total"
+                                groups="donation.group_donation_check_total"
+                            />
+                            <field name="payment_ref" />
+                            <field
+                                name="donation_date"
+                                options="{'datepicker': {'warn_future': true}}"
+                            />
+                            <field name="campaign_id" />
+                            <field name="thanks_template_id" widget="selection" />
+                        </group>
+                        <group name="auto">
+                            <field name="company_id" invisible="1" />
+                            <field
+                                name="company_id"
+                                groups="base.group_multi_company"
+                            />
+                            <label for="tax_receipt_option" />
+                            <div name="tax_receipt_option">
+                                <field name="tax_receipt_option" class="oe_inline" />
+                                <button
+                                    name="%(donation_tax_receipt_option_switch_action)d"
+                                    string="Change"
+                                    type="action"
+                                    class="oe_link"
+                                    attrs="{'invisible': ['|', ('state', '!=', 'done'), ('tax_receipt_id', '!=', False)]}"
+                                />
+                            </div>
+                            <field name="tax_receipt_total" />
+                            <field name="tax_receipt_id" />
+                            <field name="thanks_printed" />
+                        </group>
+                    </group>
+                    <notebook>
+                        <page string="Donation Lines" name="lines">
+                            <field name="line_ids" nolabel="1" />
+                            <group name="subtotal" class="oe_subtotal_footer oe_right">
+                                <field
+                                    name="amount_total"
+                                    string="Total"
+                                    class="oe_subtotal_footer_separator"
+                                />
+                            </group>
+                        </page>
+                        <page string="Other Information" name="other">
+                            <group name="other">
+                            <group name="other-left">
+                                <field name="move_id" />
+                                <field name="bank_statement_line_id" />
+                                <field
+                                        name="amount_total_company_currency"
+                                        groups="base.group_multi_currency"
+                                    />
+                            </group>
+                            <group name="other-right">
+                            </group>
+                            </group>
+                        </page>
+                    </notebook>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" />
+                    <field name="activity_ids" widget="mail_activity" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </form>
+        </field>
+    </record>
+    <record id="donation_from_bank_statement_line_form" model="ir.ui.view">
+        <field name="name">Creation Donation from Bank Statement Line form</field>
+        <field name="model">donation.donation</field>
+        <field name="priority">100</field>
+        <field name="arch" type="xml">
+            <form>
+                <group name="main">
+                    <group name="manual">
+                        <field name="partner_id" readonly="1" />
+                        <field name="commercial_partner_id" invisible="1" />
+                        <field name="payment_mode_id" readonly="1" />
+                        <field
+                            name="currency_id"
+                            groups="base.group_multi_currency"
+                            readonly="1"
+                        />
+                            <field name="company_currency_id" invisible="1" />
+                        <field
+                            name="check_total"
+                            groups="donation.group_donation_check_total"
+                            readonly="1"
+                        />
+                        <field name="payment_ref" />
+                        <field
+                            name="donation_date"
+                            options="{'datepicker': {'warn_future': true}}"
+                        />
+                        <field name="campaign_id" />
+                        <field name="thanks_template_id" widget="selection" />
+                    </group>
+                    <group name="auto">
+                        <field name="company_id" invisible="1" />
+                        <field name="state" invisible="1" />
+                        <field
+                            name="company_id"
+                            groups="base.group_multi_company"
+                            readonly="1"
+                        />
+                        <field name="tax_receipt_option" />
+                        <field name="tax_receipt_total" />
+                        <field name="bank_statement_line_id" />
+                    </group>
+                    </group>
+                    <group name="lines" string="Lines" colspan="2">
+                        <field name="line_ids" nolabel="1" />
+                        <group name="subtotal" class="oe_subtotal_footer oe_right">
+                            <field
+                            name="amount_total"
+                            string="Total"
+                            class="oe_subtotal_footer_separator"
+                        />
+                        </group>
+                </group>
+                <footer>
+                    <button
+                        type="object"
+                        name="validate"
+                        string="Validate"
+                        class="btn-primary"
+                        states="draft"
+                        groups="donation.group_donation_user"
+                    />
+                    <button
+                        type="object"
+                        name="save_as_draft"
+                        string="Save as Draft"
+                        states="draft"
+                        groups="donation.group_donation_user"
+                    />
+                </footer>
+            </form>
+        </field>
+    </record>
+
+
+
+    <record id="donation_tree" model="ir.ui.view">
+        <field name="name">donation.tree</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <tree>
+                <header>
+                        <button
+                        name="%(donation_validate_action)d"
+                        type="action"
+                        string="Validate"
+                        groups="donation.group_donation_user"
+                        invisible="context.get('recurring_view')"
+                    />
+                        <button
+                        name="thanks_printed_button"
+                        type="object"
+                        string="Mark as Thanks Printed"
+                        groups="donation.group_donation_user"
+                        invisible="context.get('recurring_view')"
+                        confirm="Mark all selected donation as Thanks Printed?"
+                    />
+                        <!-- Unfortunately, confirm="" doesn't work for
+                            buttons in tree view... at least not in v14 -->
+                    </header>
+                <field
+                    name="number"
+                    invisible="context.get('recurring_view')"
+                    decoration-bf="1"
+                />
+                <field name="partner_id" invisible="context.get('partner_view')" />
+                <field name="donation_date" />
+                <field name="amount_total_company_currency" sum="1" />
+                <field name="amount_total" optional="hide" />
+                <field name="currency_id" invisible="1" />
+                <field name="company_currency_id" invisible="1" />
+                <field name="payment_mode_id" />
+                <field
+                    name="tax_receipt_option"
+                    optional="hide"
+                    widget="badge"
+                    decoration-success="tax_receipt_option == 'each'"
+                    decoration-info="tax_receipt_option == 'annual'"
+                />
+                <field name="campaign_id" optional="show" />
+                <field name="thanks_template_id" optional="hide" />
+                <field name="thanks_printed" optional="hide" />
+                <field name="payment_ref" optional="hide" />
+                <field
+                    name="company_id"
+                    groups="base.group_multi_company"
+                    optional="show"
+                />
+                <field
+                    name="state"
+                    invisible="context.get('recurring_view')"
+                    widget="badge"
+                    decoration-info="state == 'draft'"
+                    decoration-muted="state == 'cancel'"
+                    decoration-success="state == 'done'"
+                />
+            </tree>
+        </field>
+    </record>
+    <record id="donation_search" model="ir.ui.view">
+        <field name="name">donation.search</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <search>
+                <field name="number" />
+                <field name="partner_id" />
+                <separator />
+                <filter string="Date" name="donation_date" date="donation_date" />
+                <separator />
+                <filter
+                    name="draft"
+                    string="Draft"
+                    domain="[('state', '=', 'draft')]"
+                />
+                <filter name="done" string="Done" domain="[('state', '=', 'done')]" />
+                <filter
+                    name="cancel"
+                    string="Cancelled"
+                    domain="[('state', '=', 'cancel')]"
+                />
+                <separator />
+            <filter
+                    name="thanks_to_print"
+                    string="Thanks to Print"
+                    domain="[('thanks_printed', '=', False)]"
+                />
+                <group string="Group By" name="groupby">
+                    <filter
+                        name="date_groupby"
+                        string="Date"
+                        context="{'group_by': 'donation_date'}"
+                    />
+                    <filter
+                        name="partner_groupby"
+                        string="Donor"
+                        context="{'group_by': 'partner_id'}"
+                    />
+                    <filter
+                        name="commercial_partner_groupby"
+                        string="Parent Donor"
+                        context="{'group_by': 'commercial_partner_id'}"
+                    />
+                    <filter
+                        name="partner_country_groupby"
+                        string="Partner Country"
+                        context="{'group_by': 'country_id'}"
+                    />
+                    <filter
+                        name="state_groupby"
+                        string="State"
+                        context="{'group_by': 'state'}"
+                    />
+                    <filter
+                        name="campaign_groupby"
+                        string="Campaign"
+                        context="{'group_by': 'campaign_id'}"
+                    />
+                    <filter
+                        name="currency_groupby"
+                        string="Currency"
+                        context="{'group_by': 'currency_id'}"
+                    />
+                    <filter
+                        name="payment_mode_groupby"
+                        string="Payment Mode"
+                        context="{'group_by': 'payment_mode_id'}"
+                    />
+                    <filter
+                        name="tax_receipt_option_groupby"
+                        string="Tax Receipt Option"
+                        context="{'group_by': 'tax_receipt_option'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="donation_graph" model="ir.ui.view">
+        <field name="name">donation.graph</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <graph>
+                <field name="donation_date" type="row" />
+                <field name="amount_total_company_currency" type="measure" />
+            </graph>
+        </field>
+    </record>
+    <record id="donation_pivot" model="ir.ui.view">
+        <field name="name">donation.pivot</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <pivot>
+                <field name="donation_date" type="row" />
+                <field name="amount_total_company_currency" type="measure" />
+            </pivot>
+        </field>
+    </record>
+    <record id="donation_line_tree" model="ir.ui.view">
+        <field name="name">donation.line.tree</field>
+        <field name="model">donation.line</field>
+        <field name="arch" type="xml">
+            <tree editable="bottom">
+                <field name="sequence" widget="handle" />
+                <field
+                    name="donation_id"
+                    invisible="not context.get('donation_line_main_view')"
+                />
+                <field name="product_id" context="{'default_donation': True}" />
+                <field name="product_detailed_type" optional="hide" />
+                <field name="quantity" />
+                <field name="unit_price" />
+                <field
+                    name="analytic_distribution"
+                    widget="analytic_distribution"
+                    groups="analytic.group_analytic_accounting"
+                    options="{'product_field': 'product_id', 'business_domain': 'donation'}"
+                />
+                <field name="amount" />
+                <field name="tax_receipt_ok" string="Tax Receipt" optional="show" />
+                <field name="in_kind" optional="hide" />
+                <field name="currency_id" invisible="1" />
+                <field name="company_id" invisible="1" />
+            </tree>
+        </field>
+    </record>
+    <record id="donation_line_form" model="ir.ui.view">
+        <field name="name">donation.line.form</field>
+        <field name="model">donation.line</field>
+        <field name="arch" type="xml">
+            <form>
+                <group name="main">
+                    <field
+                        name="donation_id"
+                        invisible="not context.get('donation_line_main_view')"
+                    />
+                    <field name="product_id" />
+                    <field name="quantity" />
+                    <field name="unit_price" />
+                    <field
+                        name="analytic_distribution"
+                        widget="analytic_distribution"
+                        groups="analytic.group_analytic_accounting"
+                        options="{'product_field': 'product_id'}"
+                    />
+                    <field name="amount" />
+                    <field name="tax_receipt_ok" />
+                    <field name="amount_company_currency" />
+                    <field name="in_kind" />
+                    <field name="currency_id" invisible="1" />
+                    <field name="company_currency_id" invisible="1" />
+                    <field name="company_id" invisible="1" />
+                    <field name="product_detailed_type" invisible="1" />
+                </group>
+            </form>
+        </field>
+    </record>
+    <record id="donation_action" model="ir.actions.act_window">
+        <field name="name">Donations</field>
+        <field name="res_model">donation.donation</field>
+        <field name="view_mode">tree,form,pivot,graph</field>
+    </record>
+    <record id="donation_line_action" model="ir.actions.act_window">
+        <field name="name">Donations Lines</field>
+        <field name="res_model">donation.line</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="donation_top_menu"
+        sequence="38"
+        web_icon="donation,static/description/icon.png"
+        name="Donation"
+        groups="group_donation_viewer"
+    />
+    <menuitem
+        id="donation_title_menu"
+        parent="donation_top_menu"
+        sequence="15"
+        name="Donations"
+    />
+    <menuitem
+        id="donation_menu"
+        action="donation_action"
+        parent="donation_title_menu"
+        sequence="10"
+    />
+    <menuitem
+        id="donation_config_menu"
+        parent="donation_top_menu"
+        name="Configuration"
+        sequence="30"
+        groups="donation.group_donation_manager"
+    />
+    <menuitem
+        id="donor"
+        action="donation_base.res_partner_action_donor"
+        parent="donation_title_menu"
+        sequence="50"
+        name="Donors"
+    />
+    <record id="donation_product_action" model="ir.actions.act_window">
+        <field name="name">Products</field>
+        <field name="res_model">product.template</field>
+        <field name="view_mode">kanban,tree,form</field>
+        <field
+            name="context"
+        >{'search_default_filter_donation': 1, 'default_detailed_type': 'donation'}</field>
+    </record>
+    <menuitem
+        id="donation_products"
+        action="donation_product_action"
+        parent="donation_config_menu"
+        sequence="20"
+    />
+    <menuitem
+        id="donation_tax_title_menu"
+        parent="donation.donation_top_menu"
+        sequence="20"
+        name="Tax Receipts"
+    />
+    <menuitem
+        id="donation_tax_receipt_menu"
+        action="donation_base.donation_tax_receipt_action"
+        parent="donation_tax_title_menu"
+        sequence="20"
+    />
+    <menuitem
+        id="tax_receipt_annual_create_menu"
+        sequence="45"
+        action="donation_base.tax_receipt_annual_create_action"
+        parent="donation_tax_title_menu"
+        groups="donation.group_donation_user"
+    />
+    <menuitem
+        id="donation_tax_receipt_print_menu"
+        sequence="40"
+        action="donation_base.donation_tax_receipt_print_action"
+        parent="donation_tax_title_menu"
+        groups="donation.group_donation_user"
+    />
+</odoo>
diff --git a/donation/views/donation_campaign.xml b/donation/views/donation_campaign.xml
new file mode 100644
index 000000000..dd9a36982
--- /dev/null
+++ b/donation/views/donation_campaign.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_campaign_form" model="ir.ui.view">
+        <field name="name">donation.campaign.form</field>
+        <field name="model">donation.campaign</field>
+        <field name="arch" type="xml">
+            <form>
+                    <sheet>
+                    <widget
+                        name="web_ribbon"
+                        title="Archived"
+                        bg_color="bg-danger"
+                        attrs="{'invisible': [('active', '=', True)]}"
+                    />
+
+                <group name="main">
+                    <field name="name" />
+                    <field name="code" />
+                    <field name="company_id" groups="base.group_multi_company" />
+                    <field name="start_date" />
+                    <field name="note" />
+                    <field name="active" invisible="1" />
+                    <field name="company_id" invisible="1" />
+                </group>
+        </sheet>
+            </form>
+        </field>
+    </record>
+    <record id="donation_campaign_tree" model="ir.ui.view">
+        <field name="name">donation.campaign.tree</field>
+        <field name="model">donation.campaign</field>
+        <field name="arch" type="xml">
+            <tree>
+                <field name="sequence" widget="handle" />
+                <field name="code" optional="show" />
+                <field name="name" />
+                <field name="start_date" optional="show" />
+                <field
+                    name="company_id"
+                    groups="base.group_multi_company"
+                    optional="show"
+                />
+            </tree>
+        </field>
+    </record>
+    <record id="donation_campaign_search" model="ir.ui.view">
+        <field name="name">donation.campaign.search</field>
+        <field name="model">donation.campaign</field>
+        <field name="arch" type="xml">
+            <search>
+                    <field
+                    name="name"
+                    filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"
+                    string="Name or Code"
+                />
+                    <field name="code" />
+                <separator />
+                <filter
+                    string="Archived"
+                    name="inactive"
+                    domain="[('active', '=', False)]"
+                />
+                        <group name="groupby">
+                                <filter
+                        name="company_groupby"
+                        string="Company"
+                        context="{'group_by': 'company_id'}"
+                    />
+                        </group>
+            </search>
+        </field>
+    </record>
+    <record id="donation_campaign_action" model="ir.actions.act_window">
+        <field name="name">Donation Campaigns</field>
+        <field name="res_model">donation.campaign</field>
+        <field name="view_mode">tree,form</field>
+    </record>
+    <menuitem
+        id="donation_campaign_menu"
+        action="donation_campaign_action"
+        parent="donation_config_menu"
+        sequence="40"
+    />
+</odoo>
diff --git a/donation/views/donation_tax_receipt.xml b/donation/views/donation_tax_receipt.xml
new file mode 100644
index 000000000..af7f785fa
--- /dev/null
+++ b/donation/views/donation_tax_receipt.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_tax_receipt_form" model="ir.ui.view">
+        <field name="name">donation.donation.tax.receipt.form</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="inherit_id" ref="donation_base.donation_tax_receipt_form" />
+        <field name="arch" type="xml">
+            <group name="main" position="after">
+                <group name="donations" string="Related Donations">
+                    <field name="donation_ids" nolabel="1" colspan="2" />
+                </group>
+            </group>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/views/donation_thanks_template.xml b/donation/views/donation_thanks_template.xml
new file mode 100644
index 000000000..b6af12dbe
--- /dev/null
+++ b/donation/views/donation_thanks_template.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2019 Akretion France
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+
+
+<record id="donation_thanks_template_form" model="ir.ui.view">
+    <field name="model">donation.thanks.template</field>
+    <field name="arch" type="xml">
+        <form>
+            <sheet>
+                <widget
+                        name="web_ribbon"
+                        title="Archived"
+                        bg_color="bg-danger"
+                        attrs="{'invisible': [('active', '=', True)]}"
+                    />
+                <group name="main">
+                    <field name="name" />
+                    <field name="text" />
+                    <field name="image" widget="image" />
+                    <field name="company_id" groups="base.group_multi_company" />
+                    <field name="active" invisible="1" />
+                </group>
+            </sheet>
+        </form>
+    </field>
+</record>
+
+<record id="donation_thanks_template_tree" model="ir.ui.view">
+    <field name="model">donation.thanks.template</field>
+    <field name="arch" type="xml">
+        <tree>
+            <field name="sequence" widget="handle" />
+            <field name="name" />
+            <field
+                    name="company_id"
+                    groups="base.group_multi_company"
+                    optional="show"
+                />
+        </tree>
+    </field>
+</record>
+
+<record id="donation_thanks_template_search" model="ir.ui.view">
+    <field name="model">donation.thanks.template</field>
+    <field name="arch" type="xml">
+        <search>
+            <field name="name" />
+            <filter
+                    string="Archived"
+                    name="inactive"
+                    domain="[('active', '=', False)]"
+                />
+        </search>
+    </field>
+</record>
+
+<record id="donation_thanks_template_action" model="ir.actions.act_window">
+    <field name="name">Thanks Letter Templates</field>
+    <field name="res_model">donation.thanks.template</field>
+    <field name="view_mode">tree,form</field>
+</record>
+
+<menuitem
+        id="donation_thanks_template_menu"
+        action="donation_thanks_template_action"
+        parent="donation.donation_config_menu"
+        sequence="50"
+    />
+
+</odoo>
diff --git a/donation/views/res_partner.xml b/donation/views/res_partner.xml
new file mode 100644
index 000000000..3e12cf823
--- /dev/null
+++ b/donation/views/res_partner.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" ?>
+<!--
+  © 2014-2016 Barroux Abbey (http://www.barroux.org)
+  © 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="partner_donation_action" model="ir.actions.act_window">
+        <field name="name">Donations</field>
+        <field name="res_model">donation.donation</field>
+        <field name="view_mode">tree,form,graph</field>
+        <field name="context">{'search_default_partner_id': active_id}</field>
+    </record>
+    <record id="view_partner_property_form" model="ir.ui.view">
+        <field name="name">donation.button.res.partner.form</field>
+        <field name="model">res.partner</field>
+        <field name="inherit_id" ref="donation_base.view_partner_property_form" />
+        <field name="arch" type="xml">
+            <button id="donation_tax_receipt_button" position="before">
+                <button
+                    class="oe_stat_button"
+                    type="action"
+                    name="%(donation.partner_donation_action)d"
+                    icon="fa-heart-o"
+                    groups="donation.group_donation_viewer"
+                >
+                    <field string="Donations" name="donation_count" widget="statinfo" />
+                </button>
+            </button>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/views/res_users.xml b/donation/views/res_users.xml
new file mode 100644
index 000000000..94a69aae7
--- /dev/null
+++ b/donation/views/res_users.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="view_users_form" model="ir.ui.view">
+        <field name="name">donation.res.users.form</field>
+        <field name="model">res.users</field>
+        <field name="inherit_id" ref="base.view_users_form" />
+        <field name="arch" type="xml">
+            <group name="preferences" position="inside">
+                <field name="context_donation_payment_mode_id" />
+                <field name="context_donation_campaign_id" />
+            </group>
+        </field>
+    </record>
+    <record id="view_users_form_simple_modif" model="ir.ui.view">
+        <field name="name">donation.preferences.res.users.form</field>
+        <field name="model">res.users</field>
+        <field name="inherit_id" ref="base.view_users_form_simple_modif" />
+        <field name="arch" type="xml">
+                <field name="tz" position="after">
+                <field
+                    name="context_donation_payment_mode_id"
+                    groups="donation.group_donation_user"
+                    readonly="0"
+                />
+                <field
+                    name="context_donation_campaign_id"
+                    groups="donation.group_donation_user"
+                    readonly="0"
+                />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/wizard/__init__.py b/donation/wizard/__init__.py
new file mode 100644
index 000000000..4dd8fb569
--- /dev/null
+++ b/donation/wizard/__init__.py
@@ -0,0 +1,3 @@
+from . import donation_validate
+from . import tax_receipt_option_switch
+from . import res_config_settings
diff --git a/donation/wizard/donation_validate.py b/donation/wizard/donation_validate.py
new file mode 100644
index 000000000..e9da64c99
--- /dev/null
+++ b/donation/wizard/donation_validate.py
@@ -0,0 +1,22 @@
+# Copyright 2014-2016 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2016 Akretion France
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import models
+
+
+class DonationValidate(models.TransientModel):
+    _name = "donation.validate"
+    _description = "Validate Donations"
+
+    def run(self):
+        self.ensure_one()
+        assert (
+            self.env.context.get("active_model") == "donation.donation"
+        ), "Source model must be donations"
+        assert self.env.context.get("active_ids"), "No donations selected"
+        donations = self.env["donation.donation"].browse(
+            self.env.context.get("active_ids")
+        )
+        donations.filtered(lambda x: x.state == "draft").validate()
+        return
diff --git a/donation/wizard/donation_validate_view.xml b/donation/wizard/donation_validate_view.xml
new file mode 100644
index 000000000..7522d0e75
--- /dev/null
+++ b/donation/wizard/donation_validate_view.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2016 Barroux Abbey (www.barroux.org)
+  Copyright 2014-2016 Akretion France (www.akretion.com)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_validate_form" model="ir.ui.view">
+        <field name="name">donation_validate.form</field>
+        <field name="model">donation.validate</field>
+        <field name="arch" type="xml">
+            <form string="Validate Donations">
+                <p>
+                    This wizard will validate all the draft donations selected.
+                </p>
+                <footer>
+                    <button
+                        type="object"
+                        name="run"
+                        string="Validate"
+                        class="btn-primary"
+                    />
+                    <button special="cancel" string="Cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+    <record id="donation_validate_action" model="ir.actions.act_window">
+        <field name="name">Validate Draft Donations</field>
+        <field name="res_model">donation.validate</field>
+        <field name="view_mode">form</field>
+        <field name="target">new</field>
+    </record>
+</odoo>
diff --git a/donation/wizard/res_config_settings.py b/donation/wizard/res_config_settings.py
new file mode 100644
index 000000000..5f5870529
--- /dev/null
+++ b/donation/wizard/res_config_settings.py
@@ -0,0 +1,23 @@
+# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class ResConfigSettings(models.TransientModel):
+    _inherit = "res.config.settings"
+
+    donation_credit_transfer_product_id = fields.Many2one(
+        related="company_id.donation_credit_transfer_product_id", readonly=False
+    )
+    donation_account_id = fields.Many2one(
+        related="company_id.donation_account_id",
+        readonly=False,
+        domain="[('reconcile', '=', True), ('deprecated', '=', False), "
+        "('company_id', '=', company_id), ('account_type', '=', 'asset_current')]",
+    )
+    group_donation_check_total = fields.Boolean(
+        string="Check Total on Donations",
+        implied_group="donation.group_donation_check_total",
+    )
diff --git a/donation/wizard/res_config_settings.xml b/donation/wizard/res_config_settings.xml
new file mode 100644
index 000000000..9c75bb5e5
--- /dev/null
+++ b/donation/wizard/res_config_settings.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="res_config_settings_donation" model="ir.ui.view">
+        <field name="name">donation.res.config.settings.form</field>
+        <field name="model">res.config.settings</field>
+        <field name="inherit_id" ref="base.res_config_settings_view_form" />
+        <field name="arch" type="xml">
+            <xpath expr="//div[hasclass('settings')]" position="inside">
+                <div
+                    class="app_settings_block"
+                    data-string="Donation"
+                    string="Donation"
+                    data-key="donation"
+                    groups="donation.group_donation_manager"
+                >
+                    <h2>Donation</h2>
+                    <div class="row mt16 o_settings_container" id="donation">
+                        <div
+                            class="col-12 col-lg-12 o_setting_box"
+                            id="donation-settings"
+                        >
+                            <div class="o_setting_left_pane" />
+                            <div class="o_setting_right_pane">
+                                <div
+                                    class="row"
+                                    id="donation_credit_transfer_product_id"
+                                >
+                                    <label
+                                        for="donation_credit_transfer_product_id"
+                                        class="col-md-5"
+                                    />
+                                    <field name="donation_credit_transfer_product_id" />
+                                </div>
+                            </div>
+                            <div class="o_setting_left_pane" />
+                            <div class="o_setting_right_pane">
+                                <label for="donation_account_id" class="col-md-5" />
+                                <field
+                                    name="donation_account_id"
+                                    context="{'default_reconcile': True, 'default_account_type': 'asset_current'}"
+                                />
+                            </div>
+                        </div>
+                       <div
+                            class="col-12 col-lg-6 o_setting_box"
+                            id="donation_check_total"
+                        >
+                            <div class="o_setting_left_pane">
+                                    <field name="group_donation_check_total" />
+                            </div>
+                            <div class="o_setting_right_pane">
+                                <label for="group_donation_check_total" />
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </xpath>
+        </field>
+    </record>
+
+    <record id="donation_settings_action" model="ir.actions.act_window">
+        <field name="name">Settings</field>
+        <field name="res_model">res.config.settings</field>
+        <field name="view_mode">form</field>
+        <field name="target">inline</field>
+        <field name="context">{'module' : 'donation', 'bin_size': False}</field>
+    </record>
+
+<menuitem
+        id="donation_settings_menu"
+        parent="donation_config_menu"
+        sequence="10"
+        action="donation_settings_action"
+        groups="base.group_system"
+    />
+
+</odoo>
diff --git a/donation/wizard/tax_receipt_option_switch.py b/donation/wizard/tax_receipt_option_switch.py
new file mode 100644
index 000000000..cd290857c
--- /dev/null
+++ b/donation/wizard/tax_receipt_option_switch.py
@@ -0,0 +1,32 @@
+# Copyright 2017 Barroux Abbey (www.barroux.org)
+# Copyright 2017 Akretion France (www.akretion.com)
+# @author Alexis de Lattre <alexis.delattre@akretion.com>
+
+from odoo import fields, models
+
+
+class DonationTaxReceiptOptionSwitch(models.TransientModel):
+    _name = "donation.tax.receipt.option.switch"
+    _description = "Switch Donation Tax Receipt Option"
+
+    donation_id = fields.Many2one(
+        "donation.donation",
+        string="Donation",
+        required=True,
+        default=lambda self: self._context.get("active_id"),
+    )
+    new_tax_receipt_option = fields.Selection(
+        [("each", "For Each Donation"), ("annual", "Annual Tax Receipt")],
+        string="Tax Receipt Option",
+        required=True,
+    )
+
+    def switch(self):
+        self.ensure_one()
+        assert self.donation_id, "Missing donation"
+        assert not self.donation_id.tax_receipt_id, "Already linked to a tax receipt"
+        self.donation_id.write({"tax_receipt_option": self.new_tax_receipt_option})
+        receipt = self.donation_id.generate_each_tax_receipt()
+        if receipt:
+            self.donation_id.write({"tax_receipt_id": receipt.id})
+        return
diff --git a/donation/wizard/tax_receipt_option_switch_view.xml b/donation/wizard/tax_receipt_option_switch_view.xml
new file mode 100644
index 000000000..cf0b73483
--- /dev/null
+++ b/donation/wizard/tax_receipt_option_switch_view.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2017-2021 Barroux Abbey (www.barroux.org)
+  Copyright 2017-2021 Akretion France (www.akretion.com)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  @author: Brother Bernard <informatique _at_ barroux.org>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_tax_receipt_option_switch_form" model="ir.ui.view">
+        <field name="name">donation_tax_receipt_option_switch.form</field>
+        <field name="model">donation.tax.receipt.option.switch</field>
+        <field name="arch" type="xml">
+            <form string="Change Tax Receipt Option">
+                <group name="main">
+                    <field name="donation_id" readonly="1" />
+                    <field name="new_tax_receipt_option" />
+                </group>
+                <footer>
+                    <button
+                        type="object"
+                        name="switch"
+                        string="Update"
+                        class="btn-primary"
+                    />
+                    <button special="cancel" string="Cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+    <record
+        id="donation_tax_receipt_option_switch_action"
+        model="ir.actions.act_window"
+    >
+        <field name="name">Change Tax Receipt Option</field>
+        <field name="res_model">donation.tax.receipt.option.switch</field>
+        <field name="view_mode">form</field>
+        <field name="target">new</field>
+    </record>
+</odoo>
diff --git a/donation_bank_statement_oca/README.rst b/donation_bank_statement_oca/README.rst
new file mode 100644
index 000000000..4a20fa380
--- /dev/null
+++ b/donation_bank_statement_oca/README.rst
@@ -0,0 +1,1 @@
+Will be autogenerated from readme subdir
diff --git a/donation_bank_statement_oca/__init__.py b/donation_bank_statement_oca/__init__.py
new file mode 100644
index 000000000..0650744f6
--- /dev/null
+++ b/donation_bank_statement_oca/__init__.py
@@ -0,0 +1,1 @@
+from . import models
diff --git a/donation_bank_statement_oca/__manifest__.py b/donation_bank_statement_oca/__manifest__.py
new file mode 100644
index 000000000..cd22dba99
--- /dev/null
+++ b/donation_bank_statement_oca/__manifest__.py
@@ -0,0 +1,19 @@
+# Copyright 2023 Akretion France (http://www.akretion.com/)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+    "name": "Donation Bank Statement OCA",
+    "version": "16.0.1.0.0",
+    "category": "Accounting",
+    "license": "AGPL-3",
+    "summary": "Manage donations by credit transfer",
+    "author": "Akretion, Odoo Community Association (OCA)",
+    "maintainers": ["alexis-via"],
+    "website": "https://github.com/OCA/donation",
+    "depends": ["donation", "account_reconcile_oca"],
+    "data": [
+        "views/account_bank_statement_line.xml",
+    ],
+    "installable": True,
+    "auto_install": True,
+}
diff --git a/donation_bank_statement_oca/models/__init__.py b/donation_bank_statement_oca/models/__init__.py
new file mode 100644
index 000000000..b625fd629
--- /dev/null
+++ b/donation_bank_statement_oca/models/__init__.py
@@ -0,0 +1,1 @@
+from . import account_bank_statement_line
diff --git a/donation_bank_statement_oca/models/account_bank_statement_line.py b/donation_bank_statement_oca/models/account_bank_statement_line.py
new file mode 100644
index 000000000..86e416f9d
--- /dev/null
+++ b/donation_bank_statement_oca/models/account_bank_statement_line.py
@@ -0,0 +1,56 @@
+# Copyright 2023 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, models
+from odoo.exceptions import UserError
+
+
+class AccountBankStatementLine(models.Model):
+    _inherit = "account.bank.statement.line"
+
+    def donation_reconcile_bank_line(self):
+        self.ensure_one()
+        journal = self.journal_id
+        if journal.reconcile_mode != "edit":
+            raise UserError(
+                _(
+                    "The reconcile mode of the bank journal '%(journal)s' is "
+                    "'%(reconcile_mode)s'. For donations, the only supported "
+                    "reconcile mode is 'Edit'.",
+                    journal=journal.display_name,
+                    reconcile_mode=journal._fields["reconcile_mode"].convert_to_export(
+                        journal.reconcile_mode, journal
+                    ),
+                )
+            )
+        self._check_statement_line_donation()
+        self.reconcile_mode = self.journal_id.reconcile_mode
+        return getattr(self, "_donation_reconcile_bank_line_%s" % self.reconcile_mode)(
+            self.reconcile_data_info["data"]
+        )
+
+    def _donation_reconcile_bank_line_edit(self, data):
+        _liquidity_lines, suspense_lines, other_lines = self._seek_for_lines()
+        lines_to_remove = [(2, line.id) for line in suspense_lines + other_lines]
+
+        # Cleanup previous lines.
+        move = self.move_id
+        container = {"records": move, "self": move}
+        with move._check_balanced(container):
+            move.with_context(
+                skip_account_move_synchronization=True,
+                force_delete=True,
+                skip_invoice_sync=True,
+            ).write({"line_ids": lines_to_remove})
+            # create counter-part
+            vals = self._prepare_donation_counterpart_move_line_vals(
+                _liquidity_lines.debit
+            )
+            self.env["account.move.line"].with_context(
+                check_move_validity=False,
+                skip_sync_invoice=True,
+                skip_invoice_sync=True,
+            ).create(vals)
+        action = self._prepare_donation_action()
+        return action
diff --git a/donation_bank_statement_oca/readme/CONTRIBUTORS.rst b/donation_bank_statement_oca/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..ff65d68ce
--- /dev/null
+++ b/donation_bank_statement_oca/readme/CONTRIBUTORS.rst
@@ -0,0 +1,1 @@
+* Alexis de Lattre <alexis.delattre@akretion.com>
diff --git a/donation_bank_statement_oca/readme/DESCRIPTION.rst b/donation_bank_statement_oca/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..83d330ddf
--- /dev/null
+++ b/donation_bank_statement_oca/readme/DESCRIPTION.rst
@@ -0,0 +1,1 @@
+This module is a glue module between the modules **donation** module and **account_reconcile_oca** from `OCA/account-reconcile <https://github.com/OCA/account-reconcile>`_ which contains the OCA bank statement reconcile interface. It is needed to support donations by credit transfer where the donation is created while processing the bank statement line.
diff --git a/donation_bank_statement_oca/readme/USAGE.rst b/donation_bank_statement_oca/readme/USAGE.rst
new file mode 100644
index 000000000..77caad096
--- /dev/null
+++ b/donation_bank_statement_oca/readme/USAGE.rst
@@ -0,0 +1,16 @@
+In the OCA bank statement reconcile interface, you have a new button **Donation**.
+
+.. figure:: ../static/description/donation_bank_statement1.png
+   :scale: 80 %
+   :alt: OCA bank statement reconcile interface
+
+When you click on that **Donation** button, Odoo opens a pop-up with a simplified pre-filled donation form view.
+
+.. figure:: ../static/description/donation_bank_statement2.png
+   :scale: 80 %
+   :alt: pre-filled donation form view
+
+On this donation form view, you can modify the donation and then:
+
+* validate-it
+* or save it as draft
diff --git a/donation_bank_statement_oca/static/description/donation_bank_statement1.png b/donation_bank_statement_oca/static/description/donation_bank_statement1.png
new file mode 100644
index 000000000..953728846
Binary files /dev/null and b/donation_bank_statement_oca/static/description/donation_bank_statement1.png differ
diff --git a/donation_bank_statement_oca/static/description/donation_bank_statement2.png b/donation_bank_statement_oca/static/description/donation_bank_statement2.png
new file mode 100644
index 000000000..77ecb7957
Binary files /dev/null and b/donation_bank_statement_oca/static/description/donation_bank_statement2.png differ
diff --git a/donation_bank_statement_oca/views/account_bank_statement_line.xml b/donation_bank_statement_oca/views/account_bank_statement_line.xml
new file mode 100644
index 000000000..e607998f7
--- /dev/null
+++ b/donation_bank_statement_oca/views/account_bank_statement_line.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2023 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+
+
+<record id="bank_statement_line_form_reconcile_view" model="ir.ui.view">
+    <field name="model">account.bank.statement.line</field>
+    <field
+            name="inherit_id"
+            ref="account_reconcile_oca.bank_statement_line_form_reconcile_view"
+        />
+    <field name="arch" type="xml">
+        <button name="unreconcile_bank_line" position="before">
+            <button
+                    name="donation_reconcile_bank_line"
+                    type="object"
+                    string="Donation"
+                    class="btn btn-secondary"
+                    attrs="{'invisible': [('is_reconciled', '=', True)]}"
+                />
+        </button>
+    </field>
+</record>
+
+<record id="account_bank_statement_line_form" model="ir.ui.view">
+    <field name="model">account.bank.statement.line</field>
+    <field
+            name="inherit_id"
+            ref="account_statement_base.account_bank_statement_line_form"
+        />
+    <field name="arch" type="xml">
+        <field name="statement_id" position="after">
+            <field
+                    name="donation_ids"
+                    widget="many2many_tags"
+                    attrs="{'invisible': [('donation_ids', '=', [])]}"
+                />
+        </field>
+    </field>
+</record>
+
+
+</odoo>
diff --git a/setup/donation/odoo/addons/donation b/setup/donation/odoo/addons/donation
new file mode 120000
index 000000000..f23a64cfc
--- /dev/null
+++ b/setup/donation/odoo/addons/donation
@@ -0,0 +1,1 @@
+../../../../donation
\ No newline at end of file
diff --git a/setup/donation/setup.py b/setup/donation/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/donation/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)
diff --git a/setup/donation_bank_statement_oca/odoo/addons/donation_bank_statement_oca b/setup/donation_bank_statement_oca/odoo/addons/donation_bank_statement_oca
new file mode 120000
index 000000000..8228ac3c8
--- /dev/null
+++ b/setup/donation_bank_statement_oca/odoo/addons/donation_bank_statement_oca
@@ -0,0 +1,1 @@
+../../../../donation_bank_statement_oca
\ No newline at end of file
diff --git a/setup/donation_bank_statement_oca/setup.py b/setup/donation_bank_statement_oca/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/donation_bank_statement_oca/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)


Test patch:
diff --git a/donation/tests/__init__.py b/donation/tests/__init__.py
new file mode 100644
index 000000000..9bc50a42a
--- /dev/null
+++ b/donation/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import test_donation
diff --git a/donation/tests/test_donation.py b/donation/tests/test_donation.py
new file mode 100644
index 000000000..3339e94da
--- /dev/null
+++ b/donation/tests/test_donation.py
@@ -0,0 +1,332 @@
+# Copyright 2015-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+import time
+
+from odoo import fields
+from odoo.tests.common import TransactionCase
+
+
+class TestDonation(TransactionCase):
+
+    at_install = False
+    post_install = True
+
+    def setUp(self):
+        super().setUp()
+        self.bank_journal = self.env["account.journal"].create(
+            {
+                "type": "bank",
+                "name": "test bank journal",
+            }
+        )
+        self.payment_mode = self.env["account.payment.mode"].create(
+            {
+                "name": "test_payment_mode",
+                "donation": True,
+                "bank_account_link": "fixed",
+                "fixed_journal_id": self.bank_journal.id,
+                "payment_method_id": self.env.ref(
+                    "account.account_payment_method_manual_in"
+                ).id,
+            }
+        )
+        today = time.strftime("%Y-%m-%d")
+        self.product = self.env.ref("donation_base.product_product_donation")
+        self.inkind_product = self.env.ref(
+            "donation_base.product_product_inkind_donation"
+        )
+        self.ddo = self.env["donation.donation"]
+        self.donor1 = self.env.ref("donation_base.donor1")
+        self.donor2 = self.env.ref("donation_base.donor2")
+        self.donor3 = self.env.ref("donation_base.donor3")
+
+        self.don1 = self.ddo.create(
+            {
+                "check_total": 100,
+                "partner_id": self.donor1.id,
+                "donation_date": today,
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "each",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.product.id,
+                            "quantity": 1,
+                            "unit_price": 100,
+                        },
+                    )
+                ],
+            }
+        )
+        self.don2 = self.ddo.create(
+            {
+                "check_total": 120,
+                "partner_id": self.donor2.id,
+                "donation_date": today,
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "annual",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.product.id,
+                            "quantity": 1,
+                            "unit_price": 120,
+                        },
+                    )
+                ],
+            }
+        )
+        self.don3 = self.ddo.create(
+            {
+                "check_total": 150,
+                "partner_id": self.donor3.id,
+                "donation_date": today,
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "none",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.product.id,
+                            "quantity": 1,
+                            "unit_price": 150,
+                        },
+                    )
+                ],
+            }
+        )
+        self.don4 = self.ddo.create(
+            {
+                "check_total": 1000,
+                "partner_id": self.donor1.id,
+                "donation_date": today,
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "each",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.inkind_product.id,
+                            "quantity": 1,
+                            "unit_price": 1000,
+                        },
+                    )
+                ],
+            }
+        )
+        self.don5 = self.ddo.create(
+            {
+                "check_total": 1200,
+                "partner_id": self.donor1.id,
+                "donation_date": today,
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "each",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.inkind_product.id,
+                            "quantity": 1,
+                            "unit_price": 800,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.product.id,
+                            "quantity": 1,
+                            "unit_price": 400,
+                        },
+                    ),
+                ],
+            }
+        )
+
+    def test_donation_1(self):
+        donations = [self.don1, self.don2, self.don3, self.don4, self.don5]
+        for donation in donations:
+            self.assertEqual(donation.state, "draft")
+            donation.validate()
+            self.assertEqual(donation.state, "done")
+            if donation == self.don4:  # full in-kind donation
+                self.assertFalse(donation.move_id)
+            else:
+                self.assertEqual(donation.move_id.state, "posted")
+                self.assertEqual(donation.payment_ref, donation.move_id.ref)
+                self.assertEqual(
+                    donation.payment_mode_id.fixed_journal_id,
+                    donation.move_id.journal_id,
+                )
+                self.assertEqual(donation.donation_date, donation.move_id.date)
+            if donation.tax_receipt_option == "each" and donation.tax_receipt_total:
+                self.assertTrue(donation.tax_receipt_id)
+                tax_receipt = donation.tax_receipt_id
+                self.assertEqual(tax_receipt.type, "each")
+                self.assertEqual(donation.commercial_partner_id, tax_receipt.partner_id)
+                self.assertEqual(donation.donation_date, tax_receipt.donation_date)
+                self.assertEqual(donation.tax_receipt_total, tax_receipt.amount)
+
+    def test_donation_2(self):
+        self.donation_id = self.ddo.create(
+            {
+                "check_total": 1000,
+                "partner_id": self.donor1.id,
+                "donation_date": time.strftime("%Y-%m-%d"),
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "each",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.inkind_product.id,
+                            "quantity": 1,
+                            "unit_price": 1000,
+                        },
+                    )
+                ],
+            }
+        )
+        self.donation_id.name_get()
+        self.donation_id.save_default_values()
+        self.donation_id.tax_receipt_option_change()
+        self.donation_id.validate()
+        self.donation_id.tax_receipt_id = False
+        self.donation_id.done2cancel()
+        self.donation_id.cancel2draft()
+        self.donation_id.unlink()
+
+    def test_annual_tax_receipt(self):
+        self.res_partner = self.env["res.partner"]
+
+        partner_familly = self.res_partner.create(
+            {"name": "Famille Joly", "tax_receipt_option": "annual"}
+        )
+        partner_husband = self.res_partner.create(
+            {"parent_id": partner_familly.id, "name": "Xavier Joly"}
+        )
+        partner_wife = self.res_partner.create(
+            {"parent_id": partner_familly.id, "name": "Stéphanie Joly"}
+        )
+
+        partner_husband._compute_donation_count()
+        dons = self.create_donation_annual_receipt(
+            partner_husband, 40, 10, "CHQ FB 93283290"
+        )
+        dons += self.create_donation_annual_receipt(
+            partner_husband, 140, 60, "CHQ FB OPIE02"
+        )
+        dons += self.create_donation_annual_receipt(
+            partner_wife, 20, 5, "CHQ FB AZERTY1242"
+        )
+        dons.validate()
+        last_day_year = time.strftime("%Y-12-31")
+        wizard = self.env["tax.receipt.annual.create"].create(
+            {"start_date": time.strftime("%Y-01-01"), "end_date": last_day_year}
+        )
+        action = wizard.generate_annual_receipts()
+        tax_receipt_ids = action["domain"][0][2]
+        self.assertTrue(tax_receipt_ids)
+        dtro = self.env["donation.tax.receipt"]
+        tax_receipts = dtro.search(
+            [
+                ("partner_id", "=", partner_familly.id),
+                ("type", "=", "annual"),
+                ("id", "in", tax_receipt_ids),
+            ]
+        )
+        self.assertEqual(len(tax_receipts), 1)
+        tax_receipt = tax_receipts[0]
+        self.assertEqual(tax_receipt.amount, 200)
+        self.assertTrue(tax_receipt.number)
+        self.assertEqual(tax_receipt.date, fields.Date.from_string(last_day_year))
+        self.assertEqual(
+            tax_receipt.donation_date, fields.Date.from_string(last_day_year)
+        )
+        self.assertEqual(tax_receipt.currency_id, dons[0].company_id.currency_id)
+
+    def test_donation_campaign(self):
+        self.campaign_id = self.env.ref("donation.quest_origin")
+        self.campaign_id.name_get()
+
+        self.don8 = self.ddo.create(
+            {
+                "check_total": 1000,
+                "partner_id": self.donor1.id,
+                "donation_date": time.strftime("%Y-%m-%d"),
+                "payment_mode_id": self.payment_mode.id,
+                "tax_receipt_option": "each",
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.inkind_product.id,
+                            "quantity": 1,
+                            "unit_price": 1000,
+                        },
+                    )
+                ],
+            }
+        )
+
+        self.validate = self.env["donation.validate"]
+        wizard = self.validate.with_context(
+            active_ids=self.don8.ids,
+            active_model="donation.donation",
+            active_id=self.don8.id,
+        ).create({})
+        wizard.run()
+
+        self.option_switch = self.env["donation.tax.receipt.option.switch"]
+        wizard = self.option_switch.create(
+            {"donation_id": self.don8.id, "new_tax_receipt_option": "annual"}
+        )
+        self.don8.tax_receipt_id = False
+        wizard.switch()
+
+    def create_donation_annual_receipt(
+        self, partner, amount_tax_receipt, amount_no_tax_receipt, payment_ref
+    ):
+        donation = self.ddo.create(
+            {
+                "payment_mode_id": self.payment_mode.id,
+                "partner_id": partner.id,
+                "tax_receipt_option": "annual",
+                "donation_date": time.strftime("%Y-01-01"),
+                "payment_ref": payment_ref,
+                "line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.product.id,
+                            "quantity": 1,
+                            "unit_price": amount_tax_receipt,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": self.env.ref(
+                                "donation_base.product_product_donation_notaxreceipt"
+                            ).id,
+                            "quantity": 1,
+                            "unit_price": amount_no_tax_receipt,
+                        },
+                    ),
+                ],
+            }
+        )
+        return donation