mirror of
https://gitlab.com/flectra-community/bank-payment.git
synced 2024-11-25 07:02:06 +00:00
59 lines
2.0 KiB
Python
59 lines
2.0 KiB
Python
# Copyright 2020 Marçal Isern <marsal.isern@qubiq.es>
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
|
|
|
|
|
from flectra import api, fields, models
|
|
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = "account.move"
|
|
|
|
mandate_id = fields.Many2one(
|
|
"account.banking.mandate",
|
|
string="Direct Debit Mandate",
|
|
ondelete="restrict",
|
|
readonly=True,
|
|
check_company=True,
|
|
states={"draft": [("readonly", False)]},
|
|
)
|
|
mandate_required = fields.Boolean(
|
|
related="payment_mode_id.payment_method_id.mandate_required", readonly=True
|
|
)
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
"""Fill the mandate_id from the partner if none is provided on
|
|
creation, using same method as upstream."""
|
|
onchanges = {
|
|
"_onchange_partner_id": ["mandate_id"],
|
|
"_onchange_payment_mode_id": ["mandate_id"],
|
|
}
|
|
for onchange_method, changed_fields in list(onchanges.items()):
|
|
if any(f not in vals for f in changed_fields):
|
|
move = self.new(vals)
|
|
move = move.with_company(move.company_id.id)
|
|
getattr(move, onchange_method)()
|
|
for field in changed_fields:
|
|
if field not in vals and move[field]:
|
|
vals[field] = move._fields[field].convert_to_write(
|
|
move[field], move
|
|
)
|
|
return super().create(vals)
|
|
|
|
def set_mandate(self):
|
|
if self.payment_mode_id.payment_method_id.mandate_required:
|
|
self.mandate_id = self.partner_id.valid_mandate_id
|
|
else:
|
|
self.mandate_id = False
|
|
|
|
@api.onchange("partner_id", "company_id")
|
|
def _onchange_partner_id(self):
|
|
"""Select by default the first valid mandate of the partner"""
|
|
res = super()._onchange_partner_id()
|
|
self.set_mandate()
|
|
return res
|
|
|
|
@api.onchange("payment_mode_id")
|
|
def _onchange_payment_mode_id(self):
|
|
self.set_mandate()
|