From bc9247db6b518eca8ca033d0467164b53167b980 Mon Sep 17 00:00:00 2001 From: Andreas Luxbauer Date: Mon, 6 Oct 2025 10:46:42 +0200 Subject: [PATCH] dy imort --- .../DAKOSY/ATLAS/EZA/cDakosyEZA_Greenpulse.vb | 113 +++++++++++++++--- DAKOSY_Worker/cZOLL_IMPORT.vb | 4 +- UID/My Project/AssemblyInfo.vb | 4 +- 3 files changed, 100 insertions(+), 21 deletions(-) diff --git a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA_Greenpulse.vb b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA_Greenpulse.vb index b9f52e1..8f4cdd9 100644 --- a/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA_Greenpulse.vb +++ b/DAKOSY_Worker/DAKOSY/ATLAS/EZA/cDakosyEZA_Greenpulse.vb @@ -16,23 +16,28 @@ Public Class cDakosyEZA_Greenpulse Dim declarant = GuessAddressByType(eza.eza_ADRESSEN, {"DT", "DEC", "ANM", "DECLARANT"}) ' --- Rechnungsdaten (Unterlagen N380) --- - Dim inv = eza.eza_UNTERLAGEN?.FirstOrDefault(Function(u) SafeStr(u.ezaUl_Art).Equals("N380", StringComparison.OrdinalIgnoreCase) _ - AndAlso Not String.IsNullOrWhiteSpace(SafeStr(u.ezaUl_Nummer))) + Dim inv = If(eza.eza_UNTERLAGEN IsNot Nothing, + eza.eza_UNTERLAGEN.FirstOrDefault(Function(u) SafeStr(u.ezaUl_Art).Equals("N380", StringComparison.OrdinalIgnoreCase) _ + AndAlso Not String.IsNullOrWhiteSpace(SafeStr(u.ezaUl_Nummer))), + Nothing) ' --- Kopf/Zielschema --- Dim dest As New cATEZ_Greenpulse_KafkaDecs With { .Declaration = New cATEZ_Greenpulse_KafkaDecs.DeclarationNode With { - .DeclarationSourceId = SafeStr(eza.eza_ANR), ' interne Bezugsnr./ANR - .DeclarationNo = SafeStr(eza.eza_MRN), ' MRN, falls vorhanden + .DeclarationSourceId = SafeStr(eza.eza_ANR), + .DeclarationNo = SafeStr(eza.eza_MRN), .DeclarationDate = ToDateYMD(FirstNonEmpty(eza.eza_Anmeldedatum, eza.eza_Erstellung)), - .RequestedProcedure = SafeStr(eza.eza_VerfahrenBeantragtCode), ' z.B. "40" - .PreviousProcedure = "", ' ggf. unten aus Position ableiten + .RequestedProcedure = SafeStr(eza.eza_VerfahrenBeantragtCode), + .PreviousProcedure = "", .Goods = New List(Of cATEZ_Greenpulse_KafkaDecs.GoodItem)() }, .Parties = New cATEZ_Greenpulse_KafkaDecs.PartiesNode With { - .ImporterIdentificationNumber = FirstNonEmptyStr(importer?.ezaAd_TeilnehmerEORI, importer?.ezaAd_AdressCode), - .ExporterIdentificationNumber = FirstNonEmptyStr(exporter?.ezaAd_TeilnehmerEORI, exporter?.ezaAd_AdressCode), - .ReportingDeclarantEORINumber = FirstNonEmptyStr(declarant?.ezaAd_TeilnehmerEORI, declarant?.ezaAd_AdressCode), + .ImporterIdentificationNumber = FirstNonEmptyStr(If(importer IsNot Nothing, importer.ezaAd_TeilnehmerEORI, Nothing), + If(importer IsNot Nothing, importer.ezaAd_AdressCode, Nothing)), + .ExporterIdentificationNumber = FirstNonEmptyStr(If(exporter IsNot Nothing, exporter.ezaAd_TeilnehmerEORI, Nothing), + If(exporter IsNot Nothing, exporter.ezaAd_AdressCode, Nothing)), + .ReportingDeclarantEORINumber = FirstNonEmptyStr(If(declarant IsNot Nothing, declarant.ezaAd_TeilnehmerEORI, Nothing), + If(declarant IsNot Nothing, declarant.ezaAd_AdressCode, Nothing)), .TypeOfRepresentation = SafeStr(eza.eza_VertretungsVerhaeltnisCode) }, .Commercial = New cATEZ_Greenpulse_KafkaDecs.CommercialNode With { @@ -40,27 +45,45 @@ Public Class cDakosyEZA_Greenpulse .InvoiceDate = If(inv IsNot Nothing, ToDateYMD(inv.ezaUl_DatumAusstellung), "") }, .ExporterDetails = New cATEZ_Greenpulse_KafkaDecs.ExporterDetailsNode With { - .ExporterTitle = FirstNonEmptyStr(exporter?.ezaAd_NameFirma1, exporter?.ezaAd_NameFirma2), + .ExporterTitle = FirstNonEmptyStr(If(exporter IsNot Nothing, exporter.ezaAd_NameFirma1, Nothing), + If(exporter IsNot Nothing, exporter.ezaAd_NameFirma2, Nothing)), .ExporterEmail = "", .ExporterPhone = "" }, .ImporterDetails = New cATEZ_Greenpulse_KafkaDecs.ImporterDetailsNode With { - .ImporterTitle = FirstNonEmptyStr(importer?.ezaAd_NameFirma1, importer?.ezaAd_NameFirma2), + .ImporterTitle = FirstNonEmptyStr(If(importer IsNot Nothing, importer.ezaAd_NameFirma1, Nothing), + If(importer IsNot Nothing, importer.ezaAd_NameFirma2, Nothing)), .ImporterEmail = "", .ImporterPhone = "", - .ImporterCountryCodeOrMemberState = SafeStr(importer?.ezaAd_LandCode), + .ImporterCountryCodeOrMemberState = SafeStr(If(importer IsNot Nothing, importer.ezaAd_LandCode, Nothing)), .ImporterSubdivision = "", - .ImporterCity = SafeStr(importer?.ezaAd_Ort), + .ImporterCity = SafeStr(If(importer IsNot Nothing, importer.ezaAd_Ort, Nothing)), .ImporterStreet = MergeStreet(importer), - .ImporterStreetAdditional = SafeStr(importer?.ezaAd_StrasseHausNr2), + .ImporterStreetAdditional = SafeStr(If(importer IsNot Nothing, importer.ezaAd_StrasseHausNr2, Nothing)), .ImporterAddressNumber = "", - .ImporterPostCode = SafeStr(importer?.ezaAd_PLZ), + .ImporterPostCode = SafeStr(If(importer IsNot Nothing, importer.ezaAd_PLZ, Nothing)), .ImporterPoBox = "", .ImporterCoordinateLongitudeX = "", .ImporterCoordinateLatitudeY = "" } } + ' --- Falls EORI vorhanden: spezifisch befüllen (Lookup/Mapping via Helper) --- + Dim impEori As String = SafeStr(If(importer IsNot Nothing, importer.ezaAd_TeilnehmerEORI, Nothing)) + If Not String.IsNullOrWhiteSpace(impEori) Then + PopulateImporterByEori(impEori, dest.Parties, dest.ImporterDetails) + End If + + Dim expEori As String = SafeStr(If(exporter IsNot Nothing, exporter.ezaAd_TeilnehmerEORI, Nothing)) + If Not String.IsNullOrWhiteSpace(expEori) Then + PopulateExporterByEori(expEori, dest.Parties, dest.ExporterDetails) + End If + + Dim decEori As String = SafeStr(If(declarant IsNot Nothing, declarant.ezaAd_TeilnehmerEORI, Nothing)) + If Not String.IsNullOrWhiteSpace(decEori) Then + PopulateDeclarantByEori(decEori, dest.Parties) + End If + ' --- Warenpositionen -> Goods --- If eza.eza_WARENPOS IsNot Nothing Then For Each wp In eza.eza_WARENPOS @@ -70,7 +93,7 @@ Public Class cDakosyEZA_Greenpulse .NetMass = ToInvariantStr(wp.ezaWP_Eigenmasse), .TypeOfMeasurementUnit = UnitCodeToKafkaName(FirstNonEmptyStr(wp.ezaWP_WarenMasseinheit1, wp.ezaWP_AHStatMengeMasseinheit, "KGM")), .SpecialProcedures = New cATEZ_Greenpulse_KafkaDecs.SpecialProceduresNode With { - .MemberStateAutharization = SafeStr(importer?.ezaAd_LandCode), ' Heuristik + .MemberStateAutharization = SafeStr(If(importer IsNot Nothing, importer.ezaAd_LandCode, Nothing)), .DischargeBillWaiver = "", .Authorisation = FirstNonEmptyStr(wp.ezaWP_Bewilligungsnummer, eza.eza_BewilligungsIDZLAVUV), .StartTime = "", @@ -83,7 +106,7 @@ Public Class cDakosyEZA_Greenpulse End If ' --- Previous/Requested Procedure ggf. aus erster Position ziehen --- - Dim wp0 = eza.eza_WARENPOS?.FirstOrDefault() + Dim wp0 = If(eza.eza_WARENPOS IsNot Nothing, eza.eza_WARENPOS.FirstOrDefault(), Nothing) If wp0 IsNot Nothing Then If String.IsNullOrWhiteSpace(dest.Declaration.RequestedProcedure) Then dest.Declaration.RequestedProcedure = SafeStr(wp0.ezaWP_Zollverfahren) @@ -94,6 +117,62 @@ Public Class cDakosyEZA_Greenpulse Return dest End Function + ' ========================= + ' Populate-Helper (mit TODO) + ' ========================= + + ' Importer: ergänzt Parties.ImporterIdentificationNumber und ImporterDetails anhand EORI + Private Shared Sub PopulateImporterByEori(eori As String, + ByRef parties As cATEZ_Greenpulse_KafkaDecs.PartiesNode, + ByRef details As cATEZ_Greenpulse_KafkaDecs.ImporterDetailsNode) + ' Pflicht: EORI in Parties + parties.ImporterIdentificationNumber = eori + Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen = cZOLL_IMPORT.getAdresseFromEORI(eori, "", "") + + If AD IsNot Nothing Then + details.ImporterTitle = (If(AD.Name_1, "") & " " & If(AD.Name_2, "")).trim + details.ImporterCountryCodeOrMemberState = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2Land(AD.LandKz) + details.ImporterCity = AD.Ort + details.ImporterStreet = AD.Straße + details.ImporterAddressNumber = "" + details.ImporterPostCode = AD.PLZ + details.ImporterEmail = AD.E_Mail + details.ImporterPhone = AD.Telefon + End If + End Sub + + ' Exporter: ergänzt Parties.ExporterIdentificationNumber und ExporterDetails anhand EORI + Private Shared Sub PopulateExporterByEori(eori As String, + ByRef parties As cATEZ_Greenpulse_KafkaDecs.PartiesNode, + ByRef details As cATEZ_Greenpulse_KafkaDecs.ExporterDetailsNode) + parties.ExporterIdentificationNumber = eori + Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen = cZOLL_IMPORT.getAdresseFromEORI(eori, "", "") + + If AD IsNot Nothing Then + details.ExporterTitle = (If(AD.Name_1, "") & " " & If(AD.Name_2, "")).trim + 'details.exporterCountryCodeOrMemberState = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2Land(AD.LandKz) + 'details.exporterCity = AD.Ort + 'details.exporterStreet = AD.Straße + 'details.exporterAddressNumber = "" + 'details.exporterPostCode = AD.PLZ + details.ExporterEmail = AD.E_Mail + details.ExporterPhone = AD.Telefon + End If + End Sub + + ' Declarant: ergänzt Parties.ReportingDeclarantEORINumber (weitere Daten optional) + Private Shared Sub PopulateDeclarantByEori(eori As String, + ByRef parties As cATEZ_Greenpulse_KafkaDecs.PartiesNode) + parties.ReportingDeclarantEORINumber = eori + + ' TODO: Optional Stammdaten-Lookup für weitere deklarantenbezogene Daten, + ' z. B. Standard-Vertretungsverhältnis, Niederlassungsnummer etc. + ' Dim m = PartnerRepo.GetByEori(eori) + ' If m IsNot Nothing Then + ' ' ggf. parties.TypeOfRepresentation = m.DefaultRepType + ' End If + End Sub + ' JSON-Wrapper Public Shared Function BuildJsonByMrn(eza As cDakosyEZA, Optional pretty As Boolean = True) As String Dim obj = BuildByMrn(eza) diff --git a/DAKOSY_Worker/cZOLL_IMPORT.vb b/DAKOSY_Worker/cZOLL_IMPORT.vb index ed8d67a..969f200 100644 --- a/DAKOSY_Worker/cZOLL_IMPORT.vb +++ b/DAKOSY_Worker/cZOLL_IMPORT.vb @@ -1491,10 +1491,10 @@ Public Class cZOLL_IMPORT - Function getAdresseFromEORI(EORI, EORI_NL, Firma) + Shared Function getAdresseFromEORI(EORI, EORI_NL, Firma) If EORI Is Nothing Then Return Nothing If If(EORI, "") <> "" Then - Dim kdNrTmp = KDSQL.getFMZOLLKdNrFromEORI(EORI, EORI_NL, Firma) + Dim kdNrTmp = SQL.getFMZOLLKdNrFromEORI(EORI, EORI_NL, Firma) If IsNumeric(kdNrTmp) Then Dim ADRESSE As New VERAG_PROG_ALLGEMEIN.cAdressen(kdNrTmp) Return ADRESSE diff --git a/UID/My Project/AssemblyInfo.vb b/UID/My Project/AssemblyInfo.vb index 08dfd3f..d999802 100644 --- a/UID/My Project/AssemblyInfo.vb +++ b/UID/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - - + +