Imports System.Data.SqlClient Imports VERAG_PROG_ALLGEMEIN Public Class cImporter_DakosyToVERAG Private SQL As New VERAG_PROG_ALLGEMEIN.SQL ' ======================================================================== ' MAIN ENTRY ' ======================================================================== Public Function ImportDakosyEZA(MRN As String, Optional overwrite As Boolean = True, Optional freshInsert As Boolean = False) As Boolean If MRN Is Nothing Then Return False If MRN = "" Then Return False Dim EZA = cDakosyEZA.LOADByMRN(MRN, True) If EZA IsNot Nothing Then Return ImportDakosyEZA(EZA, overwrite, freshInsert) Return False End Function Public Function ImportDakosyEZA(eza As cDakosyEZA, Optional overwrite As Boolean = True, Optional freshInsert As Boolean = False) As Boolean Try If eza Is Nothing Then Return False If String.IsNullOrWhiteSpace(eza.eza_MRN) AndAlso String.IsNullOrWhiteSpace(eza.eza_ANR) Then Return False If If(eza.eza_MRN, "") = "" AndAlso eza.eza_ANR.ToString.StartsWith("ATA") Then ' Keine finale Anmeldung! Return False End If ' ================================================================ ' DUPLIKATSPRÜFUNG ' ================================================================ If Not overwrite Then If ExistsInVERAG(eza) Then Return False End If ' ================================================================ ' HEADER ' ================================================================ Dim ZA As cVERAG_CustomsDeclarations If If(eza.eza_MRN, If(eza.eza_ANR, "")) = "" Then ZA = New cVERAG_CustomsDeclarations Else ZA = cVERAG_CustomsDeclarations.loadByMRN(If(String.IsNullOrWhiteSpace(eza.eza_MRN), eza.eza_ANR, eza.eza_MRN), False) End If ZA.za_System = "DAKOSY" ZA.za_CustomsSystem = "ATLAS" ZA.za_REGIME = "IMPORT" ZA.za_CustomsSystemCountry = "DE" ZA.za_IsExternalSystem = False ZA.za_IsFinalDeclaration = True ZA.za_Firma = eza.eza_firma ZA.za_Niederlassung = eza.eza_niederlassung ZA.za_MRN = If(String.IsNullOrWhiteSpace(eza.eza_MRN), eza.eza_ANR, eza.eza_MRN) ZA.za_LRN = eza.eza_ObjectName VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetFirmaNiederlassung(ZA.za_Firma, ZA.za_Niederlassung, "", ZA.za_LRN) VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetAvisoId_SndId_ByLRN(ZA.za_LRN, ZA.za_AvisoId, ZA.za_SendungsId) Dim DY = cDakosy_Zollanmeldungen.LOADById(eza.eza_dyaAnmID) If DY IsNot Nothing Then If ZA.za_AvisoId Is Nothing AndAlso DY.dy_AvisoId IsNot Nothing Then ZA.za_AvisoId = DY.dy_AvisoId If ZA.za_SendungsId Is Nothing AndAlso DY.dy_SendungsId IsNot Nothing Then ZA.za_SendungsId = DY.dy_SendungsId End If If eza.eza_Anmeldedatum IsNot Nothing AndAlso eza.eza_Anmeldedatum.ToString <> "" Then ZA.za_DeclarationDate = CDate(eza.eza_Anmeldedatum) ZA.za_ReleaseDate = CDate(eza.eza_Anmeldedatum) Else Dim dateumRelease As String = (New VERAG_PROG_ALLGEMEIN.SQL).DLookup("isnull(dySt_DakosyTransaktionsDatum,'')", "[tblDakosy_Statusmeldungen]", " dySt_status = 60 And dySt_dyId = '" & eza.eza_dyaAnmID & "' Order By [dySt_DakosyTransaktionsDatum] desc", "FMZOLL",) If dateumRelease <> "" AndAlso IsDate(dateumRelease) Then ZA.za_DeclarationDate = CDate(dateumRelease) ZA.za_ReleaseDate = CDate(dateumRelease) Else ZA.za_DeclarationDate = ToNullableDate(If(eza.eza_Anmeldedatum, eza.eza_LetzteBearbeitung)) ZA.za_ReleaseDate = ToNullableDate(If(eza.eza_Anmeldedatum, eza.eza_LetzteBearbeitung)) End If End If ZA.za_MainProcedure = eza.eza_VerfahrenBeantragtCode ZA.za_RepresentationCode = eza.eza_VertretungsVerhaeltnisCode ZA.za_FiscalRepFlag = ToNullableBool(eza.eza_FiskalvertretungKz) ZA.za_ApplicantVATNo = ToStringSafe(eza.eza_UstIdAnmelder) ZA.za_ApplicantTaxOffice = ToStringSafe(eza.eza_FinanzamtAnmelder) ZA.za_TaxDeduction = ToNullableBool(eza.eza_Vorsteuerabzug) ZA.za_CountryDispatch = eza.eza_VersendungsLandCode ZA.za_CountryDestination = eza.eza_Bestimmungsland ZA.za_CountryDestinationState = eza.eza_Bestimmungsbundesland ZA.za_ContainerNr1 = eza.eza_ContainerNr1 ZA.za_ContainerNr2 = eza.eza_ContainerNr2 ZA.za_ContainerNr3 = eza.eza_ContainerNr3 ZA.za_ContainerNr4 = eza.eza_ContainerNr4 ZA.za_ContainerNr5 = eza.eza_ContainerNr5 ZA.za_ContainerNr6 = eza.eza_ContainerNr6 ZA.za_ContainerNr7 = eza.eza_ContainerNr7 ZA.za_ContainerNr8 = eza.eza_ContainerNr8 ZA.za_ContainerNr9 = eza.eza_ContainerNr9 ZA.za_MeansOfTransport_Vehicle = eza.eza_KennzeichenNameBefoerderungsmittelAnkunft ZA.za_MeansOfTransport_Nationality = eza.eza_BeförderungsmittelGrenzeStaatszugehörigkeitCode ZA.za_MeansOfTransport_Type = eza.eza_BeförderungsmittelGrenzeArt ZA.za_CountryImport = "DE" ZA.za_WarehouseCode = eza.eza_Warenort ZA.za_InvoiceAmount = eza.eza_Rechnungspreis ZA.za_InvoiceCurrency = eza.eza_Rechnungswaehrung ZA.za_DV1Flag = ToNullableBool(eza.eza_DV1Kz) ZA.za_PrevDocument_No = eza.eza_VorpapierNr ZA.za_PrevDocument_Type = eza.eza_VorpapierArtCode ZA.za_Incoterms = eza.eza_LieferbedingungCode ZA.za_IncotermsPlace = eza.eza_LieferbedingungOrt ZA.za_Sachbearbeiter = eza.eza_AnmeldenderBearbeiterName ZA.za_TotGrossMass = ToNullableDecimal(eza.eza_GesamtRohmasse) ZA.za_TransportModeBorder = ToStringSafe(eza.eza_VerkehrszweigGrenze) ' ================================================================ ' ADRESSEN ' ================================================================ If eza.eza_ADRESSEN IsNot Nothing Then For Each p In eza.eza_ADRESSEN Dim party As New cVERAG_CustomsDeclarations_Parties party.zaParty_Role = p.ezaAd_AdressTyp party.zaParty_EORI = p.ezaAd_TeilnehmerEORI party.zaParty_EORI_NL = p.ezaAd_TeilnehmerNLNR party.zaParty_Name = p.ezaAd_NameFirma1 party.zaParty_Street = p.ezaAd_StrasseHausNr1 party.zaParty_PostalCode = p.ezaAd_PLZ party.zaParty_City = p.ezaAd_Ort party.zaParty_Country = p.ezaAd_LandCode 'party.zaParty_TIN = p. party.zaParty_VATNumber = p.ezaAd_UStIDAnmelder party.zaParty_TaxOffice = p.ezaAd_FinanzamtIDAnmelder If If(party.zaParty_EORI, "") <> "" Then Dim AD As VERAG_PROG_ALLGEMEIN.cAdressen = cZOLL_IMPORT.getAdresseFromEORI(party.zaParty_EORI, "", "", True) If AD IsNot Nothing Then party.zaParty_Name = (If(AD.Name_1, "") & " " & If(AD.Name_2, "")).trim party.zaParty_Country = VERAG_PROG_ALLGEMEIN.cProgramFunctions.getISO2Land(AD.LandKz) party.zaParty_City = AD.Ort party.zaParty_Street = AD.Straße 'party.ImporterAddressNumber = "" party.zaParty_PostalCode = AD.PLZ 'party.ImporterEmail = AD.E_Mail 'party.ImporterPhone = AD.Telefon End If End If ZA.Parties.Add(party) Next End If ' ================================================================ ' ABGABEN ' ================================================================ If eza.eza_AUFSCHUB IsNot Nothing Then For Each d In eza.eza_AUFSCHUB If d.ezaAfb_PositionsNummer Is Nothing Then Dim duty As New cVERAG_CustomsDeclarations_Duty duty.zaDuty_ApplicationType = d.ezaAfb_ArtAufschubantrag duty.zaDuty_AccountType = d.ezaAfb_Aufschubart duty.zaDuty_AccountHeadCustoms = d.ezaAfb_HZA duty.zaDuty_AccountNo = d.ezaAfb_KontoNr duty.zaDuty_AccountEORI = d.ezaAfb_AufschubnehmerEORI duty.zaDuty_AccountHolderName = d.AufschubnehmerName duty.zaDuty_DutyType = d.ezaAfb_AbgabeArt duty.zaDuty_BIN = d.ezaAfb_AufschuBIN duty.zaDuty_AmountEUR = ToNullableDecimal(d.ezaAfb_Abgabenbetrag) duty.zaDuty_AmountForeign = ToNullableDecimal(d.ezaAfb_Abgabenbetrag) duty.zaDuty_Currency = "EUR" duty.zaDuty_LimitDate = ToNullableDate(d.ezaAfb_Faelligkeit) ZA.Duties.Add(duty) End If Next End If ' ================================================================ ' HEADER-UNTERLAGEN (ItemId = NULL) ' ================================================================ If eza.eza_UNTERLAGEN IsNot Nothing Then For Each ul In eza.eza_UNTERLAGEN Dim doc As New cVERAG_CustomsDeclarations_Document doc.zaDoc_Section = ul.ezaUl_Bereich doc.zaDoc_ItemId = Nothing doc.zaDoc_Code = ul.ezaUl_Art doc.zaDoc_Reference = ul.ezaUl_Nummer doc.zaDoc_Date = ul.ezaUl_DatumAusstellung ZA.Documents.Add(doc) Next End If ' ================================================================ ' POSITIONEN + POSITIONS-UNTERLAGEN ' ================================================================ If eza.eza_WARENPOS IsNot Nothing Then For Each wp In eza.eza_WARENPOS Dim item As New cVERAG_CustomsDeclarations_Item item.zaItem_PosNo = ToInt(wp.ezaWP_PositionsNummer) item.zaItem_ArticleCode = wp.ezaWP_Artikelnummer item.zaItem_HSCode = wp.ezaWP_WarennummerEZT item.zaItem_HSAddition1 = wp.ezaWP_Warennummerzusatz1 item.zaItem_HSAddition2 = wp.ezaWP_Warennummerzusatz2 item.zaItem_HSAddCodes1 = wp.ezaWP_WarennummerZusatzCode1 item.zaItem_HSAddCodes2 = wp.ezaWP_WarennummerZusatzCode2 item.zaItem_HSAddCodes3 = wp.ezaWP_WarennummerZusatzCode3 item.zaItem_HSAddCodes4 = wp.ezaWP_WarennummerZusatzCode4 item.zaItem_HSAddCodes5 = wp.ezaWP_WarennummerZusatzCode5 item.zaItem_HSAddCodes6 = wp.ezaWP_WarennummerZusatzCode6 item.zaItem_HSAddCodes7 = wp.ezaWP_WarennummerZusatzCode7 item.zaItem_HSAddCodes8 = wp.ezaWP_WarennummerZusatzCode8 item.zaItem_HSAddCodes9 = wp.ezaWP_WarennummerZusatzCode9 item.zaItem_HSAddCodes10 = wp.ezaWP_WarennummerZusatzCode10 item.zaItem_Description = wp.ezaWP_Warenbezeichnung item.zaItem_PrevProcedure = wp.ezaWP_VerfahrensCodeVorangegangenesVerfahren item.zaItem_PreferentialCountry = wp.ezaWP_Praeferenzursprungsland item.zaItem_MainProcedure = wp.ezaWP_AnmeldeVErfahren item.zaItem_PackageColli = (wp.ezaWP_PackstueckAnzahl) item.zaItem_PackageType = wp.ezaWP_PackstueckArt Dim packageNumber As Integer item.Packages.Add(New cVERAG_CustomsDeclarations_ItemPackage With { .zaPkg_Type = item.zaItem_PackageType, .zaPkg_Number = If(Integer.TryParse(item.zaItem_PackageColli, packageNumber), CType(packageNumber, Integer?), Nothing), .zaPkg_Marks = item.zaItem_PackageMark }) item.zaItem_GrossMass = ToNullableDecimal(wp.ezaWP_Rohmasse) item.zaItem_NetMass = ToNullableDecimal(wp.ezaWP_Eigenmasse) item.zaItem_InvoiceValueForeign = ToNullableDecimal(wp.ezaWP_Artikelpreis) item.zaItem_InvoiceCurrency = wp.ezaWP_ArtikelpreisWaehrung If If(wp.ezaWP_ArtikelpreisWaehrung, "") = "EUR" Then item.zaItem_InvoiceValueEUR = ToNullableDecimal(wp.ezaWP_Artikelpreis) End If item.zaItem_CustomsValueEUR = ToNullableDecimal(wp.ezaWP_Zollwert) item.zaItem_StatisticalValueEUR = ToNullableDecimal(wp.ezaWP_AHStatWert) item.zaItem_OriginCountry = wp.ezaWP_UrsprungslandCode item.zaItem_PreferenceCode = wp.ezaWP_BeguenstigungBenatragtCode item.zaItem_PosAddition = If(wp.ezaWP_PositionsZusatz, "") ' ------------------------------- ' POSITIONS-UNTERLAGEN ' ------------------------------- If wp.ezaWP_UNTERLAGEN IsNot Nothing Then For Each ul In wp.ezaWP_UNTERLAGEN Dim doc As New cVERAG_CustomsDeclarations_Document doc.zaDoc_Section = ul.ezaWpUl_Bereich doc.zaDoc_Code = ul.ezaWpUl_Art doc.zaDoc_Reference = ul.ezaWpUl_Nummer doc.zaDoc_Date = ToNullableDate(ul.ezaWpUl_DatumAusstellung) doc.zaDoc_Presentation = ul.ezaWpUl_VorlageKz doc.zaDoc_DepreciationAmount = (ul.ezaWpUl_AbschreibungsMenge) doc.zaDoc_DepreciationUnitmeasurement = ul.ezaWpUl_AbschreibungsMengeMasseinheit doc.zaDoc_DepreciationUnitmeasurementQualifier = ul.ezaWpUl_AbschreibungsMengeMasseinheitQualifier item.Documents.Add(doc) Next End If ' ================================================================ ' ABGABEN POS ' ================================================================ If eza.eza_AUFSCHUB IsNot Nothing Then For Each d In eza.eza_AUFSCHUB If d.ezaAfb_PositionsNummer IsNot Nothing AndAlso CInt(d.ezaAfb_PositionsNummer) = item.zaItem_PosNo Then Dim duty As New cVERAG_CustomsDeclarations_Duty duty.zaDuty_ApplicationType = d.ezaAfb_ArtAufschubantrag duty.zaDuty_AccountType = d.ezaAfb_Aufschubart duty.zaDuty_AccountHeadCustoms = d.ezaAfb_HZA duty.zaDuty_AccountNo = d.ezaAfb_KontoNr duty.zaDuty_AccountEORI = d.ezaAfb_AufschubnehmerEORI duty.zaDuty_AccountHolderName = d.AufschubnehmerName duty.zaDuty_DutyType = d.ezaAfb_AbgabeArt duty.zaDuty_BIN = d.ezaAfb_AufschuBIN duty.zaDuty_AmountEUR = ToNullableDecimal(d.ezaAfb_Abgabenbetrag) duty.zaDuty_AmountForeign = ToNullableDecimal(d.ezaAfb_Abgabenbetrag) duty.zaDuty_Currency = "EUR" duty.zaDuty_LimitDate = ToNullableDate(d.ezaAfb_Faelligkeit) duty.zaDuty_Prozentsatz = ToNullableDecimal(d.ezaAfb_Prozentsatz) item.Duties.Add(duty) End If Next End If ZA.Items.Add(item) Next End If ' ================================================================ 'CBAM WARNING ' ================================================================ If freshInsert Then ZA.checkfreshCBAMWarning() End If ' ================================================================ ' SAVE Dim saved = ZA.SAVE() ' ======KAFKA========================================================== If saved AndAlso freshInsert Then cDakosyEZA_Greenpulse.INSERT_KAFKA(ZA) ' ================================================================ Return saved Catch ex As Exception cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name) Return False End Try End Function ' ===================================================================== ' NCTS 004 -> VERAG TRANSIT ' ===================================================================== Public Function ImportDakosyNCTS(bezugsNr As String, Optional overwrite As Boolean = True) As Boolean If String.IsNullOrWhiteSpace(bezugsNr) Then Return False Dim ncts = cDakosyNCTSOut004.LOADByBezugsNr(bezugsNr, True) If ncts Is Nothing OrElse ncts.ncts_Id <= 0 Then Return False Return ImportDakosyNCTS(ncts, overwrite) End Function Public Function ImportDakosyNCTS(ncts As cDakosyNCTSOut004, Optional overwrite As Boolean = True) As Boolean Try If ncts Is Nothing Then Return False Dim mrn = ToStringSafe(ncts.ncts_MRN) Dim anr = ToStringSafe(ncts.ncts_ANR) Dim ref = If(Not String.IsNullOrWhiteSpace(mrn), mrn, anr) If String.IsNullOrWhiteSpace(ref) Then Return False If Not overwrite AndAlso ExistsNCTSInVERAG(mrn, anr) Then Return False Dim ZA = cVERAG_CustomsDeclarations.loadByMRN(ref, False) If ZA Is Nothing Then ZA = New cVERAG_CustomsDeclarations If ZA.za_Id > 0 AndAlso ZA.za_REGIME <> "TRANSIT" Then Throw New InvalidOperationException("MRN gehört zu anderem Verfahren: " & ZA.za_REGIME) ZA.za_System = "DAKOSY" ZA.za_CustomsSystem = "ATLAS" ZA.za_CustomsSystemCountry = "DE" ZA.za_REGIME = "TRANSIT" ZA.za_MRN = ref ZA.za_LRN = ToStringSafe(ncts.ncts_ObjectName) ZA.za_DeclarationNo = anr ZA.za_IsExternalSystem = False ZA.za_IsFinalDeclaration = Not String.IsNullOrWhiteSpace(mrn) ZA.za_Firma = ToStringSafe(ncts.ncts_firma) ZA.za_Niederlassung = ToStringSafe(ncts.ncts_niederlassung) ZA.za_Sachbearbeiter = ToStringSafe(ncts.ncts_Bearbeiter) ZA.za_CountryDispatch = ToStringSafe(ncts.ncts_CountryOfDispatch) ZA.za_CountryDestination = ToStringSafe(ncts.ncts_CountryOfDestination) ZA.za_TransitType = ToStringSafe(ncts.ncts_TransitDeclarationType) If String.IsNullOrWhiteSpace(ZA.za_TransitType) Then ZA.za_TransitType = ToStringSafe(ncts.ncts_Declarationtype) ZA.za_TransitStatus = ToStringSafe(ncts.ncts_Status) ZA.za_TransitDepartureOffice = ToStringSafe(ncts.ncts_CustomsOfficeOfDeparture) ZA.za_TransitDestinationOffice = ToStringSafe(ncts.ncts_CustomsOfficeOfDestinationDeclared) ZA.za_TransitLimitDate = ToNullableDate(ncts.ncts_LimitDate) ZA.za_TransitArrivalDate = ToNullableDate(ncts.ncts_Ankunft) ZA.za_TransitCompletionDate = ToNullableDate(ncts.ncts_Erledigung) ZA.za_TransitReducedDataset = ToNullableBool(ncts.ncts_ReductedDatasetIndicator) ZA.za_TransitSecurityCode = ToStringSafe(ncts.ncts_Security) ZA.za_TransitLocationType = ToStringSafe(ncts.ncts_LocationOfGoods_TypeofLocation) ZA.za_TransitLocationQualifier = ToStringSafe(ncts.ncts_LocationOfGoods_QualifierIdenfitication) ZA.za_TransitLocationIdentifier = ToStringSafe(ncts.ncts_LocationOfGoods_AdditionalIdentifier) ZA.za_TransitContainerIndicator = ToNullableBool(ncts.ncts_ContainerIndicator) ZA.za_TransitBorderVehicle = ToStringSafe(ncts.ncts_ActiveBorderTransportMeans_1_IdentificationNumber) ZA.za_TransitBorderVehicleType = ToStringSafe(ncts.ncts_ActiveBorderTransportMeans_1_TypeOfIdentification) ZA.za_TransitBorderVehicleNationality = ToStringSafe(ncts.ncts_ActiveBorderTransportMeans_1_Nationality) ZA.za_TransportModeInland = ToStringSafe(ncts.ncts_InlandModeOfTransport) ZA.za_TransportModeBorder = ToStringSafe(ncts.ncts_ModeOfTransportAtTheBorder) ZA.za_MeansOfTransport_Vehicle = ToStringSafe(ncts.ncts_DepartureTransportMeans_1_IdentificationNumber) ZA.za_MeansOfTransport_Type = ToStringSafe(ncts.ncts_DepartureTransportMeans_1_TypeOfIdentification) ZA.za_MeansOfTransport_Nationality = ToStringSafe(ncts.ncts_DepartureTransportMeans_1_Nationality) ZA.za_TotGrossMass = ToNullableDecimal(ncts.ncts_GrossMass) ZA.za_UCR = ToStringSafe(ncts.ncts_ReferenceNumberUCR) ZA.za_DeclarationDate = ToNullableDate(ncts.ncts_Eroeffnung) VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetFirmaNiederlassung(ZA.za_Firma, ZA.za_Niederlassung, "", ZA.za_LRN) VERAG_PROG_ALLGEMEIN.cProgramFunctions.tryGetAvisoId_SndId_ByLRN(ZA.za_LRN, ZA.za_AvisoId, ZA.za_SendungsId) ' loadByMRN(..., False) lädt keine Kinddaten; bei Neuimport komplett neu aufbauen. ZA.Parties.Clear() ZA.Items.Clear() ZA.Documents.Clear() ZA.Duties.Clear() ZA.HouseConsignments.Clear() ZA.TransitGuarantees.Clear() ZA.TransitOffices.Clear() AddNCTSParty(ZA, "CONSIGNOR", ncts.ncts_Consignor_IdentificationNumber, ncts.ncts_Consignor_Name, ncts.ncts_Consignor_StreetNumber, ncts.ncts_Consignor_Postcode, ncts.ncts_Consignor_City, ncts.ncts_Consignor_Country, ncts.ncts_Consignor_SubsidiaryNumber) AddNCTSParty(ZA, "CONSIGNEE", ncts.ncts_Consignee_IdentificationNumber, ncts.ncts_Consignee_Name, ncts.ncts_Consignee_StreetNumber, ncts.ncts_Consignee_Postcode, ncts.ncts_Consignee_City, ncts.ncts_Consignee_Country, ncts.ncts_Consignee_SubsidiaryNumber) AddNCTSParty(ZA, "HOLDER", ncts.ncts_HolderOfTheTransitProcedure_IdentificationNumber, ncts.ncts_HolderOfTheTransitProcedure_Name, ncts.ncts_HolderOfTheTransitProcedure_StreetNumber, ncts.ncts_HolderOfTheTransitProcedure_Postcode, ncts.ncts_HolderOfTheTransitProcedure_City, ncts.ncts_HolderOfTheTransitProcedure_Country) AddNCTSParty(ZA, "REPRESENTATIVE", ncts.ncts_Representative_IdentificationNumber, Nothing, Nothing, Nothing, Nothing, Nothing) AddNCTSParty(ZA, "CARRIER", ncts.ncts_Carrier_IdentificationNumber, Nothing, Nothing, Nothing, Nothing, Nothing, ncts.ncts_Carrier_SubsidiaryNumber) For Each grt In ncts.ncts_GUARANTEE Dim betragFW As Decimal? = ToNullableDecimal(grt.nctsGRT_AmountToBeCovered) Dim waehrungFW As String = ToStringSafe(grt.nctsGRT_Currency) Dim betragEUR As Decimal? = Nothing Dim kurs As Decimal? = Nothing If betragFW.HasValue Then If String.Equals(waehrungFW, "EUR", StringComparison.OrdinalIgnoreCase) Then betragEUR = betragFW kurs = 1D ElseIf Not String.IsNullOrWhiteSpace(waehrungFW) Then Dim umgerechnet As Decimal = VERAG_PROG_ALLGEMEIN.cEZB_Waehrungskurse.EXCHANGE_CURTOEUR(betragFW.Value, waehrungFW, ncts.ncts_Trans_DatumZeit) If umgerechnet > 0 Then betragEUR = umgerechnet If betragFW.Value <> 0 Then kurs = umgerechnet / betragFW.Value End If End If End If ZA.TransitGuarantees.Add(New cVERAG_CustomsDeclarations_TransitGuarantee With { .zaGRT_Type = ToStringSafe(grt.nctsGRT_Type), .zaGRT_GRN = ToStringSafe(grt.nctsGRT_GRN), .zaGRT_Reference = ToStringSafe(grt.nctsGRT_OtherGuaranteeReference), .zaGRT_Amount = betragEUR, .zaGRT_Currency = "EUR", .zaGRT_AmountForeign = betragFW, .zaGRT_CurrencyForeign = waehrungFW, .zaGRT_ExchangeRateToEUR = kurs }) Next For i As Integer = 1 To 9 Dim office = NCTSProp(ncts, "ncts_CustomsOfficeOfTransitDeclared_" & i & "_RefNumber") If Not String.IsNullOrWhiteSpace(office) Then ZA.TransitOffices.Add(New cVERAG_CustomsDeclarations_TransitOffice With { .zaTO_Sequence = i, .zaTO_Office = office, .zaTO_ExpectedArrival = ToNullableDate(NCTSProp(ncts, "ncts_CustomsOfficeOfTransitDeclared_" & i & "_ArravialDateTime")) }) End If Next Dim hcNumber As Integer = 0 Dim itemNumber As Integer = 0 For Each hc In ncts.ncts_HOUSE_CONSIGNMENT hcNumber += 1 ZA.HouseConsignments.Add(New cVERAG_CustomsDeclarations_HouseConsignment With { .zaHC_Number = hcNumber, .zaHC_Reference = ToStringSafe(hc.nctsHC_HouseConsignMentReference), .zaHC_UCR = ToStringSafe(hc.nctsHC_ReferenceNumberUCR), .zaHC_CountryDispatch = ToStringSafe(hc.nctsHC_CountryOfDispatch), .zaHC_CountryDestination = ToStringSafe(hc.nctsHC_CountryOfDestination), .zaHC_GrossMass = ToNullableDecimal(hc.nctsHC_GrossMass) }) For Each ci In hc.nctsWP_CONSIGNMENT_ITEM itemNumber += 1 Dim pos = ToInt(ci.nctsHCCI_DeclarationGoodsItemNumber) If pos <= 0 Then pos = ToInt(ci.nctsHCCI_GoodsItemNumber) If pos <= 0 Then pos = itemNumber Dim it As New cVERAG_CustomsDeclarations_Item With { .zaItem_PosNo = pos, .zaItem_HouseConsignmentNumber = hcNumber, .zaItem_ArticleCode = ToStringSafe(ci.nctsHCCI_ArticleCode), .zaItem_HSCode = ToStringSafe(ci.nctsHCCI_CommodityCode), .zaItem_Description = ToStringSafe(ci.nctsHCCI_DescriptionOfGoods), .zaItem_GrossMass = ToNullableDecimal(ci.nctsHCCI_GrossMass), .zaItem_NetMass = ToNullableDecimal(ci.nctsHCCI_NetMass), .zaItem_InvoiceValueForeign = ToNullableDecimal(ci.nctsHCCI_GoodsValue), .zaItem_InvoiceCurrency = ToStringSafe(ci.nctsHCCI_CurrencyOfGoodsValue) } For Each pk In ci.nctsHCCI_PACKAGING Dim pkg As New cVERAG_CustomsDeclarations_ItemPackage With { .zaPkg_Type = ToStringSafe(pk.nctsHCCIPK_TypeOfPackages), .zaPkg_Number = ToNullableInteger(pk.nctsHCCIPK_NumberOfPackages), .zaPkg_Marks = ToStringSafe(pk.nctsHCCIPK_ShippingMarks) } it.Packages.Add(pkg) Next If it.Packages.Count > 0 Then it.zaItem_PackageType = it.Packages(0).zaPkg_Type it.zaItem_PackageColli = If(it.Packages(0).zaPkg_Number.HasValue, it.Packages(0).zaPkg_Number.Value.ToString(), Nothing) it.zaItem_PackageMark = it.Packages(0).zaPkg_Marks End If AddNCTSDocs(it.Documents, ci, "nctsHCCI_") ZA.Items.Add(it) Next Next AddNCTSDocs(ZA.Documents, ncts, "ncts_") ' SAVE_TRANSIT ist aktuell separat; bestehende NCTS-Datensätze nur in Test-DB überschreiben. If Not ZA.SAVE() Then Return False ZA.SAVE_TRANSIT() Return True Catch ex As Exception cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name) Return False End Try End Function Private Function ExistsNCTSInVERAG(mrn As String, anr As String) As Boolean Dim sqlstr = "SELECT TOP 1 1 FROM tblVERAG_CustomsDeclarations WHERE za_System='DAKOSY' AND za_REGIME='TRANSIT' AND (za_MRN=@mrn OR za_MRN=@anr OR za_DeclarationNo=@anr)" Dim args As New List(Of SQLVariable) From {New SQLVariable("mrn", mrn), New SQLVariable("anr", anr)} Dim dt = New SQL().loadDgvBySql_Param(sqlstr, "VERAG", , args) Return dt IsNot Nothing AndAlso dt.Rows.Count > 0 End Function Private Sub AddNCTSParty(za As cVERAG_CustomsDeclarations, role As String, eori As Object, name As Object, street As Object, zip As Object, city As Object, country As Object, Optional subsidiary As Object = Nothing) If String.IsNullOrWhiteSpace(ToStringSafe(eori)) AndAlso String.IsNullOrWhiteSpace(ToStringSafe(name)) Then Exit Sub za.Parties.Add(New cVERAG_CustomsDeclarations_Parties With { .zaParty_Role = role, .zaParty_EORI = ToStringSafe(eori), .zaParty_SubsidiaryNumber = ToStringSafe(subsidiary), .zaParty_Name = ToStringSafe(name), .zaParty_Street = ToStringSafe(street), .zaParty_PostalCode = ToStringSafe(zip), .zaParty_City = ToStringSafe(city), .zaParty_Country = ToStringSafe(country) }) End Sub Private Function NCTSProp(obj As Object, name As String) As Object Dim p = obj.GetType().GetProperty(name) Return If(p Is Nothing, Nothing, p.GetValue(obj, Nothing)) End Function Private Sub AddNCTSDocs(docs As List(Of cVERAG_CustomsDeclarations_Document), obj As Object, prefix As String) For Each kind In {"SupportingDocument", "PreviousDocument", "TransportDocument"} For i As Integer = 1 To 9 Dim baseName = prefix & kind & "_" & i & "_" Dim typ = ToStringSafe(NCTSProp(obj, baseName & "Type")) Dim number = ToStringSafe(NCTSProp(obj, baseName & "ReferenceNumber")) If String.IsNullOrWhiteSpace(typ) AndAlso String.IsNullOrWhiteSpace(number) Then Continue For docs.Add(New cVERAG_CustomsDeclarations_Document With { .zaDoc_Section = kind, .zaDoc_Code = typ, .zaDoc_Reference = number }) Next Next End Sub Private Function ToNullableInteger(v As Object) As Integer? If v Is Nothing OrElse v Is DBNull.Value Then Return Nothing Dim i As Integer If Integer.TryParse(ToStringSafe(v), i) Then Return i Return Nothing End Function ' ===================================================================== ' DUPLIKATSPRÜFUNG ' ===================================================================== Private Function ExistsInVERAG(eza As cDakosyEZA) As Boolean Dim sql As String = "SELECT TOP 1 1 FROM tblVERAG_CustomsDeclarations " & "WHERE za_System='DAKOSY' " & "AND (za_MRN=@mrn OR za_MRN=@anr)" Dim p As New List(Of SQLVariable) From { New SQLVariable("mrn", eza.eza_MRN), New SQLVariable("anr", eza.eza_ANR) } Dim dt = New SQL().loadDgvBySql_Param(sql, "VERAG", , p) Return dt IsNot Nothing AndAlso dt.Rows.Count > 0 End Function ' ========================================================================= ' Small helpers (falls du sie schon hast, kannst du diese entfernen) ' ========================================================================= Private Function ToStringSafe(v As Object) As String If v Is Nothing Then Return Nothing Dim s As String = TryCast(v, String) If s IsNot Nothing Then Return s Return Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) End Function Private Function ToInt(v As Object) As Integer If v Is Nothing Then Return 0 Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim i As Integer If Integer.TryParse(s, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, i) Then Return i Return 0 End Function Private Function ToNullableDecimal(v As Object) As Decimal? If v Is Nothing Then Return Nothing Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim d As Decimal If Decimal.TryParse(s, Globalization.NumberStyles.Any, Globalization.CultureInfo.InvariantCulture, d) Then Return d Return Nothing End Function Private Function ToNullableDate(v As Object) As Date? If v Is Nothing Then Return Nothing If TypeOf v Is Date Then Return CType(v, Date) Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture) Dim dt As Date If Date.TryParse(s, Globalization.CultureInfo.InvariantCulture, Globalization.DateTimeStyles.None, dt) Then Return dt Return Nothing End Function Private Function ToNullableBool(v As Object) As Boolean? If v Is Nothing Then Return Nothing If TypeOf v Is Boolean Then Return CType(v, Boolean) Dim s = Convert.ToString(v, Globalization.CultureInfo.InvariantCulture).Trim().ToLowerInvariant() If s = "J" OrElse s = "1" OrElse s = "true" OrElse s = "y" OrElse s = "yes" Then Return True If s = "N" OrElse s = "0" OrElse s = "false" OrElse s = "n" OrElse s = "no" Then Return False Return Nothing End Function End Class