spedbuch
This commit is contained in:
1389
SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb
generated
1389
SDL/Speditionsbuch/usrCntlSpeditionsBuchSuche.Designer.vb
generated
File diff suppressed because it is too large
Load Diff
@@ -127,6 +127,89 @@
|
|||||||
<value>431, 17</value>
|
<value>431, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="ToolStripMenuItem3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>
|
||||||
|
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
|
||||||
|
AElFTkSuQmCC
|
||||||
|
</value>
|
||||||
|
</data>
|
||||||
<data name="ToolStripMenuItem2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="ToolStripMenuItem2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAACH
|
||||||
|
|||||||
@@ -3652,21 +3652,24 @@ Public Class usrCntlSpeditionsBuchSuche
|
|||||||
Me.Cursor = Cursors.Default
|
Me.Cursor = Cursors.Default
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click
|
Private Sub ToolStripMenuItem2_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem2.Click, ToolStripMenuItem3.Click
|
||||||
Try
|
Try
|
||||||
|
Dim kdNr = -1
|
||||||
|
If sender Is ToolStripMenuItem2 Then
|
||||||
|
kdNr = 770931 'KANADEVIA
|
||||||
|
End If
|
||||||
Me.Cursor = Cursors.WaitCursor
|
Me.Cursor = Cursors.WaitCursor
|
||||||
Dim RPT As New cSpeditionsbuchReport
|
Dim RPT As New cSpeditionsbuchReport
|
||||||
|
|
||||||
|
|
||||||
If CheckBox4.Checked Then
|
If CheckBox4.Checked Then
|
||||||
RPT.RunReport_VERAG_ZA_DETAIL_FULL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere,, getSpedbuchList)
|
RPT.RunReport_VERAG_ZA_DETAIL_FULL(kdNr, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere,, getSpedbuchList)
|
||||||
|
|
||||||
ElseIf cbxDetailbericht.Checked Then
|
ElseIf cbxDetailbericht.Checked Then
|
||||||
RPT.RunReport_VERAG_ZA_DETAIL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere, , getSpedbuchList)
|
RPT.RunReport_VERAG_ZA_DETAIL(kdNr, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere, , getSpedbuchList)
|
||||||
|
|
||||||
Else
|
Else
|
||||||
RPT.RunReport_VERAG_ZA_GENERAL(770931, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere,, CheckBox5.Checked, getSpedbuchList)
|
RPT.RunReport_VERAG_ZA_GENERAL(kdNr, CDate(txtAbfertDat.Text), CDate(txtAbfertDatBis.Text), getSpedBuchWhere,, CheckBox5.Checked, getSpedbuchList)
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
@@ -3678,6 +3681,10 @@ Public Class usrCntlSpeditionsBuchSuche
|
|||||||
|
|
||||||
Me.Cursor = Cursors.Default
|
Me.Cursor = Cursors.Default
|
||||||
|
|
||||||
|
|
||||||
|
Exit Sub
|
||||||
|
Exit Sub
|
||||||
|
Exit Sub
|
||||||
Exit Sub
|
Exit Sub
|
||||||
|
|
||||||
|
|
||||||
@@ -3976,13 +3983,7 @@ Public Class usrCntlSpeditionsBuchSuche
|
|||||||
Me.Cursor = Cursors.Default
|
Me.Cursor = Cursors.Default
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Private Sub DataGridView_CellContentClick(sender As Object, e As DataGridViewCellEventArgs)
|
|
||||||
|
|
||||||
End Sub
|
|
||||||
|
|
||||||
Private Sub ToolStripMenuItem14_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItem14.Click
|
|
||||||
|
|
||||||
End Sub
|
|
||||||
End Class
|
End Class
|
||||||
Class cSpeditionsbuchReport
|
Class cSpeditionsbuchReport
|
||||||
|
|
||||||
@@ -4135,8 +4136,8 @@ Class cSpeditionsbuchReport
|
|||||||
"FROM Speditionsbuch " &
|
"FROM Speditionsbuch " &
|
||||||
"INNER JOIN [Abfertigungsarten] " &
|
"INNER JOIN [Abfertigungsarten] " &
|
||||||
" ON Speditionsbuch.Abfertigungsart = Abfertigungsarten.Abfertigungsart " &
|
" ON Speditionsbuch.Abfertigungsart = Abfertigungsarten.Abfertigungsart " &
|
||||||
"WHERE (EmpfängerKundenNr IN (" & KDNR & ") OR VermittlerKundenNr IN (" & KDNR & ")) " &
|
"WHERE 1=1 AND" & If(KDNR > 0, " (EmpfängerKundenNr IN (" & KDNR & ") OR VermittlerKundenNr IN (" & KDNR & ")) AND ", "") &
|
||||||
" AND Abfertigungsdatum BETWEEN '" & AbfVon.ToShortDateString & "' AND '" & AbfBis.ToShortDateString & "' " &
|
" Abfertigungsdatum BETWEEN '" & AbfVon.ToShortDateString & "' AND '" & AbfBis.ToShortDateString & "' " &
|
||||||
" AND isAbfertigung = 1 "
|
" AND isAbfertigung = 1 "
|
||||||
|
|
||||||
Return SQL.loadDgvBySql_Param(sqlText & " " & whereStr, "FMZOLL",, list)
|
Return SQL.loadDgvBySql_Param(sqlText & " " & whereStr, "FMZOLL",, list)
|
||||||
|
|||||||
@@ -389,8 +389,9 @@ Public Class usrCntlATLAS_EZA
|
|||||||
' cdy.EZA_AbgangsDienststellennummer = "DE004102"
|
' cdy.EZA_AbgangsDienststellennummer = "DE004102"
|
||||||
'frmZollanmeldung.setAbgangszollstelle(cdy.eza_Eingangszollstelle, AVISO)
|
'frmZollanmeldung.setAbgangszollstelle(cdy.eza_Eingangszollstelle, AVISO)
|
||||||
frmZollanmeldung.setZollstelle(cdy.eza_AdressierteZollstelle, AVISO)
|
frmZollanmeldung.setZollstelle(cdy.eza_AdressierteZollstelle, AVISO)
|
||||||
If cdy.eza_AdressierteZollstelle IsNot Nothing AndAlso cdy.eza_AdressierteZollstelle.Length = 8 Then 'nur 4 stellen erlaubt!! 'DE00 fällt weg
|
|
||||||
EZA.eza_AdressierteZollstelle = cdy.eza_AdressierteZollstelle.Substring(4, 4)
|
If cdy.eza_AdressierteZollstelle IsNot Nothing AndAlso cdy.eza_AdressierteZollstelle.trim.Length = 8 Then 'nur 4 stellen erlaubt!! 'DE00 fällt weg
|
||||||
|
EZA.eza_AdressierteZollstelle = cdy.eza_AdressierteZollstelle.trim.Substring(4, 4)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
' cdy.EZA_VersendungsLandCode = "DE"
|
' cdy.EZA_VersendungsLandCode = "DE"
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ Public Class cGlobal
|
|||||||
|
|
||||||
Public Const SND_Status_Ankunft = 3 '?
|
Public Const SND_Status_Ankunft = 3 '?
|
||||||
|
|
||||||
|
Public Shared CHAT_NurGelesen = False
|
||||||
|
|
||||||
Shared Function getStatusText(i As Integer) As String
|
Shared Function getStatusText(i As Integer) As String
|
||||||
Select Case i
|
Select Case i
|
||||||
Case 0 : Return "Erfasst"
|
Case 0 : Return "Erfasst"
|
||||||
|
|||||||
@@ -1070,7 +1070,7 @@ Public Class SQL
|
|||||||
End Function
|
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
|
Try
|
||||||
Dim myTable = New DataTable()
|
Dim myTable = New DataTable()
|
||||||
Dim conn As New SqlConnection
|
Dim conn As New SqlConnection
|
||||||
@@ -1088,20 +1088,46 @@ Public Class SQL
|
|||||||
Case "WEB" : conn = GetNewOpenConnectionWEB()
|
Case "WEB" : conn = GetNewOpenConnectionWEB()
|
||||||
End Select
|
End Select
|
||||||
|
|
||||||
' Using conn As SqlConnection = GetNewOpenConnection()
|
Dim versuch As Integer = 0
|
||||||
|
|
||||||
|
Do
|
||||||
|
versuch += 1
|
||||||
|
Try
|
||||||
Using cmd As New SqlCommand(sql, conn)
|
Using cmd As New SqlCommand(sql, conn)
|
||||||
If list IsNot Nothing Then
|
If list IsNot Nothing Then
|
||||||
For Each i In list
|
For Each i In list
|
||||||
'MsgBox(i.Text.trim & " " & IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
cmd.Parameters.AddWithValue("@" & i.Scalarvariable.Trim, If(i.Value Is Nothing, DBNull.Value, i.Value))
|
||||||
cmd.Parameters.AddWithValue("@" & i.Scalarvariable.trim, IIf(i.Value Is Nothing, DBNull.Value, i.Value))
|
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
If timeout > 0 Then cmd.CommandTimeout = timeout
|
If timeout > 0 Then cmd.CommandTimeout = timeout
|
||||||
Dim dr As SqlDataReader = cmd.ExecuteReader()
|
|
||||||
|
|
||||||
|
Using dr As SqlDataReader = cmd.ExecuteReader()
|
||||||
myTable.Load(dr)
|
myTable.Load(dr)
|
||||||
dr.Close()
|
|
||||||
End Using
|
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()
|
||||||
|
|
||||||
|
|
||||||
conn.Close()
|
conn.Close()
|
||||||
' End Using
|
' End Using
|
||||||
Return myTable 'While Schleife wird hier verlassen
|
Return myTable 'While Schleife wird hier verlassen
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ Partial Class frmMessenger
|
|||||||
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
|
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
|
||||||
<System.Diagnostics.DebuggerStepThrough()>
|
<System.Diagnostics.DebuggerStepThrough()>
|
||||||
Private Sub InitializeComponent()
|
Private Sub InitializeComponent()
|
||||||
|
Me.components = New System.ComponentModel.Container()
|
||||||
Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
|
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 DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
|
||||||
Dim DataGridViewCellStyle3 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))
|
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmMessenger))
|
||||||
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
|
Me.SplitContainer = New System.Windows.Forms.SplitContainer()
|
||||||
Me.SplitContainer2 = 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.Panel6 = New System.Windows.Forms.Panel()
|
||||||
Me.Label3 = New System.Windows.Forms.Label()
|
Me.Label3 = New System.Windows.Forms.Label()
|
||||||
Me.lblLKWChat_MsgCntInaktiv = New System.Windows.Forms.Label()
|
Me.lblLKWChat_MsgCntInaktiv = New System.Windows.Forms.Label()
|
||||||
Me.cbxInaktiveChats = New System.Windows.Forms.CheckBox()
|
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.Panel5 = New System.Windows.Forms.Panel()
|
||||||
Me.MyTextBox2 = New VERAG_PROG_ALLGEMEIN.MyTextBox()
|
Me.MyTextBox2 = New VERAG_PROG_ALLGEMEIN.MyTextBox()
|
||||||
Me.PictureBox2 = New System.Windows.Forms.PictureBox()
|
Me.PictureBox2 = New System.Windows.Forms.PictureBox()
|
||||||
@@ -64,7 +65,7 @@ Partial Class frmMessenger
|
|||||||
Me.btnNeu = New System.Windows.Forms.Button()
|
Me.btnNeu = New System.Windows.Forms.Button()
|
||||||
Me.Button1 = New System.Windows.Forms.Button()
|
Me.Button1 = New System.Windows.Forms.Button()
|
||||||
Me.SplitContainer1 = New System.Windows.Forms.SplitContainer()
|
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.UsrCntlMessenger_ChatElement1 = New VERAG_PROG_ALLGEMEIN.usrCntlMessenger_ChatElement()
|
||||||
Me.Panel3 = New System.Windows.Forms.Panel()
|
Me.Panel3 = New System.Windows.Forms.Panel()
|
||||||
Me.btnTeilnehmer = New System.Windows.Forms.Button()
|
Me.btnTeilnehmer = New System.Windows.Forms.Button()
|
||||||
@@ -92,9 +93,9 @@ Partial Class frmMessenger
|
|||||||
Me.btnSendAtt = New System.Windows.Forms.Button()
|
Me.btnSendAtt = New System.Windows.Forms.Button()
|
||||||
Me.btnSenden = New System.Windows.Forms.Button()
|
Me.btnSenden = New System.Windows.Forms.Button()
|
||||||
Me.rtbChatMessage = New System.Windows.Forms.RichTextBox()
|
Me.rtbChatMessage = New System.Windows.Forms.RichTextBox()
|
||||||
Me.TimerNEW_MESSAGE = New System.Windows.Forms.Timer()
|
Me.TimerNEW_MESSAGE = New System.Windows.Forms.Timer(Me.components)
|
||||||
Me.Timer_REFRESH = New System.Windows.Forms.Timer()
|
Me.Timer_REFRESH = New System.Windows.Forms.Timer(Me.components)
|
||||||
Me.cntxt = New System.Windows.Forms.ContextMenuStrip()
|
Me.cntxt = New System.Windows.Forms.ContextMenuStrip(Me.components)
|
||||||
Me.ChatDeaktivierenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
|
Me.ChatDeaktivierenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.toolChatReminder = New System.Windows.Forms.ToolStripMenuItem()
|
Me.toolChatReminder = New System.Windows.Forms.ToolStripMenuItem()
|
||||||
Me.DataGridViewTextBoxColumn1 = New System.Windows.Forms.DataGridViewTextBoxColumn()
|
Me.DataGridViewTextBoxColumn1 = New System.Windows.Forms.DataGridViewTextBoxColumn()
|
||||||
|
|||||||
@@ -160,8 +160,11 @@ Public Class frmMessenger
|
|||||||
End If
|
End If
|
||||||
End Sub
|
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")
|
Dim newMsg = VERAG_PROG_ALLGEMEIN.cMessenger.GET_NewMSG_COUNT_ART(VERAG_PROG_ALLGEMEIN.cAllgemein.USRID, "CHAT")
|
||||||
UsrCntlChat_Art_Btn_MACHAT.setCnt(newMsg)
|
UsrCntlChat_Art_Btn_MACHAT.setCnt(newMsg)
|
||||||
@@ -1336,7 +1339,7 @@ Public Class frmMessenger
|
|||||||
If r.Cells("clmnMaId").Value <> VERAG_PROG_ALLGEMEIN.cAllgemein.USRID Then
|
If r.Cells("clmnMaId").Value <> VERAG_PROG_ALLGEMEIN.cAllgemein.USRID Then
|
||||||
For Each MB In CHAT.CHAT_MEMBERS
|
For Each MB In CHAT.CHAT_MEMBERS
|
||||||
If r.Cells("clmnMaId").Value = MB.chatMb_maId Then
|
If r.Cells("clmnMaId").Value = MB.chatMb_maId Then
|
||||||
ol.Add(MB)
|
ol.Remove(MB)
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
End If
|
End If
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
|
|
||||||
Dim SQL As New VERAG_PROG_ALLGEMEIN.SQL
|
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
|
' loaded = False
|
||||||
'End If
|
'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 = ""
|
Dim whereName = ""
|
||||||
'If MyTextBox1.Text.Trim <> String.Empty Then
|
'If MyTextBox1.Text.Trim <> String.Empty Then
|
||||||
' whereName = " WHERE y.chat_name LIKE '%" & MyTextBox1.Text.Trim & "%' "
|
' whereName = " WHERE y.chat_name LIKE '%" & MyTextBox1.Text.Trim & "%' "
|
||||||
@@ -31,9 +44,26 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
' where = " AND chat_art IN ('" & toggle_CHAT_ART & "') "
|
' where = " AND chat_art IN ('" & toggle_CHAT_ART & "') "
|
||||||
'End Select
|
'End Select
|
||||||
|
|
||||||
Dim sqlQery_optimiced As String = " SELECT * FROM (SELECT TOP 200
|
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,
|
c.chat_id,
|
||||||
c.chat_art,
|
|
||||||
|
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
|
CASE
|
||||||
WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name
|
WHEN ISNULL(c.chat_name, '') <> '' THEN c.chat_name
|
||||||
ELSE names.chat_name
|
ELSE names.chat_name
|
||||||
@@ -45,14 +75,12 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
|
|
||||||
FROM tblMessenger_Chat c
|
FROM tblMessenger_Chat c
|
||||||
|
|
||||||
-- ensure current user is member
|
|
||||||
INNER JOIN tblMessenger_ChatMembers m
|
INNER JOIN tblMessenger_ChatMembers m
|
||||||
ON m.chatMb_chatId = c.chat_id
|
ON m.chatMb_chatId = c.chat_id
|
||||||
AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
AND m.chatMb_maId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
||||||
|
|
||||||
-- 🔹 get participant names (distinct!)
|
|
||||||
OUTER APPLY (
|
OUTER APPLY (
|
||||||
SELECT STRING_AGG(name, ', ') AS chat_name
|
SELECT STRING_AGG(x.name, ', ') AS chat_name
|
||||||
FROM (
|
FROM (
|
||||||
SELECT DISTINCT
|
SELECT DISTINCT
|
||||||
mit.mit_vname + ' ' + mit.mit_nname AS name
|
mit.mit_vname + ' ' + mit.mit_nname AS name
|
||||||
@@ -64,7 +92,6 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
) x
|
) x
|
||||||
) names
|
) names
|
||||||
|
|
||||||
-- 🔹 unread count separated (no duplication!)
|
|
||||||
OUTER APPLY (
|
OUTER APPLY (
|
||||||
SELECT COUNT(*) AS ungelesen
|
SELECT COUNT(*) AS ungelesen
|
||||||
FROM tblMessenger_ChatMessages msg
|
FROM tblMessenger_ChatMessages msg
|
||||||
@@ -73,11 +100,16 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
WHERE msg.chatMg_chatId = c.chat_id
|
WHERE msg.chatMg_chatId = c.chat_id
|
||||||
AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
AND s.chatMgSt_MaId = " & VERAG_PROG_ALLGEMEIN.cAllgemein.USRID & "
|
||||||
AND s.chatMgSt_gelesen = 0
|
AND s.chatMgSt_gelesen = 0
|
||||||
) unread WHERE c.chat_aktiv = 1
|
) unread
|
||||||
AND ISNULL(unread.ungelesen, 0) > 0
|
|
||||||
" & where & " ORDER BY c.chat_lastMsg DESC) y " & whereName
|
|
||||||
|
|
||||||
|
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")
|
.DataSource = SQL.loadDgvBySql(sqlQery_optimiced, "ADMIN")
|
||||||
|
|
||||||
@@ -87,6 +119,7 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
.Columns("chat_lastMsg").Visible = False
|
.Columns("chat_lastMsg").Visible = False
|
||||||
.Columns("chat_name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
|
.Columns("chat_name").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
|
||||||
.Columns("chat_art").HeaderText = "ART"
|
.Columns("chat_art").HeaderText = "ART"
|
||||||
|
.Columns("chat_art").Width = 50
|
||||||
.Columns("ungelesen").Width = 30
|
.Columns("ungelesen").Width = 30
|
||||||
.Columns("ungelesen").HeaderText = "neu"
|
.Columns("ungelesen").HeaderText = "neu"
|
||||||
.Columns("ungelesen").DefaultCellStyle.ForeColor = Color.White
|
.Columns("ungelesen").DefaultCellStyle.ForeColor = Color.White
|
||||||
@@ -137,7 +170,35 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
' Next
|
' Next
|
||||||
'End If
|
'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
|
End With
|
||||||
' If Not selFirst Then rtbChatMessage.Focus()
|
' 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
|
Private Sub TimerNEW_MESSAGE_Tick(sender As Object, e As EventArgs) Handles TimerNEW_MESSAGE.Tick
|
||||||
intiDGVChats()
|
intiDGVChats()
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
Private Sub MyDatagridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChats.CellDoubleClick '.CellContentClick
|
Private Sub MyDatagridview1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvChats.CellDoubleClick '.CellContentClick
|
||||||
For Each openForm In Application.OpenForms()
|
For Each openForm In Application.OpenForms()
|
||||||
If TypeOf (openForm) Is VERAG_PROG_ALLGEMEIN.frmMessenger Then
|
If TypeOf (openForm) Is VERAG_PROG_ALLGEMEIN.frmMessenger Then
|
||||||
CType(openForm, VERAG_PROG_ALLGEMEIN.frmMessenger).WindowState = FormWindowState.Normal
|
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).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
|
Exit Sub
|
||||||
End If
|
End If
|
||||||
Next
|
Next
|
||||||
@@ -163,5 +227,27 @@ Public Class usrCntlMessenger_ListNewChats
|
|||||||
Dim f As New VERAG_PROG_ALLGEMEIN.frmMessenger()
|
Dim f As New VERAG_PROG_ALLGEMEIN.frmMessenger()
|
||||||
f.Location = Cursor.Position
|
f.Location = Cursor.Position
|
||||||
f.Show()
|
f.Show()
|
||||||
|
Application.DoEvents()
|
||||||
|
|
||||||
|
f.intiDGVChats(dgvChats.SelectedRows(0).Cells("chat_id").Value, True, False, dgvChats.SelectedRows(0).Cells("chat_art").Value)
|
||||||
End Sub
|
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
|
End Class
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ Public Class cRelayHub
|
|||||||
Public Property declarationType As String
|
Public Property declarationType As String
|
||||||
Public Property referenceNumberOverlay As String ' <--- NEU
|
Public Property referenceNumberOverlay As String ' <--- NEU
|
||||||
Public Property username As String ' <--- NEU
|
Public Property username As String ' <--- NEU
|
||||||
|
Public Property avisoId As String ' <--- NEU
|
||||||
|
Public Property shipmentId As String ' <--- NEU
|
||||||
End Class
|
End Class
|
||||||
|
|
||||||
Public Class cRelayHubDv1CostAllocation
|
Public Class cRelayHubDv1CostAllocation
|
||||||
|
|||||||
@@ -1,7 +1,10 @@
|
|||||||
Imports System.Net.Http
|
Imports System.Net.Http
|
||||||
Imports System.Net.Http.Headers
|
Imports System.Net.Http.Headers
|
||||||
Imports System.Text
|
Imports System.Text
|
||||||
|
Imports System.Text.Json
|
||||||
Imports System.Threading.Tasks
|
Imports System.Threading.Tasks
|
||||||
|
Imports System.Windows.Forms
|
||||||
|
Imports Newtonsoft.Json
|
||||||
Imports Newtonsoft.Json.Linq
|
Imports Newtonsoft.Json.Linq
|
||||||
|
|
||||||
Public Class cOpenAI
|
Public Class cOpenAI
|
||||||
@@ -10,6 +13,8 @@ Public Class cOpenAI
|
|||||||
Shared apiKey As String = "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"
|
Shared apiKey As String = "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"
|
||||||
Shared apiUrl As String = "https://api.openai.com/v1/responses"
|
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()
|
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 = "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."
|
Dim frage As String = "Schreibe ein HAIKO über AI."
|
||||||
@@ -67,7 +72,7 @@ Public Class cOpenAI
|
|||||||
|
|
||||||
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
|
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
|
||||||
Public Shared Function AskOpenAI(question As String,
|
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
|
Try
|
||||||
Using client As New HttpClient()
|
Using client As New HttpClient()
|
||||||
@@ -76,7 +81,7 @@ Public Class cOpenAI
|
|||||||
New AuthenticationHeaderValue("Bearer", apiKey.Trim())
|
New AuthenticationHeaderValue("Bearer", apiKey.Trim())
|
||||||
|
|
||||||
Dim requestJson As New JObject From {
|
Dim requestJson As New JObject From {
|
||||||
{"model", "gpt-4.1-mini"},
|
{"model", model},
|
||||||
{"input", question},
|
{"input", question},
|
||||||
{"max_output_tokens", maxOutputTokens}
|
{"max_output_tokens", maxOutputTokens}
|
||||||
}
|
}
|
||||||
@@ -143,6 +148,254 @@ Public Class cOpenAI
|
|||||||
|
|
||||||
End Function
|
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(
|
Shared Function askAI_Zolltarif(
|
||||||
unternehmensbeschreibung As String,
|
unternehmensbeschreibung As String,
|
||||||
artikel As List(Of ZollArtikelInput)
|
artikel As List(Of ZollArtikelInput)
|
||||||
|
|||||||
@@ -404,6 +404,26 @@ Public Class cProgramFunctions
|
|||||||
Dim valueObj As Object = p.Value()
|
Dim valueObj As Object = p.Value()
|
||||||
Dim valueStr As String = valueObj.ToString
|
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
|
' 1) TEXTFELDER
|
||||||
' -------------------------
|
' -------------------------
|
||||||
@@ -413,6 +433,14 @@ Public Class cProgramFunctions
|
|||||||
|
|
||||||
If maxLen = -1 Then Continue For ' varchar(max)
|
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
|
If valueStr.Length > maxLen Then
|
||||||
errors.Add(fieldName & " -> " & valueStr.Length & "/" & maxLen)
|
errors.Add(fieldName & " -> " & valueStr.Length & "/" & maxLen)
|
||||||
End If
|
End If
|
||||||
|
|||||||
Reference in New Issue
Block a user