]> git.ipfire.org Git - thirdparty/python-fints.git/commitdiff
Add DKKKU based on a cursory reverse engineering and guessing. Untested though
authorHenryk Plötz <henryk@ploetzli.ch>
Mon, 27 Aug 2018 17:42:33 +0000 (19:42 +0200)
committerRaphael Michel <mail@raphaelmichel.de>
Mon, 3 Dec 2018 18:34:29 +0000 (19:34 +0100)
fints/client.py
fints/formals.py
fints/segments/statement.py

index b51ded2c748f0de450690aa0a99934071bf26f5b..d421b47fc9cfb0e212ba0b5582aa73d2ff6b3d4f 100644 (file)
@@ -31,7 +31,7 @@ from .segments.depot import HKWPD5, HKWPD6
 from .segments.dialog import HISYN4, HKSYN3
 from .segments.debit import HKDSE1, HKDSE2, HKDME1, HKDME2, HKDMC1, HKDBS1, HKDBS2, HKDMB1
 from .segments.saldo import HKSAL5, HKSAL6, HKSAL7
-from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7
+from .segments.statement import HKKAZ5, HKKAZ6, HKKAZ7, DKKKU2
 from .segments.transfer import HKCCM1, HKCCS1
 from .segments.journal import HKPRO3, HKPRO4
 from .types import SegmentSequence
@@ -319,6 +319,25 @@ class FinTS3Client:
 
         return statement
 
+    def get_credit_card_statement(self, account: SEPAAccount, credit_card_number: str, start_date: datetime.date, end_date: datetime.date):
+        # FIXME Reverse engineered, probably wrong
+        with self._get_dialog() as dialog:
+            dkkku = self._find_highest_supported_command(DKKKU2)
+
+            responses = self._fetch_with_touchdowns(
+                dialog,
+                lambda touchdown: dkkku(
+                    account=dkkku._fields['account'].type.from_sepa_account(account) if account else None,
+                    credit_card_number=credit_card_number,
+                    date_start=start_date,
+                    date_end=end_date,
+                    touchdown_point=touchdown,
+                ),
+                'DIKKU'
+            )
+
+        return responses
+
     def get_balance(self, account: SEPAAccount):
         """
         Fetches an accounts current balance.
index 3e0ee758db2cc45325b1f13904539b1f142dd7fd..e92f01cc1216af8e9706bcb5b3a56b2f305ed1aa 100644 (file)
@@ -791,6 +791,14 @@ class QueryScheduledBatchDebitParameter1(DataElementGroup):
     max_number_responses_allowed = DataElementField(type='jn', _d="Eingabe Anzahl Einträge erlaubt")
     date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich")
 
+class QueryCreditCardStatements2(DataElementGroup):
+    """Parameter Kreditkartenumsätze anfordern, version 2
+
+    Source: reverse engineered"""
+    cutoff_days = DataElementField(type='num', max_length=4, _d="Maximale Vorhaltezeit der Umsätze")
+    max_number_responses_allowed = DataElementField(type='jn', _d="Eingabe Anzahl Einträge erlaubt")
+    date_range_allowed = DataElementField(type='jn', _d="Zeitraum möglich")
+
 class SEPACCode1(RepresentableEnum):
     REVERSAL = '1' #: Reversal
     REVOCATION = '2' #: Revocation
index 8185c72879221b4d28c3d669437d08bf06e85181..0cb5651e3932e197de15c0ae8827d66618517466 100644 (file)
@@ -2,10 +2,10 @@ from fints.utils import fints_escape
 
 from fints.fields import DataElementField, DataElementGroupField
 from fints.formals import (
-    KTI1, Account3, Account2
+    KTI1, Account3, Account2, QueryCreditCardStatements2
 )
 
-from . import FinTS3Segment
+from . import FinTS3Segment, ParameterSegment
 
 
 
@@ -65,3 +65,28 @@ class HIKAZ7(FinTS3Segment):
     Source: FinTS Financial Transaction Services, Schnittstellenspezifikation, Messages -- Multibankfähige Geschäftsvorfälle """
     statement_booked = DataElementField(type='bin', _d="Gebuchte Umsätze")
     statement_pending = DataElementField(type='bin', required=False, _d="Nicht gebuchte Umsätze")
+
+
+class DKKKU2(FinTS3Segment):
+    """Kreditkartenumsätze anfordern, version 2
+
+    Source: Reverse engineered"""
+    account = DataElementGroupField(type=Account2, _d="Kontoverbindung Auftraggeber")
+    credit_card_number = DataElementField(type='an', _d="Kreditkartennummer")
+    subaccount = DataElementField(type='an', required=False, _d="Subaccount?")
+    date_start = DataElementField(type='dat', required=False, _d="Von Datum")
+    date_end = DataElementField(type='dat', required=False, _d="Bis Datum")
+    max_number_responses = DataElementField(type='num', max_length=4, required=False, _d="Maximale Anzahl Einträge")
+    touchdown_point = DataElementField(type='an', max_length=35, required=False, _d="Aufsetzpunkt")
+
+
+class DIKKU2(FinTS3Segment):
+    """Kreditkartenumsätze rückmelden, version 2
+
+    Source: Reverse engineered"""
+
+class DIKKUS2(ParameterSegment):
+    """Kreditkartenumsätze anfordern Parameter, version 2
+
+    Source: Reverse engineered"""
+    parameter = DataElementGroupField(type=QueryCreditCardStatements2, _d="Parameter Kreditkartenumsätze anfordern")