Compare commits
No commits in common. "old16.0" and "18.0-donation" have entirely different histories.
old16.0
...
18.0-donat
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
*__pycache__
|
||||
*~lock*
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
11
README.md
11
README.md
@ -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
3
cvn/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from . import wizard
|
||||
from . import models
|
||||
from . import report
|
||||
20
cvn/__manifest__.py
Normal file
20
cvn/__manifest__.py
Normal 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
4
cvn/models/__init__.py
Normal 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
62
cvn/models/cvn_asset.py
Normal 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
241
cvn/models/donation.py
Normal 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
|
||||
34
cvn/models/donation_line.py
Normal file
34
cvn/models/donation_line.py
Normal 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
116
cvn/models/product.py
Normal 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
1
cvn/report/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
#from . import donation_report
|
||||
7
cvn/report/donation_report.py
Normal file
7
cvn/report/donation_report.py
Normal 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)
|
||||
3
cvn/security/ir.model.access.csv
Normal file
3
cvn/security/ir.model.access.csv
Normal 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
|
||||
|
53
cvn/views/account_journal.xml
Normal file
53
cvn/views/account_journal.xml
Normal 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
60
cvn/views/product.xml
Normal 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
1
cvn/wizard/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from . import res_config_settings
|
||||
27
cvn/wizard/res_config_settings.py
Normal file
27
cvn/wizard/res_config_settings.py
Normal 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,
|
||||
)
|
||||
30
cvn/wizard/res_config_settings.xml
Normal file
30
cvn/wizard/res_config_settings.xml
Normal 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
150
donation/README.rst
Normal file
@ -0,0 +1,150 @@
|
||||
========
|
||||
Donation
|
||||
========
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:78b9e7ee3023d661a6d8e3cdf6437ed367d544769741db1292b88038e851686a
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/donation/tree/18.0/donation
|
||||
:alt: OCA/donation
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
**donation_bank_statement_oca**.
|
||||
|
||||
This module will assist you in writing a thanks letter.
|
||||
|
||||
This module also supports in-kind donations (in-kind donations don't
|
||||
generate any accounting entry but can generate a tax receipt).
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
- create donation products
|
||||
- make sure you have an inbound payment method for each payment
|
||||
method used to receive donations. This payment method must be
|
||||
configured with *Link to Bank Account* set to *Fixed* and with the
|
||||
donation option active.
|
||||
- if you wish to have a control amount on the donation, add the users
|
||||
to the group *Donation Check Total*
|
||||
|
||||
If you receive donations via credit transfer, you must also:
|
||||
|
||||
- in the configuration page *Invoicing > Configuration > Settings*, in
|
||||
the *Donations* section, select the product that will be used for
|
||||
donations by credit transfer.
|
||||
- on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the *Payments Configuration*
|
||||
tab, select the *Donation by credit transfer account*. This account
|
||||
must allow reconciliation.
|
||||
- Make sure that the accountant that processes bank statements has
|
||||
*User* access level or higher on the *Donation* application.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
This module handles donations by cash, check or by credit transfer:
|
||||
|
||||
- for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module *account_check_deposit*
|
||||
from the project
|
||||
`OCA/account-financial-tools <https://github.com/OCA/account-financial-tools>`__,
|
||||
you can create a check deposit.
|
||||
- for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.
|
||||
|
||||
When you validate a donation:
|
||||
|
||||
- it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.
|
||||
- if the tax receipt option of the donor is configured as *For Each
|
||||
Donation* and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.
|
||||
|
||||
To have some statistics about the donations, go to the menu Donation >
|
||||
Reporting > Donations Analysis.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/donation/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Barroux Abbey
|
||||
* Akretion
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Brother Bernard <informatique - at - barroux.org>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
|
||||
- Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
|
||||
:target: https://github.com/alexis-via
|
||||
:alt: alexis-via
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-alexis-via|
|
||||
|
||||
This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/18.0/donation>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
4
donation/__init__.py
Normal file
4
donation/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
from . import models
|
||||
from . import report
|
||||
from . import wizard
|
||||
from .post_install import update_account_payment_method_line
|
||||
38
donation/__manifest__.py
Normal file
38
donation/__manifest__.py
Normal file
@ -0,0 +1,38 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "Donation",
|
||||
"version": "18.0.1.0.0",
|
||||
"category": "Accounting",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Manage donations",
|
||||
"author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
|
||||
"maintainers": ["alexis-via"],
|
||||
"website": "https://github.com/OCA/donation",
|
||||
"depends": [
|
||||
"donation_base",
|
||||
],
|
||||
"data": [
|
||||
"security/donation_security.xml",
|
||||
"security/ir.model.access.csv",
|
||||
"wizard/tax_receipt_option_switch_view.xml",
|
||||
"wizard/donation_validate_view.xml",
|
||||
"views/donation_tax_receipt.xml",
|
||||
"views/donation.xml",
|
||||
"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,
|
||||
}
|
||||
16
donation/data/donation_sequence.xml
Normal file
16
donation/data/donation_sequence.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
<record id="donation_seq" model="ir.sequence">
|
||||
<field name="name">Donation</field>
|
||||
<field name="code">donation.donation</field>
|
||||
<field name="prefix">DON-%(year)s-</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="use_date_range" eval="True" />
|
||||
<field name="company_id" eval="False" />
|
||||
</record>
|
||||
</odoo>
|
||||
24
donation/demo/donation_demo.xml
Normal file
24
donation/demo/donation_demo.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
<record id="quest_origin" model="donation.campaign">
|
||||
<field name="code">Q1</field>
|
||||
<field name="name">Quest Christmas 2015</field>
|
||||
</record>
|
||||
<record id="prospecting_origin" model="donation.campaign">
|
||||
<field name="code">P1</field>
|
||||
<field name="name">Prospecting 2016</field>
|
||||
</record>
|
||||
<record id="catalog_origin" model="donation.campaign">
|
||||
<field name="code">C1</field>
|
||||
<field name="name">Catalog Q1 2016</field>
|
||||
</record>
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field name="groups_id" eval="[(4, ref('group_donation_user'))]" />
|
||||
</record>
|
||||
<record id="base.main_company" model="res.company">
|
||||
<field
|
||||
name="donation_credit_transfer_product_id"
|
||||
ref="donation_base.product_product_donation"
|
||||
/>
|
||||
</record>
|
||||
</odoo>
|
||||
1296
donation/i18n/de.po
Normal file
1296
donation/i18n/de.po
Normal file
File diff suppressed because it is too large
Load Diff
1205
donation/i18n/donation.pot
Normal file
1205
donation/i18n/donation.pot
Normal file
File diff suppressed because it is too large
Load Diff
1343
donation/i18n/es.po
Normal file
1343
donation/i18n/es.po
Normal file
File diff suppressed because it is too large
Load Diff
1335
donation/i18n/fr.po
Normal file
1335
donation/i18n/fr.po
Normal file
File diff suppressed because it is too large
Load Diff
1262
donation/i18n/it.po
Normal file
1262
donation/i18n/it.po
Normal file
File diff suppressed because it is too large
Load Diff
12
donation/models/__init__.py
Normal file
12
donation/models/__init__.py
Normal 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
|
||||
16
donation/models/account_analytic_applicability.py
Normal file
16
donation/models/account_analytic_applicability.py
Normal file
@ -0,0 +1,16 @@
|
||||
# Copyright 2023 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class AccountAnalyticApplicability(models.Model):
|
||||
_inherit = "account.analytic.applicability"
|
||||
|
||||
business_domain = fields.Selection(
|
||||
selection_add=[
|
||||
("donation", "Donation"),
|
||||
],
|
||||
ondelete={"donation": "cascade"},
|
||||
)
|
||||
129
donation/models/account_bank_statement_line.py
Normal file
129
donation/models/account_bank_statement_line.py
Normal file
@ -0,0 +1,129 @@
|
||||
# Copyright 2023 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import _, fields, models
|
||||
from odoo.exceptions import UserError
|
||||
from odoo.tools.misc import format_amount
|
||||
|
||||
# This code is mostly used in the OCA module donation_bank_statement_oca
|
||||
# But it's located in the "donation" module because it can be useful for
|
||||
# other modules (alternative reconcile interfaces, module compatible with the Enterprise
|
||||
# reconcile interface, etc.)
|
||||
|
||||
|
||||
class AccountBankStatementLine(models.Model):
|
||||
_inherit = "account.bank.statement.line"
|
||||
|
||||
donation_ids = fields.One2many(
|
||||
"donation.donation", "bank_statement_line_id", string="Donations", readonly=True
|
||||
)
|
||||
|
||||
def _check_statement_line_donation(self):
|
||||
self.ensure_one()
|
||||
if not self.partner_id:
|
||||
raise UserError(
|
||||
_(
|
||||
f"On bank statement line '{self.display_name}',"
|
||||
"the partner is required to process a donation."
|
||||
)
|
||||
)
|
||||
if self.currency_id.compare_amounts(self.amount, 0) <= 0:
|
||||
raise UserError(
|
||||
_(
|
||||
"On bank statement line '%(line)s', the amount (%(amount)s) "
|
||||
"is negative so it cannot be processed as a donation.",
|
||||
line=self.display_name,
|
||||
amount=format_amount(self.env, self.amount, self.currency_id),
|
||||
)
|
||||
)
|
||||
if not self.company_id.donation_account_id:
|
||||
raise UserError(
|
||||
_(
|
||||
"The Donation by Credit Transfer Account"
|
||||
f"is not set for company '{self.company_id.display_name}'."
|
||||
)
|
||||
)
|
||||
|
||||
def _get_payment_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
|
||||
36
donation/models/account_move.py
Normal file
36
donation/models/account_move.py
Normal 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))
|
||||
25
donation/models/account_payment_method.py
Normal file
25
donation/models/account_payment_method.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class AccountPaymentMode(models.Model):
|
||||
_inherit = "account.payment.method.line"
|
||||
|
||||
donation = fields.Boolean(
|
||||
help="If enabled, this payment mode will be available on donations",
|
||||
)
|
||||
|
||||
@api.constrains("donation")
|
||||
def _check_donation(self):
|
||||
for mode in self:
|
||||
if mode.donation and mode.payment_type != "inbound":
|
||||
raise ValidationError(
|
||||
_(
|
||||
f"Donation payment mode '{mode.name}'"
|
||||
"is not an inbound payment mode."
|
||||
)
|
||||
)
|
||||
25
donation/models/account_payment_method_line.py
Normal file
25
donation/models/account_payment_method_line.py
Normal file
@ -0,0 +1,25 @@
|
||||
# Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import _, api, fields, models
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
class 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
801
donation/models/donation.py
Normal 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
|
||||
49
donation/models/donation_campaign.py
Normal file
49
donation/models/donation_campaign.py
Normal file
@ -0,0 +1,49 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class DonationCampaign(models.Model):
|
||||
_name = "donation.campaign"
|
||||
_description = "Code attributed for a Donation Campaign"
|
||||
_order = "sequence, id"
|
||||
|
||||
@api.depends("code", "name")
|
||||
def name_get(self):
|
||||
res = []
|
||||
for camp in self:
|
||||
name = camp.name
|
||||
if camp.code:
|
||||
name = f"[{camp.code}] {name}"
|
||||
res.append((camp.id, name))
|
||||
return res
|
||||
|
||||
active = fields.Boolean(default=True)
|
||||
sequence = fields.Integer(default=10)
|
||||
code = fields.Char()
|
||||
name = fields.Char(required=True)
|
||||
start_date = fields.Date(default=fields.Date.context_today)
|
||||
# company_id is NOT required, it is empty by default
|
||||
company_id = fields.Many2one("res.company", ondelete="cascade")
|
||||
note = fields.Text("Notes")
|
||||
|
||||
_sql_constraints = [
|
||||
(
|
||||
"code_company_uniq",
|
||||
"unique(code, company_id)",
|
||||
"A campaign with the same code already exists!",
|
||||
)
|
||||
]
|
||||
|
||||
@api.model
|
||||
def name_search(self, name="", args=None, operator="ilike", limit=100):
|
||||
if args is None:
|
||||
args = []
|
||||
if name and operator == "ilike":
|
||||
recs = self.search([("code", "=", name)] + args, limit=limit)
|
||||
if recs:
|
||||
return recs.name_get()
|
||||
return super().name_search(name=name, args=args, operator=operator, limit=limit)
|
||||
66
donation/models/donation_tax_receipt.py
Normal file
66
donation/models/donation_tax_receipt.py
Normal 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
|
||||
23
donation/models/donation_thanks_template.py
Normal file
23
donation/models/donation_thanks_template.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2019 Akretion France
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class DonationThanksTemplate(models.Model):
|
||||
_name = "donation.thanks.template"
|
||||
_description = "Donation Thanks Letter Template"
|
||||
_order = "sequence"
|
||||
|
||||
sequence = fields.Integer(default=10)
|
||||
name = fields.Char(required=True)
|
||||
active = fields.Boolean(default=True)
|
||||
company_id = fields.Many2one(
|
||||
"res.company",
|
||||
string="Company",
|
||||
ondelete="cascade",
|
||||
default=lambda self: self.env.company,
|
||||
)
|
||||
text = fields.Text(translate=True)
|
||||
image = fields.Binary(attachment=True)
|
||||
41
donation/models/res_company.py
Normal file
41
donation/models/res_company.py
Normal 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,
|
||||
)
|
||||
)
|
||||
23
donation/models/res_config_settings.py
Normal file
23
donation/models/res_config_settings.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
donation_credit_transfer_product_id = fields.Many2one(
|
||||
related="company_id.donation_credit_transfer_product_id", readonly=False
|
||||
)
|
||||
donation_account_id = fields.Many2one(
|
||||
related="company_id.donation_account_id",
|
||||
readonly=False,
|
||||
domain="[('reconcile', '=', True), ('deprecated', '=', False), "
|
||||
"('company_ids', 'in', company_id), ('account_type', '=', 'asset_current')]",
|
||||
)
|
||||
group_donation_check_total = fields.Boolean(
|
||||
string="Check Total on Donations",
|
||||
implied_group="donation.group_donation_check_total",
|
||||
)
|
||||
27
donation/models/res_partner.py
Normal file
27
donation/models/res_partner.py
Normal 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
|
||||
21
donation/models/res_users.py
Normal file
21
donation/models/res_users.py
Normal file
@ -0,0 +1,21 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResUsers(models.Model):
|
||||
_inherit = "res.users"
|
||||
|
||||
# begin with context_ to allow user to change it by himself
|
||||
context_donation_campaign_id = fields.Many2one(
|
||||
"donation.campaign", "Current Donation Campaign"
|
||||
)
|
||||
context_donation_payment_method_line_id = fields.Many2one(
|
||||
"account.payment.method.line",
|
||||
"Current Donation Payment Mode",
|
||||
domain=[("donation", "=", True)],
|
||||
company_dependent=True,
|
||||
)
|
||||
13
donation/post_install.py
Normal file
13
donation/post_install.py
Normal file
@ -0,0 +1,13 @@
|
||||
# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import SUPERUSER_ID, api
|
||||
|
||||
|
||||
def update_account_payment_method_line(cr):
|
||||
env = api.Environment(cr.cr, SUPERUSER_ID, {})
|
||||
modes = env["account.payment.method.line"].search(
|
||||
[("payment_type", "=", "inbound")]
|
||||
)
|
||||
modes.write({"donation": True})
|
||||
3
donation/pyproject.toml
Normal file
3
donation/pyproject.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
21
donation/readme/CONFIGURE.md
Normal file
21
donation/readme/CONFIGURE.md
Normal file
@ -0,0 +1,21 @@
|
||||
To configure this module, you need to:
|
||||
|
||||
> - create donation products
|
||||
> - make sure you have an inbound payment method for each payment method
|
||||
> used to receive donations. This payment method must be configured with
|
||||
> *Link to Bank Account* set to *Fixed* and with the donation option
|
||||
> active.
|
||||
> - if you wish to have a control amount on the donation, add the users
|
||||
> to the group *Donation Check Total*
|
||||
|
||||
If you receive donations via credit transfer, you must also:
|
||||
|
||||
- in the configuration page *Invoicing \> Configuration \> Settings*, in
|
||||
the *Donations* section, select the product that will be used for
|
||||
donations by credit transfer.
|
||||
- on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the *Payments Configuration*
|
||||
tab, select the *Donation by credit transfer account*. This account
|
||||
must allow reconciliation.
|
||||
- Make sure that the accountant that processes bank statements has
|
||||
*User* access level or higher on the *Donation* application.
|
||||
5
donation/readme/CONTRIBUTORS.md
Normal file
5
donation/readme/CONTRIBUTORS.md
Normal file
@ -0,0 +1,5 @@
|
||||
- Brother Bernard \<informatique - at - barroux.org\>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre \<alexis.delattre@akretion.com\>
|
||||
- Serpent Consulting Services Pvt. Ltd. \<support@serpentcs.com\>
|
||||
- Nikul Chaudhary \<nikul.chaudhary.serpentcs@gmail.com\>
|
||||
10
donation/readme/DESCRIPTION.md
Normal file
10
donation/readme/DESCRIPTION.md
Normal file
@ -0,0 +1,10 @@
|
||||
This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
**donation_bank_statement_oca**.
|
||||
|
||||
This module will assist you in writing a thanks letter.
|
||||
|
||||
This module also supports in-kind donations (in-kind donations don't
|
||||
generate any accounting entry but can generate a tax receipt).
|
||||
23
donation/readme/USAGE.md
Normal file
23
donation/readme/USAGE.md
Normal file
@ -0,0 +1,23 @@
|
||||
This module handles donations by cash, check or by credit transfer:
|
||||
|
||||
- for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module *account_check_deposit*
|
||||
from the project
|
||||
[OCA/account-financial-tools](https://github.com/OCA/account-financial-tools),
|
||||
you can create a check deposit.
|
||||
- for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.
|
||||
|
||||
When you validate a donation:
|
||||
|
||||
- it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.
|
||||
- if the tax receipt option of the donor is configured as *For Each
|
||||
Donation* and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.
|
||||
|
||||
To have some statistics about the donations, go to the menu Donation \>
|
||||
Reporting \> Donations Analysis.
|
||||
3
donation/report/__init__.py
Normal file
3
donation/report/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import donation_report
|
||||
117
donation/report/donation_report.py
Normal file
117
donation/report/donation_report.py
Normal 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)
|
||||
144
donation/report/donation_report_view.xml
Normal file
144
donation/report/donation_report_view.xml
Normal 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>
|
||||
20
donation/report/donation_thanks_report.xml
Normal file
20
donation/report/donation_thanks_report.xml
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="report_thanks" model="ir.actions.report">
|
||||
<field name="name">Thanks Letter</field>
|
||||
<field name="model">donation.donation</field>
|
||||
<field name="report_name">donation.report_donation_thanks</field>
|
||||
<field name="report_file">donation.report_donation_thanks</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field
|
||||
name="print_report_name"
|
||||
>'donation_thanks-%s%s' % (object.number, object.state == 'draft' and '-draft' or '')</field>
|
||||
<field name="binding_model_id" ref="model_donation_donation" />
|
||||
</record>
|
||||
</odoo>
|
||||
22
donation/report/donation_thanks_view.xml
Normal file
22
donation/report/donation_thanks_view.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion (http://www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<template id="report_donation_thanks">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.internal_layout">
|
||||
<div class="page">
|
||||
<div
|
||||
t-field="o.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
|
||||
/>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
83
donation/security/donation_security.xml
Normal file
83
donation/security/donation_security.xml
Normal file
@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="module_category_donation" model="ir.module.category">
|
||||
<field name="name">Donation</field>
|
||||
<field name="description">Manage donations</field>
|
||||
<field name="sequence">45</field>
|
||||
<field name="parent_id" ref="base.module_category_accounting" />
|
||||
</record>
|
||||
<record id="group_donation_viewer" model="res.groups">
|
||||
<field name="name">Viewer</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
</record>
|
||||
<record id="group_donation_user" model="res.groups">
|
||||
<field name="name">User</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_donation_viewer'))]" />
|
||||
</record>
|
||||
<record id="group_donation_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="module_category_donation" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_donation_user'))]" />
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]" />
|
||||
</record>
|
||||
<record id="group_donation_check_total" model="res.groups">
|
||||
<field name="name">Donation Check Total</field>
|
||||
<field name="category_id" ref="base.module_category_hidden" />
|
||||
</record>
|
||||
</data>
|
||||
<data noupdate="1">
|
||||
<record id="base.default_user" model="res.users">
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[(4, ref('donation.group_donation_manager'))]"
|
||||
/>
|
||||
</record>
|
||||
<record id="base.user_admin" model="res.users">
|
||||
<field
|
||||
name="groups_id"
|
||||
eval="[(4, ref('donation.group_donation_manager'))]"
|
||||
/>
|
||||
</record>
|
||||
<!-- Multi-company Rules -->
|
||||
<record id="donation_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_donation" />
|
||||
<field name="domain_force">
|
||||
[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_line_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Line Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_line" />
|
||||
<field name="domain_force">
|
||||
[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_report_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Report Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_report" />
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_thanks_template_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Thanks Template multi-company</field>
|
||||
<field name="model_id" ref="model_donation_thanks_template" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record id="donation_campaign_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Campaign multi-company</field>
|
||||
<field name="model_id" ref="model_donation_campaign" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|', ('company_id', '=', False), ('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
21
donation/security/ir.model.access.csv
Normal file
21
donation/security/ir.model.access.csv
Normal file
@ -0,0 +1,21 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_donation_donation_viewer,Read access on donation.donation to Donation Viewer,model_donation_donation,group_donation_viewer,1,0,0,0
|
||||
access_donation_donation_user,Full access on donation.donation to Donation User,model_donation_donation,group_donation_user,1,1,1,1
|
||||
access_donation_campaign_manager,Full access on donation.campaign to Donation Manager,model_donation_campaign,group_donation_manager,1,1,1,1
|
||||
access_donation_campaign_viewer,Read access on donation.campaign to Donation Viewer,model_donation_campaign,group_donation_viewer,1,0,0,0
|
||||
access_donation_line_viewer,Read access on donation.line to Donation Viewer,model_donation_line,group_donation_viewer,1,0,0,0
|
||||
access_donation_line_user,Full access on donation.line to Donation User,model_donation_line,group_donation_user,1,1,1,1
|
||||
access_donation_donation_read,Read access on donation.donation to Employee grp,model_donation_donation,base.group_user,1,0,0,0
|
||||
access_donation_line_read,Read access on donation.line to Employee grp,model_donation_line,base.group_user,1,0,0,0
|
||||
access_account_journal_donation,Read access on account.journal,account.model_account_journal,group_donation_viewer,1,0,0,0
|
||||
access_account_move_donation,Full access on account.move,account.model_account_move,group_donation_user,1,1,1,1
|
||||
access_account_move_line_donation,Full access on account.move.line,account.model_account_move_line,group_donation_user,1,1,1,1
|
||||
access_account_analytic_line_donation,Full access on account.analytic.line to donation user,analytic.model_account_analytic_line,group_donation_user,1,1,1,1
|
||||
access_donation_report,Full access on donation.report to Donation Viewer,model_donation_report,group_donation_viewer,1,1,1,1
|
||||
access_donation_tax_receipt_viewer,Read access on donation.tax.receipt to Donation Viewer grp,model_donation_tax_receipt,group_donation_viewer,1,0,0,0
|
||||
access_donation_tax_receipt,Create access on donation.tax.receipt to Donation User,model_donation_tax_receipt,group_donation_user,1,0,1,0
|
||||
access_donation_tax_receipt_full,Full access on donation.tax.receipt to Donation Manager,model_donation_tax_receipt,group_donation_manager,1,1,1,1
|
||||
access_donation_thanks_template_manager,Full access on donation.thanks.template to Donation Manager,model_donation_thanks_template,group_donation_manager,1,1,1,1
|
||||
access_donation_thanks_template_viewer,Read access on donation.thanks.template to Donation Viewer,model_donation_thanks_template,group_donation_viewer,1,0,0,0
|
||||
access_donation_validate,Full access on donation validate wizard,model_donation_validate,group_donation_user,1,1,1,1
|
||||
access_donation_tax_receipt_option_switch,Full access on donation_tax_receipt_option_switch wizard,model_donation_tax_receipt_option_switch,group_donation_user,1,1,1,1
|
||||
|
BIN
donation/static/description/icon.png
Normal file
BIN
donation/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
196
donation/static/description/icon.svg
Normal file
196
donation/static/description/icon.svg
Normal file
@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="100mm"
|
||||
height="100mm"
|
||||
viewBox="0 0 100 100"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="icon.svg"
|
||||
inkscape:version="0.92.4 (f8dce91, 2019-08-02)"
|
||||
inkscape:export-filename="/home/jaime/Escritorio/icon.png"
|
||||
inkscape:export-xdpi="91"
|
||||
inkscape:export-ydpi="91">
|
||||
<defs
|
||||
id="defs2">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4562">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="13.040181"
|
||||
x="-124.92113"
|
||||
height="98.866074"
|
||||
width="99.811012"
|
||||
id="rect4564"
|
||||
style="fill:#aa0000;stroke-width:0.26458332"
|
||||
clip-path="none" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4578">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="1.5119057"
|
||||
x="-120.00744"
|
||||
height="97.930626"
|
||||
width="99.811012"
|
||||
id="rect4580"
|
||||
style="fill:#aa0000;stroke-width:0.26458332" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath4578-3">
|
||||
<rect
|
||||
ry="4.1577382"
|
||||
y="1.5119057"
|
||||
x="-120.00744"
|
||||
height="97.930626"
|
||||
width="99.811012"
|
||||
id="rect4580-6"
|
||||
style="fill:#aa0000;stroke-width:0.26458332" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="72.826115"
|
||||
inkscape:cy="127.25228"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer2"
|
||||
showgrid="false"
|
||||
inkscape:snap-page="true"
|
||||
showguides="false"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:window-width="1853"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="67"
|
||||
inkscape:window-y="27"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:snap-global="false">
|
||||
<sodipodi:guide
|
||||
position="31.183035,81.453868"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4619"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="65.956845,10.583333"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4621"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="67.704985,78.09933"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4623"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="62.407434,24.722431"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide4625"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer3"
|
||||
inkscape:label="Layer 3" />
|
||||
<g
|
||||
inkscape:groupmode="layer"
|
||||
id="layer2"
|
||||
inkscape:label="Layer 2"
|
||||
style="display:inline">
|
||||
<rect
|
||||
y="0"
|
||||
x="0"
|
||||
height="25.164532"
|
||||
width="100"
|
||||
id="rect4535"
|
||||
style="fill:#de8787;stroke-width:0.13272627"
|
||||
ry="4.9136906"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<rect
|
||||
ry="4.9136906"
|
||||
style="fill:#501616;stroke-width:0.13272627"
|
||||
id="rect4566"
|
||||
width="100"
|
||||
height="25.164532"
|
||||
x="0.18899068"
|
||||
y="74.958138"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<rect
|
||||
style="fill:#800080;stroke-width:0.26458332"
|
||||
id="rect914"
|
||||
width="99.811012"
|
||||
height="97.930626"
|
||||
x="0.18898809"
|
||||
y="1.1339295"
|
||||
ry="4.1577382"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m -119.93657,64.635599 -0.25988,-14.100283 v 49.842664 l -0.10009,-17.197917 0.0986,0.188988 63.235934,-16.365413 -62.534814,16.120116 -0.84138,0.0091 57.369031,-57.747002 -9.386044,1.225775 -0.523352,-7.522118"
|
||||
style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75454544;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path4576"
|
||||
clip-path="url(#clipPath4578)"
|
||||
transform="translate(120.21264,-0.31639914)"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972"
|
||||
sodipodi:nodetypes="ccccccccccc" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m -120.69252,82.40048 0.49609,-31.865164 v 49.842664 h 37.697532 l 5.579265,-0.944941 37.911526,-37.53208 c -39.824515,24.042545 -0.242948,0.516749 -4.21358,0.474115 -7.264003,-0.078 -37.597022,15.482201 -33.017329,12.255689 31.028683,-21.860511 4.494348,-15.920349 -0.174165,-18.219814 l 14.199994,-15.528114 -6.929198,-10.869463 -5.626031,6.085025"
|
||||
style="display:inline;opacity:0.5;fill:#0f000f;fill-opacity:0.75294118;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
id="path4576-7"
|
||||
clip-path="url(#clipPath4578-3)"
|
||||
transform="translate(120.51819,0.47953594)"
|
||||
inkscape:export-xdpi="91.327972"
|
||||
inkscape:export-ydpi="91.327972"
|
||||
sodipodi:nodetypes="ccccccsscccc" />
|
||||
<path
|
||||
style="fill:#000000;stroke-width:0.71428573;fill-opacity:0"
|
||||
d="m 9.9291099,372.78181 c -3.3243104,-1.50995 -8.2615024,-6.88043 -7.6913163,-8.36632 0.2112108,-0.5504 0.1085589,-1.00163 -0.2281152,-1.00273 -0.3366742,-10e-4 -0.6121349,-25.03982 -0.6121349,-55.6416 V 252.13154 L 88.540401,163.21716 c 47.928569,-48.9029 87.185559,-88.873107 87.237739,-88.822673 0.0522,0.05043 -0.0682,2.548093 -0.26755,5.550352 l -0.36245,5.458652 -2.58958,0.430374 c -7.33955,1.219789 -15.15831,7.370133 -18.53946,14.583395 -1.59811,3.40938 -1.90727,5.05306 -1.90727,10.14035 0,5.20396 0.28579,6.65342 2.00026,10.14473 2.35095,4.78743 7.56285,9.75366 12.86245,12.25614 2.03979,0.96319 9.49443,3.25496 16.56586,5.09282 7.07143,1.83786 13.58036,3.8039 14.46429,4.36898 1.96695,1.25743 2.0642,3.21658 0.24152,4.86607 -1.2044,1.08997 -2.57462,1.19237 -11.60714,0.86747 -5.63284,-0.20261 -11.72551,-0.57718 -13.53927,-0.83237 -3.27994,-0.46148 -3.32622,-0.43844 -8.57143,4.26688 -6.00398,5.38599 -7.24201,7.51799 -6.163,10.61324 0.83704,2.40111 6.8498,5.60636 13.17057,7.02088 l 3.79017,0.84821 v 4.20752 c 0,4.30054 1.09503,7.375 3.27272,9.1886 0.78399,0.65292 3.63217,1.1478 7.92245,1.37655 l 6.6984,0.35714 -13.05392,13.62625 -13.05393,13.62626 -18.57143,0.39821 c -20.10746,0.43116 -23.54543,0.95475 -32.40523,4.93521 -5.50381,2.47271 -8.51616,4.60369 -21.565619,15.25583 l -10.081808,8.22967 h -12.4609 c -13.416673,0 -16.223795,0.55781 -18.39309,3.65491 -1.019424,1.45543 -1.164781,4.58911 -1.164781,25.11093 0,25.61654 0.150954,26.66485 4.073459,28.28857 1.483715,0.61418 23.416348,0.77796 85.212259,0.63632 l 83.21428,-0.19073 4.64286,-2.21371 c 3.26851,-1.55843 14.01419,-9.7717 36.30135,-27.74628 17.41216,-14.0429 31.76556,-25.42173 31.89642,-25.28628 0.13086,0.13545 -28.52003,29.57663 -63.66865,65.42484 l -63.90658,65.17857 -78.704127,-0.0157 c -74.913528,-0.0149 -78.843655,-0.0791 -81.6011331,-1.33155 z"
|
||||
id="path4581"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="scale(0.26458333)" />
|
||||
</g>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-197)"
|
||||
style="display:inline">
|
||||
<path
|
||||
transform="translate(0,197)"
|
||||
inkscape:connector-curvature="0"
|
||||
style="display:inline;fill:#ffffff;stroke-width:0.11765506"
|
||||
d="m 45.73225,35.693232 6.364116,1.688027 a 1.0073293,1.0139958 0 0 1 0.777484,0.956154 c 0,0.543001 -0.479624,0.991567 -1.069481,0.991567 H 47.62964 A 3.5180301,3.5413125 0 0 1 46.317415,39.069284 C 45.702933,38.809587 44.994636,38.86861 44.52322,39.305371 l -2.228085,2.065766 a 1.3696864,1.3787509 0 0 0 -0.263853,0.313996 1.3391968,1.3480597 0 0 0 0.454999,1.858009 9.8235129,9.8885253 0 0 0 4.046907,1.357503 v 2.089374 c 0,1.038782 0.918206,1.888697 2.036939,1.888697 h 2.036939 c 1.119907,0 2.038113,-0.849915 2.038113,-1.888697 v -2.07757 c 3.861625,-0.424958 6.782764,-3.659356 6.273818,-7.436756 -0.369389,-2.715006 -2.63383,-4.875206 -5.45998,-5.630687 L 47.0949,30.156981 a 1.0073293,1.0139958 0 0 1 -0.777485,-0.956154 c 0,-0.543003 0.479625,-0.991568 1.069481,-0.991568 h 4.17473 a 3.5180301,3.5413125 0 0 1 1.316916,0.259696 c 0.613309,0.259696 1.322779,0.200675 1.794195,-0.236088 l 2.228086,-2.065765 a 1.3262973,1.3350748 0 0 0 0.254471,-0.306914 1.3403695,1.3492401 0 0 0 -0.450308,-1.86273 9.8293764,9.894427 0 0 0 -4.048081,-1.357503 v -2.091736 c 0,-1.038784 -0.917033,-1.888699 -2.036938,-1.888699 h -2.03694 c -1.119906,0 -2.036939,0.849915 -2.036939,1.888699 v 2.077571 c -3.856934,0.424957 -6.783935,3.659356 -6.274994,7.436756 0.368221,2.715006 2.639695,4.875207 5.461156,5.630686 z m 34.501321,21.696442 c -1.383757,-1.263066 -3.541485,-1.180437 -4.995603,0 L 64.402435,66.113105 A 7.4629144,7.512304 0 0 1 59.71173,67.765719 H 45.842482 a 1.8762835,1.8887007 0 0 1 0,-3.777397 h 9.180885 c 1.864556,0 3.601291,-1.286678 3.89915,-3.139963 a 3.6587513,3.682965 0 0 0 0.05394,-0.644525 3.7525655,3.7774 0 0 0 -3.752566,-3.770315 H 36.461068 a 13.797714,13.889027 0 0 0 -8.689535,3.103372 l -5.452946,4.451431 h -6.496629 a 1.8762827,1.8887 0 0 0 -1.876283,1.888699 v 11.3322 a 1.8762827,1.8887 0 0 0 1.876283,1.888699 h 41.837586 a 7.5051308,7.5547997 0 0 0 4.690707,-1.652615 L 80.084642,63.162011 a 3.7525655,3.7774 0 0 0 0.150103,-5.772337 z"
|
||||
id="path2" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 10 KiB |
492
donation/static/description/index.html
Normal file
492
donation/static/description/index.html
Normal file
@ -0,0 +1,492 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Donation</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="donation">
|
||||
<h1 class="title">Donation</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:78b9e7ee3023d661a6d8e3cdf6437ed367d544769741db1292b88038e851686a
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/donation/tree/18.0/donation"><img alt="OCA/donation" src="https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This module handles donations by cash, check or by credit transfer and
|
||||
generate the corresponding journal entries and tax receipts. To fully
|
||||
support donations by credit transfer, if you are using the OCA bank
|
||||
statement reconcile interface, you also need the module
|
||||
<strong>donation_bank_statement_oca</strong>.</p>
|
||||
<p>This module will assist you in writing a thanks letter.</p>
|
||||
<p>This module also supports in-kind donations (in-kind donations don’t
|
||||
generate any accounting entry but can generate a tax receipt).</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||
<p>To configure this module, you need to:</p>
|
||||
<blockquote>
|
||||
<ul class="simple">
|
||||
<li>create donation products</li>
|
||||
<li>make sure you have an inbound payment method for each payment
|
||||
method used to receive donations. This payment method must be
|
||||
configured with <em>Link to Bank Account</em> set to <em>Fixed</em> and with the
|
||||
donation option active.</li>
|
||||
<li>if you wish to have a control amount on the donation, add the users
|
||||
to the group <em>Donation Check Total</em></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<p>If you receive donations via credit transfer, you must also:</p>
|
||||
<ul class="simple">
|
||||
<li>in the configuration page <em>Invoicing > Configuration > Settings</em>, in
|
||||
the <em>Donations</em> section, select the product that will be used for
|
||||
donations by credit transfer.</li>
|
||||
<li>on the bank journals corresponding to the bank accounts on which you
|
||||
receive donations by credit transfer, in the <em>Payments Configuration</em>
|
||||
tab, select the <em>Donation by credit transfer account</em>. This account
|
||||
must allow reconciliation.</li>
|
||||
<li>Make sure that the accountant that processes bank statements has
|
||||
<em>User</em> access level or higher on the <em>Donation</em> application.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="usage">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
|
||||
<p>This module handles donations by cash, check or by credit transfer:</p>
|
||||
<ul class="simple">
|
||||
<li>for donation by cash or check, you should first create a new donation
|
||||
and validate it. Then, if you have the module <em>account_check_deposit</em>
|
||||
from the project
|
||||
<a class="reference external" href="https://github.com/OCA/account-financial-tools">OCA/account-financial-tools</a>,
|
||||
you can create a check deposit.</li>
|
||||
<li>for a donation by credit transfer, the process is different: import
|
||||
your bank statement file and, while processing it, you will see a
|
||||
donation button that allow you to create a new donation directly from
|
||||
the bank statement reconcile interface.</li>
|
||||
</ul>
|
||||
<p>When you validate a donation:</p>
|
||||
<ul class="simple">
|
||||
<li>it will create a journal entry that goes directly from the revenue
|
||||
account to the payment account without going through a receivable
|
||||
account.</li>
|
||||
<li>if the tax receipt option of the donor is configured as <em>For Each
|
||||
Donation</em> and the product of the donation line is eligible to a tax
|
||||
receipt, it will generate the tax receipt.</li>
|
||||
</ul>
|
||||
<p>To have some statistics about the donations, go to the menu Donation >
|
||||
Reporting > Donations Analysis.</p>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/donation/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/donation/issues/new?body=module:%20donation%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-4">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Barroux Abbey</li>
|
||||
<li>Akretion</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Brother Bernard <informatique - at - barroux.org></li>
|
||||
<li>Brother Irénée (Barroux Abbey)</li>
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Serpent Consulting Services Pvt. Ltd. <<a class="reference external" href="mailto:support@serpentcs.com">support@serpentcs.com</a>></li>
|
||||
<li>Nikul Chaudhary <<a class="reference external" href="mailto:nikul.chaudhary.serpentcs@gmail.com">nikul.chaudhary.serpentcs@gmail.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/18.0/donation">OCA/donation</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
3
donation/tests/__init__.py
Normal file
3
donation/tests/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from . import test_donation
|
||||
330
donation/tests/test_donation.py
Normal file
330
donation/tests/test_donation.py
Normal 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
|
||||
61
donation/views/account_payment_method_line.xml
Normal file
61
donation/views/account_payment_method_line.xml
Normal 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>
|
||||
61
donation/views/account_payment_mode.xml
Normal file
61
donation/views/account_payment_mode.xml
Normal file
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
<!-- <record id="account_payment_mode_form" model="ir.ui.view">
|
||||
<field name="name">donation.account.payment.mode.form</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_base_oca.account_payment_method_line_form"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="donation" invisible="payment_type != 'inbound'" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_payment_mode_tree" model="ir.ui.view">
|
||||
<field name="name">donation.account.payment.mode.list</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field
|
||||
name="inherit_id"
|
||||
ref="account_payment_base_oca.view_account_payment_method_line_tree"
|
||||
/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="payment_type" position="after">
|
||||
<field name="donation" optional="hide" />
|
||||
</field>
|
||||
</field>
|
||||
</record> -->
|
||||
|
||||
<!-- <record id="account_payment_mode_search" model="ir.ui.view"> -->
|
||||
<!-- <field name="model">account.payment.mothod.line</field> -->
|
||||
<!-- <field -->
|
||||
<!-- name="inherit_id" -->
|
||||
<!-- ref="account.account_payment_method_line_search" -->
|
||||
<!-- /> -->
|
||||
<!-- <field name="arch" type="xml"> -->
|
||||
<!-- <filter -->
|
||||
<!-- name="donation" -->
|
||||
<!-- domain="[('donation', '=', True)]" -->
|
||||
<!-- string="Donation" -->
|
||||
<!-- /> -->
|
||||
<!-- </field> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record id="account_payment_mode_donation_action" model="ir.actions.act_window">
|
||||
<field name="name">Payment Modes</field>
|
||||
<field name="res_model">account.payment.method.line</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="domain">[('payment_type', '=', 'inbound')]</field>
|
||||
<field
|
||||
name="context"
|
||||
>{'default_donation': True, 'search_default_donation': True}</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="account_payment_mode_donation_menu"
|
||||
action="account_payment_mode_donation_action"
|
||||
parent="donation_config_menu"
|
||||
sequence="30"
|
||||
/>
|
||||
</odoo>
|
||||
553
donation/views/donation.xml
Normal file
553
donation/views/donation.xml
Normal 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>
|
||||
90
donation/views/donation_campaign.xml
Normal file
90
donation/views/donation_campaign.xml
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_campaign_form" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.form</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<widget
|
||||
name="web_ribbon"
|
||||
title="Archived"
|
||||
bg_color="bg-danger"
|
||||
invisible="active == True"
|
||||
/>
|
||||
|
||||
<group name="main">
|
||||
<field name="name" />
|
||||
<field name="code" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="start_date" />
|
||||
<field name="note" />
|
||||
<field name="active" invisible="1" />
|
||||
<field name="company_id" invisible="1" />
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_tree" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.list</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="code" optional="show" />
|
||||
<field name="name" />
|
||||
<field name="start_date" optional="show" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_search" model="ir.ui.view">
|
||||
<field name="name">donation.campaign.search</field>
|
||||
<field name="model">donation.campaign</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field
|
||||
name="name"
|
||||
filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"
|
||||
string="Name or Code"
|
||||
/>
|
||||
<field name="code" />
|
||||
<separator />
|
||||
<filter
|
||||
string="Archived"
|
||||
name="inactive"
|
||||
domain="[('active', '=', False)]"
|
||||
/>
|
||||
<group name="groupby">
|
||||
<filter
|
||||
name="company_groupby"
|
||||
string="Company"
|
||||
context="{'group_by': 'company_id'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_campaign_action" model="ir.actions.act_window">
|
||||
<field name="name">Donation Campaigns</field>
|
||||
<field name="res_model">donation.campaign</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
<menuitem
|
||||
id="donation_campaign_menu"
|
||||
action="donation_campaign_action"
|
||||
parent="donation_config_menu"
|
||||
sequence="40"
|
||||
/>
|
||||
</odoo>
|
||||
36
donation/views/donation_tax_receipt.xml
Normal file
36
donation/views/donation_tax_receipt.xml
Normal 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>
|
||||
72
donation/views/donation_thanks_template.xml
Normal file
72
donation/views/donation_thanks_template.xml
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2019 Akretion France
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_thanks_template_form" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<widget
|
||||
name="web_ribbon"
|
||||
title="Archived"
|
||||
bg_color="bg-danger"
|
||||
invisible="active == True"
|
||||
/>
|
||||
<group name="main">
|
||||
<field name="name" />
|
||||
<field name="text" />
|
||||
<field name="image" widget="image" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="active" invisible="1" />
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_tree" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<list>
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name" />
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
optional="show"
|
||||
/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_search" model="ir.ui.view">
|
||||
<field name="model">donation.thanks.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="name" />
|
||||
<filter
|
||||
string="Archived"
|
||||
name="inactive"
|
||||
domain="[('active', '=', False)]"
|
||||
/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_thanks_template_action" model="ir.actions.act_window">
|
||||
<field name="name">Thanks Letter Templates</field>
|
||||
<field name="res_model">donation.thanks.template</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="donation_thanks_template_menu"
|
||||
action="donation_thanks_template_action"
|
||||
parent="donation.donation_config_menu"
|
||||
sequence="50"
|
||||
/>
|
||||
</odoo>
|
||||
67
donation/views/res_config_settings.xml
Normal file
67
donation/views/res_config_settings.xml
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="res_config_settings_donation" model="ir.ui.view">
|
||||
<field name="name">donation.res.config.settings.form</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="50" />
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="inside">
|
||||
<app
|
||||
data-string="Donation"
|
||||
string="Donation"
|
||||
name="donation"
|
||||
groups="donation.group_donation_manager"
|
||||
>
|
||||
<block title="Donation" name="donation_settings">
|
||||
<setting
|
||||
id="donation_settings_credit_transfer"
|
||||
string="Credit transfer"
|
||||
help=""
|
||||
>
|
||||
<field name="donation_credit_transfer_product_id" />
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_account_id"
|
||||
string="Account"
|
||||
help=""
|
||||
>
|
||||
<field
|
||||
name="donation_account_id"
|
||||
context="{'default_reconcile': True, 'default_account_type': 'asset_current'}"
|
||||
/>
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_groups_chekc_total"
|
||||
string="Check total"
|
||||
help=""
|
||||
>
|
||||
<field name="group_donation_check_total" />
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_settings_action" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'donation', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="donation_settings_menu"
|
||||
parent="donation_config_menu"
|
||||
sequence="10"
|
||||
action="donation_settings_action"
|
||||
groups="base.group_system"
|
||||
/>
|
||||
</odoo>
|
||||
32
donation/views/res_partner.xml
Normal file
32
donation/views/res_partner.xml
Normal file
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!--
|
||||
© 2014-2016 Barroux Abbey (http://www.barroux.org)
|
||||
© 2014-2016 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="partner_donation_action" model="ir.actions.act_window">
|
||||
<field name="name">Donations</field>
|
||||
<field name="res_model">donation.donation</field>
|
||||
<field name="view_mode">list,form,graph</field>
|
||||
<field name="context">{'search_default_partner_id': active_id}</field>
|
||||
</record>
|
||||
<record id="view_partner_property_form" model="ir.ui.view">
|
||||
<field name="name">donation.button.res.partner.form</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="donation_base.view_partner_property_form" />
|
||||
<field name="arch" type="xml">
|
||||
<button id="donation_tax_receipt_button" position="before">
|
||||
<button
|
||||
class="oe_stat_button"
|
||||
type="action"
|
||||
name="%(donation.partner_donation_action)d"
|
||||
icon="fa-heart-o"
|
||||
groups="donation.group_donation_viewer"
|
||||
>
|
||||
<field string="Donations" name="donation_count" widget="statinfo" />
|
||||
</button>
|
||||
</button>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
39
donation/views/res_users.xml
Normal file
39
donation/views/res_users.xml
Normal file
@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="view_users_form" model="ir.ui.view">
|
||||
<field name="name">donation.res.users.form</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form" />
|
||||
<field name="arch" type="xml">
|
||||
<group name="preferences" position="inside">
|
||||
<field name="context_donation_payment_method_line_id" />
|
||||
<field name="context_donation_campaign_id" />
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_users_form_simple_modif" model="ir.ui.view">
|
||||
<field name="name">donation.preferences.res.users.form</field>
|
||||
<field name="model">res.users</field>
|
||||
<field name="inherit_id" ref="base.view_users_form_simple_modif" />
|
||||
<field name="arch" type="xml">
|
||||
<field name="tz" position="after">
|
||||
<field
|
||||
name="context_donation_payment_method_line_id"
|
||||
groups="donation.group_donation_user"
|
||||
readonly="0"
|
||||
/>
|
||||
<field
|
||||
name="context_donation_campaign_id"
|
||||
groups="donation.group_donation_user"
|
||||
readonly="0"
|
||||
/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
2
donation/wizard/__init__.py
Normal file
2
donation/wizard/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
from . import donation_validate
|
||||
from . import tax_receipt_option_switch
|
||||
22
donation/wizard/donation_validate.py
Normal file
22
donation/wizard/donation_validate.py
Normal file
@ -0,0 +1,22 @@
|
||||
# Copyright 2014-2016 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2016 Akretion France
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import models
|
||||
|
||||
|
||||
class DonationValidate(models.TransientModel):
|
||||
_name = "donation.validate"
|
||||
_description = "Validate Donations"
|
||||
|
||||
def run(self):
|
||||
self.ensure_one()
|
||||
assert (
|
||||
self.env.context.get("active_model") == "donation.donation"
|
||||
), "Source model must be donations"
|
||||
assert self.env.context.get("active_ids"), "No donations selected"
|
||||
donations = self.env["donation.donation"].browse(
|
||||
self.env.context.get("active_ids")
|
||||
)
|
||||
donations.filtered(lambda x: x.state == "draft").validate()
|
||||
return
|
||||
35
donation/wizard/donation_validate_view.xml
Normal file
35
donation/wizard/donation_validate_view.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2016 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2014-2016 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_validate_form" model="ir.ui.view">
|
||||
<field name="name">donation_validate.form</field>
|
||||
<field name="model">donation.validate</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Validate Donations">
|
||||
<p>
|
||||
This wizard will validate all the draft donations selected.
|
||||
</p>
|
||||
<footer>
|
||||
<button
|
||||
type="object"
|
||||
name="run"
|
||||
string="Validate"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button special="cancel" string="Cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="donation_validate_action" model="ir.actions.act_window">
|
||||
<field name="name">Validate Draft Donations</field>
|
||||
<field name="res_model">donation.validate</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
23
donation/wizard/res_config_settings.py
Normal file
23
donation/wizard/res_config_settings.py
Normal file
@ -0,0 +1,23 @@
|
||||
# Copyright 2016-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class ResConfigSettings(models.TransientModel):
|
||||
_inherit = "res.config.settings"
|
||||
|
||||
donation_credit_transfer_product_id = fields.Many2one(
|
||||
related="company_id.donation_credit_transfer_product_id", readonly=False
|
||||
)
|
||||
donation_account_id = fields.Many2one(
|
||||
related="company_id.donation_account_id",
|
||||
readonly=False,
|
||||
domain="[('reconcile', '=', True), ('deprecated', '=', False), "
|
||||
"('company_ids', 'in', company_id), ('account_type', '=', 'asset_current')]",
|
||||
)
|
||||
group_donation_check_total = fields.Boolean(
|
||||
string="Check Total on Donations",
|
||||
implied_group="donation.group_donation_check_total",
|
||||
)
|
||||
67
donation/wizard/res_config_settings.xml
Normal file
67
donation/wizard/res_config_settings.xml
Normal file
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="res_config_settings_donation" model="ir.ui.view">
|
||||
<field name="name">donation.res.config.settings.form</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="priority" eval="50" />
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//form" position="inside">
|
||||
<app
|
||||
data-string="Donation"
|
||||
string="Donation"
|
||||
name="donation_management"
|
||||
groups="donation.group_donation_manager"
|
||||
>
|
||||
<block title="Donation" name="donation_settings">
|
||||
<setting
|
||||
id="donation_settings_credit_transfer"
|
||||
string="Credit transfer"
|
||||
help=""
|
||||
>
|
||||
<field name="donation_credit_transfer_product_id" />
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_account_id"
|
||||
string="Account"
|
||||
help=""
|
||||
>
|
||||
<field
|
||||
name="donation_account_id"
|
||||
context="{'default_reconcile': True, 'default_account_type': 'asset_current'}"
|
||||
/>
|
||||
</setting>
|
||||
<setting
|
||||
id="donation_settings_groups_chekc_total"
|
||||
string="Check total"
|
||||
help=""
|
||||
>
|
||||
<field name="group_donation_check_total" />
|
||||
</setting>
|
||||
</block>
|
||||
</app>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="donation_settings_action" model="ir.actions.act_window">
|
||||
<field name="name">Settings</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module' : 'donation', 'bin_size': False}</field>
|
||||
</record>
|
||||
|
||||
<menuitem
|
||||
id="donation_settings_menu"
|
||||
parent="donation_config_menu"
|
||||
sequence="10"
|
||||
action="donation_settings_action"
|
||||
groups="base.group_system"
|
||||
/>
|
||||
</odoo>
|
||||
32
donation/wizard/tax_receipt_option_switch.py
Normal file
32
donation/wizard/tax_receipt_option_switch.py
Normal file
@ -0,0 +1,32 @@
|
||||
# Copyright 2017 Barroux Abbey (www.barroux.org)
|
||||
# Copyright 2017 Akretion France (www.akretion.com)
|
||||
# @author Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class DonationTaxReceiptOptionSwitch(models.TransientModel):
|
||||
_name = "donation.tax.receipt.option.switch"
|
||||
_description = "Switch Donation Tax Receipt Option"
|
||||
|
||||
donation_id = fields.Many2one(
|
||||
"donation.donation",
|
||||
string="Donation",
|
||||
required=True,
|
||||
default=lambda self: self._context.get("active_id"),
|
||||
)
|
||||
new_tax_receipt_option = fields.Selection(
|
||||
[("each", "For Each Donation"), ("annual", "Annual Tax Receipt")],
|
||||
string="Tax Receipt Option",
|
||||
required=True,
|
||||
)
|
||||
|
||||
def switch(self):
|
||||
self.ensure_one()
|
||||
assert self.donation_id, "Missing donation"
|
||||
assert not self.donation_id.tax_receipt_id, "Already linked to a tax receipt"
|
||||
self.donation_id.write({"tax_receipt_option": self.new_tax_receipt_option})
|
||||
receipt = self.donation_id.generate_each_tax_receipt()
|
||||
if receipt:
|
||||
self.donation_id.write({"tax_receipt_id": receipt.id})
|
||||
return
|
||||
40
donation/wizard/tax_receipt_option_switch_view.xml
Normal file
40
donation/wizard/tax_receipt_option_switch_view.xml
Normal file
@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2017-2021 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2017-2021 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
@author: Brother Bernard <informatique _at_ barroux.org>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="donation_tax_receipt_option_switch_form" model="ir.ui.view">
|
||||
<field name="name">donation_tax_receipt_option_switch.form</field>
|
||||
<field name="model">donation.tax.receipt.option.switch</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Change Tax Receipt Option">
|
||||
<group name="main">
|
||||
<field name="donation_id" readonly="1" />
|
||||
<field name="new_tax_receipt_option" />
|
||||
</group>
|
||||
<footer>
|
||||
<button
|
||||
type="object"
|
||||
name="switch"
|
||||
string="Update"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button special="cancel" string="Cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record
|
||||
id="donation_tax_receipt_option_switch_action"
|
||||
model="ir.actions.act_window"
|
||||
>
|
||||
<field name="name">Change Tax Receipt Option</field>
|
||||
<field name="res_model">donation.tax.receipt.option.switch</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
103
donation_base/README.rst
Normal file
103
donation_base/README.rst
Normal file
@ -0,0 +1,103 @@
|
||||
=============
|
||||
Donation Base
|
||||
=============
|
||||
|
||||
..
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:6e2db8827361efb5621a1344f354283d19a040354375a96852640d2a8ede572b
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||
:target: https://odoo-community.org/page/development-status
|
||||
:alt: Beta
|
||||
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||
:alt: License: AGPL-3
|
||||
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github
|
||||
:target: https://github.com/OCA/donation/tree/18.0/donation_base
|
||||
:alt: OCA/donation
|
||||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
|
||||
:target: https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation_base
|
||||
:alt: Translate me on Weblate
|
||||
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
|
||||
:target: https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0
|
||||
:alt: Try me on Runboat
|
||||
|
||||
|badge1| |badge2| |badge3| |badge4| |badge5|
|
||||
|
||||
This is the base module for donations. This module doesn't do anything
|
||||
in itself ; it just adds some properties on products and partners and
|
||||
adds the *donation.tax.receipt* object.
|
||||
|
||||
To get some real features, you should install the *donation* or the
|
||||
*donation_sale* module. To understand the difference between these 2
|
||||
modules, read `this post <https://github.com/OCA/donation/issues/22>`__.
|
||||
|
||||
**Table of contents**
|
||||
|
||||
.. contents::
|
||||
:local:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
To configure this module, you need to:
|
||||
|
||||
- create donation products
|
||||
- set the *Tax Receipt Option* on partners
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/donation/issues>`_.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
`feedback <https://github.com/OCA/donation/issues/new?body=module:%20donation_base%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
Do not contact contributors directly about support or help with technical issues.
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Authors
|
||||
-------
|
||||
|
||||
* Barroux Abbey
|
||||
* Akretion
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
- Brother Bernard <informatique - at - barroux.org>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
- Serpent Consulting Services Pvt. Ltd. <support@serpentcs.com>
|
||||
- Nikul Chaudhary <nikul.chaudhary.serpentcs@gmail.com>
|
||||
|
||||
Maintainers
|
||||
-----------
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.
|
||||
|
||||
.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
|
||||
:target: https://github.com/alexis-via
|
||||
:alt: alexis-via
|
||||
|
||||
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|
||||
|
||||
|maintainer-alexis-via|
|
||||
|
||||
This module is part of the `OCA/donation <https://github.com/OCA/donation/tree/18.0/donation_base>`_ project on GitHub.
|
||||
|
||||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
|
||||
4
donation_base/__init__.py
Normal file
4
donation_base/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
from . import models
|
||||
from . import wizard
|
||||
30
donation_base/__manifest__.py
Normal file
30
donation_base/__manifest__.py
Normal file
@ -0,0 +1,30 @@
|
||||
# © 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# © 2014-2021 Akretion France (Alexis de Lattre <alexis.delattre@akretion.com>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
{
|
||||
"name": "Donation Base",
|
||||
"version": "18.0.1.0.0",
|
||||
"category": "Accounting",
|
||||
"license": "AGPL-3",
|
||||
"summary": "Base module for donations",
|
||||
"author": "Barroux Abbey, Akretion, Odoo Community Association (OCA)",
|
||||
"maintainers": ["alexis-via"],
|
||||
"website": "https://github.com/OCA/donation",
|
||||
"depends": ["account"],
|
||||
"data": [
|
||||
"security/ir.model.access.csv",
|
||||
"security/tax_receipt_security.xml",
|
||||
"report/report.xml",
|
||||
"views/product.xml",
|
||||
"views/res_partner.xml",
|
||||
"views/donation_tax_receipt.xml",
|
||||
"wizard/tax_receipt_annual_create_view.xml",
|
||||
"wizard/tax_receipt_print_view.xml",
|
||||
"report/report_donationtax.xml",
|
||||
"data/donation_tax_seq.xml",
|
||||
"data/donation_mail_template.xml",
|
||||
],
|
||||
"demo": ["demo/donation_demo.xml"],
|
||||
"installable": True,
|
||||
}
|
||||
57
donation_base/data/donation_mail_template.xml
Normal file
57
donation_base/data/donation_mail_template.xml
Normal file
@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2017-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
<record id="tax_receipt_email_template" model="mail.template">
|
||||
<field name="name">Donation Tax Receipt - Send by Email</field>
|
||||
<field name="email_from">{{user.email_formatted}}</field>
|
||||
<field
|
||||
name="subject"
|
||||
>{{object.company_id.name}} - Tax Receipt {{object.number or 'n/a'}}</field>
|
||||
<field name="partner_to">{{object.partner_id.id}}</field>
|
||||
<field name="model_id" ref="donation_base.model_donation_tax_receipt" />
|
||||
<field name="auto_delete" eval="False" />
|
||||
<field
|
||||
name="report_template_ids"
|
||||
eval="[(4, ref('report_donation_tax_receipt'))]"
|
||||
/>
|
||||
<!-- <field -->
|
||||
<!-- name="report_name" -->
|
||||
<!-- >{{object.company_id.name.replace(' ', '_')}}-Tax_Receipt_{{(object.number or '').replace('/','_')}}</field> -->
|
||||
<field name="lang">{{object.partner_id.lang}}</field>
|
||||
<field name="body_html" type="html">
|
||||
<div style="margin: 0px; padding: 0px;">
|
||||
<p style="margin: 0px; padding: 0px; font-size: 13px;">
|
||||
Dear <t t-out="object.partner_id.name">Alexis</t>
|
||||
<t t-if="object.partner_id.parent_id">
|
||||
(<i>
|
||||
<t t-out="object.partner_id.parent_id.name" />
|
||||
</i>)
|
||||
</t>
|
||||
,<br /><br />
|
||||
|
||||
Thank you very much for your donation.<br /><br />
|
||||
|
||||
Please find enclosed your tax receipt <span
|
||||
style="font-weight: bold;"
|
||||
t-out="object.number"
|
||||
>RECPT-2023-001</span>
|
||||
amounting in <span
|
||||
style="font-weight: bold;"
|
||||
t-out="format_amount(object.amount, object.currency_id) or ''"
|
||||
>$ 10.00</span>
|
||||
from <t t-out="object.company_id.name">Barroux Abbey</t>.
|
||||
<t t-if="not is_html_empty(user.signature)">
|
||||
<br />
|
||||
<br />
|
||||
<t t-out="user.signature or ''">--<br />Mitchell Admin</t>
|
||||
</t>
|
||||
<br /><br />
|
||||
</p>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
16
donation_base/data/donation_tax_seq.xml
Normal file
16
donation_base/data/donation_tax_seq.xml
Normal file
@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
<record id="donation_tax_receipt_seq" model="ir.sequence">
|
||||
<field name="name">Donation Tax Receipt</field>
|
||||
<field name="code">donation.tax.receipt</field>
|
||||
<field name="prefix">%(range_year)s-</field>
|
||||
<field name="use_date_range" eval="True" />
|
||||
<field name="padding">5</field>
|
||||
</record>
|
||||
</odoo>
|
||||
126
donation_base/demo/donation_demo.xml
Normal file
126
donation_base/demo/donation_demo.xml
Normal 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
738
donation_base/i18n/de.po
Normal 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"
|
||||
638
donation_base/i18n/donation_base.pot
Normal file
638
donation_base/i18n/donation_base.pot
Normal 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
702
donation_base/i18n/es.po
Normal 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
698
donation_base/i18n/fr.po
Normal 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
683
donation_base/i18n/it.po
Normal 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'}}"
|
||||
3
donation_base/models/__init__.py
Normal file
3
donation_base/models/__init__.py
Normal file
@ -0,0 +1,3 @@
|
||||
from . import product
|
||||
from . import res_partner
|
||||
from . import donation_tax_receipt
|
||||
113
donation_base/models/donation_tax_receipt.py
Normal file
113
donation_base/models/donation_tax_receipt.py
Normal 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)
|
||||
105
donation_base/models/product.py
Normal file
105
donation_base/models/product.py
Normal 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
|
||||
56
donation_base/models/res_partner.py
Normal file
56
donation_base/models/res_partner.py
Normal file
@ -0,0 +1,56 @@
|
||||
# Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class ResPartner(models.Model):
|
||||
_inherit = "res.partner"
|
||||
|
||||
tax_receipt_option = fields.Selection(
|
||||
[
|
||||
("none", "None"),
|
||||
("each", "For Each Donation"),
|
||||
("annual", "Annual Tax Receipt"),
|
||||
],
|
||||
default="each",
|
||||
tracking=True,
|
||||
)
|
||||
tax_receipt_ids = fields.One2many(
|
||||
"donation.tax.receipt", "partner_id", string="Tax Receipts"
|
||||
)
|
||||
tax_receipt_count = fields.Integer(
|
||||
compute="_compute_tax_receipt_count",
|
||||
string="# of Tax Receipts",
|
||||
)
|
||||
donor_rank = fields.Integer(default=0)
|
||||
|
||||
# I don't want to sync tax_receipt_option between parent and child
|
||||
# The field tax_receipt_option should be configured on the parent
|
||||
# and read on the parent
|
||||
|
||||
@api.depends("tax_receipt_ids")
|
||||
def _compute_tax_receipt_count(self):
|
||||
for partner in self:
|
||||
partner.tax_receipt_count = len(partner.tax_receipt_ids.ids)
|
||||
|
||||
@api.model_create_multi
|
||||
def create(self, vals_list):
|
||||
search_partner_mode = self.env.context.get("res_partner_search_mode")
|
||||
is_donor = search_partner_mode == "donor"
|
||||
if is_donor:
|
||||
for vals in vals_list:
|
||||
if "donor_rank" not in vals:
|
||||
vals["donor_rank"] = 1
|
||||
return super().create(vals_list)
|
||||
|
||||
def _prepare_donor_rank(self):
|
||||
self.ensure_one()
|
||||
return 0
|
||||
|
||||
def _update_donor_rank(self):
|
||||
"""This method is inherited in donation and donation_sale"""
|
||||
self.ensure_one()
|
||||
self.write({"donor_rank": self._prepare_donor_rank()})
|
||||
3
donation_base/pyproject.toml
Normal file
3
donation_base/pyproject.toml
Normal file
@ -0,0 +1,3 @@
|
||||
[build-system]
|
||||
requires = ["whool"]
|
||||
build-backend = "whool.buildapi"
|
||||
4
donation_base/readme/CONFIGURE.md
Normal file
4
donation_base/readme/CONFIGURE.md
Normal file
@ -0,0 +1,4 @@
|
||||
To configure this module, you need to:
|
||||
|
||||
> - create donation products
|
||||
> - set the *Tax Receipt Option* on partners
|
||||
5
donation_base/readme/CONTRIBUTORS.md
Normal file
5
donation_base/readme/CONTRIBUTORS.md
Normal file
@ -0,0 +1,5 @@
|
||||
- Brother Bernard \<informatique - at - barroux.org\>
|
||||
- Brother Irénée (Barroux Abbey)
|
||||
- Alexis de Lattre \<alexis.delattre@akretion.com\>
|
||||
- Serpent Consulting Services Pvt. Ltd. \<support@serpentcs.com\>
|
||||
- Nikul Chaudhary \<nikul.chaudhary.serpentcs@gmail.com\>
|
||||
7
donation_base/readme/DESCRIPTION.md
Normal file
7
donation_base/readme/DESCRIPTION.md
Normal file
@ -0,0 +1,7 @@
|
||||
This is the base module for donations. This module doesn't do anything
|
||||
in itself ; it just adds some properties on products and partners and
|
||||
adds the *donation.tax.receipt* object.
|
||||
|
||||
To get some real features, you should install the *donation* or the
|
||||
*donation_sale* module. To understand the difference between these 2
|
||||
modules, read [this post](https://github.com/OCA/donation/issues/22).
|
||||
22
donation_base/report/report.xml
Normal file
22
donation_base/report/report.xml
Normal file
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (www.akretion.com)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<record id="report_donation_tax_receipt" model="ir.actions.report">
|
||||
<field name="name">Donation Tax Receipt</field>
|
||||
<field name="model">donation.tax.receipt</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">donation_base.report_donationtaxreceipt</field>
|
||||
<field name="report_file">donation_base.report_donationtaxreceipt</field>
|
||||
<field
|
||||
name="print_report_name"
|
||||
>'Fiscal_receipt-'+(object.number or '').replace('/','')</field>
|
||||
<field name="binding_model_id" ref="model_donation_tax_receipt" />
|
||||
<field name="attachment_use" eval="True" />
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
</odoo>
|
||||
35
donation_base/report/report_donationtax.xml
Normal file
35
donation_base/report/report_donationtax.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo>
|
||||
<!-- This is just a very basic tax receipt report
|
||||
You should customize the style and layout in a custom module -->
|
||||
<template id="donation_base.report_donationtaxreceipt_document">
|
||||
<t t-call="web.internal_layout">
|
||||
<div class="page">
|
||||
<h1>Donation Tax Receipt <span t-field="o.number" /></h1>
|
||||
<h3>Donor:</h3>
|
||||
<div
|
||||
t-field="o.partner_id"
|
||||
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
|
||||
/>
|
||||
<h3>Date: <span t-field="o.date" /></h3>
|
||||
<h3>Amount Total: <span t-field="o.amount" /></h3>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
<template id="report_donationtaxreceipt">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t
|
||||
t-call="donation_base.report_donationtaxreceipt_document"
|
||||
t-lang="o.partner_id.lang"
|
||||
/>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
7
donation_base/security/ir.model.access.csv
Normal file
7
donation_base/security/ir.model.access.csv
Normal file
@ -0,0 +1,7 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_donation_tax_receipt_full,Full access on donation.tax.receipt to Config grp,model_donation_tax_receipt,base.group_system,1,1,1,1
|
||||
access_donation_tax_receipt_account_full,Full access on donation.tax.receipt to Accounting Manager,model_donation_tax_receipt,account.group_account_manager,1,1,1,1
|
||||
access_donation_tax_receipt_account_invoice,Create access on donation.tax.receipt to Billing group,model_donation_tax_receipt,account.group_account_invoice,1,0,1,0
|
||||
access_donation_tax_receipt_account_readonly,Readonly access on donation.tax.receipt to Auditor group,model_donation_tax_receipt,account.group_account_readonly,1,0,0,0
|
||||
access_donation_tax_receipt_print,Donation tax receipt print wizard,model_donation_tax_receipt_print,account.group_account_invoice,1,1,1,1
|
||||
access_tax_receipt_annual_create,Donation tax receipt annual create wizard,model_tax_receipt_annual_create,account.group_account_invoice,1,1,1,1
|
||||
|
14
donation_base/security/tax_receipt_security.xml
Normal file
14
donation_base/security/tax_receipt_security.xml
Normal file
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!--
|
||||
Copyright 2014-2021 Barroux Abbey (http://www.barroux.org)
|
||||
Copyright 2014-2021 Akretion France (http://www.akretion.com/)
|
||||
@author: Alexis de Lattre <alexis.delattre@akretion.com>
|
||||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||
-->
|
||||
<odoo noupdate="1">
|
||||
<record id="donation_tax_receipt_company_rule" model="ir.rule">
|
||||
<field name="name">Donation Tax Receipt Multi-company</field>
|
||||
<field name="model_id" ref="model_donation_tax_receipt" />
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
BIN
donation_base/static/description/icon.png
Normal file
BIN
donation_base/static/description/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.2 KiB |
446
donation_base/static/description/index.html
Normal file
446
donation_base/static/description/index.html
Normal file
@ -0,0 +1,446 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
||||
<title>Donation Base</title>
|
||||
<style type="text/css">
|
||||
|
||||
/*
|
||||
:Author: David Goodger (goodger@python.org)
|
||||
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
|
||||
:Copyright: This stylesheet has been placed in the public domain.
|
||||
|
||||
Default cascading style sheet for the HTML output of Docutils.
|
||||
Despite the name, some widely supported CSS2 features are used.
|
||||
|
||||
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
|
||||
customize this style sheet.
|
||||
*/
|
||||
|
||||
/* used to remove borders from tables and images */
|
||||
.borderless, table.borderless td, table.borderless th {
|
||||
border: 0 }
|
||||
|
||||
table.borderless td, table.borderless th {
|
||||
/* Override padding for "table.docutils td" with "! important".
|
||||
The right padding separates the table cells. */
|
||||
padding: 0 0.5em 0 0 ! important }
|
||||
|
||||
.first {
|
||||
/* Override more specific margin styles with "! important". */
|
||||
margin-top: 0 ! important }
|
||||
|
||||
.last, .with-subtitle {
|
||||
margin-bottom: 0 ! important }
|
||||
|
||||
.hidden {
|
||||
display: none }
|
||||
|
||||
.subscript {
|
||||
vertical-align: sub;
|
||||
font-size: smaller }
|
||||
|
||||
.superscript {
|
||||
vertical-align: super;
|
||||
font-size: smaller }
|
||||
|
||||
a.toc-backref {
|
||||
text-decoration: none ;
|
||||
color: black }
|
||||
|
||||
blockquote.epigraph {
|
||||
margin: 2em 5em ; }
|
||||
|
||||
dl.docutils dd {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
||||
dl.docutils dt {
|
||||
font-weight: bold }
|
||||
*/
|
||||
|
||||
div.abstract {
|
||||
margin: 2em 5em }
|
||||
|
||||
div.abstract p.topic-title {
|
||||
font-weight: bold ;
|
||||
text-align: center }
|
||||
|
||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
||||
div.hint, div.important, div.note, div.tip, div.warning {
|
||||
margin: 2em ;
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
||||
div.important p.admonition-title, div.note p.admonition-title,
|
||||
div.tip p.admonition-title {
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
||||
div.danger p.admonition-title, div.error p.admonition-title,
|
||||
div.warning p.admonition-title, .code .error {
|
||||
color: red ;
|
||||
font-weight: bold ;
|
||||
font-family: sans-serif }
|
||||
|
||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
||||
compound paragraphs.
|
||||
div.compound .compound-first, div.compound .compound-middle {
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
div.compound .compound-last, div.compound .compound-middle {
|
||||
margin-top: 0.5em }
|
||||
*/
|
||||
|
||||
div.dedication {
|
||||
margin: 2em 5em ;
|
||||
text-align: center ;
|
||||
font-style: italic }
|
||||
|
||||
div.dedication p.topic-title {
|
||||
font-weight: bold ;
|
||||
font-style: normal }
|
||||
|
||||
div.figure {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
div.footer, div.header {
|
||||
clear: both;
|
||||
font-size: smaller }
|
||||
|
||||
div.line-block {
|
||||
display: block ;
|
||||
margin-top: 1em ;
|
||||
margin-bottom: 1em }
|
||||
|
||||
div.line-block div.line-block {
|
||||
margin-top: 0 ;
|
||||
margin-bottom: 0 ;
|
||||
margin-left: 1.5em }
|
||||
|
||||
div.sidebar {
|
||||
margin: 0 0 0.5em 1em ;
|
||||
border: medium outset ;
|
||||
padding: 1em ;
|
||||
background-color: #ffffee ;
|
||||
width: 40% ;
|
||||
float: right ;
|
||||
clear: right }
|
||||
|
||||
div.sidebar p.rubric {
|
||||
font-family: sans-serif ;
|
||||
font-size: medium }
|
||||
|
||||
div.system-messages {
|
||||
margin: 5em }
|
||||
|
||||
div.system-messages h1 {
|
||||
color: red }
|
||||
|
||||
div.system-message {
|
||||
border: medium outset ;
|
||||
padding: 1em }
|
||||
|
||||
div.system-message p.system-message-title {
|
||||
color: red ;
|
||||
font-weight: bold }
|
||||
|
||||
div.topic {
|
||||
margin: 2em }
|
||||
|
||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
||||
margin-top: 0.4em }
|
||||
|
||||
h1.title {
|
||||
text-align: center }
|
||||
|
||||
h2.subtitle {
|
||||
text-align: center }
|
||||
|
||||
hr.docutils {
|
||||
width: 75% }
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left, table.align-left {
|
||||
clear: left ;
|
||||
float: left ;
|
||||
margin-right: 1em }
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right, table.align-right {
|
||||
clear: right ;
|
||||
float: right ;
|
||||
margin-left: 1em }
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
table.align-center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left }
|
||||
|
||||
.align-center {
|
||||
clear: both ;
|
||||
text-align: center }
|
||||
|
||||
.align-right {
|
||||
text-align: right }
|
||||
|
||||
/* reset inner alignment in figures */
|
||||
div.align-right {
|
||||
text-align: inherit }
|
||||
|
||||
/* div.align-center * { */
|
||||
/* text-align: left } */
|
||||
|
||||
.align-top {
|
||||
vertical-align: top }
|
||||
|
||||
.align-middle {
|
||||
vertical-align: middle }
|
||||
|
||||
.align-bottom {
|
||||
vertical-align: bottom }
|
||||
|
||||
ol.simple, ul.simple {
|
||||
margin-bottom: 1em }
|
||||
|
||||
ol.arabic {
|
||||
list-style: decimal }
|
||||
|
||||
ol.loweralpha {
|
||||
list-style: lower-alpha }
|
||||
|
||||
ol.upperalpha {
|
||||
list-style: upper-alpha }
|
||||
|
||||
ol.lowerroman {
|
||||
list-style: lower-roman }
|
||||
|
||||
ol.upperroman {
|
||||
list-style: upper-roman }
|
||||
|
||||
p.attribution {
|
||||
text-align: right ;
|
||||
margin-left: 50% }
|
||||
|
||||
p.caption {
|
||||
font-style: italic }
|
||||
|
||||
p.credits {
|
||||
font-style: italic ;
|
||||
font-size: smaller }
|
||||
|
||||
p.label {
|
||||
white-space: nowrap }
|
||||
|
||||
p.rubric {
|
||||
font-weight: bold ;
|
||||
font-size: larger ;
|
||||
color: maroon ;
|
||||
text-align: center }
|
||||
|
||||
p.sidebar-title {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold ;
|
||||
font-size: larger }
|
||||
|
||||
p.sidebar-subtitle {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
p.topic-title {
|
||||
font-weight: bold }
|
||||
|
||||
pre.address {
|
||||
margin-bottom: 0 ;
|
||||
margin-top: 0 ;
|
||||
font: inherit }
|
||||
|
||||
pre.literal-block, pre.doctest-block, pre.math, pre.code {
|
||||
margin-left: 2em ;
|
||||
margin-right: 2em }
|
||||
|
||||
pre.code .ln { color: gray; } /* line numbers */
|
||||
pre.code, code { background-color: #eeeeee }
|
||||
pre.code .comment, code .comment { color: #5C6576 }
|
||||
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
|
||||
pre.code .literal.string, code .literal.string { color: #0C5404 }
|
||||
pre.code .name.builtin, code .name.builtin { color: #352B84 }
|
||||
pre.code .deleted, code .deleted { background-color: #DEB0A1}
|
||||
pre.code .inserted, code .inserted { background-color: #A3D289}
|
||||
|
||||
span.classifier {
|
||||
font-family: sans-serif ;
|
||||
font-style: oblique }
|
||||
|
||||
span.classifier-delimiter {
|
||||
font-family: sans-serif ;
|
||||
font-weight: bold }
|
||||
|
||||
span.interpreted {
|
||||
font-family: sans-serif }
|
||||
|
||||
span.option {
|
||||
white-space: nowrap }
|
||||
|
||||
span.pre {
|
||||
white-space: pre }
|
||||
|
||||
span.problematic, pre.problematic {
|
||||
color: red }
|
||||
|
||||
span.section-subtitle {
|
||||
/* font-size relative to parent (h1..h6 element) */
|
||||
font-size: 80% }
|
||||
|
||||
table.citation {
|
||||
border-left: solid 1px gray;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docinfo {
|
||||
margin: 2em 4em }
|
||||
|
||||
table.docutils {
|
||||
margin-top: 0.5em ;
|
||||
margin-bottom: 0.5em }
|
||||
|
||||
table.footnote {
|
||||
border-left: solid 1px black;
|
||||
margin-left: 1px }
|
||||
|
||||
table.docutils td, table.docutils th,
|
||||
table.docinfo td, table.docinfo th {
|
||||
padding-left: 0.5em ;
|
||||
padding-right: 0.5em ;
|
||||
vertical-align: top }
|
||||
|
||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
||||
font-weight: bold ;
|
||||
text-align: left ;
|
||||
white-space: nowrap ;
|
||||
padding-left: 0 }
|
||||
|
||||
/* "booktabs" style (no vertical lines) */
|
||||
table.docutils.booktabs {
|
||||
border: 0px;
|
||||
border-top: 2px solid;
|
||||
border-bottom: 2px solid;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
table.docutils.booktabs * {
|
||||
border: 0px;
|
||||
}
|
||||
table.docutils.booktabs th {
|
||||
border-bottom: thin solid;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
||||
font-size: 100% }
|
||||
|
||||
ul.auto-toc {
|
||||
list-style-type: none }
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="document" id="donation-base">
|
||||
<h1 class="title">Donation Base</h1>
|
||||
|
||||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! This file is generated by oca-gen-addon-readme !!
|
||||
!! changes will be overwritten. !!
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
!! source digest: sha256:6e2db8827361efb5621a1344f354283d19a040354375a96852640d2a8ede572b
|
||||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||||
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/donation/tree/18.0/donation_base"><img alt="OCA/donation" src="https://img.shields.io/badge/github-OCA%2Fdonation-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/donation-18-0/donation-18-0-donation_base"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/donation&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
||||
<p>This is the base module for donations. This module doesn’t do anything
|
||||
in itself ; it just adds some properties on products and partners and
|
||||
adds the <em>donation.tax.receipt</em> object.</p>
|
||||
<p>To get some real features, you should install the <em>donation</em> or the
|
||||
<em>donation_sale</em> module. To understand the difference between these 2
|
||||
modules, read <a class="reference external" href="https://github.com/OCA/donation/issues/22">this post</a>.</p>
|
||||
<p><strong>Table of contents</strong></p>
|
||||
<div class="contents local topic" id="contents">
|
||||
<ul class="simple">
|
||||
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
||||
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
|
||||
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
|
||||
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
|
||||
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
|
||||
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="configuration">
|
||||
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
|
||||
<p>To configure this module, you need to:</p>
|
||||
<blockquote>
|
||||
<ul class="simple">
|
||||
<li>create donation products</li>
|
||||
<li>set the <em>Tax Receipt Option</em> on partners</li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
</div>
|
||||
<div class="section" id="bug-tracker">
|
||||
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
|
||||
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/donation/issues">GitHub Issues</a>.
|
||||
In case of trouble, please check there if your issue has already been reported.
|
||||
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
||||
<a class="reference external" href="https://github.com/OCA/donation/issues/new?body=module:%20donation_base%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
|
||||
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
||||
</div>
|
||||
<div class="section" id="credits">
|
||||
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
|
||||
<div class="section" id="authors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Barroux Abbey</li>
|
||||
<li>Akretion</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="contributors">
|
||||
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
|
||||
<ul class="simple">
|
||||
<li>Brother Bernard <informatique - at - barroux.org></li>
|
||||
<li>Brother Irénée (Barroux Abbey)</li>
|
||||
<li>Alexis de Lattre <<a class="reference external" href="mailto:alexis.delattre@akretion.com">alexis.delattre@akretion.com</a>></li>
|
||||
<li>Serpent Consulting Services Pvt. Ltd. <<a class="reference external" href="mailto:support@serpentcs.com">support@serpentcs.com</a>></li>
|
||||
<li>Nikul Chaudhary <<a class="reference external" href="mailto:nikul.chaudhary.serpentcs@gmail.com">nikul.chaudhary.serpentcs@gmail.com</a>></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="section" id="maintainers">
|
||||
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
|
||||
<p>This module is maintained by the OCA.</p>
|
||||
<a class="reference external image-reference" href="https://odoo-community.org">
|
||||
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
||||
</a>
|
||||
<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
|
||||
mission is to support the collaborative development of Odoo features and
|
||||
promote its widespread use.</p>
|
||||
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
|
||||
<p><a class="reference external image-reference" href="https://github.com/alexis-via"><img alt="alexis-via" src="https://github.com/alexis-via.png?size=40px" /></a></p>
|
||||
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/donation/tree/18.0/donation_base">OCA/donation</a> project on GitHub.</p>
|
||||
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user