Compare commits
No commits in common. "old16.0" and "18.0" have entirely different histories.
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
*__pycache__
|
||||
*~lock*
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
14
README.md
14
README.md
@ -1,5 +1,13 @@
|
||||
# GN-ODOO
|
||||
# Gn_Odoo
|
||||
|
||||
Addons for Odoo 18
|
||||
|
||||
## List of modules
|
||||
|
||||
| Name | Version | Description |
|
||||
|------------------------|-----------------|---------------------------------------------|
|
||||
| gn_l10n_fr_pcg_asso | 18.0.0.0.1 | PCG pour les associations françaises |
|
||||
| gn_hr | 18.0.0.0.1 | Module RH custom |
|
||||
| donation | | From akretion, waiting for official release |
|
||||
| donation_base | | From akretion, waiting for official release |
|
||||
|
||||
Addons for Odoo 16.
|
||||
Starting with association loi 1901 chart of accounts.
|
||||
|
||||
150
donation/README.rst
Normal file
150
donation/README.rst
Normal file
@ -0,0 +1,150 @@
|
||||
========
|
||||
Donation
|
||||
========
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:78b9e7ee3023d661a6d8e3cdf6437ed367d544769741db1292b88038e851686a
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |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/18.0/donation
|
||||
:alt: OCA/donation
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
**donation_bank_statement_oca**.
|
||||
|
||||
This module will assist you in writing a thanks letter.
|
||||
|
||||
This module also supports in-kind donations (in-kind donations don't
|
||||
generate any accounting entry but can generate a tax receipt).
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
- create donation products
|
||||
- make sure you have an inbound payment method for each payment
|
||||
method used to receive donations. This payment method must be
|
||||
configured with *Link to Bank Account* set to *Fixed* and with the
|
||||
donation option active.
|
||||
- if you wish to have a control amount on the donation, add the users
|
||||
to the group *Donation Check Total*
|
||||
|
||||
If you receive donations via credit transfer, you must also:
|
||||
|
||||
- in the configuration page *Invoicing > Configuration > Settings*, in
|
||||
the *Donations* section, select the product that will be used for
|
||||
donations by credit transfer.
|
||||
- on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the *Payments Configuration*
|
||||
tab, select the *Donation by credit transfer account*. This account
|
||||
must allow reconciliation.
|
||||
- Make sure that the accountant that processes bank statements has
|
||||
*User* access level or higher on the *Donation* application.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
This module handles donations by cash, check or by credit transfer:
|
||||
|
||||
- for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module *account_check_deposit*
|
||||
from the project
|
||||
`OCA/account-financial-tools <https://github.com/OCA/account-financial-tools>`__,
|
||||
you can create a check deposit.
|
||||
- for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.
|
||||
|
||||
When you validate a donation:
|
||||
|
||||
- it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.
|
||||
- if the tax receipt option of the donor is configured as *For Each
|
||||
Donation* and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.
|
||||
|
||||
To have some statistics about the donations, go to the menu Donation >
|
||||
Reporting > Donations Analysis.
|
||||
|
||||
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 to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Barroux Abbey
|
||||
* Akretion
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Brother Bernard <informatique - at - barroux.org>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
|
||||
- Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
|
||||
:target: https://github.com/alexis-via
|
||||
:alt: alexis-via
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-alexis-via|
|
||||
|
||||
This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/18.0/donation>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
4
donation/__init__.py
Normal file
4
donation/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
from . import models
|
||||
from . import report
|
||||
from . import wizard
|
||||
from .post_install import update_account_payment_method_line
|
||||
38
donation/__manifest__.py
Normal file
38
donation/__manifest__.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "Donation",
|
||||
"version": "18.0.1.0.0",
|
||||
"category": "Accounting",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Manage donations",
|
||||
"author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
|
||||
"maintainers": ["alexis-via"],
|
||||
"website": "https://github.com/OCA/donation",
|
||||
"depends": [
|
||||
"donation_base",
|
||||
],
|
||||
"data": [
|
||||
"security/donation_security.xml",
|
||||
"security/ir.model.access.csv",
|
||||
"wizard/tax_receipt_option_switch_view.xml",
|
||||
"wizard/donation_validate_view.xml",
|
||||
"views/donation_tax_receipt.xml",
|
||||
"views/donation.xml",
|
||||
"wizard/res_config_settings.xml",
|
||||
"data/donation_sequence.xml",
|
||||
"views/account_payment_mode.xml",
|
||||
"views/donation_campaign.xml",
|
||||
"views/donation_thanks_template.xml",
|
||||
"views/res_users.xml",
|
||||
"views/res_partner.xml",
|
||||
"report/donation_report_view.xml",
|
||||
"report/donation_thanks_view.xml",
|
||||
"report/donation_thanks_report.xml",
|
||||
],
|
||||
"post_init_hook": "update_account_payment_method_line",
|
||||
"demo": ["demo/donation_demo.xml"],
|
||||
"installable": True,
|
||||
}
|
||||
16
donation/data/donation_sequence.xml
Normal file
16
donation/data/donation_sequence.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
<record id="donation_seq" model="ir.sequence">
|
||||
<field name="name">Donation</field>
|
||||
<field name="code">donation.donation</field>
|
||||
<field name="prefix">DON-%(year)s-</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="use_date_range" eval="True" />
|
||||
<field name="company_id" eval="False" />
|
||||
</record>
|
||||
</odoo>
|
||||
24
donation/demo/donation_demo.xml
Normal file
24
donation/demo/donation_demo.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
<record id="quest_origin" model="donation.campaign">
|
||||
<field name="code">Q1</field>
|
||||
<field name="name">Quest Christmas 2015</field>
|
||||
</record>
|
||||
<record id="prospecting_origin" model="donation.campaign">
|
||||
<field name="code">P1</field>
|
||||
<field name="name">Prospecting 2016</field>
|
||||
</record>
|
||||
<record id="catalog_origin" model="donation.campaign">
|
||||
<field name="code">C1</field>
|
||||
<field name="name">Catalog Q1 2016</field>
|
||||
</record>
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field name="groups_id" eval="[(4, ref('group_donation_user'))]" />
|
||||
</record>
|
||||
<record id="base.main_company" model="res.company">
|
||||
<field
|
||||
name="donation_credit_transfer_product_id"
|
||||
ref="donation_base.product_product_donation"
|
||||
/>
|
||||
</record>
|
||||
</odoo>
|
||||
1293
donation/i18n/de.po
Normal file
1293
donation/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1204
donation/i18n/donation.pot
Normal file
1204
donation/i18n/donation.pot
Normal file
File diff suppressed because it is too large
Load Diff
1341
donation/i18n/es.po
Normal file
1341
donation/i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1332
donation/i18n/fr.po
Normal file
1332
donation/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1260
donation/i18n/it.po
Normal file
1260
donation/i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
10
donation/models/__init__.py
Normal file
10
donation/models/__init__.py
Normal file
@ -0,0 +1,10 @@
|
||||
from . import donation
|
||||
from . import donation_tax_receipt
|
||||
from . import donation_campaign
|
||||
from . import account_payment_mode
|
||||
from . import donation_thanks_template
|
||||
from . import account_bank_statement_line
|
||||
from . import account_analytic_applicability
|
||||
from . import res_partner
|
||||
from . import res_users
|
||||
from . import res_company
|
||||
16
donation/models/account_analytic_applicability.py
Normal file
16
donation/models/account_analytic_applicability.py
Normal file
@ -0,0 +1,16 @@
|
||||
# Copyright 2023 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountAnalyticApplicability(models.Model):
|
||||
_inherit = "account.analytic.applicability"
|
||||
|
||||
business_domain = fields.Selection(
|
||||
selection_add=[
|
||||
("donation", "Donation"),
|
||||
],
|
||||
ondelete={"donation": "cascade"},
|
||||
)
|
||||
129
donation/models/account_bank_statement_line.py
Normal file
129
donation/models/account_bank_statement_line.py
Normal file
@ -0,0 +1,129 @@
|
||||
# Copyright 2023 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.misc import format_amount
|
||||
|
||||
# This code is mostly used in the OCA module donation_bank_statement_oca
|
||||
# But it's located in the "donation" module because it can be useful for
|
||||
# other modules (alternative reconcile interfaces, module compatible with the Enterprise
|
||||
# reconcile interface, etc.)
|
||||
|
||||
|
||||
class AccountBankStatementLine(models.Model):
|
||||
_inherit = "account.bank.statement.line"
|
||||
|
||||
donation_ids = fields.One2many(
|
||||
"donation.donation", "bank_statement_line_id", string="Donations", readonly=True
|
||||
)
|
||||
|
||||
def _check_statement_line_donation(self):
|
||||
self.ensure_one()
|
||||
if not self.partner_id:
|
||||
raise UserError(
|
||||
_(
|
||||
f"On bank statement line '{self.display_name}',"
|
||||
"the partner is required to process a donation."
|
||||
)
|
||||
)
|
||||
if self.currency_id.compare_amounts(self.amount, 0) <= 0:
|
||||
raise UserError(
|
||||
_(
|
||||
"On bank statement line '%(line)s', the amount (%(amount)s) "
|
||||
"is negative so it cannot be processed as a donation.",
|
||||
line=self.display_name,
|
||||
amount=format_amount(self.env, self.amount, self.currency_id),
|
||||
)
|
||||
)
|
||||
if not self.company_id.donation_account_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"The Donation by Credit Transfer Account"
|
||||
f"is not set for company '{self.company_id.display_name}'."
|
||||
)
|
||||
)
|
||||
|
||||
def _get_payment_mode_donation(self):
|
||||
self.ensure_one()
|
||||
payment_mode = self.env["account.payment.method.line"].search(
|
||||
[
|
||||
("company_id", "=", self.company_id.id),
|
||||
("payment_type", "=", "inbound"),
|
||||
("bank_account_link", "=", "fixed"),
|
||||
("journal_id", "=", self.journal_id.id),
|
||||
],
|
||||
limit=1,
|
||||
)
|
||||
if not payment_mode:
|
||||
raise UserError(
|
||||
_(
|
||||
"Missing inbound payment mode linked to the bank journal '%s' "
|
||||
"configured with 'Link to Bank Account' set to 'Fixed'."
|
||||
)
|
||||
% self.journal_id.display_name
|
||||
)
|
||||
return payment_mode
|
||||
|
||||
def _get_donation_product(self):
|
||||
self.ensure_one()
|
||||
product = self.company_id.donation_credit_transfer_product_id
|
||||
if not product:
|
||||
raise UserError(
|
||||
_(
|
||||
"Missing Product for Donations via Credit Transferi"
|
||||
f"for company '{self.company_id.display_name}'."
|
||||
)
|
||||
)
|
||||
return product
|
||||
|
||||
def _prepare_donation_context(self):
|
||||
self.ensure_one()
|
||||
product = self._get_donation_product()
|
||||
context = {
|
||||
"default_company_id": self.company_id.id,
|
||||
"default_partner_id": self.partner_id.id,
|
||||
"default_currency_id": self.currency_id.id,
|
||||
"default_payment_method_line_id": self._get_payment_mode_donation().id,
|
||||
"default_payment_ref": self.payment_ref,
|
||||
"default_donation_date": self.date,
|
||||
"default_bank_statement_line_id": self.id,
|
||||
"default_check_total": self.amount,
|
||||
"default_line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": self.amount,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
return context
|
||||
|
||||
def _prepare_donation_action(self):
|
||||
action = {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": _("Create Donation from Bank Statement Line"),
|
||||
"res_model": "donation.donation",
|
||||
"view_mode": "form",
|
||||
"view_id": self.env.ref(
|
||||
"donation.donation_from_bank_statement_line_form"
|
||||
).id,
|
||||
"target": "new",
|
||||
"context": self._prepare_donation_context(),
|
||||
}
|
||||
return action
|
||||
|
||||
def _prepare_donation_counterpart_move_line_vals(self, credit):
|
||||
vals = {
|
||||
"move_id": self.move_id.id,
|
||||
"account_id": self.company_id.donation_account_id.id,
|
||||
"partner_id": self.partner_id.id,
|
||||
"credit": credit,
|
||||
"debit": False,
|
||||
}
|
||||
return vals
|
||||
25
donation/models/account_payment_method.py
Normal file
25
donation/models/account_payment_method.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class AccountPaymentMode(models.Model):
|
||||
_inherit = "account.payment.method.line"
|
||||
|
||||
donation = fields.Boolean(
|
||||
help="If enabled, this payment mode will be available on donations",
|
||||
)
|
||||
|
||||
@api.constrains("donation")
|
||||
def _check_donation(self):
|
||||
for mode in self:
|
||||
if mode.donation and mode.payment_type != "inbound":
|
||||
raise ValidationError(
|
||||
_(
|
||||
f"Donation payment mode '{mode.name}'"
|
||||
"is not an inbound payment mode."
|
||||
)
|
||||
)
|
||||
771
donation/models/donation.py
Normal file
771
donation/models/donation.py
Normal file
@ -0,0 +1,771 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
import logging
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.misc import format_amount
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class DonationDonation(models.Model):
|
||||
_name = "donation.donation"
|
||||
_inherit = ["mail.thread", "mail.activity.mixin"]
|
||||
_description = "Donation"
|
||||
_order = "id desc"
|
||||
_check_company_auto = True
|
||||
|
||||
currency_id = fields.Many2one(
|
||||
"res.currency",
|
||||
required=True,
|
||||
tracking=True,
|
||||
ondelete="restrict",
|
||||
default=lambda self: self.env.company.currency_id,
|
||||
)
|
||||
partner_id = fields.Many2one(
|
||||
"res.partner",
|
||||
string="Donor",
|
||||
required=True,
|
||||
index=True,
|
||||
tracking=True,
|
||||
ondelete="restrict",
|
||||
)
|
||||
commercial_partner_id = fields.Many2one(
|
||||
related="partner_id.commercial_partner_id",
|
||||
string="Parent Donor",
|
||||
store=True,
|
||||
index=True,
|
||||
)
|
||||
# country_id is here to have stats per country
|
||||
country_id = fields.Many2one(
|
||||
"res.country",
|
||||
compute="_compute_country_id",
|
||||
store=True,
|
||||
)
|
||||
check_total = fields.Monetary(
|
||||
string="Check Amount",
|
||||
currency_field="currency_id",
|
||||
tracking=True,
|
||||
)
|
||||
amount_total = fields.Monetary(
|
||||
compute="_compute_total",
|
||||
currency_field="currency_id",
|
||||
store=True,
|
||||
tracking=True,
|
||||
)
|
||||
amount_total_company_currency = fields.Monetary(
|
||||
compute="_compute_total",
|
||||
string="Amount Total in Company Currency",
|
||||
currency_field="company_currency_id",
|
||||
store=True,
|
||||
)
|
||||
donation_date = fields.Date(
|
||||
required=True,
|
||||
index=True,
|
||||
tracking=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
"res.company",
|
||||
required=True,
|
||||
default=lambda self: self.env.company,
|
||||
)
|
||||
line_ids = fields.One2many(
|
||||
"donation.line",
|
||||
"donation_id",
|
||||
string="Donation Lines",
|
||||
copy=True,
|
||||
)
|
||||
move_id = fields.Many2one(
|
||||
"account.move",
|
||||
string="Account Move",
|
||||
readonly=True,
|
||||
copy=False,
|
||||
check_company=True,
|
||||
)
|
||||
number = fields.Char(
|
||||
required=True,
|
||||
copy=False,
|
||||
string="Donation Number",
|
||||
index=True,
|
||||
default=lambda self: _("New"),
|
||||
readonly=True,
|
||||
)
|
||||
payment_method_line_id = fields.Many2one(
|
||||
"account.payment.method.line",
|
||||
domain="[('company_id', '=', company_id), ('donation', '=', True)]",
|
||||
tracking=True,
|
||||
check_company=True,
|
||||
default=lambda self: self.env.user.context_donation_payment_method_line_id,
|
||||
)
|
||||
payment_ref = fields.Char(
|
||||
string="Payment Reference",
|
||||
copy=False,
|
||||
)
|
||||
state = fields.Selection(
|
||||
[("draft", "Draft"), ("done", "Done"), ("cancel", "Cancelled")],
|
||||
readonly=True,
|
||||
copy=False,
|
||||
default="draft",
|
||||
index=True,
|
||||
tracking=True,
|
||||
)
|
||||
company_currency_id = fields.Many2one(
|
||||
related="company_id.currency_id",
|
||||
string="Company Currency",
|
||||
store=True,
|
||||
)
|
||||
campaign_id = fields.Many2one(
|
||||
"donation.campaign",
|
||||
string="Donation Campaign",
|
||||
tracking=True,
|
||||
check_company=True,
|
||||
ondelete="restrict",
|
||||
default=lambda self: self.env.user.context_donation_campaign_id,
|
||||
)
|
||||
tax_receipt_id = fields.Many2one(
|
||||
"donation.tax.receipt",
|
||||
readonly=True,
|
||||
copy=False,
|
||||
tracking=True,
|
||||
check_company=True,
|
||||
)
|
||||
tax_receipt_option = fields.Selection(
|
||||
[
|
||||
("none", "None"),
|
||||
("each", "For Each Donation"),
|
||||
("annual", "Annual Tax Receipt"),
|
||||
],
|
||||
compute="_compute_tax_receipt_option",
|
||||
index=True,
|
||||
tracking=True,
|
||||
precompute=True,
|
||||
store=True,
|
||||
readonly=False,
|
||||
)
|
||||
tax_receipt_total = fields.Monetary(
|
||||
compute="_compute_total",
|
||||
string="Tax Receipt Eligible Amount",
|
||||
store=True,
|
||||
readonly=True,
|
||||
currency_field="company_currency_id",
|
||||
help="Eligible Tax Receipt Sub-total in Company Currency",
|
||||
)
|
||||
bank_statement_line_id = fields.Many2one(
|
||||
"account.bank.statement.line",
|
||||
string="Source Bank Statement Line",
|
||||
ondelete="restrict",
|
||||
readonly=True,
|
||||
)
|
||||
thanks_printed = fields.Boolean(
|
||||
copy=False,
|
||||
tracking=True,
|
||||
help="This field automatically becomes active when "
|
||||
"the thanks letter has been printed.",
|
||||
)
|
||||
thanks_template_id = fields.Many2one(
|
||||
"donation.thanks.template",
|
||||
ondelete="restrict",
|
||||
copy=False,
|
||||
)
|
||||
|
||||
_sql_constraints = [
|
||||
(
|
||||
"bank_statement_line_uniq",
|
||||
"unique(bank_statement_line_id)",
|
||||
"A donation already exists for this bank statement line.",
|
||||
)
|
||||
]
|
||||
|
||||
@api.depends(
|
||||
"line_ids.unit_price",
|
||||
"line_ids.quantity",
|
||||
"line_ids.product_id",
|
||||
"donation_date",
|
||||
"currency_id",
|
||||
"company_id",
|
||||
)
|
||||
def _compute_total(self):
|
||||
for donation in self:
|
||||
total = tax_receipt_total = 0.0
|
||||
for line in donation.line_ids:
|
||||
line_total = line.quantity * line.unit_price
|
||||
total += line_total
|
||||
if line.tax_receipt_ok:
|
||||
tax_receipt_total += line_total
|
||||
|
||||
date = donation.donation_date or fields.Date.context_today(self)
|
||||
donation.amount_total = total
|
||||
donation_currency = donation.currency_id
|
||||
company_currency = donation.company_id.currency_id
|
||||
total_company_currency = donation_currency._convert(
|
||||
total, company_currency, donation.company_id, date
|
||||
)
|
||||
tax_receipt_total_cc = donation_currency._convert(
|
||||
tax_receipt_total,
|
||||
company_currency,
|
||||
donation.company_id,
|
||||
date,
|
||||
)
|
||||
donation.amount_total_company_currency = total_company_currency
|
||||
donation.tax_receipt_total = tax_receipt_total_cc
|
||||
|
||||
# We don't want a depends on partner_id.country_id, because if the partner
|
||||
# moves to another country, we want to keep the old country for
|
||||
# past donations to have good statistics
|
||||
@api.depends("partner_id")
|
||||
def _compute_country_id(self):
|
||||
for donation in self:
|
||||
donation.country_id = donation.partner_id.country_id
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
if "company_id" in vals:
|
||||
self = self.with_company(vals["company_id"])
|
||||
if vals.get("number", _("New")) == _("New"):
|
||||
vals["number"] = self.env["ir.sequence"].next_by_code(
|
||||
"donation.donation", sequence_date=vals.get("donation_date")
|
||||
) or _("New")
|
||||
return super().create(vals_list)
|
||||
|
||||
def _prepare_each_tax_receipt(self):
|
||||
self.ensure_one()
|
||||
vals = {
|
||||
"company_id": self.company_id.id,
|
||||
"currency_id": self.company_currency_id.id,
|
||||
"donation_date": self.donation_date,
|
||||
"amount": self.tax_receipt_total,
|
||||
"type": "each",
|
||||
"partner_id": self.commercial_partner_id.id,
|
||||
}
|
||||
return vals
|
||||
|
||||
# TODO migration: remove 'journal' argument and
|
||||
# use self.payment_method_line_id.journal_id
|
||||
def _prepare_counterpart_move_line(
|
||||
self, total_company_cur, total_currency, journal
|
||||
):
|
||||
self.ensure_one()
|
||||
journal = self.payment_method_line_id.journal_id
|
||||
company = journal.company_id
|
||||
if self.company_currency_id.compare_amounts(total_company_cur, 0) > 0:
|
||||
debit = total_company_cur
|
||||
credit = 0
|
||||
else:
|
||||
credit = -total_company_cur
|
||||
debit = 0
|
||||
if self.bank_statement_line_id:
|
||||
account_id = company.donation_account_id.id
|
||||
else:
|
||||
if not company.account_journal_payment_debit_account_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"Missing Outstanding Receipts Account"
|
||||
f"on company '{company.display_name}'."
|
||||
)
|
||||
)
|
||||
payment_method = self.payment_method_line_id.payment_method_id
|
||||
account_id = (
|
||||
journal.inbound_payment_method_line_ids.filtered(
|
||||
lambda x: x.payment_method_id == payment_method
|
||||
).payment_account_id.id
|
||||
or company.account_journal_payment_debit_account_id.id
|
||||
)
|
||||
vals = {
|
||||
"debit": debit,
|
||||
"credit": credit,
|
||||
"account_id": account_id,
|
||||
"partner_id": self.commercial_partner_id.id,
|
||||
"currency_id": self.currency_id.id,
|
||||
"amount_currency": total_currency,
|
||||
"name": self.number,
|
||||
"display_type": "payment_term",
|
||||
}
|
||||
return vals
|
||||
|
||||
def _prepare_donation_move(self):
|
||||
self.ensure_one()
|
||||
if not self.bank_statement_line_id and not self.payment_method_line_id.donation:
|
||||
raise UserError(
|
||||
_(
|
||||
"The payment mode '%(pay_mode)s' selected on donation "
|
||||
"%(donation)s is not a donation payment mode.",
|
||||
pay_mode=self.payment_method_line_id.display_name,
|
||||
donation=self.display_name,
|
||||
)
|
||||
)
|
||||
assert self.payment_method_line_id.bank_account_link == "fixed"
|
||||
journal = self.payment_method_line_id.journal_id
|
||||
assert journal
|
||||
|
||||
# Note : we can have negative donations for donors that use direct
|
||||
# debit when their direct debit rejected by the bank
|
||||
total_company_cur = 0.0
|
||||
total_currency = 0.0
|
||||
|
||||
vals = {
|
||||
"company_id": self.company_id.id,
|
||||
"journal_id": journal.id,
|
||||
"date": self.donation_date,
|
||||
"ref": self.payment_ref,
|
||||
"line_ids": [],
|
||||
}
|
||||
|
||||
for line in self.line_ids:
|
||||
if line.in_kind:
|
||||
continue
|
||||
if self.currency_id.is_zero(line.amount):
|
||||
continue
|
||||
account = line._get_account()
|
||||
if not account:
|
||||
raise UserError(
|
||||
_("Failed to get account for donation line with product '%s'.")
|
||||
% line.product_id.display_name
|
||||
)
|
||||
|
||||
total_currency += line.amount
|
||||
|
||||
amount_cc = self.currency_id._convert(
|
||||
line.amount,
|
||||
self.company_currency_id,
|
||||
self.company_id,
|
||||
self.donation_date,
|
||||
)
|
||||
total_company_cur += amount_cc
|
||||
if self.company_currency_id.compare_amounts(amount_cc, 0) > 0:
|
||||
credit = amount_cc
|
||||
debit = 0
|
||||
else:
|
||||
debit = -amount_cc
|
||||
credit = 0
|
||||
vals["line_ids"].append(
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"display_type": "product",
|
||||
"product_id": line.product_id.id,
|
||||
"credit": credit,
|
||||
"debit": debit,
|
||||
"account_id": account.id,
|
||||
"analytic_distribution": line.analytic_distribution,
|
||||
"partner_id": self.commercial_partner_id.id,
|
||||
"currency_id": self.currency_id.id,
|
||||
"amount_currency": -line.amount,
|
||||
},
|
||||
)
|
||||
)
|
||||
|
||||
if not vals["line_ids"]:
|
||||
return False
|
||||
|
||||
# counter-part
|
||||
ml_vals = self._prepare_counterpart_move_line(
|
||||
total_company_cur, total_currency, journal
|
||||
)
|
||||
vals["line_ids"].append((0, 0, ml_vals))
|
||||
return vals
|
||||
|
||||
def save_as_draft(self):
|
||||
# Used in simple form view used as wizard
|
||||
# Do nothing, just close
|
||||
self.ensure_one()
|
||||
return
|
||||
|
||||
def validate(self):
|
||||
check_total_grp = self.env["res.users"].has_group(
|
||||
"donation.group_donation_check_total"
|
||||
)
|
||||
for donation in self:
|
||||
if donation.donation_date > fields.Date.context_today(self):
|
||||
raise UserError(
|
||||
_(
|
||||
"The date of donation %s should be today "
|
||||
"or in the past, not in the future!"
|
||||
)
|
||||
% donation.display_name
|
||||
)
|
||||
if not donation.line_ids:
|
||||
raise UserError(
|
||||
_("Cannot validate donation %s because it doesn't have any lines!")
|
||||
% donation.display_name
|
||||
)
|
||||
|
||||
if donation.currency_id.is_zero(donation.amount_total):
|
||||
raise UserError(
|
||||
_("Cannot validate donation %s because the total amount is 0!")
|
||||
% donation.display_name
|
||||
)
|
||||
|
||||
if donation.state != "draft":
|
||||
raise UserError(
|
||||
_("Cannot validate donation %s because it is not in draft state.")
|
||||
% donation.display_name
|
||||
)
|
||||
|
||||
if (
|
||||
check_total_grp or donation.bank_statement_line_id
|
||||
) and donation.currency_id.compare_amounts(
|
||||
donation.check_total, donation.amount_total
|
||||
):
|
||||
raise UserError(
|
||||
_(
|
||||
"The amount of donation "
|
||||
"%(donation)s (%(check_total)s) is different "
|
||||
"from the sum of the donation lines (%(amount_total)s).",
|
||||
donation=donation.display_name,
|
||||
check_total=format_amount(
|
||||
self.env, donation.check_total, donation.currency_id
|
||||
),
|
||||
amount_total=format_amount(
|
||||
self.env, donation.amount_total, donation.currency_id
|
||||
),
|
||||
)
|
||||
)
|
||||
full_in_kind = all([line.in_kind for line in donation.line_ids])
|
||||
if not donation.payment_method_line_id and not full_in_kind:
|
||||
raise UserError(
|
||||
_(
|
||||
"Payment Mode is not set on donation %s (only fully "
|
||||
"in-kind donations don't require a payment mode)."
|
||||
)
|
||||
% donation.display_name
|
||||
)
|
||||
|
||||
vals = {"state": "done"}
|
||||
if full_in_kind and donation.payment_method_line_id:
|
||||
vals["payment_method_line_id"] = False
|
||||
|
||||
if not full_in_kind:
|
||||
move_vals = donation._prepare_donation_move()
|
||||
# when we have a full in-kind donation: no account move
|
||||
if move_vals:
|
||||
move = self.env["account.move"].create(move_vals)
|
||||
move.with_context(validate_analytic=True)._post(soft=False)
|
||||
vals["move_id"] = move.id
|
||||
else:
|
||||
donation.message_post(
|
||||
body=_("Full in-kind donation: no account move generated")
|
||||
)
|
||||
|
||||
receipt = donation.generate_each_tax_receipt()
|
||||
if receipt:
|
||||
vals["tax_receipt_id"] = receipt.id
|
||||
|
||||
donation.write(vals)
|
||||
if donation.bank_statement_line_id:
|
||||
donation._reconcile_donation_from_bank_statement()
|
||||
donation.partner_id._update_donor_rank()
|
||||
return
|
||||
|
||||
def _reconcile_donation_from_bank_statement(self):
|
||||
self.ensure_one()
|
||||
mlines_to_reconcile = self.env["account.move.line"]
|
||||
transit_account = self.company_id.donation_account_id
|
||||
if not transit_account:
|
||||
raise UserError(
|
||||
_(
|
||||
"Donation %(donation)s is linked to a bank statement line, but "
|
||||
"the Donation by Credit Transfer Account is not set for company "
|
||||
"'%(company)s'. This should never happen.",
|
||||
donation=self.display_name,
|
||||
company=self.company_id.display_name,
|
||||
)
|
||||
)
|
||||
if not transit_account.reconcile:
|
||||
raise UserError(
|
||||
_(
|
||||
"The Donation by Credit Transfer Account '%(account)s' "
|
||||
"for company '%(company)s' is not reconciliable. "
|
||||
"This should never happen.",
|
||||
account=transit_account.display_name,
|
||||
company=self.company_id.display_name,
|
||||
)
|
||||
)
|
||||
|
||||
for donation_mline in self.move_id.line_ids:
|
||||
if (
|
||||
donation_mline.account_id == transit_account
|
||||
and not donation_mline.reconciled
|
||||
):
|
||||
mlines_to_reconcile |= donation_mline
|
||||
logger.info(
|
||||
f"Found donation move line to reconcile ID={donation_mline.id}"
|
||||
)
|
||||
break
|
||||
for statement_mline in self.bank_statement_line_id.move_id.line_ids:
|
||||
if (
|
||||
statement_mline.account_id == transit_account
|
||||
and not statement_mline.reconciled
|
||||
):
|
||||
mlines_to_reconcile |= statement_mline
|
||||
logger.info(
|
||||
"Found bank statement move line to reconcile ID=%d",
|
||||
statement_mline.id,
|
||||
)
|
||||
break
|
||||
if len(mlines_to_reconcile) == 2:
|
||||
mlines_to_reconcile.reconcile()
|
||||
logger.info(
|
||||
"Successfull reconcilation between donation and bank statement."
|
||||
)
|
||||
|
||||
def generate_each_tax_receipt(self):
|
||||
self.ensure_one()
|
||||
receipt = False
|
||||
if (
|
||||
self.tax_receipt_option == "each"
|
||||
and not self.tax_receipt_id
|
||||
and not self.company_currency_id.is_zero(self.tax_receipt_total)
|
||||
):
|
||||
receipt_vals = self._prepare_each_tax_receipt()
|
||||
receipt = self.env["donation.tax.receipt"].create(receipt_vals)
|
||||
return receipt
|
||||
|
||||
def save_default_values(self):
|
||||
self.ensure_one()
|
||||
self.env.user.write(
|
||||
{
|
||||
"context_donation_payment_method_line_id": self.payment_method_line_id.id,
|
||||
"context_donation_campaign_id": self.campaign_id.id,
|
||||
}
|
||||
)
|
||||
|
||||
def done2cancel(self):
|
||||
"""from Done state to Cancel state"""
|
||||
for donation in self:
|
||||
if donation.tax_receipt_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"You cannot cancel this donation because "
|
||||
"it is linked to the tax receipt %s. You should first "
|
||||
"delete this tax receipt (but it may not be legally "
|
||||
"allowed)."
|
||||
)
|
||||
% donation.tax_receipt_id.display_name
|
||||
)
|
||||
if donation.move_id:
|
||||
donation.move_id.button_cancel()
|
||||
donation.with_context(force_delete=True).move_id.unlink()
|
||||
donation.write({"state": "cancel"})
|
||||
donation.partner_id._update_donor_rank()
|
||||
|
||||
def cancel2draft(self):
|
||||
"""from Cancel state to Draft state"""
|
||||
for donation in self:
|
||||
if donation.move_id:
|
||||
raise UserError(
|
||||
_("A cancelled donation should not be linked to an account move")
|
||||
)
|
||||
if donation.tax_receipt_id:
|
||||
raise UserError(
|
||||
_("A cancelled donation should not be linked to a tax receipt")
|
||||
)
|
||||
self.write({"state": "draft"})
|
||||
|
||||
def unlink(self):
|
||||
for donation in self:
|
||||
if donation.state == "done":
|
||||
raise UserError(
|
||||
_("The donation '%s' is in Done state, so you cannot delete it.")
|
||||
% donation.display_name
|
||||
)
|
||||
if donation.move_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"The donation '%s' is linked to an account move, "
|
||||
"so you cannot delete it."
|
||||
)
|
||||
% donation.display_name
|
||||
)
|
||||
if donation.tax_receipt_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"The donation '%(donation)s' is linked to the tax receipt "
|
||||
"%(tax_receipt)s, so you cannot delete it.",
|
||||
donation=donation.display_name,
|
||||
tax_receipt=donation.tax_receipt_id.display_name,
|
||||
)
|
||||
)
|
||||
return super().unlink()
|
||||
|
||||
@api.depends("state", "number")
|
||||
def name_get(self):
|
||||
res = []
|
||||
for donation in self:
|
||||
name = donation.number
|
||||
if donation.state != "done":
|
||||
display_state = donation._fields["state"].convert_to_export(
|
||||
donation.state, donation
|
||||
)
|
||||
name = f"{name} ({display_state})"
|
||||
res.append((donation.id, name))
|
||||
return res
|
||||
|
||||
@api.depends("partner_id")
|
||||
def _compute_tax_receipt_option(self):
|
||||
for donation in self:
|
||||
donation.tax_receipt_option = (
|
||||
donation.partner_id
|
||||
and donation.partner_id.commercial_partner_id.tax_receipt_option
|
||||
or False
|
||||
)
|
||||
|
||||
@api.onchange("tax_receipt_option")
|
||||
def tax_receipt_option_change(self):
|
||||
res = {}
|
||||
if (
|
||||
self.partner_id
|
||||
and self.partner_id.commercial_partner_id.tax_receipt_option == "annual"
|
||||
and self.tax_receipt_option != "annual"
|
||||
):
|
||||
res = {
|
||||
"warning": {
|
||||
"title": _("Error:"),
|
||||
"message": _(
|
||||
"You cannot change the Tax Receipt Option when it is Annual."
|
||||
),
|
||||
},
|
||||
}
|
||||
self.tax_receipt_option = "annual"
|
||||
return res
|
||||
|
||||
def print_thanks(self):
|
||||
self.ensure_one()
|
||||
self.write({"thanks_printed": True})
|
||||
action = (
|
||||
self.env.ref("donation.report_thanks")
|
||||
.with_context(discard_logo_check=True)
|
||||
.report_action(self)
|
||||
)
|
||||
return action
|
||||
|
||||
def thanks_printed_button(self):
|
||||
self.write({"thanks_printed": True})
|
||||
|
||||
|
||||
class DonationLine(models.Model):
|
||||
_name = "donation.line"
|
||||
_description = "Donation Lines"
|
||||
_rec_name = "product_id"
|
||||
_inherit = "analytic.mixin"
|
||||
_check_company_auto = True
|
||||
|
||||
donation_id = fields.Many2one("donation.donation", ondelete="cascade")
|
||||
currency_id = fields.Many2one(
|
||||
related="donation_id.currency_id",
|
||||
store=True,
|
||||
)
|
||||
company_id = fields.Many2one(related="donation_id.company_id", store=True)
|
||||
company_currency_id = fields.Many2one(
|
||||
related="donation_id.company_id.currency_id",
|
||||
string="Company Currency",
|
||||
store=True,
|
||||
)
|
||||
product_id = fields.Many2one(
|
||||
"product.product",
|
||||
required=True,
|
||||
domain=[("is_donation", "=", True)],
|
||||
ondelete="restrict",
|
||||
check_company=True,
|
||||
)
|
||||
product_is_donation = fields.Boolean(
|
||||
related="product_id.is_donation", store=True, string="Product Type donation"
|
||||
)
|
||||
quantity = fields.Integer(default=1)
|
||||
unit_price = fields.Monetary(currency_field="currency_id")
|
||||
amount = fields.Monetary(
|
||||
compute="_compute_amount",
|
||||
currency_field="currency_id",
|
||||
store=True,
|
||||
)
|
||||
amount_company_currency = fields.Monetary(
|
||||
compute="_compute_amount",
|
||||
string="Amount in Company Currency",
|
||||
currency_field="company_currency_id",
|
||||
store=True,
|
||||
)
|
||||
tax_receipt_amount = fields.Monetary(
|
||||
compute="_compute_amount",
|
||||
string="Tax Receipt Eligible Amount",
|
||||
currency_field="company_currency_id",
|
||||
store=True,
|
||||
)
|
||||
sequence = fields.Integer()
|
||||
# for the fields tax_receipt_ok and in_kind, we made an important change
|
||||
# between v8 and v9: in v8, it was a reglar field set by an onchange
|
||||
# in v9, it is a related stored field
|
||||
tax_receipt_ok = fields.Boolean(
|
||||
related="product_id.tax_receipt_ok",
|
||||
store=True,
|
||||
)
|
||||
|
||||
@api.depends(
|
||||
"unit_price",
|
||||
"quantity",
|
||||
"product_id",
|
||||
"donation_id.currency_id",
|
||||
"donation_id.donation_date",
|
||||
"donation_id.company_id",
|
||||
)
|
||||
def _compute_amount(self):
|
||||
for line in self:
|
||||
amount = line.quantity * line.unit_price
|
||||
line.amount = amount
|
||||
donation_currency = line.donation_id.currency_id
|
||||
date = line.donation_id.donation_date or fields.Date.context_today(self)
|
||||
amount_company_currency = donation_currency._convert(
|
||||
amount,
|
||||
line.donation_id.company_id.currency_id,
|
||||
line.donation_id.company_id,
|
||||
date,
|
||||
)
|
||||
tax_receipt_amount_cc = 0.0
|
||||
if line.product_id.tax_receipt_ok:
|
||||
tax_receipt_amount_cc = amount_company_currency
|
||||
line.amount_company_currency = amount_company_currency
|
||||
line.tax_receipt_amount = tax_receipt_amount_cc
|
||||
|
||||
@api.depends("product_id")
|
||||
def _compute_analytic_distribution(self):
|
||||
for line in self:
|
||||
product = line.product_id
|
||||
if product:
|
||||
account = False
|
||||
try:
|
||||
account = line._get_account()
|
||||
except Exception:
|
||||
logger.warning(
|
||||
"No income account configured for product %s",
|
||||
product.display_name,
|
||||
)
|
||||
distribution = self.env[
|
||||
"account.analytic.distribution.model"
|
||||
]._get_distribution(
|
||||
{
|
||||
"product_id": product.id,
|
||||
"product_categ_id": product.categ_id.id,
|
||||
"account_prefix": account and account.code or False,
|
||||
"company_id": line.donation_id.company_id.id,
|
||||
}
|
||||
)
|
||||
line.analytic_distribution = distribution or line.analytic_distribution
|
||||
|
||||
@api.onchange("product_id")
|
||||
def product_id_change(self):
|
||||
for line in self:
|
||||
if line.product_id and line.product_id.list_price:
|
||||
# We should change that one day...
|
||||
line.unit_price = line.product_id.list_price
|
||||
|
||||
def _get_account(self):
|
||||
# Method designed to be inherited (in donation_mass for example)
|
||||
self.ensure_one()
|
||||
account = self.with_company(
|
||||
self.company_id.id
|
||||
).product_id._get_product_accounts()["income"]
|
||||
return account
|
||||
49
donation/models/donation_campaign.py
Normal file
49
donation/models/donation_campaign.py
Normal file
@ -0,0 +1,49 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class DonationCampaign(models.Model):
|
||||
_name = "donation.campaign"
|
||||
_description = "Code attributed for a Donation Campaign"
|
||||
_order = "sequence, id"
|
||||
|
||||
@api.depends("code", "name")
|
||||
def name_get(self):
|
||||
res = []
|
||||
for camp in self:
|
||||
name = camp.name
|
||||
if camp.code:
|
||||
name = f"[{camp.code}] {name}"
|
||||
res.append((camp.id, name))
|
||||
return res
|
||||
|
||||
active = fields.Boolean(default=True)
|
||||
sequence = fields.Integer(default=10)
|
||||
code = fields.Char()
|
||||
name = fields.Char(required=True)
|
||||
start_date = fields.Date(default=fields.Date.context_today)
|
||||
# company_id is NOT required, it is empty by default
|
||||
company_id = fields.Many2one("res.company", ondelete="cascade")
|
||||
note = fields.Text("Notes")
|
||||
|
||||
_sql_constraints = [
|
||||
(
|
||||
"code_company_uniq",
|
||||
"unique(code, company_id)",
|
||||
"A campaign with the same code already exists!",
|
||||
)
|
||||
]
|
||||
|
||||
@api.model
|
||||
def name_search(self, name="", args=None, operator="ilike", limit=100):
|
||||
if args is None:
|
||||
args = []
|
||||
if name and operator == "ilike":
|
||||
recs = self.search([("code", "=", name)] + args, limit=limit)
|
||||
if recs:
|
||||
return recs.name_get()
|
||||
return super().name_search(name=name, args=args, operator=operator, limit=limit)
|
||||
50
donation/models/donation_tax_receipt.py
Normal file
50
donation/models/donation_tax_receipt.py
Normal file
@ -0,0 +1,50 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class DonationTaxReceipt(models.Model):
|
||||
_inherit = "donation.tax.receipt"
|
||||
|
||||
donation_ids = fields.One2many(
|
||||
"donation.donation", "tax_receipt_id", string="Related Donations"
|
||||
)
|
||||
|
||||
@api.model
|
||||
def update_tax_receipt_annual_dict(
|
||||
self, tax_receipt_annual_dict, start_date, end_date, company
|
||||
):
|
||||
res = super().update_tax_receipt_annual_dict(
|
||||
tax_receipt_annual_dict, start_date, end_date, company
|
||||
)
|
||||
donations = self.env["donation.donation"].search(
|
||||
[
|
||||
("donation_date", ">=", start_date),
|
||||
("donation_date", "<=", end_date),
|
||||
("tax_receipt_option", "=", "annual"),
|
||||
("tax_receipt_id", "=", False),
|
||||
("tax_receipt_total", "!=", 0),
|
||||
("company_id", "=", company.id),
|
||||
("state", "=", "done"),
|
||||
]
|
||||
)
|
||||
for donation in donations:
|
||||
# tax_receipt_total is in company currency
|
||||
tax_receipt_amount = donation.tax_receipt_total
|
||||
if company.currency_id.is_zero(tax_receipt_amount):
|
||||
continue
|
||||
partner = donation.commercial_partner_id
|
||||
if partner not in tax_receipt_annual_dict:
|
||||
tax_receipt_annual_dict[partner] = {
|
||||
"amount": tax_receipt_amount,
|
||||
"extra_vals": {"donation_ids": [(6, 0, [donation.id])]},
|
||||
}
|
||||
else:
|
||||
tax_receipt_annual_dict[partner]["amount"] += tax_receipt_amount
|
||||
tax_receipt_annual_dict[partner]["extra_vals"]["donation_ids"][0][
|
||||
2
|
||||
].append(donation.id)
|
||||
return res
|
||||
23
donation/models/donation_thanks_template.py
Normal file
23
donation/models/donation_thanks_template.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2019 Akretion France
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class DonationThanksTemplate(models.Model):
|
||||
_name = "donation.thanks.template"
|
||||
_description = "Donation Thanks Letter Template"
|
||||
_order = "sequence"
|
||||
|
||||
sequence = fields.Integer(default=10)
|
||||
name = fields.Char(required=True)
|
||||
active = fields.Boolean(default=True)
|
||||
company_id = fields.Many2one(
|
||||
"res.company",
|
||||
string="Company",
|
||||
ondelete="cascade",
|
||||
default=lambda self: self.env.company,
|
||||
)
|
||||
text = fields.Text(translate=True)
|
||||
image = fields.Binary(attachment=True)
|
||||
40
donation/models/res_company.py
Normal file
40
donation/models/res_company.py
Normal file
@ -0,0 +1,40 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class ResCompany(models.Model):
|
||||
_inherit = "res.company"
|
||||
|
||||
donation_credit_transfer_product_id = fields.Many2one(
|
||||
"product.product",
|
||||
string="Product for Donations via Credit Transfer",
|
||||
domain=[("is_donantion", "=", True)],
|
||||
ondelete="restrict",
|
||||
)
|
||||
donation_account_id = fields.Many2one(
|
||||
"account.account",
|
||||
check_company=True,
|
||||
copy=False,
|
||||
ondelete="restrict",
|
||||
string="Donation by Credit Transfer Account",
|
||||
help="Transfer account for donations received by credit transfer. ",
|
||||
)
|
||||
|
||||
@api.constrains("donation_credit_transfer_product_id")
|
||||
def company_donation_bank_statement_check(self):
|
||||
for company in self:
|
||||
product = company.donation_credit_transfer_product_id
|
||||
if product and not product.is_donantion:
|
||||
raise ValidationError(
|
||||
_(
|
||||
"On the company %(company)s, the Product for Donations "
|
||||
"via Credit Transfer (%(product)s) is not a donation product !",
|
||||
company=company.display_name,
|
||||
product=product.display_name,
|
||||
)
|
||||
)
|
||||
33
donation/models/res_partner.py
Normal file
33
donation/models/res_partner.py
Normal file
@ -0,0 +1,33 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
@api.depends("donation_ids.partner_id")
|
||||
def _compute_donation_count(self):
|
||||
rg_res = self.env["donation.donation"]._read_group(
|
||||
[("partner_id", "in", self.ids), ("state", "=", "done")],
|
||||
["partner_id"],
|
||||
["__count"],
|
||||
)
|
||||
mapped_data = {x["partner_id"][0]: x["partner_id_count"] for x in rg_res}
|
||||
for partner in self:
|
||||
partner.donation_count = mapped_data.get(partner.id, 0)
|
||||
|
||||
donation_ids = fields.One2many(
|
||||
"donation.donation", "partner_id", string="Donations", readonly=True
|
||||
)
|
||||
donation_count = fields.Integer(
|
||||
compute="_compute_donation_count", string="# of Donations", compute_sudo=True
|
||||
)
|
||||
|
||||
def _prepare_donor_rank(self):
|
||||
rank = super()._prepare_donor_rank()
|
||||
rank += self.donation_count
|
||||
return rank
|
||||
21
donation/models/res_users.py
Normal file
21
donation/models/res_users.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResUsers(models.Model):
|
||||
_inherit = "res.users"
|
||||
|
||||
# begin with context_ to allow user to change it by himself
|
||||
context_donation_campaign_id = fields.Many2one(
|
||||
"donation.campaign", "Current Donation Campaign"
|
||||
)
|
||||
context_donation_payment_method_line_id = fields.Many2one(
|
||||
"account.payment.method.line",
|
||||
"Current Donation Payment Mode",
|
||||
domain=[("donation", "=", True)],
|
||||
company_dependent=True,
|
||||
)
|
||||
13
donation/post_install.py
Normal file
13
donation/post_install.py
Normal file
@ -0,0 +1,13 @@
|
||||
# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import SUPERUSER_ID, api
|
||||
|
||||
|
||||
def update_account_payment_method_line(cr):
|
||||
env = api.Environment(cr.cr, SUPERUSER_ID, {})
|
||||
modes = env["account.payment.method.line"].search(
|
||||
[("payment_type", "=", "inbound")]
|
||||
)
|
||||
modes.write({"donation": True})
|
||||
3
donation/pyproject.toml
Normal file
3
donation/pyproject.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
21
donation/readme/CONFIGURE.md
Normal file
21
donation/readme/CONFIGURE.md
Normal file
@ -0,0 +1,21 @@
|
||||
To configure this module, you need to:
|
||||
|
||||
> - create donation products
|
||||
> - make sure you have an inbound payment method for each payment method
|
||||
> used to receive donations. This payment method must be configured with
|
||||
> *Link to Bank Account* set to *Fixed* and with the donation option
|
||||
> active.
|
||||
> - if you wish to have a control amount on the donation, add the users
|
||||
> to the group *Donation Check Total*
|
||||
|
||||
If you receive donations via credit transfer, you must also:
|
||||
|
||||
- in the configuration page *Invoicing \> Configuration \> Settings*, in
|
||||
the *Donations* section, select the product that will be used for
|
||||
donations by credit transfer.
|
||||
- on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the *Payments Configuration*
|
||||
tab, select the *Donation by credit transfer account*. This account
|
||||
must allow reconciliation.
|
||||
- Make sure that the accountant that processes bank statements has
|
||||
*User* access level or higher on the *Donation* application.
|
||||
5
donation/readme/CONTRIBUTORS.md
Normal file
5
donation/readme/CONTRIBUTORS.md
Normal file
@ -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\>
|
||||
10
donation/readme/DESCRIPTION.md
Normal file
10
donation/readme/DESCRIPTION.md
Normal file
@ -0,0 +1,10 @@
|
||||
This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
**donation_bank_statement_oca**.
|
||||
|
||||
This module will assist you in writing a thanks letter.
|
||||
|
||||
This module also supports in-kind donations (in-kind donations don't
|
||||
generate any accounting entry but can generate a tax receipt).
|
||||
23
donation/readme/USAGE.md
Normal file
23
donation/readme/USAGE.md
Normal file
@ -0,0 +1,23 @@
|
||||
This module handles donations by cash, check or by credit transfer:
|
||||
|
||||
- for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module *account_check_deposit*
|
||||
from the project
|
||||
[OCA/account-financial-tools](https://github.com/OCA/account-financial-tools),
|
||||
you can create a check deposit.
|
||||
- for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.
|
||||
|
||||
When you validate a donation:
|
||||
|
||||
- it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.
|
||||
- if the tax receipt option of the donor is configured as *For Each
|
||||
Donation* and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.
|
||||
|
||||
To have some statistics about the donations, go to the menu Donation \>
|
||||
Reporting \> Donations Analysis.
|
||||
3
donation/report/__init__.py
Normal file
3
donation/report/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import donation_report
|
||||
114
donation/report/donation_report.py
Normal file
114
donation/report/donation_report.py
Normal file
@ -0,0 +1,114 @@
|
||||
# © 2014-2016 Barroux Abbey (http://www.barroux.org)
|
||||
# © 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from psycopg2 import sql
|
||||
|
||||
from odoo import fields, models, tools
|
||||
|
||||
|
||||
class DonationReport(models.Model):
|
||||
_name = "donation.report"
|
||||
_description = "Donations Analysis"
|
||||
_auto = False
|
||||
_rec_name = "donation_date"
|
||||
_order = "donation_date desc"
|
||||
|
||||
donation_date = fields.Date(readonly=True)
|
||||
product_id = fields.Many2one("product.product", readonly=True)
|
||||
product_is_donation = fields.Boolean(related="product_id.is_donation", store=True)
|
||||
partner_id = fields.Many2one("res.partner", "Donor", readonly=True)
|
||||
country_id = fields.Many2one("res.country", "Partner Country", readonly=True)
|
||||
company_id = fields.Many2one("res.company", readonly=True)
|
||||
product_categ_id = fields.Many2one(
|
||||
"product.category", "Category of Product", readonly=True
|
||||
)
|
||||
campaign_id = fields.Many2one(
|
||||
"donation.campaign", "Donation Campaign", readonly=True
|
||||
)
|
||||
payment_method_line_id = fields.Many2one(
|
||||
"account.payment.method.line", readonly=True
|
||||
)
|
||||
thanks_printed = fields.Boolean(readonly=True)
|
||||
thanks_template_id = fields.Many2one(
|
||||
"donation.thanks.template", string="Thanks Template", readonly=True
|
||||
)
|
||||
tax_receipt_ok = fields.Boolean("Eligible for a Tax Receipt")
|
||||
company_currency_id = fields.Many2one("res.currency", readonly=True)
|
||||
amount_company_currency = fields.Monetary(
|
||||
"Amount", readonly=True, currency_field="company_currency_id"
|
||||
)
|
||||
tax_receipt_amount = fields.Monetary(
|
||||
"Tax Receipt Eligible Amount",
|
||||
readonly=True,
|
||||
currency_field="company_currency_id",
|
||||
)
|
||||
|
||||
def _select(self):
|
||||
return sql.SQL(
|
||||
"""
|
||||
SELECT min(l.id) AS id,
|
||||
d.donation_date,
|
||||
l.product_id,
|
||||
l.product_is_donation,
|
||||
l.tax_receipt_ok,
|
||||
pt.categ_id AS product_categ_id,
|
||||
d.company_id,
|
||||
d.payment_method_line_id,
|
||||
d.partner_id,
|
||||
d.country_id,
|
||||
d.campaign_id,
|
||||
d.company_currency_id,
|
||||
d.thanks_printed,
|
||||
d.thanks_template_id,
|
||||
sum(l.amount_company_currency) AS amount_company_currency,
|
||||
sum(l.tax_receipt_amount) AS tax_receipt_amount
|
||||
"""
|
||||
)
|
||||
|
||||
def _from(self):
|
||||
return sql.SQL(
|
||||
"""
|
||||
donation_line l
|
||||
LEFT JOIN donation_donation d ON (d.id=l.donation_id)
|
||||
LEFT JOIN product_product pp ON (l.product_id=pp.id)
|
||||
LEFT JOIN product_template pt ON (pp.product_tmpl_id=pt.id)
|
||||
"""
|
||||
)
|
||||
|
||||
def _where(self):
|
||||
return sql.SQL(
|
||||
"""
|
||||
WHERE d.state='done'
|
||||
"""
|
||||
)
|
||||
|
||||
def _group_by(self):
|
||||
return sql.SQL(
|
||||
"""
|
||||
GROUP BY l.product_id,
|
||||
l.product_is_donation,
|
||||
l.tax_receipt_ok,
|
||||
pt.categ_id,
|
||||
d.donation_date,
|
||||
d.partner_id,
|
||||
d.country_id,
|
||||
d.campaign_id,
|
||||
d.company_id,
|
||||
d.payment_method_line_id,
|
||||
d.thanks_printed,
|
||||
d.thanks_template_id,
|
||||
d.company_currency_id
|
||||
"""
|
||||
)
|
||||
|
||||
def init(self):
|
||||
tools.drop_view_if_exists(self._cr, self._table)
|
||||
query = sql.SQL("CREATE OR REPLACE VIEW {0} AS ({1} FROM {2} {3} {4})").format(
|
||||
sql.Identifier(self._table),
|
||||
self._select(),
|
||||
self._from(),
|
||||
self._where(),
|
||||
self._group_by(),
|
||||
) # pylint: disable=sql-injection
|
||||
self._cr.execute(query)
|
||||
138
donation/report/donation_report_view.xml
Normal file
138
donation/report/donation_report_view.xml
Normal file
@ -0,0 +1,138 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_report_search" model="ir.ui.view">
|
||||
<field name="name">donation.report.search</field>
|
||||
<field name="model">donation.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="partner_id" />
|
||||
<field name="product_id" />
|
||||
<field name="product_categ_id" />
|
||||
<group string="Group By" name="groupby">
|
||||
<filter
|
||||
name="date_groupby"
|
||||
string="Date"
|
||||
context="{'group_by': 'donation_date'}"
|
||||
/>
|
||||
<filter
|
||||
name="partner_groupby"
|
||||
string="Partner"
|
||||
context="{'group_by': 'partner_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="partner_country_groupby"
|
||||
string="Partner Country"
|
||||
context="{'group_by': 'country_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="company_groupby"
|
||||
string="Company"
|
||||
context="{'group_by': 'company_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="product_categ_groupby"
|
||||
string="Product Category"
|
||||
context="{'group_by': 'product_categ_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="product_groupby"
|
||||
string="Product"
|
||||
context="{'group_by': 'product_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="product_is_donation"
|
||||
string="Product Type donation"
|
||||
context="{'group_by': 'product_is_donation'}"
|
||||
/>
|
||||
<filter
|
||||
name="tax_receipt_ok_groupby"
|
||||
string="Eligible for a Tax Receipt"
|
||||
context="{'group_by': 'tax_receipt_ok'}"
|
||||
/>
|
||||
<filter
|
||||
name="campaign_groupby"
|
||||
string="Campaign"
|
||||
context="{'group_by': 'campaign_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="payment_mode_groupby"
|
||||
string="Payment Mode"
|
||||
context="{'group_by': 'payment_method_line_id'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_report_graph" model="ir.ui.view">
|
||||
<field name="name">donation.report.graph</field>
|
||||
<field name="model">donation.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph>
|
||||
<field name="donation_date" />
|
||||
<field name="amount_company_currency" type="measure" />
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_report_pivot" model="ir.ui.view">
|
||||
<field name="name">donation.report.pivot</field>
|
||||
<field name="model">donation.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot>
|
||||
<field name="donation_date" type="row" interval="month" />
|
||||
<field name="product_id" type="col" />
|
||||
<field name="amount_company_currency" type="measure" />
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
<!-- list view used for drill-through -->
|
||||
<record id="donation_report_tree" model="ir.ui.view">
|
||||
<field name="name">donation.report.list</field>
|
||||
<field name="model">donation.report</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="partner_id" optional="show" />
|
||||
<field name="donation_date" optional="show" />
|
||||
<field name="country_id" optional="hide" />
|
||||
<field name="payment_method_line_id" optional="show" />
|
||||
<field name="campaign_id" optional="hide" />
|
||||
<field name="product_categ_id" optional="hide" />
|
||||
<field name="product_id" optional="show" />
|
||||
<field name="product_is_donation" optional="hide" />
|
||||
<field name="tax_receipt_ok" optional="show" />
|
||||
<field name="thanks_printed" optional="hide" />
|
||||
<field name="thanks_template_id" optional="hide" />
|
||||
<field name="tax_receipt_amount" sum="1" optional="show" />
|
||||
<field name="amount_company_currency" sum="1" />
|
||||
<field name="company_currency_id" invisible="1" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_report_action" model="ir.actions.act_window">
|
||||
<field name="name">Donations Analysis</field>
|
||||
<field name="res_model">donation.report</field>
|
||||
<field name="view_mode">pivot,graph,list</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="donation_report_title_menu"
|
||||
parent="donation_top_menu"
|
||||
name="Reporting"
|
||||
sequence="25"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_report_menu"
|
||||
action="donation_report_action"
|
||||
parent="donation_report_title_menu"
|
||||
sequence="10"
|
||||
/>
|
||||
</odoo>
|
||||
20
donation/report/donation_thanks_report.xml
Normal file
20
donation/report/donation_thanks_report.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="report_thanks" model="ir.actions.report">
|
||||
<field name="name">Thanks Letter</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="report_name">donation.report_donation_thanks</field>
|
||||
<field name="report_file">donation.report_donation_thanks</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field
|
||||
name="print_report_name"
|
||||
>'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-draft' or '')</field>
|
||||
<field name="binding_model_id" ref="model_donation_donation" />
|
||||
</record>
|
||||
</odoo>
|
||||
22
donation/report/donation_thanks_view.xml
Normal file
22
donation/report/donation_thanks_view.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_donation_thanks">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.internal_layout">
|
||||
<div class="page">
|
||||
<div
|
||||
t-field="o.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
|
||||
/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
83
donation/security/donation_security.xml
Normal file
83
donation/security/donation_security.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="module_category_donation" model="ir.module.category">
|
||||
<field name="name">Donation</field>
|
||||
<field name="description">Manage donations</field>
|
||||
<field name="sequence">45</field>
|
||||
<field name="parent_id" ref="base.module_category_accounting" />
|
||||
</record>
|
||||
<record id="group_donation_viewer" model="res.groups">
|
||||
<field name="name">Viewer</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
</record>
|
||||
<record id="group_donation_user" model="res.groups">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_donation_viewer'))]" />
|
||||
</record>
|
||||
<record id="group_donation_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_donation_user'))]" />
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]" />
|
||||
</record>
|
||||
<record id="group_donation_check_total" model="res.groups">
|
||||
<field name="name">Donation Check Total</field>
|
||||
<field name="category_id" ref="base.module_category_hidden" />
|
||||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[(4, ref('donation.group_donation_manager'))]"
|
||||
/>
|
||||
</record>
|
||||
<record id="base.user_admin" model="res.users">
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[(4, ref('donation.group_donation_manager'))]"
|
||||
/>
|
||||
</record>
|
||||
<!-- Multi-company Rules -->
|
||||
<record id="donation_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_donation" />
|
||||
<field name="domain_force">
|
||||
[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_line_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Line Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_line" />
|
||||
<field name="domain_force">
|
||||
[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_report_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Report Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_report" />
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_thanks_template_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Thanks Template multi-company</field>
|
||||
<field name="model_id" ref="model_donation_thanks_template" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_campaign_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Campaign multi-company</field>
|
||||
<field name="model_id" ref="model_donation_campaign" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
21
donation/security/ir.model.access.csv
Normal file
21
donation/security/ir.model.access.csv
Normal file
@ -0,0 +1,21 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_donation_donation_viewer,Read access on donation.donation to Donation Viewer,model_donation_donation,group_donation_viewer,1,0,0,0
|
||||
access_donation_donation_user,Full access on donation.donation to Donation User,model_donation_donation,group_donation_user,1,1,1,1
|
||||
access_donation_campaign_manager,Full access on donation.campaign to Donation Manager,model_donation_campaign,group_donation_manager,1,1,1,1
|
||||
access_donation_campaign_viewer,Read access on donation.campaign to Donation Viewer,model_donation_campaign,group_donation_viewer,1,0,0,0
|
||||
access_donation_line_viewer,Read access on donation.line to Donation Viewer,model_donation_line,group_donation_viewer,1,0,0,0
|
||||
access_donation_line_user,Full access on donation.line to Donation User,model_donation_line,group_donation_user,1,1,1,1
|
||||
access_donation_donation_read,Read access on donation.donation to Employee grp,model_donation_donation,base.group_user,1,0,0,0
|
||||
access_donation_line_read,Read access on donation.line to Employee grp,model_donation_line,base.group_user,1,0,0,0
|
||||
access_account_journal_donation,Read access on account.journal,account.model_account_journal,group_donation_viewer,1,0,0,0
|
||||
access_account_move_donation,Full access on account.move,account.model_account_move,group_donation_user,1,1,1,1
|
||||
access_account_move_line_donation,Full access on account.move.line,account.model_account_move_line,group_donation_user,1,1,1,1
|
||||
access_account_analytic_line_donation,Full access on account.analytic.line to donation user,analytic.model_account_analytic_line,group_donation_user,1,1,1,1
|
||||
access_donation_report,Full access on donation.report to Donation Viewer,model_donation_report,group_donation_viewer,1,1,1,1
|
||||
access_donation_tax_receipt_viewer,Read access on donation.tax.receipt to Donation Viewer grp,model_donation_tax_receipt,group_donation_viewer,1,0,0,0
|
||||
access_donation_tax_receipt,Create access on donation.tax.receipt to Donation User,model_donation_tax_receipt,group_donation_user,1,0,1,0
|
||||
access_donation_tax_receipt_full,Full access on donation.tax.receipt to Donation Manager,model_donation_tax_receipt,group_donation_manager,1,1,1,1
|
||||
access_donation_thanks_template_manager,Full access on donation.thanks.template to Donation Manager,model_donation_thanks_template,group_donation_manager,1,1,1,1
|
||||
access_donation_thanks_template_viewer,Read access on donation.thanks.template to Donation Viewer,model_donation_thanks_template,group_donation_viewer,1,0,0,0
|
||||
access_donation_validate,Full access on donation validate wizard,model_donation_validate,group_donation_user,1,1,1,1
|
||||
access_donation_tax_receipt_option_switch,Full access on donation_tax_receipt_option_switch wizard,model_donation_tax_receipt_option_switch,group_donation_user,1,1,1,1
|
||||
|
BIN
donation/static/description/icon.png
Normal file
BIN
donation/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
196
donation/static/description/icon.svg
Normal file
196
donation/static/description/icon.svg
Normal file
@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="100mm"
|
||||
height="100mm"
|
||||
viewBox="0 0 100 100"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:version="0.92.4 (f8dce91, 2019-08-02)"
|
||||
inkscape:export-filename="/home/jaime/Escritorio/icon.png"
|
||||
inkscape:export-xdpi="91"
|
||||
inkscape:export-ydpi="91">
|
||||
<defs
|
||||
id="defs2">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4562">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="13.040181"
|
||||
x="-124.92113"
|
||||
height="98.866074"
|
||||
width="99.811012"
|
||||
id="rect4564"
|
||||
style="fill:#aa0000;stroke-width:0.26458332"
|
||||
clip-path="none" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4578">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="1.5119057"
|
||||
x="-120.00744"
|
||||
height="97.930626"
|
||||
width="99.811012"
|
||||
id="rect4580"
|
||||
style="fill:#aa0000;stroke-width:0.26458332" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4578-3">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="1.5119057"
|
||||
x="-120.00744"
|
||||
height="97.930626"
|
||||
width="99.811012"
|
||||
id="rect4580-6"
|
||||
style="fill:#aa0000;stroke-width:0.26458332" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="72.826115"
|
||||
inkscape:cy="127.25228"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-page="true"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1853"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="67"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false">
|
||||
<sodipodi:guide
|
||||
position="31.183035,81.453868"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4619"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="65.956845,10.583333"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4621"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="67.704985,78.09933"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4623"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="62.407434,24.722431"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4625"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Layer 3" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Layer 2"
|
||||
style="display:inline">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="25.164532"
|
||||
width="100"
|
||||
id="rect4535"
|
||||
style="fill:#de8787;stroke-width:0.13272627"
|
||||
ry="4.9136906"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<rect
|
||||
ry="4.9136906"
|
||||
style="fill:#501616;stroke-width:0.13272627"
|
||||
id="rect4566"
|
||||
width="100"
|
||||
height="25.164532"
|
||||
x="0.18899068"
|
||||
y="74.958138"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<rect
|
||||
style="fill:#800080;stroke-width:0.26458332"
|
||||
id="rect914"
|
||||
width="99.811012"
|
||||
height="97.930626"
|
||||
x="0.18898809"
|
||||
y="1.1339295"
|
||||
ry="4.1577382"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m -119.93657,64.635599 -0.25988,-14.100283 v 49.842664 l -0.10009,-17.197917 0.0986,0.188988 63.235934,-16.365413 -62.534814,16.120116 -0.84138,0.0091 57.369031,-57.747002 -9.386044,1.225775 -0.523352,-7.522118"
|
||||
style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75454544;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path4576"
|
||||
clip-path="url(#clipPath4578)"
|
||||
transform="translate(120.21264,-0.31639914)"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m -120.69252,82.40048 0.49609,-31.865164 v 49.842664 h 37.697532 l 5.579265,-0.944941 37.911526,-37.53208 c -39.824515,24.042545 -0.242948,0.516749 -4.21358,0.474115 -7.264003,-0.078 -37.597022,15.482201 -33.017329,12.255689 31.028683,-21.860511 4.494348,-15.920349 -0.174165,-18.219814 l 14.199994,-15.528114 -6.929198,-10.869463 -5.626031,6.085025"
|
||||
style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75294118;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path4576-7"
|
||||
clip-path="url(#clipPath4578-3)"
|
||||
transform="translate(120.51819,0.47953594)"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972"
|
||||
sodipodi:nodetypes="ccccccsscccc" />
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.71428573;fill-opacity:0"
|
||||
d="m 9.9291099,372.78181 c -3.3243104,-1.50995 -8.2615024,-6.88043 -7.6913163,-8.36632 0.2112108,-0.5504 0.1085589,-1.00163 -0.2281152,-1.00273 -0.3366742,-10e-4 -0.6121349,-25.03982 -0.6121349,-55.6416 V 252.13154 L 88.540401,163.21716 c 47.928569,-48.9029 87.185559,-88.873107 87.237739,-88.822673 0.0522,0.05043 -0.0682,2.548093 -0.26755,5.550352 l -0.36245,5.458652 -2.58958,0.430374 c -7.33955,1.219789 -15.15831,7.370133 -18.53946,14.583395 -1.59811,3.40938 -1.90727,5.05306 -1.90727,10.14035 0,5.20396 0.28579,6.65342 2.00026,10.14473 2.35095,4.78743 7.56285,9.75366 12.86245,12.25614 2.03979,0.96319 9.49443,3.25496 16.56586,5.09282 7.07143,1.83786 13.58036,3.8039 14.46429,4.36898 1.96695,1.25743 2.0642,3.21658 0.24152,4.86607 -1.2044,1.08997 -2.57462,1.19237 -11.60714,0.86747 -5.63284,-0.20261 -11.72551,-0.57718 -13.53927,-0.83237 -3.27994,-0.46148 -3.32622,-0.43844 -8.57143,4.26688 -6.00398,5.38599 -7.24201,7.51799 -6.163,10.61324 0.83704,2.40111 6.8498,5.60636 13.17057,7.02088 l 3.79017,0.84821 v 4.20752 c 0,4.30054 1.09503,7.375 3.27272,9.1886 0.78399,0.65292 3.63217,1.1478 7.92245,1.37655 l 6.6984,0.35714 -13.05392,13.62625 -13.05393,13.62626 -18.57143,0.39821 c -20.10746,0.43116 -23.54543,0.95475 -32.40523,4.93521 -5.50381,2.47271 -8.51616,4.60369 -21.565619,15.25583 l -10.081808,8.22967 h -12.4609 c -13.416673,0 -16.223795,0.55781 -18.39309,3.65491 -1.019424,1.45543 -1.164781,4.58911 -1.164781,25.11093 0,25.61654 0.150954,26.66485 4.073459,28.28857 1.483715,0.61418 23.416348,0.77796 85.212259,0.63632 l 83.21428,-0.19073 4.64286,-2.21371 c 3.26851,-1.55843 14.01419,-9.7717 36.30135,-27.74628 17.41216,-14.0429 31.76556,-25.42173 31.89642,-25.28628 0.13086,0.13545 -28.52003,29.57663 -63.66865,65.42484 l -63.90658,65.17857 -78.704127,-0.0157 c -74.913528,-0.0149 -78.843655,-0.0791 -81.6011331,-1.33155 z"
|
||||
id="path4581"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="scale(0.26458333)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-197)"
|
||||
style="display:inline">
|
||||
<path
|
||||
transform="translate(0,197)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke-width:0.11765506"
|
||||
d="m 45.73225,35.693232 6.364116,1.688027 a 1.0073293,1.0139958 0 0 1 0.777484,0.956154 c 0,0.543001 -0.479624,0.991567 -1.069481,0.991567 H 47.62964 A 3.5180301,3.5413125 0 0 1 46.317415,39.069284 C 45.702933,38.809587 44.994636,38.86861 44.52322,39.305371 l -2.228085,2.065766 a 1.3696864,1.3787509 0 0 0 -0.263853,0.313996 1.3391968,1.3480597 0 0 0 0.454999,1.858009 9.8235129,9.8885253 0 0 0 4.046907,1.357503 v 2.089374 c 0,1.038782 0.918206,1.888697 2.036939,1.888697 h 2.036939 c 1.119907,0 2.038113,-0.849915 2.038113,-1.888697 v -2.07757 c 3.861625,-0.424958 6.782764,-3.659356 6.273818,-7.436756 -0.369389,-2.715006 -2.63383,-4.875206 -5.45998,-5.630687 L 47.0949,30.156981 a 1.0073293,1.0139958 0 0 1 -0.777485,-0.956154 c 0,-0.543003 0.479625,-0.991568 1.069481,-0.991568 h 4.17473 a 3.5180301,3.5413125 0 0 1 1.316916,0.259696 c 0.613309,0.259696 1.322779,0.200675 1.794195,-0.236088 l 2.228086,-2.065765 a 1.3262973,1.3350748 0 0 0 0.254471,-0.306914 1.3403695,1.3492401 0 0 0 -0.450308,-1.86273 9.8293764,9.894427 0 0 0 -4.048081,-1.357503 v -2.091736 c 0,-1.038784 -0.917033,-1.888699 -2.036938,-1.888699 h -2.03694 c -1.119906,0 -2.036939,0.849915 -2.036939,1.888699 v 2.077571 c -3.856934,0.424957 -6.783935,3.659356 -6.274994,7.436756 0.368221,2.715006 2.639695,4.875207 5.461156,5.630686 z m 34.501321,21.696442 c -1.383757,-1.263066 -3.541485,-1.180437 -4.995603,0 L 64.402435,66.113105 A 7.4629144,7.512304 0 0 1 59.71173,67.765719 H 45.842482 a 1.8762835,1.8887007 0 0 1 0,-3.777397 h 9.180885 c 1.864556,0 3.601291,-1.286678 3.89915,-3.139963 a 3.6587513,3.682965 0 0 0 0.05394,-0.644525 3.7525655,3.7774 0 0 0 -3.752566,-3.770315 H 36.461068 a 13.797714,13.889027 0 0 0 -8.689535,3.103372 l -5.452946,4.451431 h -6.496629 a 1.8762827,1.8887 0 0 0 -1.876283,1.888699 v 11.3322 a 1.8762827,1.8887 0 0 0 1.876283,1.888699 h 41.837586 a 7.5051308,7.5547997 0 0 0 4.690707,-1.652615 L 80.084642,63.162011 a 3.7525655,3.7774 0 0 0 0.150103,-5.772337 z"
|
||||
id="path2" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
492
donation/static/description/index.html
Normal file
492
donation/static/description/index.html
Normal file
@ -0,0 +1,492 @@
|
||||
<!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: https://docutils.sourceforge.io/" />
|
||||
<title>Donation</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/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: gray; } /* 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, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="donation">
|
||||
<h1 class="title">Donation</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:78b9e7ee3023d661a6d8e3cdf6437ed367d544769741db1292b88038e851686a
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" 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 image-reference" 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 image-reference" href="https://github.com/OCA/donation/tree/18.0/donation"><img alt="OCA/donation" src="https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
<strong>donation_bank_statement_oca</strong>.</p>
|
||||
<p>This module will assist you in writing a thanks letter.</p>
|
||||
<p>This module also supports in-kind donations (in-kind donations don’t
|
||||
generate any accounting entry but can generate a tax receipt).</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||
<p>To configure this module, you need to:</p>
|
||||
<blockquote>
|
||||
<ul class="simple">
|
||||
<li>create donation products</li>
|
||||
<li>make sure you have an inbound payment method for each payment
|
||||
method used to receive donations. This payment method must be
|
||||
configured with <em>Link to Bank Account</em> set to <em>Fixed</em> and with the
|
||||
donation option active.</li>
|
||||
<li>if you wish to have a control amount on the donation, add the users
|
||||
to the group <em>Donation Check Total</em></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<p>If you receive donations via credit transfer, you must also:</p>
|
||||
<ul class="simple">
|
||||
<li>in the configuration page <em>Invoicing > Configuration > Settings</em>, in
|
||||
the <em>Donations</em> section, select the product that will be used for
|
||||
donations by credit transfer.</li>
|
||||
<li>on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the <em>Payments Configuration</em>
|
||||
tab, select the <em>Donation by credit transfer account</em>. This account
|
||||
must allow reconciliation.</li>
|
||||
<li>Make sure that the accountant that processes bank statements has
|
||||
<em>User</em> access level or higher on the <em>Donation</em> application.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
|
||||
<p>This module handles donations by cash, check or by credit transfer:</p>
|
||||
<ul class="simple">
|
||||
<li>for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module <em>account_check_deposit</em>
|
||||
from the project
|
||||
<a class="reference external" href="https://github.com/OCA/account-financial-tools">OCA/account-financial-tools</a>,
|
||||
you can create a check deposit.</li>
|
||||
<li>for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.</li>
|
||||
</ul>
|
||||
<p>When you validate a donation:</p>
|
||||
<ul class="simple">
|
||||
<li>it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.</li>
|
||||
<li>if the tax receipt option of the donor is configured as <em>For Each
|
||||
Donation</em> and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.</li>
|
||||
</ul>
|
||||
<p>To have some statistics about the donations, go to the menu Donation >
|
||||
Reporting > Donations Analysis.</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">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 to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2018.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="#toc-entry-4">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">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="#toc-entry-6">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Brother Bernard <informatique - at - barroux.org></li>
|
||||
<li>Brother Irénée (Barroux Abbey)</li>
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Serpent Consulting Services Pvt. Ltd. <<a class="reference external" href="mailto:support@serpentcs.com">support@serpentcs.com</a>></li>
|
||||
<li>Nikul Chaudhary <<a class="reference external" href="mailto:nikul.chaudhary.serpentcs@gmail.com">nikul.chaudhary.serpentcs@gmail.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/18.0/donation">OCA/donation</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
3
donation/tests/__init__.py
Normal file
3
donation/tests/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import test_donation
|
||||
328
donation/tests/test_donation.py
Normal file
328
donation/tests/test_donation.py
Normal file
@ -0,0 +1,328 @@
|
||||
# Copyright 2015-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import time
|
||||
|
||||
from odoo import fields
|
||||
from odoo.tests.common import TransactionCase
|
||||
|
||||
|
||||
class TestDonation(TransactionCase):
|
||||
at_install = False
|
||||
post_install = True
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.bank_journal = self.env["account.journal"].create(
|
||||
{
|
||||
"type": "bank",
|
||||
"name": "test bank journal",
|
||||
}
|
||||
)
|
||||
self.payment_mode = self.env["account.payment.method.line"].create(
|
||||
{
|
||||
"name": "test_payment_mode",
|
||||
"donation": True,
|
||||
"bank_account_link": "fixed",
|
||||
"journal_id": self.bank_journal.id,
|
||||
"payment_method_id": self.env.ref(
|
||||
"account.account_payment_method_manual_in"
|
||||
).id,
|
||||
}
|
||||
)
|
||||
today = time.strftime("%Y-%m-%d")
|
||||
self.product = self.env.ref("donation_base.product_product_donation")
|
||||
self.ddo = self.env["donation.donation"]
|
||||
self.donor1 = self.env.ref("donation_base.donor1")
|
||||
self.donor2 = self.env.ref("donation_base.donor2")
|
||||
self.donor3 = self.env.ref("donation_base.donor3")
|
||||
|
||||
self.don1 = self.ddo.create(
|
||||
{
|
||||
"check_total": 100,
|
||||
"partner_id": self.donor1.id,
|
||||
"donation_date": today,
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "each",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 100,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
self.don2 = self.ddo.create(
|
||||
{
|
||||
"check_total": 120,
|
||||
"partner_id": self.donor2.id,
|
||||
"donation_date": today,
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "annual",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 120,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
self.don3 = self.ddo.create(
|
||||
{
|
||||
"check_total": 150,
|
||||
"partner_id": self.donor3.id,
|
||||
"donation_date": today,
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "none",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 150,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
self.don4 = self.ddo.create(
|
||||
{
|
||||
"check_total": 1000,
|
||||
"partner_id": self.donor1.id,
|
||||
"donation_date": today,
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "each",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 1000,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
self.don5 = self.ddo.create(
|
||||
{
|
||||
"check_total": 1200,
|
||||
"partner_id": self.donor1.id,
|
||||
"donation_date": today,
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "each",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 800,
|
||||
},
|
||||
),
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 400,
|
||||
},
|
||||
),
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
def test_donation_1(self):
|
||||
donations = [self.don1, self.don2, self.don3, self.don4, self.don5]
|
||||
for donation in donations:
|
||||
self.assertEqual(donation.state, "draft")
|
||||
donation.validate()
|
||||
self.assertEqual(donation.state, "done")
|
||||
if donation == self.don4:
|
||||
self.assertFalse(donation.move_id)
|
||||
else:
|
||||
self.assertEqual(donation.move_id.state, "posted")
|
||||
self.assertEqual(donation.payment_ref, donation.move_id.ref)
|
||||
self.assertEqual(
|
||||
donation.payment_method_line_id.journal_id,
|
||||
donation.move_id.journal_id,
|
||||
)
|
||||
self.assertEqual(donation.donation_date, donation.move_id.date)
|
||||
if donation.tax_receipt_option == "each" and donation.tax_receipt_total:
|
||||
self.assertTrue(donation.tax_receipt_id)
|
||||
tax_receipt = donation.tax_receipt_id
|
||||
self.assertEqual(tax_receipt.type, "each")
|
||||
self.assertEqual(donation.commercial_partner_id, tax_receipt.partner_id)
|
||||
self.assertEqual(donation.donation_date, tax_receipt.donation_date)
|
||||
self.assertEqual(donation.tax_receipt_total, tax_receipt.amount)
|
||||
|
||||
def test_donation_2(self):
|
||||
self.donation_id = self.ddo.create(
|
||||
{
|
||||
"check_total": 1000,
|
||||
"partner_id": self.donor1.id,
|
||||
"donation_date": time.strftime("%Y-%m-%d"),
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "each",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 1000,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
self.donation_id.name_get()
|
||||
self.donation_id.save_default_values()
|
||||
self.donation_id.tax_receipt_option_change()
|
||||
self.donation_id.validate()
|
||||
self.donation_id.tax_receipt_id = False
|
||||
self.donation_id.done2cancel()
|
||||
self.donation_id.cancel2draft()
|
||||
self.donation_id.unlink()
|
||||
|
||||
def test_annual_tax_receipt(self):
|
||||
self.res_partner = self.env["res.partner"]
|
||||
|
||||
partner_familly = self.res_partner.create(
|
||||
{"name": "Famille Joly", "tax_receipt_option": "annual"}
|
||||
)
|
||||
partner_husband = self.res_partner.create(
|
||||
{"parent_id": partner_familly.id, "name": "Xavier Joly"}
|
||||
)
|
||||
partner_wife = self.res_partner.create(
|
||||
{"parent_id": partner_familly.id, "name": "Stéphanie Joly"}
|
||||
)
|
||||
|
||||
partner_husband._compute_donation_count()
|
||||
dons = self.create_donation_annual_receipt(
|
||||
partner_husband, 40, 10, "CHQ FB 93283290"
|
||||
)
|
||||
dons += self.create_donation_annual_receipt(
|
||||
partner_husband, 140, 60, "CHQ FB OPIE02"
|
||||
)
|
||||
dons += self.create_donation_annual_receipt(
|
||||
partner_wife, 20, 5, "CHQ FB AZERTY1242"
|
||||
)
|
||||
dons.validate()
|
||||
last_day_year = time.strftime("%Y-12-31")
|
||||
wizard = self.env["tax.receipt.annual.create"].create(
|
||||
{"start_date": time.strftime("%Y-01-01"), "end_date": last_day_year}
|
||||
)
|
||||
action = wizard.generate_annual_receipts()
|
||||
tax_receipt_ids = action["domain"][0][2]
|
||||
self.assertTrue(tax_receipt_ids)
|
||||
dtro = self.env["donation.tax.receipt"]
|
||||
tax_receipts = dtro.search(
|
||||
[
|
||||
("partner_id", "=", partner_familly.id),
|
||||
("type", "=", "annual"),
|
||||
("id", "in", tax_receipt_ids),
|
||||
]
|
||||
)
|
||||
self.assertEqual(len(tax_receipts), 1)
|
||||
tax_receipt = tax_receipts[0]
|
||||
self.assertEqual(tax_receipt.amount, 200)
|
||||
self.assertTrue(tax_receipt.number)
|
||||
self.assertEqual(tax_receipt.date, fields.Date.from_string(last_day_year))
|
||||
self.assertEqual(
|
||||
tax_receipt.donation_date, fields.Date.from_string(last_day_year)
|
||||
)
|
||||
self.assertEqual(tax_receipt.currency_id, dons[0].company_id.currency_id)
|
||||
|
||||
def test_donation_campaign(self):
|
||||
self.campaign_id = self.env.ref("donation.quest_origin")
|
||||
self.campaign_id.name_get()
|
||||
|
||||
self.don8 = self.ddo.create(
|
||||
{
|
||||
"check_total": 1000,
|
||||
"partner_id": self.donor1.id,
|
||||
"donation_date": time.strftime("%Y-%m-%d"),
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"tax_receipt_option": "each",
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": 1000,
|
||||
},
|
||||
)
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
self.validate = self.env["donation.validate"]
|
||||
wizard = self.validate.with_context(
|
||||
active_ids=self.don8.ids,
|
||||
active_model="donation.donation",
|
||||
active_id=self.don8.id,
|
||||
).create({})
|
||||
wizard.run()
|
||||
|
||||
self.option_switch = self.env["donation.tax.receipt.option.switch"]
|
||||
wizard = self.option_switch.create(
|
||||
{"donation_id": self.don8.id, "new_tax_receipt_option": "annual"}
|
||||
)
|
||||
self.don8.tax_receipt_id = False
|
||||
wizard.switch()
|
||||
|
||||
def create_donation_annual_receipt(
|
||||
self, partner, amount_tax_receipt, amount_no_tax_receipt, payment_ref
|
||||
):
|
||||
donation = self.ddo.create(
|
||||
{
|
||||
"payment_method_line_id": self.payment_mode.id,
|
||||
"partner_id": partner.id,
|
||||
"tax_receipt_option": "annual",
|
||||
"donation_date": time.strftime("%Y-01-01"),
|
||||
"payment_ref": payment_ref,
|
||||
"line_ids": [
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.product.id,
|
||||
"quantity": 1,
|
||||
"unit_price": amount_tax_receipt,
|
||||
},
|
||||
),
|
||||
(
|
||||
0,
|
||||
0,
|
||||
{
|
||||
"product_id": self.env.ref(
|
||||
"donation_base.product_product_donation_notaxreceipt"
|
||||
).id,
|
||||
"quantity": 1,
|
||||
"unit_price": amount_no_tax_receipt,
|
||||
},
|
||||
),
|
||||
],
|
||||
}
|
||||
)
|
||||
return donation
|
||||
61
donation/views/account_payment_mode.xml
Normal file
61
donation/views/account_payment_mode.xml
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<record id="account_payment_mode_form" model="ir.ui.view">
|
||||
<field name="name">donation.account.payment.mode.form</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_base_oca.account_payment_method_line_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="donation" invisible="payment_type != 'inbound'" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_payment_mode_tree" model="ir.ui.view">
|
||||
<field name="name">donation.account.payment.mode.list</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_base_oca.view_account_payment_method_line_tree"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="donation" optional="hide" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="account_payment_mode_search" model="ir.ui.view"> -->
|
||||
<!-- <field name="model">account.payment.mothod.line</field> -->
|
||||
<!-- <field -->
|
||||
<!-- name="inherit_id" -->
|
||||
<!-- ref="account.account_payment_method_line_search" -->
|
||||
<!-- /> -->
|
||||
<!-- <field name="arch" type="xml"> -->
|
||||
<!-- <filter -->
|
||||
<!-- name="donation" -->
|
||||
<!-- domain="[('donation', '=', True)]" -->
|
||||
<!-- string="Donation" -->
|
||||
<!-- /> -->
|
||||
<!-- </field> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record id="account_payment_mode_donation_action" model="ir.actions.act_window">
|
||||
<field name="name">Payment Modes</field>
|
||||
<field name="res_model">account.payment.method.line</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('payment_type', '=', 'inbound')]</field>
|
||||
<field
|
||||
name="context"
|
||||
>{'default_donation': True, 'search_default_donation': True}</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="account_payment_mode_donation_menu"
|
||||
action="account_payment_mode_donation_action"
|
||||
parent="donation_config_menu"
|
||||
sequence="30"
|
||||
/>
|
||||
</odoo>
|
||||
547
donation/views/donation.xml
Normal file
547
donation/views/donation.xml
Normal file
@ -0,0 +1,547 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_form" model="ir.ui.view">
|
||||
<field name="name">donation.form</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<header>
|
||||
<button
|
||||
type="object"
|
||||
name="validate"
|
||||
string="Validate"
|
||||
class="oe_highlight"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="state != 'draft' or context.get('recurring_view')"
|
||||
/>
|
||||
<button
|
||||
name="print_thanks"
|
||||
string="Print Thanks Letter"
|
||||
type="object"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="thanks_printed == True or state != 'done'"
|
||||
class="oe_highlight"
|
||||
/>
|
||||
<button
|
||||
type="object"
|
||||
name="cancel2draft"
|
||||
string="Back to Draft"
|
||||
invisible="state != 'cancel'"
|
||||
groups="donation.group_donation_user"
|
||||
/>
|
||||
<button
|
||||
type="object"
|
||||
name="done2cancel"
|
||||
string="Cancel"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="state != 'done' or context.get('recurring_view')"
|
||||
/>
|
||||
<button
|
||||
type="object"
|
||||
name="save_default_values"
|
||||
string="Save Default Values"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="context.get('recurring_view')"
|
||||
/>
|
||||
<field
|
||||
name="state"
|
||||
widget="statusbar"
|
||||
invisible="context.get('recurring_view')"
|
||||
statusbar_visible="draft,done"
|
||||
/>
|
||||
</header>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box" />
|
||||
<div class="oe_title">
|
||||
<h1>
|
||||
<field name="number" readonly="1" />
|
||||
</h1>
|
||||
</div>
|
||||
<group name="main">
|
||||
<group name="manual">
|
||||
<field name="partner_id" readonly="state == 'done'" />
|
||||
<field name="commercial_partner_id" invisible="1" />
|
||||
<field
|
||||
name="payment_method_line_id"
|
||||
readonly="state == 'done'"
|
||||
widget="selection"
|
||||
/>
|
||||
<field
|
||||
name="currency_id"
|
||||
groups="base.group_multi_currency"
|
||||
readonly="state == 'done'"
|
||||
/>
|
||||
<field name="currency_id" invisible="1" />
|
||||
<field name="company_currency_id" invisible="1" />
|
||||
<field
|
||||
name="check_total"
|
||||
readonly="state =='done'"
|
||||
groups="donation.group_donation_check_total"
|
||||
/>
|
||||
<field name="payment_ref" readonly="state == 'done'" />
|
||||
<field
|
||||
name="donation_date"
|
||||
readonly="state == 'done'"
|
||||
options="{'datepicker': {'warn_future': true}}"
|
||||
/>
|
||||
<field name="campaign_id" />
|
||||
<field name="thanks_template_id" widget="selection" />
|
||||
</group>
|
||||
<group name="auto">
|
||||
<field
|
||||
name="company_id"
|
||||
invisible="1"
|
||||
readonly="state =='done'"
|
||||
/>
|
||||
<field
|
||||
name="company_id"
|
||||
readonly="state =='done'"
|
||||
groups="base.group_multi_company"
|
||||
/>
|
||||
<label for="tax_receipt_option" />
|
||||
<div name="tax_receipt_option">
|
||||
<field
|
||||
name="tax_receipt_option"
|
||||
class="oe_inline"
|
||||
readonly="state == 'done'"
|
||||
/>
|
||||
<button
|
||||
name="%(donation_tax_receipt_option_switch_action)d"
|
||||
string="Change"
|
||||
type="action"
|
||||
class="oe_link"
|
||||
invisible="state != 'done' or tax_receipt_id != False"
|
||||
/>
|
||||
</div>
|
||||
<field name="tax_receipt_total" />
|
||||
<field name="tax_receipt_id" />
|
||||
<field name="thanks_printed" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Donation Lines" name="lines">
|
||||
<field
|
||||
name="line_ids"
|
||||
nolabel="1"
|
||||
readonly="state == 'done'"
|
||||
/>
|
||||
<group name="subtotal" class="oe_subtotal_footer oe_right">
|
||||
<field
|
||||
name="amount_total"
|
||||
string="Total"
|
||||
class="oe_subtotal_footer_separator"
|
||||
/>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Other Information" name="other">
|
||||
<group name="other">
|
||||
<group name="other-left">
|
||||
<field name="move_id" />
|
||||
<field name="bank_statement_line_id" />
|
||||
<field
|
||||
name="amount_total_company_currency"
|
||||
groups="base.group_multi_currency"
|
||||
/>
|
||||
</group>
|
||||
<group name="other-right" />
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter />
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_from_bank_statement_line_form" model="ir.ui.view">
|
||||
<field name="name">Creation Donation from Bank Statement Line form</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="priority">100</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group name="main">
|
||||
<group name="manual">
|
||||
<field name="partner_id" readonly="1" />
|
||||
<field name="commercial_partner_id" invisible="1" />
|
||||
<field name="payment_method_line_id" readonly="1" />
|
||||
<field
|
||||
name="currency_id"
|
||||
groups="base.group_multi_currency"
|
||||
readonly="1"
|
||||
/>
|
||||
<field name="company_currency_id" invisible="1" />
|
||||
<field
|
||||
name="check_total"
|
||||
groups="donation.group_donation_check_total"
|
||||
readonly="1"
|
||||
/>
|
||||
<field name="payment_ref" readonly="state == 'done'" />
|
||||
<field
|
||||
name="donation_date"
|
||||
readonly="state == 'done'"
|
||||
options="{'datepicker': {'warn_future': true}}"
|
||||
/>
|
||||
<field name="campaign_id" />
|
||||
<field name="thanks_template_id" widget="selection" />
|
||||
</group>
|
||||
<group name="auto">
|
||||
<field name="company_id" invisible="1" />
|
||||
<field name="state" invisible="1" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
readonly="1"
|
||||
/>
|
||||
<field name="tax_receipt_option" readonly="state == 'done'" />
|
||||
<field name="tax_receipt_total" />
|
||||
<field name="bank_statement_line_id" />
|
||||
</group>
|
||||
</group>
|
||||
<group name="lines" string="Lines" colspan="2">
|
||||
<field name="line_ids" nolabel="1" readonly="state == 'done'" />
|
||||
<group name="subtotal" class="oe_subtotal_footer oe_right">
|
||||
<field
|
||||
name="amount_total"
|
||||
string="Total"
|
||||
class="oe_subtotal_footer_separator"
|
||||
/>
|
||||
</group>
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
type="object"
|
||||
name="validate"
|
||||
string="Validate"
|
||||
class="btn-primary"
|
||||
invisible="state != 'draft'"
|
||||
groups="donation.group_donation_user"
|
||||
/>
|
||||
<button
|
||||
type="object"
|
||||
name="save_as_draft"
|
||||
string="Save as Draft"
|
||||
invisible="state != 'draft'"
|
||||
groups="donation.group_donation_user"
|
||||
/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_tree" model="ir.ui.view">
|
||||
<field name="name">donation.list</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<header>
|
||||
<button
|
||||
name="%(donation_validate_action)d"
|
||||
type="action"
|
||||
string="Validate"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="context.get('recurring_view')"
|
||||
/>
|
||||
<button
|
||||
name="thanks_printed_button"
|
||||
type="object"
|
||||
string="Mark as Thanks Printed"
|
||||
groups="donation.group_donation_user"
|
||||
invisible="context.get('recurring_view')"
|
||||
confirm="Mark all selected donation as Thanks Printed?"
|
||||
/>
|
||||
<!-- Unfortunately, confirm="" doesn't work for
|
||||
buttons in list view... at least not in v14 -->
|
||||
</header>
|
||||
<field
|
||||
name="number"
|
||||
invisible="context.get('recurring_view')"
|
||||
decoration-bf="1"
|
||||
/>
|
||||
<field
|
||||
name="partner_id"
|
||||
invisible="context.get('partner_view')"
|
||||
readonly="state == 'done'"
|
||||
/>
|
||||
<field name="donation_date" readonly="state == 'done'" />
|
||||
<field name="amount_total_company_currency" sum="1" />
|
||||
<field name="amount_total" optional="hide" />
|
||||
<field name="currency_id" invisible="1" />
|
||||
<field name="company_currency_id" invisible="1" />
|
||||
<field name="payment_method_line_id" readonly="state == 'done'" />
|
||||
<field
|
||||
name="tax_receipt_option"
|
||||
optional="hide"
|
||||
widget="badge"
|
||||
decoration-success="tax_receipt_option == 'each'"
|
||||
decoration-info="tax_receipt_option == 'annual'"
|
||||
/>
|
||||
<field name="campaign_id" optional="show" />
|
||||
<field name="thanks_template_id" optional="hide" />
|
||||
<field name="thanks_printed" optional="hide" />
|
||||
<field name="payment_ref" optional="hide" readonly="state == 'done'" />
|
||||
<field
|
||||
name="company_id"
|
||||
readonly="state == 'done'"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
<field
|
||||
name="state"
|
||||
invisible="context.get('recurring_view')"
|
||||
widget="badge"
|
||||
decoration-info="state == 'draft'"
|
||||
decoration-muted="state == 'cancel'"
|
||||
decoration-success="state == 'done'"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_search" model="ir.ui.view">
|
||||
<field name="name">donation.search</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="number" />
|
||||
<field name="partner_id" />
|
||||
<separator />
|
||||
<filter string="Date" name="donation_date" date="donation_date" />
|
||||
<separator />
|
||||
<filter
|
||||
name="draft"
|
||||
string="Draft"
|
||||
domain="[('state', '=', 'draft')]"
|
||||
/>
|
||||
<filter name="done" string="Done" domain="[('state', '=', 'done')]" />
|
||||
<filter
|
||||
name="cancel"
|
||||
string="Cancelled"
|
||||
domain="[('state', '=', 'cancel')]"
|
||||
/>
|
||||
<separator />
|
||||
<filter
|
||||
name="thanks_to_print"
|
||||
string="Thanks to Print"
|
||||
domain="[('thanks_printed', '=', False)]"
|
||||
/>
|
||||
<group string="Group By" name="groupby">
|
||||
<filter
|
||||
name="date_groupby"
|
||||
string="Date"
|
||||
context="{'group_by': 'donation_date'}"
|
||||
/>
|
||||
<filter
|
||||
name="partner_groupby"
|
||||
string="Donor"
|
||||
context="{'group_by': 'partner_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="commercial_partner_groupby"
|
||||
string="Parent Donor"
|
||||
context="{'group_by': 'commercial_partner_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="partner_country_groupby"
|
||||
string="Partner Country"
|
||||
context="{'group_by': 'country_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="state_groupby"
|
||||
string="State"
|
||||
context="{'group_by': 'state'}"
|
||||
/>
|
||||
<filter
|
||||
name="campaign_groupby"
|
||||
string="Campaign"
|
||||
context="{'group_by': 'campaign_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="currency_groupby"
|
||||
string="Currency"
|
||||
context="{'group_by': 'currency_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="payment_mode_groupby"
|
||||
string="Payment Mode"
|
||||
context="{'group_by': 'payment_method_line_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="tax_receipt_option_groupby"
|
||||
string="Tax Receipt Option"
|
||||
context="{'group_by': 'tax_receipt_option'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_graph" model="ir.ui.view">
|
||||
<field name="name">donation.graph</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="arch" type="xml">
|
||||
<graph>
|
||||
<field name="donation_date" type="row" />
|
||||
<field name="amount_total_company_currency" type="measure" />
|
||||
</graph>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_pivot" model="ir.ui.view">
|
||||
<field name="name">donation.pivot</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="arch" type="xml">
|
||||
<pivot>
|
||||
<field name="donation_date" type="row" />
|
||||
<field name="amount_total_company_currency" type="measure" />
|
||||
</pivot>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_line_tree" model="ir.ui.view">
|
||||
<field name="name">donation.line.list</field>
|
||||
<field name="model">donation.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<list editable="bottom">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field
|
||||
name="donation_id"
|
||||
invisible="not context.get('donation_line_main_view')"
|
||||
/>
|
||||
<field name="product_id" context="{'default_donation': True}" />
|
||||
<field name="product_is_donation" optional="hide" />
|
||||
<field name="quantity" />
|
||||
<field name="unit_price" />
|
||||
<field
|
||||
name="analytic_distribution"
|
||||
widget="analytic_distribution"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
options="{'product_field': 'product_id', 'business_domain': 'donation'}"
|
||||
/>
|
||||
<field name="amount" />
|
||||
<field name="tax_receipt_ok" string="Tax Receipt" optional="show" />
|
||||
<field name="currency_id" invisible="1" />
|
||||
<field name="company_id" invisible="1" />
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_line_form" model="ir.ui.view">
|
||||
<field name="name">donation.line.form</field>
|
||||
<field name="model">donation.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<group name="main">
|
||||
<field
|
||||
name="donation_id"
|
||||
invisible="not context.get('donation_line_main_view')"
|
||||
/>
|
||||
<field name="product_id" />
|
||||
<field name="quantity" />
|
||||
<field name="unit_price" />
|
||||
<field
|
||||
name="analytic_distribution"
|
||||
widget="analytic_distribution"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
options="{'product_field': 'product_id'}"
|
||||
/>
|
||||
<field name="amount" />
|
||||
<field name="tax_receipt_ok" />
|
||||
<field name="amount_company_currency" />
|
||||
<field name="currency_id" invisible="1" />
|
||||
<field name="company_currency_id" invisible="1" />
|
||||
<field name="company_id" invisible="1" />
|
||||
<field name="product_is_donation" invisible="1" />
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_action" model="ir.actions.act_window">
|
||||
<field name="name">Donations</field>
|
||||
<field name="res_model">donation.donation</field>
|
||||
<field name="view_mode">list,form,pivot,graph</field>
|
||||
<!-- Force an empty value to domain because this action is inherited
|
||||
by donation_recurring which adds a domain. But, when you uninstall
|
||||
donation_recurring, it will not return to its initial value. With
|
||||
the line below, when you reload the donation module,
|
||||
it will return to its empty value -->
|
||||
<field name="domain" />
|
||||
</record>
|
||||
<record id="donation_line_action" model="ir.actions.act_window">
|
||||
<field name="name">Donations Lines</field>
|
||||
<field name="res_model">donation.line</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="donation_top_menu"
|
||||
sequence="38"
|
||||
web_icon="donation,static/description/icon.png"
|
||||
name="Donation"
|
||||
groups="donation.group_donation_viewer"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_title_menu"
|
||||
parent="donation_top_menu"
|
||||
sequence="15"
|
||||
name="Donations"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_menu"
|
||||
action="donation_action"
|
||||
parent="donation_title_menu"
|
||||
sequence="10"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_config_menu"
|
||||
parent="donation_top_menu"
|
||||
name="Configuration"
|
||||
sequence="30"
|
||||
groups="donation.group_donation_manager"
|
||||
/>
|
||||
<menuitem
|
||||
id="donor"
|
||||
action="donation_base.res_partner_action_donor"
|
||||
parent="donation_title_menu"
|
||||
sequence="50"
|
||||
name="Donors"
|
||||
/>
|
||||
<record id="donation_product_action" model="ir.actions.act_window">
|
||||
<field name="name">Products</field>
|
||||
<field name="res_model">product.template</field>
|
||||
<field name="view_mode">kanban,list,form</field>
|
||||
<field
|
||||
name="context"
|
||||
>{'search_default_filter_donation': 1, 'default_is_donation': True}</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="donation_products"
|
||||
action="donation_product_action"
|
||||
parent="donation_config_menu"
|
||||
sequence="20"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_tax_title_menu"
|
||||
parent="donation.donation_top_menu"
|
||||
sequence="20"
|
||||
name="Tax Receipts"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_tax_receipt_menu"
|
||||
action="donation_base.donation_tax_receipt_action"
|
||||
parent="donation_tax_title_menu"
|
||||
sequence="20"
|
||||
/>
|
||||
<menuitem
|
||||
id="tax_receipt_annual_create_menu"
|
||||
sequence="45"
|
||||
action="donation_base.tax_receipt_annual_create_action"
|
||||
parent="donation_tax_title_menu"
|
||||
groups="donation.group_donation_user"
|
||||
/>
|
||||
<menuitem
|
||||
id="donation_tax_receipt_print_menu"
|
||||
sequence="40"
|
||||
action="donation_base.donation_tax_receipt_print_action"
|
||||
parent="donation_tax_title_menu"
|
||||
groups="donation.group_donation_user"
|
||||
/>
|
||||
</odoo>
|
||||
90
donation/views/donation_campaign.xml
Normal file
90
donation/views/donation_campaign.xml
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_campaign_form" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.form</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<widget
|
||||
name="web_ribbon"
|
||||
title="Archived"
|
||||
bg_color="bg-danger"
|
||||
invisible="active == True"
|
||||
/>
|
||||
|
||||
<group name="main">
|
||||
<field name="name" />
|
||||
<field name="code" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="start_date" />
|
||||
<field name="note" />
|
||||
<field name="active" invisible="1" />
|
||||
<field name="company_id" invisible="1" />
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_tree" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.list</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="code" optional="show" />
|
||||
<field name="name" />
|
||||
<field name="start_date" optional="show" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_search" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.search</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field
|
||||
name="name"
|
||||
filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"
|
||||
string="Name or Code"
|
||||
/>
|
||||
<field name="code" />
|
||||
<separator />
|
||||
<filter
|
||||
string="Archived"
|
||||
name="inactive"
|
||||
domain="[('active', '=', False)]"
|
||||
/>
|
||||
<group name="groupby">
|
||||
<filter
|
||||
name="company_groupby"
|
||||
string="Company"
|
||||
context="{'group_by': 'company_id'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_action" model="ir.actions.act_window">
|
||||
<field name="name">Donation Campaigns</field>
|
||||
<field name="res_model">donation.campaign</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="donation_campaign_menu"
|
||||
action="donation_campaign_action"
|
||||
parent="donation_config_menu"
|
||||
sequence="40"
|
||||
/>
|
||||
</odoo>
|
||||
21
donation/views/donation_tax_receipt.xml
Normal file
21
donation/views/donation_tax_receipt.xml
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_tax_receipt_form" model="ir.ui.view">
|
||||
<field name="name">donation.donation.tax.receipt.form</field>
|
||||
<field name="model">donation.tax.receipt</field>
|
||||
<field name="inherit_id" ref="donation_base.donation_tax_receipt_form" />
|
||||
<field name="arch" type="xml">
|
||||
<group name="main" position="after">
|
||||
<group name="donations" string="Related Donations">
|
||||
<field name="donation_ids" nolabel="1" colspan="2" />
|
||||
</group>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
72
donation/views/donation_thanks_template.xml
Normal file
72
donation/views/donation_thanks_template.xml
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Akretion France
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_thanks_template_form" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<widget
|
||||
name="web_ribbon"
|
||||
title="Archived"
|
||||
bg_color="bg-danger"
|
||||
invisible="active == True"
|
||||
/>
|
||||
<group name="main">
|
||||
<field name="name" />
|
||||
<field name="text" />
|
||||
<field name="image" widget="image" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="active" invisible="1" />
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_tree" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_search" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name" />
|
||||
<filter
|
||||
string="Archived"
|
||||
name="inactive"
|
||||
domain="[('active', '=', False)]"
|
||||
/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_action" model="ir.actions.act_window">
|
||||
<field name="name">Thanks Letter Templates</field>
|
||||
<field name="res_model">donation.thanks.template</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="donation_thanks_template_menu"
|
||||
action="donation_thanks_template_action"
|
||||
parent="donation.donation_config_menu"
|
||||
sequence="50"
|
||||
/>
|
||||
</odoo>
|
||||
32
donation/views/res_partner.xml
Normal file
32
donation/views/res_partner.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!--
|
||||
© 2014-2016 Barroux Abbey (http://www.barroux.org)
|
||||
© 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="partner_donation_action" model="ir.actions.act_window">
|
||||
<field name="name">Donations</field>
|
||||
<field name="res_model">donation.donation</field>
|
||||
<field name="view_mode">list,form,graph</field>
|
||||
<field name="context">{'search_default_partner_id': active_id}</field>
|
||||
</record>
|
||||
<record id="view_partner_property_form" model="ir.ui.view">
|
||||
<field name="name">donation.button.res.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="donation_base.view_partner_property_form" />
|
||||
<field name="arch" type="xml">
|
||||
<button id="donation_tax_receipt_button" position="before">
|
||||
<button
|
||||
class="oe_stat_button"
|
||||
type="action"
|
||||
name="%(donation.partner_donation_action)d"
|
||||
icon="fa-heart-o"
|
||||
groups="donation.group_donation_viewer"
|
||||
>
|
||||
<field string="Donations" name="donation_count" widget="statinfo" />
|
||||
</button>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
39
donation/views/res_users.xml
Normal file
39
donation/views/res_users.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="view_users_form" model="ir.ui.view">
|
||||
<field name="name">donation.res.users.form</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form" />
|
||||
<field name="arch" type="xml">
|
||||
<group name="preferences" position="inside">
|
||||
<field name="context_donation_payment_method_line_id" />
|
||||
<field name="context_donation_campaign_id" />
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_users_form_simple_modif" model="ir.ui.view">
|
||||
<field name="name">donation.preferences.res.users.form</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form_simple_modif" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="tz" position="after">
|
||||
<field
|
||||
name="context_donation_payment_method_line_id"
|
||||
groups="donation.group_donation_user"
|
||||
readonly="0"
|
||||
/>
|
||||
<field
|
||||
name="context_donation_campaign_id"
|
||||
groups="donation.group_donation_user"
|
||||
readonly="0"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
3
donation/wizard/__init__.py
Normal file
3
donation/wizard/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from . import donation_validate
|
||||
from . import tax_receipt_option_switch
|
||||
from . import res_config_settings
|
||||
22
donation/wizard/donation_validate.py
Normal file
22
donation/wizard/donation_validate.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright 2014-2016 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2016 Akretion France
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class DonationValidate(models.TransientModel):
|
||||
_name = "donation.validate"
|
||||
_description = "Validate Donations"
|
||||
|
||||
def run(self):
|
||||
self.ensure_one()
|
||||
assert (
|
||||
self.env.context.get("active_model") == "donation.donation"
|
||||
), "Source model must be donations"
|
||||
assert self.env.context.get("active_ids"), "No donations selected"
|
||||
donations = self.env["donation.donation"].browse(
|
||||
self.env.context.get("active_ids")
|
||||
)
|
||||
donations.filtered(lambda x: x.state == "draft").validate()
|
||||
return
|
||||
35
donation/wizard/donation_validate_view.xml
Normal file
35
donation/wizard/donation_validate_view.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2016 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2014-2016 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_validate_form" model="ir.ui.view">
|
||||
<field name="name">donation_validate.form</field>
|
||||
<field name="model">donation.validate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Validate Donations">
|
||||
<p>
|
||||
This wizard will validate all the draft donations selected.
|
||||
</p>
|
||||
<footer>
|
||||
<button
|
||||
type="object"
|
||||
name="run"
|
||||
string="Validate"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button special="cancel" string="Cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_validate_action" model="ir.actions.act_window">
|
||||
<field name="name">Validate Draft Donations</field>
|
||||
<field name="res_model">donation.validate</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
23
donation/wizard/res_config_settings.py
Normal file
23
donation/wizard/res_config_settings.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
donation_credit_transfer_product_id = fields.Many2one(
|
||||
related="company_id.donation_credit_transfer_product_id", readonly=False
|
||||
)
|
||||
donation_account_id = fields.Many2one(
|
||||
related="company_id.donation_account_id",
|
||||
readonly=False,
|
||||
domain="[('reconcile', '=', True), ('deprecated', '=', False), "
|
||||
"('company_ids', 'in', company_id), ('account_type', '=', 'asset_current')]",
|
||||
)
|
||||
group_donation_check_total = fields.Boolean(
|
||||
string="Check Total on Donations",
|
||||
implied_group="group_donation_check_total",
|
||||
)
|
||||
67
donation/wizard/res_config_settings.xml
Normal file
67
donation/wizard/res_config_settings.xml
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="res_config_settings_donation" model="ir.ui.view">
|
||||
<field name="name">donation.res.config.settings.form</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="50" />
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="inside">
|
||||
<app
|
||||
data-string="Donation"
|
||||
string="Donation"
|
||||
name="donation_management"
|
||||
groups="donation.group_donation_manager"
|
||||
>
|
||||
<block title="Donation" name="donation_settings">
|
||||
<setting
|
||||
id="donation_settings_credit_transfer"
|
||||
string="Credit transfer"
|
||||
help=""
|
||||
>
|
||||
<field name="donation_credit_transfer_product_id" />
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_account_id"
|
||||
string="Account"
|
||||
help=""
|
||||
>
|
||||
<field
|
||||
name="donation_account_id"
|
||||
context="{'default_reconcile': True, 'default_account_type': 'asset_current'}"
|
||||
/>
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_groups_chekc_total"
|
||||
string="Check total"
|
||||
help=""
|
||||
>
|
||||
<field name="group_donation_check_total" />
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_settings_action" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'donation', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="donation_settings_menu"
|
||||
parent="donation_config_menu"
|
||||
sequence="10"
|
||||
action="donation_settings_action"
|
||||
groups="base.group_system"
|
||||
/>
|
||||
</odoo>
|
||||
32
donation/wizard/tax_receipt_option_switch.py
Normal file
32
donation/wizard/tax_receipt_option_switch.py
Normal file
@ -0,0 +1,32 @@
|
||||
# Copyright 2017 Barroux Abbey (www.barroux.org)
|
||||
# Copyright 2017 Akretion France (www.akretion.com)
|
||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class DonationTaxReceiptOptionSwitch(models.TransientModel):
|
||||
_name = "donation.tax.receipt.option.switch"
|
||||
_description = "Switch Donation Tax Receipt Option"
|
||||
|
||||
donation_id = fields.Many2one(
|
||||
"donation.donation",
|
||||
string="Donation",
|
||||
required=True,
|
||||
default=lambda self: self._context.get("active_id"),
|
||||
)
|
||||
new_tax_receipt_option = fields.Selection(
|
||||
[("each", "For Each Donation"), ("annual", "Annual Tax Receipt")],
|
||||
string="Tax Receipt Option",
|
||||
required=True,
|
||||
)
|
||||
|
||||
def switch(self):
|
||||
self.ensure_one()
|
||||
assert self.donation_id, "Missing donation"
|
||||
assert not self.donation_id.tax_receipt_id, "Already linked to a tax receipt"
|
||||
self.donation_id.write({"tax_receipt_option": self.new_tax_receipt_option})
|
||||
receipt = self.donation_id.generate_each_tax_receipt()
|
||||
if receipt:
|
||||
self.donation_id.write({"tax_receipt_id": receipt.id})
|
||||
return
|
||||
40
donation/wizard/tax_receipt_option_switch_view.xml
Normal file
40
donation/wizard/tax_receipt_option_switch_view.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2017-2021 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2017-2021 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
@author: Brother Bernard <informatique _at_ barroux.org>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_tax_receipt_option_switch_form" model="ir.ui.view">
|
||||
<field name="name">donation_tax_receipt_option_switch.form</field>
|
||||
<field name="model">donation.tax.receipt.option.switch</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Change Tax Receipt Option">
|
||||
<group name="main">
|
||||
<field name="donation_id" readonly="1" />
|
||||
<field name="new_tax_receipt_option" />
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
type="object"
|
||||
name="switch"
|
||||
string="Update"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button special="cancel" string="Cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record
|
||||
id="donation_tax_receipt_option_switch_action"
|
||||
model="ir.actions.act_window"
|
||||
>
|
||||
<field name="name">Change Tax Receipt Option</field>
|
||||
<field name="res_model">donation.tax.receipt.option.switch</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
103
donation_base/README.rst
Normal file
103
donation_base/README.rst
Normal file
@ -0,0 +1,103 @@
|
||||
=============
|
||||
Donation Base
|
||||
=============
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:6e2db8827361efb5621a1344f354283d19a040354375a96852640d2a8ede572b
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |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/18.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-18-0/donation-18-0-donation_base
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|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 to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/donation/issues/new?body=module:%20donation_base%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Barroux Abbey
|
||||
* Akretion
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Brother Bernard <informatique - at - barroux.org>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
|
||||
- Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
|
||||
:target: https://github.com/alexis-via
|
||||
:alt: alexis-via
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-alexis-via|
|
||||
|
||||
This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/18.0/donation_base>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
4
donation_base/__init__.py
Normal file
4
donation_base/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
from . import wizard
|
||||
30
donation_base/__manifest__.py
Normal file
30
donation_base/__manifest__.py
Normal file
@ -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": "18.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",
|
||||
"report/report.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_donationtax.xml",
|
||||
"data/donation_tax_seq.xml",
|
||||
"data/donation_mail_template.xml",
|
||||
],
|
||||
"demo": ["demo/donation_demo.xml"],
|
||||
"installable": True,
|
||||
}
|
||||
57
donation_base/data/donation_mail_template.xml
Normal file
57
donation_base/data/donation_mail_template.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?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_formatted}}</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_ids"
|
||||
eval="[(4, 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" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
Dear <t t-out="object.partner_id.name">Alexis</t>
|
||||
<t t-if="object.partner_id.parent_id">
|
||||
(<i>
|
||||
<t t-out="object.partner_id.parent_id.name" />
|
||||
</i>)
|
||||
</t>
|
||||
,<br /><br />
|
||||
|
||||
Thank you very much for your donation.<br /><br />
|
||||
|
||||
Please find enclosed your tax receipt <span
|
||||
style="font-weight: bold;"
|
||||
t-out="object.number"
|
||||
>RECPT-2023-001</span>
|
||||
amounting in <span
|
||||
style="font-weight: bold;"
|
||||
t-out="format_amount(object.amount, object.currency_id) or ''"
|
||||
>$ 10.00</span>
|
||||
from <t t-out="object.company_id.name">Barroux Abbey</t>.
|
||||
<t t-if="not is_html_empty(user.signature)">
|
||||
<br />
|
||||
<br />
|
||||
<t t-out="user.signature or ''">--<br />Mitchell Admin</t>
|
||||
</t>
|
||||
<br /><br />
|
||||
</p>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
16
donation_base/data/donation_tax_seq.xml
Normal file
16
donation_base/data/donation_tax_seq.xml
Normal file
@ -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>
|
||||
94
donation_base/demo/donation_demo.xml
Normal file
94
donation_base/demo/donation_demo.xml
Normal file
@ -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="tax_receipt_ok" eval="True" />
|
||||
<field name="list_price">0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="is_donation">donation</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="tax_receipt_ok" eval="False" />
|
||||
<field name="list_price">0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="is_donation">donation</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="tax_receipt_ok" eval="True" />
|
||||
<field name="list_price">0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="is_donation">donation_in_kind_service</field>
|
||||
<!-- <field name="detailed_type">donation_in_kind_consu</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="tax_receipt_ok" eval="False" />
|
||||
<field name="list_price">0</field>
|
||||
<field name="type">service</field>
|
||||
<field name="is_donation">donation_in_kind_service</field>
|
||||
<!-- <field name="detailed_type">donation_in_kind_consu</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>
|
||||
730
donation_base/i18n/de.po
Normal file
730
donation_base/i18n/de.po
Normal file
@ -0,0 +1,730 @@
|
||||
# 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: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:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
|
||||
msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,body_html:donation_base.tax_receipt_email_template
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id."
|
||||
"name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Thank you very much for your donation.<br><br>\n"
|
||||
"\n"
|
||||
" Please find enclosed your tax receipt <span style=\"font-weight: bold;\" "
|
||||
"t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" amounting in <span style=\"font-weight: bold;\" t-out="
|
||||
"\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" from <t t-out=\"object.company_id.name\">Barroux "
|
||||
"Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,help:donation_base.field_product_template__detailed_type
|
||||
msgid ""
|
||||
"A storable product is a product for which you manage stock. The Inventory "
|
||||
"app has to be installed.\n"
|
||||
"A consumable product is a product for which stock is not managed.\n"
|
||||
"A service is a non-material product you provide."
|
||||
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__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__amount
|
||||
msgid "Amount"
|
||||
msgstr "Betrag"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Amount Total:"
|
||||
msgstr "Gesamtbetrag:"
|
||||
|
||||
#. 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 "Sammelspendenbescheinigung"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Annual Tax Receipts"
|
||||
msgstr "Sammelspendenbescheinigungen"
|
||||
|
||||
#. 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 "Abbrechen"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__company_id
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__company_id
|
||||
msgid "Company"
|
||||
msgstr "Unternehmen"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation
|
||||
#: model:product.template,name:donation_base.product_product_donation_product_template
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Donation"
|
||||
msgstr "Spende"
|
||||
|
||||
#. module: donation_base
|
||||
#: 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_terms: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_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donation Tax Receipt"
|
||||
msgstr "Spendenbescheinigung"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,name:donation_base.tax_receipt_email_template
|
||||
msgid "Donation Tax Receipt - Send by Email"
|
||||
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
|
||||
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.model.fields,field_description:donation_base.field_res_partner__donor_rank
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_users__donor_rank
|
||||
msgid "Donor Rank"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donor:"
|
||||
msgstr "Spender:"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.res_partner_action_donor
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.res_partner_view_search
|
||||
msgid "Donors"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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
|
||||
#: 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_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__each
|
||||
msgid "For Each Donation"
|
||||
msgstr "Für jede Spende"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
|
||||
msgid "Generate Annual Tax Receipts"
|
||||
msgstr "Erzeuge Sammelspendenbescheinigungen"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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__has_message
|
||||
msgid "Has Message"
|
||||
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 "ID"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
|
||||
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
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "In-Kind Donation"
|
||||
msgstr "Sachspende"
|
||||
|
||||
#. module: donation_base
|
||||
#: 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.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_consu
|
||||
msgid "In-Kind Donation Consummable"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_service
|
||||
msgid "In-Kind Donation Service"
|
||||
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 "Ist geeignet für Spendenbescheinigung"
|
||||
|
||||
#. 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_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__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 "Zuletzt aktualisiert von"
|
||||
|
||||
#. 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 "Zuletzt aktualisiert am"
|
||||
|
||||
#. 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
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Missing email on partner '%s'."
|
||||
msgstr "Fehlende Email bei Partner '%s'."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid "No annual tax receipt to generate"
|
||||
msgstr "Keine Sammelspendenbescheinigung zu erzeugen"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__none
|
||||
msgid "None"
|
||||
msgstr "Keine"
|
||||
|
||||
#. 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 requiring 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.selection,name:donation_base.selection__donation_tax_receipt__type__each
|
||||
msgid "One-Time Tax Receipt"
|
||||
msgstr "Einmalige Spendenbescheinigung"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "One-Time Tax Receipts"
|
||||
msgstr "Einmalige Spendenbescheinigungen"
|
||||
|
||||
#. 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 "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_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Print Receipts"
|
||||
msgstr "Drucke Bescheinigungen"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_template
|
||||
msgid "Product"
|
||||
msgstr "Produkt"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_template__detailed_type
|
||||
msgid "Product Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_product
|
||||
msgid "Product Variant"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Receipts to Print"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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,help:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_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_terms:ir.ui.view,arch_db:donation_base.view_partner_property_form
|
||||
msgid "Tax Receipts"
|
||||
msgstr "Steuerbescheinigungen"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Donor '%(partner)s' already has an annual tax receipt in this timeframe: "
|
||||
"%(receipt)s dated %(number)s."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_print.py:0
|
||||
#, python-format
|
||||
msgid "There are no tax receipts to print."
|
||||
msgstr "Es gibt keine Spendenbescheinigungen zum Drucken."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/product.py:0
|
||||
#, 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_terms:product.template,description:donation_base.product_product_donation_product_template
|
||||
#: model_terms: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_terms:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Type"
|
||||
msgstr "Typ"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#~ msgid "Is a Donation"
|
||||
#~ msgstr "Ist eine Spende"
|
||||
|
||||
#, 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."
|
||||
|
||||
#, 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."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "${object.company_id.name.replace(' ', '_')}-Tax_Receipt_${(object.number "
|
||||
#~ "or '').replace('/','_')}"
|
||||
#~ msgstr ""
|
||||
#~ "${object.company_id.name.replace(' ', '_')}-Spendenbescheinigung_"
|
||||
#~ "${(object.number or '').replace('/','_')}"
|
||||
|
||||
#~ msgid "${object.company_id.name} - Tax Receipt ${object.number or 'n/a'}"
|
||||
#~ msgstr ""
|
||||
#~ "${object.company_id.name} - Spendenbescheinigung ${object.number or 'n/a'}"
|
||||
|
||||
#~ msgid "Product Template"
|
||||
#~ msgstr "Produktvorlage"
|
||||
|
||||
#~ msgid "Search Donation Tax Receipts"
|
||||
#~ msgstr "Suche Spendenbescheinigungen"
|
||||
|
||||
#, 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."
|
||||
|
||||
#~ 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"
|
||||
#~ " "
|
||||
|
||||
#~ msgid "Receipts To Print"
|
||||
#~ msgstr "Bescheinigungen zum drucken"
|
||||
|
||||
#~ 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"
|
||||
631
donation_base/i18n/donation_base.pot
Normal file
631
donation_base/i18n/donation_base.pot
Normal file
@ -0,0 +1,631 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * donation_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.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: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:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
|
||||
msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,body_html:donation_base.tax_receipt_email_template
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id.name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Thank you very much for your donation.<br><br>\n"
|
||||
"\n"
|
||||
" Please find enclosed your tax receipt <span style=\"font-weight: bold;\" t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" amounting in <span style=\"font-weight: bold;\" t-out=\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" from <t t-out=\"object.company_id.name\">Barroux Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,help:donation_base.field_product_template__detailed_type
|
||||
msgid ""
|
||||
"A storable product is a product for which you manage stock. The Inventory app has to be installed.\n"
|
||||
"A consumable product is a product for which stock is not managed.\n"
|
||||
"A service is a non-material product you provide."
|
||||
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__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
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
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__company_id
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
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:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation
|
||||
#: model:product.template,name:donation_base.product_product_donation_product_template
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Donation"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: 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.report_donationtaxreceipt_document
|
||||
msgid "Donation Tax Receipt"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,name:donation_base.tax_receipt_email_template
|
||||
msgid "Donation Tax Receipt - Send by Email"
|
||||
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
|
||||
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 ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_partner__donor_rank
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_users__donor_rank
|
||||
msgid "Donor Rank"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donor:"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.res_partner_action_donor
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.res_partner_view_search
|
||||
msgid "Donors"
|
||||
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_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
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__has_message
|
||||
msgid "Has Message"
|
||||
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,field_description:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
|
||||
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
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "In-Kind Donation"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: 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.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_consu
|
||||
msgid "In-Kind Donation Consummable"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_service
|
||||
msgid "In-Kind Donation Service"
|
||||
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_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
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Missing email on partner '%s'."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: 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 requiring 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.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_template
|
||||
msgid "Product"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_template__detailed_type
|
||||
msgid "Product Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_product
|
||||
msgid "Product Variant"
|
||||
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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Receipts to Print"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_user_id
|
||||
msgid "Responsible User"
|
||||
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,help:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_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
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Donor '%(partner)s' already has an annual tax receipt in this timeframe:"
|
||||
" %(receipt)s dated %(number)s."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_print.py:0
|
||||
#, python-format
|
||||
msgid "There are no tax receipts to print."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: 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_terms:product.template,description:donation_base.product_product_donation_product_template
|
||||
#: model_terms: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_terms:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
#: model_terms: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:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
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 ""
|
||||
|
||||
#. 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 ""
|
||||
694
donation_base/i18n/es.po
Normal file
694
donation_base/i18n/es.po
Normal file
@ -0,0 +1,694 @@
|
||||
# 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: 2023-09-05 21:36+0000\n"
|
||||
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
|
||||
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: \n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.17\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 "# de Comprobantes Fiscales"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
|
||||
msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
msgstr "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,body_html:donation_base.tax_receipt_email_template
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id."
|
||||
"name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Thank you very much for your donation.<br><br>\n"
|
||||
"\n"
|
||||
" Please find enclosed your tax receipt <span style=\"font-weight: bold;\" "
|
||||
"t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" amounting in <span style=\"font-weight: bold;\" t-out="
|
||||
"\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" from <t t-out=\"object.company_id.name\">Barroux "
|
||||
"Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Estimado <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id."
|
||||
"name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Muchas gracias por su donación.<br><br>\n"
|
||||
"\n"
|
||||
" Le adjuntamos su recibo fiscal<span style=\"font-weight: bold;\" t-out="
|
||||
"\"object.number\">RECPT-2023-001</span>\n"
|
||||
" Importe en <span style=\"font-weight: bold;\" t-out="
|
||||
"\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" Desde <t t-out=\"object.company_id.name"
|
||||
"\">Barroux Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,help:donation_base.field_product_template__detailed_type
|
||||
msgid ""
|
||||
"A storable product is a product for which you manage stock. The Inventory "
|
||||
"app has to be installed.\n"
|
||||
"A consumable product is a product for which stock is not managed.\n"
|
||||
"A service is a non-material product you provide."
|
||||
msgstr ""
|
||||
"Un producto almacenable es un producto para el que se gestionan existencias. "
|
||||
"La aplicación Inventario debe estar instalada.\n"
|
||||
"Un producto consumible es un producto para el que no se gestionan "
|
||||
"existencias.\n"
|
||||
"Un servicio es un producto no material que usted proporciona."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Acción necesaria"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr "Actividades"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr "Decoración de Actividad de Excepción"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr "Estado de la Actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr "Icono del tipo de actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__amount
|
||||
msgid "Amount"
|
||||
msgstr "Importe"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Amount Total:"
|
||||
msgstr "Importe total:"
|
||||
|
||||
#. 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 "Recibo de impuestos anual"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Annual Tax Receipts"
|
||||
msgstr "Recibos de impuestos anuales"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Recuento de archivos adjuntos"
|
||||
|
||||
#. 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 "Cancelar"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__company_id
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__company_id
|
||||
msgid "Company"
|
||||
msgstr "Companía"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Compose Email"
|
||||
msgstr "Componer correo electrónico"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_res_partner
|
||||
msgid "Contact"
|
||||
msgstr "Contacto"
|
||||
|
||||
#. 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Date"
|
||||
msgstr "Fecha"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation
|
||||
#: model:product.template,name:donation_base.product_product_donation_product_template
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Donation"
|
||||
msgstr "Donativo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
msgid "Donation - no tax receipt"
|
||||
msgstr "Donativo - sin recibo de impuestos"
|
||||
|
||||
#. 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 "Fecha del donativo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donation Tax Receipt"
|
||||
msgstr "Recibo de impuestos de donativo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,name:donation_base.tax_receipt_email_template
|
||||
msgid "Donation Tax Receipt - Send by Email"
|
||||
msgstr "Recibo de impuestos por donación - Enviar por correo electrónico"
|
||||
|
||||
#. 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
|
||||
msgid "Donation Tax Receipts"
|
||||
msgstr "Recibos de impuestos de donativo"
|
||||
|
||||
#. 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.model.fields,field_description:donation_base.field_res_partner__donor_rank
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_users__donor_rank
|
||||
msgid "Donor Rank"
|
||||
msgstr "Rango del donante"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donor:"
|
||||
msgstr "Donante:"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.res_partner_action_donor
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.res_partner_view_search
|
||||
msgid "Donors"
|
||||
msgstr "Donantes"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Eligible for a Tax Receipt"
|
||||
msgstr "Elegible para un recibo de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__end_date
|
||||
msgid "End Date"
|
||||
msgstr "Fecha de finalización"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguidores/as"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguidores (socios)"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr "Icono de fuente impresionante, por ejemplo fa-tasks"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__each
|
||||
msgid "For Each Donation"
|
||||
msgstr "Por cada donativo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
|
||||
msgid "Generate Annual Tax Receipts"
|
||||
msgstr "Generar recibos de impuestos anuales"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Tiene mensaje"
|
||||
|
||||
#. 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_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr "Icono"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr "icono para indicar una actividad por excepción."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Si está marcado, nuevos mensajes requieren de su atención."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Si está marcada, algunos mensajes tienen un error de entrega."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "In-Kind Donation"
|
||||
msgstr "Donativo en especie"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
|
||||
msgid "In-Kind Donation - no tax receipt"
|
||||
msgstr "Donativo en especie - sin recibo fiscal"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_consu
|
||||
msgid "In-Kind Donation Consummable"
|
||||
msgstr "Donativo en especie Consumible"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_service
|
||||
msgid "In-Kind Donation Service"
|
||||
msgstr "Servicio de donativos en especie"
|
||||
|
||||
#. 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 "Es elegible para un recibo de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Es seguidor/a"
|
||||
|
||||
#. 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__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 "Última actualización por"
|
||||
|
||||
#. 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 "Última actualización el"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Archivo adjunto principal"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Error en entrega del mensaje"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Mensajes"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Missing email on partner '%s'."
|
||||
msgstr "Falta el correo electrónico del socio '%s'."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr "Fecha límite de Mi Actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Nuevo/a"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr "Fecha Límite para la Próxima Actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr "Resumen de la Siguiente Actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr "Tipo de la Siguiente Actividad"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid "No annual tax receipt to generate"
|
||||
msgstr "No hay recibos de impuestos anuales a generar"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__none
|
||||
msgid "None"
|
||||
msgstr "Ninguno"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Número de acciones"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Número de errores"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction_counter
|
||||
msgid "Number of messages requiring action"
|
||||
msgstr "Número de mensajes que requieren una acción"
|
||||
|
||||
#. 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 "Número de mensajes con error de entrega"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__donation_tax_receipt__type__each
|
||||
msgid "One-Time Tax Receipt"
|
||||
msgstr "Recibo de impuestos por única vez"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "One-Time Tax Receipts"
|
||||
msgstr "Recibos de impuestos por única vez"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Partner"
|
||||
msgstr "Socio"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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 "Fecha de impresión"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
|
||||
msgid "Print Donation Tax Receipts"
|
||||
msgstr "Imprimir recibos de impuestos de donativos"
|
||||
|
||||
#. 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 "Imprimir recibos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Print Tax Receipts"
|
||||
msgstr "Imprimir recibos de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_template
|
||||
msgid "Product"
|
||||
msgstr "Producto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_template__detailed_type
|
||||
msgid "Product Type"
|
||||
msgstr "Tipo de Producto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_product
|
||||
msgid "Product Variant"
|
||||
msgstr "Variante 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Receipts to Print"
|
||||
msgstr "Recibos a imprimir"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr "Usuario Responsable"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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 "Especifica si el producto es elegible para un recibo de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__start_date
|
||||
msgid "Start Date"
|
||||
msgstr "Fecha de inicio"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
"Estado basado en actividades\n"
|
||||
"Atrasada: La fecha de vencimiento ya ha pasado\n"
|
||||
"Hoy: La fecha de entrega es hoy\n"
|
||||
"Planificada: Futuras actividades."
|
||||
|
||||
#. 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 "Opción de recibo de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_donation_tax_receipt
|
||||
msgid "Tax Receipt for Donations"
|
||||
msgstr "Recibo de impuestos para donaciones"
|
||||
|
||||
#. 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 "Recibos de impuestos"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Donor '%(partner)s' already has an annual tax receipt in this timeframe: "
|
||||
"%(receipt)s dated %(number)s."
|
||||
msgstr ""
|
||||
"El donante '%(partner)s' ya tiene un recibo fiscal anual en este periodo: "
|
||||
"%(receipt)s con fecha %(number)s."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_print.py:0
|
||||
#, python-format
|
||||
msgid "There are no tax receipts to print."
|
||||
msgstr "No hay recibos de impuestos para imprimir."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/product.py:0
|
||||
#, python-format
|
||||
msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
|
||||
msgstr ""
|
||||
"No debería haber ningún Impuesto al Cliente en el producto de donación '%s'."
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:product.template,description:donation_base.product_product_donation_product_template
|
||||
#: model_terms:product.template,description:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "This donation item is eligible for a tax receipt."
|
||||
msgstr "Este artículo de donación es elegible para un recibo de impuestos."
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
#: model_terms:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
|
||||
msgid "This donation item is not eligible for a tax receipt."
|
||||
msgstr "Este artículo de donación no es elegible para un recibo de impuestos."
|
||||
|
||||
#. 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 "Tipo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr "Tipo (o clase) de actividad excepcional registrada."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Mensajes de la página web"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Historial de la comunicación en la página web"
|
||||
|
||||
#. 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(' ', '_')}}-Tax_Receipt_{{(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}} - Tax Receipt {{object.number or 'n/a'}}"
|
||||
|
||||
#~ msgid "SMS Delivery error"
|
||||
#~ msgstr "Error en la entrega de sms"
|
||||
|
||||
#~ msgid "Number of messages which requires an action"
|
||||
#~ msgstr "Número de mensajes que requieren una acción"
|
||||
|
||||
#~ msgid "Is a Donation"
|
||||
#~ msgstr "Es un donativo"
|
||||
|
||||
#~ msgid "Product Template"
|
||||
#~ msgstr "Plantilla de producto"
|
||||
|
||||
#~ msgid "Receipts To Print"
|
||||
#~ msgstr "Recibos a imprimir"
|
||||
690
donation_base/i18n/fr.po
Normal file
690
donation_base/i18n/fr.po
Normal file
@ -0,0 +1,690 @@
|
||||
# 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: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:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
|
||||
msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,body_html:donation_base.tax_receipt_email_template
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id."
|
||||
"name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Thank you very much for your donation.<br><br>\n"
|
||||
"\n"
|
||||
" Please find enclosed your tax receipt <span style=\"font-weight: bold;\" "
|
||||
"t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" amounting in <span style=\"font-weight: bold;\" t-out="
|
||||
"\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" from <t t-out=\"object.company_id.name\">Barroux "
|
||||
"Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,help:donation_base.field_product_template__detailed_type
|
||||
msgid ""
|
||||
"A storable product is a product for which you manage stock. The Inventory "
|
||||
"app has to be installed.\n"
|
||||
"A consumable product is a product for which stock is not managed.\n"
|
||||
"A service is a non-material product you provide."
|
||||
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__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
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_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Amount Total:"
|
||||
msgstr "Montant total :"
|
||||
|
||||
#. 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 "Reçu fiscal annuel"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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.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 "Annuler"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__company_id
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__company_id
|
||||
msgid "Company"
|
||||
msgstr "Société"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: 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 "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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Date"
|
||||
msgstr "Date "
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation
|
||||
#: model:product.template,name:donation_base.product_product_donation_product_template
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Donation"
|
||||
msgstr "Don"
|
||||
|
||||
#. module: donation_base
|
||||
#: 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_terms: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_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donation Tax Receipt"
|
||||
msgstr "Reçu fiscal de don"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,name:donation_base.tax_receipt_email_template
|
||||
msgid "Donation Tax Receipt - Send by Email"
|
||||
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
|
||||
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.model.fields,field_description:donation_base.field_res_partner__donor_rank
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_users__donor_rank
|
||||
msgid "Donor Rank"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donor:"
|
||||
msgstr "Donateur :"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.res_partner_action_donor
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.res_partner_view_search
|
||||
msgid "Donors"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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
|
||||
#: 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_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__each
|
||||
msgid "For Each Donation"
|
||||
msgstr "Pour chaque don"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_terms: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_terms: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__has_message
|
||||
msgid "Has Message"
|
||||
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 "ID"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
|
||||
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
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: 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.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.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_consu
|
||||
msgid "In-Kind Donation Consummable"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_service
|
||||
msgid "In-Kind Donation Service"
|
||||
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 "Est éligible à l'émission d'un reçu fiscal"
|
||||
|
||||
#. 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_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__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 "Dernière mise à jour par"
|
||||
|
||||
#. 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 "Dernière mise à jour le"
|
||||
|
||||
#. 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
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Missing email on partner '%s'."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid "No annual tax receipt to generate"
|
||||
msgstr "Aucun reçu fiscal à générer"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__none
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
||||
#. 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 requiring 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.selection,name:donation_base.selection__donation_tax_receipt__type__each
|
||||
msgid "One-Time Tax Receipt"
|
||||
msgstr "Reçu fiscal ponctuel"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Partner"
|
||||
msgstr "Partenaire"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Print Receipts"
|
||||
msgstr "Imprimer les reçus"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms: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_template
|
||||
msgid "Product"
|
||||
msgstr "Article"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_template__detailed_type
|
||||
msgid "Product Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_product
|
||||
msgid "Product Variant"
|
||||
msgstr ""
|
||||
|
||||
#. 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
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Receipts to Print"
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_user_id
|
||||
msgid "Responsible User"
|
||||
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 "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,help:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_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_terms:ir.ui.view,arch_db:donation_base.view_partner_property_form
|
||||
msgid "Tax Receipts"
|
||||
msgstr "Reçus fiscaux"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Donor '%(partner)s' already has an annual tax receipt in this timeframe: "
|
||||
"%(receipt)s dated %(number)s."
|
||||
msgstr ""
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_print.py:0
|
||||
#, python-format
|
||||
msgid "There are no tax receipts to print."
|
||||
msgstr "Il n'y a aucun reçu fiscal à imprimer."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/product.py:0
|
||||
#, 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_terms:product.template,description:donation_base.product_product_donation_product_template
|
||||
#: model_terms: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_terms:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
#: model_terms: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_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
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 ""
|
||||
|
||||
#. 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 ""
|
||||
|
||||
#~ msgid "Is a Donation"
|
||||
#~ msgstr "Est un don"
|
||||
|
||||
#, 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'."
|
||||
|
||||
#, 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'."
|
||||
|
||||
#~ msgid "Product Template"
|
||||
#~ msgstr "Modèle d'article"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Search Donation Tax Receipts"
|
||||
#~ msgstr "Rechercher dans les reçus fiscaux"
|
||||
|
||||
#, 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."
|
||||
|
||||
#~ msgid "Receipts To Print"
|
||||
#~ msgstr "Reçus à imprimer"
|
||||
|
||||
#~ 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'"
|
||||
|
||||
#~ 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."
|
||||
675
donation_base/i18n/it.po
Normal file
675
donation_base/i18n/it.po
Normal file
@ -0,0 +1,675 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * donation_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 16.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-13 17:06+0000\n"
|
||||
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
|
||||
"Language-Team: none\n"
|
||||
"Language: it\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 5.6.2\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 "N° di ricevute fiscali"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.report,print_report_name:donation_base.report_donation_tax_receipt
|
||||
msgid "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
msgstr "'Fiscal_receipt-'+(object.number or '').replace('/','')"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,body_html:donation_base.tax_receipt_email_template
|
||||
msgid ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Dear <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id.name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" Thank you very much for your donation.<br><br>\n"
|
||||
"\n"
|
||||
" Please find enclosed your tax receipt <span style=\"font-weight: bold;\" t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" amounting in <span style=\"font-weight: bold;\" t-out=\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" from <t t-out=\"object.company_id.name\">Barroux Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
msgstr ""
|
||||
"<div style=\"margin: 0px; padding: 0px;\">\n"
|
||||
" <p style=\"margin: 0px; padding: 0px; font-size: 13px;\">\n"
|
||||
" Spettabile <t t-out=\"object.partner_id.name\">Alexis</t>\n"
|
||||
" <t t-if=\"object.partner_id.parent_id\">\n"
|
||||
" (<i><t t-out=\"object.partner_id.parent_id."
|
||||
"name\"></t></i>)\n"
|
||||
"</t>\n"
|
||||
" ,<br><br>\n"
|
||||
"\n"
|
||||
" grazie per la donazione.<br><br>\n"
|
||||
"\n"
|
||||
" In allegato la sua ricevuta fiscale <span style=\"font-weight: bold;\" "
|
||||
"t-out=\"object.number\">RECPT-2023-001</span>\n"
|
||||
" del valori di <span style=\"font-weight: bold;\" t-out="
|
||||
"\"format_amount(object.amount, object.currency_id) or ''\">$ 10.00</span>\n"
|
||||
" da <t t-out=\"object.company_id.name\">Barroux "
|
||||
"Abbey</t>.\n"
|
||||
" <t t-if=\"not is_html_empty(user.signature)\">\n"
|
||||
" <br><br>\n"
|
||||
" <t t-out=\"user.signature or ''\">--<br>Mitchell Admin</t>\n"
|
||||
" </t>\n"
|
||||
" <br><br>\n"
|
||||
" </p>\n"
|
||||
" </div>\n"
|
||||
" "
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,help:donation_base.field_product_template__detailed_type
|
||||
msgid ""
|
||||
"A storable product is a product for which you manage stock. The Inventory app has to be installed.\n"
|
||||
"A consumable product is a product for which stock is not managed.\n"
|
||||
"A service is a non-material product you provide."
|
||||
msgstr ""
|
||||
"Un prodotto stoccabile è un prodotto per il quale si gestiscono le giacenze. "
|
||||
"Deve essere installata l'app Magazzino.\n"
|
||||
"Un prodotto consumabile è un prodotto per il quale non sono gestite le "
|
||||
"giacenze.\n"
|
||||
"Un servizio è un prodotto non materiale che viene fornito."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction
|
||||
msgid "Action Needed"
|
||||
msgstr "Azione richiesta"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_ids
|
||||
msgid "Activities"
|
||||
msgstr "Attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Activity Exception Decoration"
|
||||
msgstr "Decorazione eccezione attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid "Activity State"
|
||||
msgstr "Stato attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Activity Type Icon"
|
||||
msgstr "Icona tipo attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__amount
|
||||
msgid "Amount"
|
||||
msgstr "Valore"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Amount Total:"
|
||||
msgstr "Importo totale:"
|
||||
|
||||
#. 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 "Ricevuta fiscale annuale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Annual Tax Receipts"
|
||||
msgstr "Ricevute fiscali annuali"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_attachment_count
|
||||
msgid "Attachment Count"
|
||||
msgstr "Conteggio allegati"
|
||||
|
||||
#. 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 "Annulla"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__company_id
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__company_id
|
||||
msgid "Company"
|
||||
msgstr "Azienda"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Compose Email"
|
||||
msgstr "Componi e-mail"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_res_partner
|
||||
msgid "Contact"
|
||||
msgstr "Contatto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.tax_receipt_annual_create_action
|
||||
msgid "Create Annual Receipts"
|
||||
msgstr "Crea ricevute annuali"
|
||||
|
||||
#. 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 "Creato da"
|
||||
|
||||
#. 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 "Creato il"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__currency_id
|
||||
msgid "Currency"
|
||||
msgstr "Valuta"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__date
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Date"
|
||||
msgstr "Data"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Date:"
|
||||
msgstr "Data:"
|
||||
|
||||
#. 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 "Nome visualizzato"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation
|
||||
#: model:product.template,name:donation_base.product_product_donation_product_template
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Donation"
|
||||
msgstr "Donazione"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
msgid "Donation - no tax receipt"
|
||||
msgstr "Donazione - senza ricevuta fiscale"
|
||||
|
||||
#. 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 "Data donazione"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.report,name:donation_base.report_donation_tax_receipt
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donation Tax Receipt"
|
||||
msgstr "Ricevuta fiscale donazione"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:mail.template,name:donation_base.tax_receipt_email_template
|
||||
msgid "Donation Tax Receipt - Send by Email"
|
||||
msgstr "Ricevuta fiscale donazione - Invia per e-mail"
|
||||
|
||||
#. 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
|
||||
msgid "Donation Tax Receipts"
|
||||
msgstr "Ricevute fiscali donazione"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__partner_id
|
||||
msgid "Donor"
|
||||
msgstr "Donatore"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_partner__donor_rank
|
||||
#: model:ir.model.fields,field_description:donation_base.field_res_users__donor_rank
|
||||
msgid "Donor Rank"
|
||||
msgstr "Livello donatore"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.report_donationtaxreceipt_document
|
||||
msgid "Donor:"
|
||||
msgstr "Donatore:"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.actions.act_window,name:donation_base.res_partner_action_donor
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.res_partner_view_search
|
||||
msgid "Donors"
|
||||
msgstr "Donatori"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.product_template_search_view
|
||||
msgid "Eligible for a Tax Receipt"
|
||||
msgstr "Idoneo per ricevuta fiscale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__end_date
|
||||
msgid "End Date"
|
||||
msgstr "Data fine"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_follower_ids
|
||||
msgid "Followers"
|
||||
msgstr "Seguito da"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_partner_ids
|
||||
msgid "Followers (Partners)"
|
||||
msgstr "Seguito da (partner)"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_type_icon
|
||||
msgid "Font awesome icon e.g. fa-tasks"
|
||||
msgstr "Icona Font Awesome es. fa-tasks"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__each
|
||||
msgid "For Each Donation"
|
||||
msgstr "Per ogni donazione"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.tax_receipt_annual_create_form
|
||||
msgid "Generate"
|
||||
msgstr "Genera"
|
||||
|
||||
#. 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 "Genera ricevute fiscali annuali"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Group By"
|
||||
msgstr "Raggruppa per"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__has_message
|
||||
msgid "Has Message"
|
||||
msgstr "Ha un messaggio"
|
||||
|
||||
#. 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_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon"
|
||||
msgstr "Icona"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_icon
|
||||
msgid "Icon to indicate an exception activity."
|
||||
msgstr "Icona per indicare un'attività eccezione."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction
|
||||
msgid "If checked, new messages require your attention."
|
||||
msgstr "Se selezionata, nuovi messaggi richiedono attenzione."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_has_error
|
||||
msgid "If checked, some messages have a delivery error."
|
||||
msgstr "Se selezionata, alcuni messaggi hanno un errore di consegna."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "In-Kind Donation"
|
||||
msgstr "Donazione in natura"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:product.template,name:donation_base.product_product_inkind_donation_notaxreceipt_product_template
|
||||
msgid "In-Kind Donation - no tax receipt"
|
||||
msgstr "Donazione in natura - nessuna ricevuta fiscale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_consu
|
||||
msgid "In-Kind Donation Consummable"
|
||||
msgstr "Donazione in nauta consumabile"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__product_template__detailed_type__donation_in_kind_service
|
||||
msgid "In-Kind Donation Service"
|
||||
msgstr "Servizio donazione in natura"
|
||||
|
||||
#. 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 "È idoneo per una ricevuta fiscale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_is_follower
|
||||
msgid "Is Follower"
|
||||
msgstr "Segue"
|
||||
|
||||
#. 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 "Ultima modifica il"
|
||||
|
||||
#. 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 "Ultimo aggiornamento di"
|
||||
|
||||
#. 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 "Ultimo aggiornamento il"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_main_attachment_id
|
||||
msgid "Main Attachment"
|
||||
msgstr "Allegato principale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error
|
||||
msgid "Message Delivery error"
|
||||
msgstr "Errore di consegna messaggio"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_ids
|
||||
msgid "Messages"
|
||||
msgstr "Messaggi"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "Missing email on partner '%s'."
|
||||
msgstr "E-mail mancante nel partner '%s'."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__my_activity_date_deadline
|
||||
msgid "My Activity Deadline"
|
||||
msgstr "Scadenza mia attività"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#: code:addons/donation_base/models/donation_tax_receipt.py:0
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr "Nuova"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_date_deadline
|
||||
msgid "Next Activity Deadline"
|
||||
msgstr "Scadenza prossima attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_summary
|
||||
msgid "Next Activity Summary"
|
||||
msgstr "Riepilogo prossima attività"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_type_id
|
||||
msgid "Next Activity Type"
|
||||
msgstr "Tipo prossima attività"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid "No annual tax receipt to generate"
|
||||
msgstr "Nessuna ricevuta fiscale annuale da generare"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__res_partner__tax_receipt_option__none
|
||||
msgid "None"
|
||||
msgstr "Nessuna"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_needaction_counter
|
||||
msgid "Number of Actions"
|
||||
msgstr "Numero di azioni"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__message_has_error_counter
|
||||
msgid "Number of errors"
|
||||
msgstr "Numero di errori"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__message_needaction_counter
|
||||
msgid "Number of messages requiring action"
|
||||
msgstr "Numero di messaggi che richiedono un'azione"
|
||||
|
||||
#. 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 "Numero di messaggi con errore di consegna"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields.selection,name:donation_base.selection__donation_tax_receipt__type__each
|
||||
msgid "One-Time Tax Receipt"
|
||||
msgstr "Ricevuta fiscale unica"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "One-Time Tax Receipts"
|
||||
msgstr "Ricevute fiscali uniche"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_search
|
||||
msgid "Partner"
|
||||
msgstr "Partner"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
|
||||
msgid "Print"
|
||||
msgstr "Stampa"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__print_date
|
||||
msgid "Print Date"
|
||||
msgstr "Data stampa"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_donation_tax_receipt_print
|
||||
msgid "Print Donation Tax Receipts"
|
||||
msgstr "Stampa ricevute fiscali donazione"
|
||||
|
||||
#. 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 "Stampa ricevute"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Print Tax Receipts"
|
||||
msgstr "Stampa ricevute fiscali"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_template
|
||||
msgid "Product"
|
||||
msgstr "Prodotto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_product__detailed_type
|
||||
#: model:ir.model.fields,field_description:donation_base.field_product_template__detailed_type
|
||||
msgid "Product Type"
|
||||
msgstr "Tipologia prodotto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_product_product
|
||||
msgid "Product Variant"
|
||||
msgstr "Variante prodotto"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__number
|
||||
msgid "Receipt Number"
|
||||
msgstr "Numero ricevuta"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt_print__receipt_ids
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_print_form
|
||||
msgid "Receipts to Print"
|
||||
msgstr "Ricevute da stampare"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__activity_user_id
|
||||
msgid "Responsible User"
|
||||
msgstr "Utente responsabile"
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:ir.ui.view,arch_db:donation_base.donation_tax_receipt_form
|
||||
msgid "Send by Email"
|
||||
msgstr "Invia 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 "Indica se il prodotto è idoneo per una ricevuta fiscale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_tax_receipt_annual_create__start_date
|
||||
msgid "Start Date"
|
||||
msgstr "Data inizio"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_state
|
||||
msgid ""
|
||||
"Status based on activities\n"
|
||||
"Overdue: Due date is already passed\n"
|
||||
"Today: Activity date is today\n"
|
||||
"Planned: Future activities."
|
||||
msgstr ""
|
||||
"Stato in base alle attività\n"
|
||||
"Scaduto: la data richiesta è trascorsa\n"
|
||||
"Oggi: la data attività è oggi\n"
|
||||
"Pianificato: attività future."
|
||||
|
||||
#. 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 "Opzione ricevuta fiscale"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model,name:donation_base.model_donation_tax_receipt
|
||||
msgid "Tax Receipt for Donations"
|
||||
msgstr "Ricevuta fiscale per donazioni"
|
||||
|
||||
#. 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 "Ricevute fiscali"
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_annual_create.py:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The Donor '%(partner)s' already has an annual tax receipt in this timeframe:"
|
||||
" %(receipt)s dated %(number)s."
|
||||
msgstr ""
|
||||
"Il donatore '%(partner)s' ha già una ricevuta fiscale annuale in questo "
|
||||
"periodo: %(receipt)s datata %(number)s."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/wizard/tax_receipt_print.py:0
|
||||
#, python-format
|
||||
msgid "There are no tax receipts to print."
|
||||
msgstr "Non ci sono ricevute fiscali da stampare."
|
||||
|
||||
#. module: donation_base
|
||||
#. odoo-python
|
||||
#: code:addons/donation_base/models/product.py:0
|
||||
#, python-format
|
||||
msgid "There shouldn't have any Customer Taxes on the donation product '%s'."
|
||||
msgstr ""
|
||||
"Non dovrebbero esserci imposte a carico del cliente sul prodotto donazione "
|
||||
"'%s'."
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:product.template,description:donation_base.product_product_donation_product_template
|
||||
#: model_terms:product.template,description:donation_base.product_product_inkind_donation_product_template
|
||||
msgid "This donation item is eligible for a tax receipt."
|
||||
msgstr "Questo elemento donazione è idoneo per una ricevuta fiscale."
|
||||
|
||||
#. module: donation_base
|
||||
#: model_terms:product.template,description:donation_base.product_product_donation_notaxreceipt_product_template
|
||||
#: model_terms:product.template,description:donation_base.product_product_inkind_donation_notaxreceipt_product_template
|
||||
msgid "This donation item is not eligible for a tax receipt."
|
||||
msgstr "Questo elemento donazione non è idoneo per una ricevuta fiscale."
|
||||
|
||||
#. 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 "Tipo"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__activity_exception_decoration
|
||||
msgid "Type of the exception activity on record."
|
||||
msgstr "Tipo di attività eccezione sul record."
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,field_description:donation_base.field_donation_tax_receipt__website_message_ids
|
||||
msgid "Website Messages"
|
||||
msgstr "Messaggi sito web"
|
||||
|
||||
#. module: donation_base
|
||||
#: model:ir.model.fields,help:donation_base.field_donation_tax_receipt__website_message_ids
|
||||
msgid "Website communication history"
|
||||
msgstr "Cronologia comunicazioni sito web"
|
||||
|
||||
#. 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(' ', '_')}}-Tax_Receipt_{{(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}} - Ricevuta fiscale {{object.number or 'n/a'}}"
|
||||
3
donation_base/models/__init__.py
Normal file
3
donation_base/models/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from . import product
|
||||
from . import res_partner
|
||||
from . import donation_tax_receipt
|
||||
100
donation_base/models/donation_tax_receipt.py
Normal file
100
donation_base/models/donation_tax_receipt.py
Normal file
@ -0,0 +1,100 @@
|
||||
# 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", tracking=True)
|
||||
date = fields.Date(
|
||||
required=True,
|
||||
default=fields.Date.context_today,
|
||||
index=True,
|
||||
tracking=True,
|
||||
)
|
||||
donation_date = fields.Date(tracking=True)
|
||||
amount = fields.Monetary(tracking=True)
|
||||
currency_id = fields.Many2one(
|
||||
"res.currency",
|
||||
required=True,
|
||||
ondelete="restrict",
|
||||
default=lambda self: self.env.company.currency_id.id,
|
||||
tracking=True,
|
||||
)
|
||||
partner_id = fields.Many2one(
|
||||
"res.partner",
|
||||
string="Donor",
|
||||
required=True,
|
||||
ondelete="restrict",
|
||||
domain=[("parent_id", "=", False)],
|
||||
index=True,
|
||||
tracking=True,
|
||||
)
|
||||
company_id = fields.Many2one(
|
||||
"res.company",
|
||||
string="Company",
|
||||
required=True,
|
||||
default=lambda self: self.env.company,
|
||||
tracking=True,
|
||||
)
|
||||
print_date = fields.Date(tracking=True)
|
||||
type = fields.Selection(
|
||||
[("each", "One-Time Tax Receipt"), ("annual", "Annual Tax Receipt")],
|
||||
required=True,
|
||||
tracking=True,
|
||||
)
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
for vals in vals_list:
|
||||
if "company_id" in vals:
|
||||
self = self.with_company(vals["company_id"])
|
||||
date = vals.get("donation_date")
|
||||
if vals.get("number", _("New")) == _("New"):
|
||||
vals["number"] = self.env["ir.sequence"].next_by_code(
|
||||
"donation.tax.receipt", sequence_date=date
|
||||
) or _("New")
|
||||
return super().create(vals_list)
|
||||
|
||||
@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")
|
||||
layout_xmlid = "donation_base.tax_receipt_email_template"
|
||||
ctx = dict(
|
||||
default_model=self._name,
|
||||
default_res_id=self.id,
|
||||
default_use_template=bool(template),
|
||||
default_template_id=template.id,
|
||||
default_composition_mode="comment",
|
||||
default_email_layout_xmlid=layout_xmlid,
|
||||
force_email=True,
|
||||
)
|
||||
action = {
|
||||
"name": _("Compose Email"),
|
||||
"type": "ir.actions.act_window",
|
||||
"view_mode": "form",
|
||||
"res_model": "mail.compose.message",
|
||||
"target": "new",
|
||||
"context": ctx,
|
||||
}
|
||||
return action
|
||||
73
donation_base/models/product.py
Normal file
73
donation_base/models/product.py
Normal file
@ -0,0 +1,73 @@
|
||||
# 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"
|
||||
|
||||
is_donation = fields.Selection(
|
||||
selection=[
|
||||
("donation", "Donation"),
|
||||
("donation_in_kind_service", "In-Kind Donation Service"),
|
||||
],
|
||||
string="Is a donation",
|
||||
readonly=False,
|
||||
help="Specify if the product is a donation",
|
||||
)
|
||||
tax_receipt_ok = fields.Boolean(
|
||||
string="Is Eligible for a Tax Receipt",
|
||||
tracking=True,
|
||||
compute="_compute_tax_receipt_ok",
|
||||
readonly=False,
|
||||
store=True,
|
||||
precompute=True,
|
||||
help="Specify if the product is eligible for a tax receipt",
|
||||
)
|
||||
|
||||
@api.depends("is_donation")
|
||||
def _compute_tax_receipt_ok(self):
|
||||
for product in self:
|
||||
if not product.is_donation:
|
||||
product.tax_receipt_ok = False
|
||||
|
||||
@api.onchange("is_donation")
|
||||
def _donation_change(self):
|
||||
for product in self:
|
||||
if product.donation:
|
||||
product.taxes_id = False
|
||||
product.supplier_taxes_id = False
|
||||
product.purchase_ok = False
|
||||
|
||||
@api.constrains("is_donation", "taxes_id")
|
||||
def donation_check(self):
|
||||
for product in self:
|
||||
# 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.is_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("is_donation")
|
||||
def _donation_change(self):
|
||||
for product in self:
|
||||
if product.is_donation:
|
||||
product.taxes_id = False
|
||||
product.supplier_taxes_id = False
|
||||
product.purchase_ok = False
|
||||
56
donation_base/models/res_partner.py
Normal file
56
donation_base/models/res_partner.py
Normal file
@ -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"),
|
||||
],
|
||||
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",
|
||||
)
|
||||
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()})
|
||||
3
donation_base/pyproject.toml
Normal file
3
donation_base/pyproject.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
4
donation_base/readme/CONFIGURE.md
Normal file
4
donation_base/readme/CONFIGURE.md
Normal file
@ -0,0 +1,4 @@
|
||||
To configure this module, you need to:
|
||||
|
||||
> - create donation products
|
||||
> - set the *Tax Receipt Option* on partners
|
||||
5
donation_base/readme/CONTRIBUTORS.md
Normal file
5
donation_base/readme/CONTRIBUTORS.md
Normal file
@ -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\>
|
||||
7
donation_base/readme/DESCRIPTION.md
Normal file
7
donation_base/readme/DESCRIPTION.md
Normal file
@ -0,0 +1,7 @@
|
||||
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).
|
||||
22
donation_base/report/report.xml
Normal file
22
donation_base/report/report.xml
Normal file
@ -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('/','')</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>
|
||||
35
donation_base/report/report_donationtax.xml
Normal file
35
donation_base/report/report_donationtax.xml
Normal file
@ -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>
|
||||
<!-- 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-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>
|
||||
</template>
|
||||
<template id="report_donationtaxreceipt">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t
|
||||
t-call="donation_base.report_donationtaxreceipt_document"
|
||||
t-lang="o.partner_id.lang"
|
||||
/>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
7
donation_base/security/ir.model.access.csv
Normal file
7
donation_base/security/ir.model.access.csv
Normal file
@ -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
|
||||
|
14
donation_base/security/tax_receipt_security.xml
Normal file
14
donation_base/security/tax_receipt_security.xml
Normal file
@ -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>
|
||||
BIN
donation_base/static/description/icon.png
Normal file
BIN
donation_base/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
446
donation_base/static/description/index.html
Normal file
446
donation_base/static/description/index.html
Normal file
@ -0,0 +1,446 @@
|
||||
<!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: https://docutils.sourceforge.io/" />
|
||||
<title>Donation Base</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/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: gray; } /* 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, pre.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. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:6e2db8827361efb5621a1344f354283d19a040354375a96852640d2a8ede572b
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" 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 image-reference" 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 image-reference" href="https://github.com/OCA/donation/tree/18.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 image-reference" href="https://translation.odoo-community.org/projects/donation-18-0/donation-18-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 image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-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="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">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="#toc-entry-2">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 to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/donation/issues/new?body=module:%20donation_base%0Aversion:%2018.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="#toc-entry-3">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">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="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Brother Bernard <informatique - at - barroux.org></li>
|
||||
<li>Brother Irénée (Barroux Abbey)</li>
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Serpent Consulting Services Pvt. Ltd. <<a class="reference external" href="mailto:support@serpentcs.com">support@serpentcs.com</a>></li>
|
||||
<li>Nikul Chaudhary <<a class="reference external" href="mailto:nikul.chaudhary.serpentcs@gmail.com">nikul.chaudhary.serpentcs@gmail.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/18.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>
|
||||
1
donation_base/tests/__init__.py
Normal file
1
donation_base/tests/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import test_donation_tax_receipt
|
||||
79
donation_base/tests/test_donation_tax_receipt.py
Normal file
79
donation_base/tests/test_donation_tax_receipt.py
Normal file
@ -0,0 +1,79 @@
|
||||
# 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
|
||||
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_send_tax_receipt()
|
||||
self.partner.email = False
|
||||
with self.assertRaises(UserError):
|
||||
self.dt_receipt_rec.action_send_tax_receipt()
|
||||
|
||||
def test_donation_type(self):
|
||||
self.assertEqual(self.product_id.type, "service")
|
||||
self.assertTrue(self.product_id.is_donation)
|
||||
|
||||
|
||||
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()
|
||||
154
donation_base/views/donation_tax_receipt.xml
Normal file
154
donation_base/views/donation_tax_receipt.xml
Normal file
@ -0,0 +1,154 @@
|
||||
<?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>
|
||||
<header>
|
||||
<button
|
||||
name="action_send_tax_receipt"
|
||||
type="object"
|
||||
string="Send by Email"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button
|
||||
name="%(report_donation_tax_receipt)d"
|
||||
type="action"
|
||||
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>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_tax_receipt_tree" model="ir.ui.view">
|
||||
<field name="name">donation.tax.receipt.list</field>
|
||||
<field name="model">donation.tax.receipt</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="number" decoration-bf="1" />
|
||||
<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"
|
||||
/>
|
||||
</list>
|
||||
</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>
|
||||
<field name="number" />
|
||||
<field name="partner_id" />
|
||||
<separator />
|
||||
<filter string="Date" name="date" date="date" />
|
||||
<separator />
|
||||
<filter
|
||||
string="Donation Date"
|
||||
name="donation_date"
|
||||
date="donation_date"
|
||||
/>
|
||||
<separator />
|
||||
<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="date_groupby"
|
||||
string="Date"
|
||||
context="{'group_by': 'date'}"
|
||||
/>
|
||||
<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>
|
||||
<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>
|
||||
<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">list,form,graph,pivot</field>
|
||||
</record>
|
||||
</odoo>
|
||||
42
donation_base/views/product.xml
Normal file
42
donation_base/views/product.xml
Normal file
@ -0,0 +1,42 @@
|
||||
<?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="goods" position="after">
|
||||
<filter
|
||||
name="filter_donation"
|
||||
string="Donation"
|
||||
domain="[('is_donation', '!=', False)]"
|
||||
/>
|
||||
</filter>
|
||||
<filter name="filter_to_purchase" position="after">
|
||||
<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">
|
||||
<field name="service_tracking" position="after">
|
||||
<!-- unfortunately, Odoo doesn't accept 'not like' in attrs -->
|
||||
<field name="is_donation" invisible="type == 'service'" />
|
||||
<field name="tax_receipt_ok" invisible="not is_donation" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
64
donation_base/views/res_partner.xml
Normal file
64
donation_base/views/res_partner.xml
Normal file
@ -0,0 +1,64 @@
|
||||
<?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">list,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="inherit_id" ref="account.view_partner_property_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath
|
||||
expr="//group[@name='fiscal_information']/field[@name='property_account_position_id']"
|
||||
position="after"
|
||||
>
|
||||
<field name="tax_receipt_option" invisible="parent_id != False" />
|
||||
<field name="donor_rank" invisible="1" />
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='button_box']" position="inside">
|
||||
<button
|
||||
id="donation_tax_receipt_button"
|
||||
class="oe_stat_button"
|
||||
type="action"
|
||||
name="%(donation_base.partner_tax_receipt_action)d"
|
||||
invisible="parent_id != False"
|
||||
icon="fa-file-text"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"
|
||||
>
|
||||
<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,list,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>
|
||||
2
donation_base/wizard/__init__.py
Normal file
2
donation_base/wizard/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from . import tax_receipt_print
|
||||
from . import tax_receipt_annual_create
|
||||
103
donation_base/wizard/tax_receipt_annual_create.py
Normal file
103
donation_base/wizard/tax_receipt_annual_create.py
Normal file
@ -0,0 +1,103 @@
|
||||
# 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(
|
||||
required=True, default=lambda self: self._default_start_date()
|
||||
)
|
||||
end_date = fields.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 '%(partner)s' already has an annual tax receipt "
|
||||
"in this timeframe: %(receipt)s dated %(number)s.",
|
||||
partner=partner.display_name,
|
||||
receipt=existing_receipt.number,
|
||||
date=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
|
||||
37
donation_base/wizard/tax_receipt_annual_create_view.xml
Normal file
37
donation_base/wizard/tax_receipt_annual_create_view.xml
Normal file
@ -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>
|
||||
34
donation_base/wizard/tax_receipt_print.py
Normal file
34
donation_base/wizard/tax_receipt_print.py
Normal file
@ -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
|
||||
)
|
||||
35
donation_base/wizard/tax_receipt_print_view.xml
Normal file
35
donation_base/wizard/tax_receipt_print_view.xml
Normal file
@ -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>
|
||||
@ -1,4 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
#from . import models
|
||||
@ -1,23 +0,0 @@
|
||||
{
|
||||
"name": "France - Contrats",
|
||||
"version": "16.0.0.0.1",
|
||||
"category": "Payroll",
|
||||
"summary": "Templates for French contracts and agreements",
|
||||
"author": "Le Garage Numérique",
|
||||
"maintainers": ["makayabou"],
|
||||
"website": "https://odoo.legaragenumerique.fr",
|
||||
"depends": [
|
||||
"agreement",
|
||||
"agreement_legal",
|
||||
"partner_company_type"
|
||||
],
|
||||
"data": [
|
||||
"views/gn_agreement_bipartisan_agreement.xml",
|
||||
"views/gn_agreement_external_layout_striped_footer.xml",
|
||||
"data/gn_agreement_document_layout.xml",
|
||||
"data/gn_agreement_types.xml",
|
||||
"data/gn_agreement_convention_cadre_template.xml",
|
||||
"data/gn_agreement_convention_avenant_template.xml",
|
||||
],
|
||||
"license": "LGPL-3",
|
||||
}
|
||||
@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="gn_agreement.layout_convention_partenariat_avenant" model="agreement">
|
||||
<field name="is_template">true</field>
|
||||
<field name="name">Modèle d'avenant lié à une convention-cadre de partenariat</field>
|
||||
<field name="agreement_type_id" ref="gn_agreement.agreement_type_convention_partenariat"/>
|
||||
<field name="agreement_subtype_id" ref="gn_agreement.agreement_subtype_convention_partenariat_avenant"/>
|
||||
<field name="description">Avenant à la convention-cadre {{object.parent_agreement_id.code or ''}}</field>
|
||||
</record>
|
||||
<record id="gn_agreement.recital_ref_cadre" model="agreement.recital">
|
||||
<field name="name">référence à la convention-cadre</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="content"><![CDATA[
|
||||
Les entités {{ object.agreement_id.company_id.name }} et {{ object.agreement_id.partner_id.name }} sont liées par des engagements mutuels,<br/>
|
||||
établis dans la convention-cadre {{ object.agreement_id.parent_agreement_id.code }} portant sur le dispositif {{ object.agreement_id.parent_agreement_id.name }}]]>
|
||||
</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_avenant_section_art1" model="agreement.section">
|
||||
<field name="name">Article 1 - Objet du présent avenant</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="title">Article 1 - Objet du présent avenant</field>
|
||||
<field name="content"><![CDATA[Le présent avenant a pour objet de définir la participation de {{ object.agreement_id.company_id.name }} au projet {{ object.agreement_id.parent_agreement_id.description or ''}}.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_avenant_section_art2" model="agreement.section">
|
||||
<field name="name">Article 2 - Actions à mettre en oeuvre</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="title">Article 2 - Actions à mettre en oeuvre</field>
|
||||
<field name="content"><![CDATA[{{ object.agreement_id.company_id.name}} s'engage à mettre en oeuvre les actions suivantes, dans le cadre défini par le dispositif {{ object.agreement_id.parent_agreement_id.name }}, entre le {{ object.agreement_id.start_date }} et le {{object.agreement_id.to_review_date}}:]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_avenant_section_art3" model="agreement.section">
|
||||
<field name="name">Article 3 - Dispositions financières</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="title">Article 3 - Dispositions financières</field>
|
||||
<field name="content"><![CDATA[
|
||||
{{ object.agreement_id.partner_id.name }} établit ses factures qu'elle adresse à {{ object.agreement_id.company_id.name }}.<br/><br/>
|
||||
|
||||
{{ object.agreement_id.company_id.name }} s'engage à régler la facture émise, par chèque ou virement bancaire, dès réception et au plus tard avant la fin de la convention-cadre, soit le {{ object.agreement_id.end_date }}.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_avenant_section_art4" model="agreement.section">
|
||||
<field name="name">Article 4 - Date d'effet</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="title">Article 4 - Date d'effet</field>
|
||||
<field name="content"><![CDATA[
|
||||
Le présent avenant prend effet au {{ object.agreement_id.start_date }}.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_avenant_section_art5" model="agreement.section">
|
||||
<field name="name">Article 5 - Dispositions de la convention-cadre</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="title">Article 5 - Dispositions de la convention-cadre</field>
|
||||
<field name="content"><![CDATA[
|
||||
L'ensemble des dispositions de la convention-cadre {{ object.agreement_id.parent_agreement_id.code }}, non-contraire aux présentes, demeurent inchangées.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_avenant"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@ -1,135 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="gn_agreement.layout_convention_partenariat_cadre" model="agreement">
|
||||
<field name="is_template">true</field>
|
||||
<field name="name">Modèle de convention-cadre de partenariat</field>
|
||||
<field name="agreement_type_id" ref="gn_agreement.agreement_type_convention_partenariat"/>
|
||||
<field name="agreement_subtype_id" ref="gn_agreement.agreement_subtype_convention_partenariat_cadre"/>
|
||||
<field name="description">Convention-Cadre de partenariat pour le dispositif</field>
|
||||
</record>
|
||||
<record id="gn_agreement.recital_company" model="agreement.recital">
|
||||
<field name="name">Notes sur le Porteur de Projet</field>
|
||||
<field name="sequence">10</field>
|
||||
<field name="content">{{object.agreement_id.company_id.partner_id.comment or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_recital_partner" model="agreement.recital">
|
||||
<field name="name">Notes sur le Partenaire</field>
|
||||
<field name="sequence">11</field>
|
||||
<field name="content">{{object.agreement_id.partner_id.comment or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art1" model="agreement.section">
|
||||
<field name="name">Article 1 - Objet de la Convention</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="title">Article 1 - Objet de la convention</field>
|
||||
<field name="content"><![CDATA[ {{ object.agreement_id.description }} <br/><br/>
|
||||
La présente convention a donc pour objet de définir les modalités de collaboration et de fonctionnement, entre les signataires pour la mise en oeuvre des formations pré-citées.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art2" model="agreement.section">
|
||||
<field name="name">Article 2 - Principes généraux d'organisation et de mise en oeuvre</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="title">Article 2 - Principes généraux d'organisation et de mise en oeuvre</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art2_org_gen" model="agreement.clause">
|
||||
<field name="name">Organisation générale du projet</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="content">L'organisation générale du projet est réalisée par {{object.section_id.agreement_id.company_id.name or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art2"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art2_perimeter" model="agreement.clause">
|
||||
<field name="name">Périmètre du partenariat</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="content">La mise en oeuvre du projet revient à {{object.section_id.agreement_id.company_id.name or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art2"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art2_org_adm" model="agreement.clause">
|
||||
<field name="name">Organisation administrative</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="content">La responsabilité administrative du projet revient à {{object.section_id.agreement_id.company_id.name or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art2"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art2_com" model="agreement.clause">
|
||||
<field name="name">Communication</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="content">La communication autour du projet revient à {{object.section_id.agreement_id.company_id.name or ''}}</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art2"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art3" model="agreement.section">
|
||||
<field name="name">Article 3 – Dispositions financières</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="title">Article 3 – Dispositions financières</field>
|
||||
<field name="content">
|
||||
<![CDATA[
|
||||
Afin de permettre la prise en charge des dépenses liées à la mise en œuvre des formations sus-mentionnées, les parties s’engagent à répondre en partenariat à des appels à projet portés par des financeurs publics ou privés. <br/>
|
||||
Quand les parties remportent un appel à projet, elles conviennent de se répartir les financements obtenus.<br/>
|
||||
La répartition des financement et leur échéancier fait l'objet d'avenants à la présente convention.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art4" model="agreement.section">
|
||||
<field name="name">Article 4 – Justificatifs et conditions d’évaluation</field>
|
||||
<field name="sequence">4</field>
|
||||
<field name="title">Article 4 – Justificatifs et conditions d’évaluation</field>
|
||||
<field name="content">Les parties s'engagent à:</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art4_com_2mois" model="agreement.clause">
|
||||
<field name="name">Communiquer tous les 2 mois</field>
|
||||
<field name="sequence">1</field>
|
||||
<field name="content">Communiquer tous les deux mois sur l’état, les évolutions, les problématiques liées à la mise en place du projet commun. </field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art4"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art4_com_chgt" model="agreement.clause">
|
||||
<field name="name">Communiquer tout changement</field>
|
||||
<field name="sequence">2</field>
|
||||
<field name="content">Communiquer tout changement dans l’offre de formation ou la mise en place de celle-ci.</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art4"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art4_com_bilan" model="agreement.clause">
|
||||
<field name="name">Établir un rapport annuel</field>
|
||||
<field name="sequence">3</field>
|
||||
<field name="content">
|
||||
<![CDATA[
|
||||
Établir un rapport annuel synthétisant le bilan des travaux menés sur la durée du partenariat et les perspectives que ceux-ci auront ouvertes. <br/>
|
||||
Ce rapport fera notamment apparaître le bilan des actions de communication menées dans le cadre du partenariat.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
<field name="section_id" ref="gn_agreement.convention_partenariat_cadre_section_art4"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art5" model="agreement.section">
|
||||
<field name="name">Article 5 - Responsabilité civile</field>
|
||||
<field name="sequence">5</field>
|
||||
<field name="title">Article 5 - Responsabilité civile</field>
|
||||
<field name="content"><![CDATA[ Chaque partie déclare être assurée pour son activité propre.
|
||||
<br/>
|
||||
L' {{object.agreement_id.company_id.name }} déclare être assuré contre tous les risques professionnels et pour tous les objets lui appartenant ou appartenant à ses membres dans le cadre de ses activités et plus généralement contre tous les risques dont elle doit répondre en ce qui concerne leurs activités exercées dans les locaux propres ou mis à disposition, et en matière de responsabilité civile.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art6" model="agreement.section">
|
||||
<field name="name">Article 6 – Résiliation de la convention</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="title">Article 6 – Résiliation de la convention</field>
|
||||
<field name="content">En cas de non-respect par l’une des parties de l’une de ses obligations résultant de la présente convention, celle-ci pourra être résiliée de plein droit par l’autre partie à l’expiration d’un délai de prévenance raisonnable.</field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
<record id="gn_agreement.convention_partenariat_cadre_section_art7" model="agreement.section">
|
||||
<field name="name">Article 7 - Durée de la convention</field>
|
||||
<field name="sequence">7</field>
|
||||
<field name="title">Article 7 - Durée de la convention</field>
|
||||
<field name="content"><![CDATA[La présente convention est conclue par {{ object.agreement_id.company_id.name }} et {{ object.agreement_id.partner_id.name }} pour une durée de trois ans à compter de sa signature. Cette convention pourra être renouvelée par tacite reconduction.
|
||||
<br/>
|
||||
Chaque année, avant le démarrage des formations, les parties conviennent de déterminer si elles sont en mesure de couvrir les dépenses liées à la mise en œuvre des formations. <br/>
|
||||
Dans l’affirmative, les parties s’engagent à signer une convention d’application annuelle par formation. <br/>
|
||||
Dans la négative, les parties conviennent de suspendre pour un an la signature de convention d’application sans remettre en cause pour autant les principes généraux exprimés dans la présente convention.]]></field>
|
||||
<field name="agreement_id" ref="gn_agreement.layout_convention_partenariat_cadre"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="gn_agreement.report_layout" model="report.layout">
|
||||
<field name="name">GN</field>
|
||||
<field name="sequence">6</field>
|
||||
<field name="view_id" ref="gn_agreement.external_layout_striped_footer"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@ -1,17 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="gn_agreement.agreement_type_convention_partenariat" model="agreement.type">
|
||||
<field name="name">Convention de partenariat</field>
|
||||
<field name="domain">sale</field>
|
||||
</record>
|
||||
<record id="gn_agreement.agreement_subtype_convention_partenariat_cadre" model="agreement.subtype">
|
||||
<field name="name">Convention-Cadre</field>
|
||||
<field name="agreement_type_id" ref="gn_agreement.agreement_type_convention_partenariat"/>
|
||||
</record>
|
||||
<record id="gn_agreement.agreement_subtype_convention_partenariat_avenant" model="agreement.subtype">
|
||||
<field name="name">Avenant</field>
|
||||
<field name="agreement_type_id" ref="gn_agreement.agreement_type_convention_partenariat"/>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@ -1,156 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template id="gn_agreement.report_agreement_document" inherit_id="agreement_legal.report_agreement_document">
|
||||
<xpath expr="//div[contains(@class, 'page') and .//table]" position="replace">
|
||||
<div class="page">
|
||||
<h1 style="font-size: 1.5rem; text-align: center; font-weight: bold"><span t-field="doc.code"/> : <t t-if="doc.template_id"><span t-field="doc.template_id.description"/></t><t t-else=""><span t-field="doc.name"/></t>
|
||||
<t t-if="doc.parent_agreement_id"><span t-field="doc.parent_agreement_id.code"/></t></h1>
|
||||
<t t-if="doc.parent_agreement_id">
|
||||
<h1 style="font-size: 1.5rem; text-align: center; font-weight: bold"><span t-field="doc.parent_agreement_id.name"/></h1>
|
||||
</t>
|
||||
|
||||
<div style="font-size: 1.5rem; text-align: center;" name="description">
|
||||
|
||||
<span t-field="doc.name"/>
|
||||
</div>
|
||||
<!--<h2>Parties</h2>-->
|
||||
<div name="parties">
|
||||
<t t-if="doc.use_parties_content">
|
||||
<p t-field="doc.dynamic_parties"/>
|
||||
</t>
|
||||
|
||||
<t t-else="">
|
||||
<div class="my-3">
|
||||
<h6 style="font-weight: bold">Entre</h6>
|
||||
<div name="company_address">
|
||||
<t t-set="a" t-value="doc.company_id.partner_id"/>
|
||||
<div>
|
||||
<p class="mb-0">
|
||||
<span style="font-weight: bold;" t-field="a.name"/>,
|
||||
<span t-field="a.partner_company_type_id"/>,
|
||||
dont les activités sont situées au
|
||||
<span t-field="a.street"/>,
|
||||
<span t-field="a.zip"/>
|
||||
<span t-field="a.city"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div name="company_contact">
|
||||
Representée par <span style="font-weight: bold" t-field="doc.company_contact_id.name"/>, en qualité de <span t-field="doc.company_contact_id.function"/>.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="my-3">
|
||||
<h6 style="font-weight: bold">Et</h6>
|
||||
<div name="partner_address">
|
||||
<t t-set="a" t-value="doc.partner_id"/>
|
||||
<div>
|
||||
<p class="mb-0">
|
||||
<span style="font-weight: bold;" t-field="a.name"/>,
|
||||
<span t-field="a.partner_company_type_id"/>, dont les activités sont situées au
|
||||
<span t-field="a.street"/>,
|
||||
<span t-field="a.zip"/>
|
||||
</p>
|
||||
</div>
|
||||
<div name="company_contact">
|
||||
Representée par <span style="font-weight: bold" t-field="doc.partner_contact_id.name"/>, en qualité de <span t-field="doc.partner_contact_id.function"/>.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="text-align:right;" name="company_contact_denomination">
|
||||
Ci-après dénommés <span style="font-weight: bold">"Les partenaires"</span> ou <span style="font-weight: bold">"Les parties"</span>
|
||||
</div>
|
||||
</t>
|
||||
<!--
|
||||
<t t-else="">
|
||||
<h3>Company Information</h3>
|
||||
<div name="company_address">
|
||||
<address t-field="doc.company_id.partner_id" t-options="{"widget": "contact", "fields": ["address", "name"], "no_marker": True}"/>
|
||||
</div>
|
||||
<div name="company_contact">
|
||||
Represented by <span t-field="doc.company_contact_id.name"/>.
|
||||
</div>
|
||||
<h3>Partner Information</h3>
|
||||
<div name="partner_address">
|
||||
<address t-field="doc.partner_id" t-options="{"widget": "contact", "fields": ["address", "name"], "no_marker": True}"/>
|
||||
</div>
|
||||
<div name="partner_contact">
|
||||
Represented by <span t-field="doc.partner_contact_id.name"/>.
|
||||
</div>
|
||||
</t>
|
||||
-->
|
||||
</div>
|
||||
<!--<h2>Agreement</h2>-->
|
||||
<h3 style="font-size: 1.2rem;">Préambule</h3>
|
||||
<table class="table table-condensed">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<t t-foreach="doc.recital_ids" t-as="r">
|
||||
<t t-if="r.title">
|
||||
<h3 style="font-size: 1rem;" t-field="r.title"/>
|
||||
</t>
|
||||
<p t-field="r.dynamic_content"/>
|
||||
</t>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>C'est dans ce contexte que les parties se sont rapprochées afin de convenir de ce qui suit: </p>
|
||||
<t t-foreach="doc.sections_ids" t-as="s">
|
||||
<table class="table table-condensed">
|
||||
<tbody class="section_tbody">
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
<t t-if="s.title">
|
||||
<h3 style="font-size: 1.2rem;" t-field="s.title"/>
|
||||
</t>
|
||||
<p t-field="s.dynamic_content"/>
|
||||
<ol>
|
||||
<li t-foreach="s.clauses_ids" t-as="c">
|
||||
<t t-if="c.title">
|
||||
<h4 style="font-size: 1rem;" t-field="c.title"/>
|
||||
</t>
|
||||
<p t-field="c.dynamic_content"/>
|
||||
</li>
|
||||
</ol>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</t>
|
||||
<t t-if="special_term">
|
||||
<h2>Special Terms</h2>
|
||||
<div name="special_term">
|
||||
<p t-field="doc.dynamic_special_terms"/>
|
||||
</div>
|
||||
</t>
|
||||
<!--<h2>Signatures</h2>-->
|
||||
<table class="table table-condensed">
|
||||
<theader>
|
||||
<tr>
|
||||
<th>Signatures</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</theader>
|
||||
<tbody class="section_tbody">
|
||||
<tr>
|
||||
<td>
|
||||
<p style="font-weight: bold;">Pour <span t-field="doc.company_id.partner_id"/></p>
|
||||
<p><span t-field="doc.company_contact_id.name"/>, <span t-field="doc.company_contact_id.function"/></p>
|
||||
<p>le <span t-field="doc.company_signed_date"/><br/><br/><br/><br/><br/><br/><br/></p>
|
||||
</td>
|
||||
<td>
|
||||
<p style="font-weight: bold;">Pour <span t-field="doc.partner_id"/>,</p>
|
||||
<p><span t-field="doc.partner_contact_id.name"/>, <span t-field="doc.partner_contact_id.function"/></p>
|
||||
<p>le <span t-field="doc.partner_signed_date"/><br/><br/><br/><br/><br/><br/><br/> </p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<template id="gn_agreement.external_layout_striped_footer" inherit_id="web.external_layout_striped">
|
||||
<xpath expr="//div[contains(@class, 'text-muted') and span[contains(@class, 'page')] and span[contains(@class, 'topage')]]" position="replace">
|
||||
<div t-if="report_type == 'pdf'" class="text-muted">
|
||||
Page <span class="page"/> sur <span class="topage"/> -
|
||||
<t t-if="doc and doc._name == 'agreement'"><span t-field="doc.code"/><span> : </span><t t-if="doc.template_id"><span t-field="doc.template_id.description"/></t> <t t-if="doc.parent_agreement_id"><span t-field="doc.parent_agreement_id.code"/></t><t t-else=""><span t-field="doc.name"/> </t></t><span t-if="display_name_in_footer" t-field="o.name"/>
|
||||
</div>
|
||||
</xpath>
|
||||
</template>
|
||||
</odoo>
|
||||
2
gn_discount/.gitignore
vendored
2
gn_discount/.gitignore
vendored
@ -1,2 +0,0 @@
|
||||
__pycache__
|
||||
models/__pycache__
|
||||
@ -1,3 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user