Repository: OCA/donation (language: python)

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

**Main idea**

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

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

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

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

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

**Proposed implementation**

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

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

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



Discussion / hints:
:+1:  Seems a good plan to me!

:+1: LGTM; quite discussed internally already

:+1: No problem for us


Fix patch:
diff --git a/donation_base/README.rst b/donation_base/README.rst
new file mode 100644
index 000000000..28f0327ef
--- /dev/null
+++ b/donation_base/README.rst
@@ -0,0 +1,90 @@
+=============
+Donation Base
+=============
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! 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/13.0/donation_base
+    :alt: OCA/donation
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/donation-13-0/donation-13-0-donation_base
+    :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/13.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5| 
+
+This is the base module for donations. This module doesn't do anything in itself ;
+it just adds some properties on products and partners and adds the *donation.tax.receipt* object.
+
+To get some real features, you should install the *donation* or the *donation_sale* module.
+To understand the difference between these 2 modules, read `this post <https://github.com/OCA/donation/issues/22>`_.
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Configuration
+=============
+
+To configure this module, you need to:
+
+ * create donation products
+ * set the *Tax Receipt Option* on partners
+
+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_base%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* Barroux Abbey
+* Akretion
+
+Contributors
+~~~~~~~~~~~~
+
+* Brother Bernard <informatique - at - barroux.org>
+* Brother Irénée (Barroux Abbey)
+* Alexis de Lattre <alexis.delattre@akretion.com>
+* Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
+* Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/13.0/donation_base>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/donation_base/__init__.py b/donation_base/__init__.py
new file mode 100644
index 000000000..f987065d3
--- /dev/null
+++ b/donation_base/__init__.py
@@ -0,0 +1,4 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import models
+from . import wizard
diff --git a/donation_base/__manifest__.py b/donation_base/__manifest__.py
new file mode 100644
index 000000000..4c10b967d
--- /dev/null
+++ b/donation_base/__manifest__.py
@@ -0,0 +1,30 @@
+# © 2014-2021 Barroux Abbey (http://www.barroux.org)
+# © 2014-2021 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+{
+    "name": "Donation Base",
+    "version": "14.0.1.0.0",
+    "category": "Accounting",
+    "license": "AGPL-3",
+    "summary": "Base module for donations",
+    "author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
+    "maintainers": ["alexis-via"],
+    "website": "https://github.com/OCA/donation",
+    "depends": ["account"],
+    "data": [
+        "security/ir.model.access.csv",
+        "security/tax_receipt_security.xml",
+        "views/product.xml",
+        "views/res_partner.xml",
+        "views/donation_tax_receipt.xml",
+        "wizard/tax_receipt_annual_create_view.xml",
+        "wizard/tax_receipt_print_view.xml",
+        "report/report.xml",
+        "report/report_donationtax.xml",
+        "data/donation_tax_seq.xml",
+        "data/donation_mail_template.xml",
+    ],
+    "demo": ["demo/donation_demo.xml"],
+    "installable": True,
+}
diff --git a/donation_base/data/donation_mail_template.xml b/donation_base/data/donation_mail_template.xml
new file mode 100644
index 000000000..7d9f9473a
--- /dev/null
+++ b/donation_base/data/donation_mail_template.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2017-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo noupdate="1">
+    <record id="tax_receipt_email_template" model="mail.template">
+        <field name="name">Donation Tax Receipt - Send by Email</field>
+        <field
+            name="email_from"
+        >${(user.email and '%s &lt;%s&gt;' % (user.name, user.email) or '')|safe}</field>
+        <field
+            name="subject"
+        >${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}</field>
+        <field name="partner_to">${object.partner_id.id}</field>
+        <field name="model_id" ref="donation_base.model_donation_tax_receipt" />
+        <field name="auto_delete" eval="False" />
+        <field name="report_template" ref="report_donation_tax_receipt" />
+        <field
+            name="report_name"
+        >${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number or '').replace('/','_')}</field>
+        <field name="lang">${object.partner_id.lang}</field>
+        <field
+            name="body_html"
+        ><![CDATA[
+    <p>Dear ${object.partner_id.name}
+    % if object.partner_id.parent_id:
+        (<i>${object.partner_id.parent_id.name}</i>)
+    % endif
+    ,</p>
+
+    <p>Please find enclosed your tax receipt <strong>${object.number}</strong>
+    amounting in <strong>${object.amount} ${object.currency_id.name}</strong>
+    from ${object.company_id.name}.
+    </p>
+
+    <p>Thank you very much for your donation.</p>
+    ]]></field>
+    </record>
+</odoo>
diff --git a/donation_base/data/donation_tax_seq.xml b/donation_base/data/donation_tax_seq.xml
new file mode 100644
index 000000000..9c9b41d5a
--- /dev/null
+++ b/donation_base/data/donation_tax_seq.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo noupdate="1">
+    <record id="donation_tax_receipt_seq" model="ir.sequence">
+        <field name="name">Donation Tax Receipt</field>
+        <field name="code">donation.tax.receipt</field>
+        <field name="prefix">%(range_year)s-</field>
+        <field name="use_date_range" eval="True" />
+        <field name="padding">5</field>
+    </record>
+</odoo>
diff --git a/donation_base/demo/donation_demo.xml b/donation_base/demo/donation_demo.xml
new file mode 100644
index 000000000..56c95382e
--- /dev/null
+++ b/donation_base/demo/donation_demo.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<odoo noupdate="1">
+    <!-- PRODUCTS -->
+    <record id="product_product_donation" model="product.product">
+        <field name="name">Donation</field>
+        <field name="default_code">DON</field>
+        <field name="categ_id" ref="product.product_category_5" />
+        <field name="sale_ok" eval="True" />
+        <field name="donation" eval="True" />
+        <field name="tax_receipt_ok" eval="True" />
+        <field name="list_price">0</field>
+        <field name="type">service</field>
+        <field name="taxes_id" eval="False" />
+        <field
+            name="description"
+        >This donation item is eligible for a tax receipt.</field>
+    </record>
+    <record id="product_product_donation_notaxreceipt" model="product.product">
+        <field name="name">Donation - no tax receipt</field>
+        <field name="default_code">DON-NOTAXR</field>
+        <field name="categ_id" ref="product.product_category_5" />
+        <field name="sale_ok" eval="True" />
+        <field name="donation" eval="True" />
+        <field name="tax_receipt_ok" eval="False" />
+        <field name="list_price">0</field>
+        <field name="type">service</field>
+        <field name="taxes_id" eval="False" />
+        <field
+            name="description"
+        >This donation item is not eligible for a tax receipt.</field>
+    </record>
+    <record id="product_product_inkind_donation" model="product.product">
+        <field name="name">In-Kind Donation</field>
+        <field name="default_code">KIND-DON</field>
+        <field name="categ_id" ref="product.product_category_5" />
+        <field name="sale_ok" eval="True" />
+        <field name="donation" eval="True" />
+        <field name="tax_receipt_ok" eval="True" />
+        <field name="in_kind_donation" eval="True" />
+        <field name="list_price">0</field>
+        <field name="type">service</field>
+        <field name="taxes_id" eval="False" />
+        <field
+            name="description"
+        >This donation item is eligible for a tax receipt.</field>
+    </record>
+    <record id="product_product_inkind_donation_notaxreceipt" model="product.product">
+        <field name="name">In-Kind Donation - no tax receipt</field>
+        <field name="default_code">KIND-DON-NOTAXR</field>
+        <field name="categ_id" ref="product.product_category_5" />
+        <field name="sale_ok" eval="True" />
+        <field name="donation" eval="True" />
+        <field name="tax_receipt_ok" eval="False" />
+        <field name="in_kind_donation" eval="True" />
+        <field name="list_price">0</field>
+        <field name="type">service</field>
+        <field name="taxes_id" eval="False" />
+        <field
+            name="description"
+        >This donation item is not eligible for a tax receipt.</field>
+    </record>
+    <!-- PARTNERS -->
+    <record id="donor1" model="res.partner">
+        <field name="name">Rémi Duplat</field>
+        <field name="donor_rank" eval="1" />
+        <field name="street">12 rue de l'espérance</field>
+        <field name="zip">69100</field>
+        <field name="city">Villeurbanne</field>
+        <field name="country_id" ref="base.fr" />
+        <field name="email">vincent.duplat@yahoo.example.com</field>
+        <field name="tax_receipt_option">each</field>
+    </record>
+    <record id="donor2" model="res.partner">
+        <field name="name">Lucie Dubois</field>
+        <field name="donor_rank" eval="1" />
+        <field name="street">34 rue Pierre Dupont</field>
+        <field name="zip">69001</field>
+        <field name="city">Lyon</field>
+        <field name="country_id" ref="base.fr" />
+        <field name="email">lucie.dubois@yahoo.example.com</field>
+        <field name="tax_receipt_option">annual</field>
+    </record>
+    <record id="donor3" model="res.partner">
+        <field name="name">Joe Smith</field>
+        <field name="donor_rank" eval="1" />
+        <field name="street">Craig Pond Trail</field>
+        <field name="zip">04431</field>
+        <field name="city">East Orland</field>
+        <field name="state_id" ref="base.state_us_20" />
+        <field name="country_id" ref="base.us" />
+        <field name="email">joe.smith@gmail.example.com</field>
+        <field name="tax_receipt_option">none</field>
+    </record>
+</odoo>
diff --git a/donation_base/i18n/de.po b/donation_base/i18n/de.po
new file mode 100644
index 000000000..90f3b777f
--- /dev/null
+++ b/donation_base/i18n/de.po
@@ -0,0 +1,482 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: 2019-06-28 16:42+0000\n"
+"Last-Translator: Ben Brich <b.brich@humanilog.org>\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.6.1\n"
+
+#. module: donation_base
+#: model:mail.template,body_html:donation_base.tax_receipt_email_template
+msgid ""
+"\n"
+"    <p>Dear ${object.partner_id.name}\n"
+"    % if object.partner_id.parent_id:\n"
+"        (<i>${object.partner_id.parent_id.name}</i>)\n"
+"    % endif\n"
+"    ,</p>\n"
+"    \n"
+"    <p>Please find enclosed your tax receipt <strong>${object.number}</"
+"strong>\n"
+"    amounting in <strong>${object.amount} ${object.currency_id.name}</"
+"strong>\n"
+"    from ${object.company_id.name}.\n"
+"    </p>\n"
+"    \n"
+"    <p>Thank you very much for your donation.</p>\n"
+"    "
+msgstr ""
+"\n"
+"    <p>Sehr geehrte/r ${object.partner_id.name}\n"
+"    % if object.partner_id.parent_id:\n"
+"        (<i>${object.partner_id.parent_id.name}</i>)\n"
+"    % endif\n"
+"    ,</p>\n"
+"    \n"
+"    <p>Im Anhnag erhalten Sie Ihre Spendenbescheinigung "
+"<strong>${object.number}</strong>\n"
+"    über den Betrag von <strong>${object.amount} "
+"${object.currency_id.name}</strong>\n"
+"    von ${object.company_id.name}.\n"
+"    </p>\n"
+"    \n"
+"    <p>Vielen Dank für Ihre Spende.</p>\n"
+"    "
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_count
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_count
+msgid "# of Tax Receipts"
+msgstr "# Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:mail.template,report_name:donation_base.tax_receipt_email_template
+msgid ""
+"${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number or "
+"'').replace('/','_')}"
+msgstr ""
+"${object.company_id.name.replace(' ', '_')}-Spendenbescheinigung_${("
+"object.number or '').replace('/','_')}"
+
+#. module: donation_base
+#: model:mail.template,subject:donation_base.tax_receipt_email_template
+msgid "${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}"
+msgstr ""
+"${object.company_id.name} - Spendenbescheinigung ${object.number or 'n/a'}"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_amount
+msgid "Amount"
+msgstr "Betrag"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Amount Total:"
+msgstr "Gesamtbetrag:"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+#: selection:res.partner,tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr "Sammelspendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Annual Tax Receipts"
+msgstr "Sammelspendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_company_id
+msgid "Company"
+msgstr "Unternehmen"
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:95
+#, python-format
+msgid "Compose Email"
+msgstr "Verfasse E-Mail"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.tax_receipt_annual_create_action
+msgid "Create Annual Receipts"
+msgstr "Erstelle Sammelbescheinigungen"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_currency_id
+msgid "Currency"
+msgstr "Währung"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_date
+msgid "Date"
+msgstr "Datum"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Date:"
+msgstr "Datum:"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_display_name
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_display_name
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+#: model:product.product,name:donation_base.product_product_donation
+#: model:product.template,name:donation_base.product_product_donation_product_template
+msgid "Donation"
+msgstr "Spende"
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
+msgid "Donation - no tax receipt"
+msgstr "Spende- keine Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_donation_date
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Donation Date"
+msgstr "Spendendatum"
+
+#. module: donation_base
+#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_tree
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donation Tax Receipt"
+msgstr "Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_action
+#: model:ir.actions.act_window,name:donation_base.partner_tax_receipt_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_graph
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_pivot
+msgid "Donation Tax Receipts"
+msgstr "Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_partner_id
+msgid "Donor"
+msgstr "Spender"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donor:"
+msgstr "Spender:"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+msgid "Eligible for a Tax Receipt"
+msgstr "Geeignet für Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_end_date
+msgid "End Date"
+msgstr "Enddatum"
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "For Each Donation"
+msgstr "Für jede Spende"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate"
+msgstr "Erzeugen"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_tax_receipt_annual_create
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate Annual Tax Receipts"
+msgstr "Erzeuge Sammelspendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Group By"
+msgstr "Gruppieren nach"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_id
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_id
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_in_kind_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_in_kind_donation
+#: model:product.product,name:donation_base.product_product_inkind_donation
+#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
+msgid "In-Kind Donation"
+msgstr "Sachspende"
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "In-Kind Donation - no tax receipt"
+msgstr "Spachspende - keine Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,field_description:donation_base.field_product_template_tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr "Ist geeignet für Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_donation
+msgid "Is a Donation"
+msgstr "Ist eine Spende"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt___last_update
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print___last_update
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create___last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert von"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:82
+#, python-format
+msgid "Missing email on partner '%s'."
+msgstr "Fehlende Email bei Partner '%s'."
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:89
+#, python-format
+msgid "No annual tax receipt to generate"
+msgstr "Keine Sammelspendenbescheinigung zu erzeugen"
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "None"
+msgstr "Keine"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+msgid "One-Time Tax Receipt"
+msgstr "Einmalige Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "One-Time Tax Receipts"
+msgstr "Einmalige Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Partner"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Print"
+msgstr "Druck"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_date
+msgid "Print Date"
+msgstr "Druckdatum"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
+msgid "Print Donation Tax Receipts"
+msgstr "Drucke Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_print_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Receipts"
+msgstr "Drucke Bescheinigungen"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Tax Receipts"
+msgstr "Drucke Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_product
+msgid "Product"
+msgstr "Produkt"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_template
+msgid "Product Template"
+msgstr "Produktvorlage"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_number
+msgid "Receipt Number"
+msgstr "Bescheinigungsnummer"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_receipt_ids
+msgid "Receipts To Print"
+msgstr "Bescheinigungen zum drucken"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Search Donation Tax Receipts"
+msgstr "Suche Spendenbescheinigungen"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Send by Email"
+msgstr "Sende per E-Mail"
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,help:donation_base.field_product_template_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_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_start_date
+msgid "Start Date"
+msgstr "Anfangsdatum"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_option
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_option
+msgid "Tax Receipt Option"
+msgstr "Spendenbescheinigung"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr "Steuerbescheinigung für Spenden"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_ids
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_ids
+#: model:ir.ui.view,arch_db:donation_base.view_partner_property_form
+msgid "Tax Receipts"
+msgstr "Steuerbescheinigungen"
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:79
+#, python-format
+msgid ""
+"The Donor '%s' already has an annual tax receipt in this timeframe: %s dated "
+"%s."
+msgstr ""
+"Der Spender '%s' hat bereits eine Sammelspendenbescheinigung für den "
+"Zeitraum vom %s bis %s."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:51
+#, python-format
+msgid ""
+"The option 'In-Kind Donation' is active on the product '%s', so you must "
+"also activate the option 'Is a Donation'."
+msgstr ""
+"Die Option 'Sachspende' ist im Produkt '%s' ausgewählt, deswegen muss auch "
+"die Option 'Ist eine Spende' ausgewählt sein."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:56
+#, python-format
+msgid ""
+"The option 'Is Eligible for a Tax Receipt' is active on the product '%s', so "
+"you must also activate the option 'Is a Donation'."
+msgstr ""
+"The Option 'Geeignet für Spendenbescheinigung' ist im Product '%s' "
+"ausgewählt, deswegen muss auch die Option 'Ist eine Spende' ausgewählt sein."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:47
+#, python-format
+msgid "The product '%s' is a donation, so you must configure it as a Service"
+msgstr ""
+"Das Produkt '%s' ist eine Spende, also muss es als Service konfiguriert "
+"werden"
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_print.py:32
+#, python-format
+msgid "There are no tax receipts to print."
+msgstr "Es gibt keine Spendenbescheinigungen zum Drucken."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:66
+#, python-format
+msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
+msgstr ""
+"Im Produkt '%s' sind Steuern (Verkauf) ausgewählt. In Spendenprodukten "
+"dürfen keine Steuern definiert werden."
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation
+#: model:product.product,description:donation_base.product_product_inkind_donation
+#: model:product.template,description:donation_base.product_product_donation_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_product_template
+msgid "This donation item is eligible for a tax receipt."
+msgstr "Dieses Spendenprodukt ist geeignet für eine Spendenbescheinigung."
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation_notaxreceipt
+#: model:product.product,description:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "This donation item is not eligible for a tax receipt."
+msgstr "Dieses Spendenprodukt ist ungeeignet für eine Spendenbescheinigung."
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_type
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Type"
+msgstr "Typ"
diff --git a/donation_base/i18n/donation_base.pot b/donation_base/i18n/donation_base.pot
new file mode 100644
index 000000000..a2617b2be
--- /dev/null
+++ b/donation_base/i18n/donation_base.pot
@@ -0,0 +1,566 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 13.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_base
+#: model:mail.template,body_html:donation_base.tax_receipt_email_template
+msgid ""
+"\n"
+"    <p>Dear ${object.partner_id.name}\n"
+"    % if object.partner_id.parent_id:\n"
+"        (<i>${object.partner_id.parent_id.name}</i>)\n"
+"    % endif\n"
+"    ,</p>\n"
+"\n"
+"    <p>Please find enclosed your tax receipt <strong>${object.number}</strong>\n"
+"    amounting in <strong>${object.amount} ${object.currency_id.name}</strong>\n"
+"    from ${object.company_id.name}.\n"
+"    </p>\n"
+"\n"
+"    <p>Thank you very much for your donation.</p>\n"
+"    "
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner__tax_receipt_count
+#: model:ir.model.fields,field_description:donation_base.field_res_users__tax_receipt_count
+msgid "# of Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:mail.template,report_name:donation_base.tax_receipt_email_template
+msgid ""
+"${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number or "
+"'').replace('/','_')}"
+msgstr ""
+
+#. module: donation_base
+#: model:mail.template,subject:donation_base.tax_receipt_email_template
+msgid "${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
+msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')+'.pdf'"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction
+msgid "Action Needed"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__amount
+msgid "Amount"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Amount Total:"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields.selection,name:donation_base.selection__donation_tax_receipt__type__annual
+#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__annual
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Annual Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_attachment_count
+msgid "Attachment Count"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+#: model_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Cancel"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__company_id
+msgid "Company"
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:0
+#, python-format
+msgid "Compose Email"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.tax_receipt_annual_create_action
+msgid "Create Annual Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__create_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__create_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__create_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__create_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__currency_id
+msgid "Currency"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__date
+msgid "Date"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Date:"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__display_name
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__display_name
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
+#: model:product.product,name:donation_base.product_product_donation
+#: model:product.template,name:donation_base.product_product_donation_product_template
+msgid "Donation"
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
+msgid "Donation - no tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__donation_date
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Donation Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_tree
+#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donation Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_action
+#: model:ir.actions.act_window,name:donation_base.partner_tax_receipt_action
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_graph
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_pivot
+msgid "Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__partner_id
+#: model:ir.model.fields,field_description:donation_base.field_res_partner__donor
+#: model:ir.model.fields,field_description:donation_base.field_res_users__donor
+msgid "Donor"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donor:"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__end_date
+msgid "End Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_follower_ids
+msgid "Followers"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_channel_ids
+msgid "Followers (Channels)"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_partner_ids
+msgid "Followers (Partners)"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__each
+msgid "For Each Donation"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_tax_receipt_annual_create
+#: model_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate Annual Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Group By"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__id
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__id
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__id
+msgid "ID"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_unread
+msgid "If checked, new messages require your attention."
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_has_error
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_has_sms_error
+msgid "If checked, some messages have a delivery error."
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product__in_kind_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template__in_kind_donation
+#: model:product.product,name:donation_base.product_product_inkind_donation
+#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
+msgid "In-Kind Donation"
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "In-Kind Donation - no tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product__tax_receipt_ok
+#: model:ir.model.fields,field_description:donation_base.field_product_template__tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_is_follower
+msgid "Is Follower"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product__donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template__donation
+msgid "Is a Donation"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt____last_update
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print____last_update
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__write_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__write_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__write_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__write_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_main_attachment_id
+msgid "Main Attachment"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error
+msgid "Message Delivery error"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_ids
+msgid "Messages"
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:0
+#, python-format
+msgid "Missing email on partner '%s'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
+#, python-format
+msgid "No annual tax receipt to generate"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__none
+msgid "None"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction_counter
+msgid "Number of Actions"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error_counter
+msgid "Number of errors"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction_counter
+msgid "Number of messages which requires an action"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_has_error_counter
+msgid "Number of messages with delivery error"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_unread_counter
+msgid "Number of unread messages"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields.selection,name:donation_base.selection__donation_tax_receipt__type__each
+msgid "One-Time Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "One-Time Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Partner"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Print"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__print_date
+msgid "Print Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
+msgid "Print Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_print_action
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_product
+msgid "Product"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__number
+msgid "Receipt Number"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__receipt_ids
+msgid "Receipts To Print"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_sms_error
+msgid "SMS Delivery error"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Search Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Send by Email"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_product_product__tax_receipt_ok
+#: model:ir.model.fields,help:donation_base.field_product_template__tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__start_date
+msgid "Start Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner__tax_receipt_option
+#: model:ir.model.fields,field_description:donation_base.field_res_users__tax_receipt_option
+msgid "Tax Receipt Option"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner__tax_receipt_ids
+#: model:ir.model.fields,field_description:donation_base.field_res_users__tax_receipt_ids
+#: model_terms:ir.ui.view,arch_db:donation_base.view_partner_property_form
+msgid "Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
+#, python-format
+msgid ""
+"The Donor '%s' already has an annual tax receipt in this timeframe: %s dated"
+" %s."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:0
+#, python-format
+msgid ""
+"The option 'In-Kind Donation' is active on the product '%s', so you must "
+"also activate the option 'Is a Donation'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:0
+#, python-format
+msgid ""
+"The option 'Is Eligible for a Tax Receipt' is active on the product '%s', so"
+" you must also activate the option 'Is a Donation'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_print.py:0
+#, python-format
+msgid "There are no tax receipts to print."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:0
+#, python-format
+msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation
+#: model:product.product,description:donation_base.product_product_inkind_donation
+#: model:product.template,description:donation_base.product_product_donation_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_product_template
+msgid "This donation item is eligible for a tax receipt."
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation_notaxreceipt
+#: model:product.product,description:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "This donation item is not eligible for a tax receipt."
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__type
+#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Type"
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,uom_name:donation_base.product_product_donation
+#: model:product.product,uom_name:donation_base.product_product_donation_notaxreceipt
+#: model:product.product,uom_name:donation_base.product_product_inkind_donation
+#: model:product.product,uom_name:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,uom_name:donation_base.product_product_donation_notaxreceipt_product_template
+#: model:product.template,uom_name:donation_base.product_product_donation_product_template
+#: model:product.template,uom_name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+#: model:product.template,uom_name:donation_base.product_product_inkind_donation_product_template
+msgid "Units"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_unread
+msgid "Unread Messages"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_unread_counter
+msgid "Unread Messages Counter"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__website_message_ids
+msgid "Website Messages"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__website_message_ids
+msgid "Website communication history"
+msgstr ""
diff --git a/donation_base/i18n/es.po b/donation_base/i18n/es.po
new file mode 100644
index 000000000..d4fdef1ee
--- /dev/null
+++ b/donation_base/i18n/es.po
@@ -0,0 +1,453 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * donation_base
+#
+# 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: 2018-03-11 21:44+0000\n"
+"Last-Translator: enjolras <yo@miguelrevilla.com>, 2018\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"
+
+#. module: donation_base
+#: model:mail.template,body_html:donation_base.tax_receipt_email_template
+msgid ""
+"\n"
+"    <p>Dear ${object.partner_id.name}\n"
+"    % if object.partner_id.parent_id:\n"
+"        (<i>${object.partner_id.parent_id.name}</i>)\n"
+"    % endif\n"
+"    ,</p>\n"
+"    \n"
+"    <p>Please find enclosed your tax receipt <strong>${object.number}</"
+"strong>\n"
+"    amounting in <strong>${object.amount} ${object.currency_id.name}</"
+"strong>\n"
+"    from ${object.company_id.name}.\n"
+"    </p>\n"
+"    \n"
+"    <p>Thank you very much for your donation.</p>\n"
+"    "
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_count
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_count
+msgid "# of Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:mail.template,report_name:donation_base.tax_receipt_email_template
+msgid ""
+"${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number or "
+"'').replace('/','_')}"
+msgstr ""
+
+#. module: donation_base
+#: model:mail.template,subject:donation_base.tax_receipt_email_template
+msgid "${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_amount
+msgid "Amount"
+msgstr "Importe"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Amount Total:"
+msgstr "Importe total:"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+#: selection:res.partner,tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Annual Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_company_id
+msgid "Company"
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:95
+#, python-format
+msgid "Compose Email"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.tax_receipt_annual_create_action
+msgid "Create Annual Receipts"
+msgstr "Crear recibos anuales"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_currency_id
+msgid "Currency"
+msgstr "Moneda"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_date
+msgid "Date"
+msgstr "Fecha"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Date:"
+msgstr "Fecha:"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_display_name
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_display_name
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+#: model:product.product,name:donation_base.product_product_donation
+#: model:product.template,name:donation_base.product_product_donation_product_template
+msgid "Donation"
+msgstr "Donativo"
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
+msgid "Donation - no tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_donation_date
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Donation Date"
+msgstr "Fecha del donativo"
+
+#. module: donation_base
+#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_tree
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donation Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_action
+#: model:ir.actions.act_window,name:donation_base.partner_tax_receipt_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_graph
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_pivot
+msgid "Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_partner_id
+msgid "Donor"
+msgstr "Donante"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donor:"
+msgstr "Donante:"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+msgid "Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_end_date
+msgid "End Date"
+msgstr ""
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "For Each Donation"
+msgstr "Por cada donativo"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate"
+msgstr "Generar"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_tax_receipt_annual_create
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate Annual Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Group By"
+msgstr "Agrupar por"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_id
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_id
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_in_kind_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_in_kind_donation
+#: model:product.product,name:donation_base.product_product_inkind_donation
+#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
+msgid "In-Kind Donation"
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "In-Kind Donation - no tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,field_description:donation_base.field_product_template_tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_donation
+msgid "Is a Donation"
+msgstr "Es un donativo"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt___last_update
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print___last_update
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create___last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:82
+#, python-format
+msgid "Missing email on partner '%s'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:89
+#, python-format
+msgid "No annual tax receipt to generate"
+msgstr ""
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "None"
+msgstr "Ninguno"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+msgid "One-Time Tax Receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "One-Time Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Partner"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Print"
+msgstr "Imprimir"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_date
+msgid "Print Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
+msgid "Print Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_print_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Receipts"
+msgstr "Imprimir recibos"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_product
+msgid "Product"
+msgstr "Producto"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_number
+msgid "Receipt Number"
+msgstr "Número de recibo"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_receipt_ids
+msgid "Receipts To Print"
+msgstr "Recibos a imprimir"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Search Donation Tax Receipts"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Send by Email"
+msgstr "Enviar por email"
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,help:donation_base.field_product_template_tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_start_date
+msgid "Start Date"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_option
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_option
+msgid "Tax Receipt Option"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_ids
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_ids
+#: model:ir.ui.view,arch_db:donation_base.view_partner_property_form
+msgid "Tax Receipts"
+msgstr "Recibos de impuestos"
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:79
+#, python-format
+msgid ""
+"The Donor '%s' already has an annual tax receipt in this timeframe: %s dated "
+"%s."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:51
+#, python-format
+msgid ""
+"The option 'In-Kind Donation' is active on the product '%s', so you must "
+"also activate the option 'Is a Donation'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:56
+#, python-format
+msgid ""
+"The option 'Is Eligible for a Tax Receipt' is active on the product '%s', so "
+"you must also activate the option 'Is a Donation'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:47
+#, python-format
+msgid "The product '%s' is a donation, so you must configure it as a Service"
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_print.py:32
+#, python-format
+msgid "There are no tax receipts to print."
+msgstr "No hay recibos de impuestos para imprimir."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:66
+#, python-format
+msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation
+#: model:product.product,description:donation_base.product_product_inkind_donation
+#: model:product.template,description:donation_base.product_product_donation_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_product_template
+msgid "This donation item is eligible for a tax receipt."
+msgstr ""
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation_notaxreceipt
+#: model:product.product,description:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "This donation item is not eligible for a tax receipt."
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_type
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Type"
+msgstr "Tipo"
diff --git a/donation_base/i18n/fr.po b/donation_base/i18n/fr.po
new file mode 100644
index 000000000..14e577412
--- /dev/null
+++ b/donation_base/i18n/fr.po
@@ -0,0 +1,470 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* donation_base
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 10.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-11-23 15:37+0000\n"
+"PO-Revision-Date: 2016-11-23 15:37+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_base
+#: model:mail.template,body_html:donation_base.tax_receipt_email_template
+msgid ""
+"\n"
+"    <p>Dear ${object.partner_id.name}\n"
+"    % if object.partner_id.parent_id:\n"
+"        (<i>${object.partner_id.parent_id.name}</i>)\n"
+"    % endif\n"
+"    ,</p>\n"
+"    \n"
+"    <p>Please find enclosed your tax receipt <strong>${object.number}</"
+"strong>\n"
+"    amounting in <strong>${object.amount} ${object.currency_id.name}</"
+"strong>\n"
+"    from ${object.company_id.name}.\n"
+"    </p>\n"
+"    \n"
+"    <p>Thank you very much for your donation.</p>\n"
+"    "
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_count
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_count
+msgid "# of Tax Receipts"
+msgstr "Nb de reçus fiscaux"
+
+#. module: donation_base
+#: model:mail.template,report_name:donation_base.tax_receipt_email_template
+msgid ""
+"${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number or "
+"'').replace('/','_')}"
+msgstr ""
+
+#. module: donation_base
+#: model:mail.template,subject:donation_base.tax_receipt_email_template
+msgid "${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_amount
+msgid "Amount"
+msgstr "Montant"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Amount Total:"
+msgstr "Montant total :"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+#: selection:res.partner,tax_receipt_option:0
+msgid "Annual Tax Receipt"
+msgstr "Reçu fiscal annuel"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Annual Tax Receipts"
+msgstr "Reçus fiscaux annuels"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_company_id
+msgid "Company"
+msgstr "Société"
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:95
+#, python-format
+msgid "Compose Email"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_res_partner
+msgid "Contact"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.tax_receipt_annual_create_action
+msgid "Create Annual Receipts"
+msgstr "Créer les reçus annuels"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_create_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_create_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_currency_id
+msgid "Currency"
+msgstr "Devise"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_date
+msgid "Date"
+msgstr "Date "
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Date:"
+msgstr "Date :"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_display_name
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_display_name
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_display_name
+msgid "Display Name"
+msgstr "Afficher le nom"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+#: model:product.product,name:donation_base.product_product_donation
+#: model:product.template,name:donation_base.product_product_donation_product_template
+msgid "Donation"
+msgstr "Don"
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
+msgid "Donation - no tax receipt"
+msgstr "Don sans reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_donation_date
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Donation Date"
+msgstr "Date du don"
+
+#. module: donation_base
+#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_tree
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donation Tax Receipt"
+msgstr "Reçu fiscal de don"
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_action
+#: model:ir.actions.act_window,name:donation_base.partner_tax_receipt_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_graph
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_pivot
+msgid "Donation Tax Receipts"
+msgstr "Reçus fiscaux de dons"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_partner_id
+msgid "Donor"
+msgstr "Donateur"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
+msgid "Donor:"
+msgstr "Donateur :"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.product_template_search_view
+msgid "Eligible for a Tax Receipt"
+msgstr "Éligible reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_end_date
+msgid "End Date"
+msgstr "Date de fin"
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "For Each Donation"
+msgstr "Pour chaque don"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate"
+msgstr "Générer"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_tax_receipt_annual_create
+#: model:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
+msgid "Generate Annual Tax Receipts"
+msgstr "Générer les reçus fiscaux annuels"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Group By"
+msgstr "Regrouper par"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_id
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_id
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_id
+msgid "ID"
+msgstr "ID"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_in_kind_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_in_kind_donation
+#: model:product.product,name:donation_base.product_product_inkind_donation
+#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
+msgid "In-Kind Donation"
+msgstr "Don en nature"
+
+#. module: donation_base
+#: model:product.product,name:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "In-Kind Donation - no tax receipt"
+msgstr "Don en nature sans reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,field_description:donation_base.field_product_template_tax_receipt_ok
+msgid "Is Eligible for a Tax Receipt"
+msgstr "Est éligible à l'émission d'un reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_product_product_donation
+#: model:ir.model.fields,field_description:donation_base.field_product_template_donation
+msgid "Is a Donation"
+msgstr "Est un don"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt___last_update
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print___last_update
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create___last_update
+msgid "Last Modified on"
+msgstr "Dernière Modification le"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_uid
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_write_date
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_write_date
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: donation_base
+#: code:addons/donation_base/models/donation_tax_receipt.py:82
+#, python-format
+msgid "Missing email on partner '%s'."
+msgstr ""
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:89
+#, python-format
+msgid "No annual tax receipt to generate"
+msgstr "Aucun reçu fiscal à générer"
+
+#. module: donation_base
+#: selection:res.partner,tax_receipt_option:0
+msgid "None"
+msgstr "Aucun"
+
+#. module: donation_base
+#: selection:donation.tax.receipt,type:0
+msgid "One-Time Tax Receipt"
+msgstr "Reçu fiscal ponctuel"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "One-Time Tax Receipts"
+msgstr "Reçus fiscaux ponctuels"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Partner"
+msgstr "Partenaire"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+#, fuzzy
+msgid "Print"
+msgstr "Date d'impression"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_date
+msgid "Print Date"
+msgstr "Date d'impression"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
+#, fuzzy
+msgid "Print Donation Tax Receipts"
+msgstr "Impression du reçu fiscal"
+
+#. module: donation_base
+#: model:ir.actions.act_window,name:donation_base.donation_tax_receipt_print_action
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Receipts"
+msgstr "Imprimer les reçus"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
+msgid "Print Tax Receipts"
+msgstr "Imprimer les reçus fiscaux"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_product
+msgid "Product"
+msgstr "Article"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_product_template
+msgid "Product Template"
+msgstr "Modèle d'article"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_number
+msgid "Receipt Number"
+msgstr "Numéro du reçu"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print_receipt_ids
+msgid "Receipts To Print"
+msgstr "Reçus à imprimer"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+#, fuzzy
+msgid "Search Donation Tax Receipts"
+msgstr "Rechercher dans les reçus fiscaux"
+
+#. module: donation_base
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
+msgid "Send by Email"
+msgstr ""
+
+#. module: donation_base
+#: model:ir.model.fields,help:donation_base.field_product_product_tax_receipt_ok
+#: model:ir.model.fields,help:donation_base.field_product_template_tax_receipt_ok
+msgid "Specify if the product is eligible for a tax receipt"
+msgstr "Définit si l'article est éligible à l'émission d'un reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create_start_date
+msgid "Start Date"
+msgstr "Date de début"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_option
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_option
+msgid "Tax Receipt Option"
+msgstr "Option pour le reçu fiscal"
+
+#. module: donation_base
+#: model:ir.model,name:donation_base.model_donation_tax_receipt
+msgid "Tax Receipt for Donations"
+msgstr "Reçu fiscal pour les dons"
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_res_partner_tax_receipt_ids
+#: model:ir.model.fields,field_description:donation_base.field_res_users_tax_receipt_ids
+#: model:ir.ui.view,arch_db:donation_base.view_partner_property_form
+msgid "Tax Receipts"
+msgstr "Reçus fiscaux"
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:79
+#, python-format
+msgid ""
+"The Donor '%s' already has an annual tax receipt in this timeframe: %s dated "
+"%s."
+msgstr ""
+"Le donateur '%s' a déjà un reçu fiscal annuel dans cet intervalle de temps: "
+"%s daté du %s."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:51
+#, python-format
+msgid ""
+"The option 'In-Kind Donation' is active on the product '%s', so you must "
+"also activate the option 'Is a Donation'."
+msgstr ""
+"L'option 'Don en nature' est activée sur l'article '%s', donc vous devez "
+"également activer l'option 'Est un don'."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:56
+#, python-format
+msgid ""
+"The option 'Is Eligible for a Tax Receipt' is active on the product '%s', so "
+"you must also activate the option 'Is a Donation'."
+msgstr ""
+"L'option 'Éligible au reçu fiscal' est activée sur l'article '%s', donc vous "
+"devez également activer l'option 'Est un don'."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:47
+#, python-format
+msgid "The product '%s' is a donation, so you must configure it as a Service"
+msgstr "L'article '%s' est un don, donc il doit être de type 'service'"
+
+#. module: donation_base
+#: code:addons/donation_base/wizard/tax_receipt_print.py:32
+#, python-format
+msgid "There are no tax receipts to print."
+msgstr "Il n'y a aucun reçu fiscal à imprimer."
+
+#. module: donation_base
+#: code:addons/donation_base/models/product.py:66
+#, python-format
+msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
+msgstr ""
+"Il ne devrait y avoir aucune taxe à la vente sur l'article de don '%s'."
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation
+#: model:product.product,description:donation_base.product_product_inkind_donation
+#: model:product.template,description:donation_base.product_product_donation_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_product_template
+msgid "This donation item is eligible for a tax receipt."
+msgstr "Cet article est éligible au reçu fiscal."
+
+#. module: donation_base
+#: model:product.product,description:donation_base.product_product_donation_notaxreceipt
+#: model:product.product,description:donation_base.product_product_inkind_donation_notaxreceipt
+#: model:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
+#: model:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
+msgid "This donation item is not eligible for a tax receipt."
+msgstr "Cet article n'est pas éligible au reçu fiscal."
+
+#. module: donation_base
+#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_type
+#: model:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
+msgid "Type"
+msgstr "Type"
+
+#~ msgid "Donation Taxes Receipts"
+#~ msgstr "Reçus fiscaux de dons"
+
+#~ msgid "Generate Annual Tax Receipt"
+#~ msgstr "Générer les reçus fiscaux annuels"
+
+#~ msgid "Specify if the product can be selected in a donation line."
+#~ msgstr "Définit si l'article peut être sélectionné dans une ligne de don."
diff --git a/donation_base/models/__init__.py b/donation_base/models/__init__.py
new file mode 100644
index 000000000..0067d6e8d
--- /dev/null
+++ b/donation_base/models/__init__.py
@@ -0,0 +1,3 @@
+from . import product
+from . import res_partner
+from . import donation_tax_receipt
diff --git a/donation_base/models/donation_tax_receipt.py b/donation_base/models/donation_tax_receipt.py
new file mode 100644
index 000000000..60f032e1d
--- /dev/null
+++ b/donation_base/models/donation_tax_receipt.py
@@ -0,0 +1,98 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+
+
+class DonationTaxReceipt(models.Model):
+    _name = "donation.tax.receipt"
+    _inherit = ["mail.thread", "mail.activity.mixin"]
+    _description = "Tax Receipt for Donations"
+    _order = "id desc"
+    _rec_name = "number"
+
+    number = fields.Char(string="Receipt Number")
+    date = fields.Date(
+        string="Date", required=True, default=fields.Date.context_today, index=True
+    )
+    donation_date = fields.Date(string="Donation Date")
+    amount = fields.Monetary(string="Amount", currency_field="currency_id")
+    currency_id = fields.Many2one(
+        "res.currency",
+        string="Currency",
+        required=True,
+        ondelete="restrict",
+        default=lambda self: self.env.company.currency_id.id,
+    )
+    partner_id = fields.Many2one(
+        "res.partner",
+        string="Donor",
+        required=True,
+        ondelete="restrict",
+        domain=[("parent_id", "=", False)],
+        index=True,
+    )
+    company_id = fields.Many2one(
+        "res.company",
+        string="Company",
+        required=True,
+        default=lambda self: self.env.company,
+    )
+    print_date = fields.Date(string="Print Date")
+    type = fields.Selection(
+        [("each", "One-Time Tax Receipt"), ("annual", "Annual Tax Receipt")],
+        string="Type",
+        required=True,
+    )
+
+    @api.model
+    def create(self, vals):
+        date = vals.get("donation_date")
+        if vals.get("number", "/") == "/":
+            seq = self.env["ir.sequence"]
+            vals["number"] = (
+                seq.with_context(date=date).next_by_code("donation.tax.receipt") or "/"
+            )
+        return super().create(vals)
+
+    @api.model
+    def update_tax_receipt_annual_dict(
+        self, tax_receipt_annual_dict, start_date, end_date, company
+    ):
+        """This method is inherited in donation and donation_sale
+        It is called by the tax.receipt.annual.create wizard"""
+
+    def action_send_tax_receipt(self):
+        self.ensure_one()
+        if not self.partner_id.email:
+            raise UserError(
+                _("Missing email on partner '%s'.") % self.partner_id.display_name
+            )
+        template = self.env.ref("donation_base.tax_receipt_email_template")
+        compose_form = self.env.ref("mail.email_compose_message_wizard_form")
+        ctx = dict(
+            default_model="donation.tax.receipt",
+            default_res_id=self.id,
+            default_use_template=bool(template),
+            default_template_id=template.id,
+            default_composition_mode="comment",
+        )
+        action = {
+            "name": _("Compose Email"),
+            "type": "ir.actions.act_window",
+            "view_mode": "form",
+            "res_model": "mail.compose.message",
+            "view_id": compose_form.id,
+            "target": "new",
+            "context": ctx,
+        }
+        return action
+
+    def action_print(self):
+        self.ensure_one()
+        return self.env.ref("donation_base.report_donation_tax_receipt").report_action(
+            self
+        )
diff --git a/donation_base/models/product.py b/donation_base/models/product.py
new file mode 100644
index 000000000..b2be3c109
--- /dev/null
+++ b/donation_base/models/product.py
@@ -0,0 +1,82 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import ValidationError
+
+
+class ProductTemplate(models.Model):
+    _inherit = "product.template"
+
+    donation = fields.Boolean(string="Is a Donation", tracking=True)
+    in_kind_donation = fields.Boolean(string="In-Kind Donation", tracking=True)
+    tax_receipt_ok = fields.Boolean(
+        string="Is Eligible for a Tax Receipt",
+        tracking=True,
+        help="Specify if the product is eligible for a tax receipt",
+    )
+
+    @api.onchange("donation")
+    def _donation_change(self):
+        for product in self:
+            if product.donation and not product.in_kind_donation:
+                product.type = "service"
+                product.taxes_id = False
+                product.supplier_taxes_id = False
+                product.purchase_ok = False
+            if not product.donation:
+                product.tax_receipt_ok = False
+                product.in_kind_donation = False
+
+    @api.constrains("donation", "type")
+    def donation_check(self):
+        for product in self:
+            if product.in_kind_donation and not product.donation:
+                raise ValidationError(
+                    _(
+                        "The option 'In-Kind Donation' is active on "
+                        "the product '%s', so you must also activate the "
+                        "option 'Is a Donation'."
+                    )
+                    % product.display_name
+                )
+            if product.tax_receipt_ok and not product.donation:
+                raise ValidationError(
+                    _(
+                        "The option 'Is Eligible for a Tax Receipt' is "
+                        "active on the product '%s', so you must also activate "
+                        "the option 'Is a Donation'."
+                    )
+                    % product.display_name
+                )
+            # The check below is to make sure that we don't forget to remove
+            # the default sale VAT tax on the donation product, particularly
+            # for users of donation_sale. If there are countries that have
+            # sale tax on donations (!), please tell us and we can remove this
+            # constraint
+            if product.donation and product.taxes_id:
+                raise ValidationError(
+                    _(
+                        "There shouldn't have any Customer Taxes on the "
+                        "donation product '%s'."
+                    )
+                    % product.display_name
+                )
+
+
+class ProductProduct(models.Model):
+    _inherit = "product.product"
+
+    @api.onchange("donation")
+    def _donation_change(self):
+        for product in self:
+            if product.donation and not product.in_kind_donation:
+                product.type = "service"
+                product.taxes_id = False
+                product.supplier_taxes_id = False
+                product.purchase_ok = False
+            if not product.donation:
+                product.tax_receipt_ok = False
+                product.in_kind_donation = False
diff --git a/donation_base/models/res_partner.py b/donation_base/models/res_partner.py
new file mode 100644
index 000000000..7a84d793d
--- /dev/null
+++ b/donation_base/models/res_partner.py
@@ -0,0 +1,56 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import api, fields, models
+
+
+class ResPartner(models.Model):
+    _inherit = "res.partner"
+
+    tax_receipt_option = fields.Selection(
+        [
+            ("none", "None"),
+            ("each", "For Each Donation"),
+            ("annual", "Annual Tax Receipt"),
+        ],
+        string="Tax Receipt Option",
+        default="each",
+        tracking=True,
+    )
+    tax_receipt_ids = fields.One2many(
+        "donation.tax.receipt", "partner_id", string="Tax Receipts"
+    )
+    tax_receipt_count = fields.Integer(
+        compute="_compute_tax_receipt_count", string="# of Tax Receipts", readonly=True
+    )
+    donor_rank = fields.Integer(default=0)
+
+    # I don't want to sync tax_receipt_option between parent and child
+    # The field tax_receipt_option should be configured on the parent
+    # and read on the parent
+
+    @api.depends("tax_receipt_ids")
+    def _compute_tax_receipt_count(self):
+        for partner in self:
+            partner.tax_receipt_count = len(partner.tax_receipt_ids.ids)
+
+    @api.model_create_multi
+    def create(self, vals_list):
+        search_partner_mode = self.env.context.get("res_partner_search_mode")
+        is_donor = search_partner_mode == "donor"
+        if is_donor:
+            for vals in vals_list:
+                if "donor_rank" not in vals:
+                    vals["donor_rank"] = 1
+        return super().create(vals_list)
+
+    def _prepare_donor_rank(self):
+        self.ensure_one()
+        return 0
+
+    def _update_donor_rank(self):
+        """This method is inherited in donation and donation_sale"""
+        self.ensure_one()
+        self.write({"donor_rank": self._prepare_donor_rank()})
diff --git a/donation_base/readme/CONFIGURE.rst b/donation_base/readme/CONFIGURE.rst
new file mode 100644
index 000000000..b59214226
--- /dev/null
+++ b/donation_base/readme/CONFIGURE.rst
@@ -0,0 +1,4 @@
+To configure this module, you need to:
+
+ * create donation products
+ * set the *Tax Receipt Option* on partners
diff --git a/donation_base/readme/CONTRIBUTORS.rst b/donation_base/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..41affeb19
--- /dev/null
+++ b/donation_base/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_base/readme/DESCRIPTION.rst b/donation_base/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..359bc2862
--- /dev/null
+++ b/donation_base/readme/DESCRIPTION.rst
@@ -0,0 +1,5 @@
+This is the base module for donations. This module doesn't do anything in itself ;
+it just adds some properties on products and partners and adds the *donation.tax.receipt* object.
+
+To get some real features, you should install the *donation* or the *donation_sale* module.
+To understand the difference between these 2 modules, read `this post <https://github.com/OCA/donation/issues/22>`_.
diff --git a/donation_base/report/report.xml b/donation_base/report/report.xml
new file mode 100644
index 000000000..43b66657b
--- /dev/null
+++ b/donation_base/report/report.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (www.barroux.org)
+  Copyright 2014-2021 Akretion France (www.akretion.com)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="report_donation_tax_receipt" model="ir.actions.report">
+        <field name="name">Donation Tax Receipt</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="report_type">qweb-pdf</field>
+        <field name="report_name">donation_base.report_donationtaxreceipt</field>
+        <field name="report_file">donation_base.report_donationtaxreceipt</field>
+        <field
+            name="print_report_name"
+        >'Fiscal_receipt-'+(object.number or '').replace('/','')+'.pdf'</field>
+        <field name="binding_model_id" ref="model_donation_tax_receipt" />
+        <field name="attachment_use" eval="True" />
+        <field name="binding_type">report</field>
+    </record>
+</odoo>
diff --git a/donation_base/report/report_donationtax.xml b/donation_base/report/report_donationtax.xml
new file mode 100644
index 000000000..95f5464e4
--- /dev/null
+++ b/donation_base/report/report_donationtax.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <!-- This is just a very basic tax receipt report
+    You should customize the style and layout in a custom module -->
+    <template id="donation_base.report_donationtaxreceipt_document">
+        <t t-foreach="docs" t-as="o">
+            <t t-call="web.internal_layout">
+                <div class="page">
+                    <h1>Donation Tax Receipt <span t-field="o.number" /></h1>
+                    <h3>Donor:</h3>
+                    <div
+                        t-field="o.partner_id"
+                        t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
+                    />
+                    <h3>Date: <span t-field="o.date" /></h3>
+                    <h3>Amount Total: <span t-field="o.amount" /></h3>
+                </div>
+            </t>
+        </t>
+    </template>
+    <template id="report_donationtaxreceipt">
+        <t t-call="web.html_container">
+            <t t-foreach="docs" t-as="doc">
+                <t
+                    t-call="donation_base.report_donationtaxreceipt_document"
+                    t-lang="doc.partner_id.lang"
+                />
+            </t>
+        </t>
+    </template>
+</odoo>
diff --git a/donation_base/security/ir.model.access.csv b/donation_base/security/ir.model.access.csv
new file mode 100644
index 000000000..c0b5c76b3
--- /dev/null
+++ b/donation_base/security/ir.model.access.csv
@@ -0,0 +1,7 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_donation_tax_receipt_full,Full access on donation.tax.receipt to Config grp,model_donation_tax_receipt,base.group_system,1,1,1,1
+access_donation_tax_receipt_account_full,Full access on donation.tax.receipt to Accounting Manager,model_donation_tax_receipt,account.group_account_manager,1,1,1,1
+access_donation_tax_receipt_account_invoice,Create access on donation.tax.receipt to Billing group,model_donation_tax_receipt,account.group_account_invoice,1,0,1,0
+access_donation_tax_receipt_account_readonly,Readonly access on donation.tax.receipt to Auditor group,model_donation_tax_receipt,account.group_account_readonly,1,0,0,0
+access_donation_tax_receipt_print,Donation tax receipt print wizard,model_donation_tax_receipt_print,account.group_account_invoice,1,1,1,1
+access_tax_receipt_annual_create,Donation tax receipt annual create wizard,model_tax_receipt_annual_create,account.group_account_invoice,1,1,1,1
diff --git a/donation_base/security/tax_receipt_security.xml b/donation_base/security/tax_receipt_security.xml
new file mode 100644
index 000000000..feb03af5e
--- /dev/null
+++ b/donation_base/security/tax_receipt_security.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo noupdate="1">
+    <record id="donation_tax_receipt_company_rule" model="ir.rule">
+        <field name="name">Donation Tax Receipt Multi-company</field>
+        <field name="model_id" ref="model_donation_tax_receipt" />
+        <field name="domain_force">[('company_id', 'in', company_ids)]</field>
+    </record>
+</odoo>
diff --git a/donation_base/static/description/icon.png b/donation_base/static/description/icon.png
new file mode 100644
index 000000000..3a0328b51
Binary files /dev/null and b/donation_base/static/description/icon.png differ
diff --git a/donation_base/static/description/index.html b/donation_base/static/description/index.html
new file mode 100644
index 000000000..2b95fc3b7
--- /dev/null
+++ b/donation_base/static/description/index.html
@@ -0,0 +1,438 @@
+<?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 Base</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-base">
+<h1 class="title">Donation Base</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/13.0/donation_base"><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-13-0/donation-13-0-donation_base"><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/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>This is the base module for donations. This module doesn’t do anything in itself ;
+it just adds some properties on products and partners and adds the <em>donation.tax.receipt</em> object.</p>
+<p>To get some real features, you should install the <em>donation</em> or the <em>donation_sale</em> module.
+To understand the difference between these 2 modules, read <a class="reference external" href="https://github.com/OCA/donation/issues/22">this post</a>.</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="#bug-tracker" id="id2">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id6">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>set the <em>Tax Receipt Option</em> on partners</li>
+</ul>
+</blockquote>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id2">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_base%0Aversion:%2013.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="#id3">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id4">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="#id5">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="#id6">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/13.0/donation_base">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_base/views/donation_tax_receipt.xml b/donation_base/views/donation_tax_receipt.xml
new file mode 100644
index 000000000..61cd7cb4b
--- /dev/null
+++ b/donation_base/views/donation_tax_receipt.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_tax_receipt_form" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.form</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="arch" type="xml">
+            <form string="Donation Tax Receipt">
+                <header>
+                    <button
+                        name="action_send_tax_receipt"
+                        type="object"
+                        string="Send by Email"
+                        class="btn-primary"
+                    />
+                    <button name="action_print" type="object" string="Print" />
+                </header>
+                <sheet>
+                    <group name="main">
+                        <field name="number" readonly="1" />
+                        <field
+                            name="date"
+                            options="{'datepicker': {'warn_future': true}}"
+                        />
+                        <field name="partner_id" />
+                        <field name="type" widget="radio" />
+                        <field
+                            name="donation_date"
+                            options="{'datepicker': {'warn_future': true}}"
+                        />
+                        <field name="print_date" />
+                        <field name="currency_id" invisible="1" />
+                        <field name="amount" />
+                        <field name="company_id" groups="base.group_multi_company" />
+                    </group>
+                </sheet>
+                <div class="oe_chatter">
+                    <field name="message_follower_ids" widget="mail_followers" />
+                    <field name="activity_ids" widget="mail_activity" />
+                    <field name="message_ids" widget="mail_thread" />
+                </div>
+            </form>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_tree" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.tree</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="arch" type="xml">
+            <tree string="Donation Tax Receipt">
+                <field name="number" />
+                <field name="partner_id" />
+                <field name="date" />
+                <field name="donation_date" optional="hide" />
+                <field
+                    name="type"
+                    widget="badge"
+                    decoration-success="type == 'each'"
+                    decoration-info="type == 'annual'"
+                    optional="show"
+                />
+                <field name="amount" />
+                <field name="currency_id" invisible="1" />
+                <field name="print_date" optional="show" />
+                <field
+                    name="company_id"
+                    groups="base.group_multi_company"
+                    optional="show"
+                />
+            </tree>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_search" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.search</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="arch" type="xml">
+            <search string="Search Donation Tax Receipts">
+                <field name="number" />
+                <field name="partner_id" />
+                <filter
+                    name="each"
+                    string="One-Time Tax Receipts"
+                    domain="[('type', '=', 'each')]"
+                />
+                <filter
+                    name="annual"
+                    string="Annual Tax Receipts"
+                    domain="[('type', '=', 'annual')]"
+                />
+                <group string="Group By" name="groupby">
+                    <filter
+                        name="donation_date_groupby"
+                        string="Donation Date"
+                        context="{'group_by': 'donation_date'}"
+                    />
+                    <filter
+                        name="type_groupby"
+                        string="Type"
+                        context="{'group_by': 'type'}"
+                    />
+                    <filter
+                        name="partner_groupby"
+                        string="Partner"
+                        context="{'group_by': 'partner_id'}"
+                    />
+                </group>
+            </search>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_graph" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.graph</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="arch" type="xml">
+            <graph string="Donation Tax Receipts">
+                <field name="date" />
+                <field name="amount" type="measure" />
+            </graph>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_pivot" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.pivot</field>
+        <field name="model">donation.tax.receipt</field>
+        <field name="arch" type="xml">
+            <pivot string="Donation Tax Receipts">
+                <field name="date" type="row" />
+                <field name="type" type="col" />
+                <field name="amount" type="measure" />
+            </pivot>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_action" model="ir.actions.act_window">
+        <field name="name">Donation Tax Receipts</field>
+        <field name="res_model">donation.tax.receipt</field>
+        <field name="view_mode">tree,form,graph,pivot</field>
+    </record>
+</odoo>
diff --git a/donation_base/views/product.xml b/donation_base/views/product.xml
new file mode 100644
index 000000000..2740c5622
--- /dev/null
+++ b/donation_base/views/product.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="product_template_search_view" model="ir.ui.view">
+        <field name="name">donation.product.template.search</field>
+        <field name="model">product.template</field>
+        <field name="inherit_id" ref="product.product_template_search_view" />
+        <field name="arch" type="xml">
+            <filter name="filter_to_purchase" position="after">
+                <filter
+                    name="filter_donation"
+                    string="Donation"
+                    domain="[('donation', '=', True)]"
+                />
+                <filter
+                    name="filter_tax_receipt_ok"
+                    string="Eligible for a Tax Receipt"
+                    domain="[('tax_receipt_ok', '=', True)]"
+                />
+            </filter>
+        </field>
+    </record>
+    <record id="product_template_form_view" model="ir.ui.view">
+        <field name="name">donation.product.template.form</field>
+        <field name="model">product.template</field>
+        <field name="inherit_id" ref="product.product_template_form_view" />
+        <field name="arch" type="xml">
+            <div name="options" position="inside">
+                <div name="donation">
+                    <field name="donation" />
+                    <label for="donation" />
+                </div>
+                <div
+                    name="tax_receipt"
+                    attrs="{'invisible': [('donation', '=', False)]}"
+                >
+                    <field name="tax_receipt_ok" />
+                    <label for="tax_receipt_ok" />
+                </div>
+                <div
+                    name="in_kind_donation"
+                    attrs="{'invisible': [('donation', '=', False)]}"
+                >
+                    <field name="in_kind_donation" />
+                    <label for="in_kind_donation" />
+                </div>
+            </div>
+        </field>
+    </record>
+</odoo>
diff --git a/donation_base/views/res_partner.xml b/donation_base/views/res_partner.xml
new file mode 100644
index 000000000..5cc062156
--- /dev/null
+++ b/donation_base/views/res_partner.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="partner_tax_receipt_action" model="ir.actions.act_window">
+        <field name="name">Donation Tax Receipts</field>
+        <field name="res_model">donation.tax.receipt</field>
+        <field name="view_mode">tree,form,graph,pivot</field>
+        <field name="context">{'search_default_partner_id': active_id}</field>
+    </record>
+    <record id="view_partner_property_form" model="ir.ui.view">
+        <field name="name">donation.tax.receipt.res.partner.form</field>
+        <field name="model">res.partner</field>
+        <field
+            name="groups_id"
+            eval="[(4, ref('base.group_system')), (4, ref('account.group_account_invoice'))]"
+        />
+        <field name="inherit_id" ref="account.view_partner_property_form" />
+        <field name="arch" type="xml">
+            <field name="property_account_position_id" position="after">
+                    <field
+                    name="tax_receipt_option"
+                    attrs="{'invisible': [('parent_id', '!=', False)]}"
+                />
+            </field>
+            <xpath expr="//div[@name='button_box']" position="inside">
+                <button
+                    class="oe_stat_button"
+                    type="action"
+                    name="%(donation_base.partner_tax_receipt_action)d"
+                    attrs="{'invisible': [('parent_id', '!=', False)]}"
+                    icon="fa-file-text"
+                >
+                    <field
+                        string="Tax Receipts"
+                        name="tax_receipt_count"
+                        widget="statinfo"
+                    />
+                </button>
+            </xpath>
+        </field>
+</record>
+    <record id="res_partner_view_search" model="ir.ui.view">
+            <field name="name">donation.res.partner.search</field>
+            <field name="model">res.partner</field>
+            <field name="inherit_id" ref="account.res_partner_view_search" />
+            <field name="arch" type="xml">
+                    <filter name="supplier" position="after">
+                        <filter
+                    string="Donors"
+                    name="donor"
+                    domain="[('donor_rank','>', 0)]"
+                />
+                </filter>
+            </field>
+    </record>
+    <record id="res_partner_action_donor" model="ir.actions.act_window">
+            <field name="name">Donors</field>
+            <field name="res_model">res.partner</field>
+            <field name="view_mode">kanban,tree,form</field>
+            <field
+            name="context"
+        >{'search_default_donor': 1, 'res_partner_search_mode': 'donor', 'default_is_company': False, 'default_donor_rank': 1}</field>
+        </record>
+</odoo>
diff --git a/donation_base/wizard/__init__.py b/donation_base/wizard/__init__.py
new file mode 100644
index 000000000..1a2eb5c74
--- /dev/null
+++ b/donation_base/wizard/__init__.py
@@ -0,0 +1,2 @@
+from . import tax_receipt_print
+from . import tax_receipt_annual_create
diff --git a/donation_base/wizard/tax_receipt_annual_create.py b/donation_base/wizard/tax_receipt_annual_create.py
new file mode 100644
index 000000000..6f36ac730
--- /dev/null
+++ b/donation_base/wizard/tax_receipt_annual_create.py
@@ -0,0 +1,107 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+import datetime
+import logging
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+from odoo.tools.misc import format_date
+
+logger = logging.getLogger(__name__)
+
+
+class TaxReceiptAnnualCreate(models.TransientModel):
+    _name = "tax.receipt.annual.create"
+    _description = "Generate Annual Tax Receipts"
+
+    @api.model
+    def _default_end_date(self):
+        return datetime.date(fields.Date.context_today(self).year - 1, 12, 31)
+
+    @api.model
+    def _default_start_date(self):
+        return datetime.date(fields.Date.context_today(self).year - 1, 1, 1)
+
+    start_date = fields.Date(
+        "Start Date", required=True, default=lambda self: self._default_start_date()
+    )
+    end_date = fields.Date(
+        "End Date", required=True, default=lambda self: self._default_end_date()
+    )
+    company_id = fields.Many2one(
+        "res.company",
+        string="Company",
+        required=True,
+        default=lambda self: self.env.company,
+    )
+
+    @api.model
+    def _prepare_annual_tax_receipt(self, partner, partner_dict):
+        vals = {
+            "company_id": self.company_id.id,
+            "currency_id": self.company_id.currency_id.id,
+            "amount": partner_dict["amount"],
+            "type": "annual",
+            "partner_id": partner.id,
+            "date": self.end_date,
+            "donation_date": self.end_date,
+        }
+        # designed to add add O2M fields donation_ids and invoice_ids
+        vals.update(partner_dict["extra_vals"])
+        return vals
+
+    def generate_annual_receipts(self):
+        self.ensure_one()
+        logger.info(
+            "Start to generate annual fiscal receipts from %s to %s",
+            self.start_date,
+            self.end_date,
+        )
+        dtro = self.env["donation.tax.receipt"]
+        tax_receipt_annual_dict = {}
+        self.env["donation.tax.receipt"].update_tax_receipt_annual_dict(
+            tax_receipt_annual_dict, self.start_date, self.end_date, self.company_id
+        )
+        tax_receipt_ids = []
+        existing_annual_receipts = dtro.search(
+            [
+                ("donation_date", "<=", self.end_date),
+                ("donation_date", ">=", self.start_date),
+                ("company_id", "=", self.company_id.id),
+                ("type", "=", "annual"),
+            ]
+        )
+        existing_annual_receipts_dict = {}
+        for receipt in existing_annual_receipts:
+            existing_annual_receipts_dict[receipt.partner_id] = receipt
+
+        for partner, partner_dict in tax_receipt_annual_dict.items():
+            # Block if the partner already has an annual tax receipt
+            if partner in existing_annual_receipts_dict:
+                existing_receipt = existing_annual_receipts_dict[partner]
+                raise UserError(
+                    _(
+                        "The Donor '%s' already has an annual tax receipt "
+                        "in this timeframe: %s dated %s."
+                    )
+                    % (
+                        partner.display_name,
+                        existing_receipt.number,
+                        format_date(self.env, existing_receipt.date),
+                    )
+                )
+            vals = self._prepare_annual_tax_receipt(partner, partner_dict)
+            tax_receipt = dtro.create(vals)
+            tax_receipt_ids.append(tax_receipt.id)
+            logger.info("Tax receipt %s generated", tax_receipt.number)
+        if not tax_receipt_ids:
+            raise UserError(_("No annual tax receipt to generate"))
+        logger.info("%d annual fiscal receipts generated", len(tax_receipt_ids))
+        action = (
+            self.env.ref("donation_base.donation_tax_receipt_action").sudo().read([])[0]
+        )
+        action["domain"] = [("id", "in", tax_receipt_ids)]
+        return action
diff --git a/donation_base/wizard/tax_receipt_annual_create_view.xml b/donation_base/wizard/tax_receipt_annual_create_view.xml
new file mode 100644
index 000000000..739ff941b
--- /dev/null
+++ b/donation_base/wizard/tax_receipt_annual_create_view.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="tax_receipt_annual_create_form" model="ir.ui.view">
+        <field name="name">tax_receipt_annual_create.form</field>
+        <field name="model">tax.receipt.annual.create</field>
+        <field name="arch" type="xml">
+            <form string="Generate Annual Tax Receipts">
+                <group name="main">
+                    <field name="start_date" />
+                    <field name="end_date" />
+                    <field name="company_id" groups="base.group_multi_company" />
+                </group>
+                <footer>
+                    <button
+                        type="object"
+                        name="generate_annual_receipts"
+                        string="Generate"
+                        class="btn-primary"
+                    />
+                    <button special="cancel" string="Cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+    <record id="tax_receipt_annual_create_action" model="ir.actions.act_window">
+        <field name="name">Create Annual Receipts</field>
+        <field name="res_model">tax.receipt.annual.create</field>
+        <field name="view_mode">form</field>
+        <field name="target">new</field>
+    </record>
+</odoo>
diff --git a/donation_base/wizard/tax_receipt_print.py b/donation_base/wizard/tax_receipt_print.py
new file mode 100644
index 000000000..d22bebee6
--- /dev/null
+++ b/donation_base/wizard/tax_receipt_print.py
@@ -0,0 +1,34 @@
+# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+# @author: Alexis de Lattre <alexis.delattre@akretion.com>
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+
+from odoo import _, api, fields, models
+from odoo.exceptions import UserError
+
+
+class DonationTaxReceiptPrint(models.TransientModel):
+    _name = "donation.tax.receipt.print"
+    _description = "Print Donation Tax Receipts"
+
+    @api.model
+    def _get_receipts(self):
+        return self.env["donation.tax.receipt"].search([("print_date", "=", False)])
+
+    receipt_ids = fields.Many2many(
+        "donation.tax.receipt",
+        column1="print_wizard_id",
+        column2="receipt_id",
+        string="Receipts to Print",
+        default=lambda self: self._get_receipts(),
+    )
+
+    def print_receipts(self):
+        self.ensure_one()
+        if not self.receipt_ids:
+            raise UserError(_("There are no tax receipts to print."))
+        today = fields.Date.context_today(self)
+        self.receipt_ids.write({"print_date": today})
+        return self.env.ref("donation_base.report_donation_tax_receipt").report_action(
+            self.receipt_ids
+        )
diff --git a/donation_base/wizard/tax_receipt_print_view.xml b/donation_base/wizard/tax_receipt_print_view.xml
new file mode 100644
index 000000000..7f15a0c89
--- /dev/null
+++ b/donation_base/wizard/tax_receipt_print_view.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+  Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
+  Copyright 2014-2021 Akretion France (http://www.akretion.com/)
+  @author: Alexis de Lattre <alexis.delattre@akretion.com>
+  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
+-->
+<odoo>
+    <record id="donation_tax_receipt_print_form" model="ir.ui.view">
+        <field name="name">donation_tax_receipt_print.form</field>
+        <field name="model">donation.tax.receipt.print</field>
+        <field name="arch" type="xml">
+            <form string="Print Tax Receipts">
+                <group name="main" string="Receipts to Print">
+                    <field name="receipt_ids" nolabel="1" />
+                </group>
+                <footer>
+                    <button
+                        type="object"
+                        name="print_receipts"
+                        string="Print Receipts"
+                        class="btn-primary"
+                    />
+                    <button special="cancel" string="Cancel" />
+                </footer>
+            </form>
+        </field>
+    </record>
+    <record id="donation_tax_receipt_print_action" model="ir.actions.act_window">
+        <field name="name">Print Receipts</field>
+        <field name="res_model">donation.tax.receipt.print</field>
+        <field name="view_mode">form</field>
+        <field name="target">new</field>
+    </record>
+</odoo>
diff --git a/setup/donation_base/odoo/addons/donation_base b/setup/donation_base/odoo/addons/donation_base
new file mode 120000
index 000000000..7bb935911
--- /dev/null
+++ b/setup/donation_base/odoo/addons/donation_base
@@ -0,0 +1,1 @@
+../../../../donation_base
\ No newline at end of file
diff --git a/setup/donation_base/setup.py b/setup/donation_base/setup.py
new file mode 100644
index 000000000..28c57bb64
--- /dev/null
+++ b/setup/donation_base/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+    setup_requires=['setuptools-odoo'],
+    odoo_addon=True,
+)


Test patch:
diff --git a/donation_base/tests/__init__.py b/donation_base/tests/__init__.py
new file mode 100644
index 000000000..fcff6fe7e
--- /dev/null
+++ b/donation_base/tests/__init__.py
@@ -0,0 +1,1 @@
+from . import test_donation_tax_receipt
diff --git a/donation_base/tests/test_donation_tax_receipt.py b/donation_base/tests/test_donation_tax_receipt.py
new file mode 100644
index 000000000..da91a8467
--- /dev/null
+++ b/donation_base/tests/test_donation_tax_receipt.py
@@ -0,0 +1,94 @@
+# Copyright 2018-Today Serpent Consulting Services Pvt. Ltd.
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+import time
+
+from odoo import fields
+from odoo.exceptions import UserError, ValidationError
+from odoo.tests.common import TransactionCase
+
+
+class TestDonationTaxReceipt(TransactionCase):
+    def setUp(self):
+        super().setUp()
+        self.dt_receipt = self.env["donation.tax.receipt"]
+        self.partner = self.env.ref("base.res_partner_1")
+        self.company = self.env.ref("base.main_company")
+        self.product_id = self.env.ref("donation_base.product_product_donation")
+        self.dt_receipt_rec = self.dt_receipt.create(
+            {
+                "date": fields.Date.today(),
+                "donation_date": fields.Date.today(),
+                "print_date": fields.Date.today(),
+                "amount": 101,
+                "partner_id": self.partner.id,
+                "company_id": self.company.id,
+                "currency_id": self.company.currency_id.id,
+                "type": "each",
+            }
+        )
+
+    def test_donation(self):
+        self.partner._compute_tax_receipt_count()
+        self.assertTrue(self.partner.tax_receipt_count)
+
+        self.dt_receipt_rec.action_print()
+        self.dt_receipt_rec.action_send_tax_receipt()
+        self.partner.email = False
+        with self.assertRaises(UserError):
+            self.dt_receipt_rec.action_send_tax_receipt()
+
+    def test_donation_change(self):
+        self.product_id._donation_change()
+        self.assertEqual(self.product_id.type, "service")
+        self.assertTrue(self.product_id.donation)
+
+        self.product_id.product_tmpl_id._donation_change()
+        self.assertEqual(self.product_id.product_tmpl_id.type, "service")
+        self.assertTrue(self.product_id.product_tmpl_id.donation)
+
+    def test_donation_check_donation(self):
+        with self.assertRaises(ValidationError):
+            self.product_id.product_tmpl_id.donation = False
+
+    def test_donation_check_kind_donation(self):
+        with self.assertRaises(ValidationError):
+            self.product_id.product_tmpl_id.in_kind_donation = True
+            self.product_id.product_tmpl_id.donation = False
+
+
+class TestTaxReceiptAnnualCreate(TransactionCase):
+    def setUp(self):
+        super().setUp()
+        self.dt_receipt = self.env["donation.tax.receipt"]
+        self.tax_receipt_print = self.env["donation.tax.receipt.print"]
+        self.partner = self.env.ref("base.res_partner_1")
+        self.company = self.env.ref("base.main_company")
+        self.dt_receipt_rec = self.dt_receipt.create(
+            {
+                "date": fields.Date.today(),
+                "donation_date": fields.Date.today(),
+                "print_date": fields.Date.today(),
+                "amount": 101,
+                "partner_id": self.partner.id,
+                "company_id": self.company.id,
+                "currency_id": self.company.currency_id.id,
+                "type": "each",
+            }
+        )
+        self.tax_receipt_print_rec = self.tax_receipt_print.create(
+            {"receipt_ids": [(6, 0, [self.dt_receipt_rec.id])]}
+        )
+
+    def test_wizard_methods(self):
+        self.tax_receipt_print_rec.print_receipts()
+
+    def test_tax_receipt_annual_create(self):
+        self.annual_create = self.env["tax.receipt.annual.create"]
+        self.annual_create_id = self.annual_create.create(
+            {
+                "start_date": time.strftime("2017-%m-%d"),
+                "end_date": time.strftime("2017-%m-%d"),
+            }
+        )
+        with self.assertRaises(UserError):
+            self.annual_create_id.generate_annual_receipts()