import re
import datetime
+from decimal import Decimal
+
from .connection import FinTSHTTPSConnection
from .dialog import FinTSDialog
from .message import FinTSMessage
from .message import FinTSResponse
from .utils import mt940_to_array, MT535_Miniparser, split_for_data_groups, split_for_data_elements, Password
from mt940.models import Balance
+from sepaxml import SepaTransfer
logger = logging.getLogger(__name__)
return 'Ok'
- def create_sepa_transfer(self, account, arg):
- # Diese Funktion erstellt eine neue SEPA-Überweisung
- self.tan_bezeichnung = arg['TAN-Bezeichnung']
+ def start_simple_sepa_transfer(self, account: SEPAAccount, tan_method, iban: str, bic: str, recipient_name: str,
+ amount: Decimal, account_name: str, reason: str, endtoend_id='NOTPROVIDED',
+ tan_description=''):
+ config = {
+ "name": account_name,
+ "IBAN": account.iban,
+ "BIC": account.bic,
+ "batch": False,
+ "currency": "EUR",
+ }
+ sepa = SepaTransfer(config, 'pain.001.001.03')
+ payment = {
+ "name": recipient_name,
+ "IBAN": iban,
+ "BIC": bic,
+ "amount": int(Decimal(amount) * 100), # in cents
+ "execution_date": datetime.date.today(),
+ "description": reason,
+ "endtoend_id": endtoend_id,
+ }
+ sepa.add_payment(payment)
+ xml = sepa.export().decode()
+ self.start_sepa_transfer(account, xml, tan_method, tan_description)
+
+ def start_sepa_transfer(self, account: SEPAAccount, pain_message: str, tan_method, tan_description=''):
dialog = self._new_dialog()
dialog.sync()
- # TAN-Verfahren für Dialoginitialisierung ändern
- dialog.tan_mechs = [arg['TAN-Verfahren']]
-
+ dialog.tan_mechs = [tan_method.security_feature]
dialog.init()
def _get_msg():
- segHKCCS = HKCCS(3, account, arg)
- segHKTAN = HKTAN(4, 4, '', self.tan_bezeichnung)
+ segHKCCS = HKCCS(3, account, pain_message)
+ segHKTAN = HKTAN(4, 4, '', tan_description)
return self._new_message(dialog, [
segHKCCS,
segHKTAN
response = {}
response['response'] = resp
response['dialog'] = dialog
-
return response
def get_tan_methods(self):
from . import FinTS3Segment
-import datetime
+from ..models import SEPAAccount
class HKCCS(FinTS3Segment):
"""
type = 'HKCCS'
- def __init__(self, segno, account, arg):
+ def __init__(self, segno, account: SEPAAccount, pain_msg):
self.version = 1
sepa_descriptor = 'urn?:iso?:std?:iso?:20022?:tech?:xsd?:pain.001.001.03'
- pain_msg = self.create_pain(account, arg)
msg = ':'.join([
account.iban,
account.bic
'@{}@{}'.format(len(pain_msg), pain_msg)
]
super().__init__(segno, data)
-
- def create_pain(self, account, arg):
- pain = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'
- pain += '<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03" ' \
- 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' \
- 'xsi:schemaLocation="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03 pain.001.001.03.xsd">'
- pain += '<CstmrCdtTrfInitn>'
- pain += '<GrpHdr>'
- pain += '<MsgId>' + datetime.datetime.now().isoformat()[:-2] + '</MsgId>'
- pain += '<CreDtTm>' + datetime.datetime.now().replace(microsecond=0).isoformat() + '</CreDtTm>'
- pain += '<NbOfTxs>1</NbOfTxs>'
- pain += '<CtrlSum>' + arg['CtrlSum'] + '</CtrlSum>'
- pain += '<InitgPty><Nm>' + arg['Nm'] + '</Nm></InitgPty>'
- pain += '</GrpHdr>'
- pain += '<PmtInf>'
- pain += '<PmtInfId>' + datetime.datetime.now().isoformat()[:-2] + '</PmtInfId>'
- pain += '<PmtMtd>TRF</PmtMtd><NbOfTxs>1</NbOfTxs>'
- pain += '<CtrlSum>' + arg['CtrlSum'] + '</CtrlSum>'
- pain += '<PmtTpInf><SvcLvl><Cd>SEPA</Cd></SvcLvl></PmtTpInf>'
- pain += '<ReqdExctnDt>1999-01-01</ReqdExctnDt>'
- pain += '<Dbtr><Nm>' + arg['Nm'] + '</Nm></Dbtr>'
- pain += '<DbtrAcct><Id><IBAN>' + account.iban + '</IBAN></Id></DbtrAcct>'
- pain += '<DbtrAgt><FinInstnId><BIC>' + account.bic + '</BIC></FinInstnId></DbtrAgt>'
- pain += '<ChrgBr>SLEV</ChrgBr>'
- pain += '<CdtTrfTxInf>'
- pain += '<PmtId><EndToEndId>NOTPROVIDED</EndToEndId></PmtId>'
- pain += '<Amt><InstdAmt Ccy="EUR">' + arg['CtrlSum'] + '</InstdAmt></Amt>'
- pain += '<CdtrAgt><FinInstnId><BIC>' + arg['DbtrAgt'] + '</BIC></FinInstnId></CdtrAgt>'
- pain += '<Cdtr><Nm>' + arg['Nm'] + '</Nm></Cdtr>'
- pain += '<CdtrAcct><Id><IBAN>' + arg['DbtrAcct'] + '</IBAN></Id></CdtrAcct>'
- pain += '<RmtInf><Ustrd>' + arg['Ustrd'] + '</Ustrd></RmtInf>'
- pain += '</CdtTrfTxInf>'
- pain += '</PmtInf>'
- pain += '</CstmrCdtTrfInitn>'
- pain += '</Document>'
-
- return pain