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 Using fs As New System.IO.FileStream(d, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read) VWI = DAKOSY_Worker.DataEXITDE.DatenZumAusgangXDTyp.Deserialize(fs) End Using 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 als 8-stelligen String zusammensetzen Dim hsCode As String = If(ITEM.HarmonizedSystemSubHeadingCode, "").Trim() Dim cnCode As String = If(ITEM.CombinedNomenclatureCode, "").Trim() If cnCode <> "" Then cnCode = cnCode.PadLeft(2, "0"c) EXG_ITEM.exgPos_CommodityCode = hsCode & cnCode 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