Ejemplo n.º 1
0
        public void GetCheckInCheckOutData(FromToDateTime KhoangThoiGian, List <int> ArrayUEN, out List <cCheck> ResultListCheck)
        {
            DataTable tableArrayUEN = MyUtility.Array_To_DataTable("tableName", ArrayUEN);
            DataTable tableCheck    = SqlDataAccessHelper.ExecSPQuery(SPName6.CheckInOut_DocCheckChuaXuLyV6.ToString(),
                                                                      new SqlParameter("@From", KhoangThoiGian.From),
                                                                      new SqlParameter("@To", KhoangThoiGian.To),
                                                                      new SqlParameter {
                ParameterName = "@ArrayUserEnrollNumber", SqlDbType = SqlDbType.Structured, Value = tableArrayUEN
            },
                                                                      new SqlParameter("@DaChamCong", false),
                                                                      new SqlParameter("@Loai", false));

            ResultListCheck = new List <cCheck>();
            foreach (DataRow dataRow in tableCheck.Rows)
            {
                cCheck check = new cCheck {
                    MaCC       = (int)dataRow["UserEnrollNumber"],
                    Source     = dataRow["Source"].ToString(),
                    Time       = (DateTime)dataRow["TimeStr"],
                    MachineNo  = (int)dataRow["MachineNo"],
                    TypeColumn = dataRow["OriginType"].ToString()
                };
                check.Type = (check.MachineNo % 2 == 1) ? "I" : "O";
                ResultListCheck.Add(check);
            }
        }
Ejemplo n.º 2
0
        private void Update_Check_DaChamCong(int UEN, cCheck check)
        {
            int kq = SqlDataAccessHelper.ExecSPNoneQuery(SPName6.CheckInOut_Upd_Check_DaChamCongV6.ToString(),
                                                         new SqlParameter("@UserEnrollNumber", UEN),
                                                         new SqlParameter("@TimeStr", check.Time),
                                                         new SqlParameter("@MachineNo", check.MachineNo),
                                                         new SqlParameter("@DaChamCong", true));

            if (kq == 0)
            {
                ACMessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi, 2000);
            }
        }
 private void LoadGroup_Xoaa(cCheck check)
 {
     if (check == null)             // check null thì reset group
     {
         MyUtility.ClearControlText(tbGioCuu_ChuyenDoi, tbGioCu_Xoaa, tbGhiChu_Xoaa);
         cbLyDo_Xoaa.SelectedIndex = 0;
         MyUtility.EnableDisableControl(false, btnChuyenDoi, btnXoaa);
     }
     else              // check ko null
     {
         tbGioCu_Xoaa.Text         = tbGioCuu_ChuyenDoi.Text = ((check.MachineNo % 2 == 1) ? "Vào" : "Ra") + " " + check.Time.ToString("H:mm ddd d/M", Application.CurrentCulture);
         cbLyDo_Xoaa.SelectedIndex = 0;
         tbGhiChu_Xoaa.Text        = string.Empty;
         MyUtility.EnableDisableControl(true, btnChuyenDoi, btnXoaa);
     }
 }
        private void LoadGroup_Suaa(cNgayCong ngayCong, cCheckInOut cio, cCheck check)
        {
            if (check == null)
            {
                MyUtility.ClearControlText(tbGioCu_Suaa, tbCa_Suaa, tbGhiChu_Suaa);
                tbCa_Suaa.Tag = null;
                MyUtility.EnableDisableControl(false, btnChonCa_Suaa, btnSuaa);                // ko tồn tại giờ cũ nên ko cho sửa, chuyển đổi
                cbLyDo_Suaa.SelectedIndex = 0;
            }
            else
            {
                // xem xét check là CIO_V hay CIO_A, CIO_A cho sửa, CIO_V ko cho sửa, trong CIO_A coi có phải là check đệm giữa ca ko
                tbGioCu_Suaa.Text = ((check.MachineNo % 2 == 1) ? "Vào" : "Ra") + " " + check.Time.ToString("H:mm ddd d/M");

                dtpGioMoi_Sua.Value       = new DateTime(check.Time.Year, check.Time.Month, check.Time.Day, check.Time.Hour, check.Time.Minute, check.Time.Second);
                tbCa_Suaa.Tag             = (cio == null || cio.HaveINOUT < 0) ? null : cio.ThuocCa;
                tbCa_Suaa.Text            = (cio == null || cio.HaveINOUT < 0) ? string.Empty : cio.ThuocCa.Code;
                cbLyDo_Suaa.SelectedIndex = 0;
                tbGhiChu_Suaa.Text        = string.Empty;

                //tồn tại giờ cũ nên cho phép sửa
                MyUtility.EnableDisableControl(true, btnChonCa_Suaa, btnSuaa);
            }
        }
        public static bool ThemGio_ra3_vao1(List <cCheck> kq2)
        {
            var query = String.Empty;
            var param = new string[6 * kq2.Count];
            var obj   = new object[6 * kq2.Count];
            var dem   = 0;

            foreach (cCheck o in kq2)
            {
                if (o.Type == "I")
                {
                    cCheck checkInn = o;
                    param[6 * dem]     = "@UserEnrollNumber" + dem;
                    param[6 * dem + 1] = "@TimeDate" + dem;
                    param[6 * dem + 2] = "@TimeStr" + dem;
                    param[6 * dem + 3] = "@OriginType" + dem;
                    param[6 * dem + 4] = "@MachineNo" + dem;
                    param[6 * dem + 5] = "@Source" + dem;

                    obj[6 * dem]     = checkInn.MaCC;
                    obj[6 * dem + 1] = checkInn.Time.Date;
                    obj[6 * dem + 2] = checkInn.Time;
                    obj[6 * dem + 3] = "I";
                    obj[6 * dem + 4] = 21;
                    obj[6 * dem + 5] = "PC";

                    query += @"	insert into CheckInOut (UserEnrollNumber, TimeDate, TimeStr, OriginType, MachineNo, Source, WorkCode, Them)";
                    var temp = string.Format(" values ( @UserEnrollNumber{0},  @TimeDate{0},  @TimeStr{0},  @OriginType{0},  @MachineNo{0},  @Source{0},  0, 1) ", dem);
                    query += temp;
                }
                else
                {
                    cCheck checkOut = o;
                    param[6 * dem]     = "@UserEnrollNumber" + dem;
                    param[6 * dem + 1] = "@TimeDate" + dem;
                    param[6 * dem + 2] = "@TimeStr" + dem;
                    param[6 * dem + 3] = "@OriginType" + dem;
                    param[6 * dem + 4] = "@MachineNo" + dem;
                    param[6 * dem + 5] = "@Source" + dem;

                    obj[6 * dem]     = checkOut.MaCC;
                    obj[6 * dem + 1] = checkOut.Time.Date;
                    obj[6 * dem + 2] = checkOut.Time;
                    obj[6 * dem + 3] = "O";
                    obj[6 * dem + 4] = 22;
                    obj[6 * dem + 5] = "PC";

                    query += @"	insert into CheckInOut (UserEnrollNumber, TimeDate, TimeStr, OriginType, MachineNo, Source, WorkCode, Them) ";
                    var temp = string.Format(" values ( @UserEnrollNumber{0},  @TimeDate{0},  @TimeStr{0},  @OriginType{0},  @MachineNo{0},  @Source{0},  0, 1) ", dem);
                    query += temp;
                }
                dem++;
            }
            if (param.Length == 0)
            {
                return(true);
            }
            if (SqlDataAccessHelper.ExecNoneQueryString(query, param, obj) == 0)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 6
0
        private void btnSuaa_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            IsReload = true;
            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.Text;
            var ghichu         = tbGhiChu.Text;

            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi sửa
            if (MessageBox.Show(string.Format(Resources.Text_xacNhanSuaGioHangLoat,
                                              (radGioVao.Checked)?"vào":"ra",
                                              (radGioVao.Checked)?dtpVao.Value.ToString("H:mm"): dtpRaa.Value.ToString("H:mm")),
                                Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            try                           //general try catch
            {
                var flagThongBao = false; // flag thông báo không cho phép sửa giờ đã CN
                var arrRecord    = (from DataGridViewRow dataGridViewRow in dgrdDSGioVaoRa.SelectedRows
                                    let row = (DataRowView)dataGridViewRow.DataBoundItem
                                              let nv = (cUserInfo)row["cUserInfo"]
                                                       let cCheckInOut = (cCheckInOut)row["cCheckInOut"]
                                                                         let ngay = (DateTime)row["TimeStrNgay"]
                                                                                    select new { nhanvien = nv, CIO = cCheckInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();
                var ds_raa3_vao1     = new List <cCheck>();
                var DS_Check_KoHopLe = new List <cCheck>();
                foreach (var group in arrRecord)
                {
                    var nhanvien = group.Key;
                    foreach (var item in group)
                    {
                        if (item.CIO.DaXN)                           // ko cho sửa các giờ đã xác nhận
                        {
                            flagThongBao = true;
                            continue;
                        }
                        if (radGioVao.Checked)
                        {
                            if (item.CIO.HaveINOUT == -2)
                            {
                                continue;
                            }
                            var giovao      = item.Ngay.Add(timespanGioVao);
                            var checkinnold = item.CIO.Vao;
                            var checkinnnew = new cCheck {
                                MaCC    = nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21,
                                PhucHoi = new cPhucHoi {
                                    IDGioGoc = int.MaxValue, Them = checkinnold.PhucHoi.Them, Xoaa = checkinnold.PhucHoi.Xoaa
                                }
                            };
                            XL.SuaGioChoNV(nhanvien.MaCC, checkinnold, checkinnnew, nhanvien.DS_Check_A, lydo, ghichu);
                        }
                        else
                        {
                            if (item.CIO.HaveINOUT == -1)
                            {
                                continue;
                            }
                            var gioraa      = item.Ngay.Add(timespanGioRaa);
                            var checkoutold = item.CIO.Raa;
                            var checkoutnew = new cCheck {
                                MaCC    = nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22,
                                PhucHoi = new cPhucHoi {
                                    IDGioGoc = int.MaxValue, Them = checkoutold.PhucHoi.Them, Xoaa = checkoutold.PhucHoi.Xoaa
                                }
                            };
                            XL.SuaGioChoNV(nhanvien.MaCC, checkoutold, checkoutnew, nhanvien.DS_Check_A, lydo, ghichu);
                        }
                    }
                    XL.LoaiBoCheckKoHopLe1(nhanvien.DS_Check_A, ref DS_Check_KoHopLe);
                    XL.GhepCIO_A2(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                    XL.XetCa_ListCIO_A3(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV, ds_raa3_vao1, nhanvien.DS_Check_A);
                    XL.TronDS_CIO_A_V5(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                    XL.PhanPhoi_DSVaoRa6(nhanvien.DSVaoRa, nhanvien.DSNgayCong);
                    XL.PhanPhoi_DSVang7(nhanvien.DSVang, nhanvien.DSNgayCong);
                    XL.TinhCong_ListNgayCong8(nhanvien.DSNgayCong, nhanvien.StartNT, nhanvien.EndddNT);                    //ver 4.0.0.4
                    XL.TinhPCTC_TrongListXNPCTC9(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                    XL.TinhPCDB_TrongListXNPCDB10(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
                    XL.TinhPCNgayVang(nhanvien.DSVang, nhanvien.DSNgayCong);
                }
                if (DS_Check_KoHopLe.Count > 0)
                {
                    DAO.LoaiGioLienQuan(DS_Check_KoHopLe);
                }
                if (ds_raa3_vao1.Count > 0)
                {
                    DAO.ThemGio_ra3_vao1(ds_raa3_vao1);
                }

                loadGrid();
                if (flagThongBao)
                {
                    ACMessageBox.Show(Resources.Text_KoTheSuaXoaGioDaXN, Resources.Caption_ThongBao, 2000);
                }
            } catch (Exception ex)             //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }
Ejemplo n.º 7
0
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            IsReload = true;

            #region lấy thông tin

            var timespanGioVao = dtpVao.Value.TimeOfDay;
            var timespanGioRaa = dtpRaa.Value.TimeOfDay;
            var lydo           = (cbLyDo.SelectedItem != null) ? cbLyDo.SelectedItem.ToString() : cbLyDo.Text;
            var ghichu         = tbGhiChu.Text;

            #endregion

            var tempstring = radGioVao.Checked ? "vào" : "ra";
            var temptime   = (radGioVao.Checked) ? dtpVao.Value : dtpRaa.Value;
            if (dgrdDSGioVaoRa.SelectedRows.Count == 0)
            {
                return;
            }

            #region hỏi lại trước khi thêm

            if (MessageBox.Show(string.Format(Resources.Text_xacNhanThemGioHangLoat, tempstring, temptime.ToString("H:mm")),
                                Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion

            try             //general try catch
            {
                #region lấy ds các giờ vào ra, group lại theo từng nhân viên để thực hiện thêm 1 loạt rồi sau đó xử lý tính toán lại checkinout và ngày công

                var arrRecord = (from DataGridViewRow dataGridViewRow in dgrdDSGioVaoRa.SelectedRows
                                 let row = (DataRowView)dataGridViewRow.DataBoundItem
                                           let nv = (cUserInfo)(row["cUserInfo"])
                                                    let cCheckInOut = (cCheckInOut)(row["cCheckInOut"])
                                                                      let ngay = (DateTime)(row["TimeStrNgay"])
                                                                                 select new { nhanvien = nv, CIO = cCheckInOut, Ngay = ngay }).GroupBy(o => o.nhanvien).ToList();

                #endregion
                var ds_raa3_vao1     = new List <cCheck>();
                var DS_Check_KoHopLe = new List <cCheck>();
                foreach (var group in arrRecord)
                {
                    var nhanvien = group.Key;
                    foreach (var item in @group.Where(item => item.CIO.HaveINOUT != 0))
                    {
                        if (radGioVao.Checked)                          //2. thêm I cho O kv
                        {
                            if (item.CIO.HaveINOUT == -2)
                            {
                                var giovao = item.Ngay.Add(timespanGioVao);
                                if (giovao > item.CIO.Raa.Time)
                                {
                                    giovao = giovao.AddDays(-1d);                                                            // trừ đi 1 ngày nếu (giờ vào thêm) > giờ ra
                                }
                                var checkinn = new cCheck {
                                    MaCC = item.nhanvien.MaCC, Type = "I", Time = giovao, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                                        Them = true, IDGioGoc = -1, Xoaa = false
                                    }
                                };
                                XL.ThemGioChoNV(item.nhanvien.MaCC, checkinn, item.nhanvien.DS_Check_A, lydo, ghichu);
                            }
                        }
                        else
                        {
                            if (item.CIO.HaveINOUT == -1)                              //3. thêm O cho I kr
                            {
                                var gioraa = item.Ngay.Add(timespanGioRaa);
                                if (gioraa < item.CIO.Vao.Time)
                                {
                                    gioraa = gioraa.AddDays(1d);                                                            // cộng thêm 1 ngày nếu (giờ vào thêm) > giờ ra
                                }
                                var checkout = new cCheck {
                                    MaCC = item.nhanvien.MaCC, Type = "O", Time = gioraa, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                                        Them = true, IDGioGoc = -1, Xoaa = false
                                    }
                                };
                                XL.ThemGioChoNV(item.nhanvien.MaCC, checkout, item.nhanvien.DS_Check_A, lydo, ghichu);
                            }
                        }
                    }

                    XL.LoaiBoCheckKoHopLe1(nhanvien.DS_Check_A, ref DS_Check_KoHopLe);
                    XL.GhepCIO_A2(nhanvien.DS_Check_A, nhanvien.DS_CIO_A);
                    XL.XetCa_ListCIO_A3(nhanvien.DS_CIO_A, nhanvien.LichTrinhLV, ds_raa3_vao1, nhanvien.DS_Check_A);
                    XL.TronDS_CIO_A_V5(nhanvien.DS_CIO_A, nhanvien.DS_CIO_V, nhanvien.DSVaoRa);
                    XL.PhanPhoi_DSVaoRa6(nhanvien.DSVaoRa, nhanvien.DSNgayCong);
                    XL.PhanPhoi_DSVang7(nhanvien.DSVang, nhanvien.DSNgayCong);
                    XL.TinhCong_ListNgayCong8(nhanvien.DSNgayCong, nhanvien.StartNT, nhanvien.EndddNT);                    //ver 4.0.0.4
                    XL.TinhPCTC_TrongListXNPCTC9(nhanvien.DSXNPhuCap50, nhanvien.DSNgayCong);
                    XL.TinhPCDB_TrongListXNPCDB10(nhanvien.DSXNPhuCapDB, nhanvien.DSNgayCong);
                    XL.TinhPCNgayVang(nhanvien.DSVang, nhanvien.DSNgayCong);
                }
                if (DS_Check_KoHopLe.Count > 0)
                {
                    DAO.LoaiGioLienQuan(DS_Check_KoHopLe);
                }
                if (ds_raa3_vao1.Count > 0)
                {
                    DAO.ThemGio_ra3_vao1(ds_raa3_vao1);
                }

                loadGrid();
            } catch (Exception ex)             //general try catch
            {
                lg.Error(string.Format("[{0}]_[{1}]\n", this.Name, System.Reflection.MethodBase.GetCurrentMethod().Name), ex);
                MessageBox.Show(Resources.Text_CoLoi, Resources.Caption_Loi);
            }
        }
        private void btnChuyenDoi_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            IsReload = true;
            var row        = (DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem);
            var checkold   = (cCheck)row["cCheck"];
            var CIO        = (cCheckInOut)row["cCheckInOut"];
            var VAO_to_RAA = (checkold.MachineNo % 2 == 1);
            var giocuu     = checkold.Time;
            var lydo       = (cbLyDo_Suaa.SelectedItem != null) ? cbLyDo_Suaa.SelectedItem.ToString() : cbLyDo_Suaa.SelectedText;
            var ghichu     = tbGhiChu_Suaa.Text;

            #region thông báo ko cho chuyển đõi nếu đã xn

            if (CIO.DaXN)
            {
                MessageBox.Show(Resources.Text_GioDaXacnhanKhongTheThayDoi, Resources.Caption_ThongBao);
                return;
            }

            #endregion

            #region hỏi lại trước khi sửa             //tbd

            if (CIO.HaveINOUT < 0 && MessageBox.Show(string.Format(Resources.Text_xacNhanChuyenDoiGioDonGian,
                                                                   VAO_to_RAA ? "vào" : "ra", giocuu.ToString("H:mm dddd d/M"), VAO_to_RAA ? "ra" : "vào", giocuu.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                                     Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            if (CIO.HaveINOUT == 0 && MessageBox.Show(string.Format(Resources.Text_xacNhanChuyenDoiGioDonGian,
                                                                    VAO_to_RAA ? "vào" : "ra", giocuu.ToString("H:mm dddd d/M"), VAO_to_RAA ? "ra" : "vào", giocuu.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                                      Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            #endregion
            var ds_raa3_vao1     = new List <cCheck>();
            var DS_Check_KoHopLe = new List <cCheck>();

            cCheck checknew = !VAO_to_RAA
                                ? new cCheck {
                Type = "I", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                    IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                }
            }
                                : new cCheck {
                Type = "O", MaCC = nhanvien_goc.MaCC, IsEdited = 1, Time = giocuu, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                    IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                }
            };
            XL.SuaGioChoNV(nhanvien_goc.MaCC, checkold, checknew, nhanvien_goc.DS_Check_A, lydo, ghichu);
            XL.LoaiBoCheckKoHopLe1(nhanvien_goc.DS_Check_A, ref DS_Check_KoHopLe);
            XL.GhepCIO_A2(nhanvien_goc.DS_Check_A, out nhanvien_goc.DS_CIO_A);
            XL.XetCa_ListCIO_A3(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V5(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, out nhanvien_goc.DSVaoRa);
            XL.PhanPhoi_DSVaoRa6(nhanvien_goc.DSVaoRa, nhanvien_goc.DSNgayCong);
            XL.PhanPhoi_DSVang7(nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong);
            XL.TinhCong_ListNgayCong8(nhanvien_goc.DSNgayCong);            //ver 4.0.0.4
            XL.TinhPCTC_TrongListXNPCTC9(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhPCDB_TrongListXNPCDB10(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAO5.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAO5.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            IsReload = true;

            #region lấy thông tin từ màn hình

            var giovao           = dtpVao_Them.Value.Add(XL2._01giay);
            var gioraa           = dtpRaa_Them.Value;
            var lydo             = (cbLyDo_Them.SelectedItem != null) ? cbLyDo_Them.SelectedItem.ToString() : cbLyDo_Them.SelectedText;
            var ghichu           = tbGhichu_Them.Text;
            var UserEnrollNumber = nhanvien_goc.MaCC;

            var themVao    = chkGioVao.Checked;
            var themRaa    = chkGioRaa.Checked;
            var currentRow = ((DataRowView)dgrdGioKDQD.SelectedRows[0].DataBoundItem);
            var currentCIO = (currentRow["cCheckInOut"] != DBNull.Value) ? (cCheckInOut)currentRow["cCheckInOut"] : null;
            #endregion
            // Xét mục đích trước
            var dungMucDich = false;
            if (currentCIO != null)
            {
                if (currentCIO.HaveINOUT == -1 && themRaa)
                {
                    if (gioraa - currentCIO.Vao.Time < TimeSpan.Zero || gioraa - currentCIO.Vao.Time > XL2._21h45)
                    {
                        dungMucDich = false;
                    }
                    else
                    {
                        dungMucDich = true;
                    }
                }
                if (currentCIO.HaveINOUT == -2 && themVao)
                {
                    if (currentCIO.Raa.Time - giovao < TimeSpan.Zero || currentCIO.Raa.Time - giovao > XL2._21h45)
                    {
                        dungMucDich = false;
                    }
                    else
                    {
                        dungMucDich = true;
                    }
                }
            }

            if (chkGioVao.Checked)
            {
                #region hỏi lại trước khi thêm
                if (dungMucDich)
                {
                    if (MessageBox.Show(string.Format(Resources.Text_xacNhanThemGioDonGian_dungmucdich, "vào", giovao.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                        Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }
                else
                {
                    if (MessageBox.Show(string.Format(Resources.Text_xacNhanThemGioDonGian_saimucdic, "vào", giovao.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                        Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }

                #endregion

                var checkinn = new cCheck {
                    IsEdited = 1, Type = "I", MachineNo = 21, Source = "PC", MaCC = UserEnrollNumber, Time = giovao, PhucHoi = new cPhucHoi {
                        Them = true, IDGioGoc = -1, Xoaa = false
                    }
                };
                XL.ThemGioChoNV(nhanvien_goc.MaCC, checkinn, nhanvien_goc.DS_Check_A, lydo, ghichu);
            }

            if (chkGioRaa.Checked)
            {
                #region hỏi lại trước khi thêm

                if (dungMucDich)
                {
                    if (MessageBox.Show(string.Format(Resources.Text_xacNhanThemGioDonGian_dungmucdich, "ra", gioraa.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                        Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }
                else
                {
                    if (MessageBox.Show(string.Format(Resources.Text_xacNhanThemGioDonGian_saimucdic, "ra", gioraa.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                        Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        return;
                    }
                }
                #endregion

                var checkout = new cCheck {
                    IsEdited = 1, Type = "O", MachineNo = 22, Source = "PC", MaCC = UserEnrollNumber, Time = gioraa, PhucHoi = new cPhucHoi {
                        Them = true, IDGioGoc = -1, Xoaa = false
                    }
                };
                XL.ThemGioChoNV(nhanvien_goc.MaCC, checkout, nhanvien_goc.DS_Check_A, lydo, ghichu);
            }
            var ds_raa3_vao1     = new List <cCheck>();
            var DS_Check_KoHopLe = new List <cCheck>();

            XL.LoaiBoCheckKoHopLe1(nhanvien_goc.DS_Check_A, ref DS_Check_KoHopLe);
            XL.GhepCIO_A2(nhanvien_goc.DS_Check_A, out nhanvien_goc.DS_CIO_A);
            XL.XetCa_ListCIO_A3(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV, ds_raa3_vao1, nhanvien_goc.DS_Check_A);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DS_Check_KoHopLe.AddRange(DS_Check_KoHopLe);
            }
            XL.TronDS_CIO_A_V5(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, out nhanvien_goc.DSVaoRa);
            XL.PhanPhoi_DSVaoRa6(nhanvien_goc.DSVaoRa, nhanvien_goc.DSNgayCong);
            XL.PhanPhoi_DSVang7(nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong);
            XL.TinhCong_ListNgayCong8(nhanvien_goc.DSNgayCong);            //ver 4.0.0.4
            XL.TinhPCTC_TrongListXNPCTC9(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhPCDB_TrongListXNPCDB10(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAO5.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAO5.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            loadGrid();
        }
        private void btnSuaa_Click(object sender, EventArgs e)
        {
            if (XL2.KiemtraKetnoiCSDL() == false)
            {
                return;
            }

            IsReload = true;

            #region lấy thông tin từ màn hình

            var row       = ((DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem)).Row;
            var CIO       = (cCheckInOut)row["cCheckInOut"];
            var checkold  = (cCheck)row["cCheck"];
            var suagiovao = (checkold.MachineNo % 2 == 1);
            var gioMoi    = dtpGioMoi_Sua.Value;
            var lydo      = (cbLyDo_Suaa.SelectedItem != null) ? cbLyDo_Suaa.SelectedItem.ToString() : cbLyDo_Suaa.Text;
            var ghichu    = tbGhiChu_Suaa.Text;

            #endregion

            #region thông báo không cho sửa nếu là giờ đã xn

            if (CIO.DaXN)
            {
                MessageBox.Show(Resources.Text_GioDaXacnhanKhongTheThayDoi, Resources.Caption_ThongBao);
                return;
            }

            #endregion

            bool hoiLai = (gioMoi - checkold.Time).Duration() > XL2._04gio;

            #region hỏi lại trước khi sửa

            if (hoiLai == false && MessageBox.Show(string.Format(Resources.Text_xacNhanSuaGioDonGian_dungmucdich,
                                                                 suagiovao ? "vào" : "ra", checkold.Time.ToString("H:mm dddd d/M"), gioMoi.ToString("H:mm dddd d/M")),
                                                   Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }
            if (hoiLai && MessageBox.Show(string.Format(Resources.Text_xacNhanSuaGioDonGian_saimucdich,
                                                        suagiovao ? "vào" : "ra", checkold.Time.ToString("H:mm dddd d/M"), gioMoi.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                          Resources.Caption_XacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }


            #endregion

            var ds_raa3_vao1     = new List <cCheck>();
            var DS_Check_KoHopLe = new List <cCheck>();

            cCheck checknew = suagiovao
                                ? new cCheck {
                Type = "I", MaCC = nhanvien_goc.MaCC, Time = gioMoi, Source = "PC", MachineNo = 21, PhucHoi = new cPhucHoi {
                    IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                }
            }
                                : new cCheck {
                Type = "O", MaCC = nhanvien_goc.MaCC, Time = gioMoi, Source = "PC", MachineNo = 22, PhucHoi = new cPhucHoi {
                    IDGioGoc = int.MaxValue, Them = checkold.PhucHoi.Them, Xoaa = checkold.PhucHoi.Xoaa
                }
            };

            XL.SuaGioChoNV(nhanvien_goc.MaCC, checkold, checknew, nhanvien_goc.DS_Check_A, lydo, ghichu);

            XL.LoaiBoCheckKoHopLe1(nhanvien_goc.DS_Check_A, ref DS_Check_KoHopLe);
            XL.GhepCIO_A2(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
            XL.XetCa_ListCIO_A3(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V5(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
            XL.PhanPhoi_DSVaoRa6(nhanvien_goc.DSVaoRa, nhanvien_goc.DSNgayCong);
            XL.PhanPhoi_DSVang7(nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong);
            XL.TinhCong_ListNgayCong8(nhanvien_goc.DSNgayCong, nhanvien_goc.StartNT, nhanvien_goc.EndddNT);            //ver 4.0.0.4
            XL.TinhPCTC_TrongListXNPCTC9(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhPCDB_TrongListXNPCDB10(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            XL.TinhPCNgayVang(nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAO.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAO.ThemGio_ra3_vao1(ds_raa3_vao1);
            }


            loadGrid();
        }
        public void XetCa_ListCIO_A3_V6(List <cCheckInOut> ds_CIO_A, List <cCa> DSCa)
        {
            try {
                var i = 0;
                while (i < ds_CIO_A.Count)
                {
                    var CIO = ds_CIO_A[i];

                    #region nếu giờ quên check thì chỉ kiểm tra khoảng hiểu ca

                    if (CIO.CheckVT != TrangThaiCheck.CheckDayDu)
                    {
                        CIO.ThuocNgayCong = ThuocNgayCong(CIO.TimeDaiDien);
                        Tim_DSCa_NhanDienDuoc(CIO.TimeDaiDien, CIO.ThuocNgayCong, CIO.CheckVT, DSCa, out CIO.DSCaNhanDien);
                        i++;
                        continue;
                    }

                    #endregion

                    var ngay = ThuocNgayCong(CIO.TimeDaiDien);
                    CIO.ThuocNgayCong = ngay;
                    bool namTrongDSCa;
                    cCa  caNhanDien;
                    KiemtraThuocCa(CIO.Vao.Time, CIO.Raa.Time, CIO.ThuocNgayCong, DSCa, out namTrongDSCa, out caNhanDien);

                    #region nếu thuộc khoảng hiểu ca thì set ca

                    if (namTrongDSCa && caNhanDien.TachCaDem == false)                      // ko phải ca 3 và 1
                    {
                        CIO.ThuocCa = caNhanDien;
                        i++;
                    }
                    else if (namTrongDSCa == false)                       // ko thuộc ca nào -> ca tự do
                    {
                        cCa caTuDo;
                        TaoCaTuDo(int.MinValue, CIO.Vao.Time, out caTuDo);
                        CIO.ThuocCa = caTuDo;
                        i++;
                    }
                    else                       // trúng ca 3 và 1 thì tách ra 2 ca
                    {
                        #region check inn, check out vao 3 ra 3, vao 1 ra 1

                        var vaoca3 = CIO.Vao;
                        var raaca3 = new cCheck {
                            Type       = "O",
                            MachineNo  = 22,
                            Source     = "PC",
                            MaCC       = CIO.Vao.MaCC,
                            TypeColumn = "O",
                            Time       = ngay.Add(GlobalVariables._22h00)
                        };
                        var vaoca1 = new cCheck {
                            Type       = "I",
                            MachineNo  = 21,
                            Source     = "PC",
                            MaCC       = CIO.Raa.MaCC,
                            TypeColumn = "I",
                            Time       = ngay.Date.Add(GlobalVariables._6gHomSau).Add(GlobalVariables._01giay),                       //todo lưu ý ở đây cộng thêm 1 ngày, 1 giây để ko bị trùng check cùng giờ 2 máy
                        };
                        var raaca1 = CIO.Raa;

                        #endregion

                        bool thuocDSCa3, thuocDSCa1;
                        cCa  thuocCa3, thuocCa1, caTuDo3, caTuDo1;

                        ds_CIO_A[i] = new cCheckInOut {
                            Vao = vaoca3, Raa = raaca3, ThuocNgayCong = ngay, TimeDaiDien = vaoca3.Time,
                        };
                        KiemtraThuocCa(vaoca3.Time, raaca3.Time, ds_CIO_A[i].ThuocNgayCong, DSCa, out thuocDSCa3, out thuocCa3);
                        if (thuocDSCa3)
                        {
                            ds_CIO_A[i].ThuocCa = thuocCa3;
                        }
                        else
                        {
                            TaoCaTuDo(int.MinValue, ds_CIO_A[i].Vao.Time, out caTuDo3);
                            ds_CIO_A[i].ThuocCa = caTuDo3;
                        }

                        var newCIO = new cCheckInOut {
                            Vao = vaoca1, Raa = raaca1, ThuocNgayCong = ngay.AddDays(1d), TimeDaiDien = vaoca1.Time,
                        };
                        KiemtraThuocCa(vaoca1.Time, raaca1.Time, newCIO.ThuocNgayCong, DSCa, out thuocDSCa1, out thuocCa1);
                        if (thuocDSCa1)
                        {
                            newCIO.ThuocCa = thuocCa1;
                        }
                        else
                        {
                            TaoCaTuDo(int.MinValue, newCIO.Vao.Time, out caTuDo1);
                            newCIO.ThuocCa = caTuDo1;
                        }

                        // vì hàm insert ko cho phép chèn ở vị trí > số lượng phần tử
                        // => nên nếu i là phần tử cuối thì add vào cuối danh sách, ngược lại thì insert vào vị trí i+1
                        if (i == (ds_CIO_A.Count - 1))
                        {
                            ds_CIO_A.Add(newCIO);
                        }
                        else
                        {
                            ds_CIO_A.Insert(i + 1, newCIO);
                        }
                        i = i + 2;                         // +2 vì i là ca3, i+1 là ca 1
                    }
                    #endregion
                }
            }
            catch (Exception e) {
                //lg.Error(string.Format("[{0}]_[{1}]\n", "XLChamCong", System.Reflection.MethodBase.GetCurrentMethod().Name), e);
            }
        }