spedbuch
This commit is contained in:
@@ -44,6 +44,8 @@ Public Class cGlobal
|
||||
|
||||
Public Const SND_Status_Ankunft = 3 '?
|
||||
|
||||
Public Shared CHAT_NurGelesen = False
|
||||
|
||||
Shared Function getStatusText(i As Integer) As String
|
||||
Select Case i
|
||||
Case 0 : Return "Erfasst"
|
||||
|
||||
@@ -1070,7 +1070,7 @@ Public Class SQL
|
||||
End Function
|
||||
|
||||
|
||||
Public Function loadDgvBySql_Param(ByVal sql As String, Optional conn_art As String = "SDL", Optional timeout As Integer = 0, Optional list As List(Of SQLVariable) = Nothing, Optional showErr As Boolean = True, Optional ByRef errOccured As Boolean = False) As DataTable
|
||||
Public Function loadDgvBySql_Param(ByVal sql As String, Optional conn_art As String = "SDL", Optional timeout As Integer = 0, Optional list As List(Of SQLVariable) = Nothing, Optional showErr As Boolean = True, Optional ByRef errOccured As Boolean = False, Optional ByRef maxVersuche As Integer = 3) As DataTable
|
||||
Try
|
||||
Dim myTable = New DataTable()
|
||||
Dim conn As New SqlConnection
|
||||
@@ -1088,20 +1088,46 @@ Public Class SQL
|
||||
Case "WEB" : conn = GetNewOpenConnectionWEB()
|
||||
End Select
|
||||
|
||||
' Using conn As SqlConnection = GetNewOpenConnection()
|
||||
Using cmd As New SqlCommand(sql, conn)
|
||||
If list IsNot Nothing Then
|
||||
For Each i In list
|
||||
'MsgBox(i.Text.trim & " " & IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||
cmd.Parameters.AddWithValue("@" & i.Scalarvariable.trim, IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||
Next
|
||||
End If
|
||||
If timeout > 0 Then cmd.CommandTimeout = timeout
|
||||
Dim dr As SqlDataReader = cmd.ExecuteReader()
|
||||
Dim versuch As Integer = 0
|
||||
|
||||
Do
|
||||
versuch += 1
|
||||
Try
|
||||
Using cmd As New SqlCommand(sql, conn)
|
||||
If list IsNot Nothing Then
|
||||
For Each i In list
|
||||
cmd.Parameters.AddWithValue("@" & i.Scalarvariable.Trim, If(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||
Next
|
||||
End If
|
||||
If timeout > 0 Then cmd.CommandTimeout = timeout
|
||||
|
||||
Using dr As SqlDataReader = cmd.ExecuteReader()
|
||||
myTable.Load(dr)
|
||||
End Using
|
||||
End Using
|
||||
Exit Do ' Erfolgreich
|
||||
|
||||
Catch ex As SqlException When ex.Number = 1205 AndAlso versuch < maxVersuche
|
||||
If versuch >= maxVersuche Then Throw
|
||||
Threading.Thread.Sleep(200 * versuch)
|
||||
End Try
|
||||
Loop
|
||||
|
||||
'' Using conn As SqlConnection = GetNewOpenConnection()
|
||||
'Using cmd As New SqlCommand(sql, conn)
|
||||
'If list IsNot Nothing Then
|
||||
' For Each i In list
|
||||
' 'MsgBox(i.Text.trim & " " & IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||
' cmd.Parameters.AddWithValue("@" & i.Scalarvariable.trim, IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||
' Next
|
||||
'End If
|
||||
'If timeout > 0 Then cmd.CommandTimeout = timeout
|
||||
'Dim dr As SqlDataReader = cmd.ExecuteReader()
|
||||
|
||||
'myTable.Load(dr)
|
||||
' dr.Close()
|
||||
|
||||
|
||||
myTable.Load(dr)
|
||||
dr.Close()
|
||||
End Using
|
||||
conn.Close()
|
||||
' End Using
|
||||
Return myTable 'While Schleife wird hier verlassen
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -21,6 +21,8 @@ Public Class cRelayHub
|
||||
Public Property declarationType As String
|
||||
Public Property referenceNumberOverlay As String ' <--- NEU
|
||||
Public Property username As String ' <--- NEU
|
||||
Public Property avisoId As String ' <--- NEU
|
||||
Public Property shipmentId As String ' <--- NEU
|
||||
End Class
|
||||
|
||||
Public Class cRelayHubDv1CostAllocation
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
Imports System.Net.Http
|
||||
Imports System.Net.Http.Headers
|
||||
Imports System.Text
|
||||
Imports System.Text.Json
|
||||
Imports System.Threading.Tasks
|
||||
Imports System.Windows.Forms
|
||||
Imports Newtonsoft.Json
|
||||
Imports Newtonsoft.Json.Linq
|
||||
|
||||
Public Class cOpenAI
|
||||
@@ -10,6 +13,8 @@ Public Class cOpenAI
|
||||
Shared apiKey As String = "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"
|
||||
Shared apiUrl As String = "https://api.openai.com/v1/responses"
|
||||
|
||||
Shared apiKey_VERAG_Herbert As String = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImRmNjg2ZmY2LTJiMjYtNDIxYS1iMTQzLThmNzFmY2I3YjA1ZiIsImV4cCI6MTc4NTkxNzUxMCwianRpIjoiOTViM2MxZGQtMjcxMC00YWY0LTgxMGUtYzVjYWFhODdmNTM2IiwiaWF0IjoxNzgzNDk4MzEwfQ.OJ_GDpZs3Zxv7VvEpKHPjNn8jkJStkm_ruFtmqk_SiE"
|
||||
|
||||
Shared Sub doFirstAI()
|
||||
'Dim frage As String = "Wie viele Tage braucht ein Versandschein von Istanbul nach München? Gib nur die Zahl zurück."
|
||||
Dim frage As String = "Schreibe ein HAIKO über AI."
|
||||
@@ -67,7 +72,7 @@ Public Class cOpenAI
|
||||
|
||||
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
|
||||
Public Shared Function AskOpenAI(question As String,
|
||||
Optional maxOutputTokens As Integer = 1000) As String
|
||||
Optional maxOutputTokens As Integer = 1000, Optional model As String = "gpt-4.1-mini") As String
|
||||
|
||||
Try
|
||||
Using client As New HttpClient()
|
||||
@@ -76,7 +81,7 @@ Public Class cOpenAI
|
||||
New AuthenticationHeaderValue("Bearer", apiKey.Trim())
|
||||
|
||||
Dim requestJson As New JObject From {
|
||||
{"model", "gpt-4.1-mini"},
|
||||
{"model", model},
|
||||
{"input", question},
|
||||
{"max_output_tokens", maxOutputTokens}
|
||||
}
|
||||
@@ -143,6 +148,254 @@ Public Class cOpenAI
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
|
||||
Public Shared Function AskVERAG_HerbertAI(question As String,
|
||||
Optional maxOutputTokens As Integer = 1000) As String
|
||||
|
||||
Using client As New HttpClient()
|
||||
|
||||
'client.BaseAddress = New Uri("http://192.168.0.215:11434/")
|
||||
client.BaseAddress = New Uri("http://192.168.0.215:8000/v1/")
|
||||
|
||||
client.DefaultRequestHeaders.Authorization =
|
||||
New AuthenticationHeaderValue("Bearer", apiKey_VERAG_Herbert)
|
||||
'Qwen/Qwen2.5-14B-Instruct
|
||||
Dim payload = New With {
|
||||
.model = "Herbert",
|
||||
.messages = New Object() {
|
||||
New With {.role = "system", .content = "Du bist ein hilfreicher Assistent."},
|
||||
New With {.role = "user", .content = question}
|
||||
},
|
||||
.temperature = 0.2,
|
||||
.max_tokens = maxOutputTokens,
|
||||
.stream = False
|
||||
}
|
||||
|
||||
Dim json As String = JsonConvert.SerializeObject(payload)
|
||||
Dim content As New StringContent(json, Encoding.UTF8, "application/json")
|
||||
|
||||
Dim response As HttpResponseMessage =
|
||||
client.PostAsync("http://192.168.0.215:8000/v1/chat/completions", content).
|
||||
GetAwaiter().
|
||||
GetResult()
|
||||
|
||||
Dim resultJson As String =
|
||||
response.Content.ReadAsStringAsync().GetAwaiter().GetResult()
|
||||
|
||||
If Not response.IsSuccessStatusCode Then
|
||||
Throw New Exception("OpenWebUI Fehler: " & response.StatusCode.ToString() & vbCrLf & resultJson)
|
||||
End If
|
||||
|
||||
Dim obj As JObject = JObject.Parse(resultJson)
|
||||
|
||||
Return obj("choices")(0)("message")("content").ToString()
|
||||
|
||||
End Using
|
||||
|
||||
End Function
|
||||
|
||||
Shared Function askAI_Kontakdaten_WebResearch(eingabe As String) As String
|
||||
|
||||
Dim prompt As String =
|
||||
"Du bist ein B2B Contact Finder.
|
||||
|
||||
Such im Web nach den Kontaktdaten, vorwiegend Telefon + Mail
|
||||
Accurancy ist die Wahrscheinlcihkeit, dass es sich um das gescuht UNternehmen handelt;
|
||||
|
||||
Ausgabeformat:
|
||||
|
||||
Treffer 1
|
||||
|
||||
Quelle:
|
||||
Unternehmen:
|
||||
Website:
|
||||
Telefon:
|
||||
E-Mail:
|
||||
Adresse:
|
||||
Accurancy:
|
||||
|
||||
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
|
||||
Jeder Treffer muss vollständig von einer Quelle sein sein.
|
||||
|
||||
|
||||
Kein eindeutiger Treffer möglich.
|
||||
Grund: ...
|
||||
|
||||
EINGABE: [[" & eingabe & "]]
|
||||
|
||||
"
|
||||
|
||||
Console.WriteLine(prompt)
|
||||
Return AskOpenAI(prompt, 10000, "gpt-5.5")
|
||||
|
||||
End Function
|
||||
Shared Function askAI_HERBERT_Allg(prompt As String) As String
|
||||
|
||||
|
||||
|
||||
Console.WriteLine(prompt)
|
||||
|
||||
Dim antwort As String = AskVERAG_HerbertAI(prompt, 2500)
|
||||
|
||||
|
||||
|
||||
Console.WriteLine(antwort)
|
||||
|
||||
Return antwort
|
||||
|
||||
End Function
|
||||
Shared Function askAI_HERBERT_Kontakdaten_WebResearch(eingabe As String) As String
|
||||
|
||||
Dim prompt As String =
|
||||
"Du bist ein B2B Contact Finder.
|
||||
|
||||
HARTE REGEL:
|
||||
Jeder Treffer darf ausschließlich Daten aus einer einzigen Quelle enthalten.
|
||||
Standardquelle ist die offizielle Unternehmenswebsite.
|
||||
Das Mischen von Website, Telefonnummer, E-Mail-Adresse oder Adresse aus unterschiedlichen Quellen ist verboten.
|
||||
|
||||
Ziel:
|
||||
Finde möglichst schnell die Telefonnummer und E-Mail-Adresse eines Unternehmens.
|
||||
|
||||
Eingabe:
|
||||
Die Eingabe ist unstrukturiert und kann Firmenname, Ort, PLZ, Land, Website, Telefonnummer, E-Mail oder Freitext enthalten.
|
||||
|
||||
Arbeitsweise:
|
||||
|
||||
Identifiziere das wahrscheinlich richtige Unternehmen.
|
||||
Ermittle die offizielle Website.
|
||||
Verwende danach ausschließlich diese Website als Quelle.
|
||||
Suche dort zuerst auf der Kontaktseite, danach im Impressum.
|
||||
Telefon, E-Mail und Adresse dürfen nur ausgegeben werden, wenn sie auf derselben offiziellen Website gefunden wurden.
|
||||
Sobald Telefonnummer oder E-Mail gefunden wurden, beende die Recherche.
|
||||
Nur wenn keine offizielle Website eindeutig gefunden wird, verwende Google Maps als einzige alternative Quelle.
|
||||
Wenn Google Maps verwendet wird, dürfen alle ausgegebenen Daten nur aus Google Maps stammen.
|
||||
Nutze keine weiteren Quellen.
|
||||
Recherchiere keine Ansprechpartner.
|
||||
|
||||
Regeln:
|
||||
|
||||
Ein Treffer = eine Quelle.
|
||||
Keine Daten aus mehreren Quellen kombinieren.
|
||||
Verwende nur Informationen, die eindeutig demselben Unternehmen zugeordnet sind.
|
||||
Erfinde keine Daten.
|
||||
Rate keine Telefonnummern, E-Mail-Adressen, Domains oder Adressen.
|
||||
Korrigiere keine Domains durch Vermutung.
|
||||
Bei Unsicherheit Information weglassen.
|
||||
Wenn nur Telefon gefunden wird, gib nur Telefon aus.
|
||||
Wenn nur E-Mail gefunden wird, gib nur E-Mail aus.
|
||||
Keine Platzhalter wie N/A, unbekannt oder nicht gefunden.
|
||||
Keine Faxnummern, Handelsregisterdaten, Rechtsform, Branche, Umsatz oder UID.
|
||||
Ausgabe kurz und ohne Fließtext.
|
||||
|
||||
Ausgabeformat:
|
||||
|
||||
Treffer 1
|
||||
|
||||
Quelle:
|
||||
Unternehmen:
|
||||
Website:
|
||||
Telefon:
|
||||
E-Mail:
|
||||
Adresse:
|
||||
|
||||
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
|
||||
Jeder Treffer muss vollständig quellenrein sein.
|
||||
|
||||
Falls kein eindeutiger Treffer möglich ist:
|
||||
|
||||
Kein eindeutiger Treffer möglich.
|
||||
Grund: ...
|
||||
|
||||
EINGABE: [[" & eingabe & "]]
|
||||
|
||||
"
|
||||
|
||||
|
||||
Console.WriteLine(prompt)
|
||||
|
||||
Dim antwort As String = AskVERAG_HerbertAI(prompt, 2500)
|
||||
|
||||
|
||||
|
||||
Console.WriteLine(antwort)
|
||||
|
||||
Return antwort
|
||||
|
||||
End Function
|
||||
Shared Function askAI_Kontakdaten_WebResearcADVh(eingabe As String) As String
|
||||
|
||||
Dim prompt As String =
|
||||
"Du bist ein B2B Contact Finder.
|
||||
|
||||
HARTE REGEL:
|
||||
Jeder Treffer darf ausschließlich Daten aus einer einzigen Quelle enthalten.
|
||||
Standardquelle ist die offizielle Unternehmenswebsite.
|
||||
Das Mischen von Website, Telefonnummer, E-Mail-Adresse oder Adresse aus unterschiedlichen Quellen ist verboten.
|
||||
|
||||
Ziel:
|
||||
Finde möglichst schnell die Telefonnummer und E-Mail-Adresse eines Unternehmens.
|
||||
|
||||
Eingabe:
|
||||
Die Eingabe ist unstrukturiert und kann Firmenname, Ort, PLZ, Land, Website, Telefonnummer, E-Mail oder Freitext enthalten.
|
||||
|
||||
Arbeitsweise:
|
||||
|
||||
Identifiziere das wahrscheinlich richtige Unternehmen.
|
||||
Ermittle die offizielle Website.
|
||||
Verwende danach ausschließlich diese Website als Quelle.
|
||||
Suche dort zuerst auf der Kontaktseite, danach im Impressum.
|
||||
Telefon, E-Mail und Adresse dürfen nur ausgegeben werden, wenn sie auf derselben offiziellen Website gefunden wurden.
|
||||
Sobald Telefonnummer oder E-Mail gefunden wurden, beende die Recherche.
|
||||
Nur wenn keine offizielle Website eindeutig gefunden wird, verwende Google Maps als einzige alternative Quelle.
|
||||
Wenn Google Maps verwendet wird, dürfen alle ausgegebenen Daten nur aus Google Maps stammen.
|
||||
Nutze keine weiteren Quellen.
|
||||
Recherchiere keine Ansprechpartner.
|
||||
|
||||
Regeln:
|
||||
|
||||
Ein Treffer = eine Quelle.
|
||||
Keine Daten aus mehreren Quellen kombinieren.
|
||||
Verwende nur Informationen, die eindeutig demselben Unternehmen zugeordnet sind.
|
||||
Erfinde keine Daten.
|
||||
Rate keine Telefonnummern, E-Mail-Adressen, Domains oder Adressen.
|
||||
Korrigiere keine Domains durch Vermutung.
|
||||
Bei Unsicherheit Information weglassen.
|
||||
Wenn nur Telefon gefunden wird, gib nur Telefon aus.
|
||||
Wenn nur E-Mail gefunden wird, gib nur E-Mail aus.
|
||||
Keine Platzhalter wie N/A, unbekannt oder nicht gefunden.
|
||||
Keine Faxnummern, Handelsregisterdaten, Rechtsform, Branche, Umsatz oder UID.
|
||||
Ausgabe kurz und ohne Fließtext.
|
||||
|
||||
Ausgabeformat:
|
||||
|
||||
Treffer 1
|
||||
|
||||
Quelle:
|
||||
Unternehmen:
|
||||
Website:
|
||||
Telefon:
|
||||
E-Mail:
|
||||
Adresse:
|
||||
|
||||
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
|
||||
Jeder Treffer muss vollständig quellenrein sein.
|
||||
|
||||
Falls kein eindeutiger Treffer möglich ist:
|
||||
|
||||
Kein eindeutiger Treffer möglich.
|
||||
Grund: ...
|
||||
|
||||
EINGABE: [[" & eingabe & "]]
|
||||
|
||||
"
|
||||
|
||||
Console.WriteLine(prompt)
|
||||
Return AskOpenAI(prompt, 10000, "gpt-5.5")
|
||||
|
||||
End Function
|
||||
|
||||
Shared Function askAI_Zolltarif(
|
||||
unternehmensbeschreibung As String,
|
||||
artikel As List(Of ZollArtikelInput)
|
||||
|
||||
@@ -370,9 +370,9 @@ Public Class cProgramFunctions
|
||||
Try
|
||||
Dim sql As String =
|
||||
"SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = '" & tableName & "'
|
||||
AND DATA_TYPE IN ('varchar','nvarchar','char','nchar','decimal','numeric','float','real')"
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_NAME = '" & tableName & "'
|
||||
AND DATA_TYPE IN ('varchar','nvarchar','char','nchar','decimal','numeric','float','real')"
|
||||
|
||||
Dim dt As DataTable =
|
||||
(New SQL).loadDgvBySql(sql, conn_art)
|
||||
@@ -404,6 +404,26 @@ Public Class cProgramFunctions
|
||||
Dim valueObj As Object = p.Value()
|
||||
Dim valueStr As String = valueObj.ToString
|
||||
|
||||
' -------------------------
|
||||
' BIT / BOOLEAN
|
||||
' -------------------------
|
||||
If dataType = "bit" Then
|
||||
|
||||
Select Case valueStr.Trim.ToLower
|
||||
Case "true"
|
||||
' gültig
|
||||
Case "false"
|
||||
' gültig
|
||||
Case "1", "0"
|
||||
' bereits gültig
|
||||
Case Else
|
||||
errors.Add(fieldName & " -> Ungültiger Bit-Wert: " & valueStr)
|
||||
End Select
|
||||
|
||||
Continue For
|
||||
End If
|
||||
|
||||
|
||||
' -------------------------
|
||||
' 1) TEXTFELDER
|
||||
' -------------------------
|
||||
@@ -413,6 +433,14 @@ Public Class cProgramFunctions
|
||||
|
||||
If maxLen = -1 Then Continue For ' varchar(max)
|
||||
|
||||
If maxLen = 1 Then
|
||||
If valueStr.Equals("true", StringComparison.OrdinalIgnoreCase) Then
|
||||
valueStr = "1"
|
||||
ElseIf valueStr.Equals("false", StringComparison.OrdinalIgnoreCase) Then
|
||||
valueStr = "0"
|
||||
End If
|
||||
End If
|
||||
|
||||
If valueStr.Length > maxLen Then
|
||||
errors.Add(fieldName & " -> " & valueStr.Length & "/" & maxLen)
|
||||
End If
|
||||
|
||||
Reference in New Issue
Block a user