diff --git a/account_banking_uk_hsbc/data/banking_export_hsbc.xml b/account_banking_uk_hsbc/data/banking_export_hsbc.xml index 76a6e3cb5..d6cc30e93 100644 --- a/account_banking_uk_hsbc/data/banking_export_hsbc.xml +++ b/account_banking_uk_hsbc/data/banking_export_hsbc.xml @@ -17,5 +17,13 @@ + + Priority Payment + not used + + + diff --git a/account_banking_uk_hsbc/wizard/export_hsbc.py b/account_banking_uk_hsbc/wizard/export_hsbc.py index 1e70dc547..50f12de9c 100644 --- a/account_banking_uk_hsbc/wizard/export_hsbc.py +++ b/account_banking_uk_hsbc/wizard/export_hsbc.py @@ -225,7 +225,8 @@ class banking_export_hsbc_wizard(osv.osv_memory): dest_account, transaction_kwargs = self._create_account(line.bank_id) means = {'ACH or EZONE': paymul.MEANS_ACH_OR_EZONE, - 'Faster Payment': paymul.MEANS_FASTER_PAYMENT}.get(line.order_id.mode.type.name) + 'Faster Payment': paymul.MEANS_FASTER_PAYMENT, + 'Priority Payment': paymul.MEANS_PRIORITY_PAYMENT}.get(line.order_id.mode.type.name) if means is None: raise osv.except_osv('Error', "Invalid payment type mode for HSBC '%s'" % line.order_id.mode.type.name) diff --git a/account_banking_uk_hsbc/wizard/paymul.py b/account_banking_uk_hsbc/wizard/paymul.py index c9f6c1178..304afeca5 100644 --- a/account_banking_uk_hsbc/wizard/paymul.py +++ b/account_banking_uk_hsbc/wizard/paymul.py @@ -373,39 +373,76 @@ class Batch(LogicalSection): if not edifact_digits(index, 6, 1): raise ValueError("Index must be 6 digits or less: " + str(index)) + # Store the payment means + means = None + if len(self.transactions)>0: + means = self.transactions[0].means + segments = [] - segments.append([ - ['LIN'], - [index], - ]) - segments.append([ - ['DTM'], - [203, self.exec_date.strftime('%Y%m%d'), 102], - ]) - segments.append([ - ['RFF'], - ['AEK', self.reference], - ]) - - #currencies = set([x.currency for x in self.transactions]) - #if len(currencies) > 1: - # raise ValueError("All transactions in a batch must have the same currency") - - #segments.append([ - # ['MOA'], - # [9, self.amount().quantize(Decimal('0.00')), currencies.pop()], - #]) - segments.append(self.debit_account.fii_or_segment()) - segments.append([ - ['NAD'], - ['OY'], - [''], - self.name_address.upper().split("\n")[0:5], - ]) + if means != MEANS_PRIORITY_PAYMENT: + segments.append([ + ['LIN'], + [index], + ]) + segments.append([ + ['DTM'], + [203, self.exec_date.strftime('%Y%m%d'), 102], + ]) + segments.append([ + ['RFF'], + ['AEK', self.reference], + ]) + + currencies = set([x.currency for x in self.transactions]) + if len(currencies) > 1: + raise ValueError("All transactions in a batch must have the same currency") + + segments.append([ + ['MOA'], + [9, self.amount().quantize(Decimal('0.00')), currencies.pop()], + ]) + segments.append(self.debit_account.fii_or_segment()) + segments.append([ + ['NAD'], + ['OY'], + [''], + self.name_address.upper().split("\n")[0:5], + ]) for index, transaction in enumerate(self.transactions): - segments += transaction.segments(index + 1) + if transaction.means == MEANS_PRIORITY_PAYMENT: + # Need a debit-credit format for Priority Payments + segments.append([ + ['LIN'], + [index+1], + ]) + segments.append([ + ['DTM'], + [203, self.exec_date.strftime('%Y%m%d'), 102], + ]) + segments.append([ + ['RFF'], + ['AEK', self.reference], + ]) + + # Use the transaction amount and currency for the debit line + segments.append([ + ['MOA'], + [9, transaction.amount.quantize(Decimal('0.00')), transaction.currency], + ]) + segments.append(self.debit_account.fii_or_segment()) + segments.append([ + ['NAD'], + ['OY'], + [''], + self.name_address.upper().split("\n")[0:5], + ]) + use_index = 1 + else: + use_index = index + 1 + + segments += transaction.segments(use_index) return segments