private void SaveAll()
        {
            try
            {
                Utility.SetMsg(lblMsg, "", false);
                decimal GiaDV = LayGiaDV();
                int idThuoc = -1;
                decimal GiaPhuThu = 0;
                decimal GiaBHYT = LayGiaBHYT();
                string KTH = "ALL";

                foreach (Janus.Windows.GridEX.GridEXRow gridExRow in grdQhe.GetRows())
                {
                    idThuoc = Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdThuoc].Value, -1);
                     KTH = Utility.sDbnull(cboKhoaTH.SelectedValue, "-1") == "-1" ? "ALL" : Utility.sDbnull(cboKhoaTH.SelectedValue, "-1");
                    SqlQuery q =
                        new Select().From(QheDoituongThuoc.Schema).Where(QheDoituongThuoc.Columns.IdThuoc).
                            IsEqualTo(Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdThuoc].Value, -1)).And(
                                QheDoituongThuoc.Columns.MaDoituongKcb).IsEqualTo(Utility.sDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.MaDoituongKcb].Value, "-1"));
                                //.And(QheDoituongThuoc.Columns.MaKhoaThuchien).IsEqualTo(KTH);
                                //.Or(QheDoituongThuoc.Columns.MaDoituongKcb).IsEqualTo("BHYT");
                    GiaPhuThu = Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.PhuthuTraituyen].Value, 0);
                    int v_IdLoaidoituongKcb = Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdLoaidoituongKcb].Value, 0);

                    //Nếu có lưu đối tượng BHYT và tồn tại giá DV thì tự động tính phụ thu trái tuyến cho đối tượng BHYT đó
                    if (gridExRow.Cells[QheDoituongThuoc.Columns.IdLoaidoituongKcb].Value.ToString() == "0" && GiaDV > 0)
                    {
                        GiaBHYT = Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.DonGia].Value, 0);
                        if (PropertyLib._QheGiaThuocProperties.TudongDieuChinhGiaPTTT)
                            GiaPhuThu = GiaDV - GiaBHYT > 0 ? GiaDV - GiaBHYT : 0;
                    }
                    //Nếu đối tượng BHYT có tồn tại thì update lại thông tin trong đó có giá phụ thu trái tuyến
                    if (q.GetRecordCount() > 0)
                    {

                        new Update(QheDoituongThuoc.Schema)
                            .Set(QheDoituongThuoc.Columns.NgaySua).EqualTo(globalVariables.SysDate)
                            .Set(QheDoituongThuoc.Columns.NguoiSua).EqualTo(globalVariables.UserName)
                            .Set(QheDoituongThuoc.Columns.IdLoaithuoc).EqualTo(
                                Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdLoaithuoc].Value, -1))
                            .Set(QheDoituongThuoc.Columns.DonGia).EqualTo(
                                Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.DonGia].Value, 0))
                            .Set(QheDoituongThuoc.Columns.PhuthuDungtuyen).EqualTo(
                                Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.PhuthuDungtuyen].Value, 0))
                            .Set(QheDoituongThuoc.Columns.PhuthuTraituyen).EqualTo(GiaPhuThu)
                             .Set(QheDoituongThuoc.Columns.MaKhoaThuchien).EqualTo(KTH)
                            .Where(QheDoituongThuoc.Columns.IdQuanhe).IsEqualTo(
                                Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdQuanhe].Value, "-1"))
                                .Execute();

                    }
                    else
                    {
                        DmucDoituongkcbCollection objectTypeCollection =
                            new DmucDoituongkcbController().FetchByQuery(
                                DmucDoituongkcb.CreateQuery().AddWhere(DmucDoituongkcb.Columns.MaDoituongKcb,
                                                                   Comparison.Equals,
                                                                   Utility.sDbnull(gridExRow.Cells[DmucDoituongkcb.Columns.MaDoituongKcb].Value, "-1")));

                        foreach (DmucDoituongkcb lObjectType in objectTypeCollection)
                        {
                            QheDoituongThuoc _newItems = new QheDoituongThuoc();
                            _newItems.IdDoituongKcb = lObjectType.IdDoituongKcb;
                            _newItems.IdLoaithuoc = Utility.Int16Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdLoaithuoc].Value, -1);
                            _newItems.IdThuoc = Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdThuoc].Value, -1);
                            _newItems.TyleGiamgia = 0;
                            _newItems.KieuGiamgia = "%";
                            _newItems.DonGia = Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.DonGia].Value, 0);
                            _newItems.PhuthuDungtuyen = Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.PhuthuDungtuyen].Value, 0);
                            _newItems.PhuthuTraituyen = GiaPhuThu;
                            _newItems.IdLoaidoituongKcb = Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdLoaidoituongKcb].Value, -1);
                            _newItems.MaDoituongKcb = lObjectType.MaDoituongKcb;

                            _newItems.NguoiTao = globalVariables.UserName;
                            _newItems.NgayTao = globalVariables.SysDate;
                            _newItems.MaKhoaThuchien = KTH;
                            _newItems.IsNew = true;
                            _newItems.Save();
                            gridExRow.BeginEdit();
                            gridExRow.Cells[QheDoituongThuoc.Columns.IdQuanhe].Value = _newItems.IdQuanhe;
                            gridExRow.EndEdit();
                        }
                    }
                    gridExRow.BeginEdit();
                    gridExRow.Cells[QheDoituongThuoc.Columns.PhuthuTraituyen].Value = GiaPhuThu;
                    gridExRow.EndEdit();
                    grdQhe.UpdateData();
                    //Nếu có chỉnh giá dịch vụ-->Tự động chỉnh giá danh mục thuốc
                    if (PropertyLib._QheGiaThuocProperties.TudongDieuChinhGiaDichVu)
                    {
                        SqlQuery sqlQuery = new Select().From(DmucDoituongkcb.Schema)
                            .Where(DmucDoituongkcb.Columns.IdLoaidoituongKcb).IsEqualTo(1)
                            .And(DmucDoituongkcb.Columns.MaDoituongKcb).IsEqualTo(Utility.sDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.MaDoituongKcb].Value, "-1"));
                        DmucDoituongkcb objectType = sqlQuery.ExecuteSingle<DmucDoituongkcb>();
                        if (objectType != null)
                        {
                            new Update(DmucThuoc.Schema)
                                .Set(DmucThuoc.Columns.DonGia)
                                .EqualTo(Utility.DecimaltoDbnull(gridExRow.Cells[QheDoituongThuoc.Columns.DonGia].Value, 0))
                                .Where(DmucThuoc.Columns.IdThuoc)
                                .IsEqualTo(Utility.Int32Dbnull(gridExRow.Cells[QheDoituongThuoc.Columns.IdThuoc].Value, -1)).Execute();
                        }
                    }
                }
                new Update(DmucThuoc.Schema).Set(DmucThuoc.Columns.DonGia).EqualTo(GiaDV)
                   .Set(DmucThuoc.Columns.GiaBhyt).EqualTo(GiaBHYT)
                   .Where(DmucThuoc.Columns.IdThuoc).IsEqualTo(Utility.Int32Dbnull(grdList.CurrentRow.Cells[DmucThuoc.Columns.IdThuoc].Value, -1))
                   .Execute();
                //Cập nhật giá BHYT cho các khoa khác
                if (PropertyLib._QheGiaThuocProperties.TudongDieuChinhGiaBHYT)
                {
                    if (GiaBHYT >= 0)
                    {
                        QheDoituongThuocCollection lstItems =
                            new Select().From(QheDoituongThuoc.Schema).
                            Where(QheDoituongThuoc.Columns.IdThuoc).
                                  IsEqualTo(idThuoc)
                                  .And(QheDoituongThuoc.MaKhoaThuchienColumn).IsNotEqualTo(KTH).ExecuteAsCollection<QheDoituongThuocCollection>();
                        foreach (QheDoituongThuoc item in lstItems)
                        {
                            int v_IdLoaidoituongKcb = item.IdLoaidoituongKcb;
                            if (v_IdLoaidoituongKcb == 1)
                                GiaDV = item.DonGia;
                        }
                        GiaPhuThu = 0;
                        foreach (QheDoituongThuoc item in lstItems)
                        {
                            int v_IdLoaidoituongKcb = item.IdLoaidoituongKcb;
                            if (v_IdLoaidoituongKcb.ToString() == "0" && GiaDV > 0)//Nếu là đối tượng BHYT
                            {
                                GiaPhuThu = GiaDV - GiaBHYT > 0 ? GiaDV - GiaBHYT : 0;
                                Update _update = new Update(QheDoituongThuoc.Schema).Set(QheDoituongThuoc.DonGiaColumn).EqualTo(GiaBHYT);
                                if (PropertyLib._QheGiaThuocProperties.TudongDieuChinhGiaPTTT)
                                    _update.Set(QheDoituongThuoc.PhuthuTraituyenColumn).EqualTo(GiaPhuThu);
                                _update.Where(QheDoituongThuoc.IdLoaidoituongKcbColumn).IsEqualTo(0).And(QheDoituongThuoc.IdThuocColumn).IsEqualTo(idThuoc)
                                .And(QheDoituongThuoc.MaKhoaThuchienColumn).IsNotEqualTo(KTH)
                                .Execute();
                            }
                        }
                    }
                }
                Utility.SetMsg(lblMsg, "Bạn thực hiện cập nhập giá thành công",false);
            }
            catch (Exception exception)
            {
                Utility.SetMsg(lblMsg, "Lỗi trong quá trình cập nhập thông tin", false);
            }
        }
        /// <summary>
        /// Thực hiện nghiệp vụ Update dữ liệu
        /// </summary>
        private void PerformUpdateAction()
        {
            //Create Again to ignore Where Clause
            m_Query = DmucDoituongkcb.CreateQuery();
            //Gọi Business cập nhật dữ liệu
            int v_intObjectTypeID = Convert.ToInt32(txtID.Text);

            //Kiểm tra trùng tên đối tượng và cảnh báo
            DmucDoituongkcbCollection v_arrSameNameObject = new DmucDoituongkcbController()
                .FetchByQuery(m_Query.AddWhere(DmucDoituongkcb.Columns.TenDoituongKcb,Comparison.Equals, txtName.Text.Trim().ToUpper())
                .AND(DmucDoituongkcb.Columns.IdDoituongKcb, Comparison.NotEquals, v_intObjectTypeID));
            if (v_arrSameNameObject.Count > 0)
            {
                if (!Utility.AcceptQuestion("Đã có đối tượng có tên:" + txtName.Text.Trim() + ". Bạn có muốn tiếp tục ghi hay không?", "Cảnh báo", true)) return;
            }
            int actionResult = CreateObjectType();
            if (actionResult >-1)
            {
                m_DataSource.Sort(DmucDoituongkcb.Columns.SttHthi, true);
                ProcessData1();
                //Return to the InitialStatus
                m_enAction = action.FirstOrFinished;
                //Nhảy đến bản ghi vừa cập nhật trên lưới. Do txtID chưa bị reset nên dùng luôn
                Utility.GotoNewRowJanus(grdList,DmucDoituongkcb.Columns.IdLoaidoituongKcb, txtID.Text.Trim());
                SetControlStatus();
                Utility.ShowMsg("Cập nhật dữ liệu thành công.");
            }else
            {
                Utility.ShowMsg("Bạn gặp lỗi trong quá trình cập  nhập", "Thông báo");
                return;
            }
        }
        void TaogiathuocQhe()
        {
            try
            {
                if (!Utility.AcceptQuestion("Bạn có chắc chắn tạo dữ liệu test giá thuốc quan hệ cho toàn bộ thuốc trong kho", "cảnh báo", true)) return;
                DmucThuocCollection lstThuoc = new DmucThuocController().FetchAll();
                DmucDoituongkcbCollection lstdoituong = new  DmucDoituongkcbController().FetchAll();
                Random rnd = new Random();
                foreach(DmucThuoc _thuoc in lstThuoc)
                {
                    foreach (DmucDoituongkcb _doituong in lstdoituong)
                    {
                        QheDoituongThuoc _newitem = new QheDoituongThuoc();
                        _newitem.IdDoituongKcb = _doituong.IdDoituongKcb;
                        _newitem.IdLoaithuoc = _thuoc.IdLoaithuoc;
                        _newitem.IdThuoc = _thuoc.IdThuoc;
                        _newitem.TyleGiamgia = 0;
                        _newitem.KieuGiamgia = "%";
                        _newitem.DonGia = rnd.Next(1000, 5000);
                        _newitem.PhuthuDungtuyen = 0;
                        _newitem.IdLoaidoituongKcb = _doituong.IdLoaidoituongKcb;
                        _newitem.PhuthuTraituyen = 0;
                        _newitem.MaDoituongKcb = _doituong.MaDoituongKcb;
                        _newitem.MaKhoaThuchien = "ALL";
                        _newitem.NguoiTao = globalVariables.UserName;
                        _newitem.NgayTao = globalVariables.SysDate;
                        _newitem.NguoiSua = globalVariables.UserName;
                        _newitem.NgaySua = globalVariables.SysDate;
                        _newitem.IsNew = true;
                        _newitem.Save();
                    }

                }
            }
            catch
            {
            }
        }
        /// <summary>
        /// Thực hiện nghiệp vụ Insert dữ liệu
        /// </summary>
        private void PerformInsertAction()
        {
            //Kiểm tra trùng tên đối tượng và cảnh báo
            DmucDoituongkcbCollection v_arrSameNameObject = new DmucDoituongkcbController().FetchByQuery(m_Query.AddWhere(DmucDoituongkcb.Columns.TenDoituongKcb,txtName.Text.Trim().ToUpper()));
            if (v_arrSameNameObject.Count > 0)
            {
                if (!Utility.AcceptQuestion("Đã có đối tượng có tên:" + txtName.Text.Trim() + ". Bạn có muốn tiếp tục ghi hay không?", "Cảnh báo", true))
                {
                    //Create Again to ignore Where Clause
                    txtName.Focus();
                    m_Query = DmucDoituongkcb.CreateQuery();
                    return;
                }
            }
            //Create Again to ignore Where Clause
            m_Query = DmucDoituongkcb.CreateQuery();

               // Lấy về MaxID vừa được thêm vào CSDL
            int actionResult = CreateObjectType();
            if (actionResult > 0)
            {
                ProcessData(actionResult);
                //Return to the InitialStatus
                m_enAction = action.FirstOrFinished;
                //Nhảy đến bản ghi vừa thêm mới trên lưới. Do txtID chưa bị reset nên dùng luôn
                Utility.GotoNewRowJanus(grdList, DmucDoituongkcb.Columns.IdLoaidoituongKcb, actionResult.ToString());
                Utility.ShowMsg("Thêm mới dữ liệu thành công!");
                SetControlStatus();
                this.Activate();
            }
            else//Có lỗi xảy ra
                Utility.ShowMsg("Thêm mới không thành công. Mời bạn xem lại");
        }