DHF Artikelstamm

This commit is contained in:
2025-08-05 21:39:06 +02:00
parent 0f98cbcc8b
commit 2760a44ed7
13 changed files with 841 additions and 86 deletions

View File

@@ -0,0 +1,299 @@
Imports System.Reflection
Imports System.Data.SqlClient
' ========================
' 📦 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())
For Each tarif In ArtikelTarife
tarif.LizenzNr = LizenzNr
tarif.FremdAdressID = FremdAdressID
tarif.FremdKennung = FremdKennung
tarif.ArtikelCode = ArtikelCode
tarif.Save()
Next
Return result
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(KdNr As String) As Boolean
Dim db As New DHF_DBHelper
db.DeleteByFremdAdressID("imArtikelTarifZucodes", KdNr)
db.DeleteByFremdAdressID("imArtikelTarif", KdNr)
Return db.DeleteByFremdAdressID("imArtikel", KdNr)
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 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 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) As Boolean
Dim sqlstr = "DELETE FROM [" & tableName & "] WHERE [FremdAdressID]=@FID"
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("FID", fremdAdressID)
}
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)
MsgBox("del")
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