Compare commits

...

No commits in common. "old16.0" and "18.0-donation" have entirely different histories.

184 changed files with 19145 additions and 5317 deletions

4
.gitignore vendored
View File

@ -1,2 +1,2 @@
*__pycache__
*~lock*
__pycache__/
*.py[cod]

View File

@ -1,5 +1,10 @@
# GN-ODOO
# Gn_Odoo
Addons for Odoo 18
Addons for Odoo 16.
Starting with association loi 1901 chart of accounts.
## 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 |

3
cvn/__init__.py Normal file
View File

@ -0,0 +1,3 @@
from . import wizard
from . import models
from . import report

20
cvn/__manifest__.py Normal file
View File

@ -0,0 +1,20 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "CVN",
"version": "18.0.1.0.0",
"category": "Accounting",
"license": "AGPL-3",
"summary": "GN module for donations",
"author": "Florian Roger",
"maintainers": ["makayabou"],
"website": "https://git.legaragenumerique.fr/odoo/gn_odoo",
"depends": ["donation"],
"data": [
"security/ir.model.access.csv",
"views/product.xml",
"views/account_journal.xml",
"wizard/res_config_settings.xml",
],
"installable": True,
}

4
cvn/models/__init__.py Normal file
View File

@ -0,0 +1,4 @@
from . import cvn_asset
from . import product
from . import donation
from . import donation_line

62
cvn/models/cvn_asset.py Normal file
View File

@ -0,0 +1,62 @@
# 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 CvnAsset(models.Model):
_name = 'cvn.asset'
_inherits = {'product.product': 'product_id'}
_check_company_auto = True
ACCOUNT_DOMAIN = "['&', ('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable','liability_payable','asset_cash','liability_credit_card','off_balance'))]"
product_id = fields.Many2one(
'product.product',
auto_join=True,
string='Product', required=True, ondelete='cascade',
index=True,
check_company=True)
# Fields coming directly from product.template that we want to redefine here, so their values in a donation transaction
# does not interfer with their values defined for other sales and purchases transactions
taxes_id = fields.Many2many('account.tax', 'product_taxes_rel', 'prod_id', 'tax_id',
string="Sales Taxes",
help="Default taxes used when selling the product",
domain=[('type_tax_use', '=', 'sale')],
related='product_id.donation_taxes_id',
)
supplier_taxes_id = fields.Many2many('account.tax', 'product_supplier_taxes_rel', 'prod_id', 'tax_id',
string="Purchase Taxes",
help="Default taxes used when buying the product",
domain=[('type_tax_use', '=', 'purchase')],
related='product_id.donation_supplier_taxes_id',
)
property_account_income_id = fields.Many2one('account.account', company_dependent=True, ondelete='restrict',
string="Income Account",
domain=ACCOUNT_DOMAIN,
related='product_id.donation_property_account_income_id',
help="Keep this field empty to use the default value from the product category.",
)
property_account_expense_id = fields.Many2one('account.account', company_dependent=True, ondelete='restrict',
string="Expense Account",
domain=ACCOUNT_DOMAIN,
related='product_id.donation_property_account_expense_id',
help="Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used."
)
account_tag_ids = fields.Many2many(
string="Account Tags",
comodel_name='account.account.tag',
domain="[('applicability', '=', 'products')]",
related='product_id.donation_account_tag_ids',
help="Tags to be set on the base and tax journal items created for this product.")
def _get_product_accounts(self):
return {
'income': self.property_account_income_id or self.product_id.property_account_income_id or self.categ_id.property_account_income_categ_id,
'expense': self.property_account_expense_id or self.product_id.property_account_expense_id or self.categ_id.property_account_expense_categ_id
}

241
cvn/models/donation.py Normal file
View File

@ -0,0 +1,241 @@
# 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):
_inherit = ["donation.donation"]
# Only 2 small adjustments here:
# - we allow in-kind lines to be computed
# - we link the move to the real product_id instead of the cvn_asset copy
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,
)
)
journal = self.payment_method_line_id.journal_id
if not journal:
raise UserError(
_(
"Error no journal defined for this Payment Method"
)
)
# 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": [],
}
if any(line.in_kind for line in self.line_ids) and any(not line.in_kind for line in self.line_ids):
raise UserError(
_(
"You can't mix in-kind and financiary donations "
"in the same donation"
)
)
for line in self.line_ids:
if line.in_kind and not self.company_id.in_kind_donations_in_accounting:
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
line_name = (
f"{self.number}: {line.product_id.display_name}"
if not line.product_id.in_kind
else f"{self.number}: {line.product_id.display_name} ({line.quantity} {line.product_id.uom_name})"
)
vals["line_ids"].append(
(
0,
0,
{
"display_type": "product",
#"product_id": line.product_id.id,
"product_id": line.product_id.product_id.id,
"credit": credit,
"debit": debit,
"name": line_name,
"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
# Adjustements here:
# - allowing zero amount_total donation
# - allowing move creation for in_kind donations if settings allow
# - no triggering move creation for zero amount_total donation
def validate(self):
check_total_grp = self.env.user.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
)
# We allow zero amount_total
# 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
),
)
)
# Now we can have payment_method on in_kind donation
full_in_kind = all([line.in_kind for line in donation.line_ids])
if (
not donation.payment_method_line_id
and not donation.currency_id.is_zero(donation.amount_total)
and not (
full_in_kind
and self.company_id.in_kind_donations_in_accounting
)
): # full_in_kind:
raise UserError(
_(
"Payment Mode is not set on donation %s."
)
% donation.display_name
)
vals = {"state": "done"}
#if full_in_kind and donation.payment_method_line_id:
if donation.currency_id.is_zero(donation.amount_total) and donation.payment_method_line_id:
vals["payment_method_line_id"] = False
#if not full_in_kind:
if not (
full_in_kind
and not self.company_id.in_kind_donations_in_accounting
) and not donation.currency_id.is_zero(donation.amount_total):
move_vals = donation._prepare_donation_move()
# actual behaviour: 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=_("Zero value donation: no account move generated")
)
# 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
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 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)
and not self.company_id.is_allowed_null_value_tax_receipt
)
):
receipt_vals = self._prepare_each_tax_receipt()
receipt = self.env["donation.tax.receipt"].create(receipt_vals)
return receipt

View File

@ -0,0 +1,34 @@
# 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 DonationLine(models.Model):
_inherit = ["donation.line"]
product_id = fields.Many2one(
#"product.product",
"cvn.asset",
required=True,
domain=[("is_donation", "!=", False)],
ondelete="restrict",
check_company=True,
)
in_kind = fields.Boolean(
compute="_compute_line_is_in_kind",
readonly=True, store=True,
string="Donation Line is in kind"
)
@api.depends('product_id.is_donation')
def _compute_line_is_in_kind(self):
for line in self:
if line.product_id.is_donation and line.product_id.is_donation == "donation_in_kind_service":
line.in_kind = True
else:
line.in_kind = False

116
cvn/models/product.py Normal file
View File

@ -0,0 +1,116 @@
# 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"
ACCOUNT_DOMAIN = "['&', ('deprecated', '=', False), ('account_type', 'not in', ('asset_receivable','liability_payable','asset_cash','liability_credit_card','off_balance'))]"
donation_taxes_id = fields.Many2many('account.tax', 'product_donation_taxes_rel', 'prod_id', 'tax_id',
string="Sales Taxes",
help="Default taxes used on donations",
domain=[('type_tax_use', '=', 'sale')],
default=False,
)
donation_supplier_taxes_id = fields.Many2many('account.tax', 'product_donation_supplier_taxes_rel', 'prod_id', 'tax_id',
string="Purchase Taxes",
help="Default taxes used on donations",
domain=[('type_tax_use', '=', 'purchase')],
default=False,
)
donation_property_account_income_id = fields.Many2one('account.account', company_dependent=True, ondelete='restrict',
string="Income Account",
domain=ACCOUNT_DOMAIN,
help="Keep this field empty to use the default value from the product category.")
donation_property_account_expense_id = fields.Many2one('account.account', company_dependent=True, ondelete='restrict',
string="Expense Account",
domain=ACCOUNT_DOMAIN,
help="Keep this field empty to use the default value from the product category. If anglo-saxon accounting with automated valuation method is configured, the expense account on the product category will be used.")
donation_account_tag_ids = fields.Many2many(
string="Account Tags",
comodel_name='account.account.tag',
relation="product_donation_account_tags_rel",
domain="[('applicability', '=', 'products')]",
help="Tags to be set on the base and tax journal items created for this product.")
@api.model_create_multi
def create(self, vals_list):
templates = super().create(vals_list)
if templates := templates.filtered(lambda template: template.is_donation):
templates._ensure_cvn_assets()
return templates
# @api.onchange("is_donation")
# def _onchange_is_donation_create_cvn_asset(self):
# self._ensure_cvn_assets()
def write(self, vals):
if self.env.context.get('skip_cvn_asset'):
return super().write(vals)
res = super().write(vals)
donation_templates = self.filtered(lambda t: t.is_donation)
for template in donation_templates:
for product in template.product_variant_ids:
if not self.env['cvn.asset'].with_context(skip_cvn_asset=True).search([('product_id', '=', product.id)], limit=1):
self.env['cvn.asset'].with_context(skip_cvn_asset=True).create({
'product_id': product.id,
'taxes_id': product.donation_taxes_id.ids,
'supplier_taxes_id': product.donation_supplier_taxes_id.ids,
'property_account_income_id': product.donation_property_account_income_id.id,
'property_account_expense_id': product.donation_property_account_expense_id.id,
'account_tag_ids': product.donation_account_tag_ids.ids,
})
return res
def _ensure_cvn_assets(self):
for template in self.filtered(lambda t: t.is_donation):
for product in template.product_variant_ids:
cvn_asset = self.env['cvn.asset'].search([
('product_id', '=', product.id),
], limit=1)
if not cvn_asset:
self.env['cvn.asset'].create({
'product_id': product.id,
'taxes_id': product.donation_taxes_id.ids,
'supplier_taxes_id': product.donation_supplier_taxes_id.ids,
'property_account_income_id': product.donation_property_account_income_id.id,
'property_account_expense_id': product.donation_property_account_expense_id.id,
'account_tag_ids': product.donation_account_tag_ids.ids,
})
@api.onchange("is_donation")
def _donation_change(self):
return
# for product in self:
# if product.is_donation:
# product.taxes_id = False
# product.supplier_taxes_id = False
# product.purchase_ok = False
@api.constrains("is_donation", "taxes_id")
def donation_check(self):
return
# for product in self:
# 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):
return
# for product in self:
# if product.is_donation:
# product.taxes_id = False
# product.supplier_taxes_id = False
# product.purchase_ok = False

1
cvn/report/__init__.py Normal file
View File

@ -0,0 +1 @@
#from . import donation_report

View File

@ -0,0 +1,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class DonationReport(models.Model):
_inherit = ["donation.report"]
product_id = fields.Many2one("cvn.asset", readonly=True)

View File

@ -0,0 +1,3 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_cvn_asset_viewer,Read access on cvn.asset to Donation Viewer,model_cvn_asset,donation.group_donation_viewer,1,0,0,0
access_cvn_asset_user,Full access on cvn.asset to Donation User,model_cvn_asset,donation.group_donation_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_cvn_asset_viewer Read access on cvn.asset to Donation Viewer model_cvn_asset donation.group_donation_viewer 1 0 0 0
3 access_cvn_asset_user Full access on cvn.asset to Donation User model_cvn_asset donation.group_donation_user 1 1 1 1

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="cvn.view_account_journal_form" model="ir.ui.view">
<field name="name">cvn.account.journal.form</field>
<field name="model">account.journal</field>
<field
name="inherit_id"
ref="account.view_account_journal_form"
/>
<field name="arch" type="xml">
<xpath expr="//page[@id='inbound_payment_settings']/field[@name='inbound_payment_method_line_ids']/list/field[@name='payment_account_id']"
position="after">
<field name="donation" optional="hide" />
</xpath>
<xpath expr="//page[@id='outbound_payment_settings']/field[@name='outbound_payment_method_line_ids']/list/field[@name='payment_account_id']"
position="after">
<field name="donation" optional="hide" />
</xpath>
</field>
</record>
<!-- <record id="account_payment_mode_search" model="ir.ui.view"> -->
<!-- <field name="model">account.payment.method.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>

60
cvn/views/product.xml Normal file
View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<record id="cvn.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="donation_base.product_template_form_view" />
<field name="arch" type="xml">
<field name="is_donation" position="replace">
<field name="is_donation"/>
</field>
<page name="invoicing" position="after">
<page
string="Donation"
name="donation"
groups="account.group_account_readonly"
invisible="not is_donation">
<group name="properties" groups="account.group_account_readonly">
<group string="Receivables">
<field name="donation_property_account_income_id"
groups="account.group_account_readonly"/>
</group>
<group string="Payables" name="payables">
<field name="donation_property_account_expense_id"
groups="account.group_account_readonly"/>
</group>
<div name="donation_taxes_div" class="o_row" invisible="type == 'combo'">
<field
name="donation_taxes_id"
widget="many2many_tags"
class="oe_inline"
context="{
'default_type_tax_use': 'sale',
'search_default_sale': 1,
'search_default_service': type == 'service',
'search_default_goods': type == 'consu',
}"
/>
</div>
<div name="donation_supplier_taxes_div" class="o_row" invisible="type == 'combo'">
<field name="donation_supplier_taxes_id"
invisible="not purchase_ok or type == 'combo'"
widget="many2many_tags"
context="{
'default_type_tax_use':'purchase',
'search_default_purchase': 1,
'search_default_service': type == 'service',
'search_default_goods': type == 'consu',
}"
/>
</div>
</group>
</page>
</page>
</field>
</record>
</odoo>

1
cvn/wizard/__init__.py Normal file
View File

@ -0,0 +1 @@
from . import res_config_settings

View File

@ -0,0 +1,27 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
is_allowed_null_value_tax_receipt = fields.Boolean(
string="Allowed null value tax receipt",
default=False,
)
in_kind_donations_in_accounting = fields.Boolean(
string="Allow accounting moves creation for donation using special accounts 86 and 87",
default=False,
)
class ResConfigSettings(models.TransientModel):
_inherit = "res.config.settings"
is_allowed_null_value_tax_receipt = fields.Boolean(
related="company_id.is_allowed_null_value_tax_receipt",
readonly=False,
)
in_kind_donations_in_accounting = fields.Boolean(
related="company_id.in_kind_donations_in_accounting",
readonly=False,
)

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8" ?>
<!--
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->
<odoo>
<record id="cvn.res_config_settings_donation" model="ir.ui.view">
<field name="name">cvn.res.config.settings.form</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="50" />
<field name="inherit_id" ref="donation.res_config_settings_donation" />
<field name="arch" type="xml">
<xpath expr="//setting[@id='donation_settings_credit_transfer']" position="before">
<setting
id="is_allowed_null_value_tax_receipt"
string="Null receipts"
help="Allow null value tax receipt"
>
<field name="is_allowed_null_value_tax_receipt" />
</setting>
<setting
id="in_kind_donations_in_accounting"
string="Accounting for in kind donations"
help="Accounting for in kind donations, using special accounts 86 and 87"
>
<field name="in_kind_donations_in_accounting" />
</setting>
</xpath>
</field>
</record>
</odoo>

150
donation/README.rst Normal file
View 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
View 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
View 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",
"views/res_config_settings.xml",
"data/donation_sequence.xml",
"views/account_payment_method_line.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,
}

View 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>

View 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>

1296
donation/i18n/de.po Normal file

File diff suppressed because it is too large Load Diff

1205
donation/i18n/donation.pot Normal file

File diff suppressed because it is too large Load Diff

1343
donation/i18n/es.po Normal file

File diff suppressed because it is too large Load Diff

1335
donation/i18n/fr.po Normal file

File diff suppressed because it is too large Load Diff

1262
donation/i18n/it.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
from . import donation
from . import donation_tax_receipt
from . import donation_campaign
from . import account_payment_method_line
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
from . import res_config_settings
from . import account_move

View 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"},
)

View 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_method_line_donation(self):
self.ensure_one()
payment_method_line = self.env["account.payment.method.line"].search(
[
("company_id", "=", self.company_id.id),
("payment_type", "=", "inbound"),
("donation", '=', True),
("journal_id", "=", self.journal_id.id),
],
limit=1,
)
if not payment_method_line:
raise UserError(
_(
"Missing inbound payment mode linked to the bank journal '%s' "
"available for donations."
)
% self.journal_id.display_name
)
return payment_method_line
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_method_line_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

View File

@ -0,0 +1,36 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class AccountMove(models.Model):
_inherit = ["account.move"]
donation_ids = fields.One2many(
"donation.donation",
"move_id",
string="Donations",
store=True,
)
@api.constrains('state')
def _check_with_tax_receipt(self):
moves_with_tax_receipt = []
for move in self.filtered(lambda m: m.state in ['cancel', 'draft']):
donations_with_receipt = move.donation_ids.filtered(lambda d: d.tax_receipt_id)
if donations_with_receipt:
moves_with_tax_receipt.append({
'move_name': move.name,
'donations': donations_with_receipt
})
if moves_with_tax_receipt:
message_lines = []
for item in moves_with_tax_receipt:
move_name = item['move_name']
donations = item['donations']
donation_lines = "\n".join(
f"- {d.number} ({d.tax_receipt_id.display_name})"
for d in donations
)
message_lines.append(_(f"Move '{move_name}' has donations with tax receipts:\n{donation_lines}"))
raise UserError("\n\n".join(message_lines))

View 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."
)
)

View 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 AccountPaymentMethodLine(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."
)
)

801
donation/models/donation.py Normal file
View File

@ -0,0 +1,801 @@
# 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, ValidationError
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
def _get_payment_debit_account_id(self):
account_ref = 'account_journal_payment_debit_account_id'
chart_template = self.with_context(allowed_company_ids=self.company_id.root_id.ids).env['account.chart.template']
outstanding_account = (
chart_template.ref(account_ref, raise_if_not_found=False)
or self.company_id.transfer_account_id
)
if not outstanding_account:
raise UserError(_("No outstanding account could be found to make the payment"))
return outstanding_account
def _prepare_counterpart_move_line(
self, total_company_cur, total_currency, journal
):
self.ensure_one()
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:
company_payment_account_id = self._get_payment_debit_account_id().id
if not company_payment_account_id:
raise UserError(
_(
"Missing Outstanding Receipts Account"
f"on company '{company.display_name}'."
)
)
account_id = (self.payment_method_line_id.payment_account_id.id
or company_payment_account_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,
)
)
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,
"name": f"{self.number}: {line.product_id.display_name}",
"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.user.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.constrains("line_ids")
def _check_tax_receipt_ok_on_donation_line(self):
for donation in self:
invalid_lines = donation.line_ids.filtered(
lambda l: l.tax_receipt_ok and not l.product_id.tax_receipt_ok
)
if invalid_lines:
raise ValidationError(_(
"The following donation lines are not eligible for a tax receipt:\n%s"
) % "\n".join(
f"- {line.donation_id.number or _('(No Donation Ref)')}: "
f"{line.product_id.display_name} ({line.quantity} {line.product_id.uom_name})"
for line in invalid_lines
))
@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,
)
name = fields.Text(
string='Description',
store=True,
readonly=False,
)
product_is_donation = fields.Boolean(
related="product_id.is_donation", store=True, string="Product Type donation"
)
in_kind = fields.Boolean(
related="product_id.in_kind", store=True, string="Donation Product Type In Kind"
)
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()
product_tax_receipt_ok = fields.Boolean(
related="product_id.tax_receipt_ok", store="True", string="Donation Product is eligible to tax receipt"
)
tax_receipt_ok = fields.Boolean(
compute="_compute_tax_receipt_ok",
store=True,
)
@api.depends("product_tax_receipt_ok")
def _compute_tax_receipt_ok(self):
for line in self:
line.tax_receipt_ok = line.product_tax_receipt_ok
@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

View 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)

View File

@ -0,0 +1,66 @@
# 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):
_inherit = "donation.tax.receipt"
donation_ids = fields.One2many(
"donation.donation", "tax_receipt_id", string="Related Donations"
)
first_donation_date = fields.Date(
store=True,
readonly=True,
compute="_compute_first_donation_date"
)
@api.depends("donation_ids.donation_date")
def _compute_first_donation_date(self):
for receipt in self:
if self.donation_ids and len(self.donation_ids) > 1:
first_donation = min(receipt.donation_ids, key=lambda d: d.donation_date)
receipt.first_donation_date = first_donation.donation_date
else:
receipt.first_donation_date = False
@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

View 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)

View File

@ -0,0 +1,41 @@
# 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_donation", "=", True), ("in_kind", "=", False)],
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_donation or product.in_kind):
raise ValidationError(
_(
"On the company %(company)s, the Product for Donations "
"via Credit Transfer (%(product)s) is not a donation product "
"or is of type In Kind",
company=company.display_name,
product=product.display_name,
)
)

View 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="donation.group_donation_check_total",
)

View File

@ -0,0 +1,27 @@
# 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):
for partner in self:
partner.donation_count = len(partner.donation_ids.ids)
donation_ids = fields.One2many(
"donation.donation", "partner_id", string="Donations", readonly=True
)
donation_count = fields.Integer(
compute="_compute_donation_count", string="# of Donations", compute_sudo=True
)
def _prepare_donor_rank(self):
rank = super()._prepare_donor_rank()
rank += self.donation_count
return rank

View 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
View 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
View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View 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.

View 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\>

View 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
View 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.

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import donation_report

View File

@ -0,0 +1,117 @@
# © 2014-2016 Barroux Abbey (http://www.barroux.org)
# © 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from psycopg2 import sql
from odoo import fields, models, tools
class DonationReport(models.Model):
_name = "donation.report"
_description = "Donations Analysis"
_auto = False
_rec_name = "donation_date"
_order = "donation_date desc"
donation_date = fields.Date(readonly=True)
product_id = fields.Many2one("product.product", readonly=True)
product_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
)
in_kind = fields.Boolean(related="product_id.in_kind", store=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.in_kind,
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.in_kind,
l.tax_receipt_ok,
pt.categ_id,
d.donation_date,
d.partner_id,
d.country_id,
d.campaign_id,
d.company_id,
d.payment_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)

View File

@ -0,0 +1,144 @@
<?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="in_kind_groupby"
string="In kind"
context="{'group_by': 'in_kind' }"
/>
<filter
name="campaign_groupby"
string="Campaign"
context="{'group_by': 'campaign_id'}"
/>
<filter
name="payment_method_line_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="in_kind" optional="show" />
<field name="thanks_printed" optional="hide" />
<field name="thanks_template_id" optional="hide" />
<field name="tax_receipt_amount" sum="1" optional="show" />
<field name="amount_company_currency" sum="1" />
<field name="company_currency_id" invisible="1" />
<field
name="company_id"
groups="base.group_multi_company"
optional="show"
/>
</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>

View 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>

View 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>

View 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>

View 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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_donation_donation_viewer Read access on donation.donation to Donation Viewer model_donation_donation group_donation_viewer 1 0 0 0
3 access_donation_donation_user Full access on donation.donation to Donation User model_donation_donation group_donation_user 1 1 1 1
4 access_donation_campaign_manager Full access on donation.campaign to Donation Manager model_donation_campaign group_donation_manager 1 1 1 1
5 access_donation_campaign_viewer Read access on donation.campaign to Donation Viewer model_donation_campaign group_donation_viewer 1 0 0 0
6 access_donation_line_viewer Read access on donation.line to Donation Viewer model_donation_line group_donation_viewer 1 0 0 0
7 access_donation_line_user Full access on donation.line to Donation User model_donation_line group_donation_user 1 1 1 1
8 access_donation_donation_read Read access on donation.donation to Employee grp model_donation_donation base.group_user 1 0 0 0
9 access_donation_line_read Read access on donation.line to Employee grp model_donation_line base.group_user 1 0 0 0
10 access_account_journal_donation Read access on account.journal account.model_account_journal group_donation_viewer 1 0 0 0
11 access_account_move_donation Full access on account.move account.model_account_move group_donation_user 1 1 1 1
12 access_account_move_line_donation Full access on account.move.line account.model_account_move_line group_donation_user 1 1 1 1
13 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
14 access_donation_report Full access on donation.report to Donation Viewer model_donation_report group_donation_viewer 1 1 1 1
15 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
16 access_donation_tax_receipt Create access on donation.tax.receipt to Donation User model_donation_tax_receipt group_donation_user 1 0 1 0
17 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
18 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
19 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
20 access_donation_validate Full access on donation validate wizard model_donation_validate group_donation_user 1 1 1 1
21 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View 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

View 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&amp;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 dont
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 &gt; Configuration &gt; Settings</em>, in
the <em>Donations</em> section, select the product that will be used for
donations by credit transfer.</li>
<li>on the bank journals corresponding to the bank accounts on which you
receive donations by credit transfer, in the <em>Payments Configuration</em>
tab, select the <em>Donation by credit transfer account</em>. This account
must allow reconciliation.</li>
<li>Make sure that the accountant that processes bank statements has
<em>User</em> access level or higher on the <em>Donation</em> application.</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#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 &gt;
Reporting &gt; 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 &lt;informatique - at - barroux.org&gt;</li>
<li>Brother Irénée (Barroux Abbey)</li>
<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
<li>Nikul Chaudhary &lt;<a class="reference external" href="mailto:nikul.chaudhary.serpentcs&#64;gmail.com">nikul.chaudhary.serpentcs&#64;gmail.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#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>

View File

@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_donation

View File

@ -0,0 +1,330 @@
# 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_method_line_id = self.env["account.payment.method.line"].create(
{
"name": "test_payment_method_line",
"donation": True,
"journal_id": self.bank_journal.id,
"payment_method_id": self.env.ref(
"account.account_payment_method_manual_in"
).id,
}
)
today = time.strftime("%Y-%m-%d")
self.product = self.env.ref("donation_base.product_product_donation")
self.inkind_product = self.env.ref(
"donation_base.product_product_inkind_donation"
)
self.ddo = self.env["donation.donation"]
self.donor1 = self.env.ref("donation_base.donor1")
self.donor2 = self.env.ref("donation_base.donor2")
self.donor3 = self.env.ref("donation_base.donor3")
self.don1 = self.ddo.create(
{
"check_total": 100,
"partner_id": self.donor1.id,
"donation_date": today,
"payment_method_line_id": self.payment_method_line.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_method_line.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_method_line.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_method_line.id,
"tax_receipt_option": "each",
"line_ids": [
(
0,
0,
{
"product_id": self.inkind_product.id,
"quantity": 1,
"unit_price": 1000,
},
)
],
}
)
self.don5 = self.ddo.create(
{
"check_total": 1200,
"partner_id": self.donor1.id,
"donation_date": today,
"payment_method_line_id": self.payment_method_line.id,
"tax_receipt_option": "each",
"line_ids": [
(
0,
0,
{
"product_id": self.inkind_product.id,
"quantity": 1,
"unit_price": 800,
},
),
(
0,
0,
{
"product_id": self.product.id,
"quantity": 1,
"unit_price": 400,
},
),
],
}
)
def test_donation_1(self):
donations = [self.don1, self.don2, self.don3, self.don4, self.don5]
for donation in donations:
self.assertEqual(donation.state, "draft")
donation.validate()
self.assertEqual(donation.state, "done")
if donation == self.don4: # full in-kind donation
self.assertFalse(donation.move_id)
else:
self.assertEqual(donation.move_id.state, "posted")
self.assertEqual(donation.payment_ref, donation.move_id.ref)
self.assertEqual(
donation.payment_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_method_line.id,
"tax_receipt_option": "each",
"line_ids": [
(
0,
0,
{
"product_id": self.inkind_product.id,
"quantity": 1,
"unit_price": 1000,
},
)
],
}
)
self.donation_id.name_get()
self.donation_id.save_default_values()
self.donation_id.tax_receipt_option_change()
self.donation_id.validate()
self.donation_id.tax_receipt_id = False
self.donation_id.done2cancel()
self.donation_id.cancel2draft()
self.donation_id.unlink()
def test_annual_tax_receipt(self):
self.res_partner = self.env["res.partner"]
partner_familly = self.res_partner.create(
{"name": "Famille Joly", "tax_receipt_option": "annual"}
)
partner_husband = self.res_partner.create(
{"parent_id": partner_familly.id, "name": "Xavier Joly"}
)
partner_wife = self.res_partner.create(
{"parent_id": partner_familly.id, "name": "Stéphanie Joly"}
)
partner_husband._compute_donation_count()
dons = self.create_donation_annual_receipt(
partner_husband, 40, 10, "CHQ FB 93283290"
)
dons += self.create_donation_annual_receipt(
partner_husband, 140, 60, "CHQ FB OPIE02"
)
dons += self.create_donation_annual_receipt(
partner_wife, 20, 5, "CHQ FB AZERTY1242"
)
dons.validate()
last_day_year = time.strftime("%Y-12-31")
wizard = self.env["tax.receipt.annual.create"].create(
{"start_date": time.strftime("%Y-01-01"), "end_date": last_day_year}
)
action = wizard.generate_annual_receipts()
tax_receipt_ids = action["domain"][0][2]
self.assertTrue(tax_receipt_ids)
dtro = self.env["donation.tax.receipt"]
tax_receipts = dtro.search(
[
("partner_id", "=", partner_familly.id),
("type", "=", "annual"),
("id", "in", tax_receipt_ids),
]
)
self.assertEqual(len(tax_receipts), 1)
tax_receipt = tax_receipts[0]
self.assertEqual(tax_receipt.amount, 200)
self.assertTrue(tax_receipt.number)
self.assertEqual(tax_receipt.date, fields.Date.from_string(last_day_year))
self.assertEqual(
tax_receipt.donation_date, fields.Date.from_string(last_day_year)
)
self.assertEqual(tax_receipt.currency_id, dons[0].company_id.currency_id)
def test_donation_campaign(self):
self.campaign_id = self.env.ref("donation.quest_origin")
self.campaign_id.name_get()
self.don8 = self.ddo.create(
{
"check_total": 1000,
"partner_id": self.donor1.id,
"donation_date": time.strftime("%Y-%m-%d"),
"payment_method_line_id": self.payment_method_line.id,
"tax_receipt_option": "each",
"line_ids": [
(
0,
0,
{
"product_id": self.inkind_product.id,
"quantity": 1,
"unit_price": 1000,
},
)
],
}
)
self.validate = self.env["donation.validate"]
wizard = self.validate.with_context(
active_ids=self.don8.ids,
active_model="donation.donation",
active_id=self.don8.id,
).create({})
wizard.run()
self.option_switch = self.env["donation.tax.receipt.option.switch"]
wizard = self.option_switch.create(
{"donation_id": self.don8.id, "new_tax_receipt_option": "annual"}
)
self.don8.tax_receipt_id = False
wizard.switch()
def create_donation_annual_receipt(
self, partner, amount_tax_receipt, amount_no_tax_receipt, payment_ref
):
donation = self.ddo.create(
{
"payment_method_line_id": self.payment_method_line.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

View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- <record id="account_payment_method_line_form" model="ir.ui.view"> -->
<!-- <field name="name">donation.account.payment.mehtod.line.form</field> -->
<!-- <field name="model">account.payment.method.line</field> -->
<!-- <field -->
<!-- name="inherit_id" -->
<!-- ref="account.view_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_method_line_tree" model="ir.ui.view">
<field name="name">donation.account.payment.method.line.list</field>
<field name="model">account.payment.method.line</field>
<field name="inherit_id" ref="account.view_account_payment_method_line_tree" />
<field name="arch" type="xml">
<field name="journal_id" position="after">
<field name="donation" optional="hide" />
</field>
</field>
</record>
<!-- <record id="account_payment_method_line_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_method_line_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_method_line_donation_menu"
action="account_payment_method_line_donation_action"
parent="donation_config_menu"
sequence="30"
/>
</odoo>

View 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>

553
donation/views/donation.xml Normal file
View File

@ -0,0 +1,553 @@
<?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" domain="[('journal_id', '=', 'bank_statement_line_id.journal_id.id')]"/>
<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_method_line_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"
column_invisible="not context.get('donation_line_main_view')"
/>
<field name="product_id" context="{'default_donation': True}" />
<field name="name"/>
<field name="product_is_donation" optional="hide" />
<field name="in_kind" 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="product_tax_receipt_ok" column_invisible="1" />
<field name="tax_receipt_ok" string="Tax Receipt" optional="show" readonly="product_tax_receipt_ok == False" />
<field name="currency_id" column_invisible="1" />
<field name="company_id" column_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="name"/>
<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="in_kind"/>
<field name="product_tax_receipt_ok" invisible="1" />
<field name="tax_receipt_ok" readonly="product_tax_receipt_ok == False" />
<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>

View 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>

View File

@ -0,0 +1,36 @@
<?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.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">
<field name="donation_date" position="before">
<field name="first_donation_date"
invisible="type == 'each'"
/>
</field>
<group name="main" position="after">
<group name="donations" string="Related Donations">
<field name="donation_ids" readonly="1" nolabel="1" colspan="2" />
</group>
</group>
</field>
</record>
<record id="donation.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="inherit_id" ref="donation_base.donation_tax_receipt_tree" />
<field name="arch" type="xml">
<field name="donation_date" position="before">
<field name="first_donation_date" optional="hide" />
</field>
</field>
</record>
</odoo>

View 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>

View 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"
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>

View 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>

View 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>

View File

@ -0,0 +1,2 @@
from . import donation_validate
from . import tax_receipt_option_switch

View 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

View 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>

View 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="donation.group_donation_check_total",
)

View 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>

View 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

View 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
View 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.

View File

@ -0,0 +1,4 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import models
from . import wizard

View 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,
}

View 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>

View 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>

View File

@ -0,0 +1,126 @@
<?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" eval="True" />
<field name="in_kind" eval="False" />
<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_service_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" eval="True" />
<field name="in_kind" eval="False" />
<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_service" model="product.product">
<field name="name">Donation Service</field>
<field name="default_code">KIND-DON-S</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" eval="True" />
<field name="in_kind" eval="True" />
<field name="taxes_id" eval="False" />
<field
name="description"
>This donation item is a service eligible for a tax receipt.</field>
</record>
<record id="product_product_inkind_donation_service_notaxreceipt" model="product.product">
<field name="name">Donation Service - no tax receipt</field>
<field name="default_code">KIND-DON-S-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" eval="True" />
<field name="in_kind" eval="True" />
<field name="taxes_id" eval="False" />
<field
name="description"
>This donation item is a service 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">consu</field>
<field name="is_donation" eval="True" />
<field name="in_kind" eval="True" />
<field name="taxes_id" eval="False" />
<field
name="description"
>This donation item is a consumable good 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">consu</field>
<field name="is_donation" eval="True" />
<field name="in_kind" eval="True" />
<field name="taxes_id" eval="False" />
<field
name="description"
>This donation item is a consumable good 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>

738
donation_base/i18n/de.po Normal file
View File

@ -0,0 +1,738 @@
# 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
#. 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 ""
"Ein Spendenprodukt des Typs '%s' ist immer eine Sachspende"
#. 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"

View File

@ -0,0 +1,638 @@
# 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
#. odoo-python
#: code:addons/donation_base/models/product.py:0
#, python-format
msgid "A donation product of type '%s' is always an in-kind donation"
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 ""

702
donation_base/i18n/es.po Normal file
View File

@ -0,0 +1,702 @@
# 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
#. odoo-python
#: code:addons/donation_base/models/product.py:0
#, python-format
msgid "A donation product of type '%s' is always an in-kind donation"
msgstr ""
"Un producto de donación de tipo '%s' es siempre una donación en especie"
#. 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"

698
donation_base/i18n/fr.po Normal file
View File

@ -0,0 +1,698 @@
# 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 "Imprimer"
#. 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
#. odoo-python
#: code:addons/donation_base/models/product.py:0
#, python-format
msgid "A donation product of type '%s' is always an in-kind donation"
msgstr ""
"Un don du type '%s' est toujours un don en nature"
#. 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."

683
donation_base/i18n/it.po Normal file
View File

@ -0,0 +1,683 @@
# 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
#. odoo-python
#: code:addons/donation_base/models/product.py:0
#, python-format
msgid "A donation product of type '%s' is always an in-kind donation"
msgstr ""
"Un prodotto di donazione di tipo '%s' è sempre una donazione in natura"
#. 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'}}"

View File

@ -0,0 +1,3 @@
from . import product
from . import res_partner
from . import donation_tax_receipt

View File

@ -0,0 +1,113 @@
# 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,
readonly=True,
)
def write(self, vals):
if not self.env.context.get("allow_tax_receipt_write"):
raise UserError(_("Tax receipts cannot be modified manually. They must be generated from donations."))
super().write(vals)
@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
def action_print_receipt(self):
today = fields.Date.context_today(self)
for receipt in self:
if not receipt.print_date:
receipt.with_context(allow_tax_receipt_write=True).write({"print_date": today})
return self.env.ref("donation_base.report_donation_tax_receipt").report_action(self)

View File

@ -0,0 +1,105 @@
# 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.Boolean(
string="Is a donation",
tracking=True,
readonly=False,
store=True,
help="Specify if the product is a donation",
)
in_kind = fields.Boolean(
string="Is an in-kind donation",
tracking=True,
compute="_compute_is_inkind",
readonly=False,
store=True,
precompute=True,
help="Specify if the donation item is of type in-kind (a good or a service rather than a monetary 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 donation item is eligible for a tax receipt",
)
@api.depends("is_donation")
def _compute_is_inkind(self):
for product in self:
if not product.is_donation:
product.in_kind = False
elif product.is_donation and product.type in ["consu", "combo"]:
product.in_kind = True
@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):
if self.is_donation:
self.taxes_id = False
self.supplier_taxes_id = False
self.purchase_ok = False
self.sale_ok = False
if "can_be_expensed" in self._fields:
self.can_be_expensed = False
@api.constrains("type", "in_kind")
def inkind_check(self):
for product in self:
if product.is_donation and product.type in ["consu", "combo"] and product.in_kind == False:
raise ValidationError(
_(
"A donation product of type '%s' "
"is always an in-kind donation"
)
% product.type
)
# @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
# _logger.debug(f"in donation constrains, len taxes_id: {len(product.taxes_id)}")
# if product.is_donation and len(product.taxes_id) > 0:
# 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
product.sale_ok = False
if "can_be_expensed" in product._fields:
product.can_be_expensed = False

View 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()})

View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@ -0,0 +1,4 @@
To configure this module, you need to:
> - create donation products
> - set the *Tax Receipt Option* on partners

View 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\>

View 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).

View 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>

View 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>

View 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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 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
3 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
4 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
5 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
6 access_donation_tax_receipt_print Donation tax receipt print wizard model_donation_tax_receipt_print account.group_account_invoice 1 1 1 1
7 access_tax_receipt_annual_create Donation tax receipt annual create wizard model_tax_receipt_annual_create account.group_account_invoice 1 1 1 1

View 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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View 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&amp;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 doesnt 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 &lt;informatique - at - barroux.org&gt;</li>
<li>Brother Irénée (Barroux Abbey)</li>
<li>Alexis de Lattre &lt;<a class="reference external" href="mailto:alexis.delattre&#64;akretion.com">alexis.delattre&#64;akretion.com</a>&gt;</li>
<li>Serpent Consulting Services Pvt. Ltd. &lt;<a class="reference external" href="mailto:support&#64;serpentcs.com">support&#64;serpentcs.com</a>&gt;</li>
<li>Nikul Chaudhary &lt;<a class="reference external" href="mailto:nikul.chaudhary.serpentcs&#64;gmail.com">nikul.chaudhary.serpentcs&#64;gmail.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#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>

Some files were not shown because too many files have changed in this diff Show More