public static void LoadThongtinLamViecCongNhat(int MaCC, ref DateTime NgayBDCongnhat, ref DateTime NgayKTCongnhat, ref LoaiCongNhat NVCongnhat, List <cNgayCong> DSNgayCong, DataTable tableDSNVChiCongnhatThang)          //info cái này chỉ dành cho nhân viên chính thức chưa áp dụng cho nhân viên công nhật
        // tìm các nhân viên vừa làm công nhật vừa làm chính thức
        {
            var rowsCongNhat = (from DataRow tempRow in tableDSNVChiCongnhatThang.Rows
                                where (int)tempRow["UserEnrollNumber"] == MaCC                                //  && (tempRow["NVChinhThuc"] != DBNull.Value && (bool)tempRow["NVChinhThuc"] == true
                                select tempRow).SingleOrDefault();

            // với các nhân viên này thì chỉ tính công khoảng thời gian làm công nhật, các khoảng khác phải loại bỏ
            if (rowsCongNhat != null)
            {
                NgayBDCongnhat = (DateTime)rowsCongNhat["NgayBatDau"];
                NgayKTCongnhat = (DateTime)rowsCongNhat["NgayKetThuc"];
                NVCongnhat     = ((bool)rowsCongNhat["NVChinhThuc"]) ? LoaiCongNhat.NVCongNhatVaChinhThuc : LoaiCongNhat.NVCongNhat;
                // loại bỏ ds vắng, ds ngày lễ trong khoảng thời gian này
                DateTime ngayBDCongnhat = NgayBDCongnhat, ngayKTCongnhat = NgayKTCongnhat;                 // gán biến vì anonymousMethod ko chấp nhận ref, out
                foreach (var ngaycongtemp in DSNgayCong.Where(item => item.Ngay >= ngayBDCongnhat && item.Ngay <= ngayKTCongnhat))
                {
                    ngaycongtemp.DSVang.Clear();
                    ngaycongtemp.PhuCaps = new PhuCap();
                    ngaycongtemp.QuaDem  = false;
                }
            }
            else
            {
                NgayBDCongnhat = DateTime.MinValue;
                NgayKTCongnhat = DateTime.MinValue;
                NVCongnhat     = LoaiCongNhat.NVChinhThuc;
            }
        }
        public static void ThongKeThang(ref ThongKeCong_PC thongKeThang, List <cNgayCong> dsNgayCong,
                                        DateTime ngayBDCongnhat, DateTime ngayKTCongnhat, LoaiCongNhat nvChinhThuc,
                                        out int SoNgayChamCongx2, out int SoNgayNghiAnhHuongCongx2)//v4.0.0.9
        {
            SoNgayChamCongx2         = 0;
            SoNgayNghiAnhHuongCongx2 = 0;
            if (nvChinhThuc == LoaiCongNhat.NVCongNhat)             // chỉ làm công nhật, chỉ tính công công nhật trong khoảng gian từ bắt đầu đến kết thúc
            {
                thongKeThang.Cong_Congnhat = (dsNgayCong
                                              .Where(item => item.Ngay >= ngayBDCongnhat && item.Ngay <= ngayKTCongnhat)
                                              .Sum(item => item.TongCong_4008));
            }
            else             //2 trường hợp, chính thức và vừa chính thức vừa công nhật
            {
                // trường hợp chỉ làm chính thức
                if (nvChinhThuc == LoaiCongNhat.NVChinhThuc)
                {
                    foreach (var ngayCong in dsNgayCong)
                    {
                        bool LaNgayChamCongx2, LaNgayNghiAnhHuongCongx2;
                        XL.ThongKeNgay(ref thongKeThang, ngayCong, out LaNgayChamCongx2, out LaNgayNghiAnhHuongCongx2);
                        SoNgayChamCongx2         += (LaNgayChamCongx2) ? 1 : 0;
                        SoNgayNghiAnhHuongCongx2 += (LaNgayNghiAnhHuongCongx2) ? 1 : 0;
                    }
                }
                else                 // vừa làm công nhật vừa làm chính thức
                {
                    thongKeThang.Cong_Congnhat = (dsNgayCong
                                                  .Where(item => item.Ngay >= ngayBDCongnhat && item.Ngay <= ngayKTCongnhat)
                                                  .Sum(item => item.TongCong_4008));
                    bool LaNgayChamCongx2, LaNgayNghiAnhHuongCongx2;
                    foreach (var ngayCong in dsNgayCong.Where(item => item.Ngay <ngayBDCongnhat || item.Ngay> ngayKTCongnhat))
                    {
                        XL.ThongKeNgay(ref thongKeThang, ngayCong, out LaNgayChamCongx2, out LaNgayNghiAnhHuongCongx2);
                    }
                }
                #region 4.0.0.8 xét lại bù giờ

                var tempTongCongTreSomBu      = (thongKeThang.TongTruCongTreBu + thongKeThang.TongTruCongSomBu);
                var tempTongCongTreSom_KoDuBu = 0f;
                if (thongKeThang.TongCongTichLuy >= tempTongCongTreSomBu)
                {
                    thongKeThang.TreSom_KoDuBuCong = 0f;
                    thongKeThang.TreSom_DuocBuCong = tempTongCongTreSomBu;
                    thongKeThang.TichLuy_PhanDu    = thongKeThang.TongCongTichLuy - thongKeThang.TreSom_DuocBuCong;
                }
                else
                {
                    thongKeThang.TreSom_DuocBuCong = thongKeThang.TongCongTichLuy;                    //tempTongCongBu - thongKeThang.TongCongTichLuy;
                    thongKeThang.TichLuy_PhanDu    = 0f;
                    thongKeThang.TreSom_KoDuBuCong = tempTongCongTreSomBu - thongKeThang.TongCongTichLuy;
                }
                thongKeThang.TongNgayLV4008 = thongKeThang.TongCongDinhMuc8Tieng + thongKeThang.TichLuy_PhanDu + thongKeThang.TreSom_DuocBuCong;
                //thongKeThang.TongNgayLV4008 += tempTongCongTreSom_KoDuBu; // phần ko đủ giờ bù là phần việc riêng
                //thongKeThang.TongNgayLV4008 += thongKeThang.TongTruCongTreVR + thongKeThang.TongTruCongSomVR;// cộng thêm phần trễ sớm việc riêng

                #endregion
            }
        }
        public static void ThongKeThang(ref ThongKeCong_PC thongKeThang, List <cNgayCong> dsNgayCong,
                                        DateTime ngayBDCongnhat, DateTime ngayKTCongnhat, LoaiCongNhat nvChinhThuc)
        {
            if (nvChinhThuc == LoaiCongNhat.NVCongNhat)             // chỉ làm công nhật, chỉ tính công công nhật trong khoảng gian từ bắt đầu đến kết thúc
            {
                thongKeThang.Cong_Congnhat = (dsNgayCong
                                              .Where(item => item.Ngay >= ngayBDCongnhat && item.Ngay <= ngayKTCongnhat)
                                              .Sum(item => item.TongCong));
            }
            else             //2 trường hợp, chính thức và vừa chính thức vừa công nhật
            {
                // trường hợp chỉ làm chính thức
                if (nvChinhThuc == LoaiCongNhat.NVChinhThuc)
                {
                    foreach (var ngayCong in dsNgayCong)
                    {
                        XL.ThongKeNgay(ref thongKeThang, ngayCong);
                    }
                }
                else                 // vừa làm công nhật vừa làm chính thức
                {
                    thongKeThang.Cong_Congnhat = (dsNgayCong
                                                  .Where(item => item.Ngay >= ngayBDCongnhat && item.Ngay <= ngayKTCongnhat)
                                                  .Sum(item => item.TongCong));

                    foreach (var ngayCong in dsNgayCong.Where(item => item.Ngay <ngayBDCongnhat || item.Ngay> ngayKTCongnhat))
                    {
                        XL.ThongKeNgay(ref thongKeThang, ngayCong);
                    }
                }
            }
        }