Merge branch 'newMaster2024' of https://git.it.verag.ag/edv/SDL into newMaster2024

This commit is contained in:
2026-01-07 13:58:21 +01:00
16 changed files with 4249 additions and 1089 deletions

View File

@@ -0,0 +1,230 @@
Imports System.Data.SqlClient
Imports System.Reflection
Public Class cGreendeal_CBAM_Trn
' =====================================================
' Properties = Spalten tblGreendeal_CBAM_Trn
' =====================================================
Public Property cbam_Id As Integer
Public Property trnPattern As String
Public Property ware As String
Public Property sektor As String
Public Property hinweis As String
Public Property is_exclusion As Boolean?
Public Property is_active As Boolean?
Public Property start_date As Date?
Public Property end_date As Date?
Public Property hasEntry As Boolean = False
Private SQL As New SQL
' =====================================================
' Konstruktor
' =====================================================
Sub New()
End Sub
Sub New(cbam_Id As Integer)
Me.cbam_Id = cbam_Id
LOAD()
End Sub
' =====================================================
' Parameterliste (Mapping Property <-> SQL)
' =====================================================
Public Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("cbam_Id", cbam_Id,, True))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("trnPattern", trnPattern))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("ware", ware))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sektor", sektor))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("hinweis", hinweis))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("is_exclusion", is_exclusion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("is_active", is_active))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("start_date", start_date))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("end_date", end_date))
Return list
End Function
' =====================================================
' SAVE (Insert / Update)
' =====================================================
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList()
Dim sqlstr As String =
" BEGIN TRAN " &
" IF EXISTS (SELECT 1 FROM tblGreendeal_CBAM_Trn WHERE cbam_Id=@cbam_Id) " &
" BEGIN " & getUpdateCmd() & " END " &
" ELSE " &
" BEGIN " & getInsertCmd() & " END " &
" COMMIT TRAN "
Return SQL.doSQLVarList(sqlstr, "VERAG", , list)
End Function
' =====================================================
' LOAD
' =====================================================
Public Sub LOAD()
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand(
"SELECT * FROM tblGreendeal_CBAM_Trn WHERE cbam_Id=@cbam_Id", conn)
cmd.Parameters.AddWithValue("@cbam_Id", cbam_Id)
Using dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
Dim pi As PropertyInfo =
Me.GetType.GetProperty(li.Scalarvariable)
If pi IsNot Nothing Then
If dr.Item(li.Text) Is DBNull.Value Then
pi.SetValue(Me, Nothing)
Else
pi.SetValue(Me, dr.Item(li.Text))
End If
End If
Next
hasEntry = True
End If
End Using
End Using
End Using
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
ex.Message,
ex.StackTrace,
System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
' =====================================================
' UPDATE Command
' =====================================================
Private Function getUpdateCmd() As String
Try
Dim list = getParameterList()
Dim str As String = ""
For Each i In list
If Not i.isPrimaryParam Then
str &= "[" & i.Text & "] = @" & i.Scalarvariable & ","
End If
Next
str = str.Substring(0, str.Length - 1)
Return " UPDATE tblGreendeal_CBAM_Trn SET " & str &
" WHERE cbam_Id=@cbam_Id "
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
ex.Message,
ex.StackTrace,
System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return ""
End Function
' =====================================================
' INSERT Command
' =====================================================
Private Function getInsertCmd() As String
Try
Dim list = getParameterList()
Dim cols As String = ""
Dim vals As String = ""
For Each i In list
If Not i.isPrimaryParam Then
cols &= "[" & i.Text & "],"
vals &= "@" & i.Scalarvariable & ","
End If
Next
cols = cols.Substring(0, cols.Length - 1)
vals = vals.Substring(0, vals.Length - 1)
Return " INSERT INTO tblGreendeal_CBAM_Trn (" & cols & ") VALUES (" & vals & ") "
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
ex.Message,
ex.StackTrace,
System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return ""
End Function
Public Shared Function BuildCBAMPatternWhereClause(columnName As String, Optional onlyActive As Boolean = True, Optional includeExclusions As Boolean = False) As String
Dim sql As String =
"SELECT trnPattern " &
" FROM VERAG.dbo.tblGreendeal_CBAM_Trn " &
" WHERE trnPattern IS NOT NULL " &
" AND LTRIM(RTRIM(trnPattern)) <> '' "
If onlyActive Then
sql &= " AND is_active = 1 " &
" AND (start_date IS NULL OR start_date <= GETDATE()) " &
" AND (end_date IS NULL OR end_date >= GETDATE()) "
End If
If Not includeExclusions Then
sql &= " AND ISNULL(is_exclusion,0) = 0 "
End If
Dim dt As DataTable = (New VERAG_PROG_ALLGEMEIN.SQL).loadDgvBySql(sql, "FMZOLL")
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return "1=0" ' bewusst: keine Patterns → kein Treffer
End If
Dim conditions As New List(Of String)
For Each r As DataRow In dt.Rows
Dim pattern As String = r("trnPattern").ToString().Trim()
' einfache SQL-Escaping-Sicherheit
pattern = pattern.Replace("'", "''")
conditions.Add($"{columnName} LIKE '{pattern}'")
Next
Return "(" & String.Join(" OR ", conditions) & ")"
End Function
Public Shared Function DELETE_ALL() As Boolean
Try
Dim sqlstr As String = " DELETE FROM tblGreendeal_CBAM_Trn "
Return (New VERAG_PROG_ALLGEMEIN.SQL).doSQL(sqlstr, "VERAG", , Nothing)
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(
ex.Message,
ex.StackTrace,
System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return False
End Function
End Class

View File

@@ -1,4 +1,5 @@
Imports System.Data.SqlClient
Imports javax.xml.bind.annotation
Public Class cSendungen
Implements ICloneable
@@ -132,7 +133,7 @@ Public Class cSendungen
Public Function CLEAR_ABRECHNUNG_NotLeistungen() As Boolean
ABRECHNUNG.RemoveAll(Function(x) x.sndabr_abrArt = "ZOLL")
ABRECHNUNG.RemoveAll(Function(x) x.sndabr_abrArt = "EUST")
ABRECHNUNG.RemoveAll(Function(x) x.sndabr_abrArt = "CLEARING")
@@ -295,6 +296,24 @@ Public Class cSendungen
Return Nothing
End If
End Function
Public Shared Function getAvisoIdSendungsIdByFilialenNrAbfertigungsNr(FilialenNr As Integer, AbfertigungsNr As Integer, ByRef AvisoID As Integer, ByRef SendungID As Integer) As Boolean
Dim sql As New VERAG_PROG_ALLGEMEIN.SQL
Dim dt = sql.loadDgvBySql("SELECT TOP 1 tblSnd_AvisoID, tblSnd_SendungID FROM tblSendungen WHERE FilialenNr='" & FilialenNr & "' AND AbfertigungsNr='" & AbfertigungsNr & "'", "AVISO")
If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
Dim AvisopIdTmp = dt.Rows(0)("tblSnd_AvisoID")
Dim SendungIDTmp = dt.Rows(0)("tblSnd_SendungID")
If AvisopIdTmp IsNot DBNull.Value AndAlso IsNumeric(AvisopIdTmp) Then
AvisoID = CInt(AvisopIdTmp)
End If
If SendungIDTmp IsNot DBNull.Value AndAlso IsNumeric(SendungIDTmp) Then
SendungID = CInt(SendungIDTmp)
End If
Return True
Else
Return False
End If
End Function
Public Function getKdAtrNr(art As String) As String
Try

View File

@@ -33,7 +33,6 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
json.Load(resp.BodyStr)
Dim r As New cCBAM_CnCode_Response With {.success = json.BoolOf("success")}
If r.success Then
r.data = New List(Of cCBAM_CnCode)
Dim a = json.ArrayOf("data")
@@ -51,6 +50,27 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
Return r
End Function
Public Function insertinto_Greendeal_CBAM_Trn(cCBAM_CnCode_Response As cCBAM_CnCode_Response) As Boolean
VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.DELETE_ALL()
For Each CN In cCBAM_CnCode_Response.data
Dim CBAM As New VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn
CBAM.trnPattern = CN.cn_code & "%"
CBAM.sektor = ""
CBAM.ware = CN.cn_description
CBAM.is_exclusion = False
CBAM.is_active = True
CBAM.start_date = "01.10.2023"
CBAM.end_date = Nothing
CBAM.SAVE()
Next
Return True
End Function
' ------------------------------------------------------------------------
' GET /carbon-cost/cn-code-defaults
' ------------------------------------------------------------------------
@@ -126,14 +146,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
' ------------------------------------------------------------------------
' calcCBAM mit automatischem Fallback auf CN-Code Defaults
' ------------------------------------------------------------------------
Public Shared Function calcCBAM(
cn_code As String,
weight As Object,
country_code As String,
Optional see_total As Object = Nothing,
Optional year As Object = Nothing,
Optional benchmark_value As Object = Nothing
) As String
Public Shared Function calcCBAM(cn_code As String, weight As Object, country_code As String, Optional ByRef see_total As Object = Nothing, Optional year As Object = Nothing, Optional ByRef benchmark_value As Object = Nothing, Optional ByRef CBAM_COST As Decimal = -1, Optional ByRef CBAM_EMISSION As Decimal = -1) As String
' ------------------------------------------------------------
' Basis-Validierung
@@ -187,6 +200,9 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
If defResp.success Then
defaultEmission = defResp.data.default_emission
defaultBenchmark = defResp.data.benchmark
benchmark_value = defaultBenchmark
see_total = defaultEmission
Else
Return $"FEHLER DEFAULTS {defResp.error.code}: {defResp.error.message}"
End If
@@ -252,7 +268,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
s &= $"Gewicht: {req.weight:N2} t" & vbCrLf
s &= vbCrLf
s &= $"Kosten: {d.cost:N2} {d.currency}" & vbCrLf
's &= $"Kosten: {d.cost:N2} {d.currency}" & vbCrLf
s &= $"CBAM Emission: {d.cbam_emission:N5}" & vbCrLf
s &= $"Benchmark: {d.benchmark:N5}" & vbCrLf
s &= $"Phase-Faktor: {d.phase_factor:P2}" & vbCrLf
@@ -261,12 +277,96 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
If Not String.IsNullOrWhiteSpace(d.info_message) Then
s &= vbCrLf & "Info: " & d.info_message & vbCrLf
End If
s &= vbCrLf
s &= $"CBAM Kosten: {d.cost:N2} {d.currency}" & vbCrLf
CBAM_COST = d.cost
CBAM_EMISSION = see_total
Return s
End Function
Public Shared Function calcCBAM_ByCertificatePrice(cn_code As String, weight As Object, country_code As String, certificate_price As Object, year As Object, Optional ByRef CBAM_COST As Decimal = -1, Optional ByRef CBAM_EMISSION As Decimal = -1) As String
' ------------------------------------------------------------
' Validierung
' ------------------------------------------------------------
If cn_code Is Nothing OrElse Not IsNumeric(cn_code) _
OrElse Not {4, 6, 8}.Contains(cn_code.Length) Then
Return "Fehler: CN-Code muss 4-, 6- oder 8-stellig numerisch sein"
End If
If weight Is Nothing OrElse Not IsNumeric(weight) OrElse CDbl(weight) <= 0 Then
Return "Fehler: Gewicht muss > 0 sein"
End If
If country_code Is Nothing OrElse country_code.Length <> 2 Then
Return "Fehler: country_code muss ISO-2 sein"
End If
If certificate_price Is Nothing OrElse Not IsNumeric(certificate_price) OrElse CDbl(certificate_price) <= 0 Then
Return "Fehler: Zertifikatspreis muss > 0 sein"
End If
If year Is Nothing Or Not IsNumeric(year) Then
Return "Fehler: ungültiges Jahr"
End If
' ------------------------------------------------------------
' SEE total (Default-Emission) laden
' ------------------------------------------------------------
Dim api As New cATEZ_Greenpulse_CBAM_CostCalculation()
Dim see_total As Decimal
Try
Dim defResp = api.GetCnCodeDefaults(
cn_code,
country_code.ToUpperInvariant(),
CInt(year)
)
If Not defResp.success Then
Return $"FEHLER DEFAULTS {defResp.error.code}: {defResp.error.message}"
End If
If defResp.data.default_emission < 0 Then
Return "Fehler: Keine Default-Emission (see_total) verfügbar"
End If
see_total = defResp.data.default_emission
Catch ex As Exception
Return "Technischer Fehler beim Laden der CN-Code Defaults: " & ex.Message
End Try
' ------------------------------------------------------------
' Berechnung (ohne Phase-Faktor!)
' ------------------------------------------------------------
Dim w As Decimal = CDec(weight)
Dim price As Decimal = CDec(certificate_price)
Dim cbamEmission As Decimal = w * see_total
Dim cbamCost As Decimal = cbamEmission * price
' ------------------------------------------------------------
' Ausgabe
' ------------------------------------------------------------
Dim s As String = ""
s &= "CBAM Kostenberechnung (ohne Benchmark)" & vbCrLf
s &= "-----------------------------------------------------------" & vbCrLf
s &= $"CN-Code: {cn_code}" & vbCrLf
s &= $"Ursprungsland: {country_code.ToUpperInvariant()}" & vbCrLf
s &= $"Gewicht: {w:N2} t" & vbCrLf
s &= $"SEE total (Default): {see_total:N5}" & vbCrLf
s &= $"CBAM Emission: {cbamEmission:N5} t CO₂" & vbCrLf
s &= $"Zertifikatspreis: {price:N2} EUR/t" & vbCrLf
s &= vbCrLf
s &= $"CBAM Kosten: {cbamCost:N2} EUR" & vbCrLf
CBAM_COST = cbamCost
CBAM_EMISSION = see_total
Return s
End Function
' ------------------------------------------------------------------------
' Helpers
' ------------------------------------------------------------------------

View File

@@ -46,6 +46,13 @@ Public Class cATEZ_Greenpulse_KafkaDecs
Dim m = (mrn).ToUpperInvariant()
Return String.Join(SEP_PIPE, New String() {KEY_VERSION, c, s, m})
End Function
Public Shared Function GetUniqueKey_Pipe_FromVERAG_CustomsDec(CD As VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations, Optional mrn As String = "") As String
Dim c = (If(CD.za_CountryImport, CD.za_CustomsSystemCountry)).ToUpperInvariant()
Dim s = (If(CD.za_System, CD.za_CustomsSystem)).ToUpperInvariant()
Dim m = (If(mrn = "", CD.za_MRN, mrn)).ToUpperInvariant()
Return String.Join(SEP_PIPE, New String() {KEY_VERSION, c, s, m})
End Function
'========================
'== Datenobjekte lt. UDM-Schema

View File

@@ -385,6 +385,7 @@
<Compile Include="Classes\cGesamtsicherheitsPositionen.vb" />
<Compile Include="Classes\cGestellungsgarantien.vb" />
<Compile Include="Classes\cGestellungsmitteilung.vb" />
<Compile Include="Classes\cGreendeal_CBAM_Trn.vb" />
<Compile Include="Classes\cGrenzstelle.vb" />
<Compile Include="Classes\cGruppeKundenNr.vb" />
<Compile Include="Classes\cGVMS.vb" />

View File

@@ -71,6 +71,120 @@ Public Class cProgramFunctions
End Function
Public Shared Sub tryGetFilialeAbf_ByLRN(ByVal LRN As String, ByRef FilialenNr As Object, ByRef AbfertigungsNr As Object)
If String.IsNullOrWhiteSpace(LRN) Then Exit Sub
Dim pattern As String = "^(?<Filiale>\d{4})[\/\-](?<Abfertigung>\d{8})"
Dim m As System.Text.RegularExpressions.Match =
System.Text.RegularExpressions.Regex.Match(LRN.Trim(), pattern)
If Not m.Success Then Exit Sub
Dim filialeStr As String = m.Groups("Filiale").Value
Dim abfertigungStr As String = m.Groups("Abfertigung").Value
Dim FilialenNrTmp As Integer
Dim AbfertigungsNrTmp As Integer
If Integer.TryParse(filialeStr, FilialenNrTmp) AndAlso
Integer.TryParse(abfertigungStr, AbfertigungsNrTmp) Then
FilialenNr = FilialenNrTmp
AbfertigungsNr = AbfertigungsNrTmp
End If
End Sub
Public Shared Sub tryGetAvisoId_SndId_ByLRN(ByVal LRN As String, ByRef AvisoId As Object, ByRef SendungId As Object)
Dim FilialenNrTmp As Integer = -1
Dim AbfertigungsNrTmp As Integer = -1
tryGetFilialeAbf_ByLRN(LRN, FilialenNrTmp, AbfertigungsNrTmp)
If FilialenNrTmp > 0 AndAlso AbfertigungsNrTmp > 0 Then
VERAG_PROG_ALLGEMEIN.cSendungen.getAvisoIdSendungsIdByFilialenNrAbfertigungsNr(FilialenNrTmp, AbfertigungsNrTmp, AvisoId, SendungId)
End If
End Sub
Public Shared Sub tryGetFirmaNiederlassung(ByRef firma As String, ByRef niederlassung As String, Mail As String, BezugsNr As String)
If Mail.Contains("@imex") Then
firma = "IMEX"
niederlassung = "IMEX"
ElseIf Mail.Contains("@ambar") Then
firma = "AMBAR"
niederlassung = "AMBAR"
ElseIf Mail.Contains("atilla@verag.ag") Or Mail.Contains("@atilla") Then
If BezugsNr <> "" Then ' VERIMEX --> wenn keine Bezugsnummer, dann bei anderem Satus..
'----------------------------------------------------------------------------
'VERIMEX!!!! --> Arbeitet bim T1 Vorschreiben mit ATILLA Benutzer
Dim verimex = False
If firma = "" Then
If BezugsNr <> "" And BezugsNr.Length > 4 Then
Select Case BezugsNr.Substring(0, 4)
Case "5501", "4803", "5003", "5103", "5303", "4805", "4811", "7001", "5601"
verimex = True
End Select
End If
End If
'----------------------------------------------------------------------------
If Not verimex Then
firma = "ATILLA"
niederlassung = "SUB"
End If
End If
ElseIf Mail.Contains("@durmaz") Then
firma = "DURMAZ"
niederlassung = "SBG"
ElseIf Mail.Contains("@verag") Then
firma = "VERAG"
ElseIf Mail.Contains("@unisped") Then
firma = "UNISPED"
niederlassung = "ATSP"
End If
If firma = "" Then
Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA 'Gehrt nur bei UNSPED
Case "UNISPED"
firma = "UNISPED"
niederlassung = "ATSP"
End Select
End If
If firma = "" Then
If BezugsNr <> "" And BezugsNr.Length > 4 Then
Select Case BezugsNr.Substring(0, 4)
Case "5501"
firma = "IMEX"
'niederlassung = "IMEX"
Case "5701"
firma = "AMBAR"
niederlassung = "AMBAR"
Case "4801", "4802"
firma = "ATILLA"
niederlassung = "SUB"
'Case "4801"
' firma = "DURMAZ"
' niederlassung = "SBG"
Case "4803", "5003", "5103", "5303", "4805", "4811", "7001"
firma = "VERAG"
Case "5601"
firma = "UNISPED"
niederlassung = "ATSP"
End Select
End If
End If
End Sub
Public Shared Function fktEuro(varBetrag As Object, varVonWährung As Object, varNachWährung As Object) As Object
'(FixeTaxe, "ATS", RECHNUNG.Währungscode)
'Dim varVonWährung As Object