254 lines
10 KiB
VB.net
254 lines
10 KiB
VB.net
Imports System.Drawing
|
|
Imports System.Windows.Forms
|
|
Imports com.sun.xml.internal.ws.resources
|
|
|
|
Public Class usrCntlMessenger_ListNewChats
|
|
|
|
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
|
|
|
Sub intiDGVChats(Optional dgv_ChatID = -1, Optional reloadChat = True, Optional selFirst = False, Optional GeleseneAnzeigen = True)
|
|
|
|
|
|
|
|
With dgvChats
|
|
'Dim loadedTmp = loaded
|
|
'If Not reloadChat Then
|
|
' 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 & "%' "
|
|
'End If
|
|
|
|
Dim where = ""
|
|
'Select Case toggle_CHAT_ART
|
|
' Case "CHAT"
|
|
' where = " AND chat_art IN ('CHAT') "
|
|
' 'Case "LKW_CHAT"
|
|
' ' where = " AND chat_art IN ('LKW_CHAT') "
|
|
' Case Else
|
|
' where = " AND chat_art IN ('" & toggle_CHAT_ART & "') "
|
|
'End Select
|
|
|
|
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")
|
|
|
|
If .Columns.Count = 0 Then Exit Sub
|
|
|
|
.Columns("chat_id").Visible = False
|
|
.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
|
|
.Columns("ungelesen").DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
|
|
.Columns("ungelesen").DefaultCellStyle.Font = New Font(.Font.FontFamily, 7, FontStyle.Bold)
|
|
|
|
dgvChats.GetOrder()
|
|
|
|
If selFirst Then
|
|
|
|
'dgvChats.ClearSelection()
|
|
'SplitContainer1.Enabled = False
|
|
|
|
'If .Rows.Count > 0 Then
|
|
' loaded = True
|
|
' SplitContainer1.Enabled = True
|
|
' .Rows(0).Selected = True
|
|
'End If
|
|
'loaded = loadedTmp
|
|
Else
|
|
|
|
|
|
|
|
dgvChats.ClearSelection()
|
|
'If dgv_ChatID > 0 Then
|
|
' For Each r As DataGridViewRow In .Rows
|
|
' If r.Cells("chat_id").Value = dgv_ChatID Then
|
|
' dgvChats.ClearSelection()
|
|
' r.Selected = True : Exit For
|
|
' End If
|
|
' Next
|
|
'End If
|
|
'loaded = loadedTmp
|
|
|
|
End If
|
|
dgvChats.SetOrder()
|
|
If dgvChats.SelectedRows.Count > 0 Then dgvChats.FirstDisplayedCell = dgvChats.SelectedRows(0).Cells("chat_name")
|
|
'dgvChats.ClearSelection()
|
|
'SplitContainer1.Enabled = False
|
|
|
|
'If dgv_ChatID > 0 Then
|
|
' For Each r As DataGridViewRow In .Rows
|
|
' If r.Cells("chat_id").Value = dgv_ChatID Then
|
|
' dgvChats.ClearSelection()
|
|
' SplitContainer1.Enabled = True
|
|
' r.Selected = True : Exit For
|
|
' End If
|
|
' 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()
|
|
|
|
End Sub
|
|
|
|
Private Sub usrCntlMessenger_ListNewChats_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
intiDGVChats()
|
|
TimerNEW_MESSAGE.Enabled = True
|
|
End Sub
|
|
|
|
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
|
|
|
|
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
|