Kundensicherheiten, CBAM-Rechner, etc.

This commit is contained in:
2026-10-21 16:55:38 +02:00
parent c6c5b7d1c2
commit 11f432ec67
7 changed files with 391 additions and 124 deletions

View File

@@ -1,8 +1,10 @@
Imports System.Data.SqlClient
Imports System.Reflection
Imports System.Runtime.InteropServices.ComTypes
Imports System.Windows.Forms
Imports com.sun.tools.javac.util
Imports java.lang.ProcessBuilder
Imports Org.BouncyCastle.Crypto.Agreement
Imports sun.util.resources.cldr.aa
Imports VERAG_PROG_ALLGEMEIN.TESTJSON
@@ -518,6 +520,9 @@ Public Class cVERAG_CustomsDeclarations
End Function
Public Sub checkfreshCBAMWarning()
'TODO: die CBAM-Kosten pro Quartal berechnen und als "Bankgarantie" in die tblKundenSicherheiten schreiben/aktualisieren (wird aktuell noch händisch gemacht, Fehleranfällig und
Try
Dim CBAM_ITEMS As New List(Of cVERAG_CustomsDeclarations_Item)
@@ -597,6 +602,10 @@ Public Class cVERAG_CustomsDeclarations
Dim dateCBAM = If(If(za_ReleaseDate, za_DeclarationDate), Now)
Dim eigenmasseSumme_YEAR As Decimal = getCBAM_KG(vertretenerEORI, CDate("01.01." & dateCBAM.Year), CDate("31.12." & dateCBAM.Year), za_MRN) / 1000
Dim quarter As Integer = Math.Ceiling(dateCBAM.Month / 3.0)
Dim Country As String = If(CBAM_ITEMS.FirstOrDefault()?.zaItem_OriginCountry, "")
createOrUpdateKundenSicherheitseintrag(KD_IND, Country, vertretenerEORI, quarter, dateCBAM.Year)
'Prüft, ob Vertrag vorliegt:
Dim hasValidVertrag_CBAM As Boolean =
@@ -679,6 +688,10 @@ Public Class cVERAG_CustomsDeclarations
Dim dateCBAM = If(If(za_ReleaseDate, za_DeclarationDate), Now)
Dim Country As String = If(CBAM_ITEMS.FirstOrDefault()?.zaItem_OriginCountry, "")
Dim quarter As Integer = Math.Ceiling(dateCBAM.Month / 3.0)
createOrUpdateKundenSicherheitseintrag(KD, Country, importerEORI, quarter, dateCBAM.Year)
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)) / 1000
@@ -807,6 +820,95 @@ Public Class cVERAG_CustomsDeclarations
Return String.Join(", ", result)
End Function
Private Function createOrUpdateKundenSicherheitseintrag(KUNDE As cKunde, ImportCountry As String, EORI As String, cbamQquarter As Integer, cbamYear As Integer)
Dim von As Date
Dim bis As Date
Dim CBAMZertifikatKosten As Double = 0
If ImportCountry = "" Then Return False
Select Case cbamQquarter
Case "1"
von = New Date(cbamYear, 1, 1)
bis = New Date(cbamYear, 3, 31)
CBAMZertifikatKosten = 75.36
Case "2"
von = New Date(cbamYear, 4, 1)
bis = New Date(cbamYear, 6, 30)
CBAMZertifikatKosten = 75.28
Case "3"
von = New Date(cbamYear, 7, 1)
bis = New Date(cbamYear, 9, 30)
CBAMZertifikatKosten = 82.32
Case "4"
von = New Date(cbamYear, 10, 1)
bis = New Date(cbamYear, 12, 31)
CBAMZertifikatKosten = 0
End Select
Dim EORI_ = {EORI}
Dim LIST As List(Of VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations) = VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations.LOAD_List_CBAM(EORI_, ImportCountry, von, bis,, True)
Dim grouped = From za In LIST
Where za.Items IsNot Nothing
From it In za.Items
Let tarif = If(it.zaItem_HSCode IsNot Nothing AndAlso it.zaItem_HSCode.Length >= 8,
it.zaItem_HSCode.Substring(0, 8),
it.zaItem_HSCode)
Let country = it.zaItem_OriginCountry
Group By tarif, country
Into grp = Group
Select New With {
.Tarif = tarif,
.Country = country,
.Eigenmasse = grp.Sum(Function(x) If(x.it.zaItem_NetMass, 0D)),
.Rohmasse = grp.Sum(Function(x) If(x.it.zaItem_GrossMass, 0D)),
.RechnungswertEUR = grp.Sum(Function(x) If(x.it.zaItem_InvoiceValueEUR, 0D))
}
Dim gesamtBetrag As Double = 0
Dim cost As Double = 0
Dim emission As Double = 0
Dim benchmark As Double = 0
For Each r In grouped
cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM_ByCertificatePrice(r.Tarif, r.Rohmasse, r.Country, CBAMZertifikatKosten, cbamYear, cost, emission, benchmark)
gesamtBetrag += cost
Next
Dim Kunde_Sicherheit As New cKundenSicherheiten(KUNDE.KundenNr, cbamQquarter, cbamYear)
If Kunde_Sicherheit.hasEntry Then
Kunde_Sicherheit.sc_Betrag = gesamtBetrag
KUNDE.SAVE()
Else
Kunde_Sicherheit.sc_Bemerkung = "EUR"
Kunde_Sicherheit.sc_Bemerkung = "CBAM Kosten Q" & cbamQquarter & " " & cbamYear
Kunde_Sicherheit.sc_Art = "BANKGARANTIE"
Kunde_Sicherheit.sc_Betrag = gesamtBetrag
Kunde_Sicherheit.sc_datum = Today()
Kunde_Sicherheit.sc_Mitarbeiter = "AUTO"
KUNDE.SAVE()
End If
End Function
Public Function getCBAM_KG(EORI As String, von As Date, bis As Date, Optional without_MRN As String = "", Optional isDeclarant As Boolean = False) As Decimal
Try
If EORI = "" Then Return 0