/// <summary>
        /// hàm thực hiện việc cho phép chuyển thông tin xác nhận vào kho
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmdNhapKho_Click(object sender, EventArgs e)
        {
            Utility.SetMsg(uiStatusBar2.Panels["MSG"], "", false);
            if (Utility.AcceptQuestion("Bạn có muốn thực hiện trả thuốc từ tủ trực khoa nội trú về kho lẻ hay không?", "Thông báo", true))
            {
                string errMsg = "";
                int IdPhieu = Utility.Int32Dbnull(grdList.GetValue(TPhieuNhapxuatthuoc.Columns.IdPhieu), -1);
                TPhieuNhapxuatthuoc objTPhieuNhapxuatthuoc = TPhieuNhapxuatthuoc.FetchByID(IdPhieu);
                if (objTPhieuNhapxuatthuoc != null)
                {
                    DateTime _ngayxacnhan = globalVariables.SysDate;
                    if (THU_VIEN_CHUNG.Laygiatrithamsohethong("THUOC_HIENTHI_NGAYXACNHAN", "0", false) == "1")
                    {
                        frm_ChonngayXacnhan _ChonngayXacnhan = new frm_ChonngayXacnhan();
                        _ChonngayXacnhan.pdt_InputDate = objTPhieuNhapxuatthuoc.NgayHoadon;
                        _ChonngayXacnhan.ShowDialog();
                        if (_ChonngayXacnhan.b_Cancel)
                            return;
                        else
                        _ngayxacnhan = _ChonngayXacnhan.pdt_InputDate;
                    }
                    ActionResult actionResult =
                        new CapphatThuocKhoa().XacNhanPhieuTrathuocTutrucKhoaveKho(objTPhieuNhapxuatthuoc, _ngayxacnhan, ref errMsg);
                    switch (actionResult)
                    {
                        case ActionResult.Success:
                            Utility.SetMsg(uiStatusBar2.Panels["MSG"], "Trả thuốc từ tủ thuốc khoa nội trú về kho thành công",false);
                            grdList.CurrentRow.BeginEdit();
                            grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 1;
                            grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NgayXacnhan].Value = _ngayxacnhan;
                            grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NguoiXacnhan].Value = globalVariables.UserName;
                            grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 1;
                            grdList.CurrentRow.EndEdit();
                            break;
                        case ActionResult.Exceed:
                            Utility.ShowMsg("Không có thuốc trong tủ trực nên không thể xác nhận phiếu trả thuốc\n" + errMsg, "Thông báo lỗi", MessageBoxIcon.Warning);
                            break;
                        case ActionResult.NotEnoughDrugInStock:
                            Utility.ShowMsg("Thuốc trong tủ trực không còn đủ số lượng nên không thể xác nhận phiếu trả thuốc\n" + errMsg, "Thông báo lỗi", MessageBoxIcon.Warning);
                            break;
                        case ActionResult.Error:
                            break;
                    }
                }

            }
            ModifyCommand();
        }
 private void cmdHuychuyenkho_Click(object sender, EventArgs e)
 {
     Utility.SetMsg(uiStatusBar2.Panels["MSG"], "", false);
     if (Utility.AcceptQuestion("Bạn có chắc chắn muốn hủy xác nhận phiếu cấp phát thuốc-khoa đang chọn hay không?", "Thông báo", true))
     {
         string errMsg = "";
         int IdPhieu = Utility.Int32Dbnull(grdList.GetValue(TPhieuNhapxuatthuoc.Columns.IdPhieu), -1);
         TPhieuNhapxuatthuoc objTPhieuNhapxuatthuoc = TPhieuNhapxuatthuoc.FetchByID(IdPhieu);
         if (objTPhieuNhapxuatthuoc != null)
         {
             ActionResult actionResult =
                 new CapphatThuocKhoa().HuyXacNhanPhieuCapphatThuoc(objTPhieuNhapxuatthuoc, ref errMsg);
             switch (actionResult)
             {
                 case ActionResult.Success:
                     Utility.SetMsg(uiStatusBar2.Panels["MSG"], "Bạn thực hiện hủy xác nhận phiếu cấp phát thành công", false);
                     grdList.CurrentRow.BeginEdit();
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 0;
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NgayXacnhan].Value =DBNull.Value;
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NguoiXacnhan].Value = DBNull.Value;
                     grdList.CurrentRow.EndEdit();
                     break;
                 case ActionResult.Exceed:
                     Utility.ShowMsg("Thuốc trong kho nhập đã được sử dụng hết nên bạn không thể hủy phiếu cấp phát", "Thông báo lỗi", MessageBoxIcon.Error);
                     break;
                 case ActionResult.NotEnoughDrugInStock:
                     Utility.ShowMsg("Thuốc trong kho nhập đã gần hết nên bạn không thể hủy phiếu cấp phát", "Thông báo lỗi", MessageBoxIcon.Error);
                     break;
                 case ActionResult.Error:
                     break;
             }
         }
     }
     ModifyCommand();
 }
 private void cmdHuychuyenkho_Click(object sender, EventArgs e)
 {
     if (Utility.AcceptQuestion("Bạn có muốn hủy xác nhận phiếu trả thuốc từ khoa nội trú về kho hay không?", "Thông báo", true))
     {
         string errMsg = "";
         int IdPhieu = Utility.Int32Dbnull(grdList.GetValue(TPhieuNhapxuatthuoc.Columns.IdPhieu), -1);
         TPhieuNhapxuatthuoc objTPhieuNhapxuatthuoc = TPhieuNhapxuatthuoc.FetchByID(IdPhieu);
         if (objTPhieuNhapxuatthuoc != null)
         {
             ActionResult actionResult =
                 new CapphatThuocKhoa().HuyXacNhanPhieuTrathuocTutrucKhoaVeKho(objTPhieuNhapxuatthuoc, ref errMsg);
             switch (actionResult)
             {
                 case ActionResult.Success:
                     Utility.ShowMsg("Bạn thực hiện hủy xác nhận phiếu trả thuốc từ khoa nội trú về kho thành công", "Thông báo");
                     grdList.CurrentRow.BeginEdit();
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 0;
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NgayXacnhan].Value =DBNull.Value;
                     grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NguoiXacnhan].Value = DBNull.Value;
                     grdList.CurrentRow.EndEdit();
                     break;
                 case ActionResult.Exceed:
                     Utility.ShowMsg("Thuốc trong kho lẻ(nhận) đã được sử dụng hết nên bạn không thể hủy phiếu trả thuốc ", "Thông báo lỗi", MessageBoxIcon.Error);
                     break;
                 case ActionResult.NotEnoughDrugInStock:
                     Utility.ShowMsg("Thuốc trong kho lẻ(nhận) đã sử dụng gần hết nên không còn đủ số lượng để hoàn trả lại tủ thuốc", "Thông báo lỗi", MessageBoxIcon.Error);
                     break;
                 case ActionResult.Error:
                     break;
             }
         }
     }
     ModifyCommand();
 }
        private void PerformCancelConfirmAction()
        {
            try
            {
                if (!Utility.isValidGrid(grdList))
                {
                    Utility.ShowMsg("Bạn cần chọn phiếu để hủy xác nhận");
                    return;
                }
                if (_ID_CAPPHAT == -1) return;
                if (DAPHATTHUOC_BENHNHAN())
                {
                    Utility.ShowMsg("Đã phát thuốc cho Bệnh nhân nên bạn không thể hủy xác nhận phiếu");
                    return;
                }
                if (Utility.AcceptQuestion("Bạn có muốn hủy xác nhận cấp phát thuốc cho phiếu đang chọn không?", "Xác nhận hủy cấp phát theo phiếu ", true))
                {
                    short ID_KHO_XUAT = Utility.Int16Dbnull(grdList.CurrentRow.Cells[TPhieuCapphatNoitru.Columns.IdKhoXuat].Value, -1);
                    string errmsg = "";
                    ActionResult action = new CapphatThuocKhoa().HuyXacnhanphieuCapphatNoitru(_ID_CAPPHAT, ID_KHO_XUAT, ref errmsg);
                    switch (action)
                    {
                        case ActionResult.Success:
                            DataRow dr = Utility.FetchOnebyCondition(dtList, "ID_CAPPHAT=" + _ID_CAPPHAT);
                            if (dr != null)
                            {
                                dr[TPhieuCapphatNoitru.Columns.IdKhoXuat] = -1;
                                dr["TRANG_THAI"] = 0;
                                dr["ten_trangthai"] = "Chưa cấp phát";
                                dtList.AcceptChanges();
                            }
                            ProcessStatus();
                            Utility.ShowMsg("Đã thực hiện hủy cấp phát thuốc theo phiếu thành công!");
                            break;
                        case ActionResult.Error:
                            Utility.ShowMsg("Không tìm thấy chi tiết trong bảng đơn thuốc chi tiết. Đề nghị bug lại dữ liệu");
                            break;
                        case ActionResult.Exceed:
                            Utility.ShowMsg("Không xóa hết dữ liệu chi tiết của lần cấp phát bệnh nhân. Bug lại code");
                            break;
                        case ActionResult.Exception:
                            Utility.ShowMsg("Lỗi exception:\n" + errmsg);
                            break;
                        default:
                            break;
                    }
                }

            }
            catch (Exception ex)
            {
                Utility.ShowMsg(ex.ToString().Trim());
                return;
            }
            finally
            {
                modifyActButtons();
            }
        }
        /// <summary>
        /// hàm thực hiện việc cho phép chuyển thông tin xác nhận vào kho
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmdNhapKho_Click(object sender, EventArgs e)
        {
            try
            {
                cmdNhapKho.Enabled = false;
                if (Utility.AcceptQuestion("Bạn có chắc chắn muốn xác nhận phiếu xuất thuốc Bệnh nhân nội trú đang chọn hay không?", "Thông báo", true))
                {
                    string errMsg = "";
                    int IdPhieu = Utility.Int32Dbnull(grdList.GetValue(TPhieuNhapxuatthuoc.Columns.IdPhieu), -1);
                    TPhieuNhapxuatthuoc objTPhieuNhapxuatthuoc = TPhieuNhapxuatthuoc.FetchByID(IdPhieu);
                    if (objTPhieuNhapxuatthuoc != null)
                    {
                        DateTime _ngayxacnhan = globalVariables.SysDate;
                        if (THU_VIEN_CHUNG.Laygiatrithamsohethong("THUOC_HIENTHI_NGAYXACNHAN", "0", false) == "1")
                        {
                            frm_ChonngayXacnhan _ChonngayXacnhan = new frm_ChonngayXacnhan();
                            _ChonngayXacnhan.pdt_InputDate = objTPhieuNhapxuatthuoc.NgayHoadon;
                            _ChonngayXacnhan.ShowDialog();
                            if (_ChonngayXacnhan.b_Cancel)
                                return;
                            else
                                _ngayxacnhan = _ChonngayXacnhan.pdt_InputDate;
                        }
                        ActionResult actionResult =
                            new CapphatThuocKhoa().XacNhanPhieuCapphatThuocBenhnhanNoitru(objTPhieuNhapxuatthuoc, _ngayxacnhan, ref errMsg);
                        switch (actionResult)
                        {
                            case ActionResult.Success:
                                Utility.SetMsg(uiStatusBar2.Panels["MSG"], "Đã xác nhận phiếu xuất thuốc Bệnh nhân nội trú thành công", false);
                                grdList.CurrentRow.BeginEdit();
                                grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 1;
                                grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NgayXacnhan].Value = _ngayxacnhan;
                                grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.NguoiXacnhan].Value = globalVariables.UserName;
                                grdList.CurrentRow.Cells[TPhieuNhapxuatthuoc.Columns.TrangThai].Value = 1;
                                grdList.CurrentRow.EndEdit();
                                break;
                            case ActionResult.Exceed:
                                Utility.ShowMsg("Không có thuốc trong kho xuất nên không thể xác nhận phiếu xuất\n" + errMsg);
                                break;
                            case ActionResult.NotEnoughDrugInStock:
                                Utility.ShowMsg("Thuốc trong kho xuất không còn đủ số lượng nên không thể xác nhận phiếu xuất\n" + errMsg);
                                break;
                            case ActionResult.Error:

                                break;
                        }
                    }

                }

            }
            catch (Exception)
            {
            }
            finally
            {
                ModifyCommand();
            }
        }
        private void cmdConfirm_Click(object sender, EventArgs e)
        {
            try
            {
                if (!Utility.isValidGrid(grdList))
                {
                    Utility.ShowMsg("Bạn cần chọn phiếu để xác nhận");
                    return;
                }
                if (DAPHATTHUOC_BENHNHAN())
                {
                    Utility.ShowMsg("Đã phát thuốc cho Bệnh nhân nên bạn không thể xác nhận phiếu");
                    return;
                }
                Int16 StockID = 0;
                if (cboKhoxuat.Items.Count <= 0 || cboKhoxuat.SelectedValue.ToString() == "-1")
                {
                    Utility.ShowMsg("Bạn cần chọn kho xuất");
                    cboKhoxuat.Focus();
                    return;
                }
                StockID = Utility.Int16Dbnull(cboKhoxuat.SelectedValue, -1);
                if (
                    Utility.AcceptQuestion(string.Format(
                        "Bạn có muốn lấy thuốc từ kho {0} để cấp cho phiếu đang chọn hay không?", cboKhoxuat.Text),
                        "Xác nhận ", true))
                {
                    ActionResult ActionResult = new CapphatThuocKhoa().XacnhanphieuCapphatNoitru(_ID_CAPPHAT, StockID, dtNgayPhatThuoc.Value);
                    switch (ActionResult)
                    {
                        case ActionResult.Success:

                            Utility.ShowMsg("Xác nhận cấp phát thuốc thành công");
                            DataRow dr = Utility.FetchOnebyCondition(dtList, "ID_CAPPHAT=" + _ID_CAPPHAT);
                            if (dr != null)
                            {
                                dr[TPhieuCapphatNoitru.Columns.IdKhoXuat] = -1;
                                dr["TRANG_THAI"] = 1;
                                dr["ten_trangthai"] = "Đã cấp phát";
                                dtList.AcceptChanges();
                            }
                            ProcessStatus();
                            break;
                        case ActionResult.NotEnoughDrugInStock:
                            Utility.ShowMsg("Số thuốc trong kho không đủ để cấp phát\nVui lòng bấm vào nút Kiểm tra thuốc trong kho bên cạnh để xem chi tiết thuốc còn thiếu");
                            break;
                        case ActionResult.Error:
                            Utility.ShowMsg("Có lỗi trong quá trình cấp phát thuốc");
                            break;
                        case ActionResult.Exceed:
                            Utility.ShowMsg("Có lỗi trong quá trình cập nhật trạng thái đơn thuốc");
                            break;
                    }
                }
            }
            catch
            {
            }
            finally
            {
                modifyActButtons();
            }
        }
        private void cmdDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (!Utility.isValidGrid(grdList))
                {
                    Utility.ShowMsg("Bạn cần chọn phiếu để xóa");
                    return;
                }
                if (DAPHATTHUOC_BENHNHAN())
                {
                    Utility.ShowMsg("Đã phát thuốc cho Bệnh nhân nên bạn không thể xóa phiếu");
                    return;
                }
                ActionResult actionResult = new CapphatThuocKhoa().XoaPhieuCapPhatNoiTru(_ID_CAPPHAT);
                switch (actionResult)
                {
                    case ActionResult.Success:
                        Utility.ShowMsg("Đã xóa dữ liệu thành công");
                        DataRow[] drDetele = dtList.Select(TPhieuCapphatNoitru.Columns.IdCapphat + " = " + _ID_CAPPHAT);
                        dtList.Rows.Remove(drDetele[0]);
                        dtList.AcceptChanges();

                        break;
                    case ActionResult.Error:
                        Utility.ShowMsg("Có lỗi trong quá trình xóa dữ liệu");
                        break;
                }

            }
            catch (Exception ex)
            {

                Utility.ShowMsg("Có lỗi trong quá trình xóa dữ liệu /n" + ex);
            }
            finally
            {
                modifyActButtons();
            }
        }
        private void cmdCheck_Click(object sender, EventArgs e)
        {
            if (cboKhoxuat.SelectedValue.ToString() == "-1")
            {
                Utility.ShowMsg("Bạn cần chọn kho xuất");
                cboKhoxuat.Focus();
                return;
            }
            ActionResult ActionResult = new CapphatThuocKhoa().Kiemtratonthuoc(_ID_CAPPHAT, Utility.Int16Dbnull(cboKhoxuat.SelectedValue, -1));
            switch (ActionResult)
            {
                case ActionResult.Success:
                    Utility.ShowMsg("Thuốc trong kho còn đủ để cấp phát");
                    break;
                case ActionResult.NotEnoughDrugInStock:
                    //Đã thông báo
                    break;
                case ActionResult.UNKNOW:
                    Utility.ShowMsg("Tồn tại thuốc trong đơn cấp phát đã bị xóa khỏi bảng danh mục thuốc. Mời bạn kiểm tra lại!");
                    break;

                    break;
            }
        }
        private void cmdDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (!Utility.isValidGrid(grdList))
                {
                    Utility.ShowMsg("Bạn cần chọn phiếu để xóa");
                    return;
                }
                TPhieuCapphatNoitru _item = TPhieuCapphatNoitru.FetchByID(_ID_CAPPHAT);
                if (_item == null)
                {
                    Utility.ShowMsg("Phiếu bạn chọn đã bị người khác tác động xóa mất. Đề nghị nhấn tìm kiếm để thử kiểm tra lại");
                    return;
                }
                if (DAPHATTHUOC_BENHNHAN())
                {
                    Utility.ShowMsg("Đã phát thuốc cho Bệnh nhân nên bạn không thể xóa phiếu");
                    return;
                }

                if (!Utility.AcceptQuestion("Bạn có chắc chắn muốn xóa phiếu lĩnh thuốc nội trú đang chọn hay không?", "Xác nhận xóa", true))
                    return;
                ActionResult actionResult = new CapphatThuocKhoa().XoaPhieuCapPhatNoiTru(_ID_CAPPHAT);
                switch (actionResult)
                {
                    case ActionResult.Success:
                        if (dtDrugList != null) dtDrugList.Rows.Clear();
                        DataRow[] drDetele = dtList.Select(TPhieuCapphatNoitru.Columns.IdCapphat + " = " + _ID_CAPPHAT);
                        dtList.Rows.Remove(drDetele[0]);
                        dtList.AcceptChanges();

                        break;
                    case ActionResult.Error:
                        Utility.ShowMsg("Có lỗi trong quá trình xóa dữ liệu");
                        break;
                }

            }
            catch (Exception ex)
            {

                Utility.ShowMsg("Có lỗi trong quá trình xóa dữ liệu /n" + ex);
            }
            finally
            {
                modifyActButtons();
            }
        }
        private void cmdCheck_Click(object sender, EventArgs e)
        {
            if (cboKhoxuat.SelectedValue.ToString() == "-1")
            {
                Utility.ShowMsg("Bạn cần chọn kho xuất");
                cboKhoxuat.Focus();
                return;
            }
            TPhieuCapphatNoitru _item = TPhieuCapphatNoitru.FetchByID(_ID_CAPPHAT);
            if (_item == null)
            {
                Utility.ShowMsg("Phiếu bạn chọn đã bị người khác tác động xóa mất. Đề nghị nhấn tìm kiếm để thử kiểm tra lại");
                return;
            }
            ActionResult ActionResult = new CapphatThuocKhoa().Kiemtratonthuoc(_ID_CAPPHAT, Utility.Int16Dbnull(cboKhoxuat.SelectedValue, -1));
            switch (ActionResult)
            {
                case ActionResult.Success:
                    Utility.ShowMsg("Thuốc trong kho còn đủ để cấp phát");
                    break;
                case ActionResult.NotEnoughDrugInStock:
                    //Đã thông báo
                    break;
                case ActionResult.UNKNOW:
                    Utility.ShowMsg("Tồn tại thuốc trong đơn cấp phát đã bị xóa khỏi bảng danh mục thuốc. Mời bạn kiểm tra lại!");
                    break;

                    break;
            }
        }
        /// <summary>
        /// update thông tin của phân tạo phiếu thông tin của phần de nghi cap phat thuoc noi tru
        /// </summary>
        void UpdataData()
        {
            try
            {
               List< TThuocCapphatChitiet> lstTThuocCapphatChitiet = Taodulieuchitietcapphat();
               TPhieuCapphatNoitru objTPhieuCapphatNoitru = TaoPhieuCapphatNoitru();
                if (lstTThuocCapphatChitiet == null || lstTThuocCapphatChitiet.Count() <= 0)
                {
                    //Utility.ShowMsg("Chưa có thuốc nào được chọn cấp phát");
                    return;
                }
                ActionResult actionResult = new CapphatThuocKhoa().CappnhatPhieucapphatNoitru(objTPhieuCapphatNoitru, TaoPhieuCapphatChitiet(), lstTThuocCapphatChitiet);
                switch (actionResult)
                {
                    case ActionResult.Success:
                        //Utility.ShowMsg("Cập nhật thông tin thành công");
                        cmdPrint.Enabled = true;
                        cmdPrintDetail.Enabled = true;
                        break;
                    case ActionResult.Error:
                        Utility.ShowMsg("Có lỗi trong quá trình lưu thông tin");
                        break;

                }
            }
            catch (Exception ex)
            {
                log.ErrorException("ban ra Exception=",ex);
                Utility.ShowMsg("Có lỗi trong quá trình lưu thông tin /n" + ex.ToString());

            }
        }
        /// <summary>
        /// thêm thông tni của đề nghị cấp phat thuốc nọi trú 
        /// </summary>
        void InsertData()
        {
            try
            {
              List< TThuocCapphatChitiet> lstTThuocCapphatChitiet= Taodulieuchitietcapphat();
               TPhieuCapphatNoitru objTPhieuCapphatNoitru=TaoPhieuCapphatNoitru();
               if (lstTThuocCapphatChitiet == null || lstTThuocCapphatChitiet.Count() <= 0)
               {
                   //Utility.ShowMsg("Chưa có thuốc nào được chọn cấp phát");
                   return;
               }
               ActionResult actionResult = new CapphatThuocKhoa().ThemPhieuCapPhatNoiTru(objTPhieuCapphatNoitru, TaoPhieuCapphatChitiet(), lstTThuocCapphatChitiet);

                switch (actionResult)
                {
                    case ActionResult.Success:
                        //Chuyển về trạng thái Update
                        m_Action = action.Update;
                        _IDCAPPHAT = objTPhieuCapphatNoitru.IdCapphat;
                        cmdPrint.Enabled = true;
                        cmdPrintDetail.Enabled = true;
                        ProcessDataInsert(_IDCAPPHAT);
                        if (_OnInsertCompleted != null) _OnInsertCompleted(_IDCAPPHAT);
                        //Utility.ShowMsg("Đã thực hiện cấp phát thuốc thành công\nBạn có thể in phiếu cấp phát thuốc tổng hợp hoặc phiếu cấp phát thuốc chi tiết để mang đến quầy thuốc xin cấp phát.");
                        cmdPrint.Focus();
                        break;
                    case ActionResult.Error:
                        Utility.ShowMsg("Có lỗi trong quá trình lưu thông tin");
                        break;

                }
            }
            catch (Exception ex)
            {
                Utility.ShowMsg("Có lỗi trong quá trình lưu thông tin /n" + ex.ToString());

            }
        }