Mitarbeiter, StartOptions, etc.

This commit is contained in:
2025-11-05 16:59:40 +01:00
parent 7d12e603ad
commit 1a8fea634e
3 changed files with 143 additions and 48 deletions

View File

@@ -155,6 +155,7 @@ Public Class frmMitarbDetails
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("FRONTOFFICE", "FO"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("IMEX", "IMEX"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG AG", "VERAG AG"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG CS", "VERAG CS"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG GMBH", "VERAG GMBH"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG UNISPED Ltd", "VERAG UNISPED LIMITED"))
cbxClientTimas.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem("VERAG CUSTOMS LOGISTICS Ltd", "VERAG CL LIMITED"))
@@ -1452,70 +1453,152 @@ Public Class frmMitarbDetails
Private Sub datEinstiegsdatum_ValueChanged(sender As Object, e As EventArgs) Handles datEinstiegsdatum.ValueChanged, cbUrlaubInStund.CheckedChanged, txtUrlaubsabsp.TextChanged, cboDaysPerWeek.SelectedIndexChanged
If cbxEinsteigsDat.Checked And mitarbeiter.mit_einstiegsdatum <> "" Then
If cbxEinsteigsDat.Checked AndAlso Not String.IsNullOrWhiteSpace(mitarbeiter.mit_einstiegsdatum) Then
If CDate(mitarbeiter.mit_einstiegsdatum).ToShortDateString >= DateTime.Parse("01/01/2000") Then
Dim einstiegsdat As Date
If Date.TryParse(mitarbeiter.mit_einstiegsdatum, einstiegsdat) AndAlso einstiegsdat >= #01/01/2000# Then
' Prüfen, ob Arbeitszeit und Arbeitstage korrekt eingegeben wurden
If Not String.IsNullOrWhiteSpace(txtWoStd.Text) AndAlso IsNumeric(txtWoStd.Text) AndAlso Not String.IsNullOrWhiteSpace(cboDaysPerWeek.Text) AndAlso IsNumeric(cboDaysPerWeek.Text) Then
If txtWoStd.Text <> "" AndAlso IsNumeric(txtWoStd.Text) AndAlso cboDaysPerWeek.Text <> "" AndAlso IsNumeric(cboDaysPerWeek.Text) Then
Dim einstiegsdat As Date = CDate(mitarbeiter.mit_einstiegsdatum)
' Ende des Jahres oder ggf. Kündigungsdatum
Dim endOfCurrentYear As Date = New DateTime(einstiegsdat.Year, 12, 31)
Dim span As TimeSpan = endOfCurrentYear - einstiegsdat
Dim endOfCurrentYear = New DateTime(einstiegsdat.Year, 12, 31)
If cbxGekuendigt.Checked AndAlso Not String.IsNullOrWhiteSpace(mitarbeiter.mit_kuendigungsdatum) Then
Dim span = endOfCurrentYear - einstiegsdat
If cbxGekuendigt.Checked AndAlso mitarbeiter.mit_kuendigungsdatum <> "" AndAlso CDate(mitarbeiter.mit_kuendigungsdatum).ToShortDateString >= DateTime.Parse("01/01/2000") Then
Dim kuendigungsdatum As Date = CDate(mitarbeiter.mit_kuendigungsdatum)
span = kuendigungsdatum - einstiegsdat
Dim kuendigungsdatum As Date
If Date.TryParse(mitarbeiter.mit_kuendigungsdatum, kuendigungsdatum) AndAlso kuendigungsdatum >= #01/01/2000# Then
span = kuendigungsdatum - einstiegsdat
End If
End If
Dim days As Double = span.TotalDays
Dim uansp As Double = 0
Dim aliquU As Double = 0
calcUrlaubsabspruch(cbUrlaubInStund.Checked, uansp)
' Urlaubsanspruch berechnen
calcUrlaubsabspruchNew(cbUrlaubInStund.Checked, uansp)
If days > 0 AndAlso uansp > 0 Then
If IsNumeric(txtUrlaubsabsp.Text) Then uansp = txtUrlaubsabsp.Text
If Not cbUrlaubInStund.Checked Then
aliquU = Math.Round((uansp / 365) * span.TotalDays, 2, MidpointRounding.AwayFromZero)
txtaliquUA.Text = aliquU
lblHoursOrDays2.Text = "D"
Else
aliquU = Math.Round((uansp / 365) * span.TotalDays, 2, MidpointRounding.AwayFromZero)
txtaliquUA.Text = aliquU
lblHoursOrDays2.Text = "H"
If IsNumeric(txtUrlaubsabsp.Text) Then
uansp = CDbl(txtUrlaubsabsp.Text)
End If
' aliquoter Urlaubsanspruch
aliquU = Math.Round((uansp / 365) * days, 2, MidpointRounding.AwayFromZero)
txtaliquUA.Text = aliquU.ToString("0.00")
lblHoursOrDays2.Text = If(cbUrlaubInStund.Checked, "H", "D")
End If
End If
End If
End If
End Sub
Private Sub calcUrlaubsabspruch(UrlaubInStunden As Boolean, ByRef urlaubsabspruch As Double)
If Not UrlaubInStunden Then
If cboDaysPerWeek.SelectedItem <> "" Then
If Not cbabwJahresurlaub.Checked Then
urlaubsabspruch = 5 * cboDaysPerWeek.SelectedItem
End If
urlaubsabspruch = 0 ' sicherstellen, dass immer ein Wert zurückgegeben wird
Dim daysPerWeek As Double = 0
Dim wochenstunden As Double = 0
' Tage pro Woche validieren
If cboDaysPerWeek.SelectedItem IsNot Nothing AndAlso IsNumeric(cboDaysPerWeek.SelectedItem) Then
daysPerWeek = CDbl(cboDaysPerWeek.SelectedItem)
End If
' Wochenstunden validieren
If IsNumeric(txtWoStd.Text) Then
wochenstunden = CDbl(txtWoStd.Text)
End If
' Wenn keine gültigen Werte, abbrechen
If daysPerWeek <= 0 Then Exit Sub
' Jahresurlaub nur berechnen, wenn nicht "abgewählter Jahresurlaub"
If Not cbabwJahresurlaub.Checked Then
If Not UrlaubInStunden Then
' Urlaub in Tagen
urlaubsabspruch = 5 * daysPerWeek
lblHoursOrDays1.Text = "D"
End If
Else
If cboDaysPerWeek.SelectedItem <> "" AndAlso IsNumeric(txtWoStd.Text) AndAlso txtWoStd.Text > 0 Then
If Not cbabwJahresurlaub.Checked Then
urlaubsabspruch = (txtWoStd.Text / cboDaysPerWeek.SelectedItem) * cboDaysPerWeek.SelectedItem * 5
Else
' Urlaub in Stunden
If wochenstunden > 0 Then
urlaubsabspruch = (wochenstunden / daysPerWeek) * 5
lblHoursOrDays1.Text = "H"
End If
lblHoursOrDays1.Text = "H"
End If
End If
txtUrlaubsabsp.Text = urlaubsabspruch
' Ergebnis anzeigen
txtUrlaubsabsp.Text = urlaubsabspruch.ToString("0.00")
'If Not UrlaubInStunden Then
' If cboDaysPerWeek.SelectedItem <> "" Then
' If Not cbabwJahresurlaub.Checked Then
' urlaubsabspruch = 5 * cboDaysPerWeek.SelectedItem
' End If
' lblHoursOrDays1.Text = "D"
' End If
'Else
' If cboDaysPerWeek.SelectedItem <> "" AndAlso IsNumeric(txtWoStd.Text) AndAlso txtWoStd.Text > 0 Then
' If Not cbabwJahresurlaub.Checked Then
' urlaubsabspruch = (txtWoStd.Text / cboDaysPerWeek.SelectedItem) * cboDaysPerWeek.SelectedItem * 5
' End If
' lblHoursOrDays1.Text = "H"
' End If
'End If
'txtUrlaubsabsp.Text = urlaubsabspruch
End Sub
Private Sub calcUrlaubsabspruchNew(UrlaubInStunden As Boolean, ByRef urlaubsabspruch As Double)
Dim tageProWoche As Double = 0
Dim wochenstunden As Double = 0
' Eingaben validieren
If cboDaysPerWeek.SelectedItem IsNot Nothing AndAlso IsNumeric(cboDaysPerWeek.SelectedItem) Then
tageProWoche = CDbl(cboDaysPerWeek.SelectedItem)
End If
If IsNumeric(txtWoStd.Text) Then
wochenstunden = CDbl(txtWoStd.Text)
End If
' Nur berechnen, wenn Jahresurlaub nicht manuell abgewählt wurde
If Not cbabwJahresurlaub.Checked Then
urlaubsabspruch = BerechneUrlaubsanspruch(tageProWoche, wochenstunden, UrlaubInStunden)
Else
urlaubsabspruch = 0
End If
' UI aktualisieren
txtUrlaubsabsp.Text = urlaubsabspruch.ToString("0.00")
lblHoursOrDays1.Text = If(UrlaubInStunden, "H", "D")
End Sub
Public Function BerechneUrlaubsanspruch(tageProWoche As Double, wochenstunden As Double, urlaubInStunden As Boolean) As Double
' Sicherheitsprüfungen
If tageProWoche <= 0 Then Return 0
If urlaubInStunden AndAlso wochenstunden <= 0 Then Return 0
Dim anspruch As Double = 0
If Not urlaubInStunden Then
' Urlaub in Tagen
anspruch = 5 * tageProWoche
Else
' Urlaub in Stunden: durchschnittliche Tagesarbeitszeit * 5
anspruch = (wochenstunden / tageProWoche) * 5
End If
Return Math.Round(anspruch, 2, MidpointRounding.AwayFromZero)
End Function
Private Sub TabControl2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles TabControl2.SelectedIndexChanged
If TabControl2.SelectedIndex = 2 Then
Try