Imports System.Data.SqlClient Imports System.Reflection Imports System.Text.RegularExpressions Public Class cPLOSE_Inv_Data Property plInv_Id As Integer Property plInv_SupplierRechnungsDatum As Object = Nothing Property plInv_SupplierRechnungsNr As String Property plInv_SupplierCountry As Object = Nothing Property plInv_Lieferant As Object = Nothing Property plInv_LieferantCode As Object = Nothing Property plInv_LieferantUID As Object = Nothing Property plInv_RechnungsJahr As Object = Nothing Property plInv_Dateiname As Object = Nothing Property plInv_Einlesedatum As Object = Nothing Property plInv_Datensatztyp As Object = Nothing Property plInv_PLOSEKundennummer As Object = Nothing Property plInv_Firmenname As Object = Nothing Property plInv_Nettobetrag As Object = Nothing Property plInv_MWSTBetrag As Object = Nothing Property plInv_Bruttobetrag As Object = Nothing Property plInv_Services As Object = Nothing Property plInv_PdfFileName As Object = Nothing Property plInv_Currency As Object = Nothing Property plInv_daId As Object = Nothing Property plInv_tstmp As DateTime = Now Property plInv_UStVAn_ID As Object = Nothing Property plInv_Archiv As Boolean = False Property plInv_ArchiviertDatum As Object = Nothing Property plInv_daIdgesetztDatum As Object = Nothing Public hasEntry = False Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Sub New() End Sub Sub New(plInv_Id) Me.plInv_Id = plInv_Id LOAD() End Sub Function getParameterList(Optional withPrimaryKey As Boolean = True) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) If withPrimaryKey Then list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Id", plInv_Id,, True)) Else 'list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Id", plInv_Id)) End If list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_SupplierRechnungsDatum", plInv_SupplierRechnungsDatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_SupplierRechnungsNr", plInv_SupplierRechnungsNr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_SupplierCountry", plInv_SupplierCountry)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Lieferant", plInv_Lieferant)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_LieferantCode", plInv_LieferantCode)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_LieferantUID", plInv_LieferantUID)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_RechnungsJahr", plInv_RechnungsJahr)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Dateiname", plInv_Dateiname)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Einlesedatum", plInv_Einlesedatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Datensatztyp", plInv_Datensatztyp)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_PLOSEKundennummer", plInv_PLOSEKundennummer)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Firmenname", plInv_Firmenname)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Nettobetrag", plInv_Nettobetrag)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_MWSTBetrag", plInv_MWSTBetrag)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Bruttobetrag", plInv_Bruttobetrag)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Services", plInv_Services)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_PdfFileName", plInv_PdfFileName)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Currency", plInv_Currency)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_daId", plInv_daId)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_tstmp", plInv_tstmp)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_UStVAn_ID", plInv_UStVAn_ID)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_Archiv", plInv_Archiv)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_ArchiviertDatum", plInv_ArchiviertDatum)) list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("plInv_daIdgesetztDatum", plInv_daIdgesetztDatum)) Return list End Function Public Function SAVE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT * FROM tblPLOSE_Inv_Data WHERE plInv_Id=@plInv_Id) " & " BEGIN " & getUpdateCmd() & " END " & " Else " & " BEGIN " & getInsertCmd() & " END " & " commit tran " 'Return SQL.doSQLVarList(sqlstr, "FMZOLL", , list) plInv_Id = SQL.doSQLVarListID(plInv_Id, sqlstr, "FMZOLL", , list) Return (plInv_Id > 0) End Function Public Function SAVEUNQIUE() As Boolean Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim sqlstr = " BEGIN TRAN IF EXISTS(SELECT plInv_Id FROM tblPLOSE_Inv_Data WHERE plInv_SupplierRechnungsDatum=@plInv_SupplierRechnungsDatum and plInv_SupplierRechnungsNr=@plInv_SupplierRechnungsNr and plInv_SupplierCountry=@plInv_SupplierCountry and plInv_LieferantCode=@plInv_LieferantCode and plInv_PLOSEKundennummer=@plInv_PLOSEKundennummer) " & " BEGIN " & getUpdateCmdUnique() & " END " & " Else " & " BEGIN " & getInsertCmd() & " END " & " commit tran " plInv_Id = SQL.doSQLVarListID(plInv_Id, sqlstr, "FMZOLL", , list) Return (plInv_Id > 0) End Function Public Sub LOAD() Try hasEntry = False Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL() Using cmd As New SqlCommand("SELECT * FROM tblPLOSE_Inv_Data WHERE plInv_Id=@plInv_Id ", conn) cmd.Parameters.AddWithValue("@plInv_Id", plInv_Id) Dim dr = cmd.ExecuteReader() If dr.Read Then For Each li In getParameterList() Dim propInfo As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable) If dr.Item(li.Text) Is DBNull.Value Then propInfo.SetValue(Me, Nothing) Else propInfo.SetValue(Me, dr.Item(li.Text)) End If Next hasEntry = True End If dr.Close() End Using End Using Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try End Sub Public Function getUpdateCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' Return (" UPDATE [tblPLOSE_Inv_Data] SET " & str & " WHERE plInv_Id=@plInv_Id ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function getUpdateCmdUnique() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' Return (" UPDATE [tblPLOSE_Inv_Data] SET " & str & " WHERE plInv_SupplierRechnungsDatum=@plInv_SupplierRechnungsDatum and plInv_SupplierRechnungsNr=@plInv_SupplierRechnungsNr and plInv_SupplierCountry=@plInv_SupplierCountry and plInv_LieferantCode=@plInv_LieferantCode and plInv_PLOSEKundennummer=@plInv_PLOSEKundennummer ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Function getInsertCmd() As String Try Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList() Dim str As String = "" Dim values As String = "" For Each i In list If Not i.isPrimaryParam Then str &= "[" & i.Text & "]," values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & "," End If Next str = str.Substring(0, str.Length - 1) 'wg. ',' values = values.Substring(0, values.Length - 1) 'wg. ',' Return (" INSERT INTO tblPLOSE_Inv_Data (" & str & ") VALUES(" & values & ") ") Catch ex As Exception MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace) End Try Return "" End Function Public Shared Function setDatenarchivID(jahr As Integer, Optional message As Boolean = False, Optional kdNr As Integer = -1) As Boolean If jahr > Now.Year Then Return False If jahr < 2020 Then Return False Dim REohneDAID As String = "Select plInv_Id, plInv_PdfFileName, plInv_daId, plInv_PLOSEKundennummer FROM [tblPLOSE_Inv_Data] where plInv_daId Is null And plInv_PdfFileName Is Not null And Year(plInv_SupplierRechnungsDatum) = " & jahr & IIf(kdNr > 0, " and plInv_PLOSEKundennummer = " & kdNr, "") Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL Dim dtREohneDAID As DataTable = SQL.loadDgvBySql(REohneDAID, "FMZOLL") If dtREohneDAID.Rows.Count > 0 Then If IIf(message, vbYes = MsgBox("Bei " & dtREohneDAID.Rows.Count & " PLOSE-Rechnungen fehlt die Zuweisung zur Datenarchiv-ID (PDF)." & vbNewLine & "Datenarchiv-ID setzen?", vbYesNoCancel), True) Then For Each r As DataRow In dtREohneDAID.Rows Dim filename As String = IIf(Not IsDBNull(r.Item("plInv_PdfFileName")), r.Item("plInv_PdfFileName"), "") Dim filename2 As String = "" Dim filename3 As String = "" Dim filename4 As String = "" If filename <> "" Then filename2 = filename.Replace("-", "_") If Regex.IsMatch(filename, "^[A-Za-z]") Then Dim match As Match = Regex.Match(filename, "\d+") If match.Success Then filename3 = filename.Substring(match.Index).Trim filename4 = filename.Replace("-", "_") End If End If Dim daId As Integer = 0 If filename3 = "" Then daId = CInt(SQL.getValueTxtBySql("Select top(1) isnull(da_id,0) FROM tblDatenarchiv WHERE da_KundenNr = 0 And da_kategorie = 'MDM' AND da_ordner='MDM_DATEN' AND da_uOrdner1= 'PLOSE' AND da_uOrdner2= '" & jahr & "' AND (da_name like '%" & filename & "' or da_name like '%" & filename2 & "')", "FMZOLL",,, 0)) Else daId = CInt(SQL.getValueTxtBySql("Select top(1) isnull(da_id,0) FROM tblDatenarchiv WHERE da_KundenNr = 0 And da_kategorie = 'MDM' AND da_ordner='MDM_DATEN' AND da_uOrdner1= 'PLOSE' AND da_uOrdner2= '" & jahr & "' AND (da_name like '%" & filename & "' or da_name like '%" & filename2 & "' or da_name like '%" & filename3 & "' or da_name like '%" & filename4 & "')", "FMZOLL",,, 0)) End If If daId > 0 Then Dim DS As New VERAG_PROG_ALLGEMEIN.cDATENSERVER(daId) Dim Path As String = DS.GET_TOP1_PATH() If Path <> "" And System.IO.File.Exists(Path) Then SQL.doSQL("UPDATE [tblPLOSE_Inv_Data] SET plInv_daId = " & DS.da_id & ", plInv_daIdgesetztDatum = getdate() WHERE plInv_Id = " & r.Item("plInv_Id") & " AND plInv_daId is null", "FMZOLL") End If End If End If Next If message Then MsgBox("alle Rechnungsdaten gesetzt!") Return True End If Else If message Then MsgBox("keine fehlenden Rechnunngsdaten vorhanden!") Return False End If End Function End Class