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

This commit is contained in:
2026-01-13 16:09:18 +01:00
16 changed files with 1285 additions and 481 deletions

View File

@@ -211,6 +211,51 @@ Public Class cGreendeal_CBAM_Trn
End Function
Public Shared Function LoadCBAMTariffNumbers(Optional onlyActive As Boolean = True,
Optional includeExclusions As Boolean = False) _
As List(Of String)
Dim sql As String =
"SELECT DISTINCT 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")
Dim result As New List(Of String)
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return result
End If
For Each r As DataRow In dt.Rows
Dim pattern As String = r("trnPattern").ToString().Trim()
' % entfernen → reine Tarifnummer
pattern = pattern.Replace("%", "")
' nur numerische Werte zulassen
If pattern <> "" AndAlso pattern.All(AddressOf Char.IsDigit) Then
result.Add(pattern)
End If
Next
Return result.Distinct().OrderBy(Function(x) x).ToList()
End Function
Public Shared Function DELETE_ALL() As Boolean
Try

View File

@@ -321,12 +321,13 @@ Public Class cKunde
' Return Nothing
End Sub
Public Shared Function LOAD_ByEORI(EORI) As cKunde
Public Shared Function LOAD_ByEORI(EORI, Optional searchfirma = "") As cKunde
Dim test = ""
Dim KUNDE As New cKunde()
Try
Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand("SELECT * FROM Kunden INNER JOIN Filialen on Filialen.FilialenNr=Kunden.FilialenNr WHERE EORITIN=@EORITIN and ( '" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA.Replace("ATILLA", "VERAG") & "' IN (Filialen.Firma,Filialen.Cluster)) ", conn)
If searchfirma = "" Then searchfirma = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA.Replace("ATILLA", "VERAG")
Using cmd As New SqlCommand("SELECT * FROM Kunden INNER JOIN Filialen on Filialen.FilialenNr=Kunden.FilialenNr WHERE EORITIN=@EORITIN and ( '" & searchfirma & "' IN (Filialen.Firma,Filialen.Cluster)) ", conn)
cmd.Parameters.AddWithValue("@EORITIN", EORI)
Dim dr = cmd.ExecuteReader()

View File

@@ -107,6 +107,11 @@ Public Class cKundenErweitert
Property kde_ATEZ_GreenpulseID As Object = Nothing
Property kde_SEG_Summe As Object = Nothing
Property kde_SEG_Datum As Object = Nothing
Property kde_CBAM_Status As String = ""
Property kde_CBAM_Warn1 As Decimal? = 30
Property kde_CBAM_Warn2 As Decimal? = 40
Property kde_CBAM_ApplicationNo As Object = Nothing
Property kde_CBAM_CBAMAccountNo As Object = Nothing
Dim SQL As New SQL
@@ -221,6 +226,15 @@ Public Class cKundenErweitert
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_SEG_Summe", kde_SEG_Summe))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_SEG_Datum", kde_SEG_Datum))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_CBAM_Status", kde_CBAM_Status))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_CBAM_Warn1", kde_CBAM_Warn1))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_CBAM_Warn2", kde_CBAM_Warn2))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_CBAM_ApplicationNo", kde_CBAM_ApplicationNo))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kde_CBAM_CBAMAccountNo", kde_CBAM_CBAMAccountNo))
Return list
End Function

View File

@@ -6,6 +6,7 @@ Public Class cKundenVertraege
Property kv_Id As Integer
Property kv_KundenNr As Integer
Property kv_erhalten_Datum As Date
Property kv_gueltigBis_Datum As Date?
Property kv_vertragArtId As Integer
Property kv_Info As Object = Nothing
Property kv_datenarchivId As Object = Nothing
@@ -24,10 +25,11 @@ Public Class cKundenVertraege
LOAD()
End Sub
Sub New(kv_KundenNr, kv_erhalten_Datum, kv_vertragArtId)
Sub New(kv_KundenNr, kv_erhalten_Datum, kv_vertragArtId, Optional kv_gueltigBis_Datum = Nothing)
Me.kv_KundenNr = kv_KundenNr
Me.kv_erhalten_Datum = kv_erhalten_Datum
Me.kv_vertragArtId = kv_vertragArtId
Me.kv_gueltigBis_Datum = kv_gueltigBis_Datum
LOAD(kv_KundenNr, kv_erhalten_Datum, kv_vertragArtId)
End Sub
@@ -40,12 +42,13 @@ Public Class cKundenVertraege
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kv_Info", kv_Info))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kv_datenarchivId", kv_datenarchivId))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kv_gueltig", kv_gueltig))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kv_gueltigBis_Datum", kv_gueltigBis_Datum))
Return list
End Function
Public Shared Function LOAD_LIST(KundenNr As Integer) As DataTable
Return (New SQL).loadDgvBySql("SELECT [kv_Id],[kv_KundenNr],[kv_erhalten_Datum],[kv_vertragArtId],kva_Bezeichnung,[kv_Info],[kv_datenarchivId],[kv_gueltig] FROM tblKundenVertraege INNER JOIN tblKundenVertraegeArten ON kv_vertragArtId=kva_id WHERE kv_KundenNr=" & KundenNr, "FMZOLL")
Return (New SQL).loadDgvBySql("SELECT [kv_Id],[kv_KundenNr],[kv_erhalten_Datum],[kv_vertragArtId],kva_Bezeichnung,[kv_Info],[kv_datenarchivId],[kv_gueltig],kv_gueltigBis_Datum FROM tblKundenVertraege INNER JOIN tblKundenVertraegeArten ON kv_vertragArtId=kva_id WHERE kv_KundenNr=" & KundenNr, "FMZOLL")
End Function
Public Shared Function ENTRY_Exists(KundenNr As Integer, kv_vertragArtId As Integer) As Boolean

View File

@@ -285,7 +285,9 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
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
@@ -316,6 +318,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
' ------------------------------------------------------------
Dim api As New cATEZ_Greenpulse_CBAM_CostCalculation()
Dim see_total As Decimal
Dim benchmark As Decimal
Try
Dim defResp = api.GetCnCodeDefaults(
@@ -333,6 +336,7 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
End If
see_total = defResp.data.default_emission
benchmark = defResp.data.benchmark
Catch ex As Exception
Return "Technischer Fehler beim Laden der CN-Code Defaults: " & ex.Message
@@ -344,29 +348,57 @@ Public Class cATEZ_Greenpulse_CBAM_CostCalculation
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
' ------------------------------------------------------------
' --- Faktoren als echte Faktoren (nicht Prozent) ---
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 = ""
s &= "CBAM Kostenberechnung (ohne Benchmark)" & vbCrLf
s &= "CBAM Kostenberechnung (Default EE mit SEFA-Abzug)" & vbCrLf
s &= "-----------------------------------------------------------" & vbCrLf
s &= $"CN-Code: {cn_code}" & vbCrLf
s &= $"Ursprungsland: {country_code.ToUpperInvariant()}" & vbCrLf
s &= $"Jahr: {year}" & 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
s &= $"EE / SEE total (Default): {see_total:N6} t CO₂e/t" & vbCrLf
s &= $"Benchmark BMg: {benchmark:N6} t CO₂e/t" & vbCrLf
s &= $"CBAMF: {cbamf:N3}"
Console.WriteLine(s)
CBAM_COST = cbamCost
CBAM_EMISSION = see_total
CBAM_BENCHMARK = benchmark
CBAM_Faktor = cbamf
Return s
End Function
' ------------------------------------------------------------------------
' Helpers
' ------------------------------------------------------------------------

View File

@@ -46,6 +46,7 @@ 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()

View File

@@ -1,5 +1,10 @@
Imports System.Data.SqlClient
Imports System.Reflection
Imports System.Runtime.InteropServices.ComTypes
Imports com.sun.tools.javac.util
Imports java.lang.ProcessBuilder
Imports sun.util.resources.cldr.aa
Imports VERAG_PROG_ALLGEMEIN.TESTJSON
' ==========================================================================
' MASTER CLASS
@@ -231,13 +236,13 @@ Public Class cVERAG_CustomsDeclarations
"FROM VERAG.dbo.tblVERAG_CustomsDeclarations z " &
"INNER JOIN VERAG.dbo.tblVERAG_CustomsDeclarations_Items i " &
" ON z.za_Id = i.zaItem_zaId " &
"INNER JOIN VERAG.dbo.tblVERAG_CustomsDeclarations_Parties p " &
"LEFT JOIN VERAG.dbo.tblVERAG_CustomsDeclarations_Parties p " &
" ON z.za_Id = p.zaParty_zaId " &
"WHERE z.za_REGIME = 'IMPORT' " &
" AND z.za_IsFinalDeclaration = 1 " &
" AND z.za_DeclarationDate >= @dateFrom " &
" AND z.za_DeclarationDate <= @dateTo " &
" AND p.zaParty_EORI IN (" & eoriIn & ") " &
" AND cast(z.za_DeclarationDate as date) >= @dateFrom " &
" AND cast(z.za_DeclarationDate as date) <= @dateTo " &
If(eoriIn <> "", " AND p.zaParty_EORI IN (" & eoriIn & ") ", "") &
" AND " & cbamWhere
If indirect Then
@@ -255,13 +260,12 @@ Public Class cVERAG_CustomsDeclarations
If CustomsSystem <> "" Then
sqlstr &= " AND z.za_System = @sys "
End If
Using conn = SQL.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand(sqlstr, conn)
' cmd.Parameters.AddWithValue("@eori", EORI)
cmd.Parameters.AddWithValue("@dateFrom", datFrom)
cmd.Parameters.AddWithValue("@dateTo", datTo)
cmd.Parameters.AddWithValue("@dateFrom", datFrom.ToShortDateString)
cmd.Parameters.AddWithValue("@dateTo", datTo.ToShortDateString)
If ImportCountry <> "" Then
cmd.Parameters.AddWithValue("@importCountry", ImportCountry)
@@ -358,12 +362,306 @@ Public Class cVERAG_CustomsDeclarations
Return ZA
End Function
Public Sub checkfreshCBAMWarning()
Try
Dim CBAM_ITEMS As New List(Of cVERAG_CustomsDeclarations_Item)
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 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 ExporterString As String = Me.Parties.Where(Function(p) {"CZ", "EX", "EXP", "EXPORTER"}.Contains(p.zaParty_Role)).Select(Function(p) p.zaParty_Name).FirstOrDefault()
Dim KD As cKunde = Nothing
Dim AD As cAdressen = Nothing
If If(importerEORI, "") <> "" Then
KD = cKunde.LOAD_ByEORI(importerEORI, If(za_Firma, ""))
If KD Is Nothing Then KD = cKunde.LOAD_ByEORI(importerEORI) 'Wenn kein Kunde mit Firma gefunden wurde, nur nach EORI suchen (default VERAG)
AD = New cAdressen(KD.KundenNr)
End If
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 AD_EX As cAdressen = Nothing
If If(ExporterEORI, "") <> "" Then
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)
AD_EX = New cAdressen(KD_EX.KundenNr)
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 <<=========================
Dim itemsHtml As String =
String.Join("", CBAM_ITEMS.Select(Function(i) "<tr>" &
"<td>" & i.zaItem_PosNo.ToString & "</td>" &
"<td>" & If(i.zaItem_HSCode, "") & "</td>" &
"<td>" & If(i.zaItem_Description, "") & "</td>" &
"</tr>"
))
Dim bodyHtml As String =
"<html><body style='font-family:Segoe UI, Arial, sans-serif; font-size:12pt; color:#222'>" &
"<h2 style='color:#b00020'>CBAM-Warnmeldung bei Zollanmeldung " & Me.za_MRN & "</h2>" &
"<p>" &
"Bei der Zollanmeldung mit der MRN <b>" & Me.za_MRN & "</b> wurden CBAM-relevante Warenpositionen erkannt.<br/>" &
"Bitte prüfen Sie diese Anmeldung im Hinblick auf die CBAM-Meldepflicht." &
"</p>" &
"<h3>Erkannte CBAM-Positionen</h3>" &
"<table cellpadding='6' cellspacing='0' border='1' style='border-collapse:collapse; width:100%'>" &
"<tr style='background-color:#f0f0f0'>" &
"<th align='left'>PosNr</th>" &
"<th align='left'>HS-Code</th>" &
"<th align='left'>Beschreibung</th>" &
"</tr>" &
itemsHtml &
"</table>" &
"<p>" &
"<b>Importeur:</b><br/>" &
If(importerEORI, "") & "<br>" & If(ImporterString, "") &
"</p>" &
"<p>" &
"<b>Exporteur:</b><br/>" &
If(ExporterEORI, "") & " " & vbNewLine &
If(AD_EX Is Nothing, ExporterString, AD_EX.Name_1 & " " & If(AD_EX.Name_2, "") & "<br/>" &
If(AD_EX.LandKz, "") & " " & If(AD_EX.PLZ, "") & " " & If(AD_EX.Ort, "")) &
"</p>" &
"<br/><p><b>VERAG CBAM Compliance Services</b></p>" &
"</body></html>"
VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail("al@verag.ag", "CBAM WARNUNG - " & Me.za_MRN, bodyHtml, "cbam@verag.ag")
'VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail("al@verag.ag", "CBAM WARNUNG",
' "CBAM-Warnmeldung bei Zollanmeldung " & Me.za_MRN & vbNewLine &
' "Bei der Zollanmeldung mit der MRN " & Me.za_MRN & " wurden CBAM-relevante Warenpositionen erkannt." & vbCrLf &
' "Bitte prüfen Sie diese Anmeldung im Hinblick auf die CBAM-Meldepflicht." & vbCrLf & vbCrLf &
' "Erkannte CBAM-Positionen:" & vbCrLf &
' String.Join(vbCrLf, CBAM_ITEMS.Select(Function(i) " - PosNr: " & i.zaItem_PosNo.ToString & " | HS-Code: " & If(i.zaItem_HSCode, "") & " | Beschreibung: " & If(i.zaItem_Description, "")))
' )
''=========================================================
Else
'==================>> DIRECT <<=========================
Try
If KD IsNot Nothing Then
Dim ERW As New cKundenErweitert(KD.KundenNr)
Select Case ERW.kde_CBAM_Status
Case "", "50to" ' Nur hier wird eine Warnung gesendet!! -> WEnn der Kunde bereits Registriert ist, nicht notwendig.
Dim dateCBAM = If(If(za_ReleaseDate, za_DeclarationDate), Now)
Dim eigenmasseSumme_Shipment As Decimal = CBAM_ITEMS.Sum(Function(i) If(i.zaItem_NetMass, 0D)) / 1000
Dim eigenmasseSumme_YEAR As Decimal = getCBAM_KG(importerEORI, CDate("01.01." & dateCBAM.Year), CDate("31.12." & dateCBAM.Year), za_MRN) / 1000
Dim WarnLevel As String = ""
Dim Schwellenwert As Decimal = 0
Dim Warn1 As Decimal = If(If(ERW.kde_CBAM_Warn1, 0) > 0, ERW.kde_CBAM_Warn1, 30)
Dim Warn2 As Decimal = If(If(ERW.kde_CBAM_Warn2, 0) > 0, ERW.kde_CBAM_Warn2, 40)
Dim Warn50to As Decimal = 50
'geprüft werden die bisherigen CBAM Waren im Jahr + die aktuelle Sendung
If eigenmasseSumme_YEAR < Warn50to And (eigenmasseSumme_Shipment + eigenmasseSumme_YEAR) >= Warn50to Then
'--> WARN 2 überschritten
WarnLevel = "3"
Schwellenwert = 50
End If
'geprüft werden die bisherigen CBAM Waren im Jahr + die aktuelle Sendung
If eigenmasseSumme_YEAR < Warn2 And (eigenmasseSumme_Shipment + eigenmasseSumme_YEAR) >= Warn2 Then
'--> WARN 2 überschritten
WarnLevel = "2"
Schwellenwert = Warn2
End If
'geprüft werden die bisherigen CBAM Waren im Jahr + die aktuelle Sendung
If eigenmasseSumme_YEAR < Warn1 And (eigenmasseSumme_Shipment + eigenmasseSumme_YEAR) >= Warn1 Then
'--> WARN 1 überschritten
WarnLevel = "1"
Schwellenwert = Warn1
End If
'===========>>>> WARNUNG <<<<<<<=================================
If WarnLevel <> "" Then
Dim bodyHtml As String =
"<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>" &
"<p>" &
"Laut unserem System wurden in der Zollanmeldung mit der MRN <b>" & Me.za_MRN & "</b> " &
"CBAM-pflichtige Warenpositionen erkannt.<br/>" &
"Für Ihr Unternehmen liegen uns derzeit keine Informationen über eine gültige CBAM-Registrierung vor." &
"</p>" &
"<table cellpadding='6' cellspacing='0' border='1' style='border-collapse:collapse'>" &
"<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>" &
"</table><br/>" &
"<p>" &
"<b>Importeur:</b><br/>" &
If(importerEORI, "") & "<br>" & If(ImporterString, "") &
"</p>" &
"<p>" &
"<b>Exporteur:</b><br/>" &
If(ExporterEORI, "") & "<br>" & If(ExporterString, "") &
"</p>" &
"<p style='color:#b00020'><b>WICHTIG</b></p>" &
"<p>" &
"Bei Überschreitung einer jährlichen Gesamtmenge von <b>50 Tonnen CBAM-pflichtiger Waren</b> (Jahressumme) " &
"ist eine gültige CBAM-Registrierung zwingend erforderlich.<br/>" &
"Ohne gültige Registrierung kann es zu Zollblockaden oder Abfertigungsstopps kommen." &
"</p>" &
"<p>" &
"Bitte teilen Sie uns kurzfristig unter " &
"<a href='mailto:cbam@verag.ag'>cbam@verag.ag</a> mit, wie Sie weiter vorgehen möchten " &
"(z. B. bestehende Registrierung, Beantragung mit VERAG oder Bevollmächtigung)." &
"</p>" &
"<p><b>VERAG DCS CBAM Compliance Services</b></p>" &
"<p>VERAG Spedition AG<br>A-4975 Suben, Suben 100</p>" &
"</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), False, "cbam@verag.ag", "al@verag.ag")
'VERAG_PROG_ALLGEMEIN.cProgramFunctions.sendMail(
' "al@verag.ag",
' "CBAM-WARNUNG Überschreitung der Meldeschwelle",
' "CBAM-Warnmeldung zu Ihrer Zollanmeldung " & Me.za_MRN & vbCrLf & vbCrLf &
' "Laut unserem System wurden in der Zollanmeldung mit der MRN " & Me.za_MRN & " CBAM-pflichtige Warenpositionen erkannt." & vbCrLf &
' "Für Ihr Unternehmen liegen uns derzeit keine Informationen über eine gültige CBAM-Registrierung vor." & vbCrLf & vbCrLf &
' "Der für diese Sendung relevante Schwellenwert wurde überschritten." & vbCrLf &
' "Aktuelle Warnstufe: " & WarnLevel & vbCrLf &
' "Angewendeter Schwellenwert: " & Schwellenwert.ToString("N0") & " Tonnen" & vbCrLf & vbCrLf &
' "Importeur: " & importerEORI & " - " & AD.Name_1 & " " & If(AD.Name_2, "") & " " & If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "") & vbCrLf &
' "WICHTIG:" & vbCrLf &
' "Bei Überschreitung einer jährlichen Gesamtmenge von 50 Tonnen CBAM-pflichtiger Waren ist eine gültige CBAM-Registrierung zwingend erforderlich." & vbCrLf &
' "Ohne gültige Registrierung kann es zu Zollblockaden oder Abfertigungsstopps kommen." & vbCrLf & vbCrLf &
' "Bitte teilen Sie uns kurzfristig unter cbam@verag.ag mit, wie Sie weiter vorgehen möchten (z. B. bestehende Registrierung, Beantragung mit VERAG oder Bevollmächtigung)." & vbCrLf & vbCrLf &
' "VERAG CBAM Compliance Services"
' )
End If
'================================================================
End Select
End If
'=========================================================
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End If
End If
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
Public Function getCBAM_KG(EORI As String, von As Date, bis As Date, Optional without_MRN As String = "") As Decimal
Try
Dim sqlstr = "SELECT SUM(i.zaItem_NetMass) AS CBAM_Eigenmasse_kg
FROM VERAG.dbo.tblVERAG_CustomsDeclarations_Items i
JOIN VERAG.dbo.tblVERAG_CustomsDeclarations z
ON z.za_Id = i.zaItem_zaId
JOIN VERAG.dbo.tblVERAG_CustomsDeclarations_Parties p
ON p.zaParty_zaId = z.za_Id
AND p.zaParty_EORI = '" & EORI & "'
AND p.zaParty_Role IN ('CN','IM','IMP','IMPORTER')
WHERE z.za_ReleaseDate BETWEEN '" & von.ToShortDateString & "' AND '" & bis.ToShortDateString & "'
AND EXISTS (
SELECT 1
FROM VERAG.dbo.tblGreendeal_CBAM_Trn t
WHERE
i.zaItem_HSCode LIKE t.trnPattern
AND t.is_active = 1
AND ISNULL(t.is_exclusion,0) = 0
AND (t.start_date IS NULL OR t.start_date <= z.za_ReleaseDate)
AND (t.end_date IS NULL OR t.end_date >= z.za_ReleaseDate)
) "
If without_MRN <> "" Then sqlstr &= " and za_MRN <>'" & without_MRN & "'"
Return SQL.getValueTxtBySql(sqlstr, "FMZOLL",,, 0)
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return 0
End Function
Public Function isIndirect() As Boolean
If Me.za_System Is Nothing Then Return False
If Me.za_RepresentationCode Is Nothing Then Return False
If Me.za_System.Contains("DHF") AndAlso Me.za_RepresentationCode = 3 Then Return True
If Me.za_System.Contains("TELOTEC") AndAlso Me.za_RepresentationCode = 3 Then Return True
If Me.za_System.Contains("DAKOSY") AndAlso Me.za_RepresentationCode = 2 Then Return True
Return False
End Function
Public Function hasCBAM(Optional ByRef CBAM_ITEMS As List(Of cVERAG_CustomsDeclarations_Item) = Nothing) As Boolean
Dim LIST As New List(Of cVERAG_CustomsDeclarations)
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Try
CBAM_ITEMS = getCBAM_ITEMS()
If CBAM_ITEMS IsNot Nothing AndAlso CBAM_ITEMS.Count > 0 Then
Return True
End If
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return False
End Function
Public Function getCBAM_ITEMS() As List(Of cVERAG_CustomsDeclarations_Item)
Dim LIST As New List(Of cVERAG_CustomsDeclarations)
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Try
' ------------------------------------------------------------
' CBAM Pattern (HSCode)
' ------------------------------------------------------------
Dim cbamHsCodes = VERAG_PROG_ALLGEMEIN.cGreendeal_CBAM_Trn.LoadCBAMTariffNumbers()
If Items Is Nothing OrElse cbamHsCodes Is Nothing OrElse cbamHsCodes.Count = 0 Then Return Nothing
' Performance: HashSet für Prefix-Liste
Dim prefixes As HashSet(Of String) =
New HashSet(Of String)(cbamHsCodes)
Return Me.Items.
Where(Function(it)
Dim hs As String = If(it.zaItem_HSCode, "").Trim()
If hs = "" Then Return False
' linksseitiger Prefix-Abgleich
For Each p In prefixes
If hs.StartsWith(p) Then
Return True
End If
Next
End Function).ToList()
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
Return Nothing
End Function
Public Function SAVE() As Boolean
Dim list = getParameterList()
Dim sqlstr =
"BEGIN TRAN " &
"IF EXISTS(SELECT 1 FROM tblVERAG_CustomsDeclarations WHERE za_Id=@za_Id) " &
"BEGIN TRAN " &
"IF EXISTS(SELECT 1 FROM tblVERAG_CustomsDeclarations WHERE za_Id=@za_Id) " &
"BEGIN " & getUpdateCmd() & " END " &
"ELSE BEGIN " & getInsertCmd() & " END " &
"COMMIT TRAN"

View File

@@ -29,6 +29,8 @@ Public Class cAllgemein
Public Shared FMZOLL_SERVER As String = "[FMZOLL\SQLFMZOLL]" '"[SQLGUIDE01.verag.ost.dmn]"
Public Shared SQLGUIDE01_USED As Boolean = False 'FM-ZOLL Ablöse!!!!
Public Shared AVISO_LAYOUT_NEW As Boolean = False
'Public Shared FMZOLL_ATLAS_Datensicherung As String = "\\192.168.0.91\f\FMZoll\Datensicherung\atlas\atlas\fssouzb"
Public Shared FMZOLL_ATLAS_Datensicherung_OLD As String = "\\share01\F\FMZoll\Datensicherung\atlas\atlas\fssouzb"