You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

589 lines
22 KiB

Imports System.Xml
Imports System.Xml.Serialization
Imports System.IO
Imports System.IO.Compression
Public Class clscamt054
Public data As New DataTable
Dim m_filename As String
Property Filename As String
Get
Return m_filename
End Get
Set(value As String)
m_filename = value
End Set
End Property
Dim i As Integer = 0
Dim valdt As DateTime
Dim bookdt As DateTime
Dim betrag As Double
Dim taxen As Double
Dim referenz As String
Dim camtdata As New DataSet
Dim camtdatatemp As New DataSet
Dim ZData As New DataTable
Dim Total As Double
Dim AnzahlBuchungen As Integer
Dim ID As String
Dim CreateDateTime As DateTime
Dim iban As String
Dim NtryRef As String
Public CAMT_RUN_ID As Integer = 0
Dim CAMT_FILE_ID As Integer
Public fehler As Integer = 0
Public Function CheckFiles(ByVal ifilename As String)
Dim Pfad As String = System.IO.Path.GetDirectoryName(ifilename)
Dim files() As String = IO.Directory.GetFiles(Pfad)
Return files.Count
End Function
Public Sub Init_Datatable()
ZData.Rows.Clear()
ZData.Columns.Clear()
ZData.Columns.Add("Referenz")
ZData.Columns.Add("Valuta")
ZData.Columns.Add("Buchungsdatum")
ZData.Columns.Add("Betrag")
ZData.Columns.Add("Taxen")
ZData.Columns.Add("Filename")
ZData.Columns.Add("Total")
ZData.Columns.Add("ID")
ZData.Columns.Add("CreateDateTime")
ZData.Columns.Add("IBAN")
ZData.Columns.Add("NTryRef")
End Sub
Public Sub Alles_XML_Dateien(ByVal iFilename As String)
Try
Init_Datatable()
Dim Pfad As String = System.IO.Path.GetDirectoryName(iFilename)
Dim files() As String = IO.Directory.GetFiles(Pfad)
Dim i As Integer = 0
For Each file As String In files
Einzelne_XML_Datei(file)
Next
Catch EX As Exception
Globals.EVH.Fire_Insert_Entry("Alle_XML_Dateien:Fehler: " + EX.Message)
fehler = fehler + 1
End Try
End Sub
Public Sub Insert_Camt_Run(ByVal ifilename As String)
Try
Dim db As New clsDB
db.Insert_New_Entry_autokey("Camt_Run", "nreintrag", False)
Dim dr As DataRow = db.dsDaten.Tables(0).Rows(0)
dr.Item(1) = Now
dr.Item(2) = True
dr.Item(3) = Now
dr.Item(4) = Now
dr.Item(5) = Globals.ActUser
Dim fi As New FileInfo(ifilename)
dr.Item(7) = fi.Name
' db.dsDaten.Tables(0).AcceptChanges()
db.Update_Data()
db.Save_CAMT_File_RUN(db.dsDaten.Tables(0).Rows(0).Item(0), ifilename)
Me.CAMT_RUN_ID = db.dsDaten.Tables(0).Rows(0).Item(0)
Globals.EVH.Fire_Insert_Entry("CAMT_RUN: " + CAMT_RUN_ID.ToString)
Catch ex As Exception
Globals.EVH.Fire_Insert_Entry("Insert_Camt_Run:Fehler: " + ex.Message)
fehler = fehler = 1
End Try
End Sub
Public Sub ZIP_Verarbeitung(ByVal iFilename As String)
Try
Globals.EVH.Fire_Insert_Entry("ZIP-Datei öffenen und Entpacken:")
Dim zipPath As String = iFilename
Dim extractPath As String = My.Settings.TempPath
Dim tmpdir As String = DateTime.Now.ToString("ddMMyyyy")
extractPath = extractPath + "\" + tmpdir
If Not System.IO.Directory.Exists(extractPath) Then
System.IO.Directory.CreateDirectory(extractPath)
End If
Globals.EVH.Fire_Insert_Entry("Pfad: " + extractPath)
ZipFile.ExtractToDirectory(zipPath, extractPath)
Insert_Camt_Run(iFilename)
Init_Datatable()
Dim Pfad As String = extractPath
Dim files() As String = IO.Directory.GetFiles(Pfad)
Dim i As Integer = 0
For Each file As String In files
Einzelne_XML_Datei(file)
Next
Dim directoryName As String = extractPath
For Each deleteFile In Directory.GetFiles(directoryName, "*.*", SearchOption.TopDirectoryOnly)
File.Delete(deleteFile)
Next
System.IO.Directory.Delete(extractPath)
Catch ex As Exception
Globals.EVH.Fire_Insert_Entry("Insert_Camt_Run: " + ex.Message)
fehler = fehler = 1
End Try
End Sub
Public Sub Einzelne_XML_Datei(ByVal iFilename As String)
Try
Globals.EVH.Fire_Insert_Entry("ZIP_Verarbeitung:Fehler: " + iFilename)
Dim serializer As New XmlSerializer(GetType(Document))
Dim reader As New IO.StreamReader(iFilename)
Dim xdocument As Document = serializer.Deserialize(reader)
Dim a As List(Of AccountNotification7) = xdocument.BkToCstmrDbtCdtNtfctn.Ntfctn.ToList
Dim db As New clsDB
Try
db.Insert_New_Entry_autokey("Camt_File", "nreintrag", False)
Me.CAMT_FILE_ID = db.dsDaten.Tables(0).Rows(0).Item(0)
Catch ex As Exception
MsgBox(ex.Message)
End Try
For Each accountinformation As AccountNotification7 In a
ID = accountinformation.Id
CreateDateTime = accountinformation.CreDtTm
iban = accountinformation.Acct.Id.Item
For Each r4 As ReportEntry4 In accountinformation.Ntry
NtryRef = r4.NtryRef
valdt = r4.ValDt.Item
bookdt = r4.BookgDt.Item
For Each ed As EntryDetails3 In r4.NtryDtls
AnzahlBuchungen = ed.Btch.NbOfTxs
Total = ed.Btch.TtlAmt.Value
For Each td As EntryTransaction4 In ed.TxDtls
referenz = ""
'valdt = Nothing
'bookdt = Nothing
betrag = 0
taxen = 0
betrag = td.Amt.Value.ToString
referenz = td.RmtInf.Strd(0).CdtrRefInf.Ref
'MsgBox(td.Amt.Value.ToString)
Try
taxen = (td.Chrgs.TtlChrgsAndTaxAmt.Value)
Catch
taxen = 0
End Try
Dim db1 As New clsDB
db1.Insert_New_Entry_autokey("CAMT_Record", "nreintrag", False)
Dim r As DataRow = db1.dsDaten.Tables(0).Rows(0)
r.Item(1) = CAMT_FILE_ID
r.Item(2) = referenz
r.Item(3) = valdt
r.Item(4) = bookdt
r.Item(5) = betrag
r.Item(6) = taxen
r.Item(11) = False
'db1.dsDaten.AcceptChanges()
'db1.dsDaten.Tables(0).AcceptChanges()
db1.Update_Data()
db1.Dispose()
Next
Next
Next
Next
reader.Close()
reader.Dispose()
Dim dr As DataRow = db.dsDaten.Tables(0).Rows(0)
dr.Item(1) = CAMT_RUN_ID
Dim fi As New FileInfo(iFilename)
dr.Item(2) = fi.Name
dr.Item(4) = CreateDateTime
dr.Item(5) = iban
dr.Item(6) = NtryRef
dr.Item(7) = AnzahlBuchungen
dr.Item(8) = ID
dr.Item(9) = Total
dr.Item(10) = True
'db.dsDaten.Tables(0).AcceptChanges()
db.Update_Data()
db.Save_CAMT_File(db.dsDaten.Tables(0).Rows(0).Item(0), iFilename)
Catch EX As Exception
Globals.EVH.Fire_Insert_Entry("Einzelne_XML_Datei:Fehler: " + EX.Message)
fehler = fehler + 1
End Try
End Sub
Public Function Daten_Verbuchen()
Try
Dim db1 As New clsDB
Dim sql As String
sql = "SELECT dbo.CAMT_Record.Referenz, dbo.CAMT_Record.Valuta, dbo.CAMT_Record.Buchungsdatum, dbo.CAMT_Record.Betrag, dbo.CAMT_Record.Taxen, dbo.CAMT_Record.verbucht, dbo.CAMT_Record.nreintrag
"
sql = sql + " From dbo.CAMT_Run INNER JOIN"
sql = sql + " dbo.CAMT_File ON dbo.CAMT_Run.NrEIntrag = dbo.CAMT_File.CAMT_RunNr INNER JOIN"
sql = sql + " dbo.CAMT_Record ON dbo.CAMT_File.Nreintrag = dbo.CAMT_Record.CAMT_FileNr"
sql = sql + " WHERE (dbo.CAMT_Record.aktiv = 1) AND (dbo.CAMT_File.aktiv = 1) AND (dbo.CAMT_Run.aktiv = 1) AND (dbo.CAMT_Record.verbucht = 0) AND (dbo.CAMT_Run.NrEIntrag = " + Me.CAMT_RUN_ID.ToString + ")"
db1.Get_Tabledata("Camt_Record", "", sql)
For Each r As DataRow In db1.dsDaten.Tables(0).Rows
If CAMT_Verbuchen(r) = True Then db1.Exec_SQL("Update camt_record set mutiert_am=getdate(), mutierer=" + Globals.ActUser.ToString + ",Verbucht=1 where nreintrag=" + r.Item("nreintrag").ToString)
Next
Catch EX As Exception
Globals.EVH.Fire_Insert_Entry("Daten_Verbuchen:Fehler: " + EX.Message)
fehler = fehler + 1
End Try
End Function
Private Function Verbuchen(ByRef dr As DataRow) As Boolean
Dim db1 As New clsDB
Dim fakturanr As String
fakturanr = dr.Item("Referenz").Substring(7, 10)
If fakturanr.Substring(4, 1) = "9" Then
'Anzahlung_Verbuchen'
Else
db1.Get_Tabledata("RG", "", "Select * from faktura where nrfaktura='" + fakturanr + "' and aktiv=1 and status=0")
If db1.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Keine Rechnung mit der Nummer: " + fakturanr + " vorhanden.")
fehler = fehler + 1
Return False
Exit Function
End If
If db1.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Rechnung mit der Nummer: " + fakturanr + " wurde bereits storniert.")
fehler = fehler = fehler + 1
Return False
Exit Function
End If
Dim db2 As New clsDB
db2.Get_Tabledata("Zahlung", "", "Select * from zahlung where nrfaktura='" + fakturanr + "' and status<>9 and aktiv=1")
If db2.dsDaten.Tables(0).Rows.Count > 0 Then
Globals.EVH.Fire_Insert_Entry("Zahlung wurde bereits verbucht: " + fakturanr + " - " + db1.dsDaten.Tables(0).Rows(0).Item("patientzeile"))
fehler = fehler + 1
Return False
Exit Function
End If
Dim db3 As New clsDB
db3.Get_Tabledata("Debitor", "", "Select * from Debitor where nrfaktura='" + fakturanr + "' and aktiv=1 ")
If db3.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Für die Zahlung ist kein Debitor vorhanden: " + fakturanr)
fehler = fehler + 1
Return False
Exit Function
End If
'Debitor buchen
If db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = 0 Then
db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0
db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now
Else
db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0
db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now
End If
db1.Update_Data()
db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = db3.dsDaten.Tables(0).Rows(0).Item("Betrag") - dr.Item("Betrag")
db3.Update_Data()
Dim db4 As New clsDB
Dim dr1 As DataRow
dr1 = db2.dsDaten.Tables(0).NewRow
dr1.Item("nrzahlung") = db4.Get_DBKey("Zahlung")
dr1.Item("nrfaktura") = fakturanr
dr1.Item("betrag") = dr.Item("Betrag")
dr1.Item("Vorauszahlung") = False
dr1.Item("nrkonto") = db4.Get_Option(2003)
dr1.Item("Mandant") = Globals.Mandant
dr1.Item("nrdebitor") = db1.dsDaten.Tables(0).Rows(0).Item("nrdebitor")
dr1.Item("valuta") = dr.Item("DatumGutschrift")
dr1.Item("nrbehandlung") = db1.dsDaten.Tables(0).Rows(0).Item("nrbehandlung")
dr1.Item("status") = 0
dr1.Item("Statusdatum") = Now
dr1.Item("erstellt_am") = Now
dr1.Item("mutiert_am") = Now
dr1.Item("mutierer") = Globals.ActUser
dr1.Item("aktiv") = True
db2.dsDaten.Tables(0).Rows.Add(dr1)
db2.Update_Data()
db2.Dispose()
Globals.EVH.Fire_Insert_Entry("Zahlung verbucht: " + fakturanr + " / " + dr.Item("Betrag").ToString)
Dim db5 As New clsDB
db5.Insert_ZJournal(fakturanr, dr1.Item("nrdebitor"), db5.Get_Datavalue("Select dbo.get_name(" + dr1.Item("nrdebitor").ToString + ")"), dr1.Item("Betrag"), db5.Get_Datavalue("Select Konto from konto where nrkonto=" + dr1.Item("nrkonto").ToString), "", "")
db5.Dispose()
Return True
End If
End Function
Private Function CAMT_Verbuchen(ByRef dr As DataRow) As Boolean
Dim db1 As New clsDB
Dim fakturanr As String
fakturanr = dr.Item("Referenz").Substring(6, 10)
If fakturanr.Substring(4, 1) = "9" Then
'Anzahlung_Verbuchen'
Else
db1.Get_Tabledata("RG", "", "Select * from faktura where nrfaktura='" + fakturanr + "' and aktiv=1 and status=0")
If db1.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Keine Rechnung mit der Nummer: " + fakturanr + " vorhanden.")
fehler = fehler + 1
Return False
Exit Function
End If
If db1.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Rechnung mit der Nummer: " + fakturanr + " wurde bereits storniert.")
fehler = fehler = fehler + 1
Return False
Exit Function
End If
Dim db2 As New clsDB
db2.Get_Tabledata("Zahlung", "", "Select * from zahlung where nrfaktura='" + fakturanr + "' and status<>9 and aktiv=1")
If db2.dsDaten.Tables(0).Rows.Count > 0 Then
Globals.EVH.Fire_Insert_Entry("Zahlung wurde bereits verbucht: " + fakturanr + " - " + db1.dsDaten.Tables(0).Rows(0).Item("patientzeile"))
fehler = fehler + 1
Return False
Exit Function
End If
Dim db3 As New clsDB
db3.Get_Tabledata("Debitor", "", "Select * from Debitor where nrfaktura='" + fakturanr + "' and aktiv=1 ")
If db3.dsDaten.Tables(0).Rows.Count < 1 Then
Globals.EVH.Fire_Insert_Entry("Für die Zahlung ist kein Debitor vorhanden: " + fakturanr)
fehler = fehler + 1
Return False
Exit Function
End If
'Debitor buchen
If db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = 0 Then
db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0
db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now
Else
db1.dsDaten.Tables(0).Rows(0).Item("Status") = 0
db1.dsDaten.Tables(0).Rows(0).Item("statusdatum") = Now
End If
db1.Update_Data()
db3.dsDaten.Tables(0).Rows(0).Item("Betrag") = db3.dsDaten.Tables(0).Rows(0).Item("Betrag") - dr.Item("Betrag")
db3.Update_Data()
Dim db4 As New clsDB
Dim dr1 As DataRow
dr1 = db2.dsDaten.Tables(0).NewRow
dr1.Item("nrzahlung") = db4.Get_DBKey("Zahlung")
dr1.Item("nrfaktura") = fakturanr
dr1.Item("betrag") = dr.Item("Betrag")
dr1.Item("Vorauszahlung") = False
dr1.Item("nrkonto") = db4.Get_Option(2003)
dr1.Item("Mandant") = Globals.Mandant
dr1.Item("nrdebitor") = db1.dsDaten.Tables(0).Rows(0).Item("nrdebitor")
dr1.Item("valuta") = dr.Item("Valuta")
dr1.Item("nrbehandlung") = db1.dsDaten.Tables(0).Rows(0).Item("nrbehandlung")
dr1.Item("status") = 0
dr1.Item("Statusdatum") = Now
dr1.Item("erstellt_am") = Now
dr1.Item("mutiert_am") = Now
dr1.Item("mutierer") = Globals.ActUser
dr1.Item("aktiv") = True
db2.dsDaten.Tables(0).Rows.Add(dr1)
db2.Update_Data()
db2.Dispose()
Globals.EVH.Fire_Insert_Entry("Zahlung verbucht: " + fakturanr + " / " + dr.Item("Betrag").ToString)
Dim db5 As New clsDB
db5.Insert_ZJournal(fakturanr, dr1.Item("nrdebitor"), db5.Get_Datavalue("Select dbo.get_name(" + dr1.Item("nrdebitor").ToString + ")"), dr1.Item("Betrag"), db5.Get_Datavalue("Select Konto from konto where nrkonto=" + dr1.Item("nrkonto").ToString), "", "")
db5.Dispose()
Return True
End If
End Function
Public Class RG
Dim mreferenz As String
Property Referent As String
Get
Return mreferenz
End Get
Set(value As String)
mreferenz = value
End Set
End Property
Dim mfakturanr As String
Property Frakturanr As String
Get
Return mfakturanr
End Get
Set(value As String)
mfakturanr = value.Substring(7, 10)
End Set
End Property
End Class
Public Sub Verarbeiten()
'camtdata.ReadXml(Filename)
For Each ntryr As DataRow In camtdata.Tables("ntry").Rows
Get_Buchungsdatum(ntryr.Item(ntryr.Item("Ntry_Id")))
Get_Reference(ntryr.Item(ntryr.Item("Ntry_Id")))
Get_Valuta(ntryr.Item(ntryr.Item("Ntry_Id")))
Get_Betrag(ntryr.Item(ntryr.Item("Ntry_Id")))
Get_Taxen(ntryr.Item(ntryr.Item("Ntry_Id")))
Dim r As DataRow = ZData.NewRow
r.Item(0) = referenz
r.Item(1) = valdt
r.Item(2) = bookdt
r.Item(3) = betrag
r.Item(4) = taxen
ZData.Rows.Add(r)
Next
Exit Sub
For Each r As DataRow In camtdata.Tables("ntry").Rows
For Each rr As DataRow In camtdata.Tables("valdt").Rows
If rr.Item("Ntry_Id") = r.Item("Ntry_Id") Then
Try
valdt = rr.Item("Dt")
Catch
End Try
End If
Next
For Each rr As DataRow In camtdata.Tables("Bookgdt").Rows
If rr.Item("Ntry_Id") = r.Item("Ntry_Id") Then
Try
bookdt = rr.Item("Dt")
Catch
End Try
End If
Next
For Each rr As DataRow In camtdata.Tables("amt").Rows
Try
If rr.Item("Ntry_Id") = r.Item("Ntry_Id") Then
Try
betrag = rr.Item("Amt_Text")
Catch
End Try
End If
Catch
End Try
Next
For Each rr As DataRow In camtdata.Tables("CdtrRefInf").Rows
If rr.Item("strd_Id") = r.Item("Ntry_Id") Then
Try
referenz = rr.Item("Ref")
Catch
End Try
End If
Next
Next
End Sub
Private Function Get_Reference(ByVal id As String) As String
Try
For Each rr As DataRow In camtdata.Tables("CdtrRefInf").Rows
If rr.Item("strd_Id") = id Then
Try
Return rr.Item("Ref")
Exit For
Catch
End Try
End If
Next
Catch ex As Exception
Return ""
End Try
End Function
Private Function Get_Valuta(ByVal id As String) As DateTime
Try
For Each rr As DataRow In camtdata.Tables("valdt").Rows
If rr.Item("Ntry_Id") = id Then
Try
Return rr.Item("Dt")
Exit For
Catch
End Try
End If
Next
Catch ex As Exception
Return "01.01.2000'"
End Try
End Function
Private Function Get_Buchungsdatum(ByVal id As String) As DateTime
Try
For Each rr As DataRow In camtdata.Tables("Bookgdt").Rows
If rr.Item("Ntry_Id") = id Then
Try
Return rr.Item("Dt")
Exit For
Catch
End Try
End If
Next
Catch ex As Exception
Return "01.01.2000'"
End Try
End Function
Private Function Get_Betrag(ByVal id As String)
For Each rr As DataRow In camtdata.Tables("amt").Rows
Try
If rr.Item("Ntry_Id") = id Then
Try
betrag = rr.Item("Amt_Text")
Catch
End Try
End If
Catch
End Try
Next
End Function
Private Function Get_Taxen(ByVal ID As String)
For Each rr As DataRow In camtdata.Tables("rcrd").Rows
Try
If rr.Item("Ntry_Id") = ID Then
Try
taxen = rr.Item("Amt Ccy")
Catch
End Try
End If
Catch
End Try
Next
End Function
End Class