public static void TinhPCTC_CuaNgay(cNgayCong ngayCong, bool choPhepTinhTC)
 {
     ngayCong.TinhPC50 = choPhepTinhTC;
     Tinh_PCTC5(choPhepTinhTC, ngayCong.QuaDem, ngayCong.TG5.TongGioLamDem, ngayCong.TG5.TongGioTangCuong,
                ngayCong.TG5.HuongPC_Dem, ngayCong.TG5.HuongPC_TangCuongNgay, ngayCong.TG5.HuongPC_TangCuongDem,
                out ngayCong.PhuCaps._30_dem, out ngayCong.PhuCaps._50_TC, out ngayCong.PhuCaps._100_TCC3, out ngayCong.PhuCaps._TongPC);
 }
        private void LoadGroup_Suaa(cNgayCong ngayCong, cChk check)
        {
            if (check == null)
            {
                BUS.MyUtility.EnableDisableControl(false, new Control[] { btnSuaa, btnChuyenDoi, radVao, radRaa, dtpGioMoi_Sua });                // ko tồn tại giờ cũ nên ko cho sửa, chuyển đổi
                BUS.MyUtility.ClearControlText(new Control[] { tbGioCu_Suaa, tbGhiChu_Suaa });
                cbCa_Suaa.DataSource = null;
            }
            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");
                radVao.Checked    = (check.MachineNo % 2 == 1);
                radRaa.Checked    = (check.MachineNo % 2 == 0);

                var dataSource_DSCa = new List <cCaAbs>(dsCa);
                if (cbCa_Suaa.DataSource == null)
                {
                    cbCa_Suaa.ValueMember   = "ID";
                    cbCa_Suaa.DisplayMember = "Code";
                    cbCa_Suaa.DataSource    = dataSource_DSCa;
                }

                dtpGioMoi_Sua.Value       = new DateTime(ngayCong.Ngay.Year, ngayCong.Ngay.Month, ngayCong.Ngay.Day, 0, 0, 1);
                cbLyDo_Suaa.SelectedIndex = 0;
                tbGhiChu_Suaa.Text        = string.Empty;

                //tồn tại giờ cũ nên cho phép sửa
                BUS.MyUtility.EnableDisableControl(true, new Control[] { btnSuaa, btnChuyenDoi, radVao, radRaa, dtpGioMoi_Sua });
            }
        }
        public static void TinhPCTC_CuaNgay(cNgayCong ngayCong, List <structPCTC> DSXNPhuCap50)
        {
            var IndexngayTinhLaiPCTC1 = DSXNPhuCap50.FindIndex(item => item.Ngay == ngayCong.Ngay);
            var kq1 = (IndexngayTinhLaiPCTC1 >= 0) && (DSXNPhuCap50[IndexngayTinhLaiPCTC1].TinhPC50);

            TinhPCTC_CuaNgay(ngayCong, kq1);
        }
Ejemplo n.º 4
0
        public static void HuyBo_TinhPCDB(cUserInfo nhanvien, cNgayCong ngayCong, List <structPCDB> dsxnPhuCapDb)
        {
            var cTemp = dsxnPhuCapDb.FindIndex(item => item.Ngay == ngayCong.Ngay);

            if (cTemp < 0)
            {
            }
            else
            {
                var n1 = DAO5.DeleteTinhPCDB(nhanvien.MaCC, ngayCong.Ngay);                 //info đã log
                dsxnPhuCapDb.Remove(dsxnPhuCapDb[cTemp]);
                ngayCong.TinhPCDB = false;
                ngayCong.PhuCaps._100_LVNN_Ngay  = 0f;
                ngayCong.PhuCaps._150_LVNN_Dem   = 0f;
                ngayCong.PhuCaps._200_LeTet_Ngay = 0f;
                ngayCong.PhuCaps._250_LeTet_Dem  = 0f;
                ngayCong.PhuCaps._Cus            = 0f;
                ngayCong.PhuCaps._TongPC         = 0f;
                ngayCong.TG.Tinh200   = TimeSpan.Zero;
                ngayCong.TG.Tinh260   = TimeSpan.Zero;
                ngayCong.TG.Tinh300   = TimeSpan.Zero;
                ngayCong.TG.Tinh390   = TimeSpan.Zero;
                ngayCong.TG.TinhPCCus = TimeSpan.Zero;
                TinhPCTC_CuaNgay(ngayCong, nhanvien.DSXNPhuCap50);
            }
        }
 public static void TinhPCDB_CuaNgay(cNgayCong ngayCong, int loaiPCDB, float PCNgay, float PCDem)
 {
     ngayCong.TinhPCDB = true;
     ngayCong.LoaiPCDB = loaiPCDB;
     TinhPCDB(ngayCong.TinhPCDB, ngayCong.TG.GioLamViec5, ngayCong.TG.LamBanDem, ngayCong.QuaDem, ngayCong.LoaiPCDB, PCNgay, PCDem,             //tbd
              out ngayCong.TG.Tinh200, out ngayCong.TG.Tinh260, out ngayCong.TG.Tinh300, out ngayCong.TG.Tinh390, out ngayCong.TG.TinhPCCus,
              out ngayCong.PhuCaps._100_LVNN_Ngay, out ngayCong.PhuCaps._150_LVNN_Dem, out ngayCong.PhuCaps._200_LeTet_Ngay, out ngayCong.PhuCaps._250_LeTet_Dem, out ngayCong.PhuCaps._Cus, ref ngayCong.PhuCaps._TongPC);
 }
Ejemplo n.º 6
0
 public static void TinhCong_HangNgay(cNgayCong ngayCong, TimeSpan startNT, TimeSpan endddNT,
                                      out ThoiGian TG, out PhuCap PhuCaps, out float TongCong, out float TongNgayLV, out bool QuaDem)
 {
     TG         = new ThoiGian();
     PhuCaps    = new PhuCap();
     TongCong   = 0f;
     TongNgayLV = 0f;             //ver4.0.0.1
     QuaDem     = false;
 }
        public static void TinhPCDB_CuaNgay(cNgayCong ngayCong, List <structPCDB> DSXNPCDB)
        {
            var ngayTinhLaiPCDB = DSXNPCDB.FindIndex(item => item.Ngay == ngayCong.Ngay);

            if (ngayTinhLaiPCDB >= 0)
            {
                TinhPCDB_CuaNgay(ngayCong, DSXNPCDB[ngayTinhLaiPCDB].LoaiPC, DSXNPCDB[ngayTinhLaiPCDB].PCNgay, DSXNPCDB[ngayTinhLaiPCDB].PCDem);
            }
        }
 private void LapDSNgayCongDeXuLy(int MaCC, FromToDateTime KhoangTG, out List <cNgayCong> DSNgayDaCC)
 {
     DSNgayDaCC = new List <cNgayCong>();
     for (DateTime i = KhoangTG.From; i <= KhoangTG.To; i = i.Add(GlobalVariables._1ngay))
     {
         cNgayCong ngayCong = new cNgayCong {
             Ngay = i, MaCC = MaCC
         };
         //ngayCong.DSVaoRa = (from cCheckInOut_DaCC item in DS_CIO_DaCC where item.Ngay == ngayCong.Ngay select item).ToList();
         DSNgayDaCC.Add(ngayCong);
     }
 }
        private void frm_ThongTinThemGio_Load(object sender, EventArgs e)
        {
            // 1. lấy thông tin nhân viên, fill thông tin vào 2 tb mã và tên nv
            nhanvien_goc = selectedRow["cUserInfo"] as cUserInfo;
            NgayCong_goc = selectedRow["cNgayCong"] as cNgayCong;
            tbMaCC.Text  = nhanvien_goc.MaNV;
            tbTenNV.Text = nhanvien_goc.TenNV;

            //
            // .triển khai load datagrid, trong khi load datagrid cũng đồng thời triển khai load dataSource cho các combobox
            loadGrid();
        }
        private static void ThongKeNgay(ref ThongKeCong_PC thongKeThang, cNgayCong ngayCong)
        {
            thongKeThang.Cong                    += ngayCong.TongCong;
            thongKeThang.TongNgayLV              += ngayCong.TongNgayLV;//ver4.0.0.1
            thongKeThang.PhuCaps._TongPC         += ngayCong.PhuCaps._TongPC;
            thongKeThang.PhuCaps._30_dem         += ngayCong.PhuCaps._30_dem;
            thongKeThang.PhuCaps._50_TC          += ngayCong.PhuCaps._50_TC;
            thongKeThang.PhuCaps._100_TCC3       += ngayCong.PhuCaps._100_TCC3;
            thongKeThang.PhuCaps._100_LVNN_Ngay  += ngayCong.PhuCaps._100_LVNN_Ngay;
            thongKeThang.PhuCaps._150_LVNN_Dem   += ngayCong.PhuCaps._150_LVNN_Dem;
            thongKeThang.PhuCaps._200_LeTet_Ngay += ngayCong.PhuCaps._200_LeTet_Ngay;
            thongKeThang.PhuCaps._250_LeTet_Dem  += ngayCong.PhuCaps._250_LeTet_Dem;
            thongKeThang.PhuCaps._Cus            += ngayCong.PhuCaps._Cus;
            thongKeThang.NgayQuaDem              += (ngayCong.QuaDem) ? 1 : 0;
            foreach (var xpVang in ngayCong.DSVang)
            {
                var WorkingDay = xpVang.WorkingDay;
                switch (xpVang.MaLV_Code)
                {
                case "L":
                    thongKeThang.Le = thongKeThang.Le + WorkingDay;
                    break;

                case "P":
                    thongKeThang.Phep = thongKeThang.Phep + WorkingDay;
                    break;

                case "CV":
                    thongKeThang.CongCV_KB = thongKeThang.CongCV_KB + WorkingDay;                             // tính trước công chờ việc khai báo, tính công chờ việc tự động sau
                    break;

                case "BH":
                case "TS":
                case "BD":                         //info new version
                    thongKeThang.BHXH = thongKeThang.BHXH + WorkingDay;
                    break;

                case "H":
                case "CT":
                case "PT":
                    thongKeThang.H_CT_PT = thongKeThang.H_CT_PT + WorkingDay;
                    break;

                case "PD":
                    thongKeThang.PTDT = thongKeThang.PTDT + WorkingDay;                            //DANGLAM
                    break;

                case "RO":
                    thongKeThang.NghiRo = thongKeThang.NghiRo + WorkingDay;
                    break;
                }
            }
        }
        public static void LoadNgayCong(int macc, List <cNgayCong> dsNgayCong, DateTime indexNgay,
                                        DataTable tableKetcongNgay, DataTable tableKetcongCa)
        {
            cNgayCong ngayCong = new cNgayCong {
                DSVang  = new List <cLoaiVang>(),
                DSVaoRa = new List <cCheckInOut>(),
                Ngay    = indexNgay,
                PhuCaps = new PhuCap(),
                TG      = new ThoiGian()
            };

            //load ket cong ngay
            foreach (DataRow row in tableKetcongNgay.Rows.Cast <DataRow>()
                     .Where(o => ((int)o["UserEnrollNumber"]) == macc && ((DateTime)o["Ngay"]) == indexNgay))
            {
                //v9 xem lai them cac truong khac cua ngaycong
                //1.isEdit, next, prev, trangthaidiemdanh ko su dung
                //info ko can loaipcdb, tinhpc50,tinhpcdb, vi đã tính rồi
                ngayCong.Ngay          = (DateTime)row["Ngay"];
                ngayCong.TongCong_4008 = (float)row["TongCong"];
                //ngayCong.TongNgayLV = (row["TongNgayLV"] != DBNull.Value) ? (float)row["TongNgayLV"] : 0f;//ver4.0.0.1
                ngayCong.CongDinhMucDuoi8Tieng = (float)row["CongDinhMucDuoi8Tieng"]; //ver 4.0.0.8
                ngayCong.CongTichLuy           = (float)row["CongTichLuy"];           //ver 4.0.0.8
                ngayCong.TruCongTreVR          = (float)row["TruCongTreVR"];          //ver 4.0.0.8
                ngayCong.TruCongSomVR          = (float)row["TruCongSomVR"];          //ver 4.0.0.8
                ngayCong.TruCongTreBu          = (float)row["TruCongTreBu"];          //ver 4.0.0.8
                ngayCong.TruCongSomBu          = (float)row["TruCongSomBu"];          //ver 4.0.0.8
                ngayCong.CongBuPhepTre         = (float)row["CongBuPhepTre"];         //ver 4.0.0.8
                ngayCong.CongBuPhepSom         = (float)row["CongBuPhepSom"];         //ver 4.0.0.8
                ngayCong.PhuCaps = new PhuCap {
                    _TongPC         = (float)row["TongPC"],
                    _30_dem         = (float)row["PCDem"],
                    _50_TC          = (float)row["PCTangCuong"],
                    _100_TCC3       = (float)row["PCTangCuong_Dem"],
                    _100_LVNN_Ngay  = (float)row["PC200"],
                    _150_LVNN_Dem   = (float)row["PC260"],
                    _200_LeTet_Ngay = (float)row["PC300"],
                    _250_LeTet_Dem  = (float)row["PC390"],
                    _Cus            = (float)row["PCCus"]
                };
                ngayCong.QuaDem = (bool)row["IsOverNight"];
                ngayCong.TG     = new ThoiGian {
                    GioLamViec = (TimeSpan)row["TGLamViec"],
                    LamThem    = (TimeSpan)row["TGLamThem"],
                    LamBanDem  = (TimeSpan)row["TGLamDem"],
                    GioThuc    = (TimeSpan)row["TGThuc"],                //info  xem lai cac truong khac cua ngayCong.TG, vào trễ? ra sớm?--> do CIO lưu
                };
                ngayCong.DSVang  = new List <cLoaiVang>();               //info danh sách vắng load ở hàm xử lý sau
                ngayCong.DSVaoRa = new List <cCheckInOut>();
                LoadDSVaoRa(macc, indexNgay, ngayCong.DSVaoRa, tableKetcongCa);
            }
            dsNgayCong.Add(ngayCong);
        }
        private void XemCong2(List <cUserInfo> DSNV, FromToDateTime KhoangTG)
        {
            List <int> arrayUEN      = (from cUserInfo item in DSNV select item.MaCC).ToList();
            DataTable  tableArrayUEN = MyUtility.Array_To_DataTable("tableName", arrayUEN);

            List <cCheckInOut_DaCC>   DS_CIO_DaCC;
            List <cXacNhanPhuCapNgay> DS_XN_PC_Ngay;
            List <cKhaiBaoVang>       DS_KhaiBaoVang;
            List <DateTime>           DS_NgayLe;
            DAL_CheckInCheckOut       dal = new DAL_CheckInCheckOut();

            dal.GetCIOData(tableArrayUEN, KhoangTG, out DS_CIO_DaCC);
            dal.GetXacNhanPhuCapNgayData(tableArrayUEN, KhoangTG, out DS_XN_PC_Ngay);
            dal.GetNgayVangData(tableArrayUEN, KhoangTG, out DS_KhaiBaoVang);
            dal.GetNgayLeData(KhoangTG, out DS_NgayLe);
            foreach (cUserInfo nhanvien in DSNV)
            {
                int maCC = nhanvien.MaCC;
                LapDSNgayCongDeXuLy(maCC, KhoangTG, out nhanvien.DSNgayDaCC);

                foreach (cXacNhanPhuCapNgay xacNhanPhuCapNgay in DS_XN_PC_Ngay)
                {
                    cNgayCong ngayCoPhuCap = nhanvien.DSNgayDaCC.Single(item => item.Ngay == xacNhanPhuCapNgay.Ngay);
                    ngayCoPhuCap.SetXacNhanPhuCap(xacNhanPhuCapNgay.DuocTinhPCTC, xacNhanPhuCapNgay.DuocTinhPCNgayNghi, xacNhanPhuCapNgay.DuocTinhPCNgayLe, xacNhanPhuCapNgay.DuocTinhPCThuCong, xacNhanPhuCapNgay.PhuCapTay);
                    //ngayCoPhuCap.TinhLaiPhuCap();
                }

                foreach (cKhaiBaoVang khaiBaoVang in DS_KhaiBaoVang)
                {
                    cNgayCong ngayCoKBVang = nhanvien.DSNgayDaCC.Single(item => item.Ngay == khaiBaoVang.Ngay);
                    ngayCoKBVang.DSVang.Add(khaiBaoVang);
                }

                foreach (DateTime ngayLe in DS_NgayLe)
                {
                    cNgayCong ngayDuocChamCongLe = nhanvien.DSNgayDaCC.Single(item => item.Ngay == ngayLe);
                    ngayDuocChamCongLe.IsHoliday = true;
                }

                foreach (cNgayCong ngayCong in nhanvien.DSNgayDaCC)
                {
                    DateTime ngay = ngayCong.Ngay;
                    foreach (cCheckInOut_DaCC CIO_DaCC in DS_CIO_DaCC.Where(item => item.Ngay == ngay && item.MaCC == maCC))
                    {
                        ngayCong.Them_CheckInOut_DaCC(CIO_DaCC);
                    }
                    ngayCong.TinhLaiPhuCap();
                }
            }
        }
 public static void LoadNgayLe(List <cNgayCong> dsNgayCong, DataTable tableNgayLe)
 {
     foreach (DataRow row in tableNgayLe.Rows.Cast <DataRow>())
     {
         cLoaiVang vangLe = new cLoaiVang {
             MaLV_Code  = "L",
             MoTa       = "Lễ, tết",
             Ngay       = (DateTime)row["HDate"],
             WorkingDay = 1f
         };
         cNgayCong ngayCong = dsNgayCong.Find(o => o.Ngay == vangLe.Ngay);
         ngayCong.DSVang.Add(vangLe);
     }
 }
Ejemplo n.º 14
0
        private DataRow CreateDataRow_CIO_ThieuChamCong(DataTable dataTable, cUserInfo Nhanvien, cNgayCong NgayCong, cCheckInOut CIO)
        {
            DataRow kq = dataTable.NewRow();

            kq["UserEnrollNumber"] = Nhanvien.MaCC;
            kq["UserFullName"]     = Nhanvien.TenNV;
            kq["UserFullCode"]     = Nhanvien.MaNV;
            kq["Ngay"]             = NgayCong.Ngay;
            kq["GioVao"]           = CIO.Vao != null ? CIO.Vao.Time : (object)DBNull.Value;
            kq["GioRa"]            = CIO.Raa != null ? CIO.Raa.Time : (object)DBNull.Value;
            kq["DSCa"]             = CIO.ExportKyHieuThuocCa1_5(true).XoaKyTuPhanCachDauTien();
            kq["cCheckInOut"]      = CIO;
            kq["cUserInfo"]        = Nhanvien;
            kq["cNgayCong"]        = NgayCong;

            return(kq);
        }
        private void frm_ThongTinThemGio_Load(object sender, EventArgs e)
        {
            // 1. lấy thông tin nhân viên, fill thông tin vào 2 tb mã và tên nv
            nhanvien_goc = selectedRow["cUserInfo"] as cUserInfo;
            NgayCong_goc = selectedRow["cNgayCong"] as cNgayCong;
            tbMaCC.Text  = nhanvien_goc.MaNV;
            tbTenNV.Text = nhanvien_goc.TenNV;

            //tạo dsCa gốc cho toàn form, combobox nào muốn sử dụng lại thì tạo mới từ cái gốc này và thay đổi tùy ý để giữ cái này làm gốc ko bị thay đổi
            dsCa = new List <cCaAbs>(nhanvien_goc.LichTrinhLV.DSCa);;
            dsCa.Insert(0, new cCaChuan {
                ID = -1, Code = "--"
            });
            //
            // .triển khai load datagrid, trong khi load datagrid cũng đồng thời triển khai load dataSource cho các combobox
            loadGrid();
        }
 public static void LoadDSXPVang(int macc, List <cNgayCong> dsNgayCong, DataTable tableXpVang)
 {
     foreach (DataRow row in tableXpVang.Rows.Cast <DataRow>()
              .Where(o => ((int)o["UserEnrollNumber"] == macc))
              )
     {
         cLoaiVang xpVang = new cLoaiVang {
             MaLV_Code  = row["AbsentCode"].ToString(),
             MoTa       = row["AbsentDescription"].ToString(),
             Ngay       = (DateTime)row["TimeDate"],
             WorkingDay = (float)row["Workingday"],
         };
         cNgayCong ngayCong = dsNgayCong.Find(o => o.Ngay == xpVang.Ngay);
         if (ngayCong != null)
         {
             ngayCong.DSVang.Add(xpVang);
         }
     }
 }
Ejemplo n.º 17
0
        private void toolTipController1_GetActiveObjectInfo(object sender, DevExpress.Utils.ToolTipControllerGetActiveObjectInfoEventArgs e)
        {
            if (e.SelectedControl != gridControl1)
            {
                return;
            }

            ToolTipControlInfo info = null;
            //Get the view at the current mouse position
            GridView view = gridControl1.GetViewAt(e.ControlMousePosition) as GridView;

            if (view == null)
            {
                return;
            }
            //Get the view's element information that resides at the current position
            GridHitInfo hi = view.CalcHitInfo(e.ControlMousePosition);

            //Display a hint for row indicator cells
            if (hi.HitTest == GridHitTest.RowCell)
            {
                //An object that uniquely identifies a row indicator cell
                DataRow   dataRow  = view.GetDataRow(hi.RowHandle);
                cNgayCong ngayCong = (cNgayCong)dataRow["cNgayCong"];
                if (ngayCong == null)
                {
                    return;
                }
                string text = XL.TaoTooltip5(ngayCong);
                object o    = hi.HitTest.ToString() + hi.RowHandle.ToString();
                //string text = "Row " + hi.RowHandle.ToString();
                info = new ToolTipControlInfo(o, text);
            }
            //Supply tooltip information if applicable, otherwise preserve default tooltip (if any)
            if (info != null)
            {
                e.Info = info;
            }
        }
Ejemplo n.º 18
0
 private void loadRow(cUserInfo nhanvien_goc, cNgayCong ngayCong)
 {
     if (ngayCong == null || ngayCong.DSVaoRa.Count == 0)
     {
         return;
     }
     foreach (var CIO in ngayCong.DSVaoRa)
     {
         var row = m_Bang_ChiTiet.NewRow();
         row["UserEnrollNumber"] = nhanvien_goc.MaCC;
         row["UserFullName"]     = nhanvien_goc.TenNV;
         row["UserFullCode"]     = nhanvien_goc.MaNV;
         row["TimeStrNgay"]      = ngayCong.Ngay;
         row["TimeStrVao"]       = (CIO.Vao != null) ? CIO.Vao.Time : (object)DBNull.Value;
         row["TimeStrRaa"]       = (CIO.Raa != null) ? CIO.Raa.Time : (object)DBNull.Value;
         row["ShiftCode"]        = CIO.CIOCodeFull();
         row["cUserInfo"]        = nhanvien_goc;
         row["cCheckInOut"]      = CIO;
         row["cNgayCong"]        = ngayCong;
         m_Bang_ChiTiet.Rows.Add(row);
     }
 }
Ejemplo n.º 19
0
        public static void TinhPCDB(cUserInfo nhanvien, cNgayCong ngayCong, DateTime ngay, int loai, int pcBanNgay, int pcBanDem, string noidungLog)
        {
            var n1    = DAO5.UpdIns_TinhPCDB(nhanvien.MaCC, ngay, loai, pcBanNgay, pcBanDem, noidungLog);
            var index = nhanvien.DSXNPhuCapDB.FindIndex(o => o.Ngay == ngay);

            if (index < 0)               // chưa có --> tạo mới trong DSXNPhuCapDB
            {
                var structpc = new structPCDB {
                    LoaiPC = loai, PCNgay = pcBanNgay, PCDem = pcBanDem, Ngay = ngay, Duyet = true
                };
                nhanvien.DSXNPhuCapDB.Add(structpc);
                nhanvien.DSXNPhuCapDB.Sort(new cTempComparer());
            }
            else               // đã có --> update trong DSXNPhuCapDB
            {
                nhanvien.DSXNPhuCapDB[index] = new structPCDB {
                    LoaiPC = loai, PCNgay = pcBanNgay, PCDem = pcBanDem, Ngay = ngay, Duyet = true
                };
            }
            // sau khi thực hiện trong DSXNPhuCapDB xong thì tính phụ cấp cho ngày ngày
            TinhPCDB_CuaNgay(ngayCong, loai, pcBanNgay, pcBanDem);
        }
        public static string TaoTooltip5(cNgayCong ngayCong)
        {
            if (ngayCong == null)
            {
                return(string.Empty);
            }
            //string kq = "{0}\n{1}\n{2}\n{3}\n{4}\n{5}";
            string template = "{0}\n{1}\n{2}";
            string kq = string.Empty;
            string vaoRaHomTruoc = string.Empty, vaoRaHomNay = string.Empty, vaoRaHomSau = string.Empty;

            if (ngayCong.prev != null)
            {
                vaoRaHomTruoc = ngayCong.prev.ExportString5();
            }
            vaoRaHomNay = ngayCong.ExportString5();
            if (ngayCong.next != null)
            {
                vaoRaHomSau = ngayCong.next.ExportString5();
            }
            kq = string.Format(template, vaoRaHomTruoc, vaoRaHomNay, vaoRaHomSau);
            return(kq);
        }
        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 void XuatTableXemCong_AddNewRow(DataRow dataRow, cUserInfo nhanVien, cNgayCong ngayCong,
                                               ref int SoTH_ThieuCC, ref int SoTH_TreSom, ref int SoTH_ChoPhepTreSom)
        {
            foreach (var checkInOutDaCc in ngayCong.DSVaoRa)
            {
                if (checkInOutDaCc.CheckVT != TrangThaiCheck.CheckDayDu)
                {
                    SoTH_ThieuCC++;
                }
                if ((checkInOutDaCc.ChoPhepTre == false && checkInOutDaCc.Tre > TimeSpan.Zero) ||
                    (checkInOutDaCc.ChoPhepSom == false && checkInOutDaCc.Som > TimeSpan.Zero))
                {
                    SoTH_TreSom++;
                }
                if (checkInOutDaCc.ChoPhepTre || checkInOutDaCc.ChoPhepSom)
                {
                    SoTH_ChoPhepTreSom++;
                }
            }

            dataRow[f2.UserEnrollNumber.ToString()] = nhanVien.MaCC;
            dataRow[f2.UserFullName.ToString()]     = nhanVien.TenNV;
            dataRow[f2.UserFullCode.ToString()]     = nhanVien.MaNV;
            dataRow[f2.Ngay.ToString()]             = ngayCong.Ngay;
            dataRow[f2.KyHieuCa.ToString()]         = ngayCong.KyHieuCa_1Ngay;   //todo
            dataRow[f2.KyHieuVang.ToString()]       = ngayCong.KyHieuVang_1Ngay; //todo
            dataRow[f2.TongCong.ToString()]         = ngayCong.TongCong;         //todo
            dataRow[f2.TongPhuCap.ToString()]       = ngayCong.TongPhuCap;
            dataRow[f2.TongGioLamViec.ToString()]   = ngayCong.LamViec;
            dataRow[f2.TongGioHienDien.ToString()]  = ngayCong.HienDien;           //todo
            dataRow[f2.TongPhutTreSom.ToString()]   = ngayCong.Tre + ngayCong.Som;
            dataRow[f2.TongPhutTre.ToString()]      = ngayCong.Tre;
            dataRow[f2.TongPhutSom.ToString()]      = ngayCong.Som;
            dataRow[f2.TongGioLamDem.ToString()]    = ngayCong.LamDem;
            dataRow[f2.TongGioLamThem.ToString()]   = ngayCong.LamThem;
        }
        private void btnSuaGio_Click(object sender, EventArgs e)
        {
            DataRowView row = dgrdTongHop.Tag as DataRowView;

            if (row == null)
            {
                return;
            }
            cUserInfo tmpNV = flstDSNVChk.Find(o => o.UserEnrollNumber == (int)row["UserEnrollNumber"]);

            DateTime tmpOldVao   = (row["TimeStrVao"] != DBNull.Value) ? (DateTime)row["TimeStrVao"] : DateTime.MinValue;
            DateTime tmpOldRaa   = (row["TimeStrRa"] != DBNull.Value) ? (DateTime)row["TimeStrRa"] : DateTime.MinValue;
            DateTime tmpNgayCong = (DateTime)row["TimeStrNgay"];

            cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong);
            cChkInOut old_CIO;

            if (ngayCong.HasCheck == false || (tmpOldVao == DateTime.MinValue && tmpOldRaa == DateTime.MinValue))
            {
                old_CIO = null;
            }
            else if (tmpOldVao == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Raa.TimeStr == tmpOldRaa);
            }
            else if (tmpOldRaa == DateTime.MinValue)
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT < 0 && o.Vao.TimeStr == tmpOldVao);
            }
            else
            {
                old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpOldVao && o.Raa.TimeStr == tmpOldRaa);
            }
            if (old_CIO != null && old_CIO.DaXN == true)
            {
                MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                return;
            }

            string Lydo = string.Empty;

            if (string.IsNullOrEmpty(cbLyDo_Sua.Text) == false)
            {
                Lydo = cbLyDo_Sua.Text;
            }
            else if (cbLyDo_Sua.SelectedItem != null)
            {
                Lydo = (string)cbLyDo_Sua.SelectedItem;
            }

            if (checkVao_Sua.Checked)
            {
                dtpVao_Sua.Update();
                cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldVao && o.MachineNo % 2 == 1);
                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpVao_Sua.Value, true, Lydo, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            if (checkRa_Sua.Checked)
            {
                dtpRa_Sua.Update();
                cChk tmpCheck = tmpNV.ds_CheckAuto.Find(o => o.TimeStr == tmpOldRaa && o.MachineNo % 2 == 0);
                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpCheck, dtpRa_Sua.Value, false, Lydo, tbGhiChu_Sua.Text) == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                }
            }
            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
                return;
            }
            GC.Collect();
        }
        private void btnDaoKieuChamCong_Click(object sender, EventArgs e)
        {
            dgrdTongHop.EndEdit();
            DataTable table = (dgrdTongHop.DataSource) as DataTable;

            if (table == null)
            {
                return;
            }
            DataRow[] arrRecord = table.Select("check = true", "UserEnrollNumber asc");
            if (arrRecord.Length == 0)
            {
                AutoClosingMessageBox.Show("Chưa chọn dòng dữ liệu thao tác.", "Thông báo", 2000);
                return;
            }

            bool flag = false;

            foreach (DataRow row in arrRecord)
            {
                // kiểm tra trước khi thực hiện
                if (row["TimeStrVao"] != DBNull.Value && row["TimeStrRa"] != DBNull.Value)
                {
                    flag = true;
                    continue;
                }
                cUserInfo tmpNV   = flstDSNVChk.Find(item => item.UserEnrollNumber == (int)row["UserEnrollNumber"]);
                cNgayCong tmpNgay = tmpNV.DSNgayCong.Find(item => item.NgayCong == (DateTime)row["TimeStrNgay"]);
                DateTime  tmpOldTime;
                cChk      tmpChkOld;
                bool      tmpIsCheckInOld;
                if (row["TimeStrVao"] != DBNull.Value)
                {
                    tmpOldTime      = (DateTime)row["TimeStrVao"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkIn));
                    tmpIsCheckInOld = true;
                }
                else
                {
                    tmpOldTime      = (DateTime)row["TimeStrRa"];
                    tmpChkOld       = tmpNV.ds_CheckAuto.Find(item => item.TimeStr == tmpOldTime && item.GetType() == typeof(cChkOut));
                    tmpIsCheckInOld = false;
                }
                if (tmpChkOld == null)
                {
                    MessageBox.Show("Không thể sửa giờ đã được xác nhận.", "Thông báo");
                    continue;
                }

                if (XL.SuaGioChoNV(tmpNV.UserEnrollNumber, tmpChkOld, tmpChkOld.TimeStr, !tmpIsCheckInOld, "Chấm nhầm máy", "Thay đổi Số máy check") == false)
                {
                    MessageBox.Show("Không sửa được giờ cho nhân viên. Vui lòng thử lại.", "Lỗi");
                    break;
                }
            }

            if (flag)
            {
                AutoClosingMessageBox.Show("Không thể đảo ngược giờ có đủ giờ vào và giờ ra", "Thông báo", 2000);
            }

            try {
                XL.XemCong(flstDSNVChk, fNgayBD, fNgayKT);
                loadTable();
            } catch (Exception) {
                MessageBox.Show("Mất kết nối đến máy chủ. Vui lòng thử lại sau.", "Lỗi");
            }
            GC.Collect();
        }
        private void loadTable()
        {
            DataTable table = (dgrdTongHop.DataSource) as DataTable;

            if (table == null || table.Rows.Count != 0)
            {
                table = TaoCauTrucTableCTGioVaoRa();
            }
            else
            {
                table.Rows.Clear();
            }
            //[TBD] nhớ check null
            int lastRowIndex = (int)xemCT[0, 0];

            for (int i = 1; i < lastRowIndex; i++)
            {
                int       UserEnrollNumber = (int)xemCT[i, 1];
                cUserInfo tmpNV            = flstDSNVChk.Find(o => o.UserEnrollNumber == UserEnrollNumber);

                int slcot = (int)xemCT[i, 0];
                int j     = 2;
                while (j < slcot && xemCT[i, j] != null)
                {
                    DateTime  ngay        = (DateTime)xemCT[i, j];
                    cNgayCong tmpNgayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong.Date == ngay.Date);
                    //DataRow row = table.NewRow();
                    #region neu ngày đó vắng => các giá trị null
                    if (tmpNgayCong.HasCheck == false)
                    {
                        DataRow subrow = table.NewRow();
                        subrow["check"]            = false;
                        subrow["UserEnrollNumber"] = tmpNV.UserEnrollNumber;
                        subrow["UserFullName"]     = tmpNV.UserFullName;
                        subrow["TimeStrNgay"]      = subrow["TimeStrThu"] = tmpNgayCong.NgayCong;
                        subrow["TimeStrVao"]       = subrow["TimeStrRa"] = subrow["ShiftCode"] = subrow["ShiftID"] = DBNull.Value;
                        table.Rows.Add(subrow);
                        j++;
                        continue;
                    }
                    #endregion
                    #region nếu có check thì gán giá trị
                    foreach (cChkInOut chkInOut in tmpNgayCong.DSVaoRa)
                    {
                        DataRow subrow = table.NewRow();
                        subrow["check"]            = false;
                        subrow["UserEnrollNumber"] = tmpNV.UserEnrollNumber;
                        subrow["UserFullName"]     = tmpNV.UserFullName;
                        subrow["TimeStrNgay"]      = subrow["TimeStrThu"] = tmpNgayCong.NgayCong;
                        subrow["TimeStrVao"]       = (chkInOut.Vao != null) ? chkInOut.Vao.TimeStr : (object)DBNull.Value;
                        subrow["TimeStrRa"]        = (chkInOut.Raa != null) ? chkInOut.Raa.TimeStr : (object)DBNull.Value;
                        subrow["ShiftCode"]        = (chkInOut.ThuocCa != null) ? chkInOut.ThuocCa.ShiftCode : (object)DBNull.Value;
                        subrow["ShiftID"]          = (chkInOut.ThuocCa != null) ? chkInOut.ThuocCa.ShiftID : (object)DBNull.Value;
                        table.Rows.Add(subrow);
                    }
                    #endregion
                    j++;
                }
            }
            dgrdTongHop.DataSource = table;
            dgrdTongHop.Select();
        }
        private void dgrdTongHop_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            DataTable tmpTable = (dgrdTongHop.DataSource as DataTable);

            if (tmpTable == null || tmpTable.Rows.Count == 0)
            {
                return;
            }
            if (e.RowIndex == -1)
            {
                return;
            }
            DataRowView dataRowView = dgrdTongHop.Rows[e.RowIndex].DataBoundItem as DataRowView;

            dgrdTongHop.Tag = dataRowView;
            if (dataRowView == null)
            {
                return;
            }

            int       tmpUserEnrollNumber = (int)dataRowView["UserEnrollNumber"];
            cUserInfo tmpNV       = flstDSNVChk.Find(o => o.UserEnrollNumber == tmpUserEnrollNumber);
            DateTime  tmpNgayCong = (DateTime)dataRowView["TimeStrNgay"];
            //test += "\nTimeStrNgay:" + tmpNgayCong.ToShortDateString() + " ";
            DateTime tmpVao = (dataRowView["TimeStrVao"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dataRowView["TimeStrVao"];
            DateTime tmpRa  = (dataRowView["TimeStrRa"] == DBNull.Value) ? DateTime.MinValue : (DateTime)dataRowView["TimeStrRa"];
            //test += "\ttmpVao:" + tmpVao.ToShortTimeString() + " \ttmpRa" + tmpRa.ToShortTimeString();

            cNgayCong ngayCong = tmpNV.DSNgayCong.Find(o => o.NgayCong == tmpNgayCong);
            //test += tmpNV + "\n " + ngayCong;
            //log.Info(test);
            cChkInOut old_CIO = new cChkInOut();

            try {
                if (ngayCong.HasCheck == false || (tmpVao == DateTime.MinValue && tmpRa == DateTime.MinValue))
                {
                    old_CIO = null;
                }
                else if (tmpVao == DateTime.MinValue && tmpRa != DateTime.MinValue)
                {
                    old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT == -1 && o.Raa.TimeStr == tmpRa);
                }
                else if (tmpRa == DateTime.MinValue && tmpVao != DateTime.MinValue)
                {
                    old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT == -2 && o.Vao.TimeStr == tmpVao);
                }
                else
                {
                    old_CIO = ngayCong.DSVaoRa.Find(o => o.HaveINOUT > 0 && o.Vao.TimeStr == tmpVao && o.Raa.TimeStr == tmpRa);
                }

                LoadTabThemGio(tmpNV, tmpNgayCong, old_CIO);
                LoadTabSuaGio(tmpNV, tmpNgayCong, old_CIO);
                cbLyDo_Xoa.SelectedIndex = 0;
                cbLyDo_Xoa.Text          = string.Empty;
                tbGhiChu_Xoa.Text        = string.Empty;
            } catch (Exception ex) {
                string temp = "\n--start \n NV: " + tmpNV + "\nCIO: ";
                temp += (old_CIO != null) ? old_CIO.ToString() : "null";
                temp += "\n--end";
                log.Fatal(ex.StackTrace + temp);
                AutoClosingMessageBox.Show("Có lỗi trong quá trình thao tác.", "Lỗi", 1500);
            }
        }
        private void loadRow(cNgayCong ngayCong, bool isEnableEdit)
        {
            if (ngayCong.DSVaoRa.Count == 0)
            {
                var row1 = m_Bang_ChiTiet.NewRow();
                var row2 = m_Bang_ChiTiet.NewRow();
                row1["cNgayCong"]    = row2["cNgayCong"] = ngayCong;
                row1["cUserInfo"]    = row2["cUserInfo"] = nhanvien_goc;
                row1["TimeStrThu"]   = row1["TimeStrNgay"] = ngayCong.Ngay.Date;
                row2["TimeStrThu"]   = row2["TimeStrNgay"] = ngayCong.Ngay.Date;
                row1["Loai"]         = "Vào";
                row2["Loai"]         = "Ra";
                row1["IsEdited"]     = (ngayCong.IsEdited > 0);
                row2["IsEdited"]     = (ngayCong.IsEdited > 0);
                row1["IsEnableEdit"] = isEnableEdit;
                row2["IsEnableEdit"] = isEnableEdit;

                m_Bang_ChiTiet.Rows.Add(row1);
                m_Bang_ChiTiet.Rows.Add(row2);
                return;
            }

            foreach (var CIO in ngayCong.DSVaoRa)
            {
                var row1 = m_Bang_ChiTiet.NewRow();
                var row2 = m_Bang_ChiTiet.NewRow();
                row1["Loai"]       = "Vào";
                row2["Loai"]       = "Ra";
                row1["cNgayCong"]  = row2["cNgayCong"] = ngayCong;
                row1["cUserInfo"]  = row2["cUserInfo"] = nhanvien_goc;
                row1["TimeStrThu"] = row1["TimeStrNgay"] = ngayCong.Ngay.Date;
                row2["TimeStrThu"] = row2["TimeStrNgay"] = ngayCong.Ngay.Date;
                var temp = CIO.CIOCodeFull();
                if (CIO.HaveINOUT == -1)
                {
                    row1["cChk"]      = CIO.Vao;
                    row1["TimeStr"]   = CIO.Vao.Time;
                    row1["MachineNo"] = CIO.Vao.MachineNo;
                    row1["Source"]    = CIO.Vao.Source;
                    row1["ShiftCode"] = temp;
                }
                else if (CIO.HaveINOUT == -2)
                {
                    row2["cChk"]      = CIO.Raa;
                    row2["TimeStr"]   = CIO.Raa.Time;
                    row2["MachineNo"] = CIO.Raa.MachineNo;
                    row2["Source"]    = CIO.Raa.Source;
                    row2["ShiftCode"] = temp;
                }
                else
                {
                    row1["cChk"]      = CIO.Vao;
                    row2["cChk"]      = CIO.Raa;
                    row1["TimeStr"]   = CIO.Vao.Time;
                    row2["TimeStr"]   = CIO.Raa.Time;
                    row1["MachineNo"] = CIO.Vao.MachineNo;
                    row2["MachineNo"] = CIO.Raa.MachineNo;
                    row1["Source"]    = CIO.Vao.Source;
                    row2["Source"]    = CIO.Raa.Source;
                    row1["ShiftCode"] = row2["ShiftCode"] = temp;
                }

                row1["IsEdited"] = (CIO.IsEdited > 0);
                row2["IsEdited"] = (CIO.IsEdited > 0);

                row1["IsEnableEdit"] = isEnableEdit;
                row2["IsEnableEdit"] = isEnableEdit;

                m_Bang_ChiTiet.Rows.Add(row1);
                m_Bang_ChiTiet.Rows.Add(row2);
            }
        }
        private void btnChuyenDoi_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;
            var row      = ((DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem)).Row;
            var checkold = (cChk)row["cChk"];
            var loaiCuu  = (checkold.GetType() == typeof(cChkInn_A));
            var loaiMoi  = !loaiCuu;
            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 (checkold is cChkInn_V || checkold is cChkOut_V)
            {
                MessageBox.Show(Resources.GioDaXacnhanKhongTheThayDoi, Resources.capThongBao);
                return;
            }

            #endregion

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

            if (loaiCuu)
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "vào", giocuu.ToString("H:mm dddd d/M"), "ra", nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }
            else
            {
                if (MessageBox.Show(string.Format(Resources.xacNhanChuyenDoiGioDonGian, "ra", giocuu.ToString("H:mm dddd d/M"), "vào", nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }
            }

            #endregion
            var ds_raa3_vao1     = new List <cChk>();
            var DS_Check_KoHopLe = new List <cChk>();

            cChk checknew;
            if (loaiMoi)
            {
                checknew = new cChkInn_A {
                    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
                    }
                }
            }
            ;                                                                                                                                                                                                                                                                 // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0
            else
            {
                checknew = new cChkOut_A {
                    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
                    }
                }
            };                                                                                                                                                                                                                                                                // tbd trạng thái?? tạm thời lấy int.maxvalue tức sửa > 0
            XL.SuaGioChoNV(checkold, checknew, nhanvien_goc, XL2.currUserID, lydo, ghichu);
            XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A });
            XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
            XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            if (nhanvien_goc.DS_Check_KoHopLe.Count > 0)
            {
                DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe);
                nhanvien_goc.DS_Check_KoHopLe.Clear();
            }

            XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
            XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50);
            XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            m_Bang_ChiTiet.Rows.Clear();
            loadGrid();
        }
        private void btnXoaa_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                return;
            }

            IsReload = true;

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

            var row    = ((DataRowView)((dgrdGioKDQD.SelectedRows[0]).DataBoundItem)).Row;
            var check  = (cChk)row["cChk"];
            var lydo   = (cbLyDo_Xoaa.SelectedItem != null) ? cbLyDo_Xoaa.SelectedItem.ToString() : cbLyDo_Xoaa.SelectedText;
            var ghichu = tbGhiChu_Xoaa.Text;

            #endregion

            #region thông báo ko cho sửa nếu đã xác nhận rồi

            if (check is cChkInn_V || check is cChkOut_V)
            {
                MessageBox.Show(Resources.GioDaXacnhanKhongTheThayDoi, Resources.capThongBao);
                return;
            }

            #endregion

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

            if (MessageBox.Show((string.Format(Resources.xacNhanXoaGioDonGian, check.Time.ToString("H:mm dddd d/M"))),
                                Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
            {
                return;
            }

            #endregion


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

            // xóa khỏi ds nên ko cần sắp xếp lại
            if (XL.XoaGioChoNV(check, nhanvien_goc, XL2.currUserID, lydo, ghichu))
            {
                XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
                XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
                XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
                if (nhanvien_goc.DS_Check_KoHopLe.Count > 0)
                {
                    DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe);
                    nhanvien_goc.DS_Check_KoHopLe.Clear();
                }

                XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A);                //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
                XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
                XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50);
                XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
                XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);

                NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay);
            }
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            // update lại table
            m_Bang_ChiTiet.Rows.Clear();
            loadGrid();
        }
        private void btnThem_Click(object sender, EventArgs e)
        {
            if (SqlDataAccessHelper.TestConnection(SqlDataAccessHelper.ConnectionString) == false)
            {
                AutoClosingMessageBox.Show("Mất kết nối với CSDL. Vui lòng thử lại sau.", "Lỗi", 2000);
                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;

            #endregion

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

                if (MessageBox.Show(string.Format(Resources.xacNhanThemGioVaoDonGian, giovao.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                #endregion

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

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

                if (MessageBox.Show(string.Format(Resources.xacNhanThemGioRaaDonGian, gioraa.ToString("H:mm dddd d/M"), nhanvien_goc.TenNV),
                                    Resources.capXacNhan, MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    return;
                }

                #endregion

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

            XL.SapXepDS_Check(new[] { nhanvien_goc.DS_Check_A });
            XL.LoaiBoCheckCungLoaiTrong30phut(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            XL.GhepCIO_A(nhanvien_goc.DS_Check_A, nhanvien_goc.DS_CIO_A);
            XL.LoaiBoCIOKoHopLe(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_Check_A, nhanvien_goc.DS_Check_KoHopLe);
            if (nhanvien_goc.DS_Check_KoHopLe.Count > 0)
            {
                DS_Check_KoHopLe.AddRange(nhanvien_goc.DS_Check_KoHopLe);
                nhanvien_goc.DS_Check_KoHopLe.Clear();
            }
            XL.XetCa_CIO_A(nhanvien_goc.DS_CIO_A, nhanvien_goc.LichTrinhLV.DSCa, ds_raa3_vao1, nhanvien_goc.DS_Check_A);            //nhanvien_goc.MacDinhTinhPC50, //[140615_4]
            XL.TronDS_CIO_A_V(nhanvien_goc.DS_CIO_A, nhanvien_goc.DS_CIO_V, nhanvien_goc.DSVaoRa);
            XL.TinhCongTheoNgay(nhanvien_goc.DSVaoRa, nhanvien_goc.NgayCongBD_Bef2D, nhanvien_goc.NgayCongKT_Aft2D, nhanvien_goc.DSVang, nhanvien_goc.DSNgayCong, nhanvien_goc.MacDinhTinhPC50);
            XL.TinhLaiPhuCapTC(nhanvien_goc.DSXNPhuCap50, nhanvien_goc.DSNgayCong);
            XL.TinhLaiPhuCapDB(nhanvien_goc.DSXNPhuCapDB, nhanvien_goc.DSNgayCong);
            NgayCong_goc = nhanvien_goc.DSNgayCong.Find(o => o.Ngay == NgayCong_goc.Ngay);
            if (DS_Check_KoHopLe.Count > 0)
            {
                DAL.LoaiGioLienQuan(DS_Check_KoHopLe);
            }
            if (ds_raa3_vao1.Count > 0)
            {
                DAL.ThemGio_ra3_vao1(ds_raa3_vao1);
            }

            m_Bang_ChiTiet.Rows.Clear();
            loadGrid();
        }