first commit
This commit is contained in:
103
modules/account_payment_sepa/party.py
Normal file
103
modules/account_payment_sepa/party.py
Normal file
@@ -0,0 +1,103 @@
|
||||
# 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 fields
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.pyson import Eval
|
||||
|
||||
from .exceptions import PartyIdentificationdError
|
||||
|
||||
|
||||
class Party(metaclass=PoolMeta):
|
||||
__name__ = 'party.party'
|
||||
sepa_creditor_identifier_used = fields.Function(fields.Char(
|
||||
'SEPA Creditor Identifier Used'),
|
||||
'get_sepa_creditor_identifier_used')
|
||||
sepa_mandates = fields.One2Many('account.payment.sepa.mandate', 'party',
|
||||
'SEPA Mandates')
|
||||
|
||||
@classmethod
|
||||
def copy(cls, parties, default=None):
|
||||
if default is None:
|
||||
default = {}
|
||||
else:
|
||||
default = default.copy()
|
||||
default.setdefault('sepa_mandates', [])
|
||||
return super().copy(parties, default=default)
|
||||
|
||||
def get_sepa_creditor_identifier_used(self, name):
|
||||
for identifier in self.identifiers:
|
||||
if identifier.type == 'eu_at_02':
|
||||
return identifier.code
|
||||
|
||||
def get_sepa_identifier(self, name):
|
||||
pool = Pool()
|
||||
Identifier = pool.get('party.identifier')
|
||||
for identifier in self.identifiers:
|
||||
if identifier.type == name:
|
||||
return identifier.sepa_identifier
|
||||
else:
|
||||
type = dict(Identifier.get_types()).get(name, name)
|
||||
raise PartyIdentificationdError(
|
||||
gettext('account_payment_sepa.msg_party_no_id',
|
||||
party=self.rec_name,
|
||||
type=type))
|
||||
|
||||
def sepa_mandates_for(self, payment):
|
||||
for mandate in self.sepa_mandates:
|
||||
if mandate.company == payment.company:
|
||||
yield mandate
|
||||
|
||||
|
||||
class PartyReceptionDirectDebit(metaclass=PoolMeta):
|
||||
__name__ = 'party.party.reception_direct_debit'
|
||||
|
||||
sepa_mandate = fields.Many2One(
|
||||
'account.payment.sepa.mandate', "Mandate", ondelete='CASCADE',
|
||||
domain=[
|
||||
('party', '=', Eval('party', -1)),
|
||||
],
|
||||
states={
|
||||
'invisible': Eval('process_method') != 'sepa',
|
||||
'readonly': ~Eval('party') | (Eval('party', -1) < 0),
|
||||
})
|
||||
|
||||
def _get_payment(self, line, date, amount):
|
||||
payment = super()._get_payment(line, date, amount)
|
||||
payment.sepa_mandate = self.sepa_mandate
|
||||
return payment
|
||||
|
||||
|
||||
class PartyIdentifier(metaclass=PoolMeta):
|
||||
__name__ = 'party.identifier'
|
||||
|
||||
sepa_es_suffix = fields.Char(
|
||||
"SEPA Suffix", size=3,
|
||||
states={
|
||||
'invisible': Eval('type') != 'es_vat',
|
||||
})
|
||||
|
||||
@property
|
||||
def sepa_identifier(self):
|
||||
identifier = {
|
||||
'Type': 'OrgId',
|
||||
'Id': self.code,
|
||||
}
|
||||
if self.type == 'eu_at_02':
|
||||
identifier['Type'] = 'PrvtId'
|
||||
identifier['SchmeNm'] = {'Prtry': 'SEPA'}
|
||||
elif self.type == 'be_vat':
|
||||
identifier['Issr'] = 'KBO-BCE'
|
||||
elif self.type == 'es_vat':
|
||||
identifier['Id'] += self.sepa_es_suffix or '000'
|
||||
return identifier
|
||||
|
||||
|
||||
class Replace(metaclass=PoolMeta):
|
||||
__name__ = 'party.replace'
|
||||
|
||||
@classmethod
|
||||
def fields_to_replace(cls):
|
||||
return super().fields_to_replace() + [
|
||||
('account.payment.sepa.mandate', 'party'),
|
||||
]
|
||||
Reference in New Issue
Block a user