Files
AVISO/Aviso/frmAddSendungsvermerkShort.vb
2026-03-26 09:32:59 +01:00

454 lines
17 KiB
VB.net

Imports System.Configuration
Imports System.IO
Imports System.Net
Imports System.Net.Mail
Imports System.Text
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Imports VERAG_PROG_ALLGEMEIN
Imports AVISO.AvisoStatusFunctions
Public Class frmAddSendungsvermerkShort
Dim AvisoDAL As New cAvisoDAL
Dim ADMIN As New cADMIN
Dim myAviso As New cAviso
Dim VermerkeDAL As New cVermerkeDAL
Dim aktChanged As Boolean = False
Dim Neuanlage As Boolean = False
Dim hStatus As Integer
Public SendungID As Integer = -1
Public AvisoID As Integer = -1
Private _anforderungCheckboxes As New List(Of CheckBox)
Private _backendBezeichnungByCodeId As New Dictionary(Of Integer, String)
Private Const BereichAngefordert As Integer = 2
Dim txtSendung As New TextBox
Public Sub New()
InitializeComponent()
Icon = cMeineFunktionenAVISO.GetProgrammIcon
End Sub
Public Sub New(AvisoID, SendungID)
InitializeComponent()
Me.AvisoID = AvisoID
Me.SendungID = SendungID
Icon = cMeineFunktionenAVISO.GetProgrammIcon
End Sub
Private Sub frmEintragVermerk_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
'Escape händisch abfangen und auf Abbruch-Taste legen
If e.KeyCode = Keys.Escape Then
' btnAbbruch.PerformClick()
Me.Close()
End If
If e.KeyCode = Keys.Return Then
btnOK.PerformClick()
End If
End Sub
Dim listentoCheckChange As Boolean = True
Sub selectionChanged(sender As Object, e As EventArgs)
If listentoCheckChange Then
listentoCheckChange = False
For Each c In Me.Controls
If c.GetType.Name.ToString = "RadioButton" Then
' DirectCast(c, RadioButton).Checked = False
End If
Next
' DirectCast(sender, RadioButton).Checked = True
listentoCheckChange = True
End If
End Sub
Private Sub frmEintragVermerk_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim pt As Point = Cursor.Position
Dim screenBounds As Rectangle = Screen.FromPoint(pt).WorkingArea
If pt.X + Me.Width > screenBounds.Right Then
pt.X = screenBounds.Right - Me.Width
End If
If pt.Y + Me.Height > screenBounds.Bottom Then
pt.Y = screenBounds.Bottom - Me.Height
End If
Me.Location = pt
VERAG_PROG_ALLGEMEIN.cAllgemein._TRANSLATE(Me)
For Each c In Me.Controls
If c.GetType.Name.ToString = "RadioButton" Then
AddHandler DirectCast(c, RadioButton).CheckedChanged, AddressOf selectionChanged
End If
Next
myAviso = AvisoDAL.LesenAviso(AvisoID, "")
If SendungID > 0 Then
txtSendung.Text = ADMIN.getValueTxtBySql(" SELECT convert(varchar(2),[tblSnd_PosUnterNr]) +' - ' +isnull([tblSnd_Empfaenger],'') FROM tblSendungen WHERE [tblSnd_SendungID]=" & SendungID & "", "AVISO")
Else
txtSendung.Text = "KOMPLETT"
End If
hStatus = myAviso.Status
If hStatus = cGlobal.Status_Vorbereitet Or hStatus = cGlobal.Status_Vorgeschrieben Or hStatus = cGlobal.Status_Erfasst Then
optSendungInVorbereitung.Visible = True
If hStatus = cGlobal.Status_Vorgeschrieben Then
optSendungInVorbereitung.Visible = False
End If
Else
optSendungInVorbereitung.Visible = False
End If
SetupDynamicAnforderungCheckboxes()
'bereits vorhandene Vermerke laden
'txtInfo.Text = VermerkeDAL.Vermerke_einlesen(myAviso.AvisoID)
Me.Text = "AKT " & myAviso.LKW_Nr & ""
' optKeineAuswahl.Checked = True
' optDokumente.Focus()
If VERAG_PROG_ALLGEMEIN.cBerechtignunen.CHECK_BERECHTIGUNG_bool("WARENORT", "AVISO") Then
For Each c As Control In Me.Controls
Dim enabledTmp = False
If c Is btnCLose Then enabledTmp = True
If c Is optFremd_SendungAvisiert Then enabledTmp = True
If c Is optFremd_ATB Then enabledTmp = True
If c Is optATAangefordert Then enabledTmp = True
If c Is txtDetail Then enabledTmp = True
If c Is btnOK Then enabledTmp = True
c.Enabled = enabledTmp
Next
End If
End Sub
' Private Sub btnAbbruch_Click(sender As System.Object, e As System.EventArgs) Handles btnAbbruch.Click
' Me.Close()
' End Sub
Private Sub SetupDynamicAnforderungCheckboxes()
_anforderungCheckboxes.Clear()
_backendBezeichnungByCodeId.Clear()
Dim dt As DataTable = Nothing
Try
dt = AvisoDAL.loadDataTableBySQL("SELECT [VermerkCodeId],[Bezeichnung],[FrontendBezeichnung],[AnforderungBereich] FROM [VermerkeCodes] WHERE [Anforderung]=1 ORDER BY [Bezeichnung]")
Catch
Try
dt = AvisoDAL.loadDataTableBySQL("SELECT [VermerkCodeId],[Bezeichnung],[AnforderungBereich] FROM [VermerkeCodes] WHERE [Anforderung]=1 ORDER BY [Bezeichnung]")
Catch
Return
End Try
End Try
If dt Is Nothing OrElse dt.Rows.Count = 0 Then
Return
End If
flpAngefordert.Controls.Clear()
For Each row As DataRow In dt.Rows
Dim id As Integer
Try
id = CInt(row("VermerkCodeId"))
Catch
Continue For
End Try
Dim bezeichnung = If(IsDBNull(row("Bezeichnung")), "", CStr(row("Bezeichnung"))).Trim()
If bezeichnung = "" Then Continue For
_backendBezeichnungByCodeId(id) = bezeichnung
Dim frontendBezeichnung = bezeichnung
If dt.Columns.Contains("FrontendBezeichnung") Then
frontendBezeichnung = If(IsDBNull(row("FrontendBezeichnung")), "", CStr(row("FrontendBezeichnung"))).Trim()
If frontendBezeichnung = "" Then frontendBezeichnung = bezeichnung
End If
Dim bereich As Integer = BereichAngefordert
Try
If Not IsDBNull(row("AnforderungBereich")) Then
bereich = CInt(row("AnforderungBereich"))
End If
Catch
End Try
If bereich = BereichAngefordert Then
Dim cb As New CheckBox()
cb.Text = frontendBezeichnung
cb.Tag = id
cb.Margin = New Padding(0, 0, 4, 0)
ConfigureAnforderungCheckbox(cb, flpAngefordert)
flpAngefordert.Controls.Add(cb)
_anforderungCheckboxes.Add(cb)
End If
Next
End Sub
Private Sub ConfigureAnforderungCheckbox(cb As CheckBox, container As Control)
If cb Is Nothing OrElse container Is Nothing Then Return
cb.AutoSize = False
cb.Height = 18
Dim cols As Integer = 2
Dim colGap As Integer = 14
Dim minCbWidth As Integer = 180
Dim usableWidth = Math.Max(120, container.Width - 20)
Dim cbWidth = CInt(Math.Floor((usableWidth - ((cols - 1) * colGap)) / cols))
cb.Width = Math.Max(minCbWidth, Math.Min(cbWidth, 220))
End Sub
Private Sub txtFeld_GotFocus(sender As Object, e As System.EventArgs) Handles txtFreierText.GotFocus, txtSpedition.GotFocus
CType(sender, TextBox).SelectAll()
End Sub
Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click
If insertVermerke() Then
'Jetzt wird Fenster geschlossen
frmHauptfenster.avisoAktualisierenAktiveIdBehalten(myAviso.AvisoID)
Me.Close()
End If
End Sub
Function insertVermerke() As Boolean
If txtDetail.Text <> "" Then
If txtDetail.Text.Length > 240 Then
showErr(lblErr240Zeichen)
txtDetail.Focus()
Return False
End If
End If
'Plausibilität prüfen
If optFreierText.Checked Then
If txtFreierText.Text.Trim = "" Then
showErr(lblErrGrund)
txtFreierText.Focus()
Return False
End If
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtFreierText.Text.Trim & " - offen", 101)
End If
For Each cb In _anforderungCheckboxes
If cb IsNot Nothing AndAlso cb.Checked Then
Dim codeId As Integer = 0
If Integer.TryParse(If(cb.Tag, "").ToString(), codeId) Then
Dim text = ""
If _backendBezeichnungByCodeId.ContainsKey(codeId) Then
text = If(_backendBezeichnungByCodeId(codeId), "").Trim()
End If
If text = "" Then text = cb.Text.Trim()
Dim sendText = txtSendung.Text.Trim()
If text <> "" AndAlso sendText <> "" AndAlso InStr(text, "sendung", CompareMethod.Text) = 0 Then
text &= " bei Sendung '" & sendText & "'"
End If
If text <> "" Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, text, codeId)
End If
End If
End If
Next
If optFremd_ATB.Checked Then insertSendungsVermerk(SendungID, myAviso.AvisoID, "ATB von Fremdeinsteller erhalten bei Sendung '" & txtSendung.Text.Trim & "' ", 72)
If optFremd_SendungAvisiert.Checked Then insertSendungsVermerk(SendungID, myAviso.AvisoID, "Sendung '" & txtSendung.Text.Trim & "' an Fremdeinsteller avisiert", 73)
' If optSndUmmelden.Checked Then insertSendungsVermerk(SendungID, myAviso.AvisoID, "Sendung '" & txtSendung.Text.Trim & "' umgemeldet", 94)
If optSpeditionWeitergeleitet.Checked = True Then
If txtSpedition.Text.Trim = "" Then
showErr(lblErrSpedition)
txtSpedition.Focus()
Return False
End If
insertSendungsVermerk(SendungID, myAviso.AvisoID, "Fahrer muss die Sendung bei '" & txtSpedition.Text.Trim & "' abfertigen - weitergeleitet", 28)
End If
If optSendungInVorbereitung.Checked = True Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, "Sendung '" & txtSendung.Text.Trim & "' in Vorbereitung.", 31)
VermerkeDAL.UpdateSendungVorbereitet(AvisoID, SendungID, VERAG_PROG_ALLGEMEIN.cGlobal.AktiverMitarbeiter.MitarbeiterID, True)
End If
' If optSendungVorbereitet.Checked = True Then
'insertSendungsVermerk(SendungID,myAviso.AvisoID, "Sendung '" & txtSendung.Text.Trim & "' Vorbereitung abgeschlossen.", 32)
' VermerkeDAL.UpdateSendungVorbereitet(AvisoID, SendungID, VERAG_PROG_ALLGEMEIN.cglobal.AktiverMitarbeiter.MitarbeiterID, False)
'End If
If optATAangefordert.Checked = True Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, "ATA/ATC-Nr. bei Sendung " & txtSendung.Text.Trim & " - angefordert", 33)
' ElseIf optATAerhalten.Checked = True Then
' If txtSendung.Text.Trim = "" Then
'showErr(lblErrSendungProbleme)
' txtSendung.Focus()
' Return False
' End If
'insertSendungsVermerk(SendungID,myAviso.AvisoID,"ATA-Nr. bei Sendung " & txtSendung.Text.Trim & " erhalten", 34)
End If
'If cbxDispoliste.Checked = True Then insertSendungsVermerk(SendungID, myAviso.AvisoID, "Dispoliste bei " & txtSendung.Text.Trim & " angefordert", 57)
'If optFach.Checked = True Then
' If txtFach.Text.Trim = "" Then
' showErr(lblErrFach)
' txtFach.Focus()
' Return False
' End If
' insertSendungsVermerk(SendungID,myAviso.AvisoID, "Akt liegt im Fach '" & txtFach.Text.Trim & "'", 35)
'End If
If txtDetail.Text <> "" Then
If txtDetail.Text.Length <= 80 Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text, 46)
ElseIf txtDetail.Text.Length <= 160 Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text.Substring(0, 80), 46)
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text.Substring(80, 80), 46)
ElseIf txtDetail.Text.Length <= 240 Then
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text.Substring(0, 80), 46)
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text.Substring(80, 80), 46)
insertSendungsVermerk(SendungID, myAviso.AvisoID, txtDetail.Text.Substring(160, 80), 46)
End If
End If
Return True
End Function
Sub insertVermerk(Text As String, VermerkCodeId As Integer, Optional Beschreibung As String = "")
'Daten zuweisen und speichern
Dim myVermerk As New cVermerk
myVermerk.VermerkID = 0
myVermerk.AvisoID = myAviso.AvisoID
myVermerk.Datum = Now
myVermerk.Mitarbeiter = cGlobal.AktiverMitarbeiter.Mitarbeiter
myVermerk.MitarbeiterId = cGlobal.AktiverMitarbeiter.MitarbeiterID
myVermerk.Hinweis_Vermerk = Text
myVermerk.VermerkCodeId = VermerkCodeId
myVermerk.VermerkArt = "A"
VermerkeDAL.SpeichernVermerk(myVermerk)
If myVermerk.VermerkCodeId = 18 Then
VermerkeDAL.UpdateLKW(myVermerk.AvisoID, False)
frmHauptfenster.avisoAktualisierenAktiveIdBehalten(myVermerk.AvisoID)
End If
End Sub
Sub showErr(l As Label)
' lblErrFach.Visible = False
lblErrGrund.Visible = False
' lblErrSendungProbleme.Visible = False
' lblErrSendungSpedition.Visible = False
'lblErrSendungVorbereitung.Visible = False
lblErrSpedition.Visible = False
l.Visible = True
End Sub
Private Sub txtFreierText_TextChanged(sender As Object, e As EventArgs) Handles txtFreierText.TextChanged
If txtFreierText.Text <> "" Then
optFreierText.Checked = True
End If
End Sub
' Private Sub cboDokumente_SelectedIndexChanged(sender As Object, e As EventArgs)
' cboDokumente.SelectedIndex = CInt(Not cboDokumente.SelectedIndex = 0) + 1
' cbxAuftrag.Focus()
' optDokumente.Checked = True
'End Sub
Private Sub cbxAuftrag_CheckedChanged(sender As Object, e As EventArgs)
' optDokumente.Checked = True
End Sub
Private Sub SonstChanged(sender As Object, e As EventArgs)
' optDokumente.Checked = True
End Sub
Private Sub txtSendungSpedition_TextChanged(sender As Object, e As EventArgs) Handles txtSendungSpedition.TextChanged, txtSpedition.TextChanged
optSpeditionWeitergeleitet.Checked = True
End Sub
' Private Sub txtFach_TextChanged(sender As Object, e As EventArgs)
' optFach.Checked = True
' End Sub
Private Sub txtDetail_TextChanged(sender As Object, e As EventArgs) Handles txtDetail.TextChanged
If txtDetail.Text.Length = 240 Then
showErr(lblErr240Zeichen)
End If
End Sub
Private Sub frmAddSendungsvermerk_Shown(sender As Object, e As EventArgs) Handles Me.Shown
txtSendung.SelectionLength = 0
txtFreierText.Focus()
End Sub
Private drag As Boolean
Private mouseX As Integer
Private mouseY As Integer
Private Sub Form_MouseDown(sender As Object, e As MouseEventArgs) Handles lblDragIndicator.MouseDown
If e.Button = MouseButtons.Left Then
drag = True
mouseX = Cursor.Position.X - Me.Left
mouseY = Cursor.Position.Y - Me.Top
End If
End Sub
Private Sub Form_MouseMove(sender As Object, e As MouseEventArgs) Handles lblDragIndicator.MouseMove
If drag Then
Me.Top = Cursor.Position.Y - mouseY
Me.Left = Cursor.Position.X - mouseX
End If
End Sub
Private Sub Form_MouseUp(sender As Object, e As MouseEventArgs) Handles lblDragIndicator.MouseUp
drag = False
End Sub
' ----------------------
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnCLose.Click
Me.Close()
End Sub
Private Sub btnDokumtanforderung_Click(sender As Object, e As EventArgs) Handles btnDokumtanforderung.Click
Dim resolvedAvisoId As Integer = AvisoID
If resolvedAvisoId <= 0 AndAlso myAviso IsNot Nothing AndAlso IsNumeric(myAviso.AvisoID) Then
resolvedAvisoId = CInt(myAviso.AvisoID)
End If
Dim resolvedSendungId As Integer = SendungID
Using frm As New frmSendungsDokumentanforderung(resolvedAvisoId, resolvedSendungId, Nothing)
If frm.ShowDialog(Me) = DialogResult.OK Then
frmHauptfenster.avisoAktualisierenAktiveIdBehalten(myAviso.AvisoID)
Me.Close()
End If
End Using
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs)
If insertVermerke() Then
VERAG_PROG_ALLGEMEIN.cAvisoBenachrichtigungen.INSERT_BENACHRICHTIGUNG(myAviso.AvisoID, SendungID, 1, "T", 13, , 1)
insertSendungsVermerk(SendungID, myAviso.AvisoID, "In die Neukunden-Abteilung gegeben.", 46)
frmHauptfenster.avisoAktualisierenAktiveIdBehalten(myAviso.AvisoID)
Me.Close()
End If
End Sub
End Class