/// <summary>
        /// Lấy toàn bộ dữ liệu CLS giống phần chỉ định CLS sau đó tính giá dựa trên dữ liệu lấy được đó. Thay vì select lại từ các bảng quan hệ
        /// </summary>
        /// <param name="objLuotkham"></param>
        /// <returns></returns>
        private static ActionResult CapnhatChiphiCLS(KcbLuotkham objLuotkham)
        {
            using (var Scope = new TransactionScope())
            {
                DataTable m_dtServiceDetail = new KCB_CHIDINH_CANLAMSANG().LaydanhsachCLS_chidinh(objLuotkham.MaDoituongKcb, objLuotkham.TrangthaiNoitru, Utility.ByteDbnull(objLuotkham.GiayBhyt, 0), -1, Utility.Int32Dbnull(objLuotkham.DungTuyen.Value, 0), objLuotkham.MaKhoaThuchien, "-GOI,-TIEN");//Ko lấy dữ liệu liên quan đến gói dịch vụ+tiền phí phụ thêm
                SqlQuery sqlQuery = new Select().From(KcbChidinhclsChitiet.Schema)
                    .Where(KcbChidinhclsChitiet.Columns.IdChidinh).In(
                        new Select(KcbChidinhcl.Columns.IdChidinh).From(KcbChidinhcl.Schema)
                        .Where(KcbChidinhcl.Columns.MaLuotkham).IsEqualTo(objLuotkham.MaLuotkham)
                        .And(KcbChidinhcl.Columns.IdBenhnhan).IsEqualTo(objLuotkham.IdBenhnhan)
                        );
                var objAssignDetailCollection =
                    sqlQuery.ExecuteAsCollection<KcbChidinhclsChitietCollection>();
                foreach (KcbChidinhclsChitiet objAssignDetail in objAssignDetailCollection)
                {

                    if (objAssignDetail.TrangthaiThanhtoan == 0)//Chưa thanh toán
                    {
                         DataRow[] arrDr = m_dtServiceDetail.Select(KcbChidinhclsChitiet.Columns.IdChitietdichvu + "=" + Utility.Int32Dbnull(objAssignDetail.IdChitietdichvu, -1));
                         if (arrDr.Length > 0)
                         {
                             objAssignDetail.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                             objAssignDetail.PtramBhyt = objLuotkham.PtramBhyt;
                             objAssignDetail.DonGia =Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.DonGia], 0);
                             objAssignDetail.GiaDanhmuc = Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.DonGia], 0);
                             objAssignDetail.TuTuc = Utility.ByteDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.TuTuc],0);
                             objAssignDetail.PhuThu = Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.PhuThu], 0);
                             objAssignDetail.NguoiSua = globalVariables.UserName;
                             objAssignDetail.NgaySua = DateTime.Now;
                             TinhCLS.GB_TinhPhtramBHYT(objAssignDetail, objLuotkham, Utility.DecimaltoDbnull(objLuotkham.PtramBhyt));

                         }
                         else//Rất khó nhảy vào nhánh này trừ phi lỗi dữ liệu đặc biệt nào đó
                         {
                             CLS_GIATHEO_KHOAKCB = THU_VIEN_CHUNG.Laygiatrithamsohethong("CLS_GIATHEO_KHOAKCB", "0", true) == "1";
                             QheDoituongDichvucl _Items = THU_VIEN_CHUNG.LayQheDoituongCLS(objLuotkham.MaDoituongKcb, objAssignDetail.IdChitietdichvu, objLuotkham.MaKhoaThuchien, CLS_GIATHEO_KHOAKCB);
                             if (_Items != null)
                             {

                                 objAssignDetail.DonGia = Utility.DecimaltoDbnull(_Items.DonGia);
                                 objAssignDetail.PhuThu = (Utility.isTrue(objLuotkham.DungTuyen) ? Utility.DecimaltoDbnull(_Items.PhuthuDungtuyen) : Utility.DecimaltoDbnull(_Items.PhuthuTraituyen));
                                 objAssignDetail.TuTuc = 0;
                                 objAssignDetail.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                                 objAssignDetail.PtramBhyt = objLuotkham.PtramBhyt;
                             }
                             else
                             {
                                 _Items = THU_VIEN_CHUNG.LayQheDoituongCLS("DV", objAssignDetail.IdChitietdichvu, objLuotkham.MaKhoaThuchien, CLS_GIATHEO_KHOAKCB);
                                 if (_Items != null)
                                 {
                                     objAssignDetail.DonGia = Utility.DecimaltoDbnull(_Items.DonGia);
                                     objAssignDetail.PhuThu = (Utility.isTrue(objLuotkham.DungTuyen) ? Utility.DecimaltoDbnull(_Items.PhuthuDungtuyen) : Utility.DecimaltoDbnull(_Items.PhuthuTraituyen));
                                     objAssignDetail.TuTuc = 1;
                                     objAssignDetail.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                                     objAssignDetail.PtramBhyt = 0;
                                 }
                             }
                             DmucDichvuclsChitiet _DmucDichvuclsChitiet = DmucDichvuclsChitiet.FetchByID(objAssignDetail.IdChitietdichvu);
                             if (_DmucDichvuclsChitiet != null && Utility.Int32Dbnull(_DmucDichvuclsChitiet.TuTuc, 0) == 1)
                                 objAssignDetail.TuTuc = 1;//Ke ca co trong bang quan he
                             if (objLuotkham.IdLoaidoituongKcb == 1)//Đối tượng dịch vụ-->ko cần phải đánh dấu tự túc
                                 objAssignDetail.TuTuc = 0;

                             objAssignDetail.NguoiSua = globalVariables.UserName;
                             objAssignDetail.NgaySua = DateTime.Now;
                             decimal PtramBHYT = Utility.DecimaltoDbnull(objLuotkham.PtramBhyt);
                             TinhCLS.GB_TinhPhtramBHYT(objAssignDetail, objLuotkham, PtramBHYT);
                         }

                    }
                    else//Đã thanh toán-->Ko đổi
                    {
                        return ActionResult.Cancel;
                    }
                }
                objAssignDetailCollection.SaveAll();
                Scope.Complete();
                return ActionResult.Success;
            }
        }
        /// <summary>
        /// Lấy toàn bộ dữ liệu CLS giống phần chỉ định CLS sau đó tính giá dựa trên dữ liệu lấy được đó. Thay vì select lại từ các bảng quan hệ
        /// </summary>
        /// <param name="objLuotkham"></param>
        /// <returns></returns>
        private static ActionResult CapnhatChiphiCLS(KcbLuotkham objLuotkham, KcbLuotkham objLuotkhamCu)
        {
            using (var Scope = new TransactionScope())
            {
                DataTable m_dtServiceDetail = new KCB_CHIDINH_CANLAMSANG().LaydanhsachCLS_chidinh(objLuotkham.MaDoituongKcb, objLuotkham.TrangthaiNoitru, Utility.ByteDbnull(objLuotkham.GiayBhyt, 0), -1, Utility.Int32Dbnull(objLuotkham.DungTuyen.Value, 0), objLuotkham.MaKhoaThuchien, "-GOI,-TIEN");//Ko lấy dữ liệu liên quan đến gói dịch vụ+tiền phí phụ thêm

                KcbChidinhclCollection lstChidinh=
                    new Select()
                    .From(KcbChidinhcl.Schema)
                    .Where(KcbChidinhcl.Columns.MaLuotkham).IsEqualTo(objLuotkham.MaLuotkham)
                    .And(KcbChidinhcl.Columns.IdBenhnhan).IsEqualTo(objLuotkham.IdBenhnhan)
                    .ExecuteAsCollection<KcbChidinhclCollection>();
                List<long> lstID = lstChidinh.Select(c => c.IdChidinh).Distinct().ToList<long>();
                if (lstID.Count <= 0)
                {
                    Scope.Complete();
                    return ActionResult.Success;
                }
                KcbChidinhclsChitietCollection lstChitiet = new Select().From(KcbChidinhclsChitiet.Schema)
                    .Where(KcbChidinhclsChitiet.Columns.IdChidinh).In(lstID)
                .ExecuteAsCollection<KcbChidinhclsChitietCollection>();
                if (lstChitiet.Count > 0)
                {
                    //Kiểm tra nếu đối tượng ngoại trú đã có dịch vụ thanh toán-->Ko cho phép chuyển nữa
                    if (Utility.ByteDbnull(objLuotkham.TrangthaiNoitru,0)<=0 && lstChitiet.Where(c => c.TrangthaiThanhtoan > 0).Any())
                    {
                        Scope.Complete();
                        return ActionResult.Cancel;
                    }
                    bool saveParent = false;
                    foreach (KcbChidinhcl objChidinh in lstChidinh)
                    {

                            objChidinh.IdLichsuDoituongKcb = objLuotkham.IdLichsuDoituongKcb;
                            objChidinh.MatheBhyt = objLuotkham.MatheBhyt;
                            objChidinh.MaDoituongKcb = objLuotkham.MaDoituongKcb;
                            objChidinh.IdLoaidoituongKcb = objLuotkham.IdLoaidoituongKcb;
                            objChidinh.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                            foreach (KcbChidinhclsChitiet objChidinhChitiet in lstChitiet.Where(c => c.IdChidinh.Equals(objChidinh.IdChidinh)))
                            {
                                if (Utility.Int32Dbnull(objChidinhChitiet.IdGoi, -1) <=0)
                                {
                                    objChidinhChitiet.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                                    if (objChidinhChitiet.TrangthaiThanhtoan == 0)//Chưa thanh toán
                                    {
                                        saveParent = true;
                                        objChidinhChitiet.MadoituongGia = objLuotkham.MaDoituongKcb;
                                        objChidinhChitiet.PtramBhyt = objLuotkham.PtramBhyt;
                                        objChidinhChitiet.PtramBhytGoc = objLuotkham.PtramBhytGoc;
                                        DataRow[] arrDr = m_dtServiceDetail.Select(KcbChidinhclsChitiet.Columns.IdChitietdichvu + "=" + Utility.Int32Dbnull(objChidinhChitiet.IdChitietdichvu, -1));
                                        if (arrDr.Length > 0)
                                        {

                                            objChidinhChitiet.PtramBhyt = objLuotkham.PtramBhyt;
                                            objChidinhChitiet.DonGia = Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.DonGia], 0);
                                            objChidinhChitiet.GiaDanhmuc = Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.DonGia], 0);
                                            objChidinhChitiet.TuTuc = Utility.ByteDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.TuTuc], 0);
                                            objChidinhChitiet.PhuThu = Utility.DecimaltoDbnull(arrDr[0][KcbChidinhclsChitiet.Columns.PhuThu], 0);
                                            objChidinhChitiet.NguoiSua = globalVariables.UserName;
                                            objChidinhChitiet.NgaySua = DateTime.Now;
                                            TinhCLS.GB_TinhPhtramBHYT(objChidinhChitiet, objLuotkham, Utility.Byte2Bool(objChidinh.Noitru), Utility.DecimaltoDbnull(objLuotkham.PtramBhyt));

                                        }
                                        else//Rất khó nhảy vào nhánh này trừ phi lỗi dữ liệu đặc biệt nào đó
                                        {
                                            CLS_GIATHEO_KHOAKCB = THU_VIEN_CHUNG.Laygiatrithamsohethong("CLS_GIATHEO_KHOAKCB", "0", true) == "1";
                                            QheDoituongDichvucl _Items = THU_VIEN_CHUNG.LayQheDoituongCLS(objLuotkham.MaDoituongKcb, objChidinhChitiet.IdChitietdichvu, objLuotkham.MaKhoaThuchien, CLS_GIATHEO_KHOAKCB);
                                            if (_Items != null)
                                            {
                                                objChidinhChitiet.DonGia = Utility.DecimaltoDbnull(_Items.DonGia);
                                                objChidinhChitiet.PhuThu = (Utility.isTrue(objLuotkham.DungTuyen) ? Utility.DecimaltoDbnull(_Items.PhuthuDungtuyen) : Utility.DecimaltoDbnull(_Items.PhuthuTraituyen));
                                                objChidinhChitiet.TuTuc = 0;
                                                objChidinhChitiet.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                                                objChidinhChitiet.PtramBhyt = objLuotkham.PtramBhyt;
                                            }
                                            else
                                            {
                                                _Items = THU_VIEN_CHUNG.LayQheDoituongCLS("DV", objChidinhChitiet.IdChitietdichvu, objLuotkham.MaKhoaThuchien, CLS_GIATHEO_KHOAKCB);
                                                if (_Items != null)
                                                {
                                                    objChidinhChitiet.MadoituongGia = "DV";
                                                    objChidinhChitiet.DonGia = Utility.DecimaltoDbnull(_Items.DonGia);
                                                    objChidinhChitiet.PhuThu = (Utility.isTrue(objLuotkham.DungTuyen) ? Utility.DecimaltoDbnull(_Items.PhuthuDungtuyen) : Utility.DecimaltoDbnull(_Items.PhuthuTraituyen));
                                                    objChidinhChitiet.TuTuc = 1;
                                                    objChidinhChitiet.IdDoituongKcb = objLuotkham.IdDoituongKcb;
                                                    objChidinhChitiet.PtramBhyt = 0;
                                                }
                                            }
                                            DmucDichvuclsChitiet _DmucDichvuclsChitiet = DmucDichvuclsChitiet.FetchByID(objChidinhChitiet.IdChitietdichvu);
                                            if (_DmucDichvuclsChitiet != null && Utility.Int32Dbnull(_DmucDichvuclsChitiet.TuTuc, 0) == 1)
                                                objChidinhChitiet.TuTuc = 1;//Ke ca co trong bang quan he
                                            if (objLuotkham.IdLoaidoituongKcb == 1)//Đối tượng dịch vụ-->ko cần phải đánh dấu tự túc
                                            {
                                                objChidinhChitiet.TuTuc = 0;
                                                objChidinhChitiet.PhuThu = 0;
                                            }
                                            objChidinhChitiet.NguoiSua = globalVariables.UserName;
                                            objChidinhChitiet.NgaySua = DateTime.Now;
                                            decimal PtramBHYT = Utility.DecimaltoDbnull(objLuotkham.PtramBhyt);
                                            TinhCLS.GB_TinhPhtramBHYT(objChidinhChitiet, objLuotkham, Utility.Byte2Bool(objChidinh.Noitru), PtramBHYT);
                                        }

                                    }
                                    else
                                    {
                                        //nếu đã thanh toán thì chỉ xử lý khi đối tượng đang ở trạng thái nội trú.
                                        if (Utility.ByteDbnull(objLuotkham.TrangthaiNoitru,0) > 0)
                                        {
                                            saveParent = true;
                                            if (THU_VIEN_CHUNG.IsBaoHiem(objLuotkham.IdLoaidoituongKcb))
                                            {
                                                //Đối tượng mới là BHYT thì kiểm tra đổi các dịch vụ có giá DV về tự túc.
                                                //Các dịch vụ có giá khác DV thì để nguyên(để nếu đối tượng cũ là BHYT thì ko bị thay đổi giá trị tự túc)
                                                if (objChidinhChitiet.MadoituongGia == "DV")
                                                    objChidinhChitiet.TuTuc = 1;
                                            }
                                            else//Nếu đối tượng từ BHYT chuyển sang dịch vụ thì chuyển thành ko tự túc hết
                                            {
                                                if (objLuotkham.MaDoituongKcb != objLuotkhamCu.MaDoituongKcb)//Mới=DV, Cũ=BHYT. Còn lại ko làm gì cả
                                                    objChidinhChitiet.TuTuc = 0;
                                            }
                                        }
                                        else
                                            continue;
                                    }
                                    objChidinhChitiet.Save();
                                    saveParent = true;
                                }
                            }
                            if (saveParent)
                            {
                                objChidinh.Save();
                                saveParent = false;
                            }

                    }
                }
                Scope.Complete();
                return ActionResult.Success;
            }
        }