KdSearchbox, etc.

This commit is contained in:
2025-12-29 14:53:52 +01:00
parent 5f635227eb
commit 51b7ecf2a0
5 changed files with 324 additions and 91 deletions

View File

@@ -41,6 +41,7 @@ Public Class KdSearchBox
Dim Eingabe_verarbeitet = True
Dim WithEvents tmr_Search As New Timer
Dim GlobalAnzahlKunden As Integer = -1
Public usrcntlWIDTH = 600
Public usrcntlHEIGHT = 380
@@ -159,7 +160,148 @@ Public Class KdSearchBox
End Try
End Sub
Sub doKeyDown(srchdate As DateTime)
Private Sub seeAllKunden(sender As Object, e As MouseEventArgs) Handles usrcntl.DGV_AlleKunden
If Not searchActive Then Exit Sub
If usrcntl Is Nothing Then
Exit Sub
End If
Try
If usrcntl.Visible = False Then
usrcntl.Width = usrcntlWIDTH
usrcntl.Height = usrcntlHEIGHT
Dim locationOnForm As Point = Nothing
If Me.FindForm IsNot Nothing Then
If dgvpos = "LEFT" Or dgvpos = "" Then
locationOnForm = Me.FindForm().PointToClient(Me.Parent.PointToScreen(Me.Location))
ElseIf dgvpos = "RIGHT" Then
locationOnForm = Me.FindForm().PointToClient(Me.Parent.PointToScreen(Me.Location))
locationOnForm.X = locationOnForm.X - (usrcntl.Width - Me.Width)
End If
End If
If locationOnForm.Y + usrcntl.Height + Me.Height > form.ClientRectangle.Height Then
usrcntl.Height = form.ClientRectangle.Height - locationOnForm.Y - Me.Height
End If
usrcntl.Location = locationOnForm
usrcntl.Top += Me.Height
End If
If usrcntl IsNot Nothing AndAlso usrcntl.dgvKundenAktiv IsNot Nothing Then
With usrcntl.dgvKundenAktiv
If usrcntl.Visible = False Then
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False
.ReadOnly = True
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.BackgroundColor = Color.White
.ForeColor = Color.Black
Try
.GridColor = Color.White
Catch ex As Exception
'Keine Ahnung warum hier ein Fehler kommt
End Try
End If
'THREADING AKTIV
Me.ThreadInitAKTIV(GlobalAnzahlKunden)
' Dim ThreadInitAKTIV = New System.Threading.Thread(AddressOf Me.ThreadInitAKTIV)
' ThreadInitAKTIV.IsBackground = True
' ThreadInitAKTIV.Start()
End With
End If
If nurAktive Then
usrcntl.dgvKundenInAktiv.Visible = False
usrcntl.Panel1.Visible = False
Else
If usrcntl IsNot Nothing AndAlso usrcntl.dgvKundenInAktiv IsNot Nothing Then
With usrcntl.dgvKundenInAktiv
If usrcntl.Visible = False Then
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToOrderColumns = False
.AllowUserToResizeColumns = False
.AllowUserToResizeRows = False
.ReadOnly = True
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.BackgroundColor = Color.White
.ForeColor = Color.Black
Try
.GridColor = Color.White
Catch ex As Exception
'Keine Ahnung warum hier ein Fehler kommt
End Try
.DefaultCellStyle.ForeColor = Color.Gray
End If
Me.ThreadInitINAKTIV()
'THREADING INAKTIV
'Dim ThreadInitINAKTIV = New System.Threading.Thread(AddressOf Me.ThreadInitINAKTIV)
'ThreadInitINAKTIV.IsBackground = True
'ThreadInitINAKTIV.Start()
End With
End If
End If
If _hideIfListEmpty Then
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
If False Then
'THREADING ThreadWaitAndSee
Dim ThreadWaitAndSee = New System.Threading.Thread(Sub()
Threading.Thread.Sleep(200)
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
End Sub)
ThreadWaitAndSee.IsBackground = True
ThreadWaitAndSee.Start()
End If
Else
usrcntl.Visible = True
usrcntl.Show()
usrcntl.BringToFront()
End If
Eingabe_verarbeitet = True
last_search = Now
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
End Try
End Sub
Sub doKeyDown(srchdate As DateTime, Optional topKunden As Integer = 10)
Try
If usrcntl Is Nothing Then Exit Sub
If Eingabe_verarbeitet Then Exit Sub ' Bereits abgearbetiet -> Timer
@@ -169,7 +311,7 @@ Public Class KdSearchBox
'TIMER_SEARCH
If TIMER_SEARCH Then
If span_last_search < 500 And span_last_eingabe < 500 Then
If span_last_search < 600 And span_last_eingabe < 600 Then
Exit Sub
End If
End If
@@ -223,7 +365,7 @@ Public Class KdSearchBox
'THREADING AKTIV
Me.ThreadInitAKTIV()
Me.ThreadInitAKTIV(topKunden)
' Dim ThreadInitAKTIV = New System.Threading.Thread(AddressOf Me.ThreadInitAKTIV)
' ThreadInitAKTIV.IsBackground = True
' ThreadInitAKTIV.Start()
@@ -232,9 +374,9 @@ Public Class KdSearchBox
End If
If nurAktive Then
usrcntl.dgvKundenInAktiv.Visible = False
usrcntl.Panel1.Visible = False
Else
usrcntl.dgvKundenInAktiv.Visible = False
usrcntl.Panel1.Visible = False
Else
If usrcntl IsNot Nothing AndAlso usrcntl.dgvKundenInAktiv IsNot Nothing Then
With usrcntl.dgvKundenInAktiv
@@ -271,32 +413,32 @@ Public Class KdSearchBox
If _hideIfListEmpty Then
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
If False Then
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
If False Then
'THREADING ThreadWaitAndSee
Dim ThreadWaitAndSee = New System.Threading.Thread(Sub()
Threading.Thread.Sleep(200)
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
End Sub)
ThreadWaitAndSee.IsBackground = True
ThreadWaitAndSee.Start()
'THREADING ThreadWaitAndSee
Dim ThreadWaitAndSee = New System.Threading.Thread(Sub()
Threading.Thread.Sleep(200)
If usrcntl.dgvKundenAktiv.RowCount = 0 And usrcntl.dgvKundenInAktiv.RowCount = 0 Then
setObjectVisible(usrcntl, False)
Else
setObjectVisible(usrcntl, True)
End If
End Sub)
ThreadWaitAndSee.IsBackground = True
ThreadWaitAndSee.Start()
End If
Else
usrcntl.Visible = True
usrcntl.Show()
usrcntl.BringToFront()
End If
Else
usrcntl.Visible = True
usrcntl.Show()
usrcntl.BringToFront()
End If
Eingabe_verarbeitet = True
last_search = Now
Eingabe_verarbeitet = True
last_search = Now
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
@@ -393,7 +535,7 @@ Public Class KdSearchBox
If Not _displayWoelflKd Then SQLstr &= " AND AdressenNr NOT LIKE '15%'"
SQLstr &= " order by Ordnungsbegriff "
setDS(usrcntl.dgvKundenAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"))
setDS(True, usrcntl.dgvKundenAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"), topAnz)
End With
@@ -477,7 +619,7 @@ Public Class KdSearchBox
If Not _displayWoelflKd Then SQLstr &= " AND AdressenNr NOT LIKE '15%'"
SQLstr &= " order by Ordnungsbegriff "
setDS(usrcntl.dgvKundenInAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"))
setDS(False, usrcntl.dgvKundenInAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"), 6)
End With
@@ -487,7 +629,7 @@ Public Class KdSearchBox
End Sub
Sub ThreadInitAKTIV()
Sub ThreadInitAKTIV(Optional topKunden As Integer = 10)
Try
If usrcntl Is Nothing Then Exit Sub
If usrcntl.dgvKundenAktiv Is Nothing Then Exit Sub
@@ -504,25 +646,28 @@ Public Class KdSearchBox
End If
If srch2.StartsWith("*") Then srch2 = Replace(srch2, "*", "%", , 1) ' Suche mit beginnenden *
Dim topAnz = 10
Dim topAnz = topKunden
If nurAktive Then topAnz = 16
Dim AvisoEmail = ""
If _displayAVISO_Email Then
AvisoEmail = ", (SELECT CASE WHEN Count(*)>0 Then 'JA' ELSE '' END [Adressen] FROM [tblEmailBenachrichtigung] WHERE [eb_KundenNr]=AdressenNr) as [E-Mail] "
End If
Dim SQLstrEnd As String = ""
Dim SQLstrCount As String = "Select count(Ordnungsbegriff)"
Dim SQLstr As String = " SELECT top " & topAnz & " Ordnungsbegriff as Firma, AdressenNr as KdNr,Adressen.[LandKz] + ' ' + Adressen.[PLZ] + ' - ' + Adressen.[Ort] + ' ' + Adressen.[Straße] as Adresse " & AvisoEmail & " "
If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Or VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERIMEX" Or _AlleFirmenCLUSTER Or _UseFIRMA <> "" Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AVISO_IMEX", "AVISO") Or VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_VERAGIMEX", "SDL") Then SQLstr &= ", Filialen.Firma as Firma_Intern "
SQLstr &= " FROM [Adressen] "
SQLstr &= " INNER JOIN Kunden on KundenNr=AdressenNr "
SQLstr &= " INNER JOIN Filialen on Filialen.FilialenNr=isnull(Kunden.FilialenNr,4803) "
SQLstr &= " WHERE 1=1 "
SQLstr &= " AND ( "
SQLstr &= " Ordnungsbegriff COLLATE Latin1_General_CI_AI LIKE '" & srch & "%' COLLATE Latin1_General_CI_AI "
If IsNumeric(srch) Then SQLstr &= " OR AdressenNr LIKE '" & srch & "%' "
If _searchName1 Then SQLstr &= " OR Adressen.[Name 1] LIKE '" & srch & "%' "
SQLstr &= " ) "
If srch2 <> "" Then SQLstr &= " AND (Filialen.Firma LIKE '" & srch2 & "%' OR ( Adressen.PLZ LIKE '" & srch2 & "%' OR Adressen.Ort LIKE '" & srch2 & "%' OR Adressen.LandKz LIKE '" & srch2 & "%' OR Adressen.Straße LIKE '" & srch2 & "%' )) "
SQLstr &= " AND [Auswahl]='A' "
SQLstrEnd &= " FROM [Adressen] "
SQLstrEnd &= " INNER JOIN Kunden on KundenNr=AdressenNr "
SQLstrEnd &= " INNER JOIN Filialen on Filialen.FilialenNr=isnull(Kunden.FilialenNr,4803) "
SQLstrEnd &= " WHERE 1=1 "
SQLstrEnd &= " AND ( "
SQLstrEnd &= " Ordnungsbegriff COLLATE Latin1_General_CI_AI LIKE '" & srch & "%' COLLATE Latin1_General_CI_AI "
If IsNumeric(srch) Then SQLstrEnd &= " OR AdressenNr LIKE '" & srch & "%' "
If _searchName1 Then SQLstrEnd &= " OR Adressen.[Name 1] LIKE '" & srch & "%' "
SQLstrEnd &= " ) "
If srch2 <> "" Then SQLstrEnd &= " AND (Filialen.Firma LIKE '" & srch2 & "%' OR ( Adressen.PLZ LIKE '" & srch2 & "%' OR Adressen.Ort LIKE '" & srch2 & "%' OR Adressen.LandKz LIKE '" & srch2 & "%' OR Adressen.Straße LIKE '" & srch2 & "%' )) "
SQLstrEnd &= " AND [Auswahl]='A' "
'If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER <> "" Then
' SQLstr &= " AND (Filialen.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' OR Filialen.CLUSTER='" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "') "
@@ -531,24 +676,24 @@ Public Class KdSearchBox
'End If
If _AlleFirmenCLUSTER Then
SQLstr &= " AND '" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
SQLstrEnd &= " AND '" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
ElseIf _UseFIRMA <> "" Then
SQLstr &= " AND '" & _UseFIRMA & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
SQLstrEnd &= " AND '" & _UseFIRMA & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
Else
SQLstr &= " AND ( '" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA.Replace("ATILLA", "VERAG") & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
SQLstrEnd &= " AND ( '" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA.Replace("ATILLA", "VERAG") & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AVISO_IMEX", "AVISO") Then
SQLstr &= " OR Filialen.Firma IN ('IMEX') " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
SQLstrEnd &= " OR Filialen.Firma IN ('IMEX') " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
End If
If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_VERAGIMEX", "SDL") Then
SQLstr &= " OR Filialen.Firma IN ('IMEX','VERAG') " ' Wenn die OFFERTE_FREMD_VERAGIMEX --> Beide
SQLstrEnd &= " OR Filialen.Firma IN ('IMEX','VERAG') " ' Wenn die OFFERTE_FREMD_VERAGIMEX --> Beide
End If
If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_UNISPED_BREXIT", "SDL") Then
SQLstr &= " OR (Filialen.Firma IN ('UNISPED') AND Kunden.[FilialenNr]=7002) " ' Wenn die OFFERTE_FREMD_VERAGIMEX --> Beide
SQLstrEnd &= " OR (Filialen.Firma IN ('UNISPED') AND Kunden.[FilialenNr]=7002) " ' Wenn die OFFERTE_FREMD_VERAGIMEX --> Beide
End If
If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("FAKTURIERUNG_FRONTOFFICE", "SDL") Then
SQLstr &= " OR Filialen.Firma IN ('FRONTOFFICE') " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
SQLstrEnd &= " OR Filialen.Firma IN ('FRONTOFFICE') " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice
End If
SQLstr &= " ) "
SQLstrEnd &= " ) "
End If
''AUSNAHME BIS BESSERE LÖSUNG:
@@ -565,10 +710,9 @@ Public Class KdSearchBox
' 'SQLstr &= " AND isnull(Kunden.[FilialenNr],0)<>'5501' "
' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5501','5601','5701','5801') "
'End If
If Not _displayWoelflKd Then SQLstr &= " AND AdressenNr NOT LIKE '15%'"
SQLstr &= " order by Ordnungsbegriff "
If Not _displayWoelflKd Then SQLstrEnd &= " AND AdressenNr NOT LIKE '15%'"
setDS(usrcntl.dgvKundenAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"))
setDS(True, usrcntl.dgvKundenAktiv, SQL.loadDgvBySql(SQLstr & SQLstrEnd & " order by Ordnungsbegriff ", "FMZOLL"), topAnz, IIf(srch.Count > 4, SQL.getValueTxtBySql(SQLstrCount & SQLstrEnd, "FMZOLL"), ""))
End With
@@ -651,7 +795,7 @@ Public Class KdSearchBox
If Not _displayWoelflKd Then SQLstr &= " AND AdressenNr NOT LIKE '15%'"
SQLstr &= " order by Ordnungsbegriff "
setDS(usrcntl.dgvKundenInAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"))
setDS(False, usrcntl.dgvKundenInAktiv, SQL.loadDgvBySql(SQLstr, "FMZOLL"), 4)
End With
@@ -662,7 +806,7 @@ Public Class KdSearchBox
'threadsicherer Aufruf
' Delegate Sub setLabelCallback(l As DataGridView, t As DataTable)
Private Sub setDS(l As DataGridView, t As DataTable)
Private Sub setDS(aktiveKunden As Boolean, l As DataGridView, t As DataTable, topKunden As Integer, Optional anzahlKunden As String = "")
Try
If l Is Nothing Then Exit Sub
If t Is Nothing Then Exit Sub
@@ -685,6 +829,32 @@ Public Class KdSearchBox
.ClearSelection()
End With
If aktiveKunden Then
If topKunden < CInt(anzahlKunden) And CInt(anzahlKunden) < 65 Then
usrcntl.btnAlleKunden.Visible = True
Else
usrcntl.btnAlleKunden.Visible = False
End If
usrcntl.Label2.Text = "AKTIVE Kunden - MAX " & topKunden & " Einträge"
If anzahlKunden <> "" AndAlso IsNumeric(anzahlKunden) Then
usrcntl.lblAnzahl.Text = "Anzahl: " & anzahlKunden
GlobalAnzahlKunden = anzahlKunden
Else
usrcntl.lblAnzahl.Text = ""
GlobalAnzahlKunden = -1
End If
Else
usrcntl.lblINAKTIVEKunden.Text = "INAKTIVE Kunden - MAX " & topKunden & " Einträge"
End If
' End If
Catch ex As Exception