Files
ADMIN/initATLASAufschubkonten/cWorker_AES_EXG.vb
2026-10-14 16:56:50 +02:00

399 lines
23 KiB
VB.net

Imports DAKOSY_Worker
Imports VERAG_PROG_ALLGEMEIN
Public Class cWorker_AES_EXG
Public Shared Dateiname = ""
Shared SQL As New VERAG_PROG_ALLGEMEIN.SQL
Shared Function readEZA_DatenZumAusgang_DataEXITDE_005(FORM As frmDYNachrichtenVerarbeitung, d As String, saveVerwahrung As Boolean) As String
Try
Dim VWI As DAKOSY_Worker.DataEXITDE.DatenZumAusgangXDTyp = DAKOSY_Worker.DataEXITDE.DatenZumAusgangXDTyp.LoadFromFile(d)
Dim MRN = ""
Dim RegistriernummerATLAS = ""
Dim ankungsdatum As Object = Nothing
Dim zp As Object = Nothing
readEZA_DatenZumAusgang_DataEXITDE_005 = ""
If VWI IsNot Nothing Then
If VWI.ResponseData IsNot Nothing AndAlso VWI.ResponseData.Count > 0 Then
For Each RESP In VWI.ResponseData
If RESP.ObjektIdentifizierung IsNot Nothing Then
If RESP.ObjektIdentifizierung.ObjektName IsNot Nothing Then
readEZA_DatenZumAusgang_DataEXITDE_005 = RESP.ObjektIdentifizierung.ObjektName 'Nur ObjektAntragsart VV (SumA Vorgang) /NE (NCTS-Vorgang )
If RESP.HeaderData IsNot Nothing Then
If RESP.HeaderData.MRN IsNot Nothing Then
MRN = RESP.HeaderData.MRN
End If
End If
If RESP.ObjektIdentifizierung.ZeitpunktEingang > "01.01.2000" Then
zp = RESP.ObjektIdentifizierung.ZeitpunktEingang
End If
'----------------------------------------------------------------------
'EXZ SAVE!
'----------------------------------------------------------------------
Dim EXG = DAKOSY_Worker.cDakosyEXG.LOADByBezugsNr(readEZA_DatenZumAusgang_DataEXITDE_005, True)
If EXG Is Nothing Then EXG = New cDakosyEXG
'EXG.consignee
EXG.exg_ObjectName = readEZA_DatenZumAusgang_DataEXITDE_005
EXG.exg_Partnersystem = "DAKOSY"
EXG.exg_Erstellung = zp
' EXG.exg_firma = RESP.HeaderData.
EXG.exg_Declarationtype = RESP.HeaderData.DeclarationType
EXG.exg_Security = RESP.HeaderData.Security
EXG.exg_MRN = RESP.HeaderData.MRN
EXG.exg_ContainerIndicator = RESP.HeaderData.ContainerIndicator
EXG.exg_GrossMass = RESP.HeaderData.GrossMass
EXG.exg_CountryOfDestination = RESP.HeaderData.CountryOfDestination
EXG.exg_ReferenceNumberUCR = RESP.HeaderData.ReferenceNumberUCR
frmDYNachrichtenVerarbeitung.setFirmaNL(VWI.Transaktion.IOPartner, VWI.Transaktion.IODivision3, EXG.exg_firma, EXG.exg_niederlassung, EXG.exg_ObjectName)
' frmDYNachrichtenVerarbeitung.tryGetFirmaNiederlassung(EXG.exg_firma, EXG.exg_niederlassung, If(EXG.exg_Representative_ContactPerson_EMailAddress, "").ToString, EXG.exg_ObjectName)
If RESP.HeaderData.Consignee IsNot Nothing Then
EXG.exg_Consignee_Name = RESP.HeaderData.Consignee.Name
EXG.exg_Consignee_StreetNumber = RESP.HeaderData.Consignee.StreetAndNumber
EXG.exg_Consignee_City = RESP.HeaderData.Consignee.City
EXG.exg_Consignee_Postcode = RESP.HeaderData.Consignee.Postcode
EXG.exg_Consignee_Country = RESP.HeaderData.Consignee.Country
EXG.exg_Consignee_IdentificationNumber = RESP.HeaderData.Consignee.IdentificationNumber
EXG.exg_Consignee_SubsidiaryNumber = RESP.HeaderData.Consignee.SubsidiaryNumber
End If
If RESP.HeaderData.Exporter IsNot Nothing Then
EXG.exg_Consignor_Name = RESP.HeaderData.Exporter.Name
EXG.exg_Consignor_StreetNumber = RESP.HeaderData.Exporter.StreetAndNumber
EXG.exg_Consignor_City = RESP.HeaderData.Exporter.City
EXG.exg_Consignor_Postcode = RESP.HeaderData.Exporter.Postcode
EXG.exg_Consignor_Country = RESP.HeaderData.Exporter.Country
EXG.exg_Consignor_IdentificationNumber = RESP.HeaderData.Exporter.IdentificationNumber
EXG.exg_Consignor_SubsidiaryNumber = RESP.HeaderData.Exporter.SubsidiaryNumber
End If
EXG.exg_POSITION.Clear()
If RESP.GoodsItem IsNot Nothing Then
For Each ITEM In RESP.GoodsItem
Dim EXG_ITEM As New cDakosy_EXG_Position
EXG_ITEM.exgPos_GoodsItemNumber = ITEM.GoodsItemNumber
'Tarifnummer prüfen und zusammenstellen
Dim hsCode As String = If(ITEM.HarmonizedSystemSubHeadingCode, "").Trim()
Dim cnCode As String = If(ITEM.CombinedNomenclatureCode, "").Trim()
EXG_ITEM.exgPos_CommodityCode = hsCode & cnCode
If (hsCode <> "" AndAlso hsCode.Length <> 6) OrElse (cnCode <> "" AndAlso cnCode.Length <> 2) OrElse (hsCode = "" AndAlso cnCode <> "") Then
Debug.WriteLine("Ungültige Warentarifnummer in Position " & ITEM.GoodsItemNumber & ": " & EXG_ITEM.exgPos_CommodityCode)
End If
EXG_ITEM.exgPos_DescriptionOfGoods = ITEM.DescriptionOfGoods
EXG_ITEM.exgPos_NetMass = ITEM.NetMass
EXG_ITEM.exgPos_GrossMass = ITEM.GrossMass
If ITEM.Procedure IsNot Nothing Then
EXG_ITEM.exgPos_PreviousProcedure = ITEM.Procedure.PreviousProcedure
EXG_ITEM.exgPos_RequestedProcedure = ITEM.Procedure.RequestedProcedure
End If
If ITEM.Packaging IsNot Nothing Then
For Each ITEM_PK In ITEM.Packaging
Dim EXG_ITEM_PK As New cDakosy_EXG_Position_Packaging
EXG_ITEM_PK.exgPosPk_NumberOfPackages = ITEM_PK.NumberOfPackages
EXG_ITEM_PK.exgPosPk_TypeOfPackages = ITEM_PK.TypeOfPackages
EXG_ITEM_PK.exgPosPk_ShippingMarks = ITEM_PK.ShippingMarks
EXG_ITEM.exgPos_PACKAGING.Add(EXG_ITEM_PK)
Next
End If
EXG.exg_POSITION.Add(EXG_ITEM)
Next
End If
If EXG.SAVE_ALL Then 'BEZUGSNR vorhanden
Dim STATUS As DAKOSY_Worker.cDakosy_Statusmeldungen = FORM.getStatusCheckTransID(VWI.Transaktion.IOReferenz, VWI.Transaktion.IODatumZeit)
STATUS.dySt_BezugsNr = readEZA_DatenZumAusgang_DataEXITDE_005
STATUS.dySt_artMitteilung = "EXG_DATA"
STATUS.dySt_dyArt = "EXG"
STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.S_00
STATUS.dySt_ergCode = "EXG_DATA"
STATUS.dySt_ergMitteilung = ""
If zp IsNot Nothing Then STATUS.dySt_ergZeitpunkt = zp
STATUS.SAVE()
'----------------------------------------------------------------------
'NCTS AKtualisieren!
'----------------------------------------------------------------------
'----------------------------------------------------------------------
'Wenn markiert wurde, dass die NCTS Daten ergänzt werden sollten
'----------------------------------------------------------------------
' Dim testDY = True
'----------------------------------------------------------------------
'NCTS aktualisieren und nach letztem EXG-Rücklauf senden
'----------------------------------------------------------------------
If EXG.exg_AutoFill_DyId IsNot Nothing Then
Dim dyId As Integer = Convert.ToInt32(EXG.exg_AutoFill_DyId)
If dyId > 0 Then
Dim DY_ANM As New cDakosy_Zollanmeldungen(dyId)
Dim NCTS_OUT = fillNCTS_WithEXG_AutoFill(EXG, "") '<<<<<-- Befüllung der NCTS-Daten mit den EXG-Daten. Danach wird geprüft, ob alle Positionen befüllt wurden.
If NCTS_OUT Is Nothing Then
Throw New Exception("NCTS-Befüllung fehlgeschlagen. EXG-ID: " & EXG.exg_Id)
End If
If cDakosyEXG.isFillNCTS_ID_ALLCompleted(dyId) Then
'Alle EXG-Rückmeldungen vollständig: NCTS ergänzen und versenden
Dim BezugsNr As String = NCTS_OUT.ncts_ObjectName
If String.IsNullOrWhiteSpace(BezugsNr) Then BezugsNr = DY_ANM.dy_BezugsNr
If String.IsNullOrWhiteSpace(BezugsNr) Then Throw New Exception("NCTS-Bezugsnummer fehlt: " & dyId)
Dim firma As String = If(String.IsNullOrWhiteSpace(EXG.exg_firma), "VERAG", EXG.exg_firma)
Dim niederlassung As String = If(String.IsNullOrWhiteSpace(EXG.exg_niederlassung), "SUB", EXG.exg_niederlassung)
Dim nctsArt As String = If(String.IsNullOrWhiteSpace(DY_ANM.dy_ART), "T2", DY_ANM.dy_ART)
'AVISO und Sendung anhand der bestehenden Zollanmeldung laden
Dim AVISO As cAviso = Nothing
Dim SENDUNG As cSendungen = Nothing
If DY_ANM.dy_AvisoId IsNot Nothing AndAlso Convert.ToInt32(DY_ANM.dy_AvisoId) > 0 Then
AVISO = cAviso.getAvisoById(DY_ANM.dy_AvisoId)
End If
If DY_ANM.dy_SendungsId IsNot Nothing AndAlso Convert.ToInt32(DY_ANM.dy_SendungsId) > 0 Then
SENDUNG = New cSendungen(Convert.ToInt32(DY_ANM.dy_SendungsId))
End If
'AVISO-Vorblendung wie bei SendNCTS übernehmen
If AVISO IsNot Nothing Then
cDakosyNCTSOut004.loaddataFromAVISO(AVISO, SENDUNG, "", BezugsNr, NCTS_OUT, firma, False)
End If
'Bestehende NCTS-Anmeldung weiterverwenden
NCTS_OUT.ncts_ObjectName = BezugsNr
NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id
NCTS_OUT.ncts_Erstellung_SB = DY_ANM.dy_Erstellung_SB
NCTS_OUT.ncts_LetzteBearbeitung = Now
NCTS_OUT.ncts_LetzteBearbeitung_SB = DY_ANM.dy_LetzteBearbeitung_SB
NCTS_OUT.ncts_firma = firma
NCTS_OUT.ncts_niederlassung = niederlassung
NCTS_OUT.ncts_Declarationtype = nctsArt
NCTS_OUT.ncts_Trans_Referenz = BezugsNr & "_" & Now.ToString("ddMMyyHHmmss")
If NCTS_OUT.ncts_HOUSE_CONSIGNMENT Is Nothing OrElse NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Count = 0 Then
Throw New Exception("Keine NCTS-House-Consignments vorhanden: " & dyId)
End If
'Identischer Speicher- und Versandweg wie bei SendNCTS
Dim result As String = cDakosyNCTSOut004.SaveAndSendNCTS(
NCTS_OUT, DY_ANM, BezugsNr, firma, True, SENDUNG, "CREATE", nctsArt)
Console.WriteLine("EXG: Automatischer NCTS-Versand: " & BezugsNr & " - " & result)
End If
End If
End If
'----------------------------------------------------------------------
'QULAIFIZIERUNG!
'----------------------------------------------------------------------
'----------------------------------------------------------------------
'Es wird bei Daten zum AUsgang und "_EXG" automaitsch die Qualifizierung aufgerufen...
Dim test = False
'----------------------------------------------------------------------
'----------------------------------------------------------------------
If False Then '--------------QUALIFIZIERUNG NOCH NCIHT SENDEN! ------------------
'----------------------------------------------------------------------
'----------------------------------------------------------------------
If readEZA_DatenZumAusgang_DataEXITDE_005.Contains("_EXG") Or test Then
Dim IOPARTNER = VWI.Transaktion.IOPartner
Dim DIVISION3 = VWI.Transaktion.IODivision3
Dim DAKOSY_SB = "ANDREAS"
Dim DY_ACTIONS As New List(Of String)
If IOPARTNER = "UNAT" Then
DAKOSY_SB = "luxbauer"
End If
Dim saveFile = ""
DY_ACTIONS.Add("CHANGE")
DY_ACTIONS.Add("SEND")
If generateInformationenZumAusgang003(EXG, readEZA_DatenZumAusgang_DataEXITDE_005, saveFile, DY_ACTIONS, IOPARTNER, DIVISION3, DAKOSY_SB) Then
If saveFile <> "" Then
If test Then
frmStartOptions.copyFile(saveFile, "\\datenarchiv\Datenarchiv\DAKOSY\ECHTSYSTEM\EXG\upl\")
Else
If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, readEZA_DatenZumAusgang_DataEXITDE_005, -1, IOPARTNER) Then
'DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03)
Return True
Else
'DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09)
Return False
End If
End If
End If
End If
End If
End If
'----------------------------------------------------------------------
FORM.addDGVEinarbeitung("AES: ExportGest.-DatenZumAusgang", STATUS.dySt_BezugsNr)
End If
'----------------------------------------------------------------------
'----------------------------------------------------------------------
End If
End If
Next
End If
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace & vbNewLine & "Datei: " & Dateiname, System.Reflection.MethodInfo.GetCurrentMethod.Name)
readEZA_DatenZumAusgang_DataEXITDE_005 = ""
End Try
End Function
Shared Function fillNCTS_WithEXG_AutoFill(EXG As cDakosyEXG, ObjectName As String) As cDakosyNCTSOut004
If EXG Is Nothing OrElse EXG.exg_AutoFill_DyId Is Nothing Then Return Nothing
Dim dyId As Integer = Convert.ToInt32(EXG.exg_AutoFill_DyId)
If dyId <= 0 Then Return Nothing
Dim NCTS_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(dyId, True)
If NCTS_OUT Is Nothing Then Throw New Exception("NCTS-Entwurf nicht gefunden. DY-ID: " & dyId)
Console.WriteLine("EXG: NCTS befüllen: " & EXG.exg_Id)
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, NCTS_OUT.ncts_ObjectName)
If Not NCTS_OUT.SAVE_ALL() Then
Throw New Exception("NCTS konnte nicht gespeichert werden. DY-ID: " & dyId)
End If
cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id)
Return NCTS_OUT
End Function
Shared Function generateInformationenZumAusgang003(EXG As cDakosyEXG, ByVal Bezugsnummer As String, ByRef saveFile As String, DY_ACTIONS As List(Of String), IOPartner As String, IODivision3 As String, DAKOSY_SB As String) As Boolean
Dim Interface_VERSION = "003"
' Dim ObjectAktion = DY_ACTION
' Dim BezugsnummerVorblendung = "AA_NCTS_DE_ZE_WO_MITTICH"
Dim XML As New DAKOSY_Worker.InformationEXITDE.InformationenZumAusgangXITyp
'Bezugsnummer = Bezugsnummer.Replace("_EXG_", "_QZ_") ' ??????????????????
If Bezugsnummer.Length > 35 Then
Bezugsnummer = Bezugsnummer.Substring(0, 35)
End If
'Transaktion:
XML.Transaktion = New DAKOSY_Worker.InformationEXITDE.TransaktionExportTyp
XML.Transaktion.IOPartner = IOPartner
XML.Transaktion.IODatumZeit = Now
XML.Transaktion.IOReferenz = Bezugsnummer & "_" & Now.ToString("ddMMyyHHmmSS")
If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM Then XML.Transaktion.IODivision3 = IODivision3
XML.Transaktion.Version = Interface_VERSION
' XML.Transaktion.IODivision3 = "DUR"
Dim XML_EG = New InformationEXITDE.EinzelInformationenZumAusgangTyp
'ObjektIdentifizierung:
XML_EG.ObjektIdentifizierung.ObjektName = Bezugsnummer
'If Bezugsnummer IsNot Nothing Then XML_EG.ObjektIdentifizierung.ObjektAliasname = Bezugsnummer
XML_EG.ObjektIdentifizierung.ObjektAktion = DY_ACTIONS
XML_EG.ObjektIdentifizierung.Bearbeiter = DAKOSY_SB
' If BezugsnummerVorblendung IsNot Nothing AndAlso BezugsnummerVorblendung <> "" Then XML_EG.ObjektIdentifizierung.BezugsnummerVorblendung = BezugsnummerVorblendung
'TransitOperation:
XML_EG.HeaderData.InformationType = "NV"
'XML_EG.HeaderData.ActiveBorderTransportMeans.DepartureDateAndTime = Now '_Nicht, sonst fehler
XML_EG.HeaderData.Finalization = 1
XML_EG.HeaderData.ModeOfTransportAtTheBorder = 3
'XML_EG.HeaderData.MRN = MRN
'If cDY.ncts_CountryOfDispatch IsNot Nothing Then XML.EinzelEingangsanzeige.TransitOperation.CustomsOfficeOfDestinationActual = cDY.ncts_CountryOfDispatch
'If SND.tblSnd_ATB_T1 IsNot Nothing Then XML.EinzelEingangsanzeige.TransitOperation.MRN = SND.tblSnd_ATB_T1
'XML.EinzelEingangsanzeige.TransitOperation.ArrivalNotificationDateAndTime = Now
'XML.EinzelEingangsanzeige.TransitOperation.IncidentFlag = "N"
XML.DeclarationData.Add(XML_EG)
Dim saveDir = Application.StartupPath & "\Dakosy_SEND\"
If Not System.IO.Directory.Exists(saveDir) Then
System.IO.Directory.CreateDirectory(saveDir)
End If
saveFile = saveDir & "DY_EXG_" & Now.ToString("yyMMdd_HHmmss_fff") & ".xml"
XML.SaveToFile(saveFile)
'-------------------------------------------
Dim STATUS As New DAKOSY_Worker.cDakosy_Statusmeldungen
STATUS.dySt_BezugsNr = Bezugsnummer
STATUS.dySt_artMitteilung = "EXG_INFO"
STATUS.dySt_dyArt = "EXG"
STATUS.dySt_status = DAKOSY_Worker.cDY_Statusliste.S_00
STATUS.dySt_ergCode = "EXG_INFO"
STATUS.dySt_ergMitteilung = "MRN:" & EXG.exg_MRN
STATUS.dySt_ergZeitpunkt = Now
STATUS.SAVE()
'-------------------------------------------
DAKOSY_Worker.cDakosyFunftions.replaceNullDateXML(saveFile)
Return True
End Function
End Class