EXG Auto Ncts

This commit is contained in:
2026-10-14 16:56:50 +02:00
parent ea85aed73d
commit d78bba81e3
9 changed files with 1138 additions and 275 deletions

View File

@@ -1,4 +1,5 @@
Imports DAKOSY_Worker
Imports VERAG_PROG_ALLGEMEIN
Public Class cWorker_AES_EXG
Public Shared Dateiname = ""
@@ -56,7 +57,8 @@ Public Class cWorker_AES_EXG
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)
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
@@ -82,13 +84,23 @@ Public Class cWorker_AES_EXG
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
EXG_ITEM.exgPos_CommodityCode = ITEM.HarmonizedSystemSubHeadingCode & ITEM.CombinedNomenclatureCode
'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
@@ -138,90 +150,76 @@ Public Class cWorker_AES_EXG
'----------------------------------------------------------------------
'Wenn markiert wurde, dass die NCTS Daten ergänzt werden sollten
'----------------------------------------------------------------------
Dim testDY = True
If testDY Or (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then
Console.WriteLine("EXG: NCTS Verarbeitung starten...")
'----------------------------------------------------------------------
'NCTS BEFÜLLEN!
'----------------------------------------------------------------------
Dim NCTS_OUT = fillNCTS_WithEXG_AutoFill(EXG, "TEEEEEEESTTT")
'----------------------------------------------------------------------
'----------------------------------------------------------------------
testDY = True
' 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)
'Prüfen ob alle EXG Daten gekommen sind --> NCTS Senden!
If testDY Or (cDakosyEXG.isFillNCTS_ID_ALLCompleted(EXG.exg_AutoFill_DyId)) Then
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
Dim DY_ANM = New cDakosy_Zollanmeldungen(EXG.exg_AutoFill_DyId)
If NCTS_OUT IsNot Nothing Then
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 cDY As New cDakosyNCTSOut(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB)
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 = EXG.exg_firma
NCTS_OUT.ncts_niederlassung = EXG.exg_niederlassung
' DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_004(NCTS_OUT, Me, DY_ANM, Me.FIRMA_DY)
NCTS_OUT.ncts_firma = firma
NCTS_OUT.ncts_niederlassung = niederlassung
NCTS_OUT.ncts_Declarationtype = nctsArt
NCTS_OUT.ncts_Trans_Referenz = BezugsNr & "_" & Now.ToString("ddMMyyHHmmss")
'VON HIER löschnen ohne test
If testDY OrElse NCTS_OUT.SAVE_ALL() Then
If If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Nur speichern wenn bei test exg_AutoFill_DyId befüllt ist
NCTS_OUT.SAVE_ALL()
End If
Dim saveFile = ""
If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then
If saveFile <> "" Then
frmStartOptions.copyFile(saveFile, "\\datenarchiv\Datenarchiv\DAKOSY\ECHTSYSTEM\EXG\upl\NCTS\")
End If
End If
Else
'BIS HIER löschnen ohne test
If NCTS_OUT.SAVE_ALL() Then
Dim saveFile = ""
If cDakosyNCTSOut004.generateVersandanmeldungNCTSDE_004(NCTS_OUT, saveFile, "CREATE", Application.StartupPath, "NCTS") Then
If saveFile <> "" Then
If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, NCTS_OUT.ncts_ObjectName, DY_ANM.dy_Id, NCTS_OUT.ncts_firma) Then
DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_03)
'If SENDUNG IsNot Nothing Then SENDUNG.SET_VGMA() ' MA Vorgeschrieben in Sendung setzen.
Else
DAKOSY_Worker.cDakosy_Statusmeldungen.InsertStatusMeldung(DY_ANM, DAKOSY_Worker.cDY_Statusliste.S_09)
MsgBox("Sendefehler!")
End If
End If
End If
End If
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
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)
If Not testDY Or If(EXG.exg_AutoFill_DyId, -1) > 0 Then 'Kann ganz weg kenn kein test
DY_ANM.UPDATE_DATA()
'Beim Senden soll die Sendung überhnommen + tblSnd_VG_MA gesetzt werden --> damit gleich gesehen wird, dass der Akt in Bearbeitung ist.
DY_ANM.UPDATE_AVISO_SND(DY_ANM.dy_SendungsId)
Console.WriteLine("EXG: Automatischer NCTS-Versand: " & BezugsNr & " - " & result)
End If
End If
End If
'----------------------------------------------------------------------
'QULAIFIZIERUNG!
'----------------------------------------------------------------------
@@ -298,24 +296,24 @@ Public Class cWorker_AES_EXG
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
If (EXG.exg_AutoFill_DyId IsNot Nothing AndAlso EXG.exg_AutoFill_DyId >= 0) Then
Dim NCTS_OUT = DAKOSY_Worker.cDakosyNCTSOut004.LOADByAnmIDFull(EXG.exg_AutoFill_DyId, True)
Dim dyId As Integer = Convert.ToInt32(EXG.exg_AutoFill_DyId)
If dyId <= 0 Then Return Nothing
If NCTS_OUT Is Nothing Then
NCTS_OUT = New DAKOSY_Worker.cDakosyNCTSOut004
NCTS_OUT.ncts_ObjectName = ObjectName
End If
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...")
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, ObjectName)
Console.WriteLine("EXG: NCTS updaten...")
cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id) 'Eintrag, dass AutoFill durchgelaufen ist
Console.WriteLine("EXG: NCTS befüllen: " & EXG.exg_Id)
DAKOSY_Worker.cDakosyNCTSOut004.fillNCTS_WithEXG(NCTS_OUT, EXG, NCTS_OUT.ncts_ObjectName)
Return NCTS_OUT
If Not NCTS_OUT.SAVE_ALL() Then
Throw New Exception("NCTS konnte nicht gespeichert werden. DY-ID: " & dyId)
End If
Return Nothing
cDakosyEXG.UPDATE_FillNCTS_ID_Completed(EXG.exg_Id)
Return NCTS_OUT
End Function