From 673862286fc1a2a5b6b343132c4e375b79397e8e Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Tue, 31 Mar 2026 10:21:44 +0200 Subject: [PATCH] cbam --- SDL/My Project/Resources.Designer.vb | 10 + SDL/My Project/Resources.resx | 3 + SDL/Resources/VERAG_CBAM_Report_Template.xlsx | Bin 0 -> 65888 bytes SDL/SDL.vbproj | 1 + SDL/kunden/usrCntlCBAM.vb | 340 +++++++++- .../VERAG_PROG_ALLGEMEIN.vbproj | 3 +- ...ldung.vb => cVERAG_CustomsDeclarations.vb} | 0 .../cVERAG_CustomsDeclarations_Convert.vb | 615 ++++++++++++++++++ 8 files changed, 969 insertions(+), 3 deletions(-) create mode 100644 SDL/Resources/VERAG_CBAM_Report_Template.xlsx rename VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/{cVERAG_Zollanmeldung.vb => cVERAG_CustomsDeclarations.vb} (100%) create mode 100644 VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations_Convert.vb diff --git a/SDL/My Project/Resources.Designer.vb b/SDL/My Project/Resources.Designer.vb index 47ca005d..9e3c7974 100644 --- a/SDL/My Project/Resources.Designer.vb +++ b/SDL/My Project/Resources.Designer.vb @@ -2631,6 +2631,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Sucht eine lokalisierte Ressource vom Typ System.Byte[]. + ''' + Friend ReadOnly Property VERAG_CBAM_Report_Template() As Byte() + Get + Dim obj As Object = ResourceManager.GetObject("VERAG_CBAM_Report_Template", resourceCulture) + Return CType(obj,Byte()) + End Get + End Property + ''' ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap. ''' diff --git a/SDL/My Project/Resources.resx b/SDL/My Project/Resources.resx index 69d73ef2..4593efdf 100644 --- a/SDL/My Project/Resources.resx +++ b/SDL/My Project/Resources.resx @@ -973,4 +973,7 @@ ..\Resources\ambar_boarder_new.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\VERAG_CBAM_Report_Template.xlsx;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/SDL/Resources/VERAG_CBAM_Report_Template.xlsx b/SDL/Resources/VERAG_CBAM_Report_Template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..dd6f3fa1cc4fdb4ba0d3a0f03e6b4609f6b1a909 GIT binary patch literal 65888 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

yTh5cx(}JfgS%tfT9_S`y`q}D29_nNGn0RZ? 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

UkAWwMKbETN@8n^~BaV8xTe4J;}#P<|> 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 literal 0 HcmV?d00001 diff --git a/SDL/SDL.vbproj b/SDL/SDL.vbproj index 00e785ef..2fa4b7b3 100644 --- a/SDL/SDL.vbproj +++ b/SDL/SDL.vbproj @@ -4956,6 +4956,7 @@ + Always diff --git a/SDL/kunden/usrCntlCBAM.vb b/SDL/kunden/usrCntlCBAM.vb index 7c1524fe..38d64056 100644 --- a/SDL/kunden/usrCntlCBAM.vb +++ b/SDL/kunden/usrCntlCBAM.vb @@ -2249,7 +2249,8 @@ Public Class usrCntlCBAM doVERAG_SUM(LIST, EORI(0)) - doVERAG_DETAIL(LIST, EORI(0)) + doVERAG_DETAIL_OLD(LIST, EORI(0)) + 'doVERAG_DETAIL(LIST, EORI(0)) If cbxVERAG_GPXLS.Checked Then doVERAG_GREENPULSE_XLS(LIST, EORI(0)) @@ -2410,7 +2411,342 @@ Public Class usrCntlCBAM End Try End Sub - Sub doVERAG_DETAIL(LIST As List(Of VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations), EORI As String) + Public Sub doVERAG_DETAIL(LIST As List(Of VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations), EORI As String) + + btnCBAM_DS_VERAG_Detail.Enabled = False + btnCBAM_DS_VERAG_Detail.Tag = "" + + Try + + ' ========================================================= + ' Daten holen + ' ========================================================= + Dim details = + From za In LIST + From it In za.Items + Let importer = za.Parties. + FirstOrDefault(Function(p) cVERAG_CustomsDeclarations.IMPORTER_ROLES.Contains(p.zaParty_Role)) + Let exporter = za.Parties. + FirstOrDefault(Function(p) cVERAG_CustomsDeclarations.EXPORTER_ROLES.Contains(p.zaParty_Role)) + Let declarant = za.Parties. + FirstOrDefault(Function(p) cVERAG_CustomsDeclarations.DECLARANT_ROLES.Contains(p.zaParty_Role)) + Let cbamDeclarantTmp = za.Parties. + FirstOrDefault(Function(p) p.zaParty_Role = "CBAM") + Let cbamDeclarant = If(cbamDeclarantTmp, declarant) + Let invoice = + it.Documents.FirstOrDefault(Function(d) d.zaDoc_Code = "N380" OrElse d.zaDoc_Code = "N325") + Let anmeldedatum = If(za.za_ReleaseDate, za.za_DeclarationDate) + Order By anmeldedatum + Select New With { + .MRN = If(za.za_MRN, ""), + .SendungsId = za.za_SendungsId, + .PositionsNummer = it.zaItem_PosNo, + .Anmeldedatum = anmeldedatum, + .BezugsNr = If(za.za_LRN, ""), + .VertretungsVerhaeltnis = If(za.za_RepresentationCode, ""), + .Tarifnummer = If(LeftStr(it.zaItem_HSCode, 8), ""), + .Eigenmasse = it.zaItem_NetMass, + .Rohmasse = it.zaItem_GrossMass, + .Ursprungsland = If(it.zaItem_OriginCountry, ""), + .VersendungsLand = If(za.za_CountryDispatch, ""), + .BestimmungsLand = If(za.za_CountryDestination, ""), + .Rechnungspreis = If(it.zaItem_InvoiceValueEUR, it.zaItem_StatisticalValueEUR), + .Rechnungswaehrung = If(it.zaItem_InvoiceCurrency, ""), + .EmpfaengerEORI = If(importer IsNot Nothing, If(importer.zaParty_EORI, ""), ""), + .Empfaenger = If(importer IsNot Nothing, If(importer.zaParty_Name, ""), ""), + .AbsenderEORI = If(exporter IsNot Nothing, If(exporter.zaParty_EORI, ""), ""), + .Absender = If(exporter IsNot Nothing, If(exporter.zaParty_Name, ""), ""), + .DeclarantEORI = If(declarant IsNot Nothing, If(declarant.zaParty_EORI, ""), ""), + .DeclarantName = If(declarant IsNot Nothing, If(declarant.zaParty_Name, ""), ""), + .CBAMDeclarantEORI = If(cbamDeclarant IsNot Nothing, If(cbamDeclarant.zaParty_EORI, ""), ""), + .CBAMDeclarantName = If(cbamDeclarant IsNot Nothing, If(cbamDeclarant.zaParty_Name, ""), ""), + .Rechnungsnummer = If(invoice IsNot Nothing, If(invoice.zaDoc_Reference, ""), ""), + .Rechnungsdatum = If(invoice IsNot Nothing, ParseDateSafe(invoice.zaDoc_Date), Nothing), + .RequestedProcedure = If(za.za_MainProcedure, ""), + .PreviousProcedure = If(it.zaItem_PrevProcedure, ""), + .MeasurementUnit = If(it.zaItem_SuppUnitCode, "") + } + + ' ========================================================= + ' DataTable exakt nach Excel-Template + ' ========================================================= + Dim dt As New DataTable + + dt.Columns.Add("MRN") + dt.Columns.Add("position_no") + dt.Columns.Add("declaration_date") + dt.Columns.Add("reference_no") + dt.Columns.Add("customer_reference") + dt.Columns.Add("representation_type") + dt.Columns.Add("tariff_code") + dt.Columns.Add("net_mass_kg") + dt.Columns.Add("gross_mass_kg") + dt.Columns.Add("origin_country") + dt.Columns.Add("dispatch_country") + dt.Columns.Add("destination_country") + dt.Columns.Add("invoice_number") + dt.Columns.Add("invoice_date") + dt.Columns.Add("invoice_amount") + dt.Columns.Add("invoice_currency") + dt.Columns.Add("sender_eori") + dt.Columns.Add("sender_name") + dt.Columns.Add("sender_address") + dt.Columns.Add("sender_country") + dt.Columns.Add("recipient_eori") + dt.Columns.Add("recipient_name") + dt.Columns.Add("recipient_address") + dt.Columns.Add("recipient_country") + dt.Columns.Add("importer_eori") + dt.Columns.Add("importer_name") + dt.Columns.Add("importer_address") + dt.Columns.Add("importer_country") + dt.Columns.Add("importer_email") + dt.Columns.Add("importer_phone") + dt.Columns.Add("declarant_eori") + dt.Columns.Add("declarant_name") + dt.Columns.Add("declarant_address") + dt.Columns.Add("declarant_country") + dt.Columns.Add("requested_procedure") + dt.Columns.Add("previous_procedure") + dt.Columns.Add("measurement_unit") + dt.Columns.Add("member_state_authorisation") + dt.Columns.Add("discharge_bill_waiver") + dt.Columns.Add("authorisation") + dt.Columns.Add("inward_processing_start") + dt.Columns.Add("inward_processing_end") + dt.Columns.Add("inward_processing_deadline") + dt.Columns.Add("Benchmark (Default)") + dt.Columns.Add("Emission (Default)") + dt.Columns.Add("Factor") + dt.Columns.Add("Estimated Cost") + + ' ========================================================= + ' Befüllen + ' ========================================================= + For Each r In details + + Dim KdAtrNr As String = "" + + If cbxKdAtrNr.Checked AndAlso r.SendungsId IsNot Nothing Then + Dim Snd = New VERAG_PROG_ALLGEMEIN.cSendungen(r.SendungsId) + If Snd IsNot Nothing Then + KdAtrNr = Snd.getKdAtrNr("AUFTRAGGEBER") + If KdAtrNr = "" Then + KdAtrNr = Snd.getKdAtrNr("EMPFAENGER") + End If + End If + + If EORI = "DE4991397" AndAlso KdAtrNr.Contains("/") Then + KdAtrNr = KdAtrNr.Split("/"c)(0) + End If + End If + + Dim benchmark As Object = Nothing + Dim emission As Object = Nothing + Dim faktor As Object = Nothing + Dim weight = r.Eigenmasse + Dim year = If(txtBis._value <> "", CDate(txtBis._value).Year, Now.Year) + Dim cost As String = "0" + + If cbxKosten.Checked Then + Dim benchmarkObj As Object = Nothing + Dim emissionObj As Object = Nothing + Dim faktorObj As Object = Nothing + Dim costObj As String = "0" + + ' Dim weight = 0D + If IsNumeric(r.Eigenmasse) Then weight = CDbl(r.Eigenmasse) + + 'Dim year = If(txtBis._value <> "", CDate(txtBis._value).Year, Now.Year) + + If IsNumeric(txtVERA_ZertPreis._value) Then + cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM_ByCertificatePrice( + cn_code:=Convert.ToString(r.Tarifnummer), + weight:=weight / 1000, + country_code:=Convert.ToString(r.Ursprungsland), + certificate_price:=CDbl(txtVERA_ZertPreis._value), + year:=year, + costObj, + emissionObj, + benchmarkObj, + faktorObj + ) + Else + cATEZ_Greenpulse_CBAM_CostCalculation.calcCBAM( + cn_code:=Convert.ToString(r.Tarifnummer), + weight:=weight / 1000, + country_code:=Convert.ToString(r.Ursprungsland), + Nothing, + year:=year, + Nothing, + costObj, + emissionObj, + benchmarkObj, + faktorObj + ) + End If + + benchmark = If(benchmarkObj Is Nothing, "", Convert.ToString(benchmarkObj)) + emission = If(emissionObj Is Nothing, "", Convert.ToString(emissionObj)) + faktor = If(faktorObj Is Nothing, "", Convert.ToString(faktorObj)) + + If IsNumeric(costObj) Then + If CDbl(costObj) >= 0 Then + cost = Convert.ToString(costObj) + Else + cost = "" + End If + Else + cost = "" + End If + End If + + Dim row = dt.NewRow() + + row("MRN") = If(r.MRN, "") + row("position_no") = r.PositionsNummer + row("declaration_date") = If(r.Anmeldedatum Is Nothing, "", CDate(r.Anmeldedatum).ToString("yyyy-MM-dd")) + row("reference_no") = If(r.BezugsNr, "") + row("customer_reference") = If(KdAtrNr, "") + row("representation_type") = If(r.VertretungsVerhaeltnis, "") + row("tariff_code") = If(r.Tarifnummer, "") + row("net_mass_kg") = If(r.Eigenmasse Is Nothing, "", Convert.ToString(r.Eigenmasse)) + row("gross_mass_kg") = If(r.Rohmasse Is Nothing, "", Convert.ToString(r.Rohmasse)) + row("origin_country") = If(r.Ursprungsland, "") + row("dispatch_country") = If(r.VersendungsLand, "") + row("destination_country") = If(r.BestimmungsLand, "") + + row("invoice_number") = If(r.Rechnungsnummer, "") + row("invoice_date") = If(r.Rechnungsdatum Is Nothing, "", CDate(r.Rechnungsdatum).ToString("yyyy-MM-dd")) + row("invoice_amount") = If(r.Rechnungspreis Is Nothing, "", Convert.ToString(r.Rechnungspreis)) + row("invoice_currency") = If(r.Rechnungswaehrung, "") + + row("sender_eori") = If(r.AbsenderEORI, "") + row("sender_name") = If(r.Absender, "") + row("sender_address") = "" + row("sender_country") = "" + + row("recipient_eori") = If(r.EmpfaengerEORI, "") + row("recipient_name") = If(r.Empfaenger, "") + row("recipient_address") = "" + row("recipient_country") = "" + + row("importer_eori") = If(r.EmpfaengerEORI, "") + row("importer_name") = If(r.Empfaenger, "") + row("importer_address") = "" + row("importer_country") = "" + row("importer_email") = "" + row("importer_phone") = "" + + row("declarant_eori") = If(r.DeclarantEORI, "") + row("declarant_name") = If(r.DeclarantName, "") + row("declarant_address") = "" + row("declarant_country") = "" + + row("requested_procedure") = If(r.RequestedProcedure, "") + row("previous_procedure") = If(r.PreviousProcedure, "") + row("measurement_unit") = If(r.MeasurementUnit, "") + row("member_state_authorisation") = "" + row("discharge_bill_waiver") = "" + row("authorisation") = "" + row("inward_processing_start") = "" + row("inward_processing_end") = "" + row("inward_processing_deadline") = "" + + row("Benchmark (Default)") = benchmark + row("Emission (Default)") = emission + row("Factor") = faktor + row("Estimated Cost") = cost + + dt.Rows.Add(row) + + Next + + ' ========================================================= + ' Datei vorbereiten + ' ========================================================= + Dim Path_DETAIL As String = "" + Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\CBAM_REPORT_DETAIL\" + + If Not My.Computer.FileSystem.DirectoryExists(sPath) Then + My.Computer.FileSystem.CreateDirectory(sPath) + End If + + Path_DETAIL = sPath & EORI & "_CBAM_Detail_" & txtVon._value & "-" & txtBis._value & ".xlsx" + While System.IO.File.Exists(Path_DETAIL) + Path_DETAIL = sPath & EORI & "_CBAM_Detail_" & txtVon._value & "-" & txtBis._value & "_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx" + End While + + My.Computer.FileSystem.WriteAllBytes(Path_DETAIL, My.Resources.VERAG_CBAM_Report_Template, False) + + ' ========================================================= + ' Excel schreiben + ' ========================================================= + Dim wb = New ClosedXML.Excel.XLWorkbook(Path_DETAIL) + Dim ws = wb.Worksheet("CBAM_Report") + + ' Header + ws.Cell("A3").Value = txtVon._value + ws.Cell("C3").Value = txtBis._value + + ' CBAM Declarant + ws.Cell("A6").Value = "VERAG" + ws.Cell("B6").Value = "" + ws.Cell("C6").Value = "" + ws.Cell("D6").Value = "" + ws.Cell("E6").Value = "" + ws.Cell("F6").Value = EORI + + ' Declarant + ws.Cell("A8").Value = "VERAG" + ws.Cell("B8").Value = "" + ws.Cell("C8").Value = "" + ws.Cell("D8").Value = "" + ws.Cell("E8").Value = "" + ws.Cell("F8").Value = EORI + + ' Importer (Default) - aus Parameter / erster Datensatz + Dim firstImporterName As String = "" + If dt.Rows.Count > 0 Then + firstImporterName = Convert.ToString(dt.Rows(0)("importer_name")) + End If + + ws.Cell("A10").Value = firstImporterName + ws.Cell("B10").Value = "" + ws.Cell("C10").Value = "" + ws.Cell("D10").Value = "" + ws.Cell("E10").Value = "" + ws.Cell("F10").Value = EORI + + ' Alte Detaildatenbereich-Inhalte leeren + Dim startRow As Integer = 14 + 'For r As Integer = startRow To Math.max(ws.LastRowUsed().RowNumber(), startRow + 5000) + ' For c As Integer = 1 To 47 + ' ws.Cell(r, c).Clear(XLCellClearOptions.Contents) + ' Next + 'Next + + ' Detaildaten schreiben + For i As Integer = 0 To dt.Rows.Count - 1 + For j As Integer = 0 To dt.Columns.Count - 1 + ws.Cell(startRow + i, j + 1).Value = If(dt.Rows(i)(j), "") + Next + Next + + wb.SaveAs(Path_DETAIL) + + If dt.Rows.Count > 0 Then + btnCBAM_DS_VERAG_Detail.Tag = Path_DETAIL + btnCBAM_DS_VERAG_Detail.Enabled = True + btnCBAM_DS_VERAG_Copy.Enabled = True + End If + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + End Sub + Sub doVERAG_DETAIL_OLD(LIST As List(Of VERAG_PROG_ALLGEMEIN.cVERAG_CustomsDeclarations), EORI As String) btnCBAM_DS_VERAG_Detail.Enabled = False btnCBAM_DS_VERAG_Detail.Tag = "" diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj index 7145d084..18e1309a 100644 --- a/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj +++ b/VERAG_PROG_ALLGEMEIN/VERAG_PROG_ALLGEMEIN.vbproj @@ -762,7 +762,8 @@ True Reference.svcmap - + + True True diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_Zollanmeldung.vb b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb similarity index 100% rename from VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_Zollanmeldung.vb rename to VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations.vb diff --git a/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations_Convert.vb b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations_Convert.vb new file mode 100644 index 00000000..dc33680f --- /dev/null +++ b/VERAG_PROG_ALLGEMEIN/VERAG_Zollanmeldung/cVERAG_CustomsDeclarations_Convert.vb @@ -0,0 +1,615 @@ +Imports ClosedXML.Excel +Imports System.Globalization +Imports System.IO +Imports System.Linq + +Public Class cVERAG_CustomsDeclarations_Convert + + Public Const EXPECTED_TEMPLATE_VERSION As String = "CBAM-2026-V1.0" + + Public Shared Function LOAD_FROM_CBAM_DETAIL_EXCEL(filePath As String, + Optional ByRef errors As List(Of String) = Nothing, + Optional stopOnFirstInvalidRow As Boolean = False) As List(Of cVERAG_CustomsDeclarations) + + Dim result As New List(Of cVERAG_CustomsDeclarations) + + Try + If errors Is Nothing Then errors = New List(Of String) + + If String.IsNullOrWhiteSpace(filePath) Then + errors.Add("Es wurde kein Dateipfad übergeben.") + Return result + End If + + If Not File.Exists(filePath) Then + errors.Add("Datei nicht gefunden: " & filePath) + Return result + End If + + Using wb As New XLWorkbook(filePath) + + Dim ws As IXLWorksheet = Nothing + + If wb.Worksheets.Any(Function(x) x.Name.Trim().ToUpper() = "CBAM_REPORT") Then + ws = wb.Worksheet("CBAM_Report") + Else + ws = wb.Worksheet(1) + End If + + If ws Is Nothing Then + errors.Add("Kein Worksheet gefunden.") + Return result + End If + + ' ========================================================= + ' Template-Version prüfen + ' ========================================================= + Dim versionInFile As String = TrimSafe(ws.Cell("F3").GetString()) + + If Not String.Equals(versionInFile, EXPECTED_TEMPLATE_VERSION, StringComparison.OrdinalIgnoreCase) Then + errors.Add("Ungültige Template-Version in F3. Erwartet: '" & EXPECTED_TEMPLATE_VERSION & "', gefunden: '" & versionInFile & "'") + Return result + End If + + Dim headerRow As Integer = 13 + Dim dataStartRow As Integer = 14 + + Dim lastRow = If(ws.LastRowUsed() Is Nothing, 0, ws.LastRowUsed().RowNumber()) + Dim lastCol = If(ws.LastColumnUsed() Is Nothing, 0, ws.LastColumnUsed().ColumnNumber()) + + If lastRow < dataStartRow OrElse lastCol = 0 Then + errors.Add("Keine Positionsdaten gefunden.") + Return result + End If + + ' ========================================================= + ' Header-Mapping aufbauen + ' ========================================================= + Dim colMap As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase) + + For c As Integer = 1 To lastCol + Dim h = TrimSafe(ws.Cell(headerRow, c).GetString()) + If h <> "" AndAlso Not colMap.ContainsKey(h) Then + colMap.Add(h, c) + End If + Next + + ' ========================================================= + ' Pflichtspalten im Excel prüfen + ' ========================================================= + Dim requiredHeaders = New String() {"MRN", "declaration_date", "tariff_code"} + + For Each req In requiredHeaders + If Not colMap.ContainsKey(req) Then + errors.Add("Pflichtspalte im Excel nicht gefunden: " & req) + End If + Next + + If errors.Any(Function(x) x.StartsWith("Pflichtspalte im Excel nicht gefunden:")) Then + Return result + End If + + ' ========================================================= + ' Bereits vorhandene / ungültige MRN verwalten + ' ========================================================= + Dim skippedExistingMrns As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) + Dim invalidMrns As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase) + Dim dict As New Dictionary(Of String, cVERAG_CustomsDeclarations)(StringComparer.OrdinalIgnoreCase) + Dim artificialCounter As Integer = 0 + + For r As Integer = dataStartRow To lastRow + + Dim mrn As String = GetCellString(ws, r, colMap, "MRN") + Dim referenceNo As String = GetCellString(ws, r, colMap, "reference_no") + Dim tariffCode As String = GetCellString(ws, r, colMap, "tariff_code") + Dim itemNoTxt As String = GetCellString(ws, r, colMap, "position_no") + + ' Komplette Leerzeile überspringen + If mrn = "" AndAlso referenceNo = "" AndAlso tariffCode = "" AndAlso itemNoTxt = "" Then + Continue For + End If + + ' ===================================================== + ' Zeilenvalidierung + ' ===================================================== + Dim validationMessage As String = "" + If Not ValidateImportRow(ws, r, colMap, validationMessage) Then + errors.Add(validationMessage) + + If mrn <> "" Then + invalidMrns.Add(mrn) + End If + + If stopOnFirstInvalidRow Then + Return result + End If + + Continue For + End If + + ' Wenn MRN bereits als ungültig markiert wurde -> überspringen + If mrn <> "" AndAlso invalidMrns.Contains(mrn) Then + Continue For + End If + + ' ===================================================== + ' MRN bereits in DB? + ' Dann komplette Anmeldung überspringen + ' ===================================================== + If mrn <> "" Then + If skippedExistingMrns.Contains(mrn) Then + Continue For + End If + + If MRN_EXISTS_IN_DB(mrn) Then + skippedExistingMrns.Add(mrn) + errors.Add("MRN bereits vorhanden - Import übersprungen: " & mrn & " (Zeile " & r & ")") + Continue For + End If + End If + + ' ===================================================== + ' Gruppenschlüssel + ' ===================================================== + Dim grpKey As String = "" + If mrn <> "" Then + grpKey = "MRN|" & mrn + ElseIf referenceNo <> "" Then + grpKey = "REF|" & referenceNo + Else + artificialCounter += 1 + grpKey = "AUTO|" & artificialCounter.ToString() + End If + + Dim za As cVERAG_CustomsDeclarations = Nothing + + If Not dict.ContainsKey(grpKey) Then + + za = New cVERAG_CustomsDeclarations() + + za.za_MRN = mrn + za.za_LRN = referenceNo + za.za_ReferenceCustomer = GetCellString(ws, r, colMap, "customer_reference") + za.za_RepresentationCode = GetCellString(ws, r, colMap, "representation_type") + za.za_DeclarationDate = GetCellDateNullable(ws, r, colMap, "declaration_date") + za.za_ReleaseDate = GetCellDateNullable(ws, r, colMap, "declaration_date") + + za.za_CountryDispatch = GetCellString(ws, r, colMap, "dispatch_country") + za.za_CountryDestination = GetCellString(ws, r, colMap, "destination_country") + za.za_CountryImport = GetCellString(ws, r, colMap, "destination_country") + + za.za_MainProcedure = GetCellString(ws, r, colMap, "requested_procedure") + za.za_InvoiceCurrency = GetCellString(ws, r, colMap, "invoice_currency") + za.za_InvoiceAmount = GetCellDecimalNullable(ws, r, colMap, "invoice_amount") + za.za_IsFinalDeclaration = True + za.za_REGIME = "IMPORT" + + za.za_System = "CBAM_EXCEL_IMPORT" + za.za_CustomsSystem = "" + za.za_CustomsSystemCountry = "" + za.za_IsExternalSystem = True + za.za_Firma = "" + za.za_Niederlassung = "" + za.za_AdditionalProcedure = "" + za.za_WarehouseCode = "" + za.za_Incoterms = "" + za.za_IncotermsPlace = "" + za.za_TotGrossMass = Nothing + + AddOrMergeParty(za.Parties, CreateParty( + role:="EXPORTER", + eori:=GetCellString(ws, r, colMap, "sender_eori"), + name:=GetCellString(ws, r, colMap, "sender_name"), + street:=GetCellString(ws, r, colMap, "sender_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "sender_country"), + email:="", + phone:="" + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="CONSIGNEE", + eori:=GetCellString(ws, r, colMap, "recipient_eori"), + name:=GetCellString(ws, r, colMap, "recipient_name"), + street:=GetCellString(ws, r, colMap, "recipient_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "recipient_country"), + email:="", + phone:="" + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="IMPORTER", + eori:=GetCellString(ws, r, colMap, "importer_eori"), + name:=GetCellString(ws, r, colMap, "importer_name"), + street:=GetCellString(ws, r, colMap, "importer_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "importer_country"), + email:=GetCellString(ws, r, colMap, "importer_email"), + phone:=GetCellString(ws, r, colMap, "importer_phone") + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="DECLARANT", + eori:=GetCellString(ws, r, colMap, "declarant_eori"), + name:=GetCellString(ws, r, colMap, "declarant_name"), + street:=GetCellString(ws, r, colMap, "declarant_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "declarant_country"), + email:="", + phone:="" + )) + + Dim invNo = GetCellString(ws, r, colMap, "invoice_number") + Dim invDate = GetCellString(ws, r, colMap, "invoice_date") + + If invNo <> "" OrElse invDate <> "" Then + za.Documents.Add(New cVERAG_CustomsDeclarations_Document With { + .zaDoc_Code = "N380", + .zaDoc_Reference = invNo, + .zaDoc_Date = invDate, + .zaDoc_Description = "Invoice" + }) + End If + + dict.Add(grpKey, za) + + Else + za = dict(grpKey) + + AddOrMergeParty(za.Parties, CreateParty( + role:="EXPORTER", + eori:=GetCellString(ws, r, colMap, "sender_eori"), + name:=GetCellString(ws, r, colMap, "sender_name"), + street:=GetCellString(ws, r, colMap, "sender_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "sender_country"), + email:="", + phone:="" + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="CONSIGNEE", + eori:=GetCellString(ws, r, colMap, "recipient_eori"), + name:=GetCellString(ws, r, colMap, "recipient_name"), + street:=GetCellString(ws, r, colMap, "recipient_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "recipient_country"), + email:="", + phone:="" + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="IMPORTER", + eori:=GetCellString(ws, r, colMap, "importer_eori"), + name:=GetCellString(ws, r, colMap, "importer_name"), + street:=GetCellString(ws, r, colMap, "importer_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "importer_country"), + email:=GetCellString(ws, r, colMap, "importer_email"), + phone:=GetCellString(ws, r, colMap, "importer_phone") + )) + + AddOrMergeParty(za.Parties, CreateParty( + role:="DECLARANT", + eori:=GetCellString(ws, r, colMap, "declarant_eori"), + name:=GetCellString(ws, r, colMap, "declarant_name"), + street:=GetCellString(ws, r, colMap, "declarant_address"), + postalCode:="", + city:="", + country:=GetCellString(ws, r, colMap, "declarant_country"), + email:="", + phone:="" + )) + End If + + Dim it As New cVERAG_CustomsDeclarations_Item() + + it.zaItem_PosNo = GetCellInt(ws, r, colMap, "position_no", za.Items.Count + 1) + it.zaItem_HSCode = GetCellString(ws, r, colMap, "tariff_code") + it.zaItem_OriginCountry = GetCellString(ws, r, colMap, "origin_country") + it.zaItem_GrossMass = GetCellDecimalNullable(ws, r, colMap, "gross_mass_kg") + it.zaItem_NetMass = GetCellDecimalNullable(ws, r, colMap, "net_mass_kg") + it.zaItem_SuppUnitCode = GetCellString(ws, r, colMap, "measurement_unit") + it.zaItem_PrevProcedure = GetCellString(ws, r, colMap, "previous_procedure") + it.zaItem_MainProcedure = GetCellString(ws, r, colMap, "requested_procedure") + it.zaItem_InvoiceValueEUR = GetCellDecimalNullable(ws, r, colMap, "invoice_amount") + it.zaItem_InvoiceCurrency = GetCellString(ws, r, colMap, "invoice_currency") + it.zaItem_StatisticalValueEUR = GetCellDecimalNullable(ws, r, colMap, "invoice_amount") + + Dim remarks As String = "" + Dim bench = GetCellString(ws, r, colMap, "Benchmark (Default)") + Dim emi = GetCellString(ws, r, colMap, "Emission (Default)") + Dim fac = GetCellString(ws, r, colMap, "Factor") + Dim est = GetCellString(ws, r, colMap, "Estimated Cost") + + If bench <> "" OrElse emi <> "" OrElse fac <> "" OrElse est <> "" Then + remarks = + "CBAM Import | " & + "Benchmark=" & bench & "; " & + "Emission=" & emi & "; " & + "Factor=" & fac & "; " & + "EstimatedCost=" & est + End If + + it.zaItem_Remarks = remarks + + Dim itemInvNo = GetCellString(ws, r, colMap, "invoice_number") + Dim itemInvDate = GetCellString(ws, r, colMap, "invoice_date") + + If itemInvNo <> "" OrElse itemInvDate <> "" Then + it.Documents.Add(New cVERAG_CustomsDeclarations_Document With { + .zaDoc_Code = "N380", + .zaDoc_Reference = itemInvNo, + .zaDoc_Date = itemInvDate, + .zaDoc_Description = "Invoice" + }) + End If + + za.Items.Add(it) + + Next + + For Each za In dict.Values + If za.Items IsNot Nothing AndAlso za.Items.Count > 0 Then + za.za_TotGrossMass = za.Items.Sum(Function(x) If(x.zaItem_GrossMass, 0D)) + + If Not za.za_InvoiceAmount.HasValue Then + Dim invSum = za.Items.Sum(Function(x) If(x.zaItem_InvoiceValueEUR, 0D)) + If invSum <> 0D Then + za.za_InvoiceAmount = invSum + End If + End If + + result.Add(za) + End If + Next + + End Using + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return result + + End Function + + Private Shared Function ValidateImportRow(ws As IXLWorksheet, + row As Integer, + colMap As Dictionary(Of String, Integer), + ByRef validationMessage As String) As Boolean + + validationMessage = "" + + Dim mrn As String = GetCellString(ws, row, colMap, "MRN") + Dim tariffCode As String = GetCellString(ws, row, colMap, "tariff_code") + Dim declarationDate As Date? = GetCellDateNullable(ws, row, colMap, "declaration_date") + + Dim missing As New List(Of String) + + If mrn = "" Then missing.Add("MRN") + If Not declarationDate.HasValue Then missing.Add("declaration_date") + If tariffCode = "" Then missing.Add("tariff_code") + + If missing.Count > 0 Then + validationMessage = "Zeile " & row & " ungültig. Pflichtfeld(er) fehlen oder sind ungültig: " & String.Join(", ", missing) + Return False + End If + + Return True + + End Function + + Private Shared Function MRN_EXISTS_IN_DB(mrn As String) As Boolean + + Try + mrn = TrimSafe(mrn) + If mrn = "" Then Return False + + Dim za = cVERAG_CustomsDeclarations.loadByMRN(mrn, False) + Return za IsNot Nothing AndAlso za.hasEntry + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name) + End Try + + Return False + + End Function + + Private Shared Function CreateParty(role As String, + eori As String, + name As String, + street As String, + postalCode As String, + city As String, + country As String, + email As String, + phone As String) As cVERAG_CustomsDeclarations_Parties + + If TrimSafe(eori) = "" AndAlso + TrimSafe(name) = "" AndAlso + TrimSafe(street) = "" AndAlso + TrimSafe(country) = "" AndAlso + TrimSafe(email) = "" AndAlso + TrimSafe(phone) = "" Then + Return Nothing + End If + + Return New cVERAG_CustomsDeclarations_Parties With { + .zaParty_Role = role, + .zaParty_EORI = TrimSafe(eori), + .zaParty_Name = TrimSafe(name), + .zaParty_Street = TrimSafe(street), + .zaParty_PostalCode = TrimSafe(postalCode), + .zaParty_City = TrimSafe(city), + .zaParty_Country = TrimSafe(country), + .zaParty_Email = TrimSafe(email), + .zaParty_Phone = TrimSafe(phone) + } + + End Function + + Private Shared Sub AddOrMergeParty(list As List(Of cVERAG_CustomsDeclarations_Parties), + p As cVERAG_CustomsDeclarations_Parties) + + If p Is Nothing Then Exit Sub + If list Is Nothing Then Exit Sub + + Dim existing = list.FirstOrDefault(Function(x) + Return String.Equals(TrimSafe(x.zaParty_Role), TrimSafe(p.zaParty_Role), StringComparison.OrdinalIgnoreCase) AndAlso + String.Equals(TrimSafe(x.zaParty_EORI), TrimSafe(p.zaParty_EORI), StringComparison.OrdinalIgnoreCase) AndAlso + String.Equals(TrimSafe(x.zaParty_Name), TrimSafe(p.zaParty_Name), StringComparison.OrdinalIgnoreCase) + End Function) + + If existing Is Nothing Then + list.Add(p) + Else + If TrimSafe(existing.zaParty_Street) = "" Then existing.zaParty_Street = p.zaParty_Street + If TrimSafe(existing.zaParty_PostalCode) = "" Then existing.zaParty_PostalCode = p.zaParty_PostalCode + If TrimSafe(existing.zaParty_City) = "" Then existing.zaParty_City = p.zaParty_City + If TrimSafe(existing.zaParty_Country) = "" Then existing.zaParty_Country = p.zaParty_Country + If TrimSafe(existing.zaParty_Email) = "" Then existing.zaParty_Email = p.zaParty_Email + If TrimSafe(existing.zaParty_Phone) = "" Then existing.zaParty_Phone = p.zaParty_Phone + End If + + End Sub + + Private Shared Function GetCellString(ws As IXLWorksheet, + row As Integer, + colMap As Dictionary(Of String, Integer), + header As String) As String + + Try + If ws Is Nothing OrElse colMap Is Nothing Then Return "" + If Not colMap.ContainsKey(header) Then Return "" + Return TrimSafe(ws.Cell(row, colMap(header)).GetString()) + Catch + Return "" + End Try + + End Function + + Private Shared Function GetCellDecimalNullable(ws As IXLWorksheet, + row As Integer, + colMap As Dictionary(Of String, Integer), + header As String) As Decimal? + + Try + If ws Is Nothing OrElse colMap Is Nothing Then Return Nothing + If Not colMap.ContainsKey(header) Then Return Nothing + + Dim cell = ws.Cell(row, colMap(header)) + If cell Is Nothing OrElse cell.IsEmpty() Then Return Nothing + + If cell.DataType = XLDataType.Number Then + Return Convert.ToDecimal(cell.GetDouble()) + End If + + Dim txt = TrimSafe(cell.GetString()) + If txt = "" Then Return Nothing + + Dim d As Decimal + txt = txt.Replace(" ", "") + + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.InvariantCulture, d) Then Return d + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.GetCultureInfo("de-AT"), d) Then Return d + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.GetCultureInfo("de-DE"), d) Then Return d + + Catch + End Try + + Return Nothing + + End Function + + Private Shared Function GetCellDateNullable(ws As IXLWorksheet, + row As Integer, + colMap As Dictionary(Of String, Integer), + header As String) As Date? + + Try + If ws Is Nothing OrElse colMap Is Nothing Then Return Nothing + If Not colMap.ContainsKey(header) Then Return Nothing + + Dim cell = ws.Cell(row, colMap(header)) + If cell Is Nothing OrElse cell.IsEmpty() Then Return Nothing + + If cell.DataType = XLDataType.DateTime Then + Return cell.GetDateTime() + End If + + If cell.DataType = XLDataType.Number Then + Return DateTime.FromOADate(cell.GetDouble()) + End If + + Dim txt = TrimSafe(cell.GetString()) + If txt = "" Then Return Nothing + + Dim dt As DateTime + If DateTime.TryParse(txt, CultureInfo.InvariantCulture, DateTimeStyles.None, dt) Then Return dt + If DateTime.TryParse(txt, CultureInfo.GetCultureInfo("de-AT"), DateTimeStyles.None, dt) Then Return dt + If DateTime.TryParse(txt, CultureInfo.GetCultureInfo("de-DE"), DateTimeStyles.None, dt) Then Return dt + + Catch + End Try + + Return Nothing + + End Function + + Private Shared Function GetCellInt(ws As IXLWorksheet, + row As Integer, + colMap As Dictionary(Of String, Integer), + header As String, + Optional defaultValue As Integer = 0) As Integer + + Try + If ws Is Nothing OrElse colMap Is Nothing Then Return defaultValue + If Not colMap.ContainsKey(header) Then Return defaultValue + + Dim cell = ws.Cell(row, colMap(header)) + If cell Is Nothing OrElse cell.IsEmpty() Then Return defaultValue + + If cell.DataType = XLDataType.Number Then + Return Convert.ToInt32(Math.Truncate(cell.GetDouble())) + End If + + Dim txt = TrimSafe(cell.GetString()) + If txt = "" Then Return defaultValue + + Dim i As Integer + If Integer.TryParse(txt, i) Then Return i + + Dim d As Decimal + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.InvariantCulture, d) Then + Return Convert.ToInt32(Math.Truncate(d)) + End If + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.GetCultureInfo("de-AT"), d) Then + Return Convert.ToInt32(Math.Truncate(d)) + End If + If Decimal.TryParse(txt, NumberStyles.Any, CultureInfo.GetCultureInfo("de-DE"), d) Then + Return Convert.ToInt32(Math.Truncate(d)) + End If + + Catch + End Try + + Return defaultValue + + End Function + + Private Shared Function TrimSafe(value As Object) As String + If value Is Nothing Then Return "" + Return Convert.ToString(value).Trim() + End Function + +End Class \ No newline at end of file