diff --git a/SDL/Formulare/KDFormulare/frmFormulare.vb b/SDL/Formulare/KDFormulare/frmFormulare.vb index 85f16c82..f0b93421 100644 --- a/SDL/Formulare/KDFormulare/frmFormulare.vb +++ b/SDL/Formulare/KDFormulare/frmFormulare.vb @@ -279,7 +279,7 @@ Public Class frmFormulare MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Vollmacht", FormularManagerArten.DE_Vollmacht)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("AT Vollmacht (EV)", FormularManagerArten.AT_Vollmacht_EV)) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Export Vollmacht", FormularManagerArten.VERAG_EXPORT)) - MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("(indirekt) DE VM", FormularManagerArten.DE_Vollmacht_indirekt)) + 'MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("(indirekt) DE VM", FormularManagerArten.DE_Vollmacht_indirekt)) -> nicht mehr laut Math. Lux (16.02.2026) MyListBox1.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("DE Fiskal-Vollmacht", FormularManagerArten.DE_Fiskal)) MyListBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VUB", FormularManagerArten.VUB)) MyListBox2.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("Importaviso Vorauskasse", FormularManagerArten.Importaviso_VK)) diff --git a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/KdSearchBox.vb b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/KdSearchBox.vb index 2b7e8721..ec8a1633 100644 --- a/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/KdSearchBox.vb +++ b/VERAG_PROG_ALLGEMEIN/Benutzerdefinierte Steuerelemente/KdSearchBox.vb @@ -1,5 +1,6 @@ Imports System.ComponentModel Imports System.Drawing +Imports System.Text Imports System.Windows.Forms 'Imports System.Threading @@ -152,7 +153,7 @@ Public Class KdSearchBox Eingabe_verarbeitet = False last_eingabe = Now - doKeyDown(Now, topKunden) + DoKeyDownNew(Now, topKunden) Catch ex As Exception VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name,, "Es ist ein Fehler beim Kunden-Such-Feld aufgetreten!",,,, "ERR_KDS_02") @@ -183,7 +184,7 @@ Public Class KdSearchBox 'TIMER_SEARCH If TIMER_SEARCH Then - If span_last_search < 600 And span_last_eingabe < 600 Then + If span_last_search < 600 AndAlso span_last_eingabe < 600 Then Exit Sub End If End If @@ -317,6 +318,129 @@ Public Class KdSearchBox End Try End Sub + Private Sub DoKeyDownNew(searchDate As DateTime, Optional topKunden As Integer = 10) + + Try + ' --- Guard Clauses --- + If usrcntl Is Nothing Then Exit Sub + If Eingabe_verarbeitet Then Exit Sub + + Dim spanLastSearch As Integer = CInt((searchDate - last_search).TotalMilliseconds) + Dim spanLastInput As Integer = CInt((searchDate - last_eingabe).TotalMilliseconds) + + If TIMER_SEARCH AndAlso (spanLastSearch < 600 Or spanLastInput < 400) Then + Exit Sub + End If + + ' --- Initialize UserControl Position --- + If Not usrcntl.Visible Then + InitializeUserControlPosition() + End If + + ' --- Configure Active Grid --- + If usrcntl.dgvKundenAktiv IsNot Nothing Then + If Not usrcntl.Visible Then + ConfigureGrid(usrcntl.dgvKundenAktiv) + End If + + ThreadInitAKTIV_NEW(topKunden) + End If + + ' --- Configure Inactive Grid --- + If nurAktive Then + usrcntl.dgvKundenInAktiv.Visible = False + usrcntl.Panel1.Visible = False + ElseIf usrcntl.dgvKundenInAktiv IsNot Nothing Then + + If Not usrcntl.Visible Then + ConfigureGrid(usrcntl.dgvKundenInAktiv, isInactive:=True) + End If + + ThreadInitINAKTIV_NEW() + End If + + ' --- Visibility Handling --- + If _hideIfListEmpty Then + Dim isEmpty As Boolean = + usrcntl.dgvKundenAktiv.RowCount = 0 AndAlso + usrcntl.dgvKundenInAktiv.RowCount = 0 + + setObjectVisible(usrcntl, Not isEmpty) + Else + usrcntl.Visible = True + usrcntl.Show() + usrcntl.BringToFront() + End If + + Eingabe_verarbeitet = True + last_search = DateTime.Now + + Catch ex As Exception + MsgBox(ex.Message & Environment.NewLine & ex.StackTrace) + End Try + + End Sub + + + ' ----------------------------- + ' Helper Methods + ' ----------------------------- + + Private Sub InitializeUserControlPosition() + + usrcntl.Width = usrcntlWIDTH + usrcntl.Height = usrcntlHEIGHT + + If Me.FindForm Is Nothing Then Exit Sub + + Dim locationOnForm As Point = + Me.FindForm.PointToClient(Me.Parent.PointToScreen(Me.Location)) + + If dgvpos = "RIGHT" Then + locationOnForm.X -= (usrcntl.Width - Me.Width) + 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 Sub + + + Private Sub ConfigureGrid(grid As DataGridView, + Optional isInactive As Boolean = False) + + With grid + .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 + ' Some environments throw an exception here + End Try + + If isInactive Then + .DefaultCellStyle.ForeColor = Color.Gray + End If + End With + + End Sub + Public Sub hideDgv(o) '(sender As Object, e As EventArgs) If o IsNot Nothing Then Me.searchActive = False @@ -326,6 +450,7 @@ Public Class KdSearchBox End Sub + 'old???!!!!!! Sub ThreadInitAKTIV_COMP() Try If usrcntl Is Nothing Then Exit Sub @@ -396,14 +521,6 @@ Public Class KdSearchBox End If - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then 'Keine - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5701') " - 'ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "VERAG" And VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "ATILLA" Then - ' SQLstr &= " AND Kunden.[FilialenNr]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "' " - 'Else - ' '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 " @@ -416,6 +533,7 @@ Public Class KdSearchBox End Try End Sub + 'old???!!!!!! Sub ThreadInit_ALLCOPMP_AND_INAKTIV() Try If usrcntl Is Nothing Then Exit Sub @@ -447,21 +565,7 @@ Public Class KdSearchBox 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 & "%' )) " End If - ' SQLstr &= " AND [Auswahl]='I' " - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then 'Keine - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5701') " - 'ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "VERAG" And VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "ATILLA" Then - ' SQLstr &= " AND Kunden.[FilialenNr]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "' " - 'Else - ' 'SQLstr &= " AND isnull([FilialenNr],0)<>'5501' " - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5501','5601','5701','5801') " - 'End If - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER <> "" Then - ' SQLstr &= " AND (Filialen.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' OR Filialen.CLUSTER='" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "') " - 'Else - ' SQLstr &= " AND Filialen.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' " - 'End If SQLstr &= " AND '" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice @@ -572,20 +676,6 @@ Public Class KdSearchBox SQLstrEnd &= " ) " End If - ''AUSNAHME BIS BESSERE LÖSUNG: - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then - ' SQLstr &= " and Filialen.Firma NOT IN ('AMBAR') " - 'End If - - - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then 'Keine - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5701') " - 'ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "VERAG" And VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "ATILLA" Then - ' SQLstr &= " AND Kunden.[FilialenNr]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "' " - 'Else - ' '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 SQLstrEnd &= " AND AdressenNr NOT LIKE '15%'" Dim searchstring = SQLstr & SQLstrEnd & " order by Ordnungsbegriff " @@ -629,20 +719,6 @@ Public Class KdSearchBox 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]='I' " - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then 'Keine - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5701') " - 'ElseIf VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "VERAG" And VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA <> "ATILLA" Then - ' SQLstr &= " AND Kunden.[FilialenNr]='" & VERAG_PROG_ALLGEMEIN.cAllgemein.STAMMFILIALE & "' " - 'Else - ' 'SQLstr &= " AND isnull([FilialenNr],0)<>'5501' " - ' SQLstr &= " AND isnull(Kunden.[FilialenNr],0) NOT IN ('5501','5601','5701','5801') " - 'End If - - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER <> "" Then - ' SQLstr &= " AND (Filialen.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' OR Filialen.CLUSTER='" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "') " - 'Else - ' SQLstr &= " AND Filialen.Firma='" & VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA & "' " - 'End If If _AlleFirmenCLUSTER Then SQLstr &= " AND '" & VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER & "' IN (Filialen.Firma,Filialen.Cluster) " ' Wenn die Firmenbezeichnung im CLUSter vorkommt .--> Frontoffice @@ -666,11 +742,6 @@ Public Class KdSearchBox End If - 'AUSNAHME BIS BESSERE LÖSUNG - 'If VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" Then - ' SQLstr &= " and Filialen.Firma NOT IN ('AMBAR') " - 'End If - If Not _displayWoelflKd Then SQLstr &= " AND AdressenNr NOT LIKE '15%'" SQLstr &= " order by Ordnungsbegriff " @@ -683,6 +754,200 @@ Public Class KdSearchBox End Try End Sub + Private Sub ThreadInitAKTIV_NEW(Optional topKunden As Integer = 10) + + Try + If usrcntl?.dgvKundenAktiv Is Nothing Then Exit Sub + + Dim search = ParseSearch(Me.Text) + Dim topCount As Integer = If(nurAktive, 16, topKunden) + + Dim sql = BuildCustomerSql(search, topCount, auswahl:="A", includeAviso:=_displayAVISO_Email) + + Dim countSql = "SELECT COUNT(Ordnungsbegriff) " & sql.SqlEnd.ToString.Replace("ORDER BY Ordnungsbegriff", "") + + setDS(True, usrcntl.dgvKundenAktiv, (New SQL).loadDgvBySql(sql.FullSql, "FMZOLL"), topCount, If(search.Primary.Length > 2, (New SQL).getValueTxtBySql(countSql, "FMZOLL"), "")) + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name,, "Fehler im Kunden-Such-Feld!",,,, "ERR_KDS_03") + End Try + + End Sub + + Private Sub ThreadInitINAKTIV_NEW() + + Try + If usrcntl?.dgvKundenInAktiv Is Nothing Then Exit Sub + + Dim search = ParseSearch(Me.Text) + + Dim sql = BuildCustomerSql(search, topCount:=4, auswahl:="I", includeAviso:=False) + + setDS(False, usrcntl.dgvKundenInAktiv, (New SQL).loadDgvBySql(sql.FullSql, "FMZOLL"), 4) + + Catch ex As Exception + VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, Reflection.MethodInfo.GetCurrentMethod.Name,, "Fehler im Kunden-Such-Feld!",,,, "ERR_KDS_04") + End Try + + End Sub + + Private Function ParseSearch(input As String) As (Primary As String, Secondary As String) + + Dim cleaned = input.Replace("'", "").Trim() + + Dim primary = cleaned + Dim secondary As String = "" + + If cleaned.Contains(",") Then + Dim parts = cleaned.Split(","c) + primary = parts(0).Trim() + secondary = parts(1).Trim() + End If + + If primary.StartsWith("*") Then + primary = "%" & primary.Substring(1) + End If + + If secondary.StartsWith("*") Then + secondary = "%" & secondary.Substring(1) + End If + + Return (primary, secondary) + + End Function + + Private Function BuildCustomerSql( + search As (Primary As String, Secondary As String), + topCount As Integer, + auswahl As String, + includeAviso As Boolean) _ + As (FullSql As String, SqlEnd As String) + + Dim avisoField As String = "" + + If includeAviso Then + avisoField = ", (SELECT CASE WHEN COUNT(*) > 0 THEN 'JA' ELSE '' END FROM tblEmailBenachrichtigung WHERE eb_KundenNr = AdressenNr) AS [E-Mail]" + End If + + Dim selectPart = $"SELECT TOP {topCount} + Ordnungsbegriff AS Firma, + AdressenNr AS KdNr, + Adressen.[LandKz] + ' ' + + Adressen.[PLZ] + ' - ' + + Adressen.[Ort] + ' ' + + Adressen.[Straße] AS Adresse + {avisoField}" + + If ShouldIncludeFirmaIntern() Then + selectPart &= ", Filialen.Firma AS Firma_Intern" + End If + + Dim sqlEnd As New StringBuilder() + + sqlEnd.AppendLine(" FROM Adressen") + sqlEnd.AppendLine(" INNER JOIN Kunden ON KundenNr = AdressenNr") + sqlEnd.AppendLine(" INNER JOIN Filialen ON Filialen.FilialenNr = COALESCE(Kunden.FilialenNr, 4803)") + sqlEnd.AppendLine(" WHERE 1=1") + + ' Search + sqlEnd.AppendLine(" AND (") + sqlEnd.AppendLine($" Ordnungsbegriff_AI LIKE '{search.Primary}%'") + + If IsNumeric(search.Primary) Then + sqlEnd.AppendLine($" OR AdressenNr LIKE '{search.Primary}%'") + End If + + If _searchName1 Then + sqlEnd.AppendLine($" OR Adressen.[Name 1] LIKE '{search.Primary}%'") + End If + + sqlEnd.AppendLine(" )") + + If search.Secondary <> "" Then + sqlEnd.AppendLine( + $" AND ( + Filialen.Firma LIKE '{search.Secondary}%' + OR Adressen.PLZ LIKE '{search.Secondary}%' + OR Adressen.Ort LIKE '{search.Secondary}%' + OR Adressen.LandKz LIKE '{search.Secondary}%' + OR Adressen.Straße LIKE '{search.Secondary}%' + )") + End If + + sqlEnd.AppendLine($" AND Auswahl = '{auswahl}'") + + AppendFirmaFilter(sqlEnd) + + If Not _displayWoelflKd Then + sqlEnd.AppendLine(" AND AdressenNr NOT LIKE '15%'") + End If + + sqlEnd.AppendLine(" ORDER BY Ordnungsbegriff") + + Return (selectPart & sqlEnd.ToString(), sqlEnd.ToString()) + + End Function + + Private Sub AppendFirmaFilter(sql As StringBuilder) + + If _AlleFirmenCLUSTER Then + + sql.AppendLine( + $" AND '{VERAG_PROG_ALLGEMEIN.cAllgemein.CLUSTER}' + IN (Filialen.Firma, Filialen.Cluster)") + + ElseIf _UseFIRMA <> "" Then + + sql.AppendLine( + $" AND '{_UseFIRMA}' + IN (Filialen.Firma, Filialen.Cluster)") + + Else + + sql.AppendLine(" AND (") + + sql.AppendLine( + $" '{VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA.Replace("ATILLA", "VERAG")}' + IN (Filialen.Firma, Filialen.Cluster)") + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AVISO_IMEX", "AVISO") Then + sql.AppendLine(" OR Filialen.Firma IN ('IMEX')") + End If + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_VERAGIMEX", "SDL") Then + sql.AppendLine(" OR Filialen.Firma IN ('IMEX','VERAG')") + End If + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_UNISPED_BREXIT", "SDL") Then + sql.AppendLine(" OR (Filialen.Firma IN ('UNISPED') AND Kunden.FilialenNr = 7002)") + End If + + If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("FAKTURIERUNG_FRONTOFFICE", "SDL") Then + sql.AppendLine(" OR Filialen.Firma IN ('FRONTOFFICE')") + End If + + sql.AppendLine(" )") + + End If + + End Sub + + + + Private Function ShouldIncludeFirmaIntern() As Boolean + + Return VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "FRONTOFFICE" _ + OrElse VERAG_PROG_ALLGEMEIN.cAllgemein.FIRMA = "VERIMEX" _ + OrElse _AlleFirmenCLUSTER _ + OrElse _UseFIRMA <> "" _ + OrElse VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("AVISO_IMEX", "AVISO") _ + OrElse VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("OFFERTE_FREMD_VERAGIMEX", "SDL") + + End Function + + + + 'threadsicherer Aufruf ' Delegate Sub setLabelCallback(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 = "") @@ -866,7 +1131,7 @@ Public Class KdSearchBox Try If e.KeyCode = Keys.Return Or e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Tab Then last_search = Now.AddSeconds(-10) - doKeyDown(Now) ' Damit Suche-Timer sicherausgelöst wurde + DoKeyDownNew(Now) ' Damit Suche-Timer sicherausgelöst wurde ' System.Threading.Thread.Sleep(5000) End If @@ -1140,7 +1405,7 @@ Public Class KdSearchBox End Sub Private Sub tmr_Search_Tick(sender As Object, e As EventArgs) Handles tmr_Search.Tick - If TIMER_SEARCH Then doKeyDown(Now) + If TIMER_SEARCH Then DoKeyDownNew(Now) End Sub End Class