Merge branch 'newMaster2024' of https://git.it.verag.ag/edv/SDL into newMaster2024
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
' ------------------------------------------------------------------------
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user