/// <summary>
        /// Detail Grid Data Search
        /// </summary>
        /// <param name="target"></param>
        void SearchStockDetail(DateTime target)
        {
            try
            {
                //var _USER_ID = this.BaseInfo.user_id.ToString();
                var strTargetDate = target.ToString("yyyyMMdd");

                var param = new Dictionary <string, object>
                {
                    { "P_CENTER_CD", this.BaseClass.CenterCD },
                    { "P_STOCK_INSP_DT", strTargetDate }
                };

                var    strOutParam = new[] { "P_EMS_STOCK_DETAIL_LIST" };
                string callProc    = "PK_EMS_ESPA002.SP_EMS_STOCK_DETAIL_SEL";

                using (BaseDataAccess da = new BaseDataAccess())
                {
                    var outData = da.GetSpDataSet(
                        callProc                           // 호출 프로시저
                        , param                            // Input 파라메터
                        , strOutParam                      // Output 파라메터
                        );

                    if (null != CurrentStockDetail)
                    {
                        CurrentStockDetail.Clear();
                        CurrentStockDetail = null;
                    }

                    CurrentStockDetail = new ObservableCollection <EmsStockDetail>();

                    if (outData.Tables[0].Rows.Count > 1)
                    {
                        CurrentStockDetail.ToObservableCollection(outData.Tables[0]);

                        //this.ChangeStatusLabelEvent(HelperClass.GetMessageByCountryCode("CMPT_INQ"));
                    }
                    else
                    {
                        //this.ChangeStatusLabelEvent(HelperClass.GetMessageByCountryCode("NO_INQ_DATA"));
                    }

                    gridDetail.ItemsSource = CurrentStockDetail;

                    this.btnExcelHigh.IsEnabled = true;

                    if (checkYes.IsChecked.Value)
                    {
                        foreach (EmsStockDetail item in CurrentStockDetail)
                        {
                            item.IsHide = ("Y" != item.STOCK_MNG_YN);
                        }

                        gridDetail.RefreshData();
                    }
                    else
                    {
                        checkYes.IsChecked = true;
                    }
                }
            }
            catch (Exception ex)
            {
                this.BaseClass.MsgError(ex.Message, BaseEnumClass.CodeMessage.MESSAGE);
            }
        }
        /// <summary>
        /// 저장 함수
        /// </summary>
        /// <returns></returns>
        bool StockDetailSave(bool from_confirm = false)
        {
            bool result = false;

            using (BaseDataAccess da = new BaseDataAccess())
            {
                try
                {
                    string _SUCCESS_CODE = "100";

                    var _USER_ID = this.BaseClass.UserID;

                    var _stockSave = StockList.Where(f => f.IsUpdate).ToList();

                    if (0 < _stockSave.Count)
                    {
                        da.BeginTransaction();

                        foreach (var item in _stockSave)
                        {
                            var param = new Dictionary <string, object>
                            {
                                { "P_CENTER_CD", this.BaseClass.CenterCD },
                                { "P_STOCK_INSP_DT", item.STOCK_INSP_DT.ToString("yyyyMMdd") }, // new DateTime(item.STOCK_INSP_DT.Year, item.STOCK_INSP_DT.Month, item.STOCK_INSP_DT.Day) }, // 재고 조사 일자
                                { "P_NOTE", item.NOTE },                                        // 비고
                                { "P_USER_ID", _USER_ID }
                            };

                            var    strOutParam = new[] { "P_RESULT" };
                            string callProc    = "PK_EMS_ESPA002_01P.SP_EMS_STOCK_INSP_DT_UPDATE";

                            var outData = da.GetSpDataSet(
                                callProc                           // 호출 프로시저
                                , param                            // Input 파라메터
                                , strOutParam                      // Output 파라메터
                                );

                            if (outData.Tables[0].Rows.Count > 0)
                            {
                                if (outData.Tables[0].Rows[0]["CODE"].ToString() != _SUCCESS_CODE)
                                {
                                    _SUCCESS_CODE = "0";
                                    da.RollbackTransaction();
                                    BaseClass.MsgInfo(outData.Tables[0].Rows[0]["MSG"].ToString(), BaseEnumClass.CodeMessage.MESSAGE);

                                    return(false);
                                }
                            }
                            else
                            {
                                _SUCCESS_CODE = "0";
                                da.RollbackTransaction();
                                this.BaseClass.MsgError("ERR_INPUT_TYPE");

                                return(false);
                            }
                        }

                        if (_SUCCESS_CODE == "100")
                        {
                            result = true;
                        }
                        else
                        {
                            da.RollbackTransaction();
                            return(false);
                        }
                    }


                    var _saveItems = CurrentStockDetail.Where(f => f.IsUpdate).ToList();

                    if (0 == _saveItems.Count)
                    {
                        if (result)
                        {
                            da.CommitTransaction();
                        }

                        return(result ? true : from_confirm);
                    }

                    if (!result)
                    {
                        da.BeginTransaction();
                    }

                    foreach (var item in _saveItems)
                    {
                        var param = new Dictionary <string, object>
                        {
                            { "P_CENTER_CD", this.BaseClass.CenterCD },
                            { "P_STOCK_INSP_DT", item.STOCK_INSP_DT.Replace("-", string.Empty) }, //new DateTime(item.STOCK_INSP_DT.Year, item.STOCK_INSP_DT.Month, item.STOCK_INSP_DT.Day) }, // 재고 조사 일자
                            { "P_PART_ID", item.PART_ID },                                        // ID
                            { "P_INSP_QTY", item.INSP_QTY },                                      // 재고 조사 수량
                            { "P_WH_NOTE", item.NOTE },                                           // 비고
                            { "P_USER_ID", _USER_ID }
                        };

                        var    strOutParam = new[] { "P_RESULT" };
                        string callProc    = "PK_EMS_ESPA002.SP_EMS_STOCK_DETAIL_UPDATE";

                        var outData = da.GetSpDataSet(
                            callProc                           // 호출 프로시저
                            , param                            // Input 파라메터
                            , strOutParam                      // Output 파라메터
                            );

                        if (outData.Tables[0].Rows.Count > 0)
                        {
                            if (outData.Tables[0].Rows[0]["CODE"].ToString() != _SUCCESS_CODE)
                            {
                                _SUCCESS_CODE = "0";
                                da.RollbackTransaction();
                                BaseClass.MsgInfo(outData.Tables[0].Rows[0]["MSG"].ToString(), BaseEnumClass.CodeMessage.MESSAGE);
                                break;
                            }
                        }
                        else
                        {
                            _SUCCESS_CODE = "0";
                            da.RollbackTransaction();
                            this.BaseClass.MsgError("ERR_INPUT_TYPE");
                            break;
                        }
                    }

                    if (_SUCCESS_CODE == "100")
                    {
                        da.CommitTransaction();
                        //this.ChangeStatusLabelEvent(HelperClass.GetMessageByCountryCode("CMPT_SAVE_DATA"));

                        return(true);
                    }
                }
                catch (Exception ex)
                {
                    result = false;

                    da.RollbackTransaction();
                    this.BaseClass.MsgError(ex.Message, BaseEnumClass.CodeMessage.MESSAGE);
                }
            }

            return(result);
        }
        /// <summary>
        /// 조회 함수
        /// </summary>
        void SearchStock()
        {
            try
            {
                var strStartDate = this.BaseClass.GetCalendarValue(this.searchStart);
                var strEndDate   = this.BaseClass.GetCalendarValue(this.searchEnd);

                var param = new Dictionary <string, object>
                {
                    { "P_CENTER_CD", this.BaseClass.CenterCD },
                    { "P_FROM_DT", strStartDate },
                    { "P_TO_DT", strEndDate }
                };

                var strOutParam = new[] { "P_EMS_STOCK_LIST" };
                //string callProc = "PK_EMS_ESPA002.SP_EMS_STOCK_SEL";
                string callProc = "PK_EMS_ESPA002.SP_EMS_STOCK_PERIOD_SEL";

                using (BaseDataAccess da = new BaseDataAccess())
                {
                    var outData = da.GetSpDataSet(
                        callProc                           // 호출 프로시저
                        , param                            // Input 파라메터
                        , strOutParam                      // Output 파라메터
                        );

                    if (null != StockList)
                    {
                        StockList.Clear();
                        StockList = null;
                    }

                    StockList = new ObservableCollection <EmsStock>();

                    if (outData.Tables[0].Rows.Count > 0)
                    {
                        StockList.ToObservableCollection(outData.Tables[0]);

                        //this.ChangeStatusLabelEvent(HelperClass.GetMessageByCountryCode("CMPT_INQ"));
                    }
                    else
                    {
                        //this.ChangeStatusLabelEvent(HelperClass.GetMessageByCountryCode("NO_INQ_DATA"));
                    }

                    gridMain.ItemsSource = StockList;

                    if (outData.Tables[0].Rows.Count > 0)
                    {
                        if (-1 < focused_handle)
                        {
                            gridMain.View.FocusedRowHandle = focused_handle;
                            gridMain.SelectedItem          = (gridMain.ItemsSource as ObservableCollection <EmsStock>)[focused_handle];
                        }
                        else
                        {
                            gridMain.View.FocusedRowHandle = 0;
                            gridMain.SelectedItem          = (gridMain.ItemsSource as ObservableCollection <EmsStock>)[0];
                        }

                        EmsStock target = gridMain.SelectedItem as EmsStock;

                        if (null != target)
                        {
                            CurrentStock = target;
                            SearchStockDetail(target.STOCK_INSP_DT);
                        }
                    }
                    else
                    {
                        CurrentStock = null;

                        if (null != CurrentStockDetail)
                        {
                            CurrentStockDetail.Clear();
                            CurrentStockDetail = null;
                        }
                    }

                    this.btnConfirmHigh.IsEnabled   = true;
                    this.btnSaveHigh.IsEnabled      = true;
                    this.btnAddHigh.IsEnabled       = true;
                    this.btnRowDeleteHigh.IsEnabled = true;
                }
            }
            catch (Exception ex)
            {
                this.BaseClass.Error(ex);
                this.BaseClass.MsgError(ex.Message, BaseEnumClass.CodeMessage.MESSAGE);
            }
        }