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