Files
SDL/VERAG_PROG_ALLGEMEIN/Schnittstellen/DHF/cDHF_Artikel.vb

356 lines
14 KiB
VB.net

Imports System.Data.SqlClient
Imports System.Reflection
Imports com.sun.org.apache.xml.internal.security.transforms
' ========================
' 📦 Hauptklasse: DHF_Artikel
' ========================
Public Class DHF_Artikel
Public LizenzNr As String = "S01122"
Public FremdAdressID As String
Public FremdKennung As String = "EXT"
Public ArtikelCode As String
Public AdressID As Integer?
Public Bezeichnung As String
Public Eigenmasse As Double?
Public MengenEH As String
Public GueltigAb As Date?
Public Ursprungsland As String
Public AusfVerfCode As String
Public AusfVerfZusatzcode As String
Public EinfVerfCode As String
Public EinfVerfZusatzcode As String
Public IndEAH As Byte?
Public GeaendertVon As Integer = 1
Public GeaendertAm As Date = Now
Public ArtikelTarife As New List(Of DHF_ArtikelTarif)
Private db As New DHF_DBHelper
Public Function Save() As Boolean
Dim result = db.Save("imArtikel", GetParameterList())
If result = False Then
Return False ' Fehler beim Speichern der Hauptdaten
Else
For Each tarif In ArtikelTarife
tarif.LizenzNr = LizenzNr
tarif.FremdAdressID = FremdAdressID
tarif.FremdKennung = FremdKennung
tarif.ArtikelCode = ArtikelCode
tarif.Save()
Next
'DatenKomplete setzten -> Das Triggert die Verarbeitung der ArtikelTarife in Zolaris
db.UpdateDatenKomplett("imArtikel", GetParameterList())
Return result
End If
End Function
Public Function Delete() As Boolean
For Each tarif In ArtikelTarife
tarif.Delete()
Next
Return db.Delete("imArtikel", GetParameterList())
End Function
Public Shared Function Delete_KD(FremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean ' FremdAdressID= VERAG KdNr
' Dim AdressID_DHF As Integer = -1
Dim db As New DHF_DBHelper
' AdressID_DHF = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("AdressID", "zzAdressen", "FremdAdressID='" & KdNr & "' ", "EZOLL", -1)
If FremdAdressID <> "" Then
db.DeleteByFremdAdressID("imArtikelTarifZucodes", FremdAdressID, LizenzNr)
db.DeleteByFremdAdressID("imArtikelTarif", FremdAdressID, LizenzNr)
Return db.DeleteByFremdAdressID("imArtikel", FremdAdressID, LizenzNr)
Else
Return False
End If
End Function
Public Shared Function Delete_KDLiveDate(FremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean ' FremdAdressID= VERAG KdNr
Dim AdressID_DHF As Integer = -1
Dim db As New DHF_DBHelper
AdressID_DHF = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("AdressID", "zzAdressen", "FremdAdressID='" & FremdAdressID & "' AND LizenzNr='" & LizenzNr & "'", "EZOLL", -1)
Console.WriteLine(AdressID_DHF)
If AdressID_DHF > 0 Then
db.DeleteByAdressID("zzArtikelTarifZucodes", AdressID_DHF, LizenzNr)
db.DeleteByAdressID("zzArtikelTarif", AdressID_DHF, LizenzNr)
Return db.DeleteByAdressID("zzArtikel", AdressID_DHF, LizenzNr)
Else
Return False
End If
End Function
Private Function GetParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Return New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdAdressID", FremdAdressID, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdKennung", FremdKennung, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("ArtikelCode", ArtikelCode, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("AdressID", AdressID),
New VERAG_PROG_ALLGEMEIN.SQLVariable("Bezeichnung", Bezeichnung),
New VERAG_PROG_ALLGEMEIN.SQLVariable("Eigenmasse", Eigenmasse),
New VERAG_PROG_ALLGEMEIN.SQLVariable("MengenEH", MengenEH),
New VERAG_PROG_ALLGEMEIN.SQLVariable("GueltigAb", GueltigAb),
New VERAG_PROG_ALLGEMEIN.SQLVariable("Ursprungsland", Ursprungsland),
New VERAG_PROG_ALLGEMEIN.SQLVariable("AusfVerfCode", AusfVerfCode),
New VERAG_PROG_ALLGEMEIN.SQLVariable("AusfVerfZusatzcode", AusfVerfZusatzcode),
New VERAG_PROG_ALLGEMEIN.SQLVariable("EinfVerfCode", EinfVerfCode),
New VERAG_PROG_ALLGEMEIN.SQLVariable("EinfVerfZusatzcode", EinfVerfZusatzcode),
New VERAG_PROG_ALLGEMEIN.SQLVariable("IndEAH", IndEAH),
New VERAG_PROG_ALLGEMEIN.SQLVariable("GeaendertVon", GeaendertVon),
New VERAG_PROG_ALLGEMEIN.SQLVariable("GeaendertAm", GeaendertAm)
}
End Function
End Class
' ========================
' 💶 Unterklasse: DHF_ArtikelTarif
' ========================
Public Class DHF_ArtikelTarif
Public LizenzNr As String
Public FremdAdressID As String
Public FremdKennung As String
Public ArtikelCode As String
Public GueltigAb As Date?
Public TarifNr As String
Public TarifZucodes As New List(Of DHF_ArtikelTarifZucode)
Private db As New DHF_DBHelper
Public Function Save() As Boolean
Dim result = db.Save("imArtikelTarif", GetParameterList())
For Each zuc In TarifZucodes
zuc.LizenzNr = LizenzNr
zuc.FremdAdressID = FremdAdressID
zuc.FremdKennung = FremdKennung
zuc.ArtikelCode = ArtikelCode
zuc.GueltigAb = GueltigAb
zuc.Save()
Next
Return result
End Function
Public Function Delete() As Boolean
For Each zuc In TarifZucodes
zuc.Delete()
Next
Return db.Delete("imArtikelTarif", GetParameterList())
End Function
Private Function GetParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Return New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdAdressID", FremdAdressID, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdKennung", FremdKennung, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("ArtikelCode", ArtikelCode, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("GueltigAb", GueltigAb, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("TarifNr", TarifNr)
}
End Function
End Class
' ========================
' 🧩 Unterklasse: DHF_ArtikelTarifZucode
' ========================
Public Class DHF_ArtikelTarifZucode
Public LizenzNr As String
Public FremdAdressID As String
Public FremdKennung As String
Public ArtikelCode As String
Public GueltigAb As Date?
Public TarifNrZusatzcode As String
Private db As New DHF_DBHelper
Public Function Save() As Boolean
Return db.Save("imArtikelTarifZucodes", GetParameterList())
End Function
Public Function Delete() As Boolean
Return db.Delete("imArtikelTarifZucodes", GetParameterList())
End Function
Private Function GetParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Return New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdAdressID", FremdAdressID, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("FremdKennung", FremdKennung, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("ArtikelCode", ArtikelCode, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("GueltigAb", GueltigAb, , True),
New VERAG_PROG_ALLGEMEIN.SQLVariable("TarifNrZusatzcode", TarifNrZusatzcode)
}
End Function
End Class
' ========================
' 🧰 Datenbank-Hilfsklasse
' ========================
Public Class DHF_DBHelper
Private SQL As New SQL
Public Function SaveandDatenKomplete(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean
If Save(tableName, params) Then
UpdateDatenKomplett(tableName, params)
Return True
End If
Return False
End Function
Public Function Save(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean
Dim whereClause = GetPrimaryKeyWhere(params)
Dim existsSQL = "SELECT COUNT(*) FROM [" & tableName & "] WHERE " & whereClause
For Each p In params
If String.IsNullOrWhiteSpace(p.Scalarvariable) OrElse String.IsNullOrWhiteSpace(p.Text) Then
Throw New Exception("❌ Ungültiger Parameter in SQLVariable! Text='" & p.Text & "', Scalarvariable='" & p.Scalarvariable & "'")
End If
Next
' Prüfen, ob Eintrag existiert
Dim count = SQL.GetScalarValue(existsSQL, "EZOLL", params)
Dim sqlCmd As String
If count > 0 Then
sqlCmd = GetUpdateCmd(tableName, params)
Else
sqlCmd = GetInsertCmd(tableName, params)
End If
Return SQL.doSQLVarList(sqlCmd, "EZOLL", , params)
End Function
Public Function UpdateDatenKomplett(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean
Return SQL.doSQLVarList("update [" & tableName & "] set [DatenKomplett]=1 where
lizenzNr=@LizenzNr AND FremdAdressID=@FremdAdressID AND FremdKennung=@FremdKennung
and ArtikelCode=@ArtikelCode", "EZOLL", , params)
End Function
Public Function Delete(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As Boolean
Dim whereClause = GetPrimaryKeyWhere(params)
Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE " & whereClause
Return SQL.doSQLVarList(sqlstr, "EZOLL", , params)
End Function
Public Function DeleteByFremdAdressID(tableName As String, fremdAdressID As String, Optional LizenzNr As String = "S01122") As Boolean
Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [FremdAdressID]=@FID AND LizenzNr=@LizenzNr "
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", fremdAdressID),
New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr)
}
Return SQL.doSQLVarList(sqlstr, "EZOLL", , list)
End Function
Public Function DeleteByAdressID(tableName As String, AdressID As String, Optional LizenzNr As String = "S01122") As Boolean
Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [AdressID]=@FID AND LizenzNr=@LizenzNr "
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", AdressID),
New VERAG_PROG_ALLGEMEIN.SQLVariable("LizenzNr", LizenzNr)
}
Return SQL.doSQLVarList(sqlstr, "EZOLL", , list)
End Function
Private Function GetPrimaryKeyWhere(params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As String
Return String.Join(" AND ", params.Where(Function(p) p.isPrimaryParam).Select(Function(p) "[" & p.Text & "]=@" & p.Scalarvariable))
End Function
Private Function GetUpdateCmd(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As String
' Primärschlüssel-Felder NICHT in SET verwenden
Dim setCmd = String.Join(",",
params.Where(Function(p) p.isPrimaryParam <> True).
Select(Function(p) "[" & p.Text & "]=@" & p.Scalarvariable))
Return "UPDATE [" & tableName & "] SET " & setCmd & " WHERE " & GetPrimaryKeyWhere(params)
End Function
Private Function GetInsertCmd(tableName As String, params As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)) As String
Dim fields = String.Join(",", params.Select(Function(p) "[" & p.Text & "]"))
Dim values = String.Join(",", params.Select(Function(p) "@" & p.Scalarvariable))
Return "INSERT INTO [" & tableName & "] (" & fields & ") VALUES (" & values & ")"
End Function
End Class
Public Class DHF_ArtikelBeispiel
Public Shared Sub Beispiel_TestSave()
Dim KdNr = "123456"
DHF_Artikel.Delete_KD(KdNr)
Dim artikel As New DHF_Artikel With {
.LizenzNr = "S01122",
.FremdAdressID = KdNr,
.FremdKennung = "EXT",
.ArtikelCode = "ART1001",
.Bezeichnung = "Testartikel223",
.Eigenmasse = 12.5,
.MengenEH = "kg",
.GueltigAb = Date.Today,
.Ursprungsland = "AT",
.AusfVerfCode = "1000",
.EinfVerfCode = "4000",
.IndEAH = 0
}
Dim tarif1 As New DHF_ArtikelTarif With {
.GueltigAb = Date.Today,
.TarifNr = "85011000"
}
tarif1.TarifZucodes.Add(New DHF_ArtikelTarifZucode With {
.TarifNrZusatzcode = "V001"
})
tarif1.TarifZucodes.Add(New DHF_ArtikelTarifZucode With {
.TarifNrZusatzcode = "V002"
})
artikel.ArtikelTarife.Add(tarif1)
Dim tarif2 As New DHF_ArtikelTarif With {
.GueltigAb = Date.Today.AddDays(30),
.TarifNr = "85012000"
}
artikel.ArtikelTarife.Add(tarif2)
If artikel.Save() Then
Console.WriteLine("Artikel erfolgreich gespeichert.")
Else
Console.WriteLine("Fehler beim Speichern.")
End If
End Sub
Public Shared Sub Beispiel_TestDelete()
Dim artikel As New DHF_Artikel With {
.LizenzNr = "S00001",
.FremdAdressID = "K12345",
.FremdKennung = "EXT",
.ArtikelCode = "ART100"
}
If artikel.Delete() Then
Console.WriteLine("Artikel erfolgreich gelöscht.")
Else
Console.WriteLine("Fehler beim Löschen.")
End If
End Sub
Public Shared Sub Beispiel_DeleteAlleFuerKunde()
If DHF_Artikel.Delete_KD("K12345") Then
Console.WriteLine("Alle Artikel für Kunde gelöscht.")
Else
Console.WriteLine("Fehler beim Kundendaten-Löschen.")
End If
End Sub
End Class