Timas, Fremdwährungen, Asfinag

This commit is contained in:
2023-09-19 15:32:15 +02:00
parent 6ed2f79fe0
commit dae5b4da77
14 changed files with 3126 additions and 651 deletions

View File

@@ -1,7 +1,10 @@
Imports System.Data.SqlClient
Imports System.IO
Imports System.Reflection
Imports System.Security.Cryptography
Imports com.itextpdf.text.pdf
Imports DocumentFormat.OpenXml.VariantTypes
Imports RoutineManager.cAsfinag
Public Class cAsfinag
@@ -165,7 +168,7 @@ Public Class cAsfinag
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKFileName", PKFileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("PKLine", PKLine))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RecordType", recordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("RecordType", RecordType))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileVersion", fileVersion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fileNumber", fileNumber))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cardNumber", cardNumber))
@@ -812,4 +815,423 @@ Public Class cAsfinag
End Function
Public Class Exportist
Structure Header ' Format Muss von bis Kommentar
Dim SortField As String ' N3 Y 1 3 "000"
Dim RecordID As String ' N2 Y 4 5 "00"
Dim FileName As String ' C3 Y 6 8 "TBL"
Dim LiveTestIndicator As String ' C1 Y 9 9 "L" oder "T"
Dim FileCreationDate As String ' N8 Y 10 17 YYYYMMDD
Dim FileCreationTime As String ' N4 Y 18 21 HHMM (24hr)
Dim RunNumber As String ' N3 Y 22 24 Laufende Nummer pro File-Type
Dim SenderID As String ' C2 Y 25 26 "VG"
Dim ReceiverID As String ' C2 Y 27 28 "EP"
Dim Filler As String ' C3 Y 29 31 Leerzeichen
End Structure
Structure Body ' Format Muss von bis Kommentar
Dim SortField As String ' N3 Y 1 3 "000"
Dim RecordID As String ' N2 Y 4 5 "50"
Dim ISOCountryCode As String ' N3 Y 6 8 "040" (Österreich)
Dim CardNumber As String ' C22 Y 9 30 Komplette Tankkartennummer
'onlyBlacklist
Dim StopType As String ' N1 Y 31 31 "3" Stopped for Post-Pay
'only Whitelist
Dim ValidFrom As String ' N8 Y 31 38 YYYYMMDD
Dim ValidTo As String ' N8 Y 39 46 YYYYMMDD
Dim NewCardNumber As String ' N22 N 47 68 Tankkartennummer der Folge- oder Ersatzkarte
Dim NewValidFrom As String ' N8 N 69 76 YYYYMMDD der Folge- oder Ersatzkarte
Dim NewValidTo As String
End Structure
Private Structure Trailer ' Format Muss von bis Kommentar
Dim SortField As String ' N3 Y 1 3 "999"
Dim RecordID As String ' N2 Y 4 5 "99"
Dim FileName As String ' C3 Y 6 8 "TBL"
Dim RunNumber As String ' N3 Y 9 11 Gleiche Nr. wie im Header
Dim RecordCount As String ' N7 Y 12 18 Anzahl der Sätze inkl. Header und Trailer
Dim Filler As String ' C13 Y 19 31 Leerzeichen
End Structure
' Private Type TWLHeader ' Format Muss von bis Kommentar
' SortField As String * 3 ' N3 Y 1 3 "000"
' RecordID As String * 2 ' N2 Y 4 5 "00"
' FileName As String * 3 ' C3 Y 6 8 "TWL"
' LiveTestIndicator As String * 1 ' C1 Y 9 9 "L" oder "T"
' FileCreationDate As String * 8 ' N8 Y 10 17 YYYYMMDD
' FileCreationTime As String * 4 ' N4 Y 18 21 HHMM (24hr)
' RunNumber As String * 3 ' N3 Y 22 24 Laufende Nummer pro File-Type
' SenderID As String * 2 ' C2 Y 25 26 "VG"
' ReceiverID As String * 2 ' C2 Y 27 28 "EP"
' Filler As String * 56 ' C56 Y 29 84 Leerzeichen
'End Type
'Private Type TWLBody ' Format Muss von bis Kommentar
' SortField As String * 3 ' N3 Y 1 3 "000"
' RecordID As String * 2 ' N2 Y 4 5 "40"
' ISOCountryCode As String * 3 ' N3 Y 6 8 "040" (Österreich)
' CardNumber As String * 22 ' N22 Y 9 30 Komplette Tankkartennummer
' ValidFrom As String * 8 ' N8 Y 31 38 YYYYMMDD
' ValidTo As String * 8 ' N8 Y 39 46 YYYYMMDD
' NewCardNumber As String * 22 ' N22 N 47 68 Tankkartennummer der Folge- oder Ersatzkarte
' NewValidFrom As String * 8 ' N8 N 69 76 YYYYMMDD der Folge- oder Ersatzkarte
' NewValidTo As String * 8 ' N8 N 77 84 YYYYMMDD der Folge- oder Ersatzkarte
'End Type
'Private Type TWLTrailer ' Format Muss von bis Kommentar
' SortField As String * 3 ' N3 Y 1 3 "999"
' RecordID As String * 2 ' N2 Y 4 5 "99"
' FileName As String * 3 ' C3 Y 6 8 "TWL"
' RunNumber As String * 3 ' N3 Y 9 11 Gleiche Nr. wie im Header
' RecordCount As String * 7 ' N7 Y 12 18 Anzahl der Sätze inkl. Header und Trailer
' Filler As String * 66 ' C66 Y 19 84 Leerzeichen
'End Type
Dim ASFINAG_PFAD, FTP_PFAD_TEST, FTP_PFAD
Dim sw As StreamWriter
Dim Dateiname = ""
Public Function initPFad()
ASFINAG_PFAD = cAsfinag.Paramter.GET_PARAM_ByName("BEREITSTELLUNGS_PFAD", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
FTP_PFAD_TEST = cAsfinag.Paramter.GET_PARAM_ByName("SERVER_Path_Out_Test", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
FTP_PFAD = cAsfinag.Paramter.GET_PARAM_ByName("SERVER_Path_Out", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
If Not IO.Directory.Exists(ASFINAG_PFAD) Then IO.Directory.CreateDirectory(ASFINAG_PFAD)
If Not IO.Directory.Exists(FTP_PFAD_TEST) Then IO.Directory.CreateDirectory(FTP_PFAD_TEST)
End Function
Public Function exportiereBlackList() As Boolean
Dim fileName = "TBL"
Dim sucess = False
Dim Header As Header
Dim Body As Body
Dim Trailer As Trailer
Dim intRunNumber As Integer = 1
Dim lngAnzahlSätze As Long
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
'qryExportiereBlackList
Dim sqlstr As String = "
SELECT Kreditkarten.KartenNr AS CardNumber, Kreditkarten.Kartensperre AS StopType FROM Kreditkarten
LEFT JOIN Kreditkarten AS Kreditkarten_1 ON Kreditkarten.NeueKartenNr = Kreditkarten_1.KartenNr
WHERE Kreditkarten.Kartensperre > 0
AND ((Kreditkarten.Kartensperrdatum)<=GETDATE())
AND ((Left([Kreditkarten].[KartenNr],6))='990001')
AND [Kreditkarten].[Kartenfreischaltungsdatum] <= GETDATE()
And [Kreditkarten].[Kartenfreischaltungsdatum] <> ''
AND DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))) >= GETDATE()
AND DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))) <> ''
AND (Kreditkarten_1.Kartenfreischaltungsdatum) Is Null Or (Kreditkarten_1.Kartenfreischaltungsdatum) > GETDATE()
ORDER BY Kreditkarten.KartenNr"
Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL")
'qry_ASFINAG_FileInfo_TBL
Dim currentFileNr As Integer = SQL.getValueTxtBySql("SELECT fileVersion FROM [FileINfo] where [filename]='" & fileName & "'", "ASFINAG")
If currentFileNr = 999 Then currentFileNr = 0
currentFileNr = currentFileNr + 1
Dim preFilename As String = ""
If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
preFilename = "LVGEP"
Else
preFilename = "TVGEP"
End If
Dim strFile As String = ASFINAG_PFAD & "\" & preFilename & fileName & "." & currentFileNr
Try
'Dim fileExists As Boolean = File.Exists(ASFINAG_PFAD & "\" & strFile)
Using sw As New StreamWriter(File.Open(strFile, FileMode.OpenOrCreate))
With Header
.SortField = "000"
.RecordID = "00"
.FileName = fileName
.LiveTestIndicator = "L" 'T für Testfile, L Livesystem
.FileCreationDate = Today.ToString("yyyymmdd")
.FileCreationTime = Now().ToString("hhmm")
.RunNumber = Format(currentFileNr, "000")
.SenderID = "VG"
.ReceiverID = "EP"
.Filler = New String(" ", 3)
sw.Write(Header.SortField)
sw.Write(Header.RecordID)
sw.Write(Header.FileName)
sw.Write(Header.LiveTestIndicator)
sw.Write(Header.FileCreationDate)
sw.Write(Header.FileCreationTime)
sw.Write(Header.RunNumber)
sw.Write(Header.SenderID)
sw.Write(Header.ReceiverID)
sw.Write(Header.Filler)
sw.WriteLine()
End With
lngAnzahlSätze = 1
For Each row As DataRow In dt.Rows
lngAnzahlSätze = lngAnzahlSätze + 1
With Body
.SortField = "000"
.RecordID = "50"
.ISOCountryCode = "040"
.CardNumber = row.Item("CardNumber") + New String(" ", 22 - Len(row.Item("CardNumber")))
.StopType = row.Item("StopType")
sw.Write(Body.SortField)
sw.Write(Body.RecordID)
sw.Write(Body.ISOCountryCode)
sw.Write(Body.CardNumber)
sw.Write(Body.StopType)
sw.WriteLine()
End With
Next
lngAnzahlSätze = lngAnzahlSätze + 1
With Trailer
.SortField = "999"
.RecordID = "99"
.FileName = "TBL"
.RunNumber = Format(currentFileNr, "000")
.RecordCount = Format(lngAnzahlSätze, "0000000")
.Filler = New String(" ", 13)
sw.Write(Trailer.SortField)
sw.Write(Trailer.RecordID)
sw.Write(Trailer.FileName)
sw.Write(Trailer.RunNumber)
sw.Write(Trailer.RecordCount)
sw.Write(Trailer.Filler)
sw.WriteLine()
End With
sw.Close()
SQL.doSQL("UPDATE [dbo].[FileINfo] SET FileVersion=" & currentFileNr & " WHERE [filename]='" & fileName & "'", "ASFINAG")
MsgBox("Files uploaded: " & uploadListToFTP(fileName))
Return True
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
Public Function exportiereWhiteList() As Boolean
Dim fileName = "TWL"
Dim sucess = False
Dim Header As Header
Dim Body As Body
Dim Trailer As Trailer
Dim intRunNumber As Integer = 1
Dim lngAnzahlSätze As Long
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
'qryExportiereWhiteList
Dim sqlstr As String = "
SELECT Kreditkarten.KartenNr AS CardNumber,
CONVERT(varchar, [Kreditkarten].[Kartenfreischaltungsdatum],112) AS ValidFrom,
CONVERT(varchar,DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))),112) AS ValidTo,
Kreditkarten_1.KartenNr AS NewCardNumber,
IIf(Not IsNull(Kreditkarten_1.KartenNr,0) <> 0 ,CONVERT(varchar,[Kreditkarten_1].[Kartenfreischaltungsdatum],112),'') AS NewValidFrom,
IIf(Not IsNull(Kreditkarten_1.KartenNr,0) <> 0,CONVERT(varchar, DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))),112),'') AS NewValidTo,
Kreditkarten.NeueKartenNrGemeldet
FROM Kreditkarten AS Kreditkarten_1
RIGHT JOIN Kreditkarten ON Kreditkarten_1.KartenNr = Kreditkarten.NeueKartenNr
WHERE (([Kreditkarten].[Kartenfreischaltungsdatum])<= GETDATE() And ([Kreditkarten].[Kartenfreischaltungsdatum] <>'')
AND DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))) >= GETDATE()
AND ((Kreditkarten_1.KartenNr) Is Null)) OR (((Kreditkarten_1.KartenNr) Is Not Null) AND ((Kreditkarten.NeueKartenNrGemeldet)= 0))
ORDER BY Kreditkarten.KartenNr, [Kreditkarten].[Kartenfreischaltungsdatum], CONVERT(varchar, DateAdd(DAY, -1, DateAdd(MONTH,1,DATEFROMPARTS(2000 + [Kreditkarten].[Kartenablaufjahr],[Kreditkarten].[Kartenablaufmonat],1))))
"
Dim dt As DataTable = SQL.loadDgvBySql_Param(sqlstr, "FMZOLL")
'qry_ASFINAG_FileInfo_TWL
Dim currentFileNr As Integer = SQL.getValueTxtBySql("SELECT fileVersion FROM [FileINfo] where [filename]='" & fileName & "'", "ASFINAG")
If currentFileNr = 999 Then currentFileNr = 0
currentFileNr = currentFileNr + 1
Dim preFilename As String = ""
If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
preFilename = "LVGEP"
Else
preFilename = "TVGEP"
End If
Dim strFile As String = ASFINAG_PFAD & "\" & preFilename & fileName & "." & currentFileNr
Try
Using sw As New StreamWriter(File.Open(strFile, FileMode.OpenOrCreate))
With Header
.SortField = "000"
.RecordID = "00"
.FileName = fileName
.LiveTestIndicator = "L" 'T für Testfile, L Livesystem
.FileCreationDate = Today.ToString("yyyymmdd")
.FileCreationTime = Now().ToString("hhmm")
.RunNumber = Format(currentFileNr, "000")
.SenderID = "VG"
.ReceiverID = "EP"
.Filler = New String(" ", 56)
sw.Write(Header.SortField)
sw.Write(Header.RecordID)
sw.Write(Header.FileName)
sw.Write(Header.LiveTestIndicator)
sw.Write(Header.FileCreationDate)
sw.Write(Header.FileCreationTime)
sw.Write(Header.RunNumber)
sw.Write(Header.SenderID)
sw.Write(Header.ReceiverID)
sw.Write(Header.Filler)
sw.WriteLine()
End With
lngAnzahlSätze = 1
For Each row As DataRow In dt.Rows
lngAnzahlSätze = lngAnzahlSätze + 1
With Body
If Not IsDBNull(row.Item("NewCardNumber")) Then
If Not row.Item("NeueKartenNrGemeldet") Then
lngAnzahlSätze = lngAnzahlSätze + 1
.SortField = "000"
.RecordID = "40"
.ISOCountryCode = "040"
.CardNumber = row.Item("CardNumber") + New String(" ", 22 - Len(row.Item("CardNumber")))
.ValidFrom = row.Item("ValidFrom")
.ValidTo = row.Item("ValidTo")
.NewCardNumber = row.Item("NewCardNumber") + New String(" ", 22 - Len(row.Item("NewCardNumber")))
.NewValidFrom = row.Item("NewValidFrom")
.NewValidTo = row.Item("NewValidTo")
sw.Write(.SortField)
sw.Write(.RecordID)
sw.Write(.ISOCountryCode)
sw.Write(.CardNumber)
sw.Write(.ValidFrom)
sw.Write(.ValidTo)
sw.Write(.NewCardNumber)
sw.Write(.NewValidFrom)
sw.Write(.NewValidTo)
sw.WriteLine()
row.Item("NeueKartenNrGemeldet") = True
End If
Else
lngAnzahlSätze = lngAnzahlSätze + 1
.SortField = "000"
.RecordID = "40"
.ISOCountryCode = "040"
.CardNumber = row.Item("CardNumber") + New String(" ", 22 - Len(row.Item("CardNumber")))
.ValidFrom = row.Item("ValidFrom")
.ValidTo = row.Item("ValidTo")
.NewCardNumber = "0000000000000000000000"
.NewValidFrom = "00000000"
.NewValidTo = "00000000"
sw.Write(.SortField)
sw.Write(.RecordID)
sw.Write(.ISOCountryCode)
sw.Write(.CardNumber)
sw.Write(.ValidFrom)
sw.Write(.ValidTo)
sw.Write(.NewCardNumber)
sw.Write(.NewValidFrom)
sw.Write(.NewValidTo)
sw.WriteLine()
End If
End With
Next
lngAnzahlSätze = lngAnzahlSätze + 1
With Trailer
.SortField = "999"
.RecordID = "99"
.FileName = "TBL"
.RunNumber = Format(currentFileNr, "000")
.RecordCount = Format(lngAnzahlSätze, "0000000")
.Filler = New String(" ", 13)
sw.Write(Trailer.SortField)
sw.Write(Trailer.RecordID)
sw.Write(Trailer.FileName)
sw.Write(Trailer.RunNumber)
sw.Write(Trailer.RecordCount)
sw.Write(Trailer.Filler)
sw.WriteLine()
End With
sw.Close()
SQL.doSQL("UPDATE [dbo].[FileINfo] SET FileVersion=" & currentFileNr & " WHERE [filename]='" & fileName & "'", "ASFINAG")
MsgBox("Files uploaded: " & uploadListToFTP(fileName))
Return True
End Using
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
Public Function uploadListToFTP(filename As String) As Integer
Dim cnt = 0
Try
Dim SERVER_Path = ""
If VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
SERVER_Path = Me.FTP_PFAD_TEST
Else
SERVER_Path = Me.FTP_PFAD
End If
For Each f In IO.Directory.GetFiles(ASFINAG_PFAD)
Dim fi As New IO.FileInfo(f)
If Not fi.Name.StartsWith(".") AndAlso fi.Name.Contains(filename) Then
Dim zielPfad = SERVER_Path
'While IO.File.Exists(zielPfad)
' zielPfad = SERVER_Path & "\" & Now.ToString("yyyyMMdd_HHmmss_") & fi.Name
'End While
IO.File.Copy(f, zielPfad & "\" & fi.Name)
If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then
If IO.File.Exists(zielPfad) Then IO.File.Delete(f)
End If
cnt += 1
End If
Next
Return cnt
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return cnt
End Function
End Class
End Class