public void Tim_DSCa_NhanDienDuoc(DateTime time, DateTime ngay, TrangThaiCheck CheckVT, List <cCa> DSCa, out List <cCa> Result)
 {
     Result = new List <cCa>();
     Result = (CheckVT == TrangThaiCheck.ThieuRa)
                                          ? DSCa.FindAll(ca => time >= ngay.Add(ca.NhanDienVao.From) && time <= ngay.Add(ca.NhanDienVao.To))
                                          : DSCa.FindAll(ca => time >= ngay.Add(ca.NhanDienRaa.From) && time <= ngay.Add(ca.NhanDienRaa.To));
 }
        public void TinhTG_LV_LVCa3_LamThem1Ca(DateTime ThuocNgayCong, TrangThaiCheck CheckVT,
                                               DateTime TD_Vao, DateTime TD_Raa,
                                               TimeSpan BDCa_TOD, TimeSpan KTCa_TOD, TimeSpan ChoPhepTre_TimeOfDay, TimeSpan ChophepSom_TimeOfDay, TimeSpan BatdauOT_TimeOfDay,
                                               TimeSpan Phut_NghiTrua, FromToTimeSpan NightTime,
                                               out DateTime TD_Vao_lamTron, out DateTime TD_Raa_lamTron,
                                               out DateTime TD_BD_LV, out DateTime TD_KT_LV_TrongCa, out DateTime TD_KT_LV, out DateTime TD_BD_LV_Ca3, out DateTime TD_KT_LV_Ca3,
                                               out TimeSpan TGHienDien, out TimeSpan TGVaoSauCa, out TimeSpan TGRaTruocCa,
                                               out TimeSpan TGVaoTreVR, out TimeSpan TGRaaSomVR, out TimeSpan TG_OLai_VR,
                                               out TimeSpan TGLamViecTrongCa, /*out TimeSpan TGLamViecNgoaiGio, ko có TGLamViecNgoaiGio vì chưa xử lý*/
                                               out TimeSpan TGLamDem, out bool QuaDem)
        {
            TD_Vao_lamTron   = MyUtility.LamTronPhut(TD_Vao);
            TD_Raa_lamTron   = MyUtility.LamTronPhut(TD_Raa);
            TD_BD_LV         = ThuocNgayCong;
            TD_KT_LV_TrongCa = ThuocNgayCong;
            TD_KT_LV         = ThuocNgayCong;
            TD_BD_LV_Ca3     = ThuocNgayCong;
            TD_KT_LV_Ca3     = ThuocNgayCong;
            TGHienDien       = TimeSpan.Zero;
            TGVaoSauCa       = TimeSpan.Zero;
            TGRaTruocCa      = TimeSpan.Zero;
            TGVaoTreVR       = TimeSpan.Zero;
            TGRaaSomVR       = TimeSpan.Zero;
            TG_OLai_VR       = TimeSpan.Zero;
            TGLamViecTrongCa = TimeSpan.Zero;             //ko có TG làm việc ngoài giờ
            TGLamDem         = TimeSpan.Zero;
            QuaDem           = false;

            if (CheckVT != TrangThaiCheck.CheckDayDu)
            {
                return;
            }

            var TD_BD_Ca = ThuocNgayCong.Add(BDCa_TOD);
            var TD_KT_Ca = ThuocNgayCong.Add(KTCa_TOD);            //off duty này đã bao gồm daycount được công bên trong
            //var thoidiem_BD_tinhtre = ThuocNgayCong.Add(ChoPhepTre_TimeOfDay);
            var thoidiem_BD_tinhsom      = ThuocNgayCong.Add(ChophepSom_TimeOfDay);
            var thoidiem_BD_tinhOLai     = ThuocNgayCong.Add(BatdauOT_TimeOfDay);
            var thoidiem_QuyDinhBDLamDem = ThuocNgayCong.Add(NightTime.From);          //ver 4.0.0.4
            var thoidiem_QuyDinhKTLamDem = ThuocNgayCong.Add(NightTime.To);            //ver 4.0.0.4 //todo lưu ý đã có 1 ngày vì Global Variable =6gHôm sau

            bool quadem;

            TGHienDien = TD_Raa_lamTron - TD_Vao_lamTron;
            // kiểm tra giờ ra ko được nhỏ hơn vào ca, giờ vào ko được nhỏ hơn ra ca
            if (TD_Raa_lamTron <= TD_BD_Ca || TD_Vao_lamTron >= TD_KT_Ca)
            {
                return;
            }
            XacDinh_TD_BDLV(ThuocNgayCong, TD_Vao, BDCa_TOD, ChoPhepTre_TimeOfDay, false, out TD_Vao_lamTron, out TD_BD_LV, out TGVaoSauCa, out TGVaoTreVR);
            //XacDinh_TD_BDLV(TD_Vao_lamTron, TD_BD_Ca, thoidiem_BD_tinhtre, false, out TD_BD_LV, out TGVaoSauCa, out TGVaoTreVR);
            //TGVaoTreVR = (thoidiem_BD_tinhtre < TD_Vao_lamTron) ? (TD_Vao_lamTron - TD_BD_Ca) : TimeSpan.Zero;
            XacDinh_TD_KTLV(ThuocNgayCong, TD_Raa, KTCa_TOD, ChophepSom_TimeOfDay, false, BatdauOT_TimeOfDay, false, TimeSpan.Zero,
                            out TD_Raa_lamTron, out TD_KT_LV_TrongCa, out TD_KT_LV, out TGRaTruocCa, out TGRaaSomVR, out TG_OLai_VR);    //Do chưa xác nhận nên giờ làm thêm nên TD_KT_LV = TD_KT_LV_TrongCa
            //XacDinh_TD_KTLV_TrongCa(TD_Raa_lamTron, TD_KT_Ca, thoidiem_BD_tinhsom, false, out TD_KT_LV_TrongCa, out TGRaTruocCa, out TGRaaSomVR);
            //TGRaaSomVR = (TD_Raa_lamTron < thoidiem_BD_tinhsom) ? (TD_KT_Ca - TD_Raa_lamTron) : TimeSpan.Zero;
            //XacDinh_KTG_OLai(TD_Raa_lamTron, TD_KT_Ca, thoidiem_BD_tinhOLai, out TG_OLai_VR);
            Tinh_TGLamViecTrongCa(TD_BD_LV, TD_KT_LV_TrongCa, Phut_NghiTrua, out TGLamViecTrongCa);
            //TD_KT_LV = TD_KT_LV_TrongCa;
            Tinh_TGLamViec_Ca3(TD_BD_LV, TD_KT_LV, thoidiem_QuyDinhBDLamDem, thoidiem_QuyDinhKTLamDem, out TD_BD_LV_Ca3, out TD_KT_LV_Ca3, out TGLamDem, out quadem);
            QuaDem = quadem;
        }