This commit is contained in:
2026-07-19 23:30:33 +02:00
parent 718115a1e4
commit cf75d131cc
12 changed files with 1273 additions and 778 deletions

View File

@@ -24,6 +24,7 @@ Partial Class frmMessenger
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()>
Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
Dim DataGridViewCellStyle3 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
@@ -38,12 +39,12 @@ Partial Class frmMessenger
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMessenger))
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
Me.SplitContainer2 = New System.Windows.Forms.SplitContainer()
Me.dgvChats = New VERAG_PROG_ALLGEMEIN.MyDatagridview()
Me.dgvChats = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.Panel6 = New System.Windows.Forms.Panel()
Me.Label3 = New System.Windows.Forms.Label()
Me.lblLKWChat_MsgCntInaktiv = New System.Windows.Forms.Label()
Me.cbxInaktiveChats = New System.Windows.Forms.CheckBox()
Me.DGVSonstige = New VERAG_PROG_ALLGEMEIN.MyDatagridview()
Me.DGVSonstige = New VERAG_PROG_ALLGEMEIN.MyDatagridview(Me.components)
Me.Panel5 = New System.Windows.Forms.Panel()
Me.MyTextBox2 = New VERAG_PROG_ALLGEMEIN.MyTextBox()
Me.PictureBox2 = New System.Windows.Forms.PictureBox()
@@ -64,7 +65,7 @@ Partial Class frmMessenger
Me.btnNeu = New System.Windows.Forms.Button()
Me.Button1 = New System.Windows.Forms.Button()
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel()
Me.MyFlowLayoutPanel1 = New VERAG_PROG_ALLGEMEIN.MyFlowLayoutPanel(Me.components)
Me.UsrCntlMessenger_ChatElement1 = New VERAG_PROG_ALLGEMEIN.usrCntlMessenger_ChatElement()
Me.Panel3 = New System.Windows.Forms.Panel()
Me.btnTeilnehmer = New System.Windows.Forms.Button()
@@ -92,9 +93,9 @@ Partial Class frmMessenger
Me.btnSendAtt = New System.Windows.Forms.Button()
Me.btnSenden = New System.Windows.Forms.Button()
Me.rtbChatMessage = New System.Windows.Forms.RichTextBox()
Me.TimerNEW_MESSAGE = New System.Windows.Forms.Timer()
Me.Timer_REFRESH = New System.Windows.Forms.Timer()
Me.cntxt = New System.Windows.Forms.ContextMenuStrip()
Me.TimerNEW_MESSAGE = New System.Windows.Forms.Timer(Me.components)
Me.Timer_REFRESH = New System.Windows.Forms.Timer(Me.components)
Me.cntxt = New System.Windows.Forms.ContextMenuStrip(Me.components)
Me.ChatDeaktivierenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
Me.toolChatReminder = New System.Windows.Forms.ToolStripMenuItem()
Me.DataGridViewTextBoxColumn1 = New System.Windows.Forms.DataGridViewTextBoxColumn()

View File

@@ -160,8 +160,11 @@ Public Class frmMessenger
End If
End Sub
Sub intiDGVChats(Optional dgv_ChatID = -1, Optional reloadChat = True, Optional selFirst = False)
Public Sub intiDGVChats(Optional dgv_ChatID = -1, Optional reloadChat = True, Optional selFirst = False, Optional Chat_ART = "")
If Chat_ART <> "" Then
initChat_ART(Chat_ART)
End If
Dim newMsg = VERAG_PROG_ALLGEMEIN.cMessenger.GET_NewMSG_COUNT_ART(VERAG_PROG_ALLGEMEIN.cAllgemein.USRID, "CHAT")
UsrCntlChat_Art_Btn_MACHAT.setCnt(newMsg)
@@ -1336,7 +1339,7 @@ Public Class frmMessenger
If r.Cells("clmnMaId").Value <> VERAG_PROG_ALLGEMEIN.cAllgemein.USRID Then
For Each MB In CHAT.CHAT_MEMBERS
If r.Cells("clmnMaId").Value = MB.chatMb_maId Then
ol.Add(MB)
ol.Remove(MB)
End If
Next
End If

View File

@@ -6,7 +6,7 @@ Public Class usrCntlMessenger_ListNewChats
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
Sub intiDGVChats(Optional dgv_ChatID = -1, Optional reloadChat = True, Optional selFirst = False)
Sub intiDGVChats(Optional dgv_ChatID = -1, Optional reloadChat = True, Optional selFirst = False, Optional GeleseneAnzeigen = True)
@@ -16,6 +16,19 @@ Public Class usrCntlMessenger_ListNewChats
' loaded = False
'End If
' Merke zuvor ausgewählte ab_id (wenn genau eine Zeile selektiert)
Dim prevSelectedId As Integer = -1
Try
If .SelectedRows.Count = 1 Then
Dim v = .SelectedRows(0).Cells("chat_id").Value
If v IsNot Nothing AndAlso v IsNot DBNull.Value AndAlso IsNumeric(v) Then
prevSelectedId = CInt(v)
End If
End If
Catch
prevSelectedId = -1
End Try
Dim whereName = ""
'If MyTextBox1.Text.Trim <> String.Empty Then
' whereName = " WHERE y.chat_name LIKE '%" & MyTextBox1.Text.Trim & "%' "
@@ -31,53 +44,72 @@ Public Class usrCntlMessenger_ListNewChats
' where = " AND chat_art IN ('" & toggle_CHAT_ART & "') "
'End Select
Dim sqlQery_optimiced As String = " SELECT * FROM (SELECT TOP 200
c.chat_id,
c.chat_art,
CASE
WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name
ELSE names.chat_name
END AS chat_name,
ISNULL(unread.ungelesen, 0) AS ungelesen,
c.chat_lastMsg
FROM tblMessenger_Chat c
-- ensure current user is member
INNER JOIN tblMessenger_ChatMembers m
ON m.chatMb_chatId = c.chat_id
AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
-- 🔹 get participant names (distinct!)
OUTER APPLY (
SELECT STRING_AGG(name, ', ') AS chat_name
FROM (
SELECT DISTINCT
mit.mit_vname + ' ' + mit.mit_nname AS name
FROM tblMessenger_ChatMembers m2
INNER JOIN tblMitarbeiter mit
ON mit.mit_id = m2.chatMb_maId
WHERE m2.chatMb_chatId = c.chat_id
AND m2.chatMb_maId <> " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
) x
) names
-- 🔹 unread count separated (no duplication!)
OUTER APPLY (
SELECT COUNT(*) AS ungelesen
FROM tblMessenger_ChatMessages msg
INNER JOIN tblMessenger_ChatMessageStatus s
ON s.chatMgSt_chatMsgId = msg.chatMg_id
WHERE msg.chatMg_chatId = c.chat_id
AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
AND s.chatMgSt_gelesen = 0
) unread WHERE c.chat_aktiv = 1
AND ISNULL(unread.ungelesen, 0) > 0
" & where & " ORDER BY c.chat_lastMsg DESC) y " & whereName
Dim topCount As String = If(GeleseneAnzeigen, "20", "200")
Dim unreadFilter As String = ""
If VERAG_PROG_ALLGEMEIN.cGlobal.CHAT_NurGelesen Then
unreadFilter = " AND ISNULL(unread.ungelesen, 0) > 0 "
End If
Dim sqlQery_optimiced As String =
"SELECT *
FROM (
SELECT TOP " & topCount & "
c.chat_id,
CASE
WHEN c.chat_art = 'CHAT' THEN ''
WHEN c.chat_art = 'LKW_CHAT' THEN 'LKW'
WHEN c.chat_art = 'SND_CHAT' THEN 'SND'
ELSE c.chat_art
END AS chat_art,
CASE
WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name
ELSE names.chat_name
END AS chat_name,
ISNULL(unread.ungelesen, 0) AS ungelesen,
c.chat_lastMsg
FROM tblMessenger_Chat c
INNER JOIN tblMessenger_ChatMembers m
ON m.chatMb_chatId = c.chat_id
AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
OUTER APPLY (
SELECT STRING_AGG(x.name, ', ') AS chat_name
FROM (
SELECT DISTINCT
mit.mit_vname + ' ' + mit.mit_nname AS name
FROM tblMessenger_ChatMembers m2
INNER JOIN tblMitarbeiter mit
ON mit.mit_id = m2.chatMb_maId
WHERE m2.chatMb_chatId = c.chat_id
AND m2.chatMb_maId <> " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
) x
) names
OUTER APPLY (
SELECT COUNT(*) AS ungelesen
FROM tblMessenger_ChatMessages msg
INNER JOIN tblMessenger_ChatMessageStatus s
ON s.chatMgSt_chatMsgId = msg.chatMg_id
WHERE msg.chatMg_chatId = c.chat_id
AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
AND s.chatMgSt_gelesen = 0
) unread
WHERE c.chat_aktiv = 1
" & unreadFilter & "
" & where & "
ORDER BY c.chat_lastMsg DESC
) y
" & whereName & "
ORDER BY y.chat_lastMsg DESC"
.DataSource = SQL.loadDgvBySql(sqlQery_optimiced, "ADMIN")
@@ -87,6 +119,7 @@ Public Class usrCntlMessenger_ListNewChats
.Columns("chat_lastMsg").Visible = False
.Columns("chat_name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
.Columns("chat_art").HeaderText = "ART"
.Columns("chat_art").Width = 50
.Columns("ungelesen").Width = 30
.Columns("ungelesen").HeaderText = "neu"
.Columns("ungelesen").DefaultCellStyle.ForeColor = Color.White
@@ -137,7 +170,35 @@ Public Class usrCntlMessenger_ListNewChats
' Next
'End If
.ClearSelection()
' Falls zuvor eine Zeile markiert war, wieder auswählen und in Sicht bringen
If prevSelectedId > -1 Then
Try
For Each rr As DataGridViewRow In .Rows
Dim vid = rr.Cells("chat_id").Value
If vid IsNot Nothing AndAlso vid IsNot DBNull.Value AndAlso IsNumeric(vid) Then
If CInt(vid) = prevSelectedId Then
.ClearSelection()
Dim colIndex As Integer = .Columns("chat_name").Index
If Not .Rows(rr.Index).Cells(colIndex).Visible Then
colIndex = .FirstDisplayedCell.ColumnIndex
End If
.CurrentCell = .Rows(rr.Index).Cells(colIndex)
.Rows(rr.Index).Selected = True
.FirstDisplayedScrollingRowIndex = Math.Max(0, rr.Index - 2)
Exit For
End If
End If
Next
Catch
' ignore
End Try
End If
End With
' If Not selFirst Then rtbChatMessage.Focus()
@@ -150,12 +211,15 @@ Public Class usrCntlMessenger_ListNewChats
Private Sub TimerNEW_MESSAGE_Tick(sender As Object, e As EventArgs) Handles TimerNEW_MESSAGE.Tick
intiDGVChats()
End Sub
Private Sub MyDatagridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChats.CellDoubleClick '.CellContentClick
For Each openForm In Application.OpenForms()
If TypeOf (openForm) Is VERAG_PROG_ALLGEMEIN.frmMessenger Then
CType(openForm, VERAG_PROG_ALLGEMEIN.frmMessenger).WindowState = FormWindowState.Normal
'CType(openForm, VERAG_PROG_ALLGEMEIN.frmMessenger).setchatId
CType(openForm, VERAG_PROG_ALLGEMEIN.frmMessenger).BringToFront()
CType(openForm, VERAG_PROG_ALLGEMEIN.frmMessenger).intiDGVChats(dgvChats.SelectedRows(0).Cells("chat_id").Value, True, False, dgvChats.SelectedRows(0).Cells("chat_art").Value)
Exit Sub
End If
Next
@@ -163,5 +227,27 @@ Public Class usrCntlMessenger_ListNewChats
Dim f As New VERAG_PROG_ALLGEMEIN.frmMessenger()
f.Location = Cursor.Position
f.Show()
Application.DoEvents()
f.intiDGVChats(dgvChats.SelectedRows(0).Cells("chat_id").Value, True, False, dgvChats.SelectedRows(0).Cells("chat_art").Value)
End Sub
Private Sub dgvChats_CellPainting(sender As Object, e As DataGridViewCellPaintingEventArgs) Handles dgvChats.CellPainting
Try
If dgvChats.Columns.Count > 0 Then
If e.ColumnIndex = dgvChats.Columns("ungelesen").Index Then
If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> 0 Then ' If dgvChats.Rows(e.RowIndex).Cells("ungelesen").Value <> "" Then
dgvChats.Rows(e.RowIndex).Cells("ungelesen").Style.BackColor = Color.Red
End If
End If
End If
Catch ex As Exception
VERAG_PROG_ALLGEMEIN.cErrorHandler.ERR(ex.Message, ex.StackTrace, System.Reflection.MethodInfo.GetCurrentMethod.Name)
End Try
End Sub
End Class