gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libeufin] branch master updated: Extract data from CAMT.053 returned by


From: gnunet
Subject: [libeufin] branch master updated: Extract data from CAMT.053 returned by the bank.
Date: Thu, 26 Mar 2020 10:38:16 +0100

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository libeufin.

The following commit(s) were added to refs/heads/master by this push:
     new 3b548a6  Extract data from CAMT.053 returned by the bank.
3b548a6 is described below

commit 3b548a61b61f3308cff2d54b20edb5636a354a98
Author: Marcello Stanisci <address@hidden>
AuthorDate: Thu Mar 26 10:37:30 2020 +0100

    Extract data from CAMT.053 returned by the bank.
---
 nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt   |  1 +
 nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt | 38 ++++++++++++++++++++---
 util/src/main/kotlin/zip.kt                       |  6 ++--
 3 files changed, 38 insertions(+), 7 deletions(-)

diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt
index c0552ac..2013351 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/DB.kt
@@ -18,6 +18,7 @@ object EbicsRawBankTransactionsTable : IdTable<Long>() {
     val nexusSubscriber = reference("subscriber", EbicsSubscribersTable)
     // How did we learn about this transaction?  C52 / C53 / C54
     val sourceType = text("sourceType")
+    // Name of the ZIP entry
     val sourceFileName = text("sourceFileName")
     // "Subject" of the SEPA transaction
     val unstructuredRemittanceInformation = 
text("unstructuredRemittanceInformation")
diff --git a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt 
b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
index 010fbfb..ea7134d 100644
--- a/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
+++ b/nexus/src/main/kotlin/tech/libeufin/nexus/Main.kt
@@ -643,11 +643,39 @@ fun main() {
                          * at all.
                          */
                         response.orderData.unzipWithLoop {
-                            // parse the camt.053 here, and persist into 
database.
-                            val camt53doc = XMLUtil.parseStringIntoDom(it)
-                            val creditorIban = 
XMLUtil.getStringViaXpath(camt53doc, "//CdtrAcct/Id/IBAN")
-                            val creditOrDebit = 
XMLUtil.getStringViaXpath(camt53doc, "//Ntry/CdtDbtInd")
-                            logger.debug("Creditor IBAN: $creditorIban, 
credit-or-debit: $creditOrDebit")
+                            val fileName = it.first
+                            val camt53doc = 
XMLUtil.parseStringIntoDom(it.second)
+                            val creditorIban = XMLUtil.getStringFromXpath(
+                                camt53doc,
+                                
"//*[local-name()='CdtrAcct']//*[local-name()='IBAN']"
+                            )
+                            val debitorIban = XMLUtil.getStringFromXpath(
+                                camt53doc,
+                                
"//*[local-name()='DbtrAcct']//*[local-name()='IBAN']"
+                            )
+                            val creditOrDebit = XMLUtil.getStringFromXpath(
+                                camt53doc,
+                                
"//*[local-name()='Ntry']//*[local-name()='CdtDbtInd']"
+                            )
+                            val amount = XMLUtil.getNodeFromXpath(
+                                camt53doc,
+                                
"//*[local-name()='Ntry']//*[local-name()='Amt']"
+                            )
+                            val subject = XMLUtil.getStringFromXpath(
+                                camt53doc,
+                                
"//*[local-name()='RmtInf']//*[local-name()='Ustrd']"
+                            )
+                            val currency = 
amount?.attributes?.getNamedItem("Ccy")?.nodeValue
+
+                            println(
+                                "####" +
+                                        "\n\tCreditor IBAN: $creditorIban," +
+                                        "\n\tDebitor IBAN: $debitorIban," +
+                                        "\n\tCurrency: $currency," +
+                                        "\n\tAmount: 
${amount?.firstChild?.nodeValue}" +
+                                        "\n\tSubject: $subject," +
+                                        "\n\tFile name: $fileName"
+                            )
                         }
                         call.respondText(
                             "C53 data persisted into the database (WIP).",
diff --git a/util/src/main/kotlin/zip.kt b/util/src/main/kotlin/zip.kt
index 0c6d739..e64d81b 100644
--- a/util/src/main/kotlin/zip.kt
+++ b/util/src/main/kotlin/zip.kt
@@ -37,10 +37,12 @@ fun ByteArray.prettyPrintUnzip(): String {
     return s.toString()
 }
 
-fun ByteArray.unzipWithLoop(process: (String) -> Unit) {
+fun ByteArray.unzipWithLoop(process: (Pair<String, String>) -> Unit) {
     val mem = SeekableInMemoryByteChannel(this)
     val zipFile = ZipFile(mem)
     zipFile.getEntriesInPhysicalOrder().iterator().forEach {
-        
process(zipFile.getInputStream(it).readAllBytes().toString(Charsets.UTF_8))
+        process(
+            Pair(it.name, 
zipFile.getInputStream(it).readAllBytes().toString(Charsets.UTF_8))
+        )
     }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]