Repository: OCA/donation (language: python)

Issue:
[MIG] donation_base: migration to 13.0
No major changes. I have followed the standard guide.

@etobella 
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..0c417d0de
--- /dev/null
+++ b/donation/README.rst
@@ -0,0 +1,103 @@
+========
+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/12.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-12-0/donation-12-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/12.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module handles donations, including in-kind donations. When you validate a donation,
+it will create the corresponding accounting entries.
+
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Configuration
+=============
+
+To configure this module, you need to:
+
+ * create donation products
+ * activate the option *Donation Payment Method* on some bank/cash account journals
+ * if you wish to have a control amount on the donation, add the users to the group *Check Total on supplier invoices*
+
+
+Usage
+=====
+
+To use this module, go to the menu Donations > Donations and start to register new donations.
+
+To have some statistics about the donations, go to the menu Reporting > Donations > Donations Analysis.
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+   :alt: Try me on Runbot
+   :target: https://runbot.odoo-community.org/runbot/180/11.0
+
+
+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:%2012.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>
+* Alba Riera <alba.riera@creublanca.es>
+
+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.
+
+This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/12.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..91548a988
--- /dev/null
+++ b/donation/__init__.py
@@ -0,0 +1,6 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import models
+from . import report
+from . import wizard
+from .post_install import update_account_journal
diff --git a/donation/__manifest__.py b/donation/__manifest__.py
new file mode 100644
index 000000000..6a1ff4260
--- /dev/null
+++ b/donation/__manifest__.py
@@ -0,0 +1,29 @@
+# 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).
+
+{
+    "name": "Donation",
+    "version": "13.0.1.0.0",
+    "category": "Accounting & Finance",
+    "license": "AGPL-3",
+    "summary": "Manage donations",
+    "author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
+    "website": "https://github.com/OCA/donation",
+    "depends": ["donation_base"],
+    "data": [
+        "security/donation_security.xml",
+        "security/ir.model.access.csv",
+        "wizard/tax_receipt_option_switch_view.xml",
+        "views/donation.xml",
+        "views/account.xml",
+        "views/donation_campaign.xml",
+        "views/users.xml",
+        "views/partner.xml",
+        "report/donation_report_view.xml",
+        "wizard/donation_validate_view.xml",
+    ],
+    "post_init_hook": "update_account_journal",
+    "demo": ["demo/donation_demo.xml"],
+    "installable": True,
+}
diff --git a/donation/demo/donation_demo.xml b/donation/demo/donation_demo.xml
new file mode 100644
index 000000000..bbb8f35d3
--- /dev/null
+++ b/donation/demo/donation_demo.xml
@@ -0,0 +1,18 @@
+<?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>
+</odoo>
diff --git a/donation/i18n/de.po b/donation/i18n/de.po
new file mode 100644
index 000000000..8ed90ee91
--- /dev/null
+++ b/donation/i18n/de.po
@@ -0,0 +1,763 @@
+# 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_res_partner_donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users_donation_count
+msgid "# of Donations"
+msgstr "# an Spenden"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:450
+#, 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:446
+#, 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.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_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
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr "Sammelspendenbescheinigung"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Zurücksetzen auf Entwurf"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Kampagne"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Abgebrochen"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:479
+#, python-format
+msgid "Cancelled Donation of %s"
+msgstr "Abgebrochene Spende von %s1"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:360
+#, python-format
+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!"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:372
+#, python-format
+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."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:367
+#, python-format
+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!"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_product_categ_id
+msgid "Category of Product"
+msgstr "Produktkategorie"
+
+#. module: donation
+#: model: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: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.fields,field_description:donation.field_donation_donation_company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_company_id
+#: model: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_report_company_currency_id
+msgid "Company Currency"
+msgstr "Unternehmenswährung"
+
+#. 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_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_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_company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line_currency_id
+#: model: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_journal_id
+msgid "Current Donation Payment Method"
+msgstr "Aktuelle Zahlungsmethode"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Datum"
+
+#. module: donation
+#: 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_option_switch_display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate_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_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.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tree
+msgid "Donation"
+msgstr "Spende"
+
+#. 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:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+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: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:ir.ui.view,arch_db:donation.donation_line_form
+#: model: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: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.model.fields,field_description:donation.field_account_journal_allow_donation
+msgid "Donation Payment Method"
+msgstr "Zahlungsmethode"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr "Spendenbescheinigung"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:240
+#, python-format
+msgid "Donation of %s"
+msgstr "Spende von %s"
+
+#. 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_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:ir.ui.menu,name:donation.donation_top_menu
+#: model:ir.ui.view,arch_db:donation.donation_graph
+#: model:ir.ui.view,arch_db:donation.donation_pivot
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+#: model: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:ir.ui.view,arch_db:donation.donation_report_graph
+#: model:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model: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
+#: selection:donation.donation,state:0
+#: model: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
+msgid "Donor"
+msgstr "Spender"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Spender"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Entwurf"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:477
+#, python-format
+msgid "Draft Donation of %s"
+msgstr "Spendenentwurf von %s1"
+
+#. 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: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:499
+#, python-format
+msgid "Error:"
+msgstr "Fehler:"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "For Each Donation"
+msgstr "Für jede Spende"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:397
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr "komplette Sachspende: keine Kontobewegung generiert"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Gruppieren nach"
+
+#. module: donation
+#: 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_option_switch_id
+#: model:ir.model.fields,field_description:donation.field_donation_validate_id
+msgid "ID"
+msgstr "ID"
+
+#. 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: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,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Jurnal"
+
+#. module: donation
+#: 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_option_switch___last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate___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_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_validate_write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. 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
+#: code:addons/donation/models/donation.py:273
+#, python-format
+msgid "Missing Default Debit Account on journal '%s'."
+msgstr "Fehlender Default Passivsaldo im '%s1'-Jurnal."
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_name
+msgid "Name"
+msgstr "Name"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+msgid "None"
+msgstr "Keine"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_nota
+msgid "Notes"
+msgstr "Notizen"
+
+#. module: donation
+#: model: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
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Partner"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner"
+msgstr "Parnter"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_country_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model: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_journal_id
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Method"
+msgstr "Zahlungsmethode"
+
+#. 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:ir.model.fields,field_description:donation.field_donation_line_product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_product_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Produkt"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Produktkategorie"
+
+#. 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:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+msgid "Related Donations"
+msgstr "Verbundene Spenden"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reports"
+msgstr "Berichte"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Speicher Default Werte"
+
+#. module: donation
+#: model: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_line_sequence
+msgid "Sequence"
+msgstr "Reihenfolge"
+
+#. 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:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "Status"
+
+#. 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: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: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
+#: code:addons/donation/models/donation.py:379
+#, python-format
+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."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:221
+#, python-format
+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!"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:458
+#, 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:462
+#, 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:466
+#, 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/account.py:19
+#, python-format
+msgid ""
+"The journal '%s' has the option 'Donation Payment Method', so it's type "
+"should be 'Cash' or 'Bank and Checks'."
+msgstr ""
+
+#. module: donation
+#: model: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:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr "Gesamt"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr "Wahr"
+
+#. 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.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:ir.ui.view,arch_db:donation.donation_form
+msgid "Validate"
+msgstr "Bestätigen"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model: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
+#: code:addons/donation/models/donation.py:431
+#, 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:501
+#, 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."
diff --git a/donation/i18n/donation.pot b/donation/i18n/donation.pot
new file mode 100644
index 000000000..46d4614ac
--- /dev/null
+++ b/donation/i18n/donation.pot
@@ -0,0 +1,731 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* donation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 11.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_res_partner_donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users_donation_count
+msgid "# of Donations"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:450
+#, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:446
+#, python-format
+msgid "A cancelled donation should not be linked to an account move"
+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_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
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr ""
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:479
+#, python-format
+msgid "Cancelled Donation of %s"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:360
+#, python-format
+msgid "Cannot validate the donation of %s because it doesn't have any lines!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:372
+#, python-format
+msgid "Cannot validate the donation of %s because it is not in draft state."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:367
+#, python-format
+msgid "Cannot validate the donation of %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: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: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.fields,field_description:donation.field_donation_donation_company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_company_id
+#: model: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_report_company_currency_id
+msgid "Company Currency"
+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_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_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_company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line_currency_id
+#: model: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_journal_id
+msgid "Current Donation Payment Method"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr ""
+
+#. module: donation
+#: 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_option_switch_display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate_display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_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.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tree
+msgid "Donation"
+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:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+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: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:ir.ui.view,arch_db:donation.donation_line_form
+#: model: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: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.model.fields,field_description:donation.field_account_journal_allow_donation
+msgid "Donation Payment Method"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+msgid "Donation Tax Receipts"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:240
+#, python-format
+msgid "Donation of %s"
+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_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:ir.ui.menu,name:donation.donation_top_menu
+#: model:ir.ui.view,arch_db:donation.donation_graph
+#: model:ir.ui.view,arch_db:donation.donation_pivot
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+#: model: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:ir.ui.view,arch_db:donation.donation_report_graph
+#: model:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model: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
+#: selection:donation.donation,state:0
+#: model: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
+msgid "Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr ""
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:477
+#, python-format
+msgid "Draft Donation of %s"
+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:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:499
+#, python-format
+msgid "Error:"
+msgstr ""
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "For Each Donation"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:397
+#, python-format
+msgid "Full in-kind donation: no account move generated"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr ""
+
+#. module: donation
+#: 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_option_switch_id
+#: model:ir.model.fields,field_description:donation.field_donation_validate_id
+msgid "ID"
+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: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,name:donation.model_account_journal
+msgid "Journal"
+msgstr ""
+
+#. module: donation
+#: 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_option_switch___last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate___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_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_validate_write_date
+msgid "Last Updated on"
+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
+#: code:addons/donation/models/donation.py:273
+#, python-format
+msgid "Missing Default Debit Account on journal '%s'."
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_name
+msgid "Name"
+msgstr ""
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+msgid "None"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_nota
+msgid "Notes"
+msgstr ""
+
+#. module: donation
+#: model: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
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Partner"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_country_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner Country"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_donation_journal_id
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Method"
+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:ir.model.fields,field_description:donation.field_donation_line_product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_product_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+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:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+msgid "Related Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reports"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Search Donations"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line_sequence
+msgid "Sequence"
+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:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+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: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: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
+#: code:addons/donation/models/donation.py:379
+#, python-format
+msgid "The amount of the donation of %s (%s) is different from the sum of the donation lines (%s)."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:221
+#, python-format
+msgid "The date of the donation of %s should be today or in the past, not in the future!"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:458
+#, python-format
+msgid "The donation '%s' is in Done state, so you cannot delete it."
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:462
+#, 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:466
+#, 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/account.py:19
+#, python-format
+msgid "The journal '%s' has the option 'Donation Payment Method', so it's type should be 'Cash' or 'Bank and Checks'."
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "This wizard will validate all the draft donations selected."
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line_unit_price
+msgid "Unit Price"
+msgstr ""
+
+#. module: donation
+#: model: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:ir.ui.view,arch_db:donation.donation_form
+msgid "Validate"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model: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
+#: code:addons/donation/models/donation.py:431
+#, 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:501
+#, 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..704793ab8
--- /dev/null
+++ b/donation/i18n/es.po
@@ -0,0 +1,758 @@
+# 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_res_partner_donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users_donation_count
+msgid "# of Donations"
+msgstr "# de Donativos"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:450
+#, 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:446
+#, 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.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_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
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr "Recibo de impuestos anual"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Devolver a Borrador"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Campaña"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:479
+#, python-format
+msgid "Cancelled Donation of %s"
+msgstr "Donación cancelada de %s"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:360
+#, python-format
+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!"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:372
+#, python-format
+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."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:367
+#, python-format
+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 !"
+
+#. 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: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: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.fields,field_description:donation.field_donation_donation_company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_company_id
+#: model: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_report_company_currency_id
+msgid "Company Currency"
+msgstr "Moneda de la Compañía"
+
+#. 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_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_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_company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line_currency_id
+#: model: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_journal_id
+msgid "Current Donation Payment Method"
+msgstr "Método de pago de la donación actual"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Fecha"
+
+#. module: donation
+#: 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_option_switch_display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate_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_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.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tree
+msgid "Donation"
+msgstr "Donativo"
+
+#. 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:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+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: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:ir.ui.view,arch_db:donation.donation_line_form
+#: model: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: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.model.fields,field_description:donation.field_account_journal_allow_donation
+msgid "Donation Payment Method"
+msgstr "Método de pago del 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
+#: code:addons/donation/models/donation.py:240
+#, python-format
+msgid "Donation of %s"
+msgstr "Donativo de %s"
+
+#. 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_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:ir.ui.menu,name:donation.donation_top_menu
+#: model:ir.ui.view,arch_db:donation.donation_graph
+#: model:ir.ui.view,arch_db:donation.donation_pivot
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+#: model: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:ir.ui.view,arch_db:donation.donation_report_graph
+#: model:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model: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
+#: selection:donation.donation,state:0
+#: model: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
+msgid "Donor"
+msgstr "Donante"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Donantes"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Borrador"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:477
+#, python-format
+msgid "Draft Donation of %s"
+msgstr "Donación borrador de %s"
+
+#. 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: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:499
+#, python-format
+msgid "Error:"
+msgstr "Error:"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "For Each Donation"
+msgstr "Por cada donación"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:397
+#, 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:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: donation
+#: 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_option_switch_id
+#: model:ir.model.fields,field_description:donation.field_donation_validate_id
+msgid "ID"
+msgstr "ID"
+
+#. 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: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,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Diario"
+
+#. module: donation
+#: 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_option_switch___last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate___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_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_validate_write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. 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
+#: code:addons/donation/models/donation.py:273
+#, python-format
+msgid "Missing Default Debit Account on journal '%s'."
+msgstr "Falta la cuenta de débito por defecto del diario '%s'."
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_name
+msgid "Name"
+msgstr "Nombre"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+msgid "None"
+msgstr "Ninguno"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_nota
+msgid "Notes"
+msgstr "Notas"
+
+#. module: donation
+#: model: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
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Parent Partner"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner"
+msgstr "Empresa"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_country_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model: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_journal_id
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Method"
+msgstr "Método de pago"
+
+#. 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:ir.model.fields,field_description:donation.field_donation_line_product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_product_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Producto"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Categoría de producto"
+
+#. 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:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+msgid "Related Donations"
+msgstr "Donaciones relacionadas"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reports"
+msgstr "Informes"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Guardar valores por defecto"
+
+#. module: donation
+#: model: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_line_sequence
+msgid "Sequence"
+msgstr "Sequencia"
+
+#. 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:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "Estado"
+
+#. 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: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: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
+#: code:addons/donation/models/donation.py:379
+#, python-format
+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)."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:221
+#, python-format
+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!"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:458
+#, 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:462
+#, 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:466
+#, 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/account.py:19
+#, python-format
+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'."
+
+#. module: donation
+#: model: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:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr "Total"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+msgstr "Verdadero"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line_unit_price
+msgid "Unit Price"
+msgstr "Precio unitario"
+
+#. module: donation
+#: model: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:ir.ui.view,arch_db:donation.donation_form
+msgid "Validate"
+msgstr "Validar"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model: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
+#: code:addons/donation/models/donation.py:431
+#, 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:501
+#, 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."
diff --git a/donation/i18n/fr.po b/donation/i18n/fr.po
new file mode 100644
index 000000000..6fcc00ac7
--- /dev/null
+++ b/donation/i18n/fr.po
@@ -0,0 +1,819 @@
+# 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_res_partner_donation_count
+#: model:ir.model.fields,field_description:donation.field_res_users_donation_count
+#, fuzzy
+msgid "# of Donations"
+msgstr "Dons"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:450
+#, fuzzy, python-format
+msgid "A cancelled donation should not be linked to a tax receipt"
+msgstr "Un don annulé ne devrait pas être lié à une écriture comptable"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:446
+#, 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.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_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 Sté"
+
+#. 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 Sté"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_line_analytic_account_id
+msgid "Analytic Account"
+msgstr "Compte analytique"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Back to Draft"
+msgstr "Retour à l'état brouillon"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Campaign"
+msgstr "Campagne de don"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tax_receipt_option_switch_form
+#: model:ir.ui.view,arch_db:donation.donation_validate_form
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Cancelled"
+msgstr "Annulé"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:479
+#, python-format
+msgid "Cancelled Donation of %s"
+msgstr "Don annulé de %s"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:360
+#, python-format
+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 !"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:372
+#, python-format
+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."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:367
+#, fuzzy, python-format
+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 !"
+
+#. 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: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: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.fields,field_description:donation.field_donation_donation_company_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_company_id
+#: model: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_report_company_currency_id
+#, fuzzy
+msgid "Company Currency"
+msgstr "Montant dans la devise de la Sté"
+
+#. 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_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_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_company_currency_id
+#: model:ir.model.fields,field_description:donation.field_donation_line_currency_id
+#: model: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_journal_id
+msgid "Current Donation Payment Method"
+msgstr "Méthode de paiement actuelle"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Date"
+msgstr "Date"
+
+#. module: donation
+#: 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_option_switch_display_name
+#: model:ir.model.fields,field_description:donation.field_donation_validate_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_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.view,arch_db:donation.donation_form
+#: model:ir.ui.view,arch_db:donation.donation_tree
+msgid "Donation"
+msgstr "Don"
+
+#. 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:ir.ui.view,arch_db:donation.donation_campaign_form
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+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: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
+#, fuzzy
+msgid "Donation Check Total"
+msgstr "Date du don"
+
+#. 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:ir.ui.view,arch_db:donation.donation_line_form
+#: model: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: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.model.fields,field_description:donation.field_account_journal_allow_donation
+msgid "Donation Payment Method"
+msgstr "Méthode de paiement de don"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_receipt_menu
+#, fuzzy
+msgid "Donation Tax Receipts"
+msgstr "Date du don"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:240
+#, python-format
+msgid "Donation of %s"
+msgstr "Don de %s"
+
+#. 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_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:ir.ui.menu,name:donation.donation_top_menu
+#: model:ir.ui.view,arch_db:donation.donation_graph
+#: model:ir.ui.view,arch_db:donation.donation_pivot
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+#: model: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:ir.ui.view,arch_db:donation.donation_report_graph
+#: model:ir.ui.view,arch_db:donation.donation_report_pivot
+#: model: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
+#: selection:donation.donation,state:0
+#: model: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
+msgid "Donor"
+msgstr "Donateur"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donor
+msgid "Donors"
+msgstr "Donateurs"
+
+#. module: donation
+#: selection:donation.donation,state:0
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Draft"
+msgstr "Brouillon"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:477
+#, python-format
+msgid "Draft Donation of %s"
+msgstr "Don brouillon de %s"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_donation_tax_receipt_total
+#, fuzzy
+msgid "Eligible Tax Receipt Sub-total in Company Currency"
+msgstr "Montant total dans la devise de la Sté"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_tax_receipt_ok
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:499
+#, python-format
+msgid "Error:"
+msgstr ""
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+#: selection:donation.tax.receipt.option.switch,new_tax_receipt_option:0
+#, fuzzy
+msgid "For Each Donation"
+msgstr "Don"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:397
+#, 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:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Group By"
+msgstr "Grouper par"
+
+#. module: donation
+#: 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_option_switch_id
+#: model:ir.model.fields,field_description:donation.field_donation_validate_id
+msgid "ID"
+msgstr "ID"
+
+#. 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: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,name:donation.model_account_journal
+msgid "Journal"
+msgstr "Journal"
+
+#. module: donation
+#: 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_option_switch___last_update
+#: model:ir.model.fields,field_description:donation.field_donation_validate___last_update
+#, fuzzy
+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_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_validate_write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. 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
+#: code:addons/donation/models/donation.py:273
+#, python-format
+msgid "Missing Default Debit Account on journal '%s'."
+msgstr "Compte de débit par défaut manquant sur le journal '%s'."
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_name
+msgid "Name"
+msgstr "Nom"
+
+#. module: donation
+#: selection:donation.donation,tax_receipt_option:0
+msgid "None"
+msgstr ""
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_campaign_nota
+msgid "Notes"
+msgstr "Notes"
+
+#. module: donation
+#: model: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
+msgid "Parent Donor"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_search
+#, fuzzy
+msgid "Parent Partner"
+msgstr "Partenaire"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: donation
+#: model:ir.model.fields,field_description:donation.field_donation_report_country_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+#: model: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_journal_id
+#: model:ir.ui.view,arch_db:donation.donation_search
+msgid "Payment Method"
+msgstr "Méthode de paiement"
+
+#. 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:ir.model.fields,field_description:donation.field_donation_line_product_id
+#: model:ir.model.fields,field_description:donation.field_donation_report_product_id
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product"
+msgstr "Article"
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_search
+msgid "Product Category"
+msgstr "Catégorie d'article"
+
+#. 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:ir.ui.view,arch_db:donation.donation_tax_receipt_form
+#, fuzzy
+msgid "Related Donations"
+msgstr "Valider les dons"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_report_title_menu
+msgid "Reports"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_form
+msgid "Save Default Values"
+msgstr "Enregistrer les valeurs par défaut"
+
+#. module: donation
+#: model: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_line_sequence
+msgid "Sequence"
+msgstr "Séquence"
+
+#. module: donation
+#: model:ir.model.fields,help:donation.field_donation_line_tax_receipt_ok
+#, fuzzy
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr "Spécifier si le produit peut être sélectionné dans une ligne de don."
+
+#. 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:ir.ui.view,arch_db:donation.donation_search
+msgid "State"
+msgstr "État"
+
+#. 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: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:ir.ui.view,arch_db:donation.donation_search
+msgid "Tax Receipt Option"
+msgstr ""
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_tax_receipt
+#, fuzzy
+msgid "Tax Receipt for Donations"
+msgstr "Valider les dons brouillons"
+
+#. module: donation
+#: model:ir.ui.menu,name:donation.donation_tax_title_menu
+msgid "Tax Receipts"
+msgstr ""
+
+#. module: donation
+#: code:addons/donation/models/donation.py:379
+#, python-format
+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)."
+
+#. module: donation
+#: code:addons/donation/models/donation.py:221
+#, python-format
+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 !"
+
+#. module: donation
+#: code:addons/donation/models/donation.py:458
+#, 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:462
+#, 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:466
+#, fuzzy, python-format
+msgid ""
+"The donation '%s' is linked to the tax receipt %s, 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/account.py:19
+#, python-format
+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'."
+
+#. module: donation
+#: model: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:ir.ui.view,arch_db:donation.donation_form
+msgid "Total"
+msgstr ""
+
+#. module: donation
+#: model:ir.ui.view,arch_db:donation.donation_report_tree
+msgid "True"
+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.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:ir.ui.view,arch_db:donation.donation_form
+msgid "Validate"
+msgstr "Valider"
+
+#. module: donation
+#: model:ir.model,name:donation.model_donation_validate
+#: model: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
+#: code:addons/donation/models/donation.py:431
+#, 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:501
+#, python-format
+msgid "You cannot change the Tax Receipt Option when it is Annual."
+msgstr ""
+
+#~ 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 "Followers"
+#~ msgstr "Followers"
+
+#~ 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"
+#~ msgstr "Messages"
+
+#~ 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."
+
+#~ msgid "Unread Messages"
+#~ msgstr "Unread Messages"
diff --git a/donation/models/__init__.py b/donation/models/__init__.py
new file mode 100644
index 000000000..3b80c6617
--- /dev/null
+++ b/donation/models/__init__.py
@@ -0,0 +1,7 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import donation
+from . import donation_campaign
+from . import account
+from . import partner
+from . import users
diff --git a/donation/models/account.py b/donation/models/account.py
new file mode 100644
index 000000000..6d8c51353
--- /dev/null
+++ b/donation/models/account.py
@@ -0,0 +1,31 @@
+# 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 _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class AccountJournal(models.Model):
+    _inherit = "account.journal"
+
+    allow_donation = fields.Boolean("Donation Payment Method")
+
+    @api.constrains("type", "allow_donation")
+    def _check_donation(self):
+        for journal in self:
+            if journal.allow_donation and journal.type not in ("bank", "cash"):
+                raise ValidationError(
+                    _(
+                        "The journal '%s' has the option "
+                        "'Donation Payment Method', so it's type should "
+                        "be 'Cash' or 'Bank and Checks'."
+                    )
+                    % journal.name
+                )
+
+    @api.onchange("type")
+    def donation_journal_type_change(self):
+        for journal in self:
+            if journal.type in ("cash", "bank"):
+                journal.allow_donation = True
diff --git a/donation/models/donation.py b/donation/models/donation.py
new file mode 100644
index 000000000..6d2480898
--- /dev/null
+++ b/donation/models/donation.py
@@ -0,0 +1,720 @@
+# 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 _, api, fields, models
+from odoo.exceptions import UserError
+from odoo.tools import float_compare, float_is_zero
+
+from odoo.addons.account import _auto_install_l10n
+
+
+class DonationDonation(models.Model):
+    _name = "donation.donation"
+    _inherit = ["mail.thread"]
+    _description = "Donation"
+    _order = "id desc"
+
+    @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:
+            if donation.donation_date:
+                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
+
+                donation.amount_total = total
+                donation_currency = donation.currency_id.with_context(
+                    date=donation.donation_date
+                )
+                company_currency = donation.company_currency_id
+                total_company_currency = donation_currency._convert(
+                    total, company_currency, donation.company_id, donation.donation_date
+                )
+                tax_receipt_total_cc = donation_currency._convert(
+                    tax_receipt_total,
+                    company_currency,
+                    donation.company_id,
+                    donation.donation_date,
+                )
+                donation.amount_total_company_currency = total_company_currency
+                donation.tax_receipt_total = tax_receipt_total_cc
+            else:
+                donation.amount_total = False
+                donation.amount_total_company_currency = False
+                donation.tax_receipt_total = False
+
+    # 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
+    def _default_currency(self):
+        company = self.env.company
+        return company.currency_id
+
+    currency_id = fields.Many2one(
+        "res.currency",
+        string="Currency",
+        required=True,
+        states={"done": [("readonly", True)]},
+        tracking=True,
+        ondelete="restrict",
+        default=_default_currency,
+    )
+    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",
+        readonly=True,
+        store=True,
+        index=True,
+        compute_sudo=True,
+    )
+    # country_id is here to have stats per country
+    # WARNING : I can't put a related field, because when someone
+    # writes on the country_id of a partner, it will trigger a write
+    # on all it's donations, including donations in other companies
+    # which will be blocked by the record rule
+    country_id = fields.Many2one(
+        "res.country",
+        string="Country",
+        compute="_compute_country_id",
+        store=True,
+        readonly=True,
+        compute_sudo=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",
+        string="Amount Total",
+        currency_field="currency_id",
+        store=True,
+        compute_sudo=True,
+        readonly=True,
+        tracking=True,
+    )
+    amount_total_company_currency = fields.Monetary(
+        compute="_compute_total",
+        string="Amount Total in Company Currency",
+        currency_field="company_currency_id",
+        compute_sudo=True,
+        store=True,
+        readonly=True,
+    )
+    donation_date = fields.Date(
+        string="Donation Date",
+        required=True,
+        states={"done": [("readonly", True)]},
+        index=True,
+        tracking=True,
+    )
+    company_id = fields.Many2one(
+        "res.company",
+        string="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
+    )
+    number = fields.Char(
+        related="move_id.name", readonly=True, store=True, string="Donation Number"
+    )
+    journal_id = fields.Many2one(
+        "account.journal",
+        string="Payment Method",
+        required=True,
+        domain=[("type", "in", ("bank", "cash")), ("allow_donation", "=", True)],
+        states={"done": [("readonly", True)]},
+        tracking=True,
+        default=lambda self: self.env.user.context_donation_journal_id,
+    )
+    payment_ref = fields.Char(
+        string="Payment Reference", states={"done": [("readonly", True)]}
+    )
+    state = fields.Selection(
+        [("draft", "Draft"), ("done", "Done"), ("cancel", "Cancelled")],
+        string="State",
+        readonly=True,
+        copy=False,
+        default="draft",
+        index=True,
+        tracking=True,
+    )
+    company_currency_id = fields.Many2one(
+        related="company_id.currency_id",
+        string="Company Currency",
+        readonly=True,
+        store=True,
+        compute_sudo=True,
+    )
+    campaign_id = fields.Many2one(
+        "donation.campaign",
+        string="Donation Campaign",
+        tracking=True,
+        ondelete="restrict",
+        states={"done": [("readonly", True)]},
+        default=lambda self: self.env.user.context_donation_campaign_id,
+    )
+    tax_receipt_id = fields.Many2one(
+        "donation.tax.receipt",
+        string="Tax Receipt",
+        readonly=True,
+        copy=False,
+        tracking=True,
+    )
+    tax_receipt_option = fields.Selection(
+        [
+            ("none", "None"),
+            ("each", "For Each Donation"),
+            ("annual", "Annual Tax Receipt"),
+        ],
+        string="Tax Receipt Option",
+        states={"done": [("readonly", True)]},
+        index=True,
+        tracking=True,
+    )
+    tax_receipt_total = fields.Monetary(
+        compute="_compute_total",
+        string="Tax Receipt Eligible Amount",
+        store=True,
+        readonly=True,
+        currency_field="company_currency_id",
+        compute_sudo=True,
+        help="Eligible Tax Receipt Sub-total in Company Currency",
+    )
+
+    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_move_line_name(self):
+        self.ensure_one()
+        name = _("Donation of %s") % self.partner_id.name
+        return name
+
+    def _prepare_counterpart_move_line(
+        self, name, amount_total_company_cur, total_amount_currency, currency_id
+    ):
+        self.ensure_one()
+        precision = self.env["decimal.precision"].precision_get("Account")
+        if float_compare(amount_total_company_cur, 0, precision_digits=precision) == 1:
+            debit = amount_total_company_cur
+            credit = 0
+            total_amount_currency = self.amount_total
+        else:
+            credit = amount_total_company_cur * -1
+            debit = 0
+            total_amount_currency = self.amount_total * -1
+        vals = {
+            "debit": debit,
+            "credit": credit,
+            "name": name,
+            "account_id": self.journal_id.default_debit_account_id.id,
+            "partner_id": self.commercial_partner_id.id,
+            "currency_id": currency_id,
+            "amount_currency": (currency_id and total_amount_currency or 0.0),
+        }
+        return vals
+
+    def _prepare_donation_move(self):
+        self.ensure_one()
+        if not self.journal_id.default_debit_account_id:
+            raise UserError(
+                _("Missing Default Debit Account on journal '%s'.")
+                % self.journal_id.name
+            )
+
+        movelines = []
+        if self.company_id.currency_id.id != self.currency_id.id:
+            currency_id = self.currency_id.id
+        else:
+            currency_id = False
+        # Note : we can have negative donations for donors that use direct
+        # debit when their direct debit rejected by the bank
+        amount_total_company_cur = 0.0
+        total_amount_currency = 0.0
+        name = self._prepare_move_line_name()
+
+        aml = {}
+        # key = (account_id, analytic_account_id)
+        # value = {'credit': ..., 'debit': ..., 'amount_currency': ...}
+        precision = self.env["decimal.precision"].precision_get("Account")
+        for donation_line in self.line_ids:
+            if donation_line.in_kind:
+                continue
+            amount_total_company_cur += donation_line.amount_company_currency
+            account = donation_line.with_context(
+                force_company=self.company_id.id
+            ).product_id.product_tmpl_id._get_product_accounts()["income"]
+            account_id = account.id
+            analytic_account_id = donation_line.get_analytic_account_id()
+            amount_currency = 0.0
+            if (
+                float_compare(
+                    donation_line.amount_company_currency, 0, precision_digits=precision
+                )
+                == 1
+            ):
+                credit = donation_line.amount_company_currency
+                debit = 0
+                amount_currency = donation_line.amount * -1
+            else:
+                debit = donation_line.amount_company_currency * -1
+                credit = 0
+                amount_currency = donation_line.amount
+
+            # TODO Take into account the option group_invoice_lines ?
+            if (account_id, analytic_account_id) in aml:
+                aml[(account_id, analytic_account_id)]["credit"] += credit
+                aml[(account_id, analytic_account_id)]["debit"] += debit
+                aml[(account_id, analytic_account_id)][
+                    "amount_currency"
+                ] += amount_currency
+            else:
+                aml[(account_id, analytic_account_id)] = {
+                    "credit": credit,
+                    "debit": debit,
+                    "amount_currency": amount_currency,
+                }
+
+        if not aml:  # for full in-kind donation
+            return False
+
+        for (account_id, analytic_account_id), content in aml.items():
+            movelines.append(
+                (
+                    0,
+                    0,
+                    {
+                        "name": name,
+                        "credit": content["credit"],
+                        "debit": content["debit"],
+                        "account_id": account_id,
+                        "analytic_account_id": analytic_account_id,
+                        "partner_id": self.commercial_partner_id.id,
+                        "currency_id": currency_id,
+                        "amount_currency": (
+                            currency_id and content["amount_currency"] or 0.0
+                        ),
+                    },
+                )
+            )
+
+        # counter-part
+        ml_vals = self._prepare_counterpart_move_line(
+            name, amount_total_company_cur, total_amount_currency, currency_id
+        )
+        movelines.append((0, 0, ml_vals))
+
+        vals = {
+            "journal_id": self.journal_id.id,
+            "date": self.donation_date,
+            "ref": self.payment_ref,
+            "line_ids": movelines,
+        }
+        return vals
+
+    def validate(self):
+        check_total = 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 the donation of %s should be today "
+                        "or in the past, not in the future!"
+                    )
+                    % donation.partner_id.name
+                )
+            if not donation.line_ids:
+                raise UserError(
+                    _(
+                        "Cannot validate the donation of %s because it doesn't "
+                        "have any lines!"
+                    )
+                    % donation.partner_id.name
+                )
+
+            if float_is_zero(
+                donation.amount_total, precision_rounding=donation.currency_id.rounding
+            ):
+                raise UserError(
+                    _(
+                        "Cannot validate the donation of %s because the "
+                        "total amount is 0 !"
+                    )
+                    % donation.partner_id.name
+                )
+
+            if donation.state != "draft":
+                raise UserError(
+                    _(
+                        "Cannot validate the donation of %s because it is not "
+                        "in draft state."
+                    )
+                    % donation.partner_id.name
+                )
+
+            if check_total and float_compare(
+                donation.check_total,
+                donation.amount_total,
+                precision_rounding=donation.currency_id.rounding,
+            ):
+                raise UserError(
+                    _(
+                        "The amount of the donation of %s (%s) is different "
+                        "from the sum of the donation lines (%s)."
+                    )
+                    % (
+                        donation.partner_id.name,
+                        donation.check_total,
+                        donation.amount_total,
+                    )
+                )
+
+            vals = {"state": "done"}
+
+            if not float_is_zero(
+                donation.amount_total, precision_rounding=donation.currency_id.rounding
+            ):
+                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.post()
+                    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)
+        return
+
+    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 float_is_zero(
+                self.tax_receipt_total,
+                precision_rounding=self.company_currency_id.rounding,
+            )
+        ):
+            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_journal_id": self.journal_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.number
+                )
+            if donation.move_id:
+                donation.move_id.button_cancel()
+                donation.move_id.unlink()
+            donation.state = "cancel"
+
+    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")
+                )
+            donation.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 '%s' is linked to the tax receipt %s, "
+                        "so you cannot delete it."
+                    )
+                    % (donation.display_name, donation.tax_receipt_id.number)
+                )
+        return super(DonationDonation, self).unlink()
+
+    def name_get(self):
+        res = []
+        for donation in self:
+            partner = donation.sudo().partner_id
+            if donation.state == "draft":
+                name = _("Draft Donation of %s") % partner.name
+            elif donation.state == "cancel":
+                name = _("Cancelled Donation of %s") % partner.name
+            else:
+                name = donation.number
+            res.append((donation.id, name))
+        return res
+
+    @api.onchange("partner_id")
+    def partner_id_change(self):
+        if self.partner_id:
+            self.tax_receipt_option = self.partner_id.tax_receipt_option
+
+    @api.onchange("tax_receipt_option")
+    def tax_receipt_option_change(self):
+        res = {}
+        if (
+            self.partner_id
+            and self.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
+
+    @api.model
+    def auto_install_l10n(self):
+        """Helper function for calling a method that is not accessible directly
+        from XML data.
+        """
+        _auto_install_l10n(self.env.cr, None)
+
+
+class DonationLine(models.Model):
+    _name = "donation.line"
+    _description = "Donation Lines"
+    _rec_name = "product_id"
+
+    @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.with_context(
+                date=line.donation_id.donation_date
+            )
+            amount_company_currency = donation_currency._convert(
+                amount,
+                line.donation_id.company_id.currency_id,
+                line.donation_id.company_id,
+                line.donation_id.donation_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
+
+    donation_id = fields.Many2one("donation.donation", "Donation", ondelete="cascade")
+    currency_id = fields.Many2one(
+        "res.currency",
+        related="donation_id.currency_id",
+        readonly=True,
+        compute_sudo=True,
+    )
+    company_currency_id = fields.Many2one(
+        "res.currency",
+        related="donation_id.company_id.currency_id",
+        readonly=True,
+        compute_sudo=True,
+        string="Company Currency",
+    )
+    product_id = fields.Many2one(
+        "product.product",
+        "Product",
+        required=True,
+        domain=[("donation", "=", True)],
+        ondelete="restrict",
+    )
+    quantity = fields.Integer("Quantity")
+    unit_price = fields.Monetary(string="Unit Price", currency_field="currency_id")
+    amount = fields.Monetary(
+        compute="_compute_amount",
+        string="Amount",
+        compute_sudo=True,
+        currency_field="currency_id",
+        store=True,
+        readonly=True,
+    )
+    amount_company_currency = fields.Monetary(
+        compute="_compute_amount",
+        string="Amount in Company Currency",
+        compute_sudo=True,
+        currency_field="company_currency_id",
+        store=True,
+        readonly=True,
+    )
+    tax_receipt_amount = fields.Monetary(
+        compute="_compute_amount",
+        string="Tax Receipt Eligible Amount",
+        compute_sudo=True,
+        currency_field="company_currency_id",
+        store=True,
+        readonly=True,
+    )
+    analytic_account_id = fields.Many2one(
+        "account.analytic.account", "Analytic Account", ondelete="restrict"
+    )
+    sequence = fields.Integer("Sequence")
+    # 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",
+        readonly=True,
+        store=True,
+        compute_sudo=True,
+    )
+    in_kind = fields.Boolean(
+        related="product_id.in_kind_donation",
+        readonly=True,
+        store=True,
+        string="In Kind",
+        compute_sudo=True,
+    )
+
+    @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
+
+    @api.model
+    def get_analytic_account_id(self):
+        return self.analytic_account_id.id or False
+
+
+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, precision_rounding
+    ):
+        super(DonationTaxReceipt, self).update_tax_receipt_annual_dict(
+            tax_receipt_annual_dict, start_date, end_date, precision_rounding
+        )
+        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", "=", self.env.company.id),
+                ("state", "=", "done"),
+            ]
+        )
+        for donation in donations:
+            tax_receipt_amount = donation.tax_receipt_total
+            if float_is_zero(tax_receipt_amount, precision_rounding=precision_rounding):
+                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)
diff --git a/donation/models/donation_campaign.py b/donation/models/donation_campaign.py
new file mode 100644
index 000000000..5081a4b31
--- /dev/null
+++ b/donation/models/donation_campaign.py
@@ -0,0 +1,26 @@
+# 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 api, fields, models
+
+
+class DonationCampaign(models.Model):
+    _name = "donation.campaign"
+    _description = "Code attributed for a Donation Campaign"
+    _order = "code"
+
+    @api.depends("code", "name")
+    def name_get(self):
+        res = []
+        for camp in self:
+            name = camp.name
+            if camp.code:
+                name = u"[{}] {}".format(camp.code, name)
+            res.append((camp.id, name))
+        return res
+
+    code = fields.Char("Code")
+    name = fields.Char("Name", required=True)
+    start_date = fields.Date("Start Date", default=fields.Date.context_today)
+    note = fields.Text("Notes")
diff --git a/donation/models/partner.py b/donation/models/partner.py
new file mode 100644
index 000000000..d9bb5e75e
--- /dev/null
+++ b/donation/models/partner.py
@@ -0,0 +1,21 @@
+# 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 api, fields, models
+
+
+class ResPartner(models.Model):
+    _inherit = "res.partner"
+
+    @api.depends("donation_ids.partner_id")
+    def _compute_donation_count(self):
+        for partner in self:
+            partner.donation_count = len(partner.donation_ids.ids)
+
+    donation_ids = fields.One2many(
+        "donation.donation", "partner_id", string="Donations", readonly=True
+    )
+    donation_count = fields.Integer(
+        compute="_compute_donation_count", string="# of Donations", readonly=True
+    )
diff --git a/donation/models/users.py b/donation/models/users.py
new file mode 100644
index 000000000..8460664e9
--- /dev/null
+++ b/donation/models/users.py
@@ -0,0 +1,20 @@
+# 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 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_journal_id = fields.Many2one(
+        "account.journal",
+        "Current Donation Payment Method",
+        domain=[("type", "in", ("bank", "cash")), ("allow_donation", "=", True)],
+        company_dependent=True,
+    )
diff --git a/donation/post_install.py b/donation/post_install.py
new file mode 100644
index 000000000..831960bca
--- /dev/null
+++ b/donation/post_install.py
@@ -0,0 +1,12 @@
+# Copyright 2016 Akretion (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_journal(cr, registry):
+    with api.Environment.manage():
+        env = api.Environment(cr, SUPERUSER_ID, {})
+        journals = env["account.journal"].search([("type", "in", ("bank", "cash"))])
+        journals.write({"allow_donation": True})
+    return
diff --git a/donation/readme/CONFIGURE.rst b/donation/readme/CONFIGURE.rst
new file mode 100644
index 000000000..68df67179
--- /dev/null
+++ b/donation/readme/CONFIGURE.rst
@@ -0,0 +1,5 @@
+To configure this module, you need to:
+
+ * create donation products
+ * activate the option *Donation Payment Method* on some bank/cash account journals
+ * if you wish to have a control amount on the donation, add the users to the group *Check Total on supplier invoices*
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..cb7aedba7
--- /dev/null
+++ b/donation/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module handles donations, including in-kind donations. When you validate a donation,
+it will create the corresponding accounting entries.
diff --git a/donation/readme/USAGE.rst b/donation/readme/USAGE.rst
new file mode 100644
index 000000000..ed8a690a6
--- /dev/null
+++ b/donation/readme/USAGE.rst
@@ -0,0 +1,7 @@
+To use this module, go to the menu Donations > Donations and start to register new donations.
+
+To have some statistics about the donations, go to the menu Reporting > Donations > Donations Analysis.
+
+.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
+   :alt: Try me on Runbot
+   :target: https://runbot.odoo-community.org/runbot/180/11.0
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..084698943
--- /dev/null
+++ b/donation/report/donation_report.py
@@ -0,0 +1,103 @@
+# © 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("Donation Date", readonly=True)
+    product_id = fields.Many2one("product.product", "Product", readonly=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", "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
+    )
+    in_kind = fields.Boolean("In Kind")
+    tax_receipt_ok = fields.Boolean("Eligible for a Tax Receipt")
+    company_currency_id = fields.Many2one(
+        "res.currency", string="Company 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 AS donation_date,
+                l.product_id AS product_id,
+                l.in_kind AS in_kind,
+                l.tax_receipt_ok AS tax_receipt_ok,
+                pt.categ_id AS product_categ_id,
+                d.company_id AS company_id,
+                d.partner_id AS partner_id,
+                d.country_id AS country_id,
+                d.campaign_id AS campaign_id,
+                d.company_currency_id AS company_currency_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.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.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..f75b95229
--- /dev/null
+++ b/donation/report/donation_report_view.xml
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 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="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 string="Donations Analysis">
+                <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_groupby"
+                        string="Product"
+                        context="{'group_by': 'product_id'}"
+                    />
+                    <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="product_categ_groupby"
+                        string="Product Category"
+                        context="{'group_by': 'product_categ_id'}"
+                    />
+                    <filter
+                        name="campaign_groupby"
+                        string="Donation Campaign"
+                        context="{'group_by': 'campaign_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 string="Donations Analysis">
+                <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 string="Donations Analysis">
+                <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 string="Donations">
+                <field name="partner_id" />
+                <field name="donation_date" />
+                <field name="country_id" />
+                <field name="campaign_id" />
+                <field name="product_id" />
+                <field name="tax_receipt_ok" />
+                <field name="in_kind" />
+                <field name="tax_receipt_amount" sum="True" />
+                <field name="amount_company_currency" sum="True" />
+                <field name="company_currency_id" invisible="1" />
+                <field name="company_id" groups="base.group_multi_company" />
+            </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="Reports"
+        sequence="25"
+    />
+    <menuitem
+        id="donation_report_menu"
+        action="donation_report_action"
+        parent="donation_report_title_menu"
+        sequence="10"
+    />
+</odoo>
diff --git a/donation/security/donation_security.xml b/donation/security/donation_security.xml
new file mode 100644
index 000000000..a3b8a9390
--- /dev/null
+++ b/donation/security/donation_security.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 2014-2016 Barroux Abbey (www.barroux.org)
+  © 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>
+    <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>
+        </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>
+        </record>
+    </data>
+    <data noupdate="1">
+        <record id="base.default_user" 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','=',False),('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','=',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..aa5308aab
--- /dev/null
+++ b/donation/security/ir.model.access.csv
@@ -0,0 +1,17 @@
+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
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..c2ddd3c76
--- /dev/null
+++ b/donation/static/description/index.html
@@ -0,0 +1,444 @@
+<?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/12.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-12-0/donation-12-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/12.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, including in-kind donations. When you validate a donation,
+it will create the corresponding accounting entries.</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>activate the option <em>Donation Payment Method</em> on some bank/cash account journals</li>
+<li>if you wish to have a control amount on the donation, add the users to the group <em>Check Total on supplier invoices</em></li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<p>To use this module, go to the menu Donations &gt; Donations and start to register new donations.</p>
+<p>To have some statistics about the donations, go to the menu Reporting &gt; Donations &gt; Donations Analysis.</p>
+<a class="reference external image-reference" href="https://runbot.odoo-community.org/runbot/180/11.0"><img alt="Try me on Runbot" src="https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas" /></a>
+</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:%2012.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>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/12.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.xml b/donation/views/account.xml
new file mode 100644
index 000000000..99f94b0c1
--- /dev/null
+++ b/donation/views/account.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 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="view_account_journal_form" model="ir.ui.view">
+        <field name="name">donation.account.journal.form</field>
+        <field name="model">account.journal</field>
+        <field name="inherit_id" ref="account.view_account_journal_form" />
+        <field name="arch" type="xml">
+            <field name="loss_account_id" position="after">
+                <field
+                    name="allow_donation"
+                    attrs="{'invisible': [('type', 'not in', ('bank', 'cash'))]}"
+                />
+            </field>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/views/donation.xml b/donation/views/donation.xml
new file mode 100644
index 000000000..0e7b7acf9
--- /dev/null
+++ b/donation/views/donation.xml
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 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="donation_form" model="ir.ui.view">
+        <field name="name">donation.form</field>
+        <field name="model">donation.donation</field>
+        <field name="arch" type="xml">
+            <form string="Donation">
+                <header>
+                    <button
+                        type="object"
+                        name="validate"
+                        string="Validate"
+                        class="oe_highlight"
+                        states="draft"
+                        groups="donation.group_donation_user"
+                        invisible="context.get('recurring_view')"
+                    />
+                    <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"
+                    />
+                    <field
+                        name="state"
+                        widget="statusbar"
+                        invisible="context.get('recurring_view')"
+                        statusbar_visible="draft,done"
+                    />
+                </header>
+                <sheet>
+                    <group name="main">
+                        <group name="manual">
+                            <field
+                                name="partner_id"
+                                domain="[('customer_rank', '=', 1)]"
+                            />
+                            <field name="commercial_partner_id" invisible="1" />
+                            <field name="journal_id" widget="selection" />
+                            <field
+                                name="currency_id"
+                                groups="base.group_multi_currency"
+                            />
+                            <field
+                                name="check_total"
+                                groups="donation.group_donation_check_total"
+                            />
+                            <field name="payment_ref" />
+                            <field name="campaign_id" />
+                            <field name="donation_date" />
+                        </group>
+                        <group name="auto">
+                            <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" />
+                        </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>
+                            <group name="layout_fix">
+                                <field name="company_currency_id" invisible="1" />
+                            </group>
+                        </page>
+                        <page string="Other Information" name="other">
+                            <group name="other">
+                                <field name="move_id" />
+                                <field
+                                    name="amount_total_company_currency"
+                                    groups="base.group_multi_currency"
+                                />
+                            </group>
+                        </page>
+                    </notebook>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </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
+                string="Donation"
+                decoration-info="state == 'draft'"
+                decoration-primary="state == 'cancel'"
+            >
+                <field name="number" invisible="context.get('recurring_view')" />
+                <field name="partner_id" invisible="context.get('partner_view')" />
+                <field name="donation_date" />
+                <field name="amount_total" />
+                <field name="currency_id" invisible="1" />
+                <field name="journal_id" />
+                <field name="campaign_id" />
+                <field name="company_id" groups="base.group_multi_company" />
+                <field name="state" invisible="context.get('recurring_view')" />
+            </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 string="Search Donations">
+                <field name="number" />
+                <field name="partner_id" />
+                <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')]"
+                />
+                <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="commercial_partner_groupby"
+                        string="Parent Partner"
+                        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="journal_groupby"
+                        string="Payment Method"
+                        context="{'group_by': 'journal_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 string="Donations">
+                <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 string="Donations" disable_linking="True">
+                <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 string="Donation Line" editable="bottom">
+                <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_account_id"
+                    groups="analytic.group_analytic_accounting"
+                />
+                <field name="amount" />
+                <field name="tax_receipt_ok" string="Tax Receipt" />
+                <field name="in_kind" />
+                <field name="sequence" 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 string="Donation Line">
+                <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_account_id" />
+                    <field name="amount" />
+                    <field name="tax_receipt_ok" />
+                    <field name="amount_company_currency" />
+                    <field name="in_kind" />
+                    <field name="sequence" />
+                </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="15"
+        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="base.action_partner_form"
+        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_donation': 1}</field>
+    </record>
+    <menuitem
+        id="donation_products"
+        action="donation_product_action"
+        parent="donation_config_menu"
+    />
+    <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" />
+                </group>
+            </group>
+        </field>
+    </record>
+    <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..0112f87f4
--- /dev/null
+++ b/donation/views/donation_campaign.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 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="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 string="Donation Campaign">
+                <group name="main">
+                    <field name="name" />
+                    <field name="code" />
+                    <field name="start_date" />
+                    <field name="note" />
+                </group>
+            </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 string="Donation Campaigns">
+                <field name="code" />
+                <field name="name" />
+                <field name="start_date" />
+            </tree>
+        </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="30"
+    />
+</odoo>
diff --git a/donation/views/partner.xml b/donation/views/partner.xml
new file mode 100644
index 000000000..421dca38a
--- /dev/null
+++ b/donation/views/partner.xml
@@ -0,0 +1,36 @@
+<?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_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="base.view_partner_form" />
+        <field name="groups_id" eval="[(4, ref('donation.group_donation_viewer'))]" />
+        <field name="arch" type="xml">
+            <field name="category_id" position="after">
+                <field name="customer_rank" />
+            </field>
+            <xpath expr="//div[@name='button_box']" position="inside">
+                <button
+                    class="oe_stat_button"
+                    type="action"
+                    name="%(donation.partner_donation_action)d"
+                    attrs="{'invisible': [('customer_rank', '=', 0)]}"
+                    icon="fa-heart-o"
+                >
+                    <field string="Donations" name="donation_count" widget="statinfo" />
+                </button>
+            </xpath>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/views/users.xml b/donation/views/users.xml
new file mode 100644
index 000000000..2b93e5ccd
--- /dev/null
+++ b/donation/views/users.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  © 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="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_journal_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">
+            <group name="preferences" position="inside">
+                <field
+                    name="context_donation_journal_id"
+                    groups="donation.group_donation_user"
+                    readonly="0"
+                />
+                <field
+                    name="context_donation_campaign_id"
+                    groups="donation.group_donation_user"
+                    readonly="0"
+                />
+            </group>
+        </field>
+    </record>
+</odoo>
diff --git a/donation/wizard/__init__.py b/donation/wizard/__init__.py
new file mode 100644
index 000000000..26f2dd5c5
--- /dev/null
+++ b/donation/wizard/__init__.py
@@ -0,0 +1,4 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from . import donation_validate
+from . import tax_receipt_option_switch
diff --git a/donation/wizard/donation_validate.py b/donation/wizard/donation_validate.py
new file mode 100644
index 000000000..e4733615c
--- /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.validate()
+        return
diff --git a/donation/wizard/donation_validate_view.xml b/donation/wizard/donation_validate_view.xml
new file mode 100644
index 000000000..aa515acc1
--- /dev/null
+++ b/donation/wizard/donation_validate_view.xml
@@ -0,0 +1,34 @@
+<?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 class="oe_grey">
+                    This wizard will validate all the draft donations selected.
+                </p>
+                <footer>
+                    <button
+                        type="object"
+                        name="run"
+                        string="Validate Donations"
+                        class="oe_highlight"
+                    />
+                    <button special="cancel" string="Cancel" class="oe_link" />
+                </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>
+    </record>
+</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..65c947960
--- /dev/null
+++ b/donation/wizard/tax_receipt_option_switch.py
@@ -0,0 +1,31 @@
+# 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",
+        "Donation",
+        default=lambda self: self._context.get("active_id"),
+    )
+    new_tax_receipt_option = fields.Selection(
+        [("each", "For Each Donation"), ("annual", "Annual Tax Receipt")],
+        "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.tax_receipt_option = self.new_tax_receipt_option
+        receipt = self.donation_id.generate_each_tax_receipt()
+        if receipt:
+            self.donation_id.tax_receipt_id = receipt.id
+        return True
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..d25b65420
--- /dev/null
+++ b/donation/wizard/tax_receipt_option_switch_view.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2017 Barroux Abbey (www.barroux.org)
+  Copyright 2017 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="oe_highlight"
+                    />
+                    <button special="cancel" string="Cancel" class="oe_link" />
+                </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/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,
+)


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..14996bd2a
--- /dev/null
+++ b/donation/tests/test_donation.py
@@ -0,0 +1,342 @@
+# © 2015-2016 Akretion (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, tools
+from odoo.exceptions import ValidationError
+from odoo.modules.module import get_resource_path
+from odoo.tests.common import TransactionCase
+
+
+class TestDonation(TransactionCase):
+
+    at_install = False
+    post_install = True
+
+    def _load(self, module, *args):
+        tools.convert_file(
+            self.cr,
+            module,
+            get_resource_path(module, *args),
+            {},
+            "init",
+            False,
+            "test",
+            self.registry._assertion_report,
+        )
+
+    def setUp(self):
+        super(TestDonation, self).setUp()
+        self._load("account", "test", "account_minimal_test.xml")
+
+        self.bank_journal = self.env.ref("account.bank_journal")
+        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,
+                "journal_id": self.bank_journal.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,
+                "journal_id": self.bank_journal.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,
+                "journal_id": self.bank_journal.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,
+                "journal_id": self.bank_journal.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,
+                "journal_id": self.bank_journal.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.assertEquals(donation.state, "draft")
+            donation.validate()
+            self.assertEquals(donation.state, "done")
+            if donation == self.don4:  # full in-kind donation
+                self.assertFalse(donation.move_id)
+            else:
+                self.assertEquals(donation.move_id.state, "posted")
+                self.assertEquals(donation.payment_ref, donation.move_id.ref)
+                self.assertEquals(donation.journal_id, donation.move_id.journal_id)
+                self.assertEquals(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.assertEquals(tax_receipt.type, "each")
+                self.assertEquals(
+                    donation.commercial_partner_id, tax_receipt.partner_id
+                )
+                self.assertEquals(donation.donation_date, tax_receipt.donation_date)
+                self.assertEquals(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"),
+                "journal_id": self.bank_journal.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.partner_id_change()
+        self.donation_id.tax_receipt_option_change()
+        self.donation_id.validate()
+        self.donation_id.line_ids[0]._compute_amount()
+        self.donation_id.line_ids[0].product_id_change()
+        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": u"Famille Joly", "tax_receipt_option": "annual"}
+        )
+        partner_husband = self.res_partner.create(
+            {"parent_id": partner_familly.id, "name": u"Xavier Joly"}
+        )
+        partner_wife = self.res_partner.create(
+            {"parent_id": partner_familly.id, "name": u"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.assertEquals(len(tax_receipts), 1)
+        tax_receipt = tax_receipts[0]
+        self.assertEquals(tax_receipt.amount, 200)
+        self.assertTrue(tax_receipt.number)
+        self.assertEquals(tax_receipt.date, fields.Date.from_string(last_day_year))
+        self.assertEquals(
+            tax_receipt.donation_date, fields.Date.from_string(last_day_year)
+        )
+        self.assertEquals(tax_receipt.currency_id, dons[0].company_id.currency_id)
+
+    def test_account(self):
+        self.bank_journal.donation_journal_type_change()
+        self.donor1._compute_donation_count()
+        with self.assertRaises(ValidationError):
+            self.bank_journal.type = "sale"
+
+    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"),
+                "journal_id": self.bank_journal.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",
+                "picking_type": "outgoing",
+                "active_id": 1,
+            }
+        ).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(
+            {
+                "journal_id": self.bank_journal.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