Files
SDL/SDL/ZOLLSYSTEM/DAKOSY/ATLAS/EXGestellung/usrCntlATLAS_EXGestellung.vb
2026-04-27 08:13:47 +02:00

496 lines
21 KiB
VB.net

Imports com.sun.tools.doclets.internal.toolkit.util
Imports DAKOSY_Worker
Public Class usrCntlATLAS_EXGestellung
Property ALLG As usrCntlATLAS_EXGestellung
'Property FilialeNr As Integer
' Property AbfertigungsNr As Integer
' Property BezugsNr As String = ""
' Property AvisoId As Integer
'Property SENDUNGS_ID As Integer
Property AVISO As VERAG_PROG_ALLGEMEIN.cAviso
Property SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen
Dim sentToDakosy = False
Property FIRMA_DY = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
Sub New(AVISO As VERAG_PROG_ALLGEMEIN.cAviso, SENDUNG As VERAG_PROG_ALLGEMEIN.cSendungen, FIRMA_DY As String)
' Dieser Aufruf ist für den Designer erforderlich.
InitializeComponent()
Me.AVISO = AVISO
Me.SENDUNG = SENDUNG
Me.FIRMA_DY = FIRMA_DY
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
End Sub
Private Sub usrCntlATLAS_Load(sender As Object, e As EventArgs) Handles Me.Load
cboDakosyAction.Items.Clear()
cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Neuen Datensatz erstellen", DY_ObjektAktion.OBJ_CREATE))
cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Vohr. DS ändern", DY_ObjektAktion.OBJ_CHANGE))
cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Vorh. DS stornieren", DY_ObjektAktion.OBJ_CANCEL))
cboDakosyAction.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Datensatz an ZOLL senden", DY_ObjektAktion.OBJ_SEND))
cboDakosyAction.changeItem(DY_ObjektAktion.OBJ_SEND)
sbAbgangZollstelle.initSearchBox(Me.FindForm, "[Code] ,[Code] as Nr,Description as Dienststelle,left(Code,2) as Land,[Description] +' (' +left(Code,2)+')' as display FROM [tbl_DY_ZollDE_C0141_Zollstellen]", {" [Code]", "Description"}, " (StartDate is null OR StartDate< GETDATE()) AND (EndDate is null OR EndDate> GETDATE()) ", " left(Code,2),[Description]", "Code", "display", "FMZOLL", , 400, 200, {"display", "Code"})
cbxNCTS.Checked = False
If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "ATILLA" Then
Button2.Visible = True
Label5.Visible = True
End If
End Sub
Sub initStammref()
Select Case FIRMA_DY
Case "VERAG"
txtDyMandant.Text = "VERG"
txtDyNiederlassung.Text = VERAG_PROG_ALLGEMEIN.cAllgemein.NIEDERLASSUNG
Case "ATILLA"
txtDyMandant.Text = "ATIL"
txtDyNiederlassung.Text = "SUW"
Case "UNISPED"
txtDyMandant.Text = "UNAT"
txtDyNiederlassung.Text = "SUB"
Case "IMEX"
txtDyMandant.Text = "IMEX"
txtDyNiederlassung.Text = "IME"
Case "AMBAR"
txtDyMandant.Text = "ATIL"
txtDyNiederlassung.Text = "AMBWO"
End Select
Dim MandantWhere As String = "(dySr_dy_Mandant = '" & txtDyMandant.Text & "' " &
"AND dySr_dy_Niederlassung IN ('','" & txtDyNiederlassung.Text & "'))"
'Select Case FIRMA_DY
' Case "ATILLA"
' MandantWhere = "((dySr_dy_Mandant = 'ATIL' AND dySr_dy_Niederlassung = 'SUW') " &
' "OR (dySr_dy_Mandant = 'UNAT' AND dySr_dy_Niederlassung = 'SUB'))"
' Case Else
' MandantWhere = "(dySr_dy_Mandant = '" & txtDyMandant.Text & "' " &
' "AND dySr_dy_Niederlassung IN ('','" & txtDyNiederlassung.Text & "'))"
'End Select
' Dim BezugsNr = ("ID" & AVISO.AvisoID & "_" & SENDUNG.FilialenNr & "-" & SENDUNG.AbfertigungsNr & "_" & If(AVISO.Auftraggeber.Length > 8, AVISO.Auftraggeber.ToString.Substring(0, 5), AVISO.Auftraggeber)).Trim
Dim BezugsNr = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr & "_EXG"
lblBezugsnummer.Text = BezugsNr
cboStammreferenz.fillWithSQL("SELECT [dySr_Stammreferenz],[dySr_Bezeichnung] FROM [tblDakosy_Stammreferenzen] WHERE dySr_Land='DE' AND dySr_Verfahren='EXG' and " & MandantWhere & " and dySr_visible=1", False, "FMZOLL", True)
' MsgBox("SELECT [dySr_Stammreferenz],[dySr_Bezeichnung] FROM [tblDakosy_Stammreferenzen] WHERE dySr_Land='DE' AND dySr_Verfahren='AA' and dySr_dy_Mandant='" & txtDyMandant.Text & "' and dySr_dy_Niederlassung IN ('','" & txtDyNiederlassung.Text & "') and dySr_visible=1")
cboStammreferenz.changeItem("")
If cboStammreferenz.Items.Count = 2 Then
cboStammreferenz.SelectedIndex = 1
End If
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Cursor = Cursors.WaitCursor
Dim err = False
' If cboStammreferenz._value = "" Then MsgBox("Stammreferenz auswählen!") : Me.Cursor = Cursors.Default : Exit Sub
If sbAbgangZollstelle._value = "" Then MsgBox("Zollstelle auswählen!") : Me.Cursor = Cursors.Default : Exit Sub
If Not sbAbgangZollstelle._value.StartsWith("DE") Then MsgBox("Gültige Zollstelle (in DE) auswählen!") : Me.Cursor = Cursors.Default : Exit Sub
If rtbMRN.Text.Trim = "" Then MsgBox("MRN auswählen!") : Me.Cursor = Cursors.Default : Exit Sub
Dim exg_list = New List(Of Integer)
Dim dblcheck = ""
'MRN Prüfung:
For Each l In rtbMRN.Lines
If l.Trim <> "" Then
If l.Trim.Length >= 18 And dblcheck.Contains(l.Trim) Then
MsgBox("Doppelte MRN !: " & l)
Me.Cursor = Cursors.Default
Exit Sub
End If
If Not IsValidMRN(l.Trim) Then
MsgBox("Ungültige MRN (Format): " & l)
Me.Cursor = Cursors.Default
Exit Sub
End If
dblcheck &= l.Trim
End If
Next
If sentToDakosy OrElse vbYes = MsgBox("Soll(en) die Ausfuhr-Gestellung(en) abgeschickt werden?", vbYesNoCancel) Then
Dim cnt = 1
'Senden:
For Each l In rtbMRN.Lines
If l.Trim <> "" Then
If Not sendEXP_MRN(l.Trim.ToUpper, sbAbgangZollstelle._value, cnt, exg_list) Then
MsgBox("Sendefehler bei " & l)
err = True
End If
cnt += 1
End If
Next
If Not err Then
If cbxNCTS.Checked Then
'Es wird gleich eine NCTS Nachricht erstellt, die BEfüllung erfolge nach Verarbeitung der EXG -> bei der letzten wird der NCTS Datensatz gesendet
Dim NCTS_OUT = usrCntlATLAS_NCTS004.genNCTSfromStammref(Me, FIRMA_DY, AVISO, SENDUNG, "")
NCTS_OUT.ncts_HOUSE_CONSIGNMENT.Clear()
NCTS_OUT.DELETE_HouseConsignment()
If NCTS_OUT IsNot Nothing AndAlso NCTS_OUT.ncts_Id > 0 Then
MsgBox("Eine neue Versandanmeldung mit der BezugsNummer '" & NCTS_OUT.ncts_ObjectName & "' wurde erstellt. Befüllung wird bei Gestellvorgang automatisch vorgenommen.")
lblBezugsnummer.Text = NCTS_OUT.ncts_ObjectName
For Each exgId In exg_list
MsgBox(NCTS_OUT.ncts_dyaAnmID)
cDakosyEXG.UPDATE_FillNCTS_ID(exgId, NCTS_OUT.ncts_dyaAnmID)
Next
End If
'Dim BezugsNr = ""
'Dim NCTS_OUT As New DAKOSY_Worker.cDakosyNCTSOut004
'Dim f As New frmDakosyStammreferenz("DE", "NCTS", False,,, FIRMA_DY)
'Dim Stammreferenz = Nothing
'f.selectForEXG = True
'If f.ShowDialog(Me.FindForm) Then
' Stammreferenz = f.STAMMREF
' sentToDakosy = f.sentToDakosy
'End If
'Try
' BezugsNr = usrCntlATLAS_NCTS004.getBezugsnr(FIRMA_DY, SENDUNG, BezugsNr, "")
' lblBezugsnummer.Text = BezugsNr
' MsgBox(BezugsNr)
'Catch ex As Exception
' MsgBox(ex.Message & ex.StackTrace)
'End Try
'ncts_OUT = cDakosyNCTSOut004.LOADByBezugsNr(BezugsNr, True)
'If True Then 'NCTS_OUT Is Nothing Then
' Dim cDy_ART = "T2"
' Select Case (SENDUNG.tblSnd_Abfertigungsart_ID)
' Case 5 : cDy_ART = "T1"
' Case Else : cDy_ART = "T2"
' End Select
' Dim DY_ANM As New cDakosy_Zollanmeldungen
' If DY_ANM Is Nothing Then
' DY_ANM = New cDakosy_Zollanmeldungen(NCTS_OUT.ncts_dyaAnmID)
' End If
' DY_ANM.dy_ART = cDy_ART 'cDy_ART
' DY_ANM.dy_BezugsNr = BezugsNr
' DY_ANM.dy_AvisoId = If(AVISO Is Nothing, Nothing, AVISO.AvisoID)
' DY_ANM.dy_SendungsId = If(SENDUNG Is Nothing, Nothing, SENDUNG.tblSnd_SendungID)
' 'Status?
' If DY_ANM.SAVE() Then 'Speichern, ID wird erzeugt
' 'Falls zur BezugsNr schon ein Eintrag in der DB vorhanden ist
' NCTS_OUT = cDakosyNCTSOut004.LOADByAnmIDFull(f.STAMMREF_DYID, True) ' DyID --> Falls bei der Stammreferenz eine Vorlage hinterlegt ist!
' If NCTS_OUT Is Nothing Then
' NCTS_OUT = New cDakosyNCTSOut004
' End If
' NCTS_OUT.ncts_Id = -1
' NCTS_OUT.ncts_dyaAnmID = DY_ANM.dy_Id
' 'If NCTS_OUT IsNot Nothing Then
' ' 'Stmmreferenz - Werte zurücksetzen, damit nicht falsch übergeben
' ' NCTS_OUT.ncts_dyaAnmID = -1
' ' NCTS_OUT.ncts_Id = -1
' 'Else
' ' NCTS_OUT = New cDakosyNCTSOut004
' 'End If
' usrCntlATLAS_NCTS004.loaddataFromAVISO(AVISO, SENDUNG, cDy_ART, BezugsNr, NCTS_OUT)
' 'cboStammreferenz.changeItem(Stammreferenz)
' If NCTS_OUT.SAVE() Then
' MsgBox("Eine neue Versandanmeldung mit der BezugsNummer '" & BezugsNr & "' wurde erstellt. Befüllung wird bei Gestellvorgang automatisch vorgenommen.")
' For Each exgId In exg_list
' MsgBox(NCTS_OUT.ncts_dyaAnmID)
' cDakosyEXG.UPDATE_FillNCTS_ID(exgId, NCTS_OUT.ncts_dyaAnmID)
' Next
' End If
' End If
'End If
''ncts_OUT
End If
End If
Me.FindForm.Close()
End If
Me.Cursor = Cursors.Default
End Sub
Function sendEXP_MRN(MRN As String, Zollstelle As String, zeile As String, ByRef exg_list As List(Of Integer)) As Boolean
Me.Refresh()
' Dim cDyAnm As New cDakosy_Zollanmeldungen(cDy_ART, BezugsNr, AVISO.AvisoID, SENDUNG.tblSnd_SendungID)
'loadDYZollanmeldungen()
Dim dy_Id = -1
If True Then
''Dim cDY As New cDakosyNCTSOut(cDyAnm.dy_Id, cDyAnm.dy_Erstellung_SB)
'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 = Me.FIRMA_DY
' DAKOSY_Interface_SEND.loadInClass_VersandanmeldungNCTSDE_003(ncts_OUT, Me, DY_ANM, Me.FIRMA_DY)
Dim EXG As New DAKOSY_Worker.cDakosyEXG
EXG.exg_MRN = MRN
EXG.exg_CustomsOfficeOfExitForTransitDeclared = Zollstelle
' dim FilialenNr
Dim zusatz = ""
If TextBox1.Text <> "" Then zusatz = "/" & TextBox1.Text
EXG.exg_ObjectName = SENDUNG.FilialenNr & "/" & SENDUNG.AbfertigungsNr & "_EXG" & zeile & "" & zusatz '---> >>> MRN KÜRZEN!!!!
'EXG.exg_ObjectName = AVISO.AvisoID & "_EXP_" & EXG.exg_MRN.ToString().Substring(0, 4) & EXG.exg_MRN.ToString.Substring(14) & zusatz '---> >>> MRN KÜRZEN!!!!
'EXG.exg_ObjectName = AVISO.AvisoID & "_EXP_" & EXG.exg_MRN
Dim FIRMA_DY = VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
FIRMA_DY = DAKOSY_Worker.cDakosyFunftions.getFirma_DY(SENDUNG.FilialenNr, Me.FindForm, "EXG")
Dim saveFile = ""
If EXG.SAVE_ALL Then
exg_list.Add(EXG.exg_Id)
If generatePresentationEXITDE_003(EXG, AVISO, SENDUNG, EXG.exg_ObjectName, saveFile, cboDakosyAction._value, FIRMA_DY, cboStammreferenz._value) Then
If saveFile <> "" Then
If cDakosyFunftions.send_Data_To_Dakosy_FTP(saveFile, lblBezugsnummer.Text, dy_Id, FIRMA_DY) 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.
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
' 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)
Return False
End Function
Shared Function generatePresentationEXITDE_003(EXG As DAKOSY_Worker.cDakosyEXG, AVISO As VERAG_PROG_ALLGEMEIN.cAviso, SND As VERAG_PROG_ALLGEMEIN.cSendungen, ByVal Bezugsnummer As String, ByRef saveFile As String, DY_ACTION As String, FIRMA_DY As String, Optional BezugsnummerVorblendung 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.PresentationEXITDE.GestellungXPTyp
If Bezugsnummer.Length > 22 Then
Bezugsnummer = Bezugsnummer.Substring(0, 22)
End If
'Transaktion:
XML.Transaktion = New PresentationEXITDE.TransaktionExportTyp
XML.Transaktion.IOPartner = SDL.DAKOSY_Interface_SEND.getIOPartner(FIRMA_DY) 'If(VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM, "VERA", "VERG")
XML.Transaktion.IODatumZeit = Now
XML.Transaktion.IOReferenz = SND.FilialenNr & "-" & SND.AbfertigungsNr & "_" & Now.ToString("ddMMyyHHmmSS")
If Not VERAG_PROG_ALLGEMEIN.cAllgemein.TESTSYSTEM And XML.Transaktion.IOPartner <> "UNAT" Then
XML.Transaktion.IODivision3 = SDL.DAKOSY_Interface_SEND.getDivision(FIRMA_DY) '"SUW"
End If
XML.Transaktion.Version = Interface_VERSION
Dim XML_EG = New PresentationEXITDE.EinzelGestellungTyp
'ObjektIdentifizierung:
XML_EG.ObjektIdentifizierung.ObjektName = Bezugsnummer
'If Bezugsnummer IsNot Nothing Then XML_EG.ObjektIdentifizierung.ObjektAliasname = Bezugsnummer
Dim ObjektAktionLst As New List(Of String)
If ObjectAktion = "SEND" Then
ObjektAktionLst.Add("CREATE")
End If
ObjektAktionLst.Add(ObjectAktion)
XML_EG.ObjektIdentifizierung.ObjektAktion = ObjektAktionLst
If If(VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_DAKOSY_SB, "") <> "" Then XML_EG.ObjektIdentifizierung.Bearbeiter = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_DAKOSY_SB
If BezugsnummerVorblendung IsNot Nothing AndAlso BezugsnummerVorblendung <> "" Then XML_EG.ObjektIdentifizierung.BezugsnummerVorblendung = BezugsnummerVorblendung
'TransitOperation:
XML_EG.HeaderData = New PresentationEXITDE.KopfDatenGestellungTyp
XML_EG.HeaderData.MRN = EXG.exg_MRN
XML_EG.HeaderData.ArrivalNotificationDateAndTime = Now
XML_EG.HeaderData.ExitCarrier.ContactPerson.Name = VERAG_PROG_ALLGEMEIN.cAllgemein.USRNAME
If If(VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_telefonnr, "") <> "" Then
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = VERAG_PROG_ALLGEMEIN.cAllgemein.MITARBEITER.mit_telefonnr
Else
Select Case VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA
Case "UNISPED"
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = "0043771126770"
Case "AMBAR"
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = "004986519962492"
Case "IMEX"
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = "00437711 31630"
Case "ATILLA"
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = "0043771128450"
Case Else
XML_EG.HeaderData.ExitCarrier.ContactPerson.PhoneNumber = "004377112777200"
End Select
End If
XML_EG.HeaderData.CustomsOfficeOfExitActual = EXG.exg_CustomsOfficeOfExitForTransitDeclared
'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 = System.Reflection.Assembly.GetExecutingAssembly().Location & "\Dakosy_SEND\"
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)
'SDL.DAKOSY_Interface_SEND.replaceNullDateXML(saveFile)
Return True
End Function
Public Function IsValidMRN(mrn As String) As Boolean
'' Überprüfen, ob die Länge genau 18 Zeichen beträgt
'If String.IsNullOrEmpty(mrn) OrElse mrn.Length <> 18 Then
' Return False
'End If
'' Überprüfen, ob die ersten zwei Zeichen Buchstaben sind (Ländercode)
'If Not Char.IsLetter(mrn(0)) OrElse Not Char.IsLetter(mrn(1)) Then
' Return False
'End If
'' Überprüfen, ob die nächsten zwei Zeichen Ziffern sind (Jahreszahl)
'If Not Char.IsDigit(mrn(2)) OrElse Not Char.IsDigit(mrn(3)) Then
' Return False
'End If
'' Überprüfen, ob die nächsten 12 Zeichen alphanumerisch sind
'For i As Integer = 4 To 15
' If Not Char.IsLetterOrDigit(mrn(i)) Then
' Return False
' End If
'Next
'' Überprüfen, ob die letzten zwei Zeichen Prüfziffern sind (optional, falls komplexere Prüfung erforderlich)
'For i As Integer = 16 To 17
' If Not Char.IsDigit(mrn(i)) Then
' Return False
' End If
'Next
'' Alle Prüfungen bestanden
'Return True
' Überprüfen, ob die Länge genau 18 Zeichen beträgt
If String.IsNullOrEmpty(mrn) OrElse mrn.Length <> 18 Then
Return False
End If
' Überprüfen, ob die ersten zwei Zeichen Ziffern sind (Jahreszahl)
If Not Char.IsDigit(mrn(0)) OrElse Not Char.IsDigit(mrn(1)) Then
Return False
End If
' Überprüfen, ob die nächsten zwei Zeichen Buchstaben sind (Ländercode)
If Not Char.IsLetter(mrn(2)) OrElse Not Char.IsLetter(mrn(3)) Then
Return False
End If
'' Überprüfen, ob die nächsten 12 Zeichen alphanumerisch sind
'For i As Integer = 4 To 15
' If Not Char.IsLetterOrDigit(mrn(i)) Then
' Return False
' End If
'Next
'' Überprüfen, ob die letzten zwei Zeichen Ziffern sind (Prüfziffern)
'For i As Integer = 16 To 17
' If Not Char.IsDigit(mrn(i)) Then
' Return False
' End If
'Next
Return True
End Function
Private Sub cbxNCTS_CheckedChanged(sender As Object, e As EventArgs) Handles cbxNCTS.CheckedChanged
MyPanel1.Enabled = cbxNCTS.Checked
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
FIRMA_DY = Button2.Text
initStammref()
If Button2.Text = "UNISPED" Then
Button2.Text = "ATILLA"
Else
Button2.Text = "UNISPED"
End If
End Sub
End Class