public void TinhTG_LV_LVCa3_LamThem1Ca(cCheckInOut CIO, cCa ca, FromToTimeSpan NightTime)
        {
            bool tempQuaDem;

            TinhTG_LV_LVCa3_LamThem1Ca(CIO.ThuocNgayCong, CIO.CheckVT,
                                       CIO.Vao.Time, CIO.Raa.Time, ca.Duty.From, ca.Duty.To, ca.ChoPhepTre_TimeOfDay, ca.ChophepSom_TimeOfDay, ca.BatdauOT_TimeOfDay, ca.LunchMin, NightTime,
                                       out CIO.VaoLamTron, out CIO.RaaLamTron,
                                       out CIO.BD_LV, out CIO.KT_LV_TrongCa, out CIO.KT_LV, out CIO.BD_LV_Ca3, out CIO.KT_LV_Ca3,
                                       out CIO.HienDien, out CIO.VaoSauCa, out CIO.RaTruocCa,
                                       out CIO.Tre, out CIO.Som, out CIO.OLaiVR,
                                       out CIO.LamTrongGio, out CIO.LamDem, out tempQuaDem);
            CIO.QuaDem = tempQuaDem;            // ko cho phép out CIO.QuaDem nên fix tạm bằng cách dùng biến trung gian cục bộ và gán lại
        }
        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;
        }