65 lines
2.7 KiB
Python
65 lines
2.7 KiB
Python
# This file is part of Tryton. The COPYRIGHT file at the top level of
|
|
# this repository contains the full copyright notices and license terms.
|
|
|
|
from trytond.i18n import gettext
|
|
from trytond.model import ModelSQL, fields
|
|
from trytond.modules.company.model import CompanyValueMixin
|
|
from trytond.pool import Pool, PoolMeta
|
|
from trytond.pyson import Eval, Id
|
|
|
|
|
|
class Configuration(metaclass=PoolMeta):
|
|
__name__ = 'account.configuration'
|
|
sepa_mandate_sequence = fields.MultiValue(fields.Many2One(
|
|
'ir.sequence', "SEPA Mandate Sequence",
|
|
domain=[
|
|
('sequence_type', '=', Id(
|
|
'account_payment_sepa', 'sequence_type_mandate')),
|
|
('company', 'in', [Eval('context', {}).get('company', -1),
|
|
None]),
|
|
]))
|
|
|
|
|
|
class ConfigurationSepaMandateSequence(ModelSQL, CompanyValueMixin):
|
|
__name__ = 'account.configuration.sepa_mandate_sequence'
|
|
sepa_mandate_sequence = fields.Many2One(
|
|
'ir.sequence', "SEPA Mandate Sequence",
|
|
domain=[
|
|
('sequence_type', '=', Id(
|
|
'account_payment_sepa', 'sequence_type_mandate')),
|
|
('company', 'in', [Eval('company', -1), None]),
|
|
])
|
|
|
|
|
|
class InvoicePaymentMean(metaclass=PoolMeta):
|
|
__name__ = 'account.invoice.payment.mean'
|
|
|
|
def get_rec_name(self, name):
|
|
name = super().get_rec_name(name)
|
|
if (self.instrument.__name__ == 'party.party.reception_direct_debit'
|
|
and self.instrument.journal.process_method == 'sepa'
|
|
and self.instrument.sepa_mandate):
|
|
mandate = self.instrument.sepa_mandate
|
|
name = gettext(
|
|
'account_payment_sepa.msg_invoice_payment_mean_direct_debit',
|
|
mandate=mandate.identification,
|
|
account_number=mandate.account_number.number)
|
|
return name
|
|
|
|
def is_valid_with_payment(self, payment):
|
|
pool = Pool()
|
|
BankAccount = pool.get('bank.account')
|
|
ReceptionDirectDebit = pool.get('party.party.reception_direct_debit')
|
|
valid = super().is_valid_with_payment(payment)
|
|
if payment.journal.process_method == 'sepa':
|
|
if isinstance(self.instrument, BankAccount):
|
|
bank_account = self.instrument
|
|
valid = (
|
|
payment.sepa_bank_account_number in bank_account.numbers)
|
|
elif isinstance(self.instrument, ReceptionDirectDebit):
|
|
reception = self.instrument
|
|
if reception.journal == payment.journal:
|
|
if payment.sepa_mandate and reception.sepa_mandate:
|
|
valid &= payment.sepa_mandate == reception.sepa_mandate
|
|
return valid
|