From befbdf7377539d0fc2c83b1438a2d1e4b0760464 Mon Sep 17 00:00:00 2001 From: SimoRubi Date: Mon, 5 Aug 2019 11:51:49 +0200 Subject: [PATCH] [IMP] account_banking_pain_base: Provide a more detailed message when _prepare_field fails --- .../models/account_payment_order.py | 54 ++++++++++++++----- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/account_banking_pain_base/models/account_payment_order.py b/account_banking_pain_base/models/account_payment_order.py index 3f14960db..3c70e221d 100644 --- a/account_banking_pain_base/models/account_payment_order.py +++ b/account_banking_pain_base/models/account_payment_order.py @@ -98,15 +98,23 @@ class AccountPaymentOrder(models.Model): for unallowed_ascii_char in unallowed_ascii_chars: value = value.replace(unallowed_ascii_char, '-') except Exception: - line = eval_ctx.get('line') - if line: - raise UserError( - _("Cannot compute the '%s' of the Payment Line with " - "reference '%s'.") - % (field_name, line.name)) - else: - raise UserError( - _("Cannot compute the '%s'.") % field_name) + error_msg_prefix = _("Cannot compute the field '{field_name}'.") \ + .format( + field_name=field_name) + + error_msg_details_list = self.except_messages_prepare_field( + eval_ctx, field_name) + error_msg_data = _("Data for evaluation:\n" + "\tcontext: {eval_ctx}\n" + "\tfield path: {field_value}") \ + .format( + eval_ctx=eval_ctx, + field_value=field_value) + raise UserError('\n'.join( + [error_msg_prefix] + + error_msg_details_list + + [error_msg_data])) + if not isinstance(value, str): raise UserError( _("The type of the field '%s' is %s. It should be a string " @@ -120,6 +128,25 @@ class AccountPaymentOrder(models.Model): value = value[0:max_size] return value + @api.model + def except_messages_prepare_field(self, eval_ctx, field_name): + """ + Inherit this method to provide more detailed error messages for + exceptions to be raised while evaluating `field_name` using `eval_ctx`. + :return: List containing the error messages. + """ + error_messages = list() + line = eval_ctx.get('line') + if line: + error_messages.append( + _("Payment Line has reference '%s'.") % line.name) + partner_bank = eval_ctx.get('partner_bank') + if partner_bank: + error_messages.append( + _("Partner's bank account is '%s'.") + % partner_bank.display_name) + return error_messages + @api.model def _validate_xml(self, xml_string, gen_args): xsd_etree_obj = etree.parse( @@ -419,15 +446,16 @@ class AccountPaymentOrder(models.Model): In some localization (l10n_ch_sepa for example), they need the bank_line argument""" assert order in ('B', 'C'), "Order can be 'B' or 'C'" + party_type_label = _("Partner name") if party_type == 'Cdtr': - party_type_label = 'Creditor' + party_type_label = _("Creditor name") elif party_type == 'Dbtr': - party_type_label = 'Debtor' + party_type_label = _("Debtor name") name = 'partner_bank.partner_id.name' eval_ctx = {'partner_bank': partner_bank} party_name = self._prepare_field( - '%s Name' % party_type_label, name, eval_ctx, - gen_args.get('name_maxsize'), gen_args=gen_args) + party_type_label, name, eval_ctx, gen_args.get('name_maxsize'), + gen_args=gen_args) # At C level, the order is : BIC, Name, IBAN # At B level, the order is : Name, IBAN, BIC if order == 'C':