963 lines
50 KiB
VB.net
963 lines
50 KiB
VB.net
Imports System.Data.SqlClient
|
|
Imports System.IO
|
|
Imports ClosedXML.Excel
|
|
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)
|
|
' ================================================================
|
|
|
|
|
|
If saved Then
|
|
Try
|
|
UpdateBrokerManagementFileTETRAPAK(ZA)
|
|
Catch ex As Exception
|
|
cErrorHandler.ERR(ex.Message, ex.StackTrace, "UpdateBrokerManagementFile")
|
|
End Try
|
|
End If
|
|
|
|
Return saved
|
|
|
|
|
|
Catch ex As Exception
|
|
cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Sub UpdateBrokerManagementFileTETRAPAK(ZA As cVERAG_CustomsDeclarations)
|
|
Const kundenNrTETRAPAK As Integer = 719649
|
|
Const prefix As String = "[TETRAPAK] "
|
|
|
|
Debug.WriteLine(prefix & "========== START BrokerManagementFile ==========")
|
|
|
|
Try
|
|
If ZA Is Nothing OrElse ZA.za_Id <= 0 Then
|
|
Debug.WriteLine(prefix & "ABBRUCH: Keine gültige Zollanmeldung")
|
|
Exit Sub
|
|
End If
|
|
|
|
'Zollanmeldung vollständig aus VERAG-Datenbank laden
|
|
Dim ZOLL As New cVERAG_CustomsDeclarations
|
|
ZOLL.za_Id = ZA.za_Id
|
|
ZOLL.LOAD()
|
|
|
|
If Not ZOLL.hasEntry Then
|
|
Throw New Exception("Zollanmeldung nicht gefunden. za_Id=" & ZA.za_Id)
|
|
End If
|
|
|
|
Debug.WriteLine(prefix & "ZA-ID: " & ZOLL.za_Id)
|
|
Debug.WriteLine(prefix & "MRN: " & Convert.ToString(ZOLL.za_MRN))
|
|
Debug.WriteLine(prefix & "LRN: " & Convert.ToString(ZOLL.za_LRN))
|
|
Debug.WriteLine(prefix & "AvisoId: " & Convert.ToString(ZOLL.za_AvisoId))
|
|
Debug.WriteLine(prefix & "SendungsId: " & Convert.ToString(ZOLL.za_SendungsId))
|
|
|
|
If Not ZOLL.za_SendungsId.HasValue OrElse ZOLL.za_SendungsId.Value <= 0 Then
|
|
Debug.WriteLine(prefix & "ABBRUCH: Keine SendungsId")
|
|
Exit Sub
|
|
End If
|
|
|
|
'Auftraggeber prüfen
|
|
Dim SND As New VERAG_PROG_ALLGEMEIN.cSendungen(ZOLL.za_SendungsId.Value)
|
|
|
|
Debug.WriteLine(prefix & "Auftraggeber: " & Convert.ToString(SND.tblSnd_Auftraggeber))
|
|
Debug.WriteLine(prefix & "Kundennummer: " & Convert.ToString(SND.tblSnd_AuftraggeberKdNr))
|
|
|
|
Dim kundenNr As Integer
|
|
If Not Integer.TryParse(Convert.ToString(SND.tblSnd_AuftraggeberKdNr), kundenNr) Then
|
|
Debug.WriteLine(prefix & "ABBRUCH: Ungültige Kundennummer")
|
|
Exit Sub
|
|
End If
|
|
|
|
If kundenNr <> kundenNrTETRAPAK Then
|
|
Debug.WriteLine(prefix & "ABBRUCH: Kein TETRAPAK-Auftraggeber")
|
|
Exit Sub
|
|
End If
|
|
|
|
'Warenpositionen aus tblVERAG_CustomsDeclarations_Items
|
|
Dim positionen = ZOLL.Items.OrderBy(Function(p) p.zaItem_PosNo).ToList()
|
|
|
|
If positionen.Count = 0 Then
|
|
Debug.WriteLine(prefix & "ABBRUCH: Keine Warenpositionen vorhanden")
|
|
Exit Sub
|
|
End If
|
|
|
|
Debug.WriteLine(prefix & "Warenpositionen: " & positionen.Count)
|
|
Debug.WriteLine(prefix & "Kopfabgaben: " & ZOLL.Duties.Count)
|
|
|
|
'Abgaben aus tblVERAG_CustomsDeclarations_Duties
|
|
'Positionen und Kopf getrennt behandeln
|
|
Dim gesamtZollPositionen As Decimal = 0D
|
|
Dim gesamtEustPositionen As Decimal = 0D
|
|
Dim gesamtZollKopf As Decimal = 0D
|
|
Dim gesamtEustKopf As Decimal = 0D
|
|
Dim anzahlPositionsabgaben As Integer = 0
|
|
|
|
For Each wp In positionen
|
|
Debug.WriteLine(prefix & "Position " & wp.zaItem_PosNo & " | ItemId=" & wp.zaItem_Id & " | Abgaben=" & wp.Duties.Count)
|
|
|
|
For Each duty In wp.Duties
|
|
Dim betrag As Decimal = If(duty.zaDuty_AmountEUR, 0D)
|
|
Dim art As String = If(duty.zaDuty_DutyType, "").Trim().ToUpperInvariant()
|
|
|
|
Select Case art
|
|
Case "A0000", "A00"
|
|
gesamtZollPositionen += betrag
|
|
Case "B0000", "B00"
|
|
gesamtEustPositionen += betrag
|
|
End Select
|
|
|
|
anzahlPositionsabgaben += 1
|
|
|
|
Debug.WriteLine(prefix & " Duty: " & art &
|
|
" | Betrag=" & betrag.ToString("0.00") &
|
|
" | ItemId=" & Convert.ToString(duty.zaDuty_zaItemId))
|
|
Next
|
|
Next
|
|
|
|
For Each duty In ZOLL.Duties
|
|
Dim betrag As Decimal = If(duty.zaDuty_AmountEUR, 0D)
|
|
Dim art As String = If(duty.zaDuty_DutyType, "").Trim().ToUpperInvariant()
|
|
|
|
Select Case art
|
|
Case "A0000", "A00"
|
|
gesamtZollKopf += betrag
|
|
Case "B0000", "B00"
|
|
gesamtEustKopf += betrag
|
|
End Select
|
|
|
|
Debug.WriteLine(prefix & "Kopfabgabe: " & art & " | Betrag=" & betrag.ToString("0.00"))
|
|
Next
|
|
|
|
Debug.WriteLine(prefix & "Positions-Zoll gesamt: " & gesamtZollPositionen.ToString("0.00"))
|
|
Debug.WriteLine(prefix & "Positions-EUSt gesamt: " & gesamtEustPositionen.ToString("0.00"))
|
|
Debug.WriteLine(prefix & "Kopf-Zoll gesamt: " & gesamtZollKopf.ToString("0.00"))
|
|
Debug.WriteLine(prefix & "Kopf-EUSt gesamt: " & gesamtEustKopf.ToString("0.00"))
|
|
|
|
'Bei fehlenden Positionsabgaben keine künstliche Verteilung
|
|
Dim nurKopfabgaben As Boolean = (anzahlPositionsabgaben = 0)
|
|
|
|
If nurKopfabgaben AndAlso positionen.Count > 1 AndAlso ZOLL.Duties.Count > 0 Then
|
|
Throw New Exception("BrokerManagementFile: Es sind " & positionen.Count &
|
|
" Warenpositionen vorhanden, aber nur Kopfabgaben gespeichert. " &
|
|
"Eine eindeutige Verteilung von Zoll/EUSt ist nicht möglich. ZA-ID=" & ZOLL.za_Id)
|
|
End If
|
|
|
|
If nurKopfabgaben AndAlso ZOLL.Duties.Count = 0 Then
|
|
Debug.WriteLine(prefix & "WARNUNG: Keine Abgaben in der Zollanmeldung gespeichert")
|
|
End If
|
|
|
|
If Not nurKopfabgaben Then
|
|
If ZOLL.Duties.Count > 0 Then
|
|
If gesamtZollPositionen <> gesamtZollKopf OrElse gesamtEustPositionen <> gesamtEustKopf Then
|
|
Debug.WriteLine(prefix & "WARNUNG: Positionssummen und Kopfsummen weichen voneinander ab")
|
|
Else
|
|
Debug.WriteLine(prefix & "OK: Positionssummen entsprechen den Kopfsummen")
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
'Anhänge über AVISO und Sendung laden
|
|
Dim anhaenge As New List(Of VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge)
|
|
|
|
If ZOLL.za_AvisoId.HasValue AndAlso ZOLL.za_AvisoId.Value > 0 Then
|
|
VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.LOAD_LIST_ByAviso(anhaenge, ZOLL.za_AvisoId.Value)
|
|
End If
|
|
|
|
Dim sendungsAnhaenge As New List(Of VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge)
|
|
VERAG_PROG_ALLGEMEIN.cAvisoAnhaenge.LOAD_LIST_BySendung(sendungsAnhaenge, ZOLL.za_SendungsId.Value)
|
|
|
|
For Each anh In sendungsAnhaenge
|
|
If Not anhaenge.Any(Function(a) a.anh_docId = anh.anh_docId) Then anhaenge.Add(anh)
|
|
Next
|
|
|
|
Debug.WriteLine(prefix & "Anhänge gefunden: " & anhaenge.Count)
|
|
|
|
Dim dateienGefunden As Integer = 0
|
|
Dim dateienGespeichert As Integer = 0
|
|
|
|
For Each anh In anhaenge
|
|
Debug.WriteLine(prefix & "Prüfe Anhang: " & Convert.ToString(anh.anh_Art) & " | docId=" & anh.anh_docId)
|
|
|
|
If Not String.Equals(Convert.ToString(anh.anh_Art).Trim(), "BrokerManagementFile", StringComparison.OrdinalIgnoreCase) Then Continue For
|
|
If anh.anh_docId <= 0 Then Continue For
|
|
|
|
Dim pfad As String = (New VERAG_PROG_ALLGEMEIN.cDATENSERVER(anh.anh_docId)).GET_TOP1_PATH(False)
|
|
|
|
Debug.WriteLine(prefix & "Archivpfad: " & Convert.ToString(pfad))
|
|
|
|
If String.IsNullOrWhiteSpace(pfad) OrElse Not File.Exists(pfad) Then
|
|
Debug.WriteLine(prefix & "Übersprungen: Archivdatei nicht gefunden")
|
|
Continue For
|
|
End If
|
|
|
|
If Not String.Equals(Path.GetExtension(pfad), ".xlsx", StringComparison.OrdinalIgnoreCase) Then
|
|
Debug.WriteLine(prefix & "Übersprungen: Keine XLSX-Datei")
|
|
Continue For
|
|
End If
|
|
|
|
dateienGefunden += 1
|
|
|
|
Using wb As New XLWorkbook(pfad)
|
|
Dim ws = wb.Worksheet(1)
|
|
Dim letzteVerwendeteZeile = ws.LastRowUsed()
|
|
|
|
If letzteVerwendeteZeile Is Nothing Then
|
|
Debug.WriteLine("BrokerManagementFile ist leer: " & pfad)
|
|
End If
|
|
|
|
'Datenzeilen anhand Spalte A
|
|
Dim datenZeilen As New List(Of Integer)
|
|
Dim letzteZeile As Integer = letzteVerwendeteZeile.RowNumber()
|
|
|
|
For zeile As Integer = 2 To letzteZeile
|
|
If Not String.IsNullOrWhiteSpace(ws.Cell(zeile, "A").GetString()) Then datenZeilen.Add(zeile)
|
|
Next
|
|
|
|
Debug.WriteLine(prefix & "Excel-Zeilen: " & datenZeilen.Count)
|
|
Debug.WriteLine(prefix & "Zollpositionen: " & positionen.Count)
|
|
|
|
If datenZeilen.Count <> positionen.Count Then
|
|
Debug.WriteLine("BrokerManagementFile: Positionsanzahl stimmt nicht überein. Excel=" &
|
|
datenZeilen.Count & ", Zollanmeldung=" & positionen.Count & ", Datei=" & pfad)
|
|
End If
|
|
|
|
For i As Integer = 0 To positionen.Count - 1
|
|
Dim wp = positionen(i)
|
|
Dim zeile As Integer = datenZeilen(i)
|
|
Dim posNr As Integer = wp.zaItem_PosNo
|
|
|
|
Dim zollbetr As Decimal = 0D
|
|
Dim eust As Decimal = 0D
|
|
|
|
'Positionsabgaben aus Datenbank
|
|
If Not nurKopfabgaben Then
|
|
For Each duty In wp.Duties
|
|
Dim betrag As Decimal = If(duty.zaDuty_AmountEUR, 0D)
|
|
Dim art As String = If(duty.zaDuty_DutyType, "").Trim().ToUpperInvariant()
|
|
Select Case art.Trim.ToUpperInvariant()
|
|
'Zoll inkl. Zusatz-, Antidumping- und Ausgleichszoll
|
|
Case "A0000", "A00", "A2000", "A20", "A3000", "A30", "A35", "A4000", "A40"
|
|
zollbetr += betrag
|
|
|
|
'Einfuhrumsatzsteuer
|
|
Case "B0000", "B00", "5EV"
|
|
eust += betrag
|
|
|
|
'Sicherheiten, Summen und sonstige Abgaben nicht berücksichtigen
|
|
Case "2EU", "2IG", "2KO", "2PE", "2VF", "2VS", "5EU", "5ZO", "9EA", "6BE"
|
|
'Keine Addition
|
|
|
|
Case Else
|
|
'Debug.WriteLine("Unbekannte Abgabenart: " & art & " / Betrag: " & betrag.ToString())
|
|
zollbetr += betrag 'Default: Alle unbekannten Abgabenarten werden als Zoll behandelt
|
|
End Select
|
|
Next
|
|
ElseIf positionen.Count = 1 Then
|
|
'Nur bei einer Position sind Kopfabgaben eindeutig zuordenbar
|
|
zollbetr = gesamtZollKopf
|
|
eust = gesamtEustKopf
|
|
End If
|
|
|
|
Debug.WriteLine(prefix & "----------------------------------------")
|
|
Debug.WriteLine(prefix & "Position: " & posNr)
|
|
Debug.WriteLine(prefix & "Excel-Zeile: " & zeile)
|
|
Debug.WriteLine(prefix & "Zoll: " & zollbetr.ToString("0.00"))
|
|
Debug.WriteLine(prefix & "EUSt: " & eust.ToString("0.00"))
|
|
|
|
'AZ - Registration Number ATC/ATD
|
|
ws.Cell(zeile, "AZ").Value = If(zoll.za_DeclarationNo, "")
|
|
|
|
'BA - Date of Acceptance
|
|
If zoll.za_AcceptanceDate.HasValue Then
|
|
ws.Cell(zeile, "BA").Value = zoll.za_AcceptanceDate.Value.ToString("dd.MM.yyyy")
|
|
Else
|
|
ws.Cell(zeile, "BA").Value = ""
|
|
End If
|
|
|
|
'BB - Registration Number MRN
|
|
ws.Cell(zeile, "BB").Value = If(zoll.za_MRN, "")
|
|
|
|
'BC - Office of Entry
|
|
ws.Cell(zeile, "BC").Value = If(zoll.za_EntryCustomsOffice, "")
|
|
|
|
'BD - Mode of Transport at the Border
|
|
ws.Cell(zeile, "BD").Value = If(ZOLL.za_TransportModeBorder, If(ZOLL.za_TransportModeInland, ""))
|
|
|
|
'BE - Identity of means of transport at the border
|
|
ws.Cell(zeile, "BE").Value = If(zoll.za_MeansOfTransport_Vehicle, "")
|
|
|
|
'BF - Nationality of means of transport at the border
|
|
ws.Cell(zeile, "BF").Value = If(zoll.za_MeansOfTransport_Nationality, "")
|
|
|
|
'BG - Inland Mode of Transport
|
|
ws.Cell(zeile, "BG").Value = If(ZOLL.za_TransportModeInland, If(ZOLL.za_TransportModeBorder, ""))
|
|
|
|
'BH - Identity of inland means of transport
|
|
ws.Cell(zeile, "BH").Value = If(zoll.za_MeansOfTransport_Vehicle, "")
|
|
|
|
'BI - Nationality of inland means of transport
|
|
ws.Cell(zeile, "BI").Value = If(zoll.za_MeansOfTransport_Nationality, "")
|
|
|
|
'BJ - Assessment of payable duty
|
|
ws.Cell(zeile, "BJ").Value = zollbetr
|
|
ws.Cell(zeile, "BJ").Style.NumberFormat.Format = "0.00"
|
|
|
|
'BK - Assessment of payable Import VAT
|
|
ws.Cell(zeile, "BK").Value = eust
|
|
ws.Cell(zeile, "BK").Style.NumberFormat.Format = "0.00"
|
|
|
|
Debug.WriteLine(prefix & "AZ=" & ws.Cell(zeile, "AZ").GetString())
|
|
Debug.WriteLine(prefix & "BA=" & ws.Cell(zeile, "BA").GetString())
|
|
Debug.WriteLine(prefix & "BB=" & ws.Cell(zeile, "BB").GetString())
|
|
Debug.WriteLine(prefix & "BC=" & ws.Cell(zeile, "BC").GetString())
|
|
Debug.WriteLine(prefix & "BD=" & ws.Cell(zeile, "BD").GetString())
|
|
Debug.WriteLine(prefix & "BE=" & ws.Cell(zeile, "BE").GetString())
|
|
Debug.WriteLine(prefix & "BF=" & ws.Cell(zeile, "BF").GetString())
|
|
Debug.WriteLine(prefix & "BG=" & ws.Cell(zeile, "BG").GetString())
|
|
Debug.WriteLine(prefix & "BH=" & ws.Cell(zeile, "BH").GetString())
|
|
Debug.WriteLine(prefix & "BI=" & ws.Cell(zeile, "BI").GetString())
|
|
Debug.WriteLine(prefix & "BJ=" & zollbetr.ToString("0.00"))
|
|
Debug.WriteLine(prefix & "BK=" & eust.ToString("0.00"))
|
|
Next
|
|
|
|
|
|
wb.Save()
|
|
Debug.WriteLine(prefix & "Original gespeichert: " & pfad)
|
|
|
|
|
|
dateienGespeichert += 1
|
|
End Using
|
|
Next
|
|
|
|
Debug.WriteLine(prefix & "BrokerManagementFiles gefunden: " & dateienGefunden)
|
|
Debug.WriteLine(prefix & "BrokerManagementFiles gespeichert: " & dateienGespeichert)
|
|
|
|
If dateienGefunden = 0 Then Debug.WriteLine(prefix & "WARNUNG: Kein BrokerManagementFile gefunden")
|
|
|
|
Catch ex As Exception
|
|
Debug.WriteLine(prefix & "FEHLER: " & ex.ToString())
|
|
Throw
|
|
Finally
|
|
Debug.WriteLine(prefix & "========== ENDE BrokerManagementFile ==========")
|
|
End Try
|
|
End Sub
|
|
' =====================================================================
|
|
' 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 |