This commit is contained in:
2026-01-13 15:29:00 +01:00
parent 84e9e86a4d
commit 283ba40d9c
5 changed files with 94 additions and 39 deletions

View File

@@ -44,6 +44,7 @@ Partial Class frmVorauskasse_CBAM
Me.clmnYear = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.clmnYear = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.clmnKosten = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.clmnKosten = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.cmlnEmission = New System.Windows.Forms.DataGridViewTextBoxColumn() Me.cmlnEmission = New System.Windows.Forms.DataGridViewTextBoxColumn()
Me.clmnBenchmark = New System.Windows.Forms.DataGridViewTextBoxColumn()
CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.MyDatagridview1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout() Me.SuspendLayout()
' '
@@ -124,7 +125,7 @@ Partial Class frmVorauskasse_CBAM
' '
Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1 Me.MyDatagridview1.AKTUALISIERUNGS_INTERVALL = -1
Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.MyDatagridview1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
Me.MyDatagridview1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.clmnTarif, Me.clmnWeight, Me.clmnCountry, Me.clmnYear, Me.clmnKosten, Me.cmlnEmission}) Me.MyDatagridview1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.clmnTarif, Me.clmnWeight, Me.clmnCountry, Me.clmnYear, Me.clmnKosten, Me.cmlnEmission, Me.clmnBenchmark})
Me.MyDatagridview1.Location = New System.Drawing.Point(12, 12) Me.MyDatagridview1.Location = New System.Drawing.Point(12, 12)
Me.MyDatagridview1.Name = "MyDatagridview1" Me.MyDatagridview1.Name = "MyDatagridview1"
Me.MyDatagridview1.Size = New System.Drawing.Size(430, 359) Me.MyDatagridview1.Size = New System.Drawing.Size(430, 359)
@@ -176,7 +177,6 @@ Partial Class frmVorauskasse_CBAM
' '
'Button1 'Button1
' '
Me.Button1.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat Me.Button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat
Me.Button1.Image = Global.SDL.My.Resources.Resources.Excel_logo Me.Button1.Image = Global.SDL.My.Resources.Resources.Excel_logo
Me.Button1.Location = New System.Drawing.Point(12, 451) Me.Button1.Location = New System.Drawing.Point(12, 451)
@@ -236,6 +236,12 @@ Partial Class frmVorauskasse_CBAM
Me.cmlnEmission.Name = "cmlnEmission" Me.cmlnEmission.Name = "cmlnEmission"
Me.cmlnEmission.Visible = False Me.cmlnEmission.Visible = False
' '
'clmnBenchmark
'
Me.clmnBenchmark.HeaderText = "Benchmark"
Me.clmnBenchmark.Name = "clmnBenchmark"
Me.clmnBenchmark.Visible = False
'
'frmVorauskasse_CBAM 'frmVorauskasse_CBAM
' '
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
@@ -279,4 +285,5 @@ Partial Class frmVorauskasse_CBAM
Friend WithEvents clmnYear As DataGridViewTextBoxColumn Friend WithEvents clmnYear As DataGridViewTextBoxColumn
Friend WithEvents clmnKosten As DataGridViewTextBoxColumn Friend WithEvents clmnKosten As DataGridViewTextBoxColumn
Friend WithEvents cmlnEmission As DataGridViewTextBoxColumn Friend WithEvents cmlnEmission As DataGridViewTextBoxColumn
Friend WithEvents clmnBenchmark As DataGridViewTextBoxColumn
End Class End Class

View File

@@ -135,6 +135,9 @@
<metadata name="cmlnEmission.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <metadata name="cmlnEmission.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value> <value>True</value>
</metadata> </metadata>
<metadata name="clmnBenchmark.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>

View File

@@ -27,11 +27,13 @@ Public Class frmVorauskasse_CBAM
If Not r.IsNewRow Then If Not r.IsNewRow Then
Dim cost As Double = 0 Dim cost As Double = 0
Dim emission As Double = 0 Dim emission As Double = 0
cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM_ByCertificatePrice(r.Cells("clmnTarif").Value, r.Cells("clmnWeight").Value, r.Cells("clmnCountry").Value, txtCalc_Defaut_CertPrice._value, r.Cells("clmnYear").Value, cost, emission) Dim benchmark As Double = 0
cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM_ByCertificatePrice(r.Cells("clmnTarif").Value, r.Cells("clmnWeight").Value, r.Cells("clmnCountry").Value, txtCalc_Defaut_CertPrice._value, r.Cells("clmnYear").Value, cost, emission, benchmark)
If cost > 0 Then If cost > 0 Then
r.Cells("clmnKosten").Value = cost r.Cells("clmnKosten").Value = cost
r.Cells("cmlnEmission").Value = emission r.Cells("cmlnEmission").Value = emission
r.Cells("clmnBenchmark").Value = benchmark
GesamtBetrag += cost GesamtBetrag += cost
End If End If

View File

@@ -285,7 +285,9 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
End Function 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 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, Optional ByRef CBAM_BENCHMARK As Decimal = -1, Optional ByRef CBAM_Faktor As Decimal = -1) As String
VERAG_PROG_ALLGEMEIN.cChilkat_Helper.UnlockCilkat()
' ------------------------------------------------------------ ' ------------------------------------------------------------
' Validierung ' Validierung
@@ -316,6 +318,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
' ------------------------------------------------------------ ' ------------------------------------------------------------
Dim api As New cATEZ_Greenpulse_CBAM_CostCalculation() Dim api As New cATEZ_Greenpulse_CBAM_CostCalculation()
Dim see_total As Decimal Dim see_total As Decimal
Dim benchmark As Decimal
Try Try
Dim defResp = api.GetCnCodeDefaults( Dim defResp = api.GetCnCodeDefaults(
@@ -333,6 +336,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
End If End If
see_total = defResp.data.default_emission see_total = defResp.data.default_emission
benchmark = defResp.data.benchmark
Catch ex As Exception Catch ex As Exception
Return "Technischer Fehler beim Laden der CN-Code Defaults: " & ex.Message Return "Technischer Fehler beim Laden der CN-Code Defaults: " & ex.Message
@@ -344,25 +348,52 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
Dim w As Decimal = CDec(weight) Dim w As Decimal = CDec(weight)
Dim price As Decimal = CDec(certificate_price) Dim price As Decimal = CDec(certificate_price)
Dim cbamEmission As Decimal = w * see_total
Dim cbamCost As Decimal = cbamEmission * price
' ------------------------------------------------------------ ' --- Faktoren als echte Faktoren (nicht Prozent) ---
' Ausgabe Dim cbamf As Decimal = 0D
' ------------------------------------------------------------ Select Case CInt(year)
Case 2026 : cbamf = 0.975D
Case 2027 : cbamf = 0.95D
Case 2028 : cbamf = 0.9D
Case 2029 : cbamf = 0.775D
Case 2030 : cbamf = 0.515D
Case 2031 : cbamf = 0.39D
Case 2032 : cbamf = 0.265D
Case 2033 : cbamf = 0.14D
Case Else : cbamf = 0D
End Select
' SEFA = Benchmark * CBAMF * CSCF
Dim sefa As Decimal = benchmark * cbamf
' Zertifikatspflicht je Tonne Ware
Dim certPerTon As Decimal = see_total - sefa
If certPerTon < 0D Then certPerTon = 0D
' Gesamte Zertifikatspflicht (t CO2e)
Dim certTotal As Decimal = certPerTon * w
' Kosten
Dim cbamCost As Decimal = certTotal * price
' --- Ausgabe ---
Dim s As String = "" Dim s As String = ""
s &= "CBAM Kostenberechnung (ohne Benchmark)" & vbCrLf s &= "CBAM Kostenberechnung (Default EE mit SEFA-Abzug)" & vbCrLf
s &= "-----------------------------------------------------------" & vbCrLf s &= "-----------------------------------------------------------" & vbCrLf
s &= $"CN-Code: {cn_code}" & vbCrLf s &= $"CN-Code: {cn_code}" & vbCrLf
s &= $"Ursprungsland: {country_code.ToUpperInvariant()}" & vbCrLf s &= $"Ursprungsland: {country_code.ToUpperInvariant()}" & vbCrLf
s &= $"Jahr: {year}" & vbCrLf
s &= $"Gewicht: {w:N2} t" & vbCrLf s &= $"Gewicht: {w:N2} t" & vbCrLf
s &= $"SEE total (Default): {see_total:N5}" & vbCrLf s &= $"EE / SEE total (Default): {see_total:N6} t CO₂e/t" & vbCrLf
s &= $"CBAM Emission: {cbamEmission:N5} t CO₂" & vbCrLf s &= $"Benchmark BMg: {benchmark:N6} t CO₂e/t" & vbCrLf
s &= $"Zertifikatspreis: {price:N2} EUR/t" & vbCrLf s &= $"CBAMF: {cbamf:N3}"
s &= vbCrLf Console.WriteLine(s)
s &= $"CBAM Kosten: {cbamCost:N2} EUR" & vbCrLf
CBAM_COST = cbamCost CBAM_COST = cbamCost
CBAM_EMISSION = see_total CBAM_EMISSION = see_total
CBAM_BENCHMARK = benchmark
CBAM_Faktor = cbamf
Return s Return s

View File

@@ -369,6 +369,7 @@ Public Class cVERAG_CustomsDeclarations
If hasCBAM(CBAM_ITEMS) Then If hasCBAM(CBAM_ITEMS) Then
Dim importerEORI As String = Me.Parties.Where(Function(p) {"CN", "IM", "IMP", "IMPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_EORI).FirstOrDefault() Dim importerEORI As String = Me.Parties.Where(Function(p) {"CN", "IM", "IMP", "IMPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_EORI).FirstOrDefault()
Dim ImporterString As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_Name).FirstOrDefault()
Dim ExporterEORI As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_EORI).FirstOrDefault() Dim ExporterEORI As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_EORI).FirstOrDefault()
Dim ExporterString As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_Name).FirstOrDefault() Dim ExporterString As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_Name).FirstOrDefault()
@@ -380,14 +381,27 @@ Public Class cVERAG_CustomsDeclarations
AD = New cAdressen(KD.KundenNr) AD = New cAdressen(KD.KundenNr)
End If End If
If isIndirect() Then
If AD IsNot Nothing Then
ImporterString = AD.Name_1 & " " & If(AD.Name_2, "") & "<br/>" & If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")
End If
Dim KD_EX As cKunde = Nothing Dim KD_EX As cKunde = Nothing
Dim AD_EX As cAdressen = Nothing Dim AD_EX As cAdressen = Nothing
If If(ExporterEORI, "") <> "" Then If If(ExporterEORI, "") <> "" Then
KD_EX = cKunde.LOAD_ByEORI(ExporterEORI, If(za_Firma, "")) KD_EX = cKunde.LOAD_ByEORI(ExporterEORI, If(za_Firma, ""))
If KD_EX Is Nothing Then KD_EX = cKunde.LOAD_ByEORI(ExporterEORI) 'Wenn kein Kunde mit Firma gefunden wurde, nur nach EORI suchen (default VERAG) If KD_EX Is Nothing Then KD_EX = cKunde.LOAD_ByEORI(ExporterEORI) 'Wenn kein Kunde mit Firma gefunden wurde, nur nach EORI suchen (default VERAG)
AD_EX = New cAdressen(KD_EX.KundenNr) AD_EX = New cAdressen(KD_EX.KundenNr)
End If End If
If AD_EX IsNot Nothing Then
ExporterString = AD_EX.Name_1 & " " & If(AD_EX.Name_2, "") & "<br/>" & If(AD_EX.LandKz, "") & " " & If(AD_EX.PLZ, "") & " " & If(AD_EX.Ort, "")
End If
If isIndirect() Then
'==================>> INDIRECT <<========================= '==================>> INDIRECT <<=========================
Dim itemsHtml As String = Dim itemsHtml As String =
@@ -416,9 +430,7 @@ Public Class cVERAG_CustomsDeclarations
"</table>" & "</table>" &
"<p>" & "<p>" &
"<b>Importeur:</b><br/>" & "<b>Importeur:</b><br/>" &
importerEORI & " " & vbNewLine & If(importerEORI, "") & "<br>" & If(ImporterString, "") &
If(AD Is Nothing, ExporterString, AD.Name_1 & " " & If(AD.Name_2, "") & "<br/>" &
If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) &
"</p>" & "</p>" &
"<p>" & "<p>" &
"<b>Exporteur:</b><br/>" & "<b>Exporteur:</b><br/>" &
@@ -482,6 +494,7 @@ Public Class cVERAG_CustomsDeclarations
'===========>>>> WARNUNG <<<<<<<================================= '===========>>>> WARNUNG <<<<<<<=================================
If WarnLevel <> "" Then If WarnLevel <> "" Then
Dim bodyHtml As String = Dim bodyHtml As String =
"<html><body style='font-family:Segoe UI, Arial, sans-serif; font-size:12pt; color:#222'>" & "<html><body style='font-family:Segoe UI, Arial, sans-serif; font-size:12pt; color:#222'>" &
"<h2 style='color:#b00020'>CBAM-Warnmeldung zu Ihrer Zollanmeldung " & Me.za_MRN & "</h2>" & "<h2 style='color:#b00020'>CBAM-Warnmeldung zu Ihrer Zollanmeldung " & Me.za_MRN & "</h2>" &
@@ -491,18 +504,16 @@ Public Class cVERAG_CustomsDeclarations
"Für Ihr Unternehmen liegen uns derzeit keine Informationen über eine gültige CBAM-Registrierung vor." & "Für Ihr Unternehmen liegen uns derzeit keine Informationen über eine gültige CBAM-Registrierung vor." &
"</p>" & "</p>" &
"<table cellpadding='6' cellspacing='0' border='1' style='border-collapse:collapse'>" & "<table cellpadding='6' cellspacing='0' border='1' style='border-collapse:collapse'>" &
"<tr><td><b>Warnstufe</b></td><td>" & WarnLevel & If(WarnLevel = 3, " - <b style='color:#b00020'>ÜBERSCHREITUNG!</b>", "") & "</td></tr>" & "<tr><td><b>Warnstufe</b></td><td>" & WarnLevel & If(WarnLevel = 3, " - <span style='color:#b00020'><b>ÜBERSCHREITUNG!</b></span>", "") & "</td></tr>" &
"<tr><td><b>Schwellenwert</b></td><td>" & Schwellenwert.ToString("N0") & " Tonnen</td></tr>" & "<tr><td><b>Schwellenwert</b></td><td>" & Schwellenwert.ToString("N0") & " Tonnen</td></tr>" &
"</table><br/>" & "</table><br/>" &
"<p>" & "<p>" &
"<b>Importeur:</b><br/>" & "<b>Importeur:</b><br/>" &
importerEORI & " " & vbNewLine & If(importerEORI, "") & "<br>" & If(ImporterString, "") &
If(AD Is Nothing, ExporterString, AD.Name_1 & " " & If(AD.Name_2, "") & "<br/>" &
If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) &
"</p>" & "</p>" &
"<p>" & "<p>" &
"<b>Exporteur:</b><br/>" & "<b>Exporteur:</b><br/>" &
If(ExporterEORI, "") & " " & vbNewLine & If(ExporterString, "") & If(ExporterEORI, "") & "<br>" & If(ExporterString, "") &
"</p>" & "</p>" &
"<p style='color:#b00020'><b>WICHTIG</b></p>" & "<p style='color:#b00020'><b>WICHTIG</b></p>" &
"<p>" & "<p>" &
@@ -518,9 +529,10 @@ Public Class cVERAG_CustomsDeclarations
"<p><b>VERAG DCS CBAM Compliance Services</b></p>" & "<p><b>VERAG DCS CBAM Compliance Services</b></p>" &
"<p>VERAG Spedition AG<br>A-4975 Suben, Suben 100</p>" & "<p>VERAG Spedition AG<br>A-4975 Suben, Suben 100</p>" &
"</body></html>" "</body></html>"
Console.WriteLine(bodyHtml)
' VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(If(AD.E_Mail, ""), "CBAM-WARNUNG " & If(WarnLevel = 3, " ACHTUNG: Überschreitung 50to! ", "Überschreitung der Meldeschwelle"), bodyHtml, "cbam@verag.ag", (WarnLevel = 3), "cbam@verag.ag",, "al@verag.ag")
VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(If(AD.E_Mail, ""), "CBAM-WARNUNG " & If(WarnLevel = 3, " - ACHTUNG: Überschreitung 50to! ", "Überschreitung der Meldeschwelle"), bodyHtml, "cbam@verag.ag", (WarnLevel = 3), "cbam@verag.ag",, "al@verag.ag") VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(If(AD.E_Mail, ""), "CBAM-WARNUNG " & If(WarnLevel = 3, " ACHTUNG: Überschreitung 50to! ", "Überschreitung der Meldeschwelle"), bodyHtml, "cbam@verag.ag", (WarnLevel = 3), False, "cbam@verag.ag", "al@verag.ag")
'VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail( 'VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(
' "al@verag.ag", ' "al@verag.ag",