Asfinag_Datenaustausch

This commit is contained in:
2023-08-30 17:19:36 +02:00
parent 8f5fa223a5
commit 6ed2f79fe0
6 changed files with 778 additions and 485 deletions

View File

@@ -4,6 +4,10 @@ Imports System.Xml
Imports Renci.SshNet
Imports System.Net
Imports System.Text
Imports System.ComponentModel
Imports RoutineManager.cAsfinag
Imports DocumentFormat.OpenXml.Drawing.Charts
Imports DocumentFormat.OpenXml.VariantTypes
Public Class frmAsfinag_NachrichtenVerabeitung
Dim cntDatenEingelesen As Integer = 0
@@ -19,22 +23,23 @@ Public Class frmAsfinag_NachrichtenVerabeitung
Dim PARTNERSYSTEM = "ASFINAG"
Dim SERVER_Path = ""
Dim SERVER_Path_TEST = ""
' Dim BOX_VERSION = "8.8"
Dim FileType As String
Dim Dateiname = ""
Sub New()
Sub New(FileType)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
Me.FileType = FileType
End Sub
Sub New(allowClose) 'autostart
Sub New(FileType, allowClose) 'autostart
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
FileType = FileType
Me.allowClose = allowClose
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
@@ -52,6 +57,8 @@ Public Class frmAsfinag_NachrichtenVerabeitung
If Not IO.Directory.Exists(ZIEL_PFAD) Then IO.Directory.CreateDirectory(ZIEL_PFAD)
If Not IO.Directory.Exists(ERROR_PFAD) Then IO.Directory.CreateDirectory(ERROR_PFAD)
'Me.BOX_VERSION = NCTSTR_Worker.cDY_Paramter.GET_PARAM_ByName("BOX_VERSION", VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM)
End Sub
@@ -59,17 +66,28 @@ Public Class frmAsfinag_NachrichtenVerabeitung
Private Sub frmDYNachrichtenVerarbeitung_Load(sender As Object, e As EventArgs) Handles Me.Load
initPfade()
For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
ListBox3.Items.Add(frmStartOptions.cut_file(d))
Me.Refresh()
Next
If FileType <> "" Then
Label2.Text &= " " & FileType
For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
Dim filename = frmStartOptions.cut_file(d)
If filename.ToLower.Contains(FileType) Then
ListBox3.Items.Add(filename)
End If
Me.Refresh()
Next
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Me.Enabled = False
Try
Label9.Visible = True
Dim cnt = getNachrichtenDatenFromAsfinagServices()
Dim cnt = getNachrichtenDatenFromFTP()
Label9.Text = cnt & " Datensätze empfangen."
Catch ex As Exception
@@ -99,7 +117,7 @@ Public Class frmAsfinag_NachrichtenVerabeitung
End Sub
Function getNachrichtenDatenFromAsfinagServices() As Integer
Function getNachrichtenDatenFromFTP() As Integer
Dim cnt = 0
Try
Dim SERVER_Path = ""
@@ -125,9 +143,16 @@ Public Class frmAsfinag_NachrichtenVerabeitung
If IO.File.Exists(zielPfad) Then IO.File.Delete(f)
End If
ListBox3.Items.Add(frmStartOptions.cut_file((New FileInfo(zielPfad)).Name)) 'zur Liste hinzufügen
Dim filename = frmStartOptions.cut_file((New FileInfo(zielPfad)).Name)
If filename.ToLower.Contains(FileType) Then
ListBox3.Items.Add(filename)
cnt += 1
End If
'ListBox3.Items.Add(frmStartOptions.cut_file((New FileInfo(zielPfad)).Name)) 'zur Liste hinzufügen
cnt += 1
End If
Next
@@ -142,7 +167,7 @@ Public Class frmAsfinag_NachrichtenVerabeitung
End Function
Function getNachrichtenDatenFromMAVIServices_ALTERNATIV() As Integer
Function getNachrichtenDatenFromAsfinag_ALTERNATIV() As Integer
Dim cnt = 0
Try
For Each f In IO.Directory.GetFiles(ASFINAG_PFAD)
@@ -260,7 +285,7 @@ Public Class frmAsfinag_NachrichtenVerabeitung
Sub DatenEinlesen()
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.MAIL
VERAG_PROG_ALLGEMEIN.cAllgemein.ERR_OP_GLOBAL = VERAG_PROG_ALLGEMEIN.ERROR_OP.SHOW
If ListBox3.Items.Count = 0 Then
Label6.Text = "Keine Daten zum Einlesen vorhanden."
@@ -269,142 +294,81 @@ Public Class frmAsfinag_NachrichtenVerabeitung
End If
For NACHRICHTENTYP = 1 To 10 'Nach Nachrichtentyp abarbeteiten
For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
For Each d In System.IO.Directory.GetFiles(VERARBEITUNGS_PFAD)
Try
Dateiname = d
cWorker_NCTS.Dateiname = d
If IO.File.Exists(d) Then
Dim found = False
Dim nr_id As Integer = -1
Dim fi As FileInfo = New FileInfo(d)
If Not fi.Name.StartsWith(".") Then
Dim alreadyMoved = False
Dim NACHRICHTENTYP_notfound = False
If fi.Extension.ToLower = ".xml" Then
Dim xmlWriterSettings As XmlWriterSettings = New XmlWriterSettings With {.Encoding = System.Text.Encoding.UTF8, .CheckCharacters = True}
Dim doc As New XmlDocument()
Dim XML_Code = System.IO.File.ReadAllText(d, System.Text.UTF8Encoding.Default)
doc.LoadXml(SanitizeXmlString(XML_Code))
Dim VERSION As String = ""
'------------------------------------------------------------------------------------------------------------------------------
' eZOLL
'------------------------------------------------------------------------------------------------------------------------------
Try
Dim correctFile As Boolean = False
For Each i In ListBox3.Items
Dim fileName As FileInfo = New FileInfo(d)
If Equals(fileName.Name, i) Then
correctFile = True
Exit For
End If
Next
'------------------------------------------
'------------------ Anmeldung ------------------
'------------------------------------------
'MAVI: CC015B - Versandanmeldung Final
Select Case NACHRICHTENTYP
Case 1
'NCTS: Versandanmeldung
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_VersandanmeldungXML_CC015B(doc) Then
If cMAVIWorker.readNCTS_VersandanmeldungXML_CC015B(PARTNERSYSTEM, Me, doc, nr_id, d) <> "" Then found = True
End If
Case 2
'NCTS: Versandanmeldung - Ergänzung GUID
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_VersandanmeldungXML_CC015B_RES(doc) Then
If cMAVIWorker.readNCTS_VersandanmeldungXML_CC015B_RES(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 3
'NCTS: BestätigungZoll
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_BestaetigungZollXML_CC029B(doc) Then
If cMAVIWorker.readNCTS_BestaetigungZollXML_CC029B(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 4
'NCTS: Guarantee
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_BestaetigungZollXML_GUA_INF(doc) Then
If cMAVIWorker.readNCTS_BestaetigungZollXML_GUA_INF(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 5
'NCTS: Ankunftsanzeige
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_BestaetigungZollXML_ARR_INF(doc) Then
If cMAVIWorker.readNCTS_BestaetigungZollXML_ARR_INF(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 6
'NCTS: Erledigungsmitteilung
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_ErledigungsmitteilungXML_CC045A(doc) Then
If cMAVIWorker.readNCTS_ErledigungsmitteilungXML_CC045A(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 7
'NCTS: Cancellation decision CC009A
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_AbbruchXML_CC009A(doc) Then
If cMAVIWorker.readNCTS_AbbruchXML_CC009A(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 8
'NCTS: Declaration rejected CC016A
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_RueckweisungXML_CC016A(doc) Then
If cMAVIWorker.readNCTS_RueckweisungXML_CC016A(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Case 9
'NCTS: No release for transit type B CC051B
If Not found And cNCTSPartnerWorker.cMAVIGetMsgType.isTRNCTS_KeineFreigabeXML_CC051B(doc) Then
If cMAVIWorker.readNCTS_KeineFreigabeXML_CC051B(PARTNERSYSTEM, Me, doc, nr_id) <> "" Then found = True
End If
Dim found = False
Dateiname = d
If IO.File.Exists(d) And correctFile Then
Case 10
NACHRICHTENTYP_notfound = True ' alle nciht zu verarbeitenden
End Select
Dim nr_id As Integer = -1
Dim fi As FileInfo = New FileInfo(d)
If Not fi.Name.StartsWith(".") Then
Dim alreadyMoved = False
Dim objFileRead As StreamReader = New StreamReader(d)
If objFileRead.Peek() = -1 Then
MsgBox("Datei hat keinen Inhalt!",
MsgBoxStyle.Information,
MsgBoxStyle.DefaultButton2 = MsgBoxStyle.OkOnly)
Exit Sub
ElseIf FileType = "clf" Then
If readAndSaveCLF(objFileRead, fi) Then
addDGVEinarbeitung(fi.Name, "OK")
found = True
End If
Dim destPath = ""
If found Then
If Not IO.Directory.Exists(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then IO.Directory.CreateDirectory(ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
frmStartOptions.moveFile(d, ZIEL_PFAD & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\", destPath)
cntDatenEingelesen += 1
Else
If NACHRICHTENTYP_notfound Then
frmStartOptions.moveFile(d, ERROR_PFAD, destPath) ' nciht gefunden, oder durch ERROR nicht eingearbt,.
dsNichtErkannt += 1
End If
ElseIf FileType = "ttr" Then
If readAndSaveTTR(objFileRead, fi) Then
addDGVEinarbeitung(fi.Name, "OK")
found = True
End If
If destPath <> "" And nr_id > 0 Then
VERAG_PROG_ALLGEMEIN.cNCTS_TR_Nachrichten.updatePath(nr_id, destPath)
End If
End If
Me.Refresh()
End If
If found Then
If Not IO.Directory.Exists(ZIEL_PFAD & "\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\") Then IO.Directory.CreateDirectory(ZIEL_PFAD & "\" & Now.Year & "\" & Now.ToString("yyyyMMdd") & "\")
frmStartOptions.moveFile(d, ZIEL_PFAD & "\" & Now.ToString("yyyyMMdd") & "\", VERARBEITUNGS_PFAD)
cntDatenEingelesen += 1
Else
If Not found Then
frmStartOptions.moveFile(d, ERROR_PFAD, VERARBEITUNGS_PFAD) ' nciht gefunden, oder durch ERROR nicht eingearbt,.
dsNichtErkannt += 1
End If
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Next
Me.Refresh()
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Next
End Sub
Function getString(doc As XmlDocument) As Boolean
If doc.HasChildNodes Then
' If doc.GetElementsByTagName("DakosyMessageInternal").Count > 0 Then
Dim sw = New StringWriter()
Dim xw = New XmlTextWriter(sw)
doc.WriteTo(xw)
Dim XmlString = sw.ToString()
End If
Return False
End Function
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
Me.Close()
End Sub
@@ -424,127 +388,362 @@ Public Class frmAsfinag_NachrichtenVerabeitung
End Sub
Public Function readAndSaveCLF(objFileRead As StreamReader, fi As FileInfo) As Boolean
Dim booHeaderVorhanden = False
Dim booPrüfziffernfehler = False
Dim booInTransaktion = False
Dim booTrailerVorhanden = False
Dim lngPKLine As Long = 0
Dim lngRecordCount As Long
Do While (objFileRead.Peek() > -1)
Dim strZeile = objFileRead.ReadLine()
lngRecordCount = lngRecordCount + 1
Select Case Mid(strZeile, 1, 2)
Case "10"
booHeaderVorhanden = True
Dim ext = CInt(fi.Extension.Remove(0, 1))
Dim clfHeader As New cAsfinag.CLFHeader(fi.Name.ToString, ext)
With clfHeader
.PKFileName = fi.Name
.recordType = Mid(strZeile, 1, 2)
.fileVersion = Mid(strZeile, 3, 2)
.indcator = Trim(Mid(strZeile, 9, 1))
.senderID = Trim(Mid(strZeile, 10, 6))
.receiverID = Trim(Mid(strZeile, 16, 6))
.fileCreationDate = DateSerial(Mid(strZeile, 22, 4), Mid(strZeile, 26, 2), Mid(strZeile, 28, 2))
.fileCreationTime = Now()
'.fileCreationTime = DateSerial(Mid(strZeile, 22, 4), Mid(strZeile, 26, 2), Mid(strZeile, 28, 2)) & " " & TimeSerial(Mid(strZeile, 30, 2), Mid(strZeile, 32, 2), Mid(strZeile, 34, 2))
.ISOCountryCode = Trim(Mid(strZeile, 62, 3))
.SAVE()
End With
Case "20"
' Meldung bei nicht vorhandenen Haeder.
If Not booHeaderVorhanden Then
MsgBox("Datei kann wegen fehlenden Header nicht verarbeitet werden.")
objFileRead.Close()
Return False
End If
Dim clfBody As New cAsfinag.CLFBody(fi.Name, lngPKLine)
With clfBody
.PKFileName = fi.Name
lngPKLine = lngPKLine + 1
.RecordType = Trim(Mid(strZeile, 1, 2))
.fileVersion = Trim(Mid(strZeile, 3, 2))
.fileNumber = Trim(Mid(strZeile, 5, 3))
.cardNumber = Trim(Mid(strZeile, 9, 22))
.validTo = Trim(Mid(strZeile, 31, 4))
.OBUID = Trim(Mid(strZeile, 35, 18))
.vehicleLicensePlate = Trim(Mid(strZeile, 53, 10))
.nationality = Trim(Mid(strZeile, 63, 3))
.vehicleCategory = Trim(Mid(strZeile, 66, 1))
.emissionCategory = Trim(Mid(strZeile, 67, 2))
.status = Trim(Mid(strZeile, 69, 2))
.contractDate = DateSerial(Mid(strZeile, 71, 4), Mid(strZeile, 75, 2), Mid(strZeile, 77, 2))
.SAVE()
End With
'CardNumber prüfen.
If (Right(clfBody.cardNumber, 1)) <> cAsfinag.fktMod10Prüfziffer(Left(clfBody.cardNumber, Len(clfBody.cardNumber) - 1)) Then
booPrüfziffernfehler = True
End If
'strSQL = "SELECT * FROM CLFArchiv WHERE (OBUID = N'" & Trim(Mid(strZeile, 37, 18)) & "')"
'rstCLFArchiv.Open strSQL, cnnASFINAG, adOpenStatic, adLockOptimistic, adCmdText
Function readPLOSE_Detail(d As String) As String
' Try
' readPLOSE_Detail = ""
' Dim KdnR = ""
'With rstCLFArchiv
' If .EOF Then
' .AddNew
' !OBUID = Trim(Mid(strZeile, 37, 18))
' End If
' !FileName = strPKFileName
' !RecordType = Trim(Mid(strZeile, 1, 2))
' !RunNumber = Trim(Mid(strZeile, 3, 8))
' !CardNumber = Trim(Mid(strZeile, 11, 22))
' !ValidTo = Trim(Mid(strZeile, 33, 4))
' !KfzKennzeichen = Trim(Mid(strZeile, 55, 10))
' !Nationalität = Trim(Mid(strZeile, 65, 3))
' !Kategorie = Trim(Mid(strZeile, 68, 1))
' !Schadstoffklasse = Trim(Mid(strZeile, 69, 2))
' !Status = Trim(Mid(strZeile, 71, 2))
' !DatumVertragsabschluss = DateSerial(Mid(strZeile, 73, 4), Mid(strZeile, 77, 2), Mid(strZeile, 79, 2))
' .Update
' .Close
'End With
' Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(d, Encoding.UTF8)
' MyReader.TextFieldType = FileIO.FieldType.Delimited
' MyReader.SetDelimiters(";")
' Dim currentRow As String()
' Meldung bei Prüfziffernfehler.
If booPrüfziffernfehler Then
MsgBox("Prüfziffernfehler in Zeile " & CStr(lngRecordCount) & vbCrLf & "Datei kann nicht verarbeitet werden. " & vbNewLine & " " & fi.Name.ToString)
booInTransaktion = False
Return False
' Dim cnt = 0
' If True Then
End If
Case "90"
' Meldung bei nicht vorhandenen Haeder.
If Not booHeaderVorhanden Then
MsgBox("Datei kann wegen fehlenden Header nicht verarbeitet werden.")
objFileRead.Close()
Return False
End If
' While Not MyReader.EndOfData
' Try
' currentRow = MyReader.ReadFields()
booTrailerVorhanden = True
Dim clfTrailer As New cAsfinag.CLFTrailer(fi.Name)
With clfTrailer
.PKFileName = fi.Name
.recordType = Trim(Mid(strZeile, 1, 2))
.fileVersion = Trim(Mid(strZeile, 3, 2))
.fileNumber = Trim(Mid(strZeile, 5, 4))
.recordCount = Trim(Mid(strZeile, 9, 7))
.SAVE()
End With
' Prüfsumme Anzahl der Sätze im File ohne Header und Trailer.
If clfTrailer.recordCount <> (lngRecordCount) Then
MsgBox("Record Count: " & clfTrailer.recordCount & vbCrLf & "Prüfsumme: " & (lngRecordCount) & vbCrLf)
objFileRead.Close()
Return False
End If
' If currentRow.Length > 24 Then
' Dim PLOSE As New cNCTSPartnerWorker.cPLOSE
' Meldung bei Prüfsummenfehler.
If booPrüfziffernfehler Then
MsgBox("Datei kann wegen Prüfsummenfehler nicht verarbeitet werden.")
objFileRead.Close()
' MsgBox strPrompt, , strPKFileName
' ' Zurücksetzen der Transaktion.
'cnnASFINAG.RollbackTrans
' booInTransaktion = False
End If
Case Else
' Andere RecordNumber überlesen.
End Select
Loop
' PLOSE.plose_Datensatztyp = SQL.isleernothing(currentRow(0))
' PLOSE.plose_KodexMautTankstelle = SQL.isleernothing(currentRow(1))
' PLOSE.plose_BeschreibungMautTankstelle = SQL.isleernothing(currentRow(2))
' PLOSE.plose_KodexEinfahrt = SQL.isleernothing(currentRow(3))
' PLOSE.plose_BeschreibungEinfahrt = SQL.isleernothing(currentRow(4))
' PLOSE.plose_KodexAusfahrt = SQL.isleernothing(currentRow(5))
' PLOSE.plose_BeschreibungAusfahrt = SQL.isleernothing(currentRow(6))
' PLOSE.plose_Kartenkodex = SQL.isleernothing(currentRow(7))
' PLOSE.plose_Kontonummer = SQL.isleernothing(currentRow(8))
' PLOSE.plose_NummerKarteGeraet = SQL.isleernothing(currentRow(9))
' PLOSE.plose_Kennzeichen = SQL.isleernothing(currentRow(10))
' PLOSE.plose_InterneNrFahrzeug = SQL.isleernothing(currentRow(11))
' PLOSE.plose_POLSEKundennummer = SQL.isleernothing(currentRow(12))
' PLOSE.plose_Firmenname = SQL.isleernothing(currentRow(13))
' PLOSE.plose_DatumTransaktion = SQL.isleernothingDateFormatstring(currentRow(14))
' PLOSE.plose_Produktbeschreibung = SQL.isleernothing(currentRow(15))
' PLOSE.plose_Menge = SQL.isNullNothingDbl(currentRow(16))
' PLOSE.plose_Preis = SQL.isNullNothingDbl(currentRow(17))
' PLOSE.Einheitsrabatt = SQL.isleernothing(currentRow(18))
' PLOSE.plose_NettobetragTransaktion = SQL.isNullNothingDbl(currentRow(19))
' PLOSE.plose_MWSTBetrag = SQL.isNullNothingDbl(currentRow(20))
' PLOSE.plose_BruttobetragTransaktion = SQL.isNullNothingDbl(currentRow(21))
' PLOSE.plose_NettobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(22))
' PLOSE.plose_MWSTBetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(23))
' PLOSE.plose_BruttobetragWaehrungAbbuchung = SQL.isNullNothingDbl(currentRow(24))
' PLOSE.plose_WaehrungLandDiesntleistung = SQL.isleernothing(currentRow(25))
' PLOSE.plose_WaehrungAbbuchung = SQL.isleernothing(currentRow(26))
' PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(27))
' PLOSE.plose_ArtTransaktion = SQL.isleernothing(currentRow(28))
' PLOSE.plose_Fahrzeugklasse = SQL.isleernothing(currentRow(29))
' PLOSE.plose_KlassenidentifikationEURO = SQL.isleernothing(currentRow(30))
' PLOSE.plose_ProduktbeschreibungShort = SQL.isleernothing(currentRow(31))
' PLOSE.plose_DokumentNrQuittungUhrzeit = SQL.isleernothing(currentRow(32))
' PLOSE.plose_Geraetetyp = SQL.isleernothing(currentRow(33))
' PLOSE.plose_ProduktCode = SQL.isleernothing(currentRow(34))
' PLOSE.plose_ReferenzenBuchungMaut = SQL.isleernothing(currentRow(35))
objFileRead.Close()
' ''''''''''''
' If PLOSE.SAVE() Then
Return True
' End If
' End If
' cnt += 1
' 'For Each currentField In currentRow
' 'Next
' Catch ex As Exception
' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
' End Try
' End While
' 'Label30.Text = (cnt + 1) & " / " & LineCount
' 'Label31.Visible = True
' readPLOSE_Detail = "Zeilen: " & cnt
' Else
' MsgBox("FEHLER beim Löschen der vorhandenen OP-Liste.")
' End If
' End Using
' Try
' ' System.IO.File.Delete(p)
' Catch ex As Exception
' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
' End Try
' addDGVEinarbeitung("PLOSE: Detail" & KdnR, readPLOSE_Detail)
' ' End Using
' 'End If
' Catch ex As Exception
' VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
' MsgBox(ex.StackTrace & ex.Message)
' readPLOSE_Detail = ""
' End Try
End Function
Public Function readAndSaveTTR(objFileRead As StreamReader, fi As FileInfo) As Boolean
Dim booHeaderVorhanden = False
Dim booPrüfziffernfehler = False
Dim booInTransaktion = False
Dim booTrailerVorhanden = False
Dim dblCheckSumQuantity As Double
Dim curCheckSumAmount As Double
Dim lngPKLine As Long = 0
Dim lngRecordCount As Long
Do While (objFileRead.Peek() > -1)
Dim strZeile = objFileRead.ReadLine()
lngRecordCount = lngRecordCount + 1
Select Case Mid(strZeile, 1, 2)
Case "10"
booHeaderVorhanden = True
Dim ext = CInt(fi.Extension.Remove(0, 1))
Dim ttrHeader As New cAsfinag.TTRHeader(fi.Name.ToString, ext)
With ttrHeader
.PKFileName = fi.Name
.recordType = Trim(Mid(strZeile, 1, 2))
.fileVersion = Trim(Mid(strZeile, 3, 2))
.senderID = Trim(Mid(strZeile, 5, 6))
.receiverID = Trim(Mid(strZeile, 11, 6))
.fileCreationDate = DateSerial(Mid(strZeile, 17, 4), Mid(strZeile, 21, 2), Mid(strZeile, 23, 2))
.fileCreationTime = DateSerial(Mid(strZeile, 17, 4), Mid(strZeile, 21, 2), Mid(strZeile, 23, 2)) & " " & TimeSerial(Mid(strZeile, 25, 2), Mid(strZeile, 27, 2), 0)
.fileNumber = Trim(Mid(strZeile, 29, 4))
.currencyCode = Trim(Mid(strZeile, 33, 3))
.description = IIf(Trim(Mid(strZeile, 36, 25)) = "", Nothing, Trim(Mid(strZeile, 36, 25)))
.ISOCountryCode = Trim(Mid(strZeile, 61, 3))
.SAVE()
End With
Case "20"
' Meldung bei nicht vorhandenen Haeder.
If Not booHeaderVorhanden Then
MsgBox("Datei kann wegen fehlenden Header nicht verarbeitet werden.")
objFileRead.Close()
Return False
End If
Dim ttrBody As New cAsfinag.TTRBody(fi.Name, lngPKLine)
With ttrBody
.PKFileName = fi.Name
.recordType = Trim(Mid(strZeile, 1, 2))
lngPKLine = lngPKLine + 1
.PKLine = lngPKLine
.fileVersion = Trim(Mid(strZeile, 3, 2))
.siteId = IIf(Trim(Mid(strZeile, 7, 15)) = "", Nothing, Trim(Mid(strZeile, 7, 15)))
.fileNumber = Trim(Mid(strZeile, 22, 4))
.fileCreationDate = DateSerial(Mid(strZeile, 26, 4), Mid(strZeile, 30, 2), Mid(strZeile, 32, 2))
.deliveryNoteNumber = IIf(Trim(Mid(strZeile, 35, 8)) = "", Nothing, Trim(Mid(strZeile, 35, 8)))
.cardNumber = Trim(Mid(strZeile, 43, 22))
.deliveryDate = DateSerial(Mid(strZeile, 65, 4), Mid(strZeile, 69, 2), Mid(strZeile, 71, 2))
.deliveryTime = IIf(Trim(Mid(strZeile, 73, 4)) = "", Nothing, DateSerial(Mid(strZeile, 65, 4), Mid(strZeile, 69, 2), Mid(strZeile, 71, 2)) & " " & TimeSerial(Mid(strZeile, 73, 2), Mid(strZeile, 75, 2), 0))
.transactionType = Trim(Mid(strZeile, 77, 2))
.productCode = Trim(Mid(strZeile, 79, 4))
.km = IIf(Trim(Mid(strZeile, 83, 7)) = "", Nothing, Trim(Mid(strZeile, 83, 7)))
.driverId = IIf(Trim(Mid(strZeile, 90, 4)) = "", Nothing, Trim(Mid(strZeile, 90, 4)))
.productQuantity = Trim(Mid(strZeile, 94, 6)) / 100
.amountInclVAT = Trim(Mid(strZeile, 100, 10)) / 100
.VATrate = Trim(Mid(strZeile, 155, 4)) / 100
.VATamount = Trim(Mid(strZeile, 159, 10)) / 100
.OBUID = Trim(Mid(strZeile, 130, 25))
.receiptNumber = Trim(Mid(strZeile, 110, 20))
' Bei den Checksummen wird unabhängig vom TransactionType immer der positive Betrag aufsummiert.
dblCheckSumQuantity = dblCheckSumQuantity + ttrBody.productQuantity
curCheckSumAmount = curCheckSumAmount + ttrBody.amountInclVAT
' Bei TransactionType 03 .......Credit-Transaktion (negativ)
If ttrBody.transactionType = 3 Then
' Vorzeichenänderung
ttrBody.km = 0 - ttrBody.km
ttrBody.productQuantity = 0 - ttrBody.productQuantity
ttrBody.amountInclVAT = 0 - ttrBody.amountInclVAT
ttrBody.VATamount = 0 - ttrBody.VATamount
End If
' CardNumber prüfen.
If (Right(ttrBody.cardNumber, 1)) <> (fktMod10Prüfziffer(Left(ttrBody.cardNumber, Len(ttrBody.cardNumber) - 1))) Then
booPrüfziffernfehler = True
End If
.SAVE()
End With
'strSQL = "SELECT * FROM CLFArchiv WHERE (OBUID = N'" & Trim(Mid(strZeile, 37, 18)) & "')"
'rstCLFArchiv.Open strSQL, cnnASFINAG, adOpenStatic, adLockOptimistic, adCmdText
'With rstCLFArchiv
' If .EOF Then
' .AddNew
' !OBUID = Trim(Mid(strZeile, 37, 18))
' End If
' !FileName = strPKFileName
' !RecordType = Trim(Mid(strZeile, 1, 2))
' !RunNumber = Trim(Mid(strZeile, 3, 8))
' !CardNumber = Trim(Mid(strZeile, 11, 22))
' !ValidTo = Trim(Mid(strZeile, 33, 4))
' !KfzKennzeichen = Trim(Mid(strZeile, 55, 10))
' !Nationalität = Trim(Mid(strZeile, 65, 3))
' !Kategorie = Trim(Mid(strZeile, 68, 1))
' !Schadstoffklasse = Trim(Mid(strZeile, 69, 2))
' !Status = Trim(Mid(strZeile, 71, 2))
' !DatumVertragsabschluss = DateSerial(Mid(strZeile, 73, 4), Mid(strZeile, 77, 2), Mid(strZeile, 79, 2))
' .Update
' .Close
'End With
' Meldung bei Prüfziffernfehler.
If booPrüfziffernfehler Then
MsgBox("Prüfziffernfehler in Zeile " & CStr(lngRecordCount) & vbCrLf & "Datei kann nicht verarbeitet werden. " & vbNewLine & " " & fi.Name.ToString)
booInTransaktion = False
objFileRead.Close()
Return False
End If
Case "90"
' Meldung bei nicht vorhandenen Haeder.
If Not booHeaderVorhanden Then
MsgBox("Datei kann wegen fehlenden Header nicht verarbeitet werden.")
objFileRead.Close()
Return False
End If
booTrailerVorhanden = True
Dim ttrTrailer As New cAsfinag.TTRTrailer(fi.Name)
With ttrTrailer
.PKFileName = fi.Name
.recordType = Trim(Mid(strZeile, 1, 2))
.fileVersion = Trim(Mid(strZeile, 3, 2))
'.fileNumber = Trim(Mid(strZeile, 5, 4))
.recordCount = Trim(Mid(strZeile, 5, 9))
.checksumProductQuantity = Trim(Mid(strZeile, 14, 15)) / 100
.checksumAmounntInclVAT = Trim(Mid(strZeile, 29, 15)) / 100
.SAVE()
Dim strPrompt
If ttrTrailer.recordCount <> lngRecordCount Then
strPrompt = strPrompt & "Record Count: " & ttrTrailer.recordCount & vbCrLf &
"Prüfsumme: " & lngRecordCount & vbCrLf
End If
' Prüfsumme Menge.
If ttrTrailer.checksumProductQuantity <> dblCheckSumQuantity Then
strPrompt = strPrompt & "Check Sum Quantity: " & ttrTrailer.checksumProductQuantity & vbCrLf &
"Prüfsumme: " & dblCheckSumQuantity & vbCrLf
End If
' Prüfsumme Betrag.
If ttrTrailer.checksumAmounntInclVAT <> Math.Round(curCheckSumAmount, 2) Then
strPrompt = strPrompt & "Check Sum Amount: " & ttrTrailer.checksumAmounntInclVAT & vbCrLf &
"Prüfsumme: " & curCheckSumAmount & vbCrLf
End If
If strPrompt <> "" Then
MsgBox(strPrompt)
objFileRead.Close()
Return False
End If
End With
' Prüfsumme Anzahl der Sätze im File ohne Header und Trailer.
If ttrTrailer.recordCount <> (lngRecordCount) Then
MsgBox("Record Count: " & ttrTrailer.recordCount & vbCrLf & "Prüfsumme: " & (lngRecordCount) & vbCrLf)
objFileRead.Close()
Return False
End If
' Meldung bei Prüfsummenfehler.
If booPrüfziffernfehler Then
MsgBox("Datei kann wegen Prüfsummenfehler nicht verarbeitet werden.")
objFileRead.Close()
Return False
' MsgBox strPrompt, , strPKFileName
' ' Zurücksetzen der Transaktion.
'cnnASFINAG.RollbackTrans
' booInTransaktion = False
End If
Case Else
' Andere RecordNumber überlesen.
End Select
Loop
objFileRead.Close()
Return True
End Function
Private Sub dgvEinarbeitung_SelectionChanged(sender As Object, e As EventArgs) Handles dgvEinarbeitung.SelectionChanged
dgvEinarbeitung.ClearSelection()
End Sub
Private Sub frmTCNachrichtenVerarbeitung_Shown(sender As Object, e As EventArgs) Handles Me.Shown
If allowClose Then
Me.Refresh()
@@ -561,5 +760,20 @@ Public Class frmAsfinag_NachrichtenVerabeitung
Private Sub pnl_Paint(sender As Object, e As PaintEventArgs) Handles pnl.Paint
End Sub
Public Shadows Function Right(ByVal sText As String,
ByVal nLen As Integer) As String
If nLen > sText.Length Then nLen = sText.Length
Return (sText.Substring(sText.Length - nLen))
End Function
Public Shadows Function Left(ByVal sText As String,
ByVal nLen As Integer) As String
If nLen > sText.Length Then nLen = sText.Length
Return (sText.Substring(0, nLen))
End Function
End Class