Hauptfenster SND;

This commit is contained in:
2026-10-19 14:40:03 +02:00
parent fc591a11a4
commit 71a26ee1f7
11 changed files with 1848 additions and 475 deletions

View File

@@ -0,0 +1,291 @@
Imports System.Data
Imports System.Windows.Forms
Imports VERAG_PROG_ALLGEMEIN
'Zollverfahren & Anträge – Suche auf Sendungsebene, unabhängig von AvisoID.
Public Class usrCntlHauptfenster_Suche_Zollvorgaenge
Public Event CaseOpenRequested(sendungId As Integer, avisoId As Integer)
Public Event CaseNewRequested()
Public aktiv As Boolean = False
Public PARENT_FRMHAUPTFENSTER As frmHauptfensterNew
Private ReadOnly VERAGSQL As New VERAG_PROG_ALLGEMEIN.SQL
Private _loading As Boolean = False
Private _initialized As Boolean = False
Private Class ComboItem
Public Property Text As String
Public Property Value As String
Public Sub New(t As String, v As String)
Text = t : Value = v
End Sub
Public Overrides Function ToString() As String
Return Text
End Function
End Class
Private Sub AddItem(cbo As ComboBox, label As String, value As String)
cbo.Items.Add(New ComboItem(label, value))
End Sub
Private Function Selected(cbo As ComboBox) As String
Dim item = TryCast(cbo.SelectedItem, ComboItem)
Return If(item Is Nothing, "", item.Value)
End Function
Private Sub usrCntlHauptfenster_Suche_Zollvorgaenge_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If _initialized Then Exit Sub
_initialized = True
_loading = True
Try
cboTyp.Items.Clear()
AddItem(cboTyp, "Alle Verfahren", "")
AddItem(cboTyp, "Einspruch / Beschwerde", "1")
AddItem(cboTyp, "NCTS-Nachforschung", "2")
AddItem(cboTyp, "NCTS-Unstimmigkeit", "3")
AddItem(cboTyp, "Zollamtliche Anfrage", "4")
AddItem(cboTyp, "Berichtigung / Nachbesserung", "5")
AddItem(cboTyp, "Änderungsantrag", "6")
AddItem(cboTyp, "Erstattung / Erlass", "7")
AddItem(cboTyp, "Abgabenbescheid", "8")
AddItem(cboTyp, "Mahn-/Vollstreckungsverfahren", "9")
AddItem(cboTyp, "Sonstiges", "10")
cboTyp.SelectedIndex = 0
cboStatus.Items.Clear()
AddItem(cboStatus, "Alle Status", "")
AddItem(cboStatus, "Neu", "0")
AddItem(cboStatus, "In Bearbeitung", "1")
AddItem(cboStatus, "Unterlagen ausständig", "2")
AddItem(cboStatus, "Rückmeldung Zoll ausständig", "3")
AddItem(cboStatus, "Entscheidung eingegangen", "4")
AddItem(cboStatus, "Erledigt", "5")
AddItem(cboStatus, "Geschlossen", "6")
cboStatus.SelectedIndex = 0
cboLand.Items.Clear()
AddItem(cboLand, "Alle Länder", "")
For Each land In {"AT", "DE", "NL", "IT", "FR", "UK", "TR"}
AddItem(cboLand, land, land)
Next
cboLand.SelectedIndex = 0
cboTeam.Items.Clear()
AddItem(cboTeam, "Alle Teams", "")
Dim dt = VERAGSQL.loadDgvBySql("SELECT team_id, team_bezeichnung FROM tblTeams WHERE team_firma='" & cAllgemein.FIRMA.Replace("'", "''") & "' ORDER BY team_bezeichnung", "ADMIN")
If dt IsNot Nothing Then
For Each r As DataRow In dt.Rows
AddItem(cboTeam, Convert.ToString(r("team_bezeichnung")), Convert.ToString(r("team_id")))
Next
End If
cboTeam.SelectedIndex = 0
dtFristVon.Checked = False
dtFristBis.Checked = False
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
Finally
_loading = False
End Try
RESET()
End Sub
Public Sub RESET()
If Not _initialized Then Exit Sub
_loading = True
Try
txtSuche.Clear() : txtMRN.Clear() : txtGeschaeftszeichen.Clear()
txtZollamt.Clear() : txtKunde.Clear() : txtSendungID.Clear()
cboTyp.SelectedIndex = 0 : cboStatus.SelectedIndex = 0
cboLand.SelectedIndex = 0 : cboTeam.SelectedIndex = 0
dtFristVon.Checked = False : dtFristBis.Checked = False
optOffen.Checked = True
chkMeine.Checked = True
Finally
_loading = False
End Try
Aviso_anzeigen("")
End Sub
Private Function Wildcard(value As String) As String
Return value.Trim().Replace("*", "%") & "%"
End Function
Public Sub Aviso_anzeigen(Optional hSort As String = "", Optional showDetails As Boolean = True)
If Not _initialized OrElse _loading Then Exit Sub
Try
Dim hSQL As String =
"SELECT TOP (1000) s.tblSnd_SendungID, s.tblSnd_AvisoID AS AvisoID, " &
"scc.scc_Type AS VerfahrenNr, " &
"CASE scc.scc_Type WHEN 1 THEN N'Einspruch/Beschwerde' WHEN 2 THEN N'NCTS-Nachforschung' " &
"WHEN 3 THEN N'NCTS-Unstimmigkeit' WHEN 4 THEN N'Zollamtliche Anfrage' " &
"WHEN 5 THEN N'Berichtigung' WHEN 6 THEN N'Änderungsantrag' " &
"WHEN 7 THEN N'Erstattung/Erlass' WHEN 8 THEN N'Abgabenbescheid' " &
"WHEN 9 THEN N'Mahnverfahren' ELSE N'Sonstiges' END AS Verfahren, " &
"scc.scc_Subject AS Betreff, scc.scc_CustomsOffice AS Zollamt, " &
"scc.scc_CustomsReference AS Geschaeftszeichen, scc.scc_ReferenceMRN AS MRN, " &
"scc.scc_ReceivedDate AS Eingang, scc.scc_Deadline AS Frist, " &
"scc.scc_ReminderDate AS Wiedervorlage, scc.scc_Status AS StatusNr, " &
"CASE scc.scc_Status WHEN 0 THEN N'Neu' WHEN 1 THEN N'In Bearbeitung' " &
"WHEN 2 THEN N'Unterlagen ausständig' WHEN 3 THEN N'Zoll ausständig' " &
"WHEN 4 THEN N'Entscheidung' WHEN 5 THEN N'Erledigt' " &
"WHEN 6 THEN N'Geschlossen' ELSE N'Unbekannt' END AS Fachstatus, " &
"s.tblSnd_Zollsystem_Land AS Land, s.tblSnd_Auftraggeber AS Auftraggeber, " &
"s.tblSnd_TeamId AS TeamId, s.tblSnd_SachbearbeiterId AS SachbearbeiterId, " &
"s.LetzterMitarbeiter AS LetzterMitarbeiter, scc.scc_Amount AS Betrag, scc.scc_Currency AS Waehrung " &
"FROM dbo.tblSendungCustomsCases scc " &
"INNER JOIN dbo.tblSendungen s ON s.tblSnd_SendungID=scc.scc_SendungID " &
"LEFT JOIN dbo.Aviso a ON a.AvisoID=s.tblSnd_AvisoID " &
"WHERE (s.tblSnd_Firma=@firma OR s.tblSnd_Cluster=@cluster OR s.LetzterMitarbeiterId=@maId) "
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) From {
New VERAG_PROG_ALLGEMEIN.SQLVariable("firma", cAllgemein.FIRMA),
New VERAG_PROG_ALLGEMEIN.SQLVariable("cluster", cAllgemein.CLUSTER),
New VERAG_PROG_ALLGEMEIN.SQLVariable("maId", cAllgemein.USRID)
}
If chkMeine.Checked Then
hSQL &= " AND (s.tblSnd_SachbearbeiterId=@maId OR s.LetzterMitarbeiterId=@maId) "
End If
If Selected(cboTyp) <> "" Then
hSQL &= " AND scc.scc_Type=@type "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("type", CShort(Selected(cboTyp))))
End If
If Selected(cboStatus) <> "" Then
hSQL &= " AND scc.scc_Status=@status "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("status", CShort(Selected(cboStatus))))
End If
If Selected(cboLand) <> "" Then
hSQL &= " AND s.tblSnd_Zollsystem_Land=@land "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("land", Selected(cboLand)))
End If
If Selected(cboTeam) <> "" Then
hSQL &= " AND s.tblSnd_TeamId=@team "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("team", CInt(Selected(cboTeam))))
End If
If txtSuche.Text.Trim() <> "" Then
hSQL &= " AND (scc.scc_Subject LIKE @search OR s.tblSnd_Anmerkung LIKE @search) "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("search", Wildcard(txtSuche.Text)))
End If
If txtMRN.Text.Trim() <> "" Then
hSQL &= " AND scc.scc_ReferenceMRN LIKE @mrn "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("mrn", Wildcard(txtMRN.Text)))
End If
If txtGeschaeftszeichen.Text.Trim() <> "" Then
hSQL &= " AND scc.scc_CustomsReference LIKE @reference "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("reference", Wildcard(txtGeschaeftszeichen.Text)))
End If
If txtZollamt.Text.Trim() <> "" Then
hSQL &= " AND scc.scc_CustomsOffice LIKE @office "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("office", Wildcard(txtZollamt.Text)))
End If
If txtKunde.Text.Trim() <> "" Then
hSQL &= " AND s.tblSnd_Auftraggeber LIKE @kunde "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("kunde", Wildcard(txtKunde.Text)))
End If
If txtSendungID.Text.Trim() <> "" Then
Dim id As Integer
If Not Integer.TryParse(txtSendungID.Text.Trim(), id) Then
lblInfo.Text = "Ungültige Sendung-ID"
Exit Sub
End If
hSQL &= " AND s.tblSnd_SendungID=@sendungId "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("sendungId", id))
End If
If dtFristVon.Checked Then
hSQL &= " AND scc.scc_Deadline>=@fristVon "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fristVon", dtFristVon.Value.Date))
End If
If dtFristBis.Checked Then
hSQL &= " AND scc.scc_Deadline<=@fristBis "
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("fristBis", dtFristBis.Value.Date))
End If
If optOffen.Checked Then
hSQL &= " AND scc.scc_Status NOT IN (5,6) "
ElseIf optAbgeschlossen.Checked Then
hSQL &= " AND scc.scc_Status IN (5,6) "
ElseIf optFristen.Checked Then
hSQL &= " AND scc.scc_Status NOT IN (5,6) AND (scc.scc_Deadline<=DATEADD(DAY,14,CAST(GETDATE() AS date)) OR scc.scc_ReminderDate<=CAST(GETDATE() AS date)) "
End If
hSQL &= " ORDER BY CASE WHEN scc.scc_Deadline<CAST(GETDATE() AS date) AND scc.scc_Status NOT IN (5,6) THEN 0 ELSE 1 END, scc.scc_Deadline, scc.scc_SendungID DESC "
Dim errOcc As Boolean = False
Dim dt As DataTable = VERAGSQL.loadDgvBySql_Param(hSQL, "AVISO", 1500, list, False, errOcc)
If errOcc Then
lblInfo.Text = "Fehler bei der Suche."
Exit Sub
End If
gridAviso.DataSource = dt
gridAviso_SpaltenFestlegen()
lblInfo.Text = gridAviso.Rows.Count.ToString() & " Vorgänge" & If(gridAviso.Rows.Count >= 1000, " (max. 1000)", "") & " – " & Date.Now.ToString("HH:mm")
Catch ex As Exception
cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
lblInfo.Text = "Suche fehlgeschlagen: " & ex.Message
End Try
End Sub
Public Sub gridAviso_SpaltenFestlegen()
If gridAviso.Columns.Count = 0 Then Exit Sub
For Each key In {"tblSnd_SendungID", "AvisoID", "VerfahrenNr", "StatusNr", "TeamId", "SachbearbeiterId"}
If gridAviso.Columns.Contains(key) Then gridAviso.Columns(key).Visible = False
Next
For Each key In {"Eingang", "Frist", "Wiedervorlage"}
If gridAviso.Columns.Contains(key) Then
gridAviso.Columns(key).Width = 90
gridAviso.Columns(key).DefaultCellStyle.Format = "dd.MM.yyyy"
End If
Next
If gridAviso.Columns.Contains("Betreff") Then
gridAviso.Columns("Betreff").Width = 250
End If
If gridAviso.Columns.Contains("Verfahren") Then gridAviso.Columns("Verfahren").Width = 155
If gridAviso.Columns.Contains("Auftraggeber") Then gridAviso.Columns("Auftraggeber").Width = 180
If gridAviso.Columns.Contains("Geschaeftszeichen") Then gridAviso.Columns("Geschaeftszeichen").HeaderText = "Geschäftszeichen"
If gridAviso.Columns.Contains("Fachstatus") Then gridAviso.Columns("Fachstatus").Width = 135
If gridAviso.Columns.Contains("Betrag") Then gridAviso.Columns("Betrag").DefaultCellStyle.Format = "N2"
End Sub
Private Sub btnSuchen_Click(sender As Object, e As EventArgs) Handles btnSuchen.Click
Aviso_anzeigen("")
End Sub
Private Sub btnNeu_Click(sender As Object, e As EventArgs) Handles btnNeu.Click
RaiseEvent CaseNewRequested()
End Sub
Private Sub Ansicht_CheckedChanged(sender As Object, e As EventArgs) Handles optOffen.CheckedChanged, optAlle.CheckedChanged, optFristen.CheckedChanged, optAbgeschlossen.CheckedChanged
Dim opt = DirectCast(sender, RadioButton)
If Not opt.Checked Then Exit Sub
For Each rb As RadioButton In New RadioButton() {optOffen, optAlle, optFristen, optAbgeschlossen}
rb.BackColor = If(rb.Checked, Color.FromArgb(28, 77, 150), Color.White)
rb.ForeColor = If(rb.Checked, Color.White, Color.FromArgb(44, 66, 103))
Next
Aviso_anzeigen("")
End Sub
Private Sub filter_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboTyp.SelectedIndexChanged, cboStatus.SelectedIndexChanged, cboLand.SelectedIndexChanged, cboTeam.SelectedIndexChanged, chkMeine.CheckedChanged
Aviso_anzeigen("")
End Sub
Private Sub filter_KeyDown(sender As Object, e As KeyEventArgs) Handles txtSuche.KeyDown, txtMRN.KeyDown, txtGeschaeftszeichen.KeyDown, txtZollamt.KeyDown, txtKunde.KeyDown, txtSendungID.KeyDown
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
Aviso_anzeigen("")
End If
End Sub
Private Sub gridAviso_DoubleClick(sender As Object, e As EventArgs) Handles gridAviso.DoubleClick
OpenSelectedCase()
End Sub
Private Sub gridAviso_KeyDown(sender As Object, e As KeyEventArgs) Handles gridAviso.KeyDown
If e.KeyCode = Keys.Enter Then
e.Handled = True : e.SuppressKeyPress = True
OpenSelectedCase()
End If
End Sub
Private Sub OpenSelectedCase()
If gridAviso.CurrentRow Is Nothing Then Exit Sub
Dim row = gridAviso.CurrentRow
If row.Cells("tblSnd_SendungID").Value Is DBNull.Value Then Exit Sub
Dim sendungId As Integer = Convert.ToInt32(row.Cells("tblSnd_SendungID").Value)
Dim avisoId As Integer = 0
If row.Cells("AvisoID").Value IsNot DBNull.Value AndAlso row.Cells("AvisoID").Value IsNot Nothing Then
avisoId = Convert.ToInt32(row.Cells("AvisoID").Value)
End If
If avisoId < 0 Then avisoId = 0
cGlobal.Aktive_SendungsID = sendungId
cGlobal.Aktive_ID = avisoId
RaiseEvent CaseOpenRequested(sendungId, avisoId)
End Sub
End Class