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

@@ -24,6 +24,9 @@ Public Class cKundenSicherheiten
Public Property sc_stornoDatum As Date? = Nothing
Public Property sc_stornoMaId As Integer? = Nothing
Public Property sc_cbam_jahr As Integer? = Nothing
Public Property sc_cbam_quartal As Integer? = Nothing
Public hasEntry As Boolean = False
@@ -34,6 +37,13 @@ Public Class cKundenSicherheiten
LOAD()
End Sub
Sub New(sc_kundenNr As String, sc_cbam_quartal As Integer, sc_cbam_jahr As Integer)
sc_kundenNr = sc_kundenNr
sc_cbam_quartal = sc_cbam_quartal
sc_cbam_jahr = sc_cbam_jahr
LOADCBAM()
End Sub
Public Function getParameterList() As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
@@ -57,6 +67,8 @@ Public Class cKundenSicherheiten
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_storno", sc_storno))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_stornoDatum", sc_stornoDatum))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_stornoMaId", sc_stornoMaId))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_cbam_jahr", sc_cbam_jahr))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sc_cbam_quartal", sc_cbam_quartal))
Return list
End Function
@@ -103,6 +115,33 @@ Public Class cKundenSicherheiten
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
Public Sub LOADCBAM()
Try
hasEntry = False
Using conn As SqlConnection = SQL.GetNewOpenConnectionFMZOLL()
Using cmd As New SqlCommand("SELECT * FROM tblKundenSicherheiten WHERE sc_kundenNr=@sc_kundenNr and sc_cbam_quartal = @sc_cbam_quartal and sc_cbam_jahr = @sc_cbamsc_cbam_jahr_year", conn)
cmd.Parameters.AddWithValue("@sc_kundenNr", sc_kundenNr)
cmd.Parameters.AddWithValue("@sc_cbam_quartal", sc_cbam_quartal)
cmd.Parameters.AddWithValue("@sc_cbam_jahr", sc_cbam_jahr)
Dim dr = cmd.ExecuteReader()
If dr.Read Then
For Each li In getParameterList()
Dim prop As PropertyInfo = Me.GetType.GetProperty(li.Scalarvariable)
If dr(li.Text) Is DBNull.Value Then
prop.SetValue(Me, Nothing)
Else
prop.SetValue(Me, dr(li.Text))
End If
Next
hasEntry = True
End If
dr.Close()
End Using
End Using
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
Public Function getUpdateCmd() As String
Dim list = getParameterList()

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