diff --git a/donation/models/account_journal.py b/donation/models/account_journal.py index 3ddd9654d..72a1d04c6 100644 --- a/donation/models/account_journal.py +++ b/donation/models/account_journal.py @@ -17,29 +17,13 @@ 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, " - "donation_debit_order_account_id))]", + "payment_credit_account_id, payment_debit_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") + @api.constrains("donation_account_id") def _check_donation_accounts(self): for journal in self: if ( @@ -55,27 +39,3 @@ def _check_donation_accounts(self): 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, - ) - ) diff --git a/donation/models/donation.py b/donation/models/donation.py index 2ca365366..949b4ecf3 100644 --- a/donation/models/donation.py +++ b/donation/models/donation.py @@ -289,13 +289,6 @@ def _prepare_counterpart_move_line( 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( diff --git a/donation/views/account_journal.xml b/donation/views/account_journal.xml index 54be00504..8120b5816 100644 --- a/donation/views/account_journal.xml +++ b/donation/views/account_journal.xml @@ -12,10 +12,6 @@ name="donation_account_id" attrs="{'invisible': [('type', '!=', 'bank')]}" /> - diff --git a/donation_direct_debit/__manifest__.py b/donation_direct_debit/__manifest__.py index 0eeffae3d..3c2db22e8 100644 --- a/donation_direct_debit/__manifest__.py +++ b/donation_direct_debit/__manifest__.py @@ -15,6 +15,7 @@ "depends": ["account_banking_sepa_direct_debit", "donation"], "data": [ "views/donation.xml", + "views/account_journal.xml", ], "demo": ["demo/donation_demo.xml"], "installable": True, diff --git a/donation_direct_debit/models/__init__.py b/donation_direct_debit/models/__init__.py index b1847a5ab..e8ea817f0 100644 --- a/donation_direct_debit/models/__init__.py +++ b/donation_direct_debit/models/__init__.py @@ -1 +1,2 @@ from . import donation +from . import account_journal diff --git a/donation_direct_debit/models/account_journal.py b/donation_direct_debit/models/account_journal.py new file mode 100644 index 000000000..2b67a8d9b --- /dev/null +++ b/donation_direct_debit/models/account_journal.py @@ -0,0 +1,54 @@ +# Copyright 2021 Akretion France (http://www.akretion.com/) +# @author: Alexis de Lattre +# 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 AccountJournal(models.Model): + _inherit = "account.journal" + + 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_debit_order_account_id") + def _check_donation_accounts(self): + for journal in self: + 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, + ) + ) diff --git a/donation_direct_debit/models/donation.py b/donation_direct_debit/models/donation.py index 558dae25f..5db40d51c 100644 --- a/donation_direct_debit/models/donation.py +++ b/donation_direct_debit/models/donation.py @@ -57,6 +57,22 @@ def _prepare_payment_order(self): vals = {"payment_mode_id": self.payment_mode_id.id} return vals + def _prepare_counterpart_move_line( + self, total_company_cur, total_currency, journal + ): + vals = super()._prepare_counterpart_move_line( + total_company_cur, total_currency, journal + ) + journal = self.payment_mode_id.fixed_journal_id + if not self.bank_statement_line_id and 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 + ) + vals["account_id"] = journal.donation_debit_order_account_id.id + return vals + def validate(self): """Create Direct debit payment order on donation validation or update an existing draft Direct Debit pay order""" diff --git a/donation_direct_debit/views/account_journal.xml b/donation_direct_debit/views/account_journal.xml new file mode 100644 index 000000000..55b0e5853 --- /dev/null +++ b/donation_direct_debit/views/account_journal.xml @@ -0,0 +1,19 @@ + + + + + + account.journal + + + + + + + + + +