Imports System.IO
Imports Microsoft.Office.Interop.Excel.XlUnderlineStyle
Imports Microsoft.Office.Interop.Excel.Constants
Imports Microsoft.Office.Interop.Excel.XlBordersIndex
Imports Microsoft.Office.Interop.Excel.XlLineStyle
Imports Microsoft.Office.Interop.Excel.XlBorderWeight
Imports Microsoft.Office.Interop.Excel.XlThemeFont
Imports Microsoft.Office.Interop.Excel.XlThemeColor
Imports Microsoft.Office.Interop.Excel.XlWindowState
Imports Microsoft.Office.Interop.Excel.XlPageOrientation
Imports Microsoft.Office.Interop.Excel
Public Class 休假歷史紀錄
    ReadOnly ds, ds1 As New DataSet : Dim 剛開啟 As Boolean : Dim 位置1 As Integer
    Dim xlApp As Application : Dim xlBook As Workbook : Dim xlSheet As Worksheet
    Private Sub 讀取人員資料表()
        人員_dgv.DataSource = Nothing : ds.Clear()
        人員_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
        人員_dgv.ColumnHeadersHeight = 25
        人員_dgv.AllowUserToAddRows = False
        SQL_考勤明細表_人員()
        da.Fill(ds) : 人員_dgv.DataSource = ds.Tables(0) : conn.Close()
        人員_dgv.Columns(0).FillWeight = 70 : 人員_dgv.Columns(1).FillWeight = 80 : 人員_dgv.Columns(2).FillWeight = 100 : 人員_dgv.Columns(3).Visible = False
        人員_dgv.Columns(4).Visible = False : 人員_dgv.Columns(5).Visible = False : 人員_dgv.Columns(6).Visible = False : 人員_dgv.Columns(7).Visible = False
        人員_dgv.Columns(8).Visible = False : 人員_dgv.Columns(9).Visible = False : 人員_dgv.Columns("到職日").Visible = False
        For i As Integer = 0 To 人員_dgv.Rows.Count - 1
            人員_dgv.Rows(i).Cells("No.").Value = i + 1
        Next
    End Sub
    Private Sub 年份_下拉表單資料載入()
        SQL_考勤明細表_年份_下拉()
        年份_cb.Items.Clear()
        While (dr.Read()) : 年份_cb.Items.Add(dr("年份")) : End While
        conn.Close()
    End Sub
    Private Sub Set_考勤明細()
        月清單_DGV.DataSource = Nothing : ds1.Clear()
        月清單_DGV.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
        月清單_DGV.ColumnHeadersHeight = 40
        月清單_DGV.AllowUserToAddRows = False
        PA = 員工編號_tb.Text : SQL_休假清單()    'PA = 年份_cb.Text & "/" & 月份_cb.Text : 
        da.Fill(ds1) : 月清單_DGV.DataSource = ds1.Tables(0) : conn.Close()

        月清單_DGV.Columns(0).FillWeight = 80 : 月清單_DGV.Columns(1).FillWeight = 40 : 月清單_DGV.Columns(2).FillWeight = 90 : 月清單_DGV.Columns(3).FillWeight = 65
        月清單_DGV.Columns(4).FillWeight = 55 : 月清單_DGV.Columns(5).FillWeight = 150 : 月清單_DGV.Columns(6).FillWeight = 60 : 月清單_DGV.Columns(7).FillWeight = 80
        月清單_DGV.Columns(8).FillWeight = 80 : 月清單_DGV.Columns("圖片資料庫").Visible = False : 月清單_DGV.Columns("圖片編號").Visible = False
        月清單_DGV.Columns("申請時數").FillWeight = 50
        If 月清單_DGV.Rows.Count > 0 Then
            請假日期_tb.Text = 月清單_DGV("日期", 0).Value.ToString : Set_假期統計()
        Else
            假期統計_dgv.DataSource = Nothing
        End If
    End Sub
    Private Sub Set_假期統計()
        Dim ds As New DataSet
        假期統計_dgv.DataSource = Nothing : ds.Clear()
        假期統計_dgv.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
        假期統計_dgv.ColumnHeadersHeight = 25
        假期統計_dgv.AllowUserToAddRows = False
        PA = 員工編號_tb.Text : PA1 = 請假日期_tb.Text : SQL_休假統計()
        da.Fill(ds) : 假期統計_dgv.DataSource = ds.Tables(0) : conn.Close()
    End Sub
    Private Sub 歷史休假紀錄_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        剛開啟 = True : 年份_下拉表單資料載入()
        年份_cb.Text = Year(Today) : 月份_cb.SelectedIndex = Month(Today) - 1 : 請假類別_cb.SelectedIndex = 0
        PA1 = 年份_cb.Text : PA2 = 月份_cb.Text
        讀取人員資料表() : Set_考勤明細() : 剛開啟 = False
        If gUserName = "*系統管理者" Then : 刪除_tb.Visible = True : Else : 刪除_tb.Visible = False : End If
    End Sub
    Private Sub 人員_dgv_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 人員_dgv.CellClick
        If e.RowIndex = -1 Then : Else
            員工編號_tb.Text = 人員_dgv("編號", e.RowIndex).Value.ToString : 申請人_tb.Text = 人員_dgv("姓名", e.RowIndex).Value.ToString
            Set_考勤明細() : 請假日期_tb.Text = 年份_cb.Text & "/" & 月份_cb.Text : Set_假期統計()
        End If
    End Sub
    Private Sub 月清單_DGV_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles 月清單_DGV.CellClick
        If e.RowIndex = -1 Then : Else
            If 月清單_DGV.Rows(e.RowIndex).Cells("星期").Value.ToString = "星期六" Or 月清單_DGV.Rows(e.RowIndex).Cells("星期").Value.ToString = "星期日" Or
                月清單_DGV.Rows(e.RowIndex).Cells("請假類別").Value.ToString = "國定假日" Then
                MsgBox("星期六/星期日或國定假日不可以申請特休!!")
                請假日期_tb.Text = ""
                事由_tb.Text = ""
            Else
                員工編號_tb.Text = 月清單_DGV("編號", e.RowIndex).Value.ToString : 申請人_tb.Text = 月清單_DGV("姓名", e.RowIndex).Value.ToString
                請假日期_tb.Text = 月清單_DGV("日期", e.RowIndex).Value.ToString : 事由_tb.Text = 月清單_DGV("事由", e.RowIndex).Value.ToString
                請假類別_cb.Text = 月清單_DGV("請假類別", e.RowIndex).Value.ToString
                資料指定圖庫_tb.Text = 月清單_DGV("圖片資料庫", e.RowIndex).Value.ToString : 圖片流水號_tb.Text = 月清單_DGV("圖片編號", e.RowIndex).Value.ToString
                '------------驗貨報告讀取--------------------------------------------------------------------------------------------
                If 資料指定圖庫_tb.Text <> "" And 圖片流水號_tb.Text <> "" Then
                    圖片庫 = 資料指定圖庫_tb.Text : SQL_連線字串_圖片資料庫() : PA2 = 圖片流水號_tb.Text
                    SQL_請假圖() : PictureBox2.Image = Nothing
                    While dr.Read() = True
                        Dim unused As Byte() = New Byte(-1) {} : Dim bytes As Byte() = DirectCast(dr.Item("圖片"), Byte())
                        Dim oStream As New MemoryStream(bytes) : PictureBox2.Image = Bitmap.FromStream(oStream)
                    End While : conn.Close() : PictureBox2.SizeMode = 4
                Else
                    PictureBox2.Image = Nothing
                End If
            End If
        End If
    End Sub
    Private Sub 月清單_DGV_RowPostPaint(ByVal sender As Object, ByVal e As DataGridViewRowPostPaintEventArgs) Handles 月清單_DGV.RowPostPaint
        Dim linePen As New Pen(Color.Blue, 2)
        If e.RowIndex = 月清單_DGV.Rows.Count - 1 Then : Exit Sub : Else
            If Strings.Left(月清單_DGV("日期", e.RowIndex).Value.ToString, 7) <> Strings.Left(月清單_DGV("日期", e.RowIndex + 1).Value.ToString, 7) Then
                Dim startX As Integer = IIf(月清單_DGV.RowHeadersVisible, 月清單_DGV.RowHeadersWidth, 0) : Dim startY As Integer = e.RowBounds.Top + e.RowBounds.Height - 1
                Dim endX As Integer = startX + 月清單_DGV.Columns.GetColumnsWidth(DataGridViewElementStates.Visible) - 月清單_DGV.HorizontalScrollingOffset
                e.Graphics.DrawLine(linePen, startX, startY, endX, startY) : Exit Sub
            End If
        End If
    End Sub
    Private Sub 月份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 月份_cb.SelectedIndexChanged
        If 剛開啟 = False Then : Set_考勤明細() : End If
    End Sub
    Private Sub 年份_cb_SelectedIndexChanged(sender As Object, e As EventArgs) Handles 年份_cb.SelectedIndexChanged
        If 剛開啟 = False Then : Set_考勤明細() : End If
    End Sub
    Private Sub 刪除_tb_Click(sender As Object, e As EventArgs) Handles 刪除_tb.Click
        If 請假日期_tb.Text = "" And 員工編號_tb.Text = "" Then : MsgBox("沒有選擇資料!!!") : Else : SQL_休假申請明細_刪除() : Set_考勤明細() : MsgBox("刪除完成!!!") : End If
    End Sub
    Private Sub 列印_bt_Click(sender As Object, e As EventArgs) Handles 列印_bt.Click
        xlApp = CType(CreateObject("Excel.Application"), Application)
        xlBook = xlApp.Workbooks.Add
        xlApp.DisplayAlerts = True
        xlApp.Visible = True
        xlApp.Application.WindowState = xlMaximized

        xlSheet = NewMethod(xlBook) : xlApp.Sheets(1).Select
        xlApp.Sheets(1).Name = "請休假申請資料" : xlBook.Activate() : xlSheet.Activate()

        xlSheet.Cells(1, 1) = "黃柏翰皮膚科診所請休假資料" : xlSheet.Cells(2, 1) = CInt(年份_cb.Text) - 1911 & "年" & 月份_cb.Text & "月 - 全月"
        xlSheet.Cells(3, 1) = "項" : xlSheet.Cells(3, 2) = "姓名" : xlSheet.Cells(3, 3) = "日期" : xlSheet.Cells(3, 4) = "星期"
        xlSheet.Cells(3, 5) = "假別" : xlSheet.Cells(3, 6) = "事由" : xlSheet.Cells(3, 7) = "時數"
        For i As Integer = 0 To 月清單_DGV.Rows.Count - 1
            xlSheet.Cells(4 + i, 1) = i + 1 : xlSheet.Cells(4 + i, 2) = 月清單_DGV("姓名", i).Value.ToString
            xlSheet.Cells(4 + i, 3) = 月清單_DGV("日期", i).Value.ToString : xlSheet.Cells(4 + i, 4) = 月清單_DGV("星期", i).Value.ToString
            xlSheet.Cells(4 + i, 5) = 月清單_DGV("請假類別", i).Value.ToString : xlSheet.Cells(4 + i, 6) = 月清單_DGV("事由", i).Value.ToString
            xlSheet.Cells(4 + i, 7) = 月清單_DGV("申請時數", i).Value.ToString
        Next : 位置1 = 4 + 月清單_DGV.Rows.Count - 1 : AA(xlApp, xlSheet)
        xlSheet.PageSetup.PrintArea = "" : xlApp.Cells.Select() : xlSheet.Range("B1").Select() : xlApp.Application.WindowState = xlMinimized : MsgBox("列印完成")
    End Sub
    Private Shared Function NewMethod(xlBook As Workbook) As Worksheet
        Return CType(xlBook.Worksheets.Add, Worksheet)
    End Function
    Private Sub AA(ByVal myExcel As Microsoft.Office.Interop.Excel.Application, ByVal xlSheet As Microsoft.Office.Interop.Excel.Worksheet)
        xlSheet.Cells.Select()
        With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
            .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
        xlSheet.Columns("A:A").Select : myExcel.Selection.ColumnWidth = 4
        xlSheet.Columns("A:G").Select
        With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
            .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
        xlSheet.Range("F4:F" & 位置1).Select()
        With myExcel.Selection : .HorizontalAlignment = xlLeft : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
            .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With
        xlSheet.Columns("B:G").Select : myExcel.Columns("B:F").EntireColumn.AutoFit
        xlSheet.Rows("4:4").Select : myExcel.ActiveWindow.FreezePanes = True
        xlSheet.Range("B3:G3").Select() : myExcel.Selection.AutoFilter
        xlSheet.Rows("3:3").Select : myExcel.Selection.RowHeight = 35
        With myExcel.Selection : .VerticalAlignment = xlTop : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0 : .ShrinkToFit = False
            .ReadingOrder = xlContext : .MergeCells = False : End With
        xlSheet.Range("A3:G" & 位置1).Select()
        myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        With myExcel.Selection.Borders(xlInsideHorizontal) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        myExcel.Selection.Borders(xlDiagonalDown).LineStyle = xlNone : myExcel.Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        With myExcel.Selection.Borders(xlEdgeLeft) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
        With myExcel.Selection.Borders(xlEdgeTop) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
        With myExcel.Selection.Borders(xlEdgeBottom) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
        With myExcel.Selection.Borders(xlEdgeRight) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlMedium : End With
        With myExcel.Selection.Borders(xlInsideVertical) : .LineStyle = xlContinuous : .ColorIndex = 0 : .TintAndShade = 0 : .Weight = xlThin : End With
        xlSheet.Range("A2:G2").Select()
        With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
            .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
        With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 12 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
            .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
        myExcel.Selection.Font.Bold = True
        xlSheet.Range("A1:G1").Select()
        With myExcel.Selection : .HorizontalAlignment = xlCenter : .VerticalAlignment = xlCenter : .WrapText = False : .Orientation = 0 : .AddIndent = False : .IndentLevel = 0
            .ShrinkToFit = False : .ReadingOrder = xlContext : .MergeCells = False : End With : myExcel.Selection.Merge
        With myExcel.Selection.Font : .Name = "微軟正黑體" : .Size = 16 : .Strikethrough = False : .Superscript = False : .Subscript = False : .OutlineFont = False
            .Shadow = False : .Underline = xlUnderlineStyleNone : .ThemeColor = xlThemeColorLight1 : .TintAndShade = 0 : .ThemeFont = xlThemeFontNone : End With
        myExcel.Selection.Font.Bold = True
        xlSheet.Range("A3:G3").Select()
        With myExcel.Selection.Interior : .Pattern = xlSolid : .PatternColorIndex = xlAutomatic : .ThemeColor = xlThemeColorAccent1 : .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0 : End With
        xlSheet.Range("F4").Select()
        myExcel.ActiveWindow.DisplayGridlines = False
    End Sub
End Class