Merge pull request #119 from akretion/14-fix-direct_debit

[14.0][FIX] donation by direct debit
14.0
Alexis de Lattre 10 months ago committed by GitHub
commit cf119ffe66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -2,7 +2,8 @@
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class AccountJournal(models.Model):
@ -16,8 +17,65 @@ class AccountJournal(models.Model):
domain="[('reconcile', '=', True), ('deprecated', '=', False), "
"('company_id', '=', company_id), "
"('id', 'not in', (default_account_id, suspense_account_id, "
"payment_credit_account_id, payment_debit_account_id))]",
"payment_credit_account_id, payment_debit_account_id, "
"donation_debit_order_account_id))]",
string="Donation by Credit Transfer Account",
help="Transfer account for donations received by credit transfer. "
"Leave empty if you don't receive donations on this bank account.",
)
donation_debit_order_account_id = fields.Many2one(
"account.account",
check_company=True,
copy=False,
ondelete="restrict",
domain="[('reconcile', '=', True), ('deprecated', '=', False), "
"('company_id', '=', company_id), "
"('user_type_id.type', '=', 'receivable'), "
"('id', 'not in', (default_account_id, suspense_account_id, "
"payment_credit_account_id, payment_debit_account_id, donation_account_id))]",
string="Donation by Debit Order Account",
help="Transfer account for donations by debit order. "
"Leave empty if you don't handle donations by debit order on this bank account."
"This account must be a receivable account, otherwise the debit order will not work.",
)
@api.constrains("donation_account_id", "donation_debit_order_account_id")
def _check_donation_accounts(self):
for journal in self:
if (
journal.donation_account_id
and not journal.donation_account_id.reconcile
):
raise ValidationError(
_(
"The Donation by Credit Transfer Account of journal "
"'%(journal)s' must be reconciliable, but the account "
"'%(account)s' is not reconciliable.",
journal=journal.display_name,
account=journal.donation_account_id.display_name,
)
)
ddo_account = journal.donation_debit_order_account_id
if ddo_account:
if not ddo_account.reconcile:
raise ValidationError(
_(
"The Donation by Debit Order Account of journal "
"'%(journal)s' must be reconciliable, but the account "
"'%(account)s' is not reconciliable.",
journal=journal.display_name,
account=ddo_account.display_name,
)
)
if ddo_account.user_type_id.type != "receivable":
raise ValidationError(
_(
"The Donation by Debit Order Account of journal "
"'%(journal)s' must be a receivable account, "
"but the account '%(account)s' is configured with "
"type '%(account_type)s'.",
journal=journal.display_name,
account=ddo_account.display_name,
account_type=ddo_account.user_type_id.display_name,
)
)

@ -275,15 +275,12 @@ class DonationDonation(models.Model):
}
return vals
# TODO migration: remove 'journal' argument and use self.payment_mode_id.fixed_journal_id
def _prepare_counterpart_move_line(
self, total_company_cur, total_currency, journal
):
self.ensure_one()
if not journal.payment_debit_account_id:
raise UserError(
_("Missing Outstanding Receipts Account on journal '%s'.")
% journal.display_name
)
journal = self.payment_mode_id.fixed_journal_id
if self.company_currency_id.compare_amounts(total_company_cur, 0) > 0:
debit = total_company_cur
credit = 0
@ -292,7 +289,19 @@ class DonationDonation(models.Model):
debit = 0
if self.bank_statement_line_id:
account_id = journal.donation_account_id.id
elif self.payment_mode_id.payment_order_ok:
if not journal.donation_debit_order_account_id:
raise UserError(
_("Missing Donation by Debit Order Account on journal '%s'.")
% journal.display_name
)
account_id = journal.donation_debit_order_account_id.id
else:
if not journal.payment_debit_account_id:
raise UserError(
_("Missing Outstanding Receipts Account on journal '%s'.")
% journal.display_name
)
account_id = journal.payment_debit_account_id.id
vals = {
"debit": debit,

@ -12,6 +12,10 @@
name="donation_account_id"
attrs="{'invisible': [('type', '!=', 'bank')]}"
/>
<field
name="donation_debit_order_account_id"
attrs="{'invisible': [('type', '!=', 'bank')]}"
/>
</field>
</field>
</record>

@ -88,11 +88,11 @@ class DonationDonation(models.Model):
"data-oe-id=%d>%s</a> has been automatically created"
) % (payorder.id, payorder.name)
# add payment line
payment_account_id = (
donation.payment_mode_id.fixed_journal_id.payment_debit_account_id.id
match_account_id = (
donation.payment_mode_id.fixed_journal_id.donation_debit_order_account_id.id
)
for mline in donation.move_id.line_ids:
if mline.account_id.id == payment_account_id:
if mline.account_id.id == match_account_id:
mline.sudo().create_payment_line_from_move_line(payorder)
break
if not msg:

Loading…
Cancel
Save