From a154f306f468bbfdb661ff9ca8d10e54b00084a5 Mon Sep 17 00:00:00 2001 From: Sergi Almacellas Abellana Date: Mon, 17 Feb 2020 11:18:54 +0100 Subject: [PATCH] Allow the sepa mandate to be set on draft payments Also include account number on mandate rec_name issue8990 review260831007 --- CHANGELOG | 3 +++ payment.py | 35 +++++++++++++++++++++++++++++++---- view/payment_form.xml | 8 +++++--- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index e101f2aebb..b3795a2772 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* Include bank account number on mandate rec_name +* Allow sepa_mandate to be set on draft payments + Version 5.4.0 - 2019-11-04 * Bug fixes (see mercurial logs for details) * Add initiator identifiers on journal diff --git a/payment.py b/payment.py index 99b6ebeaca..4d4ffb71c3 100644 --- a/payment.py +++ b/payment.py @@ -264,11 +264,20 @@ class Payment(metaclass=PoolMeta): sepa_mandate = fields.Many2One('account.payment.sepa.mandate', 'Mandate', ondelete='RESTRICT', + states={ + 'readonly': Eval('state') != 'draft', + 'invisible': ((Eval('process_method') != 'sepa') + | (Eval('kind') != 'receivable')), + }, domain=[ ('party', '=', Eval('party', -1)), ('company', '=', Eval('company', -1)), + If(Eval('state') == 'draft', + ('state', '=', 'validated'), + (), + ) ], - depends=['party', 'company']) + depends=['party', 'company', 'state', 'process_method', 'kind']) sepa_mandate_sequence_type = fields.Char('Mandate Sequence Type', readonly=True) sepa_return_reason_code = fields.Char('Return Reason Code', readonly=True, @@ -361,6 +370,14 @@ class Payment(metaclass=PoolMeta): date = Transaction().context.get('date_value') return super(Payment, self).create_clearing_move(date=date) + @classmethod + def view_attributes(cls): + return super().view_attributes() + [ + ('//separator[@id="sepa_return_reason"]', 'states', { + 'invisible': Eval('state') != 'failed', + }), + ] + class Mandate(Workflow, ModelSQL, ModelView): 'SEPA Mandate' @@ -505,13 +522,23 @@ class Mandate(Workflow, ModelSQL, ModelView): return bool(self.identification) def get_rec_name(self, name): + name = '(%s)' % self.id if self.identification: - return self.identification - return '(%s)' % self.id + name = self.identification + if self.account_number: + name += ' @ %s' % self.account_number.rec_name + return name @classmethod def search_rec_name(cls, name, clause): - return [tuple(('identification',)) + tuple(clause[1:])] + if clause[1].startswith('!') or clause[1].startswith('not '): + bool_op = 'AND' + else: + bool_op = 'OR' + return [bool_op, + ('identification',) + tuple(clause[1:]), + ('account_number',) + tuple(clause[1:]), + ] @classmethod def create(cls, vlist): diff --git a/view/payment_form.xml b/view/payment_form.xml index d525881fa8..620a59fa82 100644 --- a/view/payment_form.xml +++ b/view/payment_form.xml @@ -3,11 +3,13 @@ this repository contains the full copyright notices and license terms. --> - -