CBAM/VERAG Zollanmeldugnen
This commit is contained in:
@@ -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,7 +236,7 @@ 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 " &
|
||||
@@ -357,12 +362,294 @@ 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 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 isIndirect() Then
|
||||
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
|
||||
|
||||
'==================>> 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/>" &
|
||||
importerEORI & " – " & vbNewLine &
|
||||
If(AD Is Nothing, ExporterString, AD.Name_1 & " " & If(AD.Name_2, "") & "<br/>" &
|
||||
If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) &
|
||||
"</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, " - <b style='color:#b00020'>ÜBERSCHREITUNG!</b>", "") & "</td></tr>" &
|
||||
"<tr><td><b>Schwellenwert</b></td><td>" & Schwellenwert.ToString("N0") & " Tonnen</td></tr>" &
|
||||
"</table><br/>" &
|
||||
"<p>" &
|
||||
"<b>Importeur:</b><br/>" &
|
||||
importerEORI & " – " & vbNewLine &
|
||||
If(AD Is Nothing, ExporterString, AD.Name_1 & " " & If(AD.Name_2, "") & "<br/>" &
|
||||
If(AD.LandKz, "") & " " & If(AD.PLZ, "") & " " & If(AD.Ort, "")) &
|
||||
"</p>" &
|
||||
"<p>" &
|
||||
"<b>Exporteur:</b><br/>" &
|
||||
If(ExporterEORI, "") & " – " & vbNewLine & 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>"
|
||||
|
||||
|
||||
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(
|
||||
' "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"
|
||||
|
||||
Reference in New Issue
Block a user