Merge branch 'ADMIN' of https://git.it.verag.ag/edv/ADMIN into ADMIN

This commit is contained in:
2026-10-15 17:04:49 +02:00
8 changed files with 1136 additions and 273 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

View File

@@ -946,7 +946,13 @@ Public Class frmDYNachrichtenVerarbeitung
End If
End Sub
Shared Sub setFirmaNL(iopartner As String, division As String, ByRef firma As String, ByRef nl As String)
Shared Sub setFirmaNL(iopartner As String, division As String, ByRef firma As String, ByRef nl As String, BezugsNr As String)
If iopartner = "UNAT" Then
firma = "UNISPED"
nl = "SUB"
End If
If division Is Nothing Then Exit Sub
If division <> "" Then
Select Case division
@@ -979,15 +985,40 @@ Public Class frmDYNachrichtenVerarbeitung
nl = "AMBAR"
Case "IME"
firma = "IMEX"
nl = "IMX"
nl = "SUB"
Case "UNAT", "ATSPED"
firma = "UNISPED"
nl = "ATSP"
nl = "SUB"
End Select
End If
If String.IsNullOrWhiteSpace(firma) OrElse String.IsNullOrWhiteSpace(nl) Then
If Not String.IsNullOrWhiteSpace(BezugsNr) AndAlso BezugsNr.Length >= 4 Then
Dim neueFirma As String = ""
Dim neueNL As String = ""
Select Case BezugsNr.Substring(0, 4)
Case "5501" : neueFirma = "IMEX" : neueNL = "SUB"
Case "5701" : neueFirma = "AMBAR" : neueNL = "SBG"
Case "4801", "4802" : neueFirma = "ATILLA" : neueNL = "SUB"
Case "5801" : neueFirma = "FRONTOFFICE" : neueNL = "SUB"
Case "5802" : neueFirma = "FRONTOFFICE" : neueNL = "KLIPP"
Case "5003" : neueFirma = "VERAG" : neueNL = "SBG"
Case "5103" : neueFirma = "VERAG" : neueNL = "WAI"
Case "5303" : neueFirma = "VERAG" : neueNL = "NKD"
Case "4803", "4805", "4811", "7001" : neueFirma = "VERAG" : neueNL = "SUB"
Case "5601" : neueFirma = "UNISPED" : neueNL = "SUB"
End Select
If String.IsNullOrWhiteSpace(firma) Then firma = neueFirma
If String.IsNullOrWhiteSpace(nl) Then nl = neueNL
End If
End If
End Sub
@@ -1004,7 +1035,7 @@ Public Class frmDYNachrichtenVerarbeitung
Function getVerahrensartFromBezugsNr(bezugsNr) As String
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_NCTSOut004 WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS"
If SQL.getValueTxtBySql("Select TOP 1 COUNT(*) FROM tblDakosy_NCTSOut004 WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS"
If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_NCTSOut WHERE ncts_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "NCTS"
If SQL.getValueTxtBySql("SELECT TOP 1 COUNT(*) FROM tblDakosy_EZA WHERE eza_ObjectName='" & bezugsNr & "'", "FMZOLL") > 0 Then Return "EZA"
Return ""
@@ -7214,6 +7245,7 @@ Public Class frmDYNachrichtenVerarbeitung
Public Shared Sub tryGetFirmaNiederlassung(ByRef firma As String, ByRef niederlassung As String, Mail As String, BezugsNr As String)
If Mail.Contains("@imex") Then
firma = "IMEX"
niederlassung = "IMEX"