469 lines
18 KiB
VB.net
469 lines
18 KiB
VB.net
Imports System.Reflection
|
|
Imports ClosedXML.Excel
|
|
|
|
Public Class frmUrlaubsplaner
|
|
Dim DP As New cDienstplan
|
|
Dim ADMIN As New cOptionenDAL
|
|
Public niederlassung = ""
|
|
Dim aktJahr As Integer = Now.Year
|
|
Dim dt As New DataTable
|
|
|
|
Private Sub frmUrlaubsplaner_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
lblMa.Text = ""
|
|
lblKw.Text = ""
|
|
|
|
Dim systemType As Type = dgvUrlaub.GetType()
|
|
Dim propertyInfo As PropertyInfo = systemType.GetProperty("DoubleBuffered", BindingFlags.Instance Or BindingFlags.NonPublic)
|
|
propertyInfo.SetValue(dgvUrlaub, True, Nothing)
|
|
|
|
initDGV()
|
|
|
|
cboJahr.Items.Clear()
|
|
For j = 2018 To Now.Year + 1
|
|
cboJahr.Items.Add(New VERAG_PROG_ALLGEMEIN.MyListItem(j, j))
|
|
Next
|
|
cboJahr.changeItem(Now.Year)
|
|
|
|
Try
|
|
dgvUrlaub.FirstDisplayedScrollingColumnIndex = (DateToWeek(Now) - 2).ToString.Substring(4)
|
|
Catch ex As Exception
|
|
|
|
End Try
|
|
|
|
End Sub
|
|
Dim loaded = False
|
|
Sub initDGV()
|
|
|
|
'MsgBox("i")
|
|
loaded = False
|
|
With dgvUrlaub
|
|
.SuspendLayout()
|
|
' .VirtualMode = False
|
|
.Columns.Clear()
|
|
|
|
Dim cMa As New DataGridViewTextBoxColumn
|
|
cMa.HeaderText = "Mitarbeiter"
|
|
cMa.Name = "maKuerzel"
|
|
cMa.Width = 150
|
|
cMa.Frozen = True
|
|
.Columns.Add(cMa)
|
|
|
|
Dim cMaId As New DataGridViewTextBoxColumn
|
|
cMaId.Visible = False
|
|
cMaId.Name = "maId"
|
|
.Columns.Add(cMaId)
|
|
|
|
|
|
|
|
For Each r In DP.getAllDienstMA(niederlassung, CDate("01.01." & aktJahr))
|
|
.Rows.Add(r.dstma_kuerzel, r.dstma_id) ' & " " & r.mit_nname)
|
|
' .Rows(.RowCount - 1).
|
|
Next
|
|
|
|
|
|
For i = 1 To WeekCount(aktJahr)
|
|
Dim c As New DataGridViewTextBoxColumn
|
|
Dim d_Mo As Date = CalendarWeek(i, aktJahr)
|
|
Dim d_So As Date = d_Mo.AddDays(6)
|
|
c.HeaderText = "KW " & i & vbNewLine & d_Mo.ToString("dd.MM") & "-" & d_So.ToString("dd.MM")
|
|
c.DefaultCellStyle.Alignment = DataGridViewContentAlignment.TopCenter
|
|
|
|
|
|
|
|
|
|
c.Width = 70
|
|
.Columns.Add(c)
|
|
.Columns(0).DefaultCellStyle.BackColor = Color.LightGray
|
|
.Columns(0).DefaultCellStyle.ForeColor = Color.Black
|
|
|
|
For Each r As DataGridViewRow In .Rows
|
|
Dim ll = DP.getDienstAbwesendheitenKWByMA(r.Cells("maId").Value, i, aktJahr, niederlassung)
|
|
If ll.Count > 1 Then
|
|
|
|
r.Cells(.ColumnCount - 1).Value = "GEMISCHT"
|
|
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.BlueViolet
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
ElseIf ll.Count > 0 Then
|
|
Dim l As cDienstAbwesendheitenKW = ll(0)
|
|
r.Cells(.ColumnCount - 1).Value = l.dstnk_info
|
|
|
|
Select Case l.dstnk_grund.Trim
|
|
Case "URL"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Red
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "KS"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Blue
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "BS"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Green
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "DR"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Gray
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
End Select
|
|
|
|
End If
|
|
|
|
|
|
|
|
|
|
|
|
If False Then
|
|
Dim eintragCnt As Integer = 0
|
|
Dim eintragStr = ""
|
|
|
|
|
|
For Each l As cDienstAbwesendheitenKW In ll
|
|
If l.dstnk_mitId = r.Cells("maId").Value Then
|
|
eintragCnt += 1
|
|
' eintragStr &= CDate(l.dstna_datum_von).ToString("ddd") & " "
|
|
End If
|
|
If eintragCnt > 0 Then
|
|
' r.Cells(.ColumnCount - 1).Value = IIf(eintragCnt = 7, l.dstna_grund, eintragStr)
|
|
r.Cells(.ColumnCount - 1).Value = IIf(eintragCnt = 7, l.dstnk_grund, eintragStr)
|
|
r.Cells(.ColumnCount - 1).Tag = r.Cells("dstnk_kw").Value
|
|
Select Case l.dstnk_grund.Trim
|
|
Case "URL"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Red
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "KS"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Blue
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "BS"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Green
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
Case "DR"
|
|
r.Cells(.ColumnCount - 1).Style.BackColor = Color.Gray
|
|
r.Cells(.ColumnCount - 1).Style.ForeColor = Color.White
|
|
End Select
|
|
End If
|
|
Next
|
|
End If
|
|
Next
|
|
Next
|
|
|
|
|
|
|
|
'.VirtualMode = True
|
|
.ResumeLayout()
|
|
End With
|
|
loaded = True
|
|
|
|
End Sub
|
|
|
|
|
|
|
|
|
|
Public Function WeekCount(ByVal nYear As Integer) As Integer
|
|
' Ermittelt die Anzahl Wochen in einem Jahr
|
|
Return CalendarWeek(1, nYear + 1).Subtract(CalendarWeek(1, nYear)).Days \ 7
|
|
End Function
|
|
|
|
Public Function DateToWeek(ByVal dDate As Date) As String
|
|
' Startdatum der ersten Kalenderwoche des Jahres und Folgejahres berechnen
|
|
Dim dThisYear As Date = CalendarWeek(1, dDate.Year)
|
|
Dim dNextYear As Date = CalendarWeek(1, dDate.Year + 1)
|
|
|
|
' Prüfen, ob Datum zur ersten Woche des Folgejahres gehört
|
|
If dDate >= dNextYear Then
|
|
' Rückgabe: KW 1 des Folgejahres
|
|
Return dDate.Year + 1 & "01"
|
|
ElseIf dDate < dThisYear Then
|
|
' Falls das Datum noch zu einer KW aus dem letzten Jahr zählt
|
|
Return dDate.Year - 1 & DatePart(DateInterval.WeekOfYear,
|
|
New Date(dDate.Year - 1, 12, 28), FirstDayOfWeek.Monday,
|
|
FirstWeekOfYear.FirstFourDays)
|
|
Else
|
|
' KW = Differenz zum ersten Tag der ersten Woche
|
|
Return dDate.Year & Format$(dDate.Subtract(dThisYear).Days \ 7 + 1, "00")
|
|
End If
|
|
End Function
|
|
|
|
Public Function CalendarWeek(ByVal nWeek As Integer, ByVal nYear As Integer) As Date
|
|
|
|
' Wochentag des 4. Januar des Jahres ermitteln
|
|
Dim dStart As New Date(nYear, 1, 4)
|
|
Dim nDay As Integer = (dStart.DayOfWeek + 6) Mod 7 + 1
|
|
|
|
' Beginn der 1. KW des Jahres
|
|
Dim dFirst As Date = dStart.AddDays(1 - nDay)
|
|
|
|
' Gesuchte KW ermitteln
|
|
Return dFirst.AddDays((nWeek - 1) * 7)
|
|
End Function
|
|
|
|
|
|
|
|
Private Sub dgvUrlaub_CellEnter(sender As Object, e As DataGridViewCellEventArgs) Handles dgvUrlaub.CellEnter
|
|
lblMa.Text = ""
|
|
lblKw.Text = ""
|
|
' MsgBox(dgvUrlaub.Columns(dgvUrlaub.SelectedCells(0).ColumnIndex).Name)
|
|
If dgvUrlaub.SelectedCells.Count = 0 Then Exit Sub
|
|
' If dgvUrlaub.Columns(dgvUrlaub.SelectedCells(0).ColumnIndex).Name = "maKuerzel" Then Exit Sub
|
|
|
|
|
|
lblMa.Text = dgvUrlaub.Rows(e.RowIndex).Cells("maKuerzel").Value
|
|
lblKw.Text = "KW " & (e.ColumnIndex - 1)
|
|
|
|
Exit Sub
|
|
Dim fBold As New Font(dgvUrlaub.Font, FontStyle.Bold)
|
|
|
|
For Each i As DataGridViewColumn In dgvUrlaub.Columns
|
|
i.HeaderCell.Style = Nothing
|
|
Next
|
|
' 'For Each i As DataGridViewRow In dgvUrlaub.Rows
|
|
'i.HeaderCell.Style = Nothing
|
|
' Next
|
|
|
|
' dgvUrlaub.Rows(e.RowIndex).Cells("maKuerzel").Style.Font = fBold
|
|
dgvUrlaub.Columns(e.ColumnIndex).HeaderCell.Style.Font = fBold
|
|
|
|
End Sub
|
|
|
|
Private Sub dgvPrjDwgs_CellMouseEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvUrlaub.CellMouseEnter
|
|
If e.RowIndex > -1 Then
|
|
For j = 0 To dgvUrlaub.ColumnCount - 1
|
|
Dim c = dgvUrlaub.Rows(e.RowIndex).Cells(j)
|
|
If c.Value Is Nothing Then c.Style.BackColor = Color.BlanchedAlmond 'IIf(j = 0, Color.LightGray, Color.BlanchedAlmond)
|
|
Next
|
|
End If
|
|
If e.ColumnIndex > -1 Then
|
|
For j = 0 To dgvUrlaub.RowCount - 1
|
|
Dim c = dgvUrlaub.Rows(j).Cells(e.ColumnIndex)
|
|
If c.Value Is Nothing Then c.Style.BackColor = Color.BlanchedAlmond
|
|
Next
|
|
End If
|
|
End Sub
|
|
Private Sub dgvPrjDwgs_CellMouseLeave(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvUrlaub.CellMouseLeave
|
|
For i = 0 To dgvUrlaub.RowCount - 1
|
|
For j = 0 To dgvUrlaub.ColumnCount - 1
|
|
Dim c = dgvUrlaub.Rows(i).Cells(j)
|
|
If c.Value Is Nothing Then c.Style.BackColor = IIf(j = 0, Color.LightGray, Color.White)
|
|
Next
|
|
Next
|
|
End Sub
|
|
|
|
|
|
Private Sub dgvUrlaub_CellClick(sender As Object, e As EventArgs) Handles dgvUrlaub.SelectionChanged
|
|
Exit Sub
|
|
|
|
dgvUrlaub.SuspendLayout()
|
|
dgvUrlaub.DefaultCellStyle.BackColor = Color.White
|
|
|
|
If dgvUrlaub.SelectedCells.Count > 0 Then '
|
|
'dgvUrlaub.Rows(dgvUrlaub.SelectedCells(0).OwningRow.Index).Cells("maKuerzel").Style.BackColor = Color.Red ' : MsgBox(dgvUrlaub.SelectedRows(0).Cells("maKuerzel").Value)
|
|
dgvUrlaub.Rows(dgvUrlaub.SelectedCells(0).OwningRow.Index).DefaultCellStyle.BackColor = Color.LightGray ' : MsgBox(dgvUrlaub.SelectedRows(0).Cells("maKuerzel").Value)
|
|
dgvUrlaub.Columns(dgvUrlaub.SelectedCells(0).ColumnIndex).DefaultCellStyle.BackColor = Color.LightGray ' : MsgBox(dgvUrlaub.SelectedRows(0).Cells("maKuerzel").Value)
|
|
End If
|
|
dgvUrlaub.ResumeLayout()
|
|
|
|
Exit Sub
|
|
Dim fBold As New Font(dgvUrlaub.Font, FontStyle.Bold)
|
|
Dim fRegular As New Font(dgvUrlaub.Font, FontStyle.Regular)
|
|
|
|
If Not loaded Then Exit Sub
|
|
With dgvUrlaub
|
|
.SuspendLayout()
|
|
For Each r In .Rows
|
|
r.Cells("maKuerzel").Style.Font = fRegular
|
|
Next
|
|
For Each c In .Columns
|
|
c.HeaderCell.Style.Font = fRegular
|
|
Next
|
|
If .SelectedCells(0).ColumnIndex > 1 And .SelectedCells(0).RowIndex >= 0 Then
|
|
dgvUrlaub.Rows(.SelectedCells(0).RowIndex).Cells("maKuerzel").Style.Font = fBold
|
|
dgvUrlaub.Columns(.SelectedCells(0).ColumnIndex).HeaderCell.Style.Font = fBold
|
|
End If
|
|
.ResumeLayout()
|
|
End With
|
|
End Sub
|
|
|
|
Private Sub dgvUrlaub_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvUrlaub.CellDoubleClick
|
|
Me.Cursor = Cursors.WaitCursor
|
|
' MsgBox(e.ColumnIndex & " : " & e.RowIndex)
|
|
If e.ColumnIndex > 1 And e.RowIndex >= 0 Then
|
|
Dim frmUrlKW As New frmUrlKW
|
|
Dim art = ""
|
|
frmUrlKW.KW = e.ColumnIndex - 1
|
|
frmUrlKW.YEAR = aktJahr
|
|
'Dim kw As Integer = dgvUrlaub.Rows(e.RowIndex).Cells(e.ColumnIndex).Tag
|
|
Dim maId = dgvUrlaub.Rows(e.RowIndex).Cells("maId").Value
|
|
Dim ll As List(Of cDienstAbwesendheitenKW) = DP.getDienstAbwesendheitenKW(e.ColumnIndex - 1, maId, aktJahr, niederlassung)
|
|
' Dim ll As List(Of cDienstAbwesendheitenKW) = DP.getDienstAbwesendheitenKW(kw, aktJahr, niederlassung)
|
|
' MsgBox(e.ColumnIndex - 1)
|
|
If ll.Count = 1 Then
|
|
frmUrlKW.KW_ID = ll(0).dstnk_id
|
|
' frmUrlKW.KW_ID = ll(0).dstnk_grund
|
|
ElseIf ll.Count > 1 Then
|
|
Dim frmDienstAuswahl As New frmDienstAuswahl
|
|
frmDienstAuswahl.list = ll
|
|
frmDienstAuswahl.ShowDialog(Me)
|
|
frmUrlKW.KW_ID = frmDienstAuswahl.kw_id
|
|
End If
|
|
|
|
frmUrlKW.maId = maId
|
|
frmUrlKW.niederlassung = niederlassung
|
|
|
|
frmUrlKW.ShowDialog(Me)
|
|
If frmUrlKW.RESULT <> "" Then
|
|
Select Case niederlassung
|
|
Case "ATILLA" : frmDienstplanATILLA.initALL(maId)
|
|
Case "WAI" : frmDienstplanATILLA.initALL(maId)
|
|
Case "SBG" : frmDienstplanATILLA.initALL(maId)
|
|
Case "NKD" : frmDienstplanATILLA.initALL(maId)
|
|
Case "SUB" : frmDienstplan.initALL(maId)
|
|
End Select
|
|
End If
|
|
|
|
|
|
Dim scroll = dgvUrlaub.HorizontalScrollingOffset
|
|
initDGV()
|
|
dgvUrlaub.HorizontalScrollingOffset = scroll
|
|
End If
|
|
Me.Cursor = Cursors.Default
|
|
End Sub
|
|
|
|
Private Sub btn_Click(sender As Object, e As EventArgs)
|
|
dgvUrlaub.FirstDisplayedScrollingColumnIndex = 20
|
|
' MsgBox(DateToWeek(Now) - 2)
|
|
Exit Sub
|
|
If dgvUrlaub.ColumnCount >= DateToWeek(Now) - 2 Then
|
|
dgvUrlaub.FirstDisplayedScrollingColumnIndex = (DateToWeek(Now) - 2).ToString.Substring(4)
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
|
|
|
|
saveToDt()
|
|
|
|
Try
|
|
|
|
Dim dt1 As New DataTable()
|
|
Dim dt2 As New DataTable()
|
|
Dim halfOfYearWeek As Integer = 28
|
|
|
|
For Each column As DataGridViewColumn In dgvUrlaub.Columns
|
|
If column.ValueType Is Nothing Then
|
|
|
|
If column.Index < 2 Then
|
|
dt1.Columns.Add(column.HeaderText, System.Type.GetType("System.String"))
|
|
dt2.Columns.Add(column.HeaderText, System.Type.GetType("System.String"))
|
|
ElseIf column.Index < halfOfYearWeek Then
|
|
dt1.Columns.Add(column.HeaderText, System.Type.GetType("System.String"))
|
|
|
|
Else
|
|
dt2.Columns.Add(column.HeaderText, System.Type.GetType("System.String"))
|
|
End If
|
|
|
|
Else
|
|
|
|
If column.Index < 2 Then
|
|
dt1.Columns.Add(column.HeaderText, column.ValueType)
|
|
dt2.Columns.Add(column.HeaderText, column.ValueType)
|
|
ElseIf column.Index < halfOfYearWeek Then
|
|
dt1.Columns.Add(column.HeaderText, column.ValueType)
|
|
|
|
Else
|
|
dt2.Columns.Add(column.HeaderText, column.ValueType)
|
|
End If
|
|
|
|
|
|
End If
|
|
|
|
Next
|
|
|
|
|
|
For Each row As DataGridViewRow In dgvUrlaub.Rows
|
|
dt1.Rows.Add()
|
|
dt2.Rows.Add()
|
|
For Each cell As DataGridViewCell In row.Cells
|
|
If cell.Value Is Nothing Then
|
|
If cell.ColumnIndex < 2 Then
|
|
dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = ""
|
|
dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex) = ""
|
|
ElseIf cell.ColumnIndex < halfOfYearWeek Then
|
|
dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = ""
|
|
Else
|
|
dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex - (halfOfYearWeek - 2)) = ""
|
|
End If
|
|
|
|
Else
|
|
|
|
If cell.ColumnIndex < 2 Then
|
|
dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString()
|
|
dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString()
|
|
ElseIf cell.ColumnIndex < halfOfYearWeek Then
|
|
dt1.Rows(dt1.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString()
|
|
Else
|
|
dt2.Rows(dt2.Rows.Count - 1)(cell.ColumnIndex - (halfOfYearWeek - 2)) = cell.Value.ToString()
|
|
End If
|
|
End If
|
|
|
|
Next
|
|
Next
|
|
|
|
|
|
Dim sPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Personal) & "\VERAG\SDL\tmp\" ' My.Computer.FileSystem.GetTempFileName
|
|
If Not My.Computer.FileSystem.DirectoryExists(sPath) Then
|
|
My.Computer.FileSystem.CreateDirectory(sPath)
|
|
End If
|
|
|
|
Dim wb As New XLWorkbook
|
|
' Dim dt As DataTable = (dgv.DataSource)
|
|
' Dim dt As DataTable = TryCast(dgv., DataTable)
|
|
|
|
wb.Worksheets.Add(dt1, "URLAUB JH 1")
|
|
wb.Worksheets.Add(dt2, "URLAUB JH 2")
|
|
|
|
Dim filename As String = sPath & "Urlaubsplan_" & Now.ToString("ddMMyyyyHHmmss") & ".xlsx"
|
|
wb.SaveAs(filename)
|
|
|
|
|
|
Process.Start(filename)
|
|
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message & ex.StackTrace)
|
|
|
|
End Try
|
|
|
|
|
|
End Sub
|
|
|
|
Private Sub cboJahr_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboJahr.SelectedIndexChanged
|
|
If loaded Then aktJahr = cboJahr._value : initDGV() :
|
|
End Sub
|
|
|
|
|
|
Private Function saveToDt() As DataTable
|
|
|
|
Dim dt As New DataTable()
|
|
|
|
For Each column As DataGridViewColumn In dgvUrlaub.Columns
|
|
If column.ValueType Is Nothing Then
|
|
|
|
dt.Columns.Add(column.HeaderText, System.Type.GetType("System.String"))
|
|
Else
|
|
|
|
dt.Columns.Add(column.HeaderText, column.ValueType)
|
|
End If
|
|
|
|
Next
|
|
|
|
|
|
For Each row As DataGridViewRow In dgvUrlaub.Rows
|
|
dt.Rows.Add()
|
|
For Each cell As DataGridViewCell In row.Cells
|
|
If cell.Value Is Nothing Then
|
|
dt.Rows(dt.Rows.Count - 1)(cell.ColumnIndex) = ""
|
|
Else
|
|
dt.Rows(dt.Rows.Count - 1)(cell.ColumnIndex) = cell.Value.ToString()
|
|
End If
|
|
|
|
Next
|
|
Next
|
|
|
|
Return dt
|
|
End Function
|
|
|
|
End Class |