Esempio n. 1
0
    /// <summary>
    /// 將變更後的內部變量this.CallBackValue返回給前台JavaScript方法ReceiveServerData(string Value)。

    /// </summary>
    /// <returns></returns>
    string ICallbackEventHandler.GetCallbackResult()
    {
        if (CallBackValue != string.Empty)
        {
            try
            {
                #region 取得頁面元件
                TextBox txt_up_CHAN_NO = (TextBox)((ASP.stm_slp_slp_storechain_ascx)slp_up_CHAN_NO).FindControl("TextBoxCode");//通路
                TextBox txt_up_CHAN_NAME = (TextBox)((ASP.stm_slp_slp_storechain_ascx)slp_up_CHAN_NO).FindControl("TextBoxName");//通路名稱

                TextBox txt_up_STORE = (TextBox)((ASP.stm_slp_slp_store_ascx)slp_up_STORE).FindControl("TextBoxCode");//門市

                TextBox txt_up_Z_O = (TextBox)((ASP.sys_slp_slp_codefile_ascx)slp_up_Z_O).FindControl("TextBoxCode");//營業所
                TextBox txt_up_Z_O_NAME = (TextBox)((ASP.sys_slp_slp_codefile_ascx)slp_up_Z_O).FindControl("TextBoxName");//營業所名稱

                TextBox txt_up_BUSDATE = (TextBox)((ASP.wui_slp_slp_slpdate_ascx)slp_up_BUSDATE).FindControl("TextBoxCode");//訂單日期
                TextBox txt_up_SALE_ID = (TextBox)((ASP.sys_slp_slp_user_ascx)slp_up_SALE_ID).FindControl("TextBoxCode");//營業人員
                TextBox txt_up_SALE_NAME = (TextBox)((ASP.sys_slp_slp_user_ascx)slp_up_SALE_ID).FindControl("TextBoxName");//營業人員名稱

                TextBox txt_up_BUSUID = (TextBox)((ASP.sys_slp_slp_user_ascx)slp_up_BUSUID).FindControl("TextBoxCode");//訂單維護者

                Image img_up_CHAN_NO = (Image)((ASP.stm_slp_slp_storechain_ascx)slp_up_CHAN_NO).FindControl("Image1");//通路img
                Image img_up_STORE = (Image)((ASP.stm_slp_slp_store_ascx)slp_up_STORE).FindControl("Image1");//門市img
                Image img_up_BUSDATE = (Image)((ASP.wui_slp_slp_slpdate_ascx)slp_up_BUSDATE).FindControl("Image1");//訂單日期img
                Image img_up_SALE_ID = (Image)((ASP.sys_slp_slp_user_ascx)slp_up_SALE_ID).FindControl("Image1");//營業人員img
                Image img_up_BUSUID = (Image)((ASP.sys_slp_slp_user_ascx)slp_up_BUSUID).FindControl("Image1");//訂單維護者img
                Image img_down_ITEM = (Image)((ASP.itm_slp_slp_sku_ascx)slp_down_ITEM).FindControl("Image1");//品號img
                Image img_down_REQUEST_QTY = (Image)((ASP.wui_slp_slp_slpquantity_ascx)slp_down_REQUEST_QTY).FindControl("Image1");//訂貨量img
                Image img_down_RTN_DDL = (Image)((ASP.wui_slp_slp_slpdate_ascx)slp_down_RTN_DDL).FindControl("Image1");//退書截止日img

                TextBox txt_down_ITEM = (TextBox)((ASP.itm_slp_slp_sku_ascx)slp_down_ITEM).FindControl("TextBoxCode");//品號
                TextBox txt_down_ITEM_NAME = (TextBox)((ASP.itm_slp_slp_sku_ascx)slp_down_ITEM).FindControl("TextBoxName");//品名
                TextBox txt_down_REQUEST_QTY = (TextBox)((ASP.wui_slp_slp_slpquantity_ascx)slp_down_REQUEST_QTY).FindControl("TextBoxCode");//訂貨量
                TextBox txt_down_REQUEST_QTY_NAME = (TextBox)((ASP.wui_slp_slp_slpquantity_ascx)slp_down_REQUEST_QTY).FindControl("TextBoxName");//訂貨量名稱
                TextBox txt_down_RTN_DDL = (TextBox)((ASP.wui_slp_slp_slpdate_ascx)slp_down_RTN_DDL).FindControl("TextBoxCode");//退書截止日
                CheckBox chk_down_IS_OVERDUE = (CheckBox)((ASP.wui_slp_slp_boolean_ascx)slp_down_IS_OVERDUE).FindControl("C1");//逾期客訂
                #endregion
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Remove(0, sb.Length);
                CallBackValue = CallBackValue.Trim();
                string[] s_Client_String = System.Text.RegularExpressions.Regex.Split(CallBackValue, "<partition>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                ArrayList ParameterList = new ArrayList();//20091117

                #region 新增模式下異動欄位[門市]

                if (s_Client_String[0] == "新增模式下異動欄位[門市]")
                {
                    if (dtChainPOSetting != null)
                    { dtChainPOSetting = null; }

                    s_STORE = s_Client_String[1].ToString().Trim();//門市
                    s_CHAN_NO = s_Client_String[2].ToString().Trim();//通路

                    #region 從資料庫查詢資料

                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//門市
                    ParameterList.Add(s_Client_String[2]);//通路
                    ParameterList.Add(Session["UID"].ToString());

                    DataTable dt_Return = new DataTable();
                    BCO.MaintainStore bco = new BCO.MaintainStore(ConntionDB);
                    dt_Return = bco.QUERY_STORE_BY_STOREANDCHAN(ParameterList);

                    #endregion

                    #region 設定回傳Client端資訊
                    if (dt_Return.Rows.Count == 0)
                    {
                        sb.Append("新增模式下異動欄位[門市]<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append("查無門市資料<partition>");
                        sb.Append(txt_up_STORE.ClientID + "<partition>");//設定焦點的欄位
                        sb.Append(txt_up_CHAN_NO.ClientID + "<partition>");
                        sb.Append(txt_up_Z_O.ClientID + "<partition>");
                        sb.Append(txt_up_SALE_ID.ClientID);
                    }
                    else
                    {
                        sb.Append("新增模式下異動欄位[門市]<partition>");
                        sb.Append("TRUE<partition>");
                        sb.Append(dt_Return.Rows[0]["CHAN_NO"].ToString() + "<partition_Detail>" + txt_up_CHAN_NO.ClientID + "<partition>");
                        sb.Append(dt_Return.Rows[0]["Z_O"].ToString() + "<partition_Detail>" + txt_up_Z_O.ClientID + "<partition>");
                        //sb.Append(dt_Return.Rows[0]["SAL_ID"].ToString() + "<partition_Detail>" + txt_up_SALE_ID.ClientID);
                        sb.Append(dt_Return.Rows[0]["SAL_ID"].ToString() + "<partition_Detail>" + txt_up_SALE_ID.ClientID + "<partition>");

                        sb.Append("<partition_Detail>" + txt_up_CHAN_NAME.ClientID + "<partition>");
                        sb.Append("<partition_Detail>" + txt_up_Z_O_NAME.ClientID + "<partition>");
                        sb.Append("<partition_Detail>" + txt_up_SALE_NAME.ClientID);

                        #region 取得通路PO控制設定

                        GetChainPOSetting(dt_Return.Rows[0]["CHAN_NO"].ToString(),
                                          dt_Return.Rows[0]["STORE"].ToString());

                        #endregion
                    }
                    #endregion
                }

                #endregion

                #region 新增或編輯模式下異動欄位[二段碼]

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[二段碼]")
                {
                    #region 從資料庫查詢資料:群分類、品號、期別

                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//通路
                    ParameterList.Add(s_Client_String[2]);//一段碼
                    ParameterList.Add(s_Client_String[3]);//二段碼

                    ParameterList.Add(Session["UID"].ToString());

                    DataTable dt_Return = new DataTable();
                    BCO.QueryCRMCommon bco = new BCO.QueryCRMCommon(ConntionDB);
                    dt_Return = bco.QueryItemPeriodInfoByBarcode(ParameterList);

                    #endregion

                    if (dt_Return.Rows.Count == 0)
                    {
                        sb.Append("新增或編輯模式下異動欄位[二段碼]<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append("此一段碼/二段碼不存在對應商品期別資訊,請重新輸入<partition>");
                        sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//設定焦點的欄位

                        sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");
                        sb.Append(txt_down_ITEM.ClientID + "<partition>");
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");
                        sb.Append(txt_down_RTN_DDL.ClientID);
                    }
                    else
                    {
                        sb.Append("新增或編輯模式下異動欄位[二段碼]<partition>");
                        sb.Append("TRUE<partition>");
                        sb.Append(dt_Return.Rows[0]["ITEM"].ToString() + "<partition_Detail>" + txt_down_ITEM.ClientID + "<partition>");
                        sb.Append(dt_Return.Rows[0]["PERIOD"].ToString() + "<partition_Detail>" + this.txt_down_PERIOD.ClientID + "<partition>");
                        sb.Append(DateTime.Parse(dt_Return.Rows[0]["RTN_DDL"].ToString()).ToString("yyyy/MM/dd") + "<partition_Detail>" + txt_down_RTN_DDL.ClientID);

                        //期別或品號有異動時,重取庫存
                        if (s_ITEM != dt_Return.Rows[0]["ITEM"].ToString() ||
                            s_PERIOD != dt_Return.Rows[0]["PERIOD"].ToString()
                           )

                        { dtStock = null; }
                        s_ROOT_NO = dt_Return.Rows[0]["ROOT_NO"].ToString();
                        s_ITEM = dt_Return.Rows[0]["ITEM"].ToString();
                        s_PERIOD = dt_Return.Rows[0]["PERIOD"].ToString();

                        GetStock(s_ROOT_NO, s_ITEM, s_PERIOD);
                    }
                }

                #endregion

                #region 新增或編輯模式下異動欄位[一段碼]onchange

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[一段碼]onchange")
                {
                    #region  根據一段碼帶出品號,最大發行期別,二段碼
                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//通路
                    ParameterList.Add(s_STORE);//通路
                    ParameterList.Add(s_Client_String[3]);//一段碼
                    ParameterList.Add(string.Empty);//二段碼
                    ParameterList.Add(Session["UID"].ToString());

                    DataTable dt_Return = new DataTable();
                    BCO.QueryCRMCommon bco = new BCO.QueryCRMCommon(ConntionDB);
                    dt_Return = bco.QueryItemPeriodInfoByBarcode2(ParameterList);


                    #endregion

                    if (dt_Return.Rows.Count == 0)
                    {
                        sb.Append("新增或編輯模式下異動欄位[一段碼]onchange<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append("此一段碼不存在已發行對應商品期別資訊,請重新輸入<partition>");
                        sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");
                        sb.Append(txt_down_ITEM.ClientID + "<partition>");
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");
                        sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");
                        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");//建議儲區
                        sb.Append(this.txt_down_BARCODE.ClientID);//設定焦點的欄位

                    }
                    else
                    {
                        if (dt_Return.Rows[0]["CAN_DELIVER"].ToString() == "1")
                        {
                            //期別或品號有異動時,重取庫存
                            dtStock = null;
                            s_ROOT_NO = dt_Return.Rows[0]["ROOT_NO"].ToString();
                            s_ITEM = dt_Return.Rows[0]["ITEM"].ToString();
                            s_PERIOD = dt_Return.Rows[0]["PERIOD"].ToString();

                            GetStock(s_ROOT_NO, s_ITEM, s_PERIOD);

                            sb.Append("新增或編輯模式下異動欄位[一段碼]onchange<partition>");//找到對應商品期別資訊,設定商品期別
                            sb.Append("TRUE<partition>");
                            sb.Append(s_ITEM + "<partition_Detail>" + txt_down_ITEM.ClientID + "<partition>");
                            sb.Append(dt_Return.Rows[0]["PERIOD_BARCODE"].ToString() + "<partition_Detail>" + this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");
                            sb.Append(DateTime.Parse(dt_Return.Rows[0]["RTN_DDL"].ToString()).ToString("yyyy/MM/dd") + "<partition_Detail>" + txt_down_RTN_DDL.ClientID + "<partition>");
                            sb.Append(s_PERIOD + "<partition_Detail>" + this.txt_down_PERIOD.ClientID);
                        }
                        else
                        {
                            sb.Append("新增或編輯模式下異動欄位[一段碼]onchange<partition>");
                            sb.Append("FALSE<partition>");
                            sb.Append("此一段碼對應品號" + s_ITEM + "客服區域限制不可出貨,請重新輸入<partition>");
                            sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");
                            sb.Append(txt_down_ITEM.ClientID + "<partition>");
                            sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");
                            sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");
                            sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");//建議儲區
                            sb.Append(this.txt_down_BARCODE.ClientID);//設定焦點的欄位
                        }
                    }
                    //sb.Append("新增或編輯模式下異動欄位[一段碼]onchange<partition>");
                    //sb.Append("TRUE<partition>");
                    //sb.Append(txt_down_ITEM.ClientID + "<partition>"); //異動一段碼時,清空 Item、 Period 、退貨日、儲區、逾期客訂,設定焦點到ITEM
                    //sb.Append(this.txt_down_PERIOD.ClientID + "<partition>"); //期別
                    //sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>"); //二段碼
                    //sb.Append(txt_down_RTN_DDL.ClientID + "<partition>"); //預定退貨日
                    //sb.Append(this.txt_down_RECOMMAND_LOCATION);//建議儲區

                }

                #endregion

                #region 新增或編輯模式下異動欄位[品號/品名]

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[品號/品名]")
                {
                    //s_PMA = string.Empty;//大分類
                    //s_ROOT_NO = string.Empty;//群分類
                    s_ITEM = s_Client_String[1].ToString().Trim();//品號

                    #region 從資料庫查詢資料

                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//品號
                    ParameterList.Add(s_CHAN_NO);//通路
                    ParameterList.Add(s_STORE);//門市                    
                    ParameterList.Add(Session["UID"].ToString());

                    DataTable dt_Return_1 = new DataTable();
                    BCO.QueryCRMCommon bco = new BCO.QueryCRMCommon(ConntionDB);
                    dt_Return_1 = bco.GetMaxDeiveryPeriod2(ParameterList);

                    #endregion

                    if (dt_Return_1 == null || dt_Return_1.Rows.Count == 0 ||
                        dt_Return_1.Rows[0]["PERIOD"].ToString() == string.Empty)
                    {
                        sb.Length = 0;
                        sb.Append("新增或編輯模式下異動欄位[品號/品名]<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append("查無資料<partition>");
                        sb.Append(txt_down_ITEM.ClientID);//設定焦點的欄位

                    }
                    else
                    {
                        //設定品號、期別
                        s_ITEM = s_Client_String[1];
                        s_PERIOD = dt_Return_1.Rows[0]["PERIOD"].ToString();
                        //設定群分類、大分類
                        s_PMA = dt_Return_1.Rows[0]["PMA"].ToString();//大分類
                        s_ROOT_NO = dt_Return_1.Rows[0]["ROOT_NO"].ToString();//群分類

                        if (dt_Return_1.Rows[0]["CAN_DELIVER"].ToString() == "1")
                        {
                            sb.Length = 0;
                            sb.Append("新增或編輯模式下異動欄位[品號/品名]<partition>");
                            sb.Append("TRUE<partition>");
                            sb.Append(dt_Return_1.Rows[0]["PERIOD"].ToString() + "<partition_Detail>" + this.txt_down_PERIOD.ClientID);
                        }
                        else
                        {
                            sb.Length = 0;
                            sb.Append("新增或編輯模式下異動欄位[品號/品名]<partition>");
                            sb.Append("FALSE<partition>");
                            sb.Append("客服區域限制不可出貨<partition>");
                            sb.Append(txt_down_ITEM.ClientID);//設定焦點的欄位
                        }

                        #region  OLD 取得商品主檔資訊

                        //DataTable dt_Return_2 = new DataTable();

                        //ParameterList.Clear();
                        //BCO_ITM.SQLHelper.SQLWhere(ref ParameterList, DbType.String, "MA.ITEM", s_Client_String[1], "=", "and");

                        //BCO_ITM.MaintainSKU bco_itm = new BCO_ITM.MaintainSKU(ConntionDB);
                        //dt_Return_2 = bco_itm.QuerySKUByFind_1(ParameterList);

                        //if (dt_Return_2 != null && dt_Return_2.Rows.Count != 0)
                        //{
                        //    s_PMA = dt_Return_2.Rows[0]["PMA"].ToString();//大分類

                        //    s_ROOT_NO = dt_Return_2.Rows[0]["ROOT_NO"].ToString();//群分類
                        //}
                        //else
                        //{
                        //    sb = sb.Remove(0, sb.Length);
                        //    sb.Append("新增或編輯模式下異動欄位[品號/品名]<partition>");
                        //    sb.Append("FALSE<partition>");
                        //    sb.Append("商品主檔中無對應品號<partition>");
                        //    sb.Append(txt_down_ITEM.ClientID);//設定焦點的欄位

                        //}

                        #endregion
                    }
                }

                #endregion

                #region 新增或編輯模式下異動欄位[期別]

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[期別]")
                {
                    //期別或品號有異動時,重取庫存
                    if (s_ITEM != s_Client_String[3].ToString().Trim() ||
                          s_PERIOD != s_Client_String[4].ToString().Trim()
                       )

                    { dtStock = null; }

                    s_CHAN_NO = s_Client_String[1].ToString().Trim();//通路
                    s_STORE = s_Client_String[2].ToString().Trim();//門市

                    if (s_ITEM != s_Client_String[3].ToString().Trim())
                    {

                    }
                    s_ITEM = s_Client_String[3].ToString().Trim();//品號
                    s_PERIOD = s_Client_String[4].ToString().Trim();//期別


                    #region 檢查書店是否有未結案同品項訂單


                    if (s_Client_String[8] == string.Empty)
                    {

                        #region 從資料庫查詢資料

                        ParameterList.Clear();
                        ParameterList.Add(s_Client_String[1]);//通路
                        ParameterList.Add(s_Client_String[2]);//門市

                        ParameterList.Add(s_Client_String[3]);//品號
                        ParameterList.Add(s_Client_String[4]);//期別
                        ParameterList.Add(Session["UID"].ToString());
                        ParameterList.Add(this.txt_up_CODE.Text);//訂單單號

                        DataTable dt_Return_1 = new DataTable();
                        BCO.RecordCRMOrder bco_Record = new BCO.RecordCRMOrder(ConntionDB);
                        dt_Return_1 = bco_Record.CheckOrderItemExist(ParameterList);

                        #endregion

                        if (dt_Return_1.Rows.Count > 0)
                        {
                            sb.Append("新增或編輯模式下異動欄位[期別]<partition>");
                            sb.Append("檢查書店是否有未結案同品項訂單<partition>");
                            sb.Append("該門市已存在未結案之同品項訂單於訂單標號:[" + dt_Return_1.Rows[0]["CRM_REQUEST_NO"].ToString() + "],不可新增<partition>");
                            sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//設定焦點的欄位

                            sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                            sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                            sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                            sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                            sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                            sb.Append(txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                            sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                            sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量

                            sb.Append(txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱

                            sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                            sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);//建議儲區

                            return sb.ToString();
                        }
                    }

                    #endregion

                    #region 檢查牌價是否已經正確建立

                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[2]);//門市
                    ParameterList.Add(s_Client_String[3]);//品號
                    ParameterList.Add(s_Client_String[4]);//期別
                    ParameterList.Add(DateTime.Today.ToString("yyyy/MM/dd")); // 系統日
                    ParameterList.Add(Session["UID"].ToString());
                    PIC.VDS2G.BSM.ALO.ProcessALOCommon co_process = new PIC.VDS2G.BSM.ALO.ProcessALOCommon(ConntionDB);
                    string sRes = co_process.CheckStAcceptDisPrice(ParameterList);
                    //bool bRes = co_process.CheckStAcceptDisPrice(ParameterList, null);
                    if (sRes != string.Empty)
                    {
                        sb.Append("新增或編輯模式下異動欄位[期別]<partition>");
                        sb.Append("檢查牌價是否已經正確建立<partition>");
                        sb.Append("期別" + s_PERIOD + "牌價未生效[" + sRes + "],不可新增<partition>");
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//設定焦點的欄位

                        sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                        sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                        sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                        sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                        sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                        sb.Append(txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                        sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量

                        sb.Append(txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱

                        sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);//建議儲區
                        return sb.ToString();
                    }

                    #endregion

                    #region 設定二段碼、退書截止日與逾期客訂

                    string s_down_BARCODE = string.Empty;//一段碼
                    string s_down_PERIOD_BARCODE = string.Empty;//二段碼

                    string s_down_RTN_DDL = string.Empty;//退書截止日

                    s_down_BARCODE = s_Client_String[5];
                    s_down_PERIOD_BARCODE = s_Client_String[6];
                    s_down_RTN_DDL = s_Client_String[7];
                    BCO.QueryCRMCommon bco_Common = new BCO.QueryCRMCommon(ConntionDB);

                    // 不管原來有沒有值,只要品號改變,都重新查詢
                    //if (s_Client_String[5] == string.Empty ||//一段碼
                    //    s_Client_String[6] == string.Empty ||//二段碼

                    //    s_Client_String[7] == string.Empty)//退書截止日
                    //{
                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//通路
                    ParameterList.Add(s_Client_String[3]);//品號
                    ParameterList.Add(s_Client_String[4]);//期別
                    ParameterList.Add(Session["UID"].ToString());

                    DataTable dt_Return_2 = new DataTable();

                    dt_Return_2 = bco_Common.QueryItemPeriodInfo(ParameterList);

                    if (dt_Return_2.Rows.Count > 0)//有找到資料
                    {
                        s_down_BARCODE = dt_Return_2.Rows[0]["BARCODE"].ToString();
                        s_down_PERIOD_BARCODE = dt_Return_2.Rows[0]["PERIOD_BARCODE"].ToString();
                        s_down_RTN_DDL = DateTime.Parse(dt_Return_2.Rows[0]["RTN_DDL"].ToString()).ToString("yyyy/MM/dd");

                    }
                    else//查無資料
                    {
                        sb.Append("新增或編輯模式下異動欄位[期別]<partition>");
                        sb.Append("設定二段碼、退書截止日與逾期客訂<partition>");
                        sb.Append("查無[一段碼][二段碼][退書截止日],無法新增<partition>");
                        sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//設定焦點的欄位

                        sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                        sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                        sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                        sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                        sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                        sb.Append(txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                        sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量

                        sb.Append(txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱

                        sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);//建議儲區

                        return sb.ToString();
                    }
                    //}

                    #endregion

                    #region 逾期客訂確認

                    TimeSpan time = new TimeSpan(11, 00, 00);
                    bool b_down_IS_OVERDUE = false;
                    DateTime d_Now;
                    DateTime d_RTN_DDL;

                    d_Now = DateTime.Now;
                    d_RTN_DDL = DateTime.Parse(s_down_RTN_DDL);

                    if (d_Now.DayOfWeek == DayOfWeek.Saturday ||
                        d_Now.DayOfWeek == DayOfWeek.Sunday ||
                        (d_Now.DayOfWeek == DayOfWeek.Friday && d_Now.TimeOfDay.CompareTo(time) >= 0))
                    {
                        //if (d_RTN_DDL.AddDays(-5).ToShortDateString().CompareTo(d_Now.ToShortDateString()) <= 0)
                        if (d_RTN_DDL.AddDays(-5).ToString("yyyy/MM/dd").CompareTo(d_Now.ToString("yyyy/MM/dd")) <= 0)
                        {
                            b_down_IS_OVERDUE = true;
                            b_IS_OVERDUE = true;
                        }
                    }
                    else
                    {
                        //if (d_RTN_DDL.AddDays(-2).ToShortDateString().CompareTo(d_Now.ToShortDateString()) <= 0)
                        if (d_RTN_DDL.AddDays(-2).ToString("yyyy/MM/dd").CompareTo(d_Now.ToString("yyyy/MM/dd")) <= 0)
                        {
                            b_down_IS_OVERDUE = true;
                            b_IS_OVERDUE = true;
                        }
                    }

                    //[@逾期客訂].檢查結果為True時,顯示Confirm訊息『商品已逾期,不可退貨,確定要新增?』

                    //使用者確認要新增時,可繼續編輯。

                    //使用者選擇不新增時,取消本筆明細新增。

                    if (b_down_IS_OVERDUE == true)
                    {
                        sb.Append("新增或編輯模式下異動欄位[期別]<partition>");
                        sb.Append("[逾期客訂]檢查結果為TRUE<partition>");
                        sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                        sb.Append(s_ROOT_NO + "<partition>");//群分類

                        sb.Append(s_Client_String[3] + "<partition>");//品號
                        sb.Append(s_Client_String[4] + "<partition>");//期別
                        sb.Append(s_down_BARCODE + "<partition_Detail>" + this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                        sb.Append(s_down_PERIOD_BARCODE + "<partition_Detail>" + this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                        sb.Append(s_down_RTN_DDL + "<partition_Detail>" + txt_down_RTN_DDL.ClientID);//退書截止日

                        return sb.ToString();
                    }
                    else
                    {
                        sb.Append("新增或編輯模式下異動欄位[期別]<partition>");
                        sb.Append("[逾期客訂]檢查結果為FALSE<partition>");
                        sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                        sb.Append(s_down_BARCODE + "<partition_Detail>" + this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                        sb.Append(s_down_PERIOD_BARCODE + "<partition_Detail>" + this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                        sb.Append(s_down_RTN_DDL + "<partition_Detail>" + txt_down_RTN_DDL.ClientID);//退書截止日
                    }

                    #endregion

                    #region 取得庫存資訊

                    GetStock(s_ROOT_NO, s_Client_String[3], s_Client_String[4]);

                    #endregion
                }

                #endregion

                #region 新增或編輯模式下異動欄位[期別]Confirm後

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[期別]Confirm後")
                {
                    if (dtStock != null)
                    { dtStock = null; }

                    if (s_Client_String[1] == "TRUE")//繼續編輯。
                    {
                        #region 取得商品主檔資訊

                        if (s_PMA == String.Empty || s_ROOT_NO == String.Empty)
                        {
                            DataTable dt_Return_2 = new DataTable();

                            ParameterList.Clear();
                            BCO_ITM.SQLHelper.SQLWhere(ref ParameterList, DbType.String, "MA.ITEM", slp_down_ITEM.Text, "=", "and");

                            BCO_ITM.MaintainSKU bco_itm = new BCO_ITM.MaintainSKU(ConntionDB);
                            dt_Return_2 = bco_itm.QuerySKUByFind_1(ParameterList);

                            if (dt_Return_2 != null && dt_Return_2.Rows.Count != 0)
                            {
                                s_PMA = dt_Return_2.Rows[0]["PMA"].ToString();//大分類

                                s_ROOT_NO = dt_Return_2.Rows[0]["ROOT_NO"].ToString();//群分類
                            }
                            else
                            {
                                sb = sb.Remove(0, sb.Length);
                                sb.Append("新增或編輯模式下異動欄位[期別]Confirm後<partition>");
                                sb.Append("FALSE<partition>");
                                sb.Append("商品主檔中無對應品號<partition>");
                                sb.Append(txt_down_ITEM.ClientID);//設定焦點的欄位
                            }
                        }

                        #endregion

                        #region 取得庫存資訊

                        GetStock(s_ROOT_NO, s_Client_String[3], s_Client_String[4]);
                        #endregion
                    }
                    else if (s_Client_String[1] == "FALSE")//取消本筆明細新增。
                    {
                        #region 清空靜態變數

                        dtStock = null;//異動欄位[期別]
                        s_PMA = string.Empty;//大分類(異動欄位[品號/品名])
                        s_ROOT_NO = string.Empty;//群分類(異動欄位[品號/品名])
                        s_SRC_LOCATE_TYPE = string.Empty;//建議儲區類別(異動欄位[訂貨量])

                        #endregion

                        #region 計算 dt_Detail 的筆數


                        int i_dt_Detail_Count = 0;
                        if (dt_Detail != null)
                        {
                            if (dt_Detail.GetChanges(DataRowState.Deleted) == null)
                            { i_dt_Detail_Count = dt_Detail.Rows.Count; }
                            else
                            { i_dt_Detail_Count = dt_Detail.Rows.Count - dt_Detail.GetChanges(DataRowState.Deleted).Rows.Count; }
                        }

                        #endregion

                        sb.Append("新增或編輯模式下異動欄位[期別]Confirm後<partition>");
                        sb.Append(i_dt_Detail_Count.ToString() + "<partition>");//dt_Detail的筆數
                        sb.Append(this.hid_PageStatus.ClientID + "<partition>");//hid_PageStatus
                        sb.Append(this.panel_Down_AddDetail.ClientID + "<partition>");//panel_Down_AddDetail
                        sb.Append(this.panel_Down_Button.ClientID + "<partition>");//panel_Down_Button
                        sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                        sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                        sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                        sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼
                        sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                        sb.Append(txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                        sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                        sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量
                        sb.Append(txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱
                        sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");//建議儲區
                        sb.Append(txt_up_CHAN_NO.ClientID + "<partition>");//通路
                        sb.Append(txt_up_STORE.ClientID + "<partition>");//門市
                        sb.Append(txt_up_Z_O.ClientID + "<partition>");//營業所
                        sb.Append(txt_up_BUSDATE.ClientID + "<partition>");//訂單日期
                        sb.Append(txt_up_SALE_ID.ClientID + "<partition>");//營業人員
                        sb.Append(txt_up_BUSUID.ClientID + "<partition>");//訂單維護者
                        sb.Append(((DropDownList)((ASP.sys_slp_slp_enumbase_ascx)drop_up_ORDER_TYPE).FindControl("D1")).ClientID + "<partition>");//訂單來源
                        sb.Append(this.txt_up_PO_SOURCE_NO.ClientID + "<partition>");//PO單號預設
                        sb.Append(this.txt_up_CODE.ClientID + "<partition>");//訂單編號
                        sb.Append(this.txt_up_CRM_NO.ClientID + "<partition>");//流水編號
                        sb.Append(img_up_CHAN_NO.ClientID + "<partition>");//通路img
                        sb.Append(img_up_STORE.ClientID + "<partition>");//門市img
                        sb.Append(img_up_BUSDATE.ClientID + "<partition>");//訂單日期img
                        sb.Append(img_up_SALE_ID.ClientID + "<partition>");//營業人員img
                        sb.Append(img_up_BUSUID.ClientID);//訂單維護者img
                    }
                }

                #endregion

                #region 新增或編輯模式下異動欄位[訂貨量]

                else if (s_Client_String[0] == "新增或編輯模式下異動欄位[訂貨量]")
                {

                    #region 判斷庫存是否足夠
                    if ((dtStock == null) || (dtStock.Rows.Count < 1))
                    {

                        GetStock(s_ROOT_NO, s_ITEM, s_PERIOD);
                    }
                    if (((dtStock == null) || (dtStock.Rows.Count < 1)) &&
                        (s_ROOT_NO != "2"))
                    {

                        sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append("庫存量不足,請取消新增<partition>");
                        sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//設定焦點的欄位 
                        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);

                        return sb.ToString();
                    }
                    #endregion

                    DataView dvStock = new DataView(dtStock.Copy());

                    s_SRC_LOCATE_TYPE = string.Empty;
                    int i_REQUEST_QTY = 0;//畫面上使用者輸入的"訂貨量"
                    int i_ONHD_QTY = 0;//現有庫存量
                    int i_RESERVE_QTY = 0;//配本保留數
                    int i_Final_QTY = 0;//庫存儲區可配量
                    int i_DIS_ENABLE = 0;//可配量
                    string s_SRC_LOCATE_NO = string.Empty;//VDS_CRM_ORDER_DETL.SRC_LOCATE_NO欄位

                    i_REQUEST_QTY = int.Parse(s_Client_String[1]);

                    // 2009-07-30 cyshu 修改,逾期客訂可取退貨儲區庫存
                    #region [@群分類]=1(雜誌) 時

                    //if (s_ROOT_NO == "1" && s_Client_String[2] == "false")
                    if (s_ROOT_NO == "1")
                    {
                        #region 先檢查庫存儲區可用庫存

                        dvStock.RowFilter = "LOCATETYPE = '2'";
                        dvStock.Sort = "ONHD_QTY DESC";
                        #region Old Source
                        //if (dvStock.Count > 0)
                        //{
                        //    i_ONHD_QTY = 0;
                        //    i_RESERVE_QTY = 0;
                        //    for (int i = 0; i < dvStock.Count; i++)
                        //    {
                        //        i_ONHD_QTY += int.Parse(dvStock[i]["ONHD_QTY"].ToString());
                        //        i_RESERVE_QTY += int.Parse(dvStock[i]["RESERVE_QTY"].ToString());
                        //    }
                        //}
                        #endregion

                        #region new code
                        i_ONHD_QTY = 0;
                        i_RESERVE_QTY = 0;
                        bool b_Locate_Stock = false; //庫存儲區
                        for (int i = 0; i < dvStock.Count; i++)
                        {
                            i_ONHD_QTY = int.Parse(dvStock[i]["ONHD_QTY"].ToString());
                            i_RESERVE_QTY = int.Parse(dvStock[i]["RESERVE_QTY"].ToString());
                            i_Final_QTY = i_ONHD_QTY - i_RESERVE_QTY;//庫存儲區可配量
                            if (i_Final_QTY >= i_REQUEST_QTY)
                            {
                                s_SRC_LOCATE_TYPE = "2";
                                s_SRC_LOCATE_NO = dvStock[i]["LOCATE_NO"].ToString();//現有庫存儲區
                                try
                                {
                                    i_DIS_ENABLE = int.Parse(dvStock[0]["ONHD_QTY"].ToString()) - int.Parse(dvStock[0]["RESERVE_QTY"].ToString());
                                }
                                catch { i_DIS_ENABLE = 0; }
                                b_Locate_Stock = true;
                                break;
                            }
                        }
                        if (!b_Locate_Stock) //庫存儲區庫存不足
                        {

                            if (s_PMA == "13" ||
                                s_PMA == "14" ||
                                s_PMA == "15" ||
                                s_PMA == "16")
                            {
                                #region 外雜
                                sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                                sb.Append("FALSE<partition>");
                                sb.Append("外雜D儲區庫存量不足,無法新增訂單<partition>");
                                sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//設定焦點的欄位

                                sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);

                                return sb.ToString();
                                #endregion
                            }
                            else
                            {
                                #region 檢查退貨儲區可用庫存

                                i_ONHD_QTY = 0;
                                i_RESERVE_QTY = 0;
                                i_Final_QTY = 0;
                                i_DIS_ENABLE = 0;
                                s_SRC_LOCATE_NO = string.Empty;

                                dvStock.RowFilter = "LOCATETYPE = '1'";
                                for (int i = 0; i < dvStock.Count; i++)
                                {
                                    i_ONHD_QTY += int.Parse(dvStock[i]["ONHD_QTY"].ToString());
                                    i_RESERVE_QTY += int.Parse(dvStock[i]["RESERVE_QTY"].ToString());
                                }

                                i_Final_QTY = i_ONHD_QTY - i_RESERVE_QTY;

                                if (i_Final_QTY >= i_REQUEST_QTY)
                                {
                                    s_SRC_LOCATE_TYPE = "1";//退貨儲區
                                    s_SRC_LOCATE_NO = dvStock[0]["LOCATE_NO"].ToString();//現有庫存量最大的儲區
                                    i_DIS_ENABLE = int.Parse(dvStock[0]["ONHD_QTY"].ToString()) - int.Parse(dvStock[0]["RESERVE_QTY"].ToString());
                                }
                                else
                                {
                                    sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                                    sb.Append("FALSE<partition>");
                                    sb.Append("庫存量不足,請取消新增<partition>");
                                    sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//設定焦點的欄位 
                                    sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);

                                    return sb.ToString();
                                }
                                #endregion
                            }

                        }
                        #endregion new code

                        #region old code2
                        //i_Final_QTY = i_ONHD_QTY - i_RESERVE_QTY;//庫存儲區可配量

                        //// 庫存儲區可配量 >= 訂量時,設定建議儲區 = 庫存儲區
                        //if (i_Final_QTY >= i_REQUEST_QTY)
                        //{
                        //    s_SRC_LOCATE_TYPE = "2";//庫存儲區
                        //    s_SRC_LOCATE_NO = dvStock[0]["LOCATE_NO"].ToString();//現有庫存量最大的儲區
                        //    try
                        //    {
                        //        i_DIS_ENABLE = int.Parse(dvStock[0]["ONHD_QTY"].ToString()) - int.Parse(dvStock[0]["RESERVE_QTY"].ToString());
                        //    }
                        //    catch { i_DIS_ENABLE = 0; }
                        //}
                        //else
                        //{
                        //    if (s_PMA == "13" ||
                        //        s_PMA == "14" ||
                        //        s_PMA == "15" ||
                        //        s_PMA == "16")
                        //    {
                        //        sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                        //        sb.Append("FALSE<partition>");
                        //        sb.Append("外雜D儲區庫存量不足,無法新增訂單<partition>");
                        //        sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//設定焦點的欄位

                        //        sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);

                        //        return sb.ToString();
                        //    }
                        //    else
                        //    {
                        //        #region 檢查退貨儲區可用庫存

                        //        i_ONHD_QTY = 0;
                        //        i_RESERVE_QTY = 0;
                        //        i_Final_QTY = 0;
                        //        i_DIS_ENABLE = 0;
                        //        s_SRC_LOCATE_NO = string.Empty;

                        //        dvStock.RowFilter = "LOCATETYPE = '1'";
                        //        for (int i = 0; i < dvStock.Count; i++)
                        //        {
                        //            i_ONHD_QTY += int.Parse(dvStock[i]["ONHD_QTY"].ToString());
                        //            i_RESERVE_QTY += int.Parse(dvStock[i]["RESERVE_QTY"].ToString());
                        //        }

                        //        i_Final_QTY = i_ONHD_QTY - i_RESERVE_QTY;

                        //        if (i_Final_QTY >= i_REQUEST_QTY)
                        //        {
                        //            s_SRC_LOCATE_TYPE = "1";//退貨儲區
                        //            s_SRC_LOCATE_NO = dvStock[0]["LOCATE_NO"].ToString();//現有庫存量最大的儲區
                        //            i_DIS_ENABLE = int.Parse(dvStock[0]["ONHD_QTY"].ToString()) - int.Parse(dvStock[0]["RESERVE_QTY"].ToString());
                        //        }
                        //        else
                        //        {
                        //            sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                        //            sb.Append("FALSE<partition>");
                        //            sb.Append("庫存量不足,請取消新增<partition>");
                        //            sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//設定焦點的欄位 
                        //            sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID);

                        //            return sb.ToString();
                        //        }

                        //        #endregion
                        //    }
                        //}

                        #endregion old code2
                        #endregion
                    }

                    #endregion

                    #region [@群分類]=2(圖書)

                    else
                    {
                        dvStock.RowFilter = "LOCATETYPE = '2'";
                        dvStock.Sort = "ONHD_QTY DESC";

                        if (dvStock.Count > 0)
                        {
                            // 先作預設值
                            s_SRC_LOCATE_TYPE = "2"; // 庫存儲區
                            s_SRC_LOCATE_NO = dvStock[0]["LOCATE_NO"].ToString();//現有庫存量最大的儲區

                            for (int i = 0; i < dvStock.Count; i++)
                            {
                                i_ONHD_QTY += int.Parse(dvStock[i]["ONHD_QTY"].ToString());
                                i_RESERVE_QTY += int.Parse(dvStock[i]["RESERVE_QTY"].ToString());
                            }

                            i_Final_QTY = i_ONHD_QTY - i_RESERVE_QTY;

                            if (i_Final_QTY >= i_REQUEST_QTY)
                            {
                                s_SRC_LOCATE_TYPE = "2";//庫存儲區
                                s_SRC_LOCATE_NO = dvStock[0]["LOCATE_NO"].ToString();//現有庫存量最大的儲區
                                i_DIS_ENABLE = int.Parse(dvStock[0]["ONHD_QTY"].ToString()) - int.Parse(dvStock[0]["RESERVE_QTY"].ToString());
                            }
                            else //圖書庫存不足仍可新增
                            {
                                s_SRC_LOCATE_TYPE = "2";//庫存儲區
                                s_SRC_LOCATE_NO = "D";
                                i_DIS_ENABLE = 0;
                                sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                                sb.Append("TRUE_ALERT<partition>");
                                sb.Append("圖書庫存不足,確認要新增?<partition>");
                                sb.Append(s_SRC_LOCATE_NO + "<partition_Detail>" + this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");
                                sb.Append(i_DIS_ENABLE.ToString() + "<partition_Detail>" + this.hid_DIS_ENABLE.ClientID);
                                return sb.ToString();
                            }
                        }
                        else //圖書庫存不足仍可新增
                        {
                            #region 圖書庫存不足仍可新增
                            s_SRC_LOCATE_TYPE = "2";//庫存儲區
                            s_SRC_LOCATE_NO = "D";
                            i_DIS_ENABLE = 0;
                            sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                            sb.Append("TRUE_ALERT<partition>");
                            sb.Append("圖書庫存不足,確認要新增?<partition>");
                            sb.Append(s_SRC_LOCATE_NO + "<partition_Detail>" + this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");
                            sb.Append(i_DIS_ENABLE.ToString() + "<partition_Detail>" + this.hid_DIS_ENABLE.ClientID);
                            return sb.ToString();
                            #endregion
                        }
                    }

                    #endregion

                    if (sb.ToString() == string.Empty)
                    {
                        if (i_REQUEST_QTY > 100)
                        {
                            sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                            sb.Append("TRUE_ALERT<partition>");
                            sb.Append("訂貨量大於100<partition>");
                            sb.Append(s_SRC_LOCATE_NO + "<partition_Detail>" + this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");
                            sb.Append(i_DIS_ENABLE.ToString() + "<partition_Detail>" + this.hid_DIS_ENABLE.ClientID);

                            return sb.ToString();
                        }
                        else
                        {
                            sb.Append("新增或編輯模式下異動欄位[訂貨量]<partition>");
                            sb.Append("TRUE_NO_ALERT<partition>");
                            sb.Append(s_SRC_LOCATE_NO + "<partition_Detail>" + this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");
                            sb.Append(i_DIS_ENABLE.ToString() + "<partition_Detail>" + this.hid_DIS_ENABLE.ClientID);

                            return sb.ToString();
                        }
                    }
                }

                #endregion

                #region 新增或編輯模式按下明細區[取消]鈕

                else if (s_Client_String[0] == "新增或編輯模式按下明細區[取消]鈕")
                {
                    #region 清空靜態變數

                    dtStock = null;//異動欄位[期別]
                    s_PMA = string.Empty;//大分類(異動欄位[品號/品名])
                    s_ROOT_NO = string.Empty;//群分類(異動欄位[品號/品名])
                    s_SRC_LOCATE_TYPE = string.Empty;//建議儲區類別(異動欄位[訂貨量])
                    sb.Remove(0, sb.Length);

                    #endregion

                    #region 計算 dt_Detail 的筆數

                    int i_dt_Detail_Count = 0;
                    if (dt_Detail != null)
                    {
                        if (dt_Detail.GetChanges(DataRowState.Deleted) == null)
                        { i_dt_Detail_Count = dt_Detail.Rows.Count; }
                        else
                        { i_dt_Detail_Count = dt_Detail.Rows.Count - dt_Detail.GetChanges(DataRowState.Deleted).Rows.Count; }
                    }

                    #endregion

                    sb.Append("新增或編輯模式按下明細區[取消]鈕<partition>");
                    sb.Append(i_dt_Detail_Count.ToString() + "<partition>");//dt_Detail的筆數
                    sb.Append(this.hid_PageStatus.ClientID + "<partition>");//hid_PageStatus
                    sb.Append(this.panel_Down_AddDetail.ClientID + "<partition>");//panel_Down_AddDetail
                    sb.Append(this.panel_Down_Button.ClientID + "<partition>");//panel_Down_Button
                    sb.Append(chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                    sb.Append(this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                    sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                    sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼
                    sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                    sb.Append(txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                    sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                    sb.Append(txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量
                    //sb.Append(txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱
                    sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                    sb.Append(this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");//建議儲區
                    sb.Append(txt_up_CHAN_NO.ClientID + "<partition>");//通路
                    sb.Append(txt_up_STORE.ClientID + "<partition>");//門市
                    sb.Append(txt_up_Z_O.ClientID + "<partition>");//營業所
                    sb.Append(txt_up_BUSDATE.ClientID + "<partition>");//訂單日期
                    sb.Append(txt_up_SALE_ID.ClientID + "<partition>");//營業人員
                    sb.Append(txt_up_BUSUID.ClientID + "<partition>");//訂單維護者
                    sb.Append(((DropDownList)((ASP.sys_slp_slp_enumbase_ascx)drop_up_ORDER_TYPE).FindControl("D1")).ClientID + "<partition>");//訂單來源
                    sb.Append(this.txt_up_PO_SOURCE_NO.ClientID + "<partition>");//PO單號預設
                    sb.Append(this.txt_up_CODE.ClientID + "<partition>");//訂單編號
                    sb.Append(this.txt_up_CRM_NO.ClientID + "<partition>");//流水編號
                    sb.Append(img_up_CHAN_NO.ClientID + "<partition>");//通路img
                    sb.Append(img_up_STORE.ClientID + "<partition>");//門市img
                    sb.Append(img_up_BUSDATE.ClientID + "<partition>");//訂單日期img
                    sb.Append(img_up_SALE_ID.ClientID + "<partition>");//營業人員img
                    sb.Append(img_up_BUSUID.ClientID);//訂單維護者img
                }

                #endregion

                #region 新增或編輯模式按下GridView[編輯]鈕


                else if (s_Client_String[0] == "新增或編輯模式按下GridView[編輯]鈕")
                {
                    DataRow dRow = dt_Detail.Select("ID = " + s_Client_String[1])[0];
                    string s_IS_OVERDUE;
                    //改為已擷轉仍可修改 
                    //if (dRow["TRANS_RESULT"].ToString() == "1")//已擷轉
                    //{ sb.Append("此筆訂單品項已擷轉,不可編輯或刪除\r\n"); }

                    if (dRow["STATUS"].ToString() == "75")//已結案
                    { sb.Append("此筆訂單品項已結案,不可編輯或刪除\r\n"); }

                    #region 編輯前檢查錯誤


                    if (sb.ToString() != string.Empty)
                    {
                        sb.Insert(0, "新增或編輯模式按下GridView[編輯]鈕_編輯前檢查FALSE<partition>");
                        return sb.ToString();
                    }

                    #endregion

                    #region 取得庫存
                    i_Curr_Order_Qty = 0;
                    s_ROOT_NO = dRow["ROOT_NO"].ToString(); //群分類
                    s_ITEM = dRow["ITEM"].ToString();    //品號
                    s_PERIOD = dRow["PERIOD"].ToString();  //期別
                    i_Curr_Order_Qty = (dRow["REQUEST_QTY"].ToString().Trim() == string.Empty) ? 0 : int.Parse(dRow["REQUEST_QTY"].ToString().Trim());
                    s_SRC_LOCATE_NO = dRow["SRC_LOCATE_NO"].ToString();//原儲區
                    //取得目前庫存
                    dtStock = null;
                    GetStock(s_ROOT_NO, s_ITEM, s_PERIOD);
                    //編輯模式下,可用庫存應加上原訂單需求量
                    AddStockForEditMode(s_SRC_LOCATE_NO, i_Curr_Order_Qty);
                    #endregion

                    #region 編輯前檢查正確
                    s_IS_OVERDUE = (dRow["IS_OVERDUE"].ToString() == "0") ? "false" : "true";

                    sb.Append("新增或編輯模式按下GridView[編輯]鈕_編輯前檢查TRUE<partition>");
                    sb.Append(txt_up_CHAN_NO.ClientID + "<partition>");//通路
                    sb.Append(txt_up_STORE.ClientID + "<partition>");//門市

                    sb.Append(txt_down_ITEM.ClientID + "<partition>");//品號
                    sb.Append(this.txt_down_PERIOD.ClientID + "<partition>");//期別
                    sb.Append(this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                    sb.Append(this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                    sb.Append(txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                    sb.Append(this.panel_Down_AddDetail.ClientID + "<partition>");//panel_Down_AddDetail
                    sb.Append(this.panel_Down_Button.ClientID + "<partition>");//panel_Down_Button
                    sb.Append(s_IS_OVERDUE + "<partition_Detail>" + chk_down_IS_OVERDUE.ClientID + "<partition>");//逾期客訂
                    sb.Append(dRow["PO_SOURCE_NO"].ToString() + "<partition_Detail>" + this.txt_down_PO_SOURCE_NO.ClientID + "<partition>");//PO單號
                    sb.Append(dRow["BARCODE"].ToString() + "<partition_Detail>" + this.txt_down_BARCODE.ClientID + "<partition>");//一段碼
                    sb.Append(dRow["PERIOD_BARCODE"].ToString() + "<partition_Detail>" + this.txt_down_PERIOD_BARCODE.ClientID + "<partition>");//二段碼

                    sb.Append(dRow["ITEM"].ToString() + "<partition_Detail>" + txt_down_ITEM.ClientID + "<partition>");//品號
                    sb.Append(dRow["ITEM_NAME"].ToString() + "<partition_Detail>" + txt_down_ITEM_NAME.ClientID + "<partition>");//品名
                    sb.Append(dRow["PERIOD"].ToString() + "<partition_Detail>" + this.txt_down_PERIOD.ClientID + "<partition>");//期別
                    sb.Append(dRow["REQUEST_QTY"].ToString() + "<partition_Detail>" + txt_down_REQUEST_QTY.ClientID + "<partition>");//訂貨量

                    //sb.Append(dRow["REQUEST_QTY"].ToString() + ".0000<partition_Detail>" + txt_down_REQUEST_QTY_NAME.ClientID + "<partition>");//訂貨量名稱

                    sb.Append(DateTime.Parse(dRow["RTN_DDL"].ToString()).ToString("yyyy/MM/dd") + "<partition_Detail>" + txt_down_RTN_DDL.ClientID + "<partition>");//退書截止日
                    sb.Append(dRow["SRC_LOCATE_NO"].ToString() + "<partition_Detail>" + this.txt_down_RECOMMAND_LOCATION.ClientID + "<partition>");//建議儲區
                    sb.Append(dRow["ID"].ToString() + "<partition_Detail>" + this.hid_ID.ClientID);//hid_ID

                    #endregion
                }

                #endregion

                #region 新增或編輯模式按下明細區[新增明細]鈕

                else if (s_Client_String[0] == "新增或編輯模式按下明細區[新增明細]鈕")
                {
                    #region 清空靜態變數

                    dtStock = null;//異動欄位[期別]
                    s_PMA = string.Empty;//大分類(異動欄位[品號/品名])
                    s_ROOT_NO = string.Empty;//群分類(異動欄位[品號/品名])
                    s_SRC_LOCATE_TYPE = string.Empty;//建議儲區類別(異動欄位[訂貨量])

                    #endregion
                }

                #endregion

                #region 新增模式異動欄位[流水編號]

                else if (s_Client_String[0] == "新增模式異動欄位[流水編號]")
                {
                    #region 檢查是否為有效流水編號


                    DataTable dt_Return = new DataTable();

                    ParameterList.Clear();
                    ParameterList.Add(s_Client_String[1]);//流水編號
                    ParameterList.Add(Session["UID"].ToString());
                    ParameterList.Add(DateTime.Now);

                    BCO.RecordCRMRecord bco = new BCO.RecordCRMRecord(ConntionDB);
                    dt_Return = bco.QueryCRMRecordByCode_CheckExist(ParameterList);

                    if (dt_Return.Rows.Count == 0)
                    {
                        sb.Append("新增模式異動欄位[流水編號]<partition>");
                        sb.Append("FALSE<partition>");
                        sb.Append(this.txt_up_CRM_NO.ClientID + "<partition>");
                        sb.Append("[流水編號]不為存在的有效編號");
                    }

                    #endregion
                }

                #endregion

                CallBackValue = sb.ToString();
            }
            catch (Exception ex)
            { CallBackValue = "發生例外錯誤<partition>" + ex.Message; }
        }

        return CallBackValue;
    }
        public bool UpdateDisCRMRecord(
            DataTable dtDisMain, 
            DataTable dtDisItemNew, DataTable dtDisItemOld,
            DataTable dtDisStoreNew, DataTable dtDisStoreOld,
            string strDIS_NO,
            DbTransaction RootDBT)
        {
            #region

            bool bResult = false;
            bool IsRootTranscation = false;
            ArrayList ParameterList = new ArrayList();
            DataCompare dc = new DataCompare();
            DataTable dtDisMainDiff = null;

            DataTable dtDisItemDiff = null;
            DataTable dtDisItemAdd = null;
            DataTable dtDisItemDelete = null;

            DataTable dtDisStoreDiff = null;
            DataTable dtDisStoreAdd = null;
            DataTable dtDisStoreDelete = null;

            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;


                #region 啟動交易或指定RootTranscation

                //4.1) 控制 Begin Transaction
                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                #region biz logical


                #region 4.2) 更新配本主檔並記

                if (dtDisMain != null && dtDisMain.Rows.Count > 0)
                {
                    MaintainDisMain BCODisMain = new MaintainDisMain(ConnectionDB);
                    bResult = BCODisMain.UpdateDisMainFor111(dtDisMain, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisCRMRecord.UpdateDisMainFor111:Step{0} 發生錯誤", "4.2"));
                #endregion

                #region 4.3) 更新配本商品與配本通路

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisItemNew;
                dc.CompareB = dtDisItemOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("INCLUDE_NON_EFF", "", false);
                dc.CompareData();

                dtDisItemDiff = dc.ADiff;
                dtDisItemAdd = dc.AOnly;
                dtDisItemDelete = dc.BOnly;

                #endregion

                //處理新增  
                if (dtDisItemAdd != null && dtDisItemAdd.Rows.Count > 0)
                {
                    #region
                    MaintainDisItem BCODisItem = new MaintainDisItem(ConnectionDB);
                    MaintainDisChan BCODisChan = new MaintainDisChan(ConnectionDB);

                    bResult = BCODisItem.CreateDisItem(dtDisItemAdd, strDIS_NO, DBT);
                    if (!bResult)
                        throw new Exception(string.Format("MaintainDisItem.CreateDisItem:Step{0} 發生錯誤", "4.3"));


                    foreach (DataRow dr in dtDisItemAdd.Rows)
                    {
                        ParameterList.Clear();
                        ParameterList.Add(strDIS_NO);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dtDisMain.Rows[0]["RCHAN_NO"]);
                        ParameterList.Add(DBNull.Value);
                        ParameterList.Add(dr["CREATEDATE"]);
                        ParameterList.Add(dr["CREATEUID"]);
                        ParameterList.Add(DBNull.Value);
                        ParameterList.Add(dtDisMain.Rows[0]["ST_ACCEPT_DATE"]);
                        bResult = BCODisChan.CreateDisChan(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisChan.CreateDisChan:Step{0} 發生錯誤", "4.3"));
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }

                //處理更新  
                if (dtDisItemDiff != null && dtDisItemDiff.Rows.Count > 0)
                {
                    #region
                    MaintainDisItem BCODisItem = new MaintainDisItem(ConnectionDB);
                    MaintainDisChan BCODisChan = new MaintainDisChan(ConnectionDB);

                    bResult = BCODisItem.UpdateDisItemFor111(dtDisItemDiff, DBT);

                    if (!bResult)
                        throw new Exception(string.Format("MaintainDisItem.UpdateDisItemFor111:Step{0} 發生錯誤", "4.3"));


                    foreach (DataRow dr in dtDisItemDiff.Rows)
                    {
                        ParameterList.Clear();
                        //new
                        ParameterList.Add(dr["CODE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Current]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Current]);
                        ParameterList.Add(dr["CHAN_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["PLAN_RETURN_DATE", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_TYPE", DataRowVersion.Current]);
                        ParameterList.Add(dr["PATTERN_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_BRATE", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_STO_CQTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_PRE_CQTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_TOT_QTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_TOT_OQTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_TOT_PQTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["IS_LOCK", DataRowVersion.Current]);
                        //old
                        ParameterList.Add(dr["ID", DataRowVersion.Original]);
                        ParameterList.Add(dr["CODE", DataRowVersion.Original]);
                        ParameterList.Add(dr["CREATEDATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["CREATEUID", DataRowVersion.Original]);
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Original]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Original]);
                        ParameterList.Add(dr["CHAN_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["PLAN_RETURN_DATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_TYPE", DataRowVersion.Original]);
                        ParameterList.Add(dr["PATTERN_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_BRATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_STO_CQTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_PRE_CQTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_TOT_QTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_TOT_OQTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_TOT_PQTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["IS_LOCK", DataRowVersion.Original]);

                        bResult = BCODisChan.UpdateDisChan(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisChan.UpdateDisChan:Step{0} 發生錯誤", "4.3"));
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }

                //處理刪除  
                if (dtDisItemDelete != null && dtDisItemDelete.Rows.Count > 0)
                {
                    #region
                    MaintainDisItem BCODisItem = new MaintainDisItem(ConnectionDB);

                    foreach (DataRow dr in dtDisItemDelete.Rows)
                    {
                        #region old
                        //ParameterList.Clear();
                        //ParameterList.Add(dr["ID", DataRowVersion.Original]);
                        //ParameterList.Add(dr["CODE", DataRowVersion.Original]);
                        //ParameterList.Add(dr["CREATEDATE", DataRowVersion.Original]);
                        //ParameterList.Add(dr["CREATEUID", DataRowVersion.Original]);
                        //ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Original]);
                        //ParameterList.Add(dr["UPDATEUID", DataRowVersion.Original]);
                        //ParameterList.Add(dr["DIS_NO", DataRowVersion.Original]);
                        //ParameterList.Add(dr["ITEM", DataRowVersion.Original]);
                        //ParameterList.Add(dr["PERIOD", DataRowVersion.Original]);
                        //ParameterList.Add(dtDisMain.Rows[0]["RCHAN_NO"]);
                        //ParameterList.Add(dr["MEMO", DataRowVersion.Original]);

                        //bResult = BCODisItem.DeleteDisCRMItem(ParameterList, DBT);

                        //if (!bResult)
                        //    throw new Exception(string.Format("MaintainDisItem.DeleteDisCRMItem:Step{0} 發生錯誤", "4.3"));
                        #endregion

                        //20090930 modified
                        ParameterList.Clear();
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Original]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Original]);
                        bResult = BCODisItem.DeleteDisItemFor111(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisItem.DeleteDisItemFor111:Step{0} 發生錯誤", "4.3"));
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }


                #endregion

                #region 4.4) 更新配本門市檔

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisStoreNew;
                dc.CompareB = dtDisStoreOld;
                dc.CompareField.AddCompareFieldRow("CODE", "", true);
                dc.CompareField.AddCompareFieldRow("ROUTE", "", false);
                dc.CompareField.AddCompareFieldRow("STEP", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_QTY", "", false);
                dc.CompareData();

                dtDisStoreDiff = dc.ADiff;
                dtDisStoreAdd = dc.AOnly;
                dtDisStoreDelete = dc.BOnly;

                #endregion

                //處理新增  
                if (dtDisStoreAdd != null && dtDisStoreAdd.Rows.Count > 0)
                {
                    #region
                    MaintainDisStore BCODisStore = new MaintainDisStore(ConnectionDB);

                    foreach (DataRow dr in dtDisStoreAdd.Rows)
                    {

                        ParameterList.Clear();
                        ParameterList.Add(dr["CODE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Current]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Current]);
                        ParameterList.Add(dr["CHAN_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["STORE", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_QTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["PO_SOURCE_NO", DataRowVersion.Current]);
                        ParameterList.Add(dtDisMain.Rows[0]["ST_ACCEPT_DATE"]);
                        bResult = BCODisStore.CreateDisCRMStore(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisStore.CreateDisCRMStore:Step{0} 發生錯誤", "4.4"));
                    
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }

                //處理更新  
                if (dtDisStoreDiff != null && dtDisStoreDiff.Rows.Count > 0)
                {
                    #region
                    MaintainDisStore BCODisStore = new MaintainDisStore(ConnectionDB);

                    foreach (DataRow dr in dtDisStoreDiff.Rows)
                    {

                        ParameterList.Clear();
                        ParameterList.Add(dr["CODE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Current]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Current]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Current]);
                        ParameterList.Add(dr["CHAN_NO", DataRowVersion.Current]);
                        ParameterList.Add(dr["STORE", DataRowVersion.Current]);
                        ParameterList.Add(dr["DIS_QTY", DataRowVersion.Current]);
                        ParameterList.Add(dr["PO_SOURCE_NO", DataRowVersion.Current]);
                        ParameterList.Add(dtDisMain.Rows[0]["ST_ACCEPT_DATE"]);
                        bResult = BCODisStore.CreateDisCRMStore(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisStore.CreateDisCRMStore:Step{0} 發生錯誤", "4.4"));
                    
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }

                //處理刪除  
                if (dtDisStoreDelete != null && dtDisStoreDelete.Rows.Count > 0)
                {
                    #region
                    MaintainDisStore BCODisStore = new MaintainDisStore(ConnectionDB);

                    foreach (DataRow dr in dtDisStoreDelete.Rows)
                    {
                        ParameterList.Clear();
                        ParameterList.Add(dr["ID", DataRowVersion.Original]);
                        ParameterList.Add(dr["CODE", DataRowVersion.Original]);
                        ParameterList.Add(dr["CREATEDATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["CREATEUID", DataRowVersion.Original]);
                        ParameterList.Add(dr["UPDATEDATE", DataRowVersion.Original]);
                        ParameterList.Add(dr["UPDATEUID", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["ITEM", DataRowVersion.Original]);
                        ParameterList.Add(dr["PERIOD", DataRowVersion.Original]);
                        ParameterList.Add(dr["CHAN_NO", DataRowVersion.Original]);
                        ParameterList.Add(dr["STORE", DataRowVersion.Original]);
                        ParameterList.Add(dr["DIS_QTY", DataRowVersion.Original]);
                        ParameterList.Add(dr["PO_SOURCE_NO", DataRowVersion.Original]);

                        bResult = BCODisStore.DeleteDisStore(ParameterList, DBT);

                        if (!bResult)
                            throw new Exception(string.Format("MaintainDisStore.DeleteDisStore:Step{0} 發生錯誤", "4.4"));
                    }
                }
                else
                {
                    bResult = true;
                    #endregion
                }

                #endregion


                #region  4.5) 呼叫 PKG_VDS_ALO_COMM.lf_area_qty

                if (dtDisItemOld != null && dtDisItemOld.Rows.Count > 0)
                {
                    ParameterList.Clear();
                    ParameterList.Add(strDIS_NO);
                    ParameterList.Add(dtDisItemOld.Rows[0]["ITEM"]);
                    ParameterList.Add(dtDisItemOld.Rows[0]["PERIOD"]);
                    ParameterList.Add(dtDisMain.Rows[0]["RCHAN_NO"]);
                    ParameterList.Add("X");
                    VDS_ALO_COMMON_DBO DBO_COMM = new VDS_ALO_COMMON_DBO(ref USEDB);
                    bResult = DBO_COMM.doLp_area_disqty(ParameterList, DBT);
                }

                if (!bResult)
                    throw new Exception(string.Format("{0} 發生失敗", "呼叫 PKG_VDS_ALO_COMM.lf_area_qty"));
                #endregion


                #region 4.6) 異動其他相關資料表

                if (dtDisItemOld != null && dtDisItemOld.Rows.Count > 0)
                {
                    ParameterList.Clear();
                    ParameterList.Add(strDIS_NO);
                    ParameterList.Add(dtDisItemOld.Rows[0]["ITEM"]);
                    ParameterList.Add(dtDisItemOld.Rows[0]["PERIOD"]);
                    ParameterList.Add(dtDisItemOld.Rows[0]["ROOT_NO"]);
                    ProcessALOCommon BCOProcessCommon = new ProcessALOCommon(ConnectionDB);
                    bResult = BCOProcessCommon.UpdateOtherTables(ParameterList, DBT);
                }

                if (!bResult)
                    throw new Exception(string.Format("ProcessALOCommon.UpdateOtherTables:Step{0} 發生錯誤", "4.6"));

                #endregion


                #endregion

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                #endregion

            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                bResult = false;

                throw GetNewException(ex);
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }


            return bResult;

            #endregion
        }
        /// <summary>
        /// 依條件,產生配本記錄(含配本主檔、配本商品、配本通路、配本參照設定、配本通路參照) 
        /// </summary>
        /// <param name="dtDisTmpRec">配本輔助項目設定</param>
        /// <param name="dtDisMain">新增配本主檔</param>
        /// <param name="dtDisItem">新增配本商品</param>
        /// <param name="dtDisChan">新增配本通路</param>
        /// <param name="dtDisItemRefer">新增配本參照</param>
        /// <param name="dtDisType109Tmp">109等級配本設定</param>
        /// <param name="dtDisTypeTmp">105類似配本/110定額配本設定</param>
        /// <param name="vItem">品號</param>
        /// <param name="vPeriod">期別</param>
        /// <param name="vUserID">使用者</param>
        /// <param name="RootDBT"></param>
        /// <returns></returns>
        public string CreateDisRecordFor131(
            DataTable dtDisTmpRec, DataTable dtDisMain, DataTable dtDisItem, DataTable dtDisChan,
            DataTable dtDisItemRefer, DataTable dtDisType109Tmp, DataTable dtDisTypeTmp,
            string vItem, string vPeriod, string vUserID, DbTransaction RootDBT)
        {
            #region
            string strDisNo = "";

            bool bResult = false;
            bool IsRootTranscation = false;
            ArrayList ParameterList = new ArrayList();

            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;


                #region 啟動交易或指定RootTranscation

                //4.1) 控制 Begin Transaction
                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                #region biz logical


                #region 4.2) 新增配本主檔並記錄回傳配本序號
                if (dtDisMain != null && dtDisMain.Rows.Count > 0)
                {
                    MaintainDisMain BCODisMain = new MaintainDisMain(ConnectionDB);
                    bResult = BCODisMain.CreateDisMainFor111(dtDisMain, ref strDisNo, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.CreateDisRecordFor131:Step{0} 發生錯誤", "4.2"));
                #endregion

                #region 4.3) 新增配本商品檔
                if (dtDisItem != null && dtDisItem.Rows.Count > 0)
                {
                    MaintainDisItem BCODisItem = new MaintainDisItem(ConnectionDB);
                    bResult = BCODisItem.CreateDisItemFor131(dtDisItem, strDisNo, DBT);
                }
                else
                {
                    bResult = true;
                }


                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.CreateDisRecordFor131:Step{0} 發生錯誤", "4.3"));

                #endregion

                #region 4.4) 新增配本通路檔
                if (dtDisChan != null && dtDisChan.Rows.Count > 0)
                {
                    MaintainDisChan BCODisChan = new MaintainDisChan(ConnectionDB);
                    bResult = BCODisChan.CreateDisChanFor131(dtDisChan, strDisNo, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.CreateDisRecordFor131:Step{0} 發生錯誤", "4.4"));
                #endregion

                #region 4.5) 新增配本參照設定
                if (dtDisItemRefer != null && dtDisItemRefer.Rows.Count > 0)
                {
                    MaintainDisItemRefer BCODisItemRefer = new MaintainDisItemRefer(ConnectionDB);
                    bResult = BCODisItemRefer.CreateDisItemReferForAll(dtDisItemRefer, dtDisChan, strDisNo, vItem, vPeriod, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisItemRefer.CreateDisRecordFor131:Step{0} 發生錯誤", "4.5"));
                #endregion

                #region 4.6) 維護配本輔助項目設定
                if (dtDisTmpRec != null && dtDisTmpRec.Rows.Count > 0)
                {
                    #region

                    MaintainDisAssist BCODisAssist = new MaintainDisAssist(ConnectionDB);
                    DataTable dtDisAssist = BCODisAssist.GetDisAssistMainSchema();
                    #endregion



                    //a) 判斷是否需新增特殊調整
                    if (dtDisTmpRec.Rows[0]["SP_CHANGE"] != null && dtDisTmpRec.Rows[0]["SP_CHANGE"].ToString().Trim() != "0")
                    {
                        #region 新增特殊調整(ASSIST_CODE='09')
                        DataRow dr = dtDisAssist.NewRow();
                        dr["DIS_NO"] = strDisNo;
                        dr["ITEM"] = vItem;
                        dr["PERIOD"] = vPeriod;
                        dr["CHAN_NO"] = "0";//新增時固定為0
                        dr["ASSIST_CODE"] = "09";
                        dr["OPERATOR1"] = DBNull.Value;
                        dr["OP_VALUE1"] = DBNull.Value;
                        dr["OPERATOR2"] = DBNull.Value;
                        dr["OP_VALUE2"] = DBNull.Value;
                        dr["CHANGE_TYPE"] = DBNull.Value;
                        dr["CHANGE_RATE"] = DBNull.Value;
                        dr["ORDER_CHANGE"] = DBNull.Value;
                        dr["UPDATEDATE"] = DateTime.Now;
                        dr["UPDATEUID"] = vUserID;
                        dtDisAssist.Rows.Add(dr);

                        bResult = BCODisAssist.CreateDisAssist(dtDisAssist, null, DBT);

                        #endregion
                    }

                    //b) 判斷是否需新增訂單匯入

                    if (dtDisTmpRec.Rows[0]["ORDER_CHANGE"] != null && dtDisTmpRec.Rows[0]["ORDER_CHANGE"].ToString().Trim() != "0")
                    {
                        #region 新增訂單匯入(ASSIST_CODE='10'),
                        DataRow dr = dtDisAssist.NewRow();
                        dr["DIS_NO"] = strDisNo;
                        dr["ITEM"] = vItem;
                        dr["PERIOD"] = vPeriod;
                        dr["CHAN_NO"] = "0";//新增時固定為0
                        dr["ASSIST_CODE"] = "10";
                        dr["OPERATOR1"] = DBNull.Value;
                        dr["OP_VALUE1"] = DBNull.Value;
                        dr["OPERATOR2"] = DBNull.Value;
                        dr["OP_VALUE2"] = DBNull.Value;
                        dr["CHANGE_TYPE"] = DBNull.Value;
                        dr["CHANGE_RATE"] = DBNull.Value;
                        dr["ORDER_CHANGE"] = dtDisTmpRec.Rows[0]["ORDER_CHANGE"].ToString().Trim();
                        dr["UPDATEDATE"] = DateTime.Now;
                        dr["UPDATEUID"] = vUserID;
                        dtDisAssist.Rows.Add(dr);

                        bResult = BCODisAssist.CreateDisAssist(dtDisAssist, null, DBT);

                        #endregion
                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisAssist.CreateDisAssist:Step{0} 發生錯誤", "4.6"));
                #endregion

                #region 4.7) 若dtDisItem.Rows.DIS_TYPE ='109' =>需判斷是否記錄109等級配本設定
                if (dtDisItem != null && dtDisItem.Rows.Count > 0)
                {
                    if (dtDisItem.Rows[0]["DIS_TYPE"].ToString().Trim() == "109")
                    {
                        if (dtDisType109Tmp != null && dtDisType109Tmp.Rows.Count > 0)
                        {
                            MaintainDisType109Tmp BCODisType109 = new MaintainDisType109Tmp(ConnectionDB);
                            bResult = BCODisType109.SaveDisType109Tmp(dtDisType109Tmp, strDisNo, vItem, vPeriod, DBT);
                        }

                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisType109Tmp.SaveDisType109Tmp:Step{0} 發生錯誤", "4.7"));

                #endregion

                #region 4.8) 若dtDisItem.Rows.DIS_TYPE in ('105','110') =>需判斷是否記錄105類似配本/110定額配本設定記錄
                if (dtDisItem != null && dtDisItem.Rows.Count > 0)
                {
                    if (dtDisItem.Rows[0]["DIS_TYPE"].ToString().Trim() == "105" || dtDisItem.Rows[0]["DIS_TYPE"].ToString().Trim() == "110")
                    {
                        if (dtDisTypeTmp != null && dtDisTypeTmp.Rows.Count > 0)
                        {
                            MaintainDisTypeTmp BCODisType = new MaintainDisTypeTmp(ConnectionDB);
                            bResult = BCODisType.SaveDisTypeTmp(dtDisTypeTmp, strDisNo, vItem, vPeriod, DBT);
                        }

                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisTypeTmp.SaveDisTypeTmp:Step{0} 發生錯誤", "4.8"));

                #endregion

                #region 4.9) 異動其他相關資料表
                ParameterList.Clear();
                ParameterList.Add(strDisNo);
                ParameterList.Add(vItem);
                ParameterList.Add(vPeriod);
                ParameterList.Add(vUserID);

                ProcessALOCommon BCOProcessCommon = new ProcessALOCommon(ConnectionDB);

                bResult = BCOProcessCommon.UpdateOtherTables(ParameterList, DBT);

                if (!bResult)
                    throw new Exception(string.Format("ProcessALOCommon.UpdateOtherTables:Step{0} 發生錯誤", "4.9"));

                #endregion


                #endregion

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                #endregion

            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                strDisNo = "";

                throw GetNewException(ex);
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }


            return strDisNo;
            #endregion
        }
        public bool UpdateDisRecordFor131(
            DataTable dtDisTmpRecNew, DataTable dtDisTmpRecOld,
            DataTable dtDisMainNew, DataTable dtDisMainOld,
            DataTable dtDisItemNew, DataTable dtDisItemOld,
            DataTable dtDisChanNew, DataTable dtDisChanOld,
            DataTable dtDisItemReferNew, DataTable dtDisItemReferOld,
            DataTable dtDisType109TmpNew, DataTable dtDisType109TmpOld,
            DataTable dtDisTypeTmpNew, DataTable dtDisTypeTmpOld, DataTable dtDisChanReferNEW,
            string vDisNo, string vItem, string vPeriod, string vUserID, string vStAcceptDate, DbTransaction RootDBT)
        {
            #region

            bool bResult = false;
            bool IsRootTranscation = false;
            ArrayList ParameterList = new ArrayList();
            DataCompare dc = new DataCompare();
            DataTable dtDisMainDiff = null;
            DataTable dtDisItemDiff = null;

            DataTable dtDisChanDiff = null;
            DataTable dtDisChanAdd = null;
            DataTable dtDisChanDelete = null;

            DataTable dtDisItemReferDiff = null;
            DataTable dtDisItemReferAdd = null;
            DataTable dtDisItemReferDelete = null;

            DataTable dtDisTmpRecDiff = null;
            DataTable dtDisTypeTmpDiff = null;
            DataTable dtDisTypeTmpDelete = null;

            DataTable dtDisType109TmpDiff = null;

            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;


                #region 啟動交易或指定RootTranscation

                //4.1) 控制 Begin Transaction
                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                }
                else
                {
                    DBT = RootDBT;
                }

                #endregion

                #region biz logical


                #region 4.2) 更新配本主檔並記

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisMainNew;
                dc.CompareB = dtDisMainOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ST_ACCEPT_DATE", "", false);
                dc.CompareData();
                dtDisMainDiff = dc.ADiff;
                #endregion

                if (dtDisMainDiff != null && dtDisMainDiff.Rows.Count > 0)
                {
                    MaintainDisMain BCODisMain = new MaintainDisMain(ConnectionDB);
                    bResult = BCODisMain.UpdateDisMainFor111(dtDisMainDiff, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.UpdateDisMainFor111:Step{0} 發生錯誤", "4.2"));
                #endregion

                #region 4.3) 更新配本商品檔

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisItemNew;
                dc.CompareB = dtDisItemOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("INCLUDE_NON_EFF", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_TYPE", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_PRE_QTY", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_QTY", "", false);
                dc.CompareField.AddCompareFieldRow("CHAN_TYPE", "", false);


                dc.CompareData();
                dtDisItemDiff = dc.ADiff;
                #endregion

                if (dtDisItemDiff != null && dtDisItemDiff.Rows.Count > 0)
                {
                    MaintainDisItem BCODisItem = new MaintainDisItem(ConnectionDB);
                    bResult = BCODisItem.UpdateDisItemFor111(dtDisItemDiff, DBT);
                }
                else
                {
                    bResult = true;
                }


                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.UpdateDisItemFor111:Step{0} 發生錯誤", "4.3"));

                #endregion

                #region 4.4) 更新配本通路檔

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisChanNew;
                dc.CompareB = dtDisChanOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("CHAN_NO", "", true);
                dc.CompareField.AddCompareFieldRow("DIS_TYPE", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_PRE_CQTY", "", false);
                dc.CompareField.AddCompareFieldRow("ID", "", false);

                dc.CompareData();
                dtDisChanDiff = dc.ADiff;
                dtDisChanAdd = dc.AOnly;
                dtDisChanDelete = dc.BOnly;
                #endregion

                if ((dtDisChanDiff != null && dtDisChanDiff.Rows.Count > 0) ||
                    (dtDisChanAdd != null && dtDisChanAdd.Rows.Count > 0) ||
                    (dtDisChanDelete != null && dtDisChanDelete.Rows.Count > 0))
                {
                    MaintainDisChan BCODisChan = new MaintainDisChan(ConnectionDB);
                    bResult = BCODisChan.UpdateDisChanFor131(dtDisChanDiff, dtDisChanAdd, dtDisChanDelete, vStAcceptDate, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisRecord.CreateDisRecordFor131:Step{0} 發生錯誤", "4.4"));
                #endregion

                #region 4.5) 更新配本參照設定

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisItemReferNew;
                dc.CompareB = dtDisItemReferOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("RITEM", "", true);
                dc.CompareField.AddCompareFieldRow("RPERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("REFER_RATE", "", false);
                dc.CompareField.AddCompareFieldRow("ID", "", false);

                dc.CompareData();
                dtDisItemReferDiff = dc.ADiff;
                dtDisItemReferAdd = dc.AOnly;
                dtDisItemReferDelete = dc.BOnly;
                #endregion

                if ((dtDisItemReferDiff != null && dtDisItemReferDiff.Rows.Count > 0) ||
                    (dtDisItemReferAdd != null && dtDisItemReferAdd.Rows.Count > 0) ||
                    (dtDisItemReferDelete != null && dtDisItemReferDelete.Rows.Count > 0))
                {
                    MaintainDisItemRefer BCODisItemRefer = new MaintainDisItemRefer(ConnectionDB);
                    bResult = BCODisItemRefer.UpdateItemAndChanRefer(dtDisItemReferDiff, dtDisItemReferAdd, dtDisItemReferDelete, dtDisChanOld, dtDisChanNew, dtDisItemReferNew, vItem, vPeriod, DBT);
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisItemRefer.CreateDisRecordFor131:Step{0} 發生錯誤", "4.5"));
                #endregion

                #region 4.5.2) 更新通路參照

                if (dtDisChanReferNEW != null)
                {
                    MaintainDisChanRefer BCOChanRef = new MaintainDisChanRefer(ConnectionDB);

                    bResult = BCOChanRef.UpdateDisChanReferFor(dtDisChanReferNEW,
                                                                  vDisNo,
                                                                  vItem,
                                                                  vPeriod,
                                                                  vUserID,
                                                                  DBT
                                                                  );

                    if (!bResult)
                        throw new Exception(string.Format("MaintainDisChanRefer.UpdateDisChanReferFor:Step{0} 發生錯誤", "4.5.2"));

                }
                #endregion


                #region 4.6) 維護配本輔助項目設定

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisTmpRecNew;
                dc.CompareB = dtDisTmpRecOld;
                dc.CompareField.AddCompareFieldRow("ID", "", true);
                dc.CompareField.AddCompareFieldRow("CODE", "", true);
                dc.CompareField.AddCompareFieldRow("SP_CHANGE", "", false);
                dc.CompareField.AddCompareFieldRow("ORDER_CHANGE", "", false);
                dc.CompareField.AddCompareFieldRow("DIS_TYPE", "", false);
                dc.CompareData();
                dtDisTmpRecDiff = dc.ADiff;
                #endregion

                if (dtDisTmpRecDiff != null && dtDisTmpRecDiff.Rows.Count > 0)
                {
                    #region

                    MaintainDisAssist BCODisAssist = new MaintainDisAssist(ConnectionDB);
                    DataTable dtDisAssist = BCODisAssist.GetDisAssistMainSchema();


                    ParameterList.Clear();
                    ParameterList.Add(dtDisTmpRecDiff.Rows[0]["DIS_NO"]);
                    ParameterList.Add(dtDisTmpRecDiff.Rows[0]["ITEM"]);
                    ParameterList.Add(dtDisTmpRecDiff.Rows[0]["PERIOD"]);
                    ParameterList.Add(DBNull.Value);//CHAN_NO
                    ParameterList.Add(dtDisTmpRecDiff.Rows[0]["UPDATEDATE"]);
                    ParameterList.Add(dtDisTmpRecDiff.Rows[0]["UPDATEUID"]);

                    BCODisAssist.DeleteOldDisAssist(ParameterList, DBT);
                    #endregion



                    //a) 判斷是否需更新特殊調整
                    if (dtDisTmpRecDiff.Rows[0]["SP_CHANGE"] != null && dtDisTmpRecDiff.Rows[0]["SP_CHANGE"].ToString().Trim() != "0")
                    {
                        #region 更新特殊調整(ASSIST_CODE='09')
                        DataRow dr = dtDisAssist.NewRow();
                        dr["DIS_NO"] = vDisNo;
                        dr["ITEM"] = vItem;
                        dr["PERIOD"] = vPeriod;
                        dr["CHAN_NO"] = "0";//更新時固定為0
                        dr["ASSIST_CODE"] = "09";
                        dr["OPERATOR1"] = DBNull.Value;
                        dr["OP_VALUE1"] = DBNull.Value;
                        dr["OPERATOR2"] = DBNull.Value;
                        dr["OP_VALUE2"] = DBNull.Value;
                        dr["CHANGE_TYPE"] = DBNull.Value;
                        dr["CHANGE_RATE"] = DBNull.Value;
                        dr["ORDER_CHANGE"] = DBNull.Value;
                        dr["UPDATEDATE"] = DateTime.Now;
                        dr["UPDATEUID"] = vUserID;
                        dtDisAssist.Rows.Add(dr);

                        bResult = BCODisAssist.CreateDisAssist(dtDisAssist, null, DBT);

                        #endregion
                    }

                    //b) 判斷是否需更新訂單匯入

                    if (dtDisTmpRecDiff.Rows[0]["ORDER_CHANGE"] != null && dtDisTmpRecDiff.Rows[0]["ORDER_CHANGE"].ToString().Trim() != "0")
                    {
                        #region 更新訂單匯入(ASSIST_CODE='10'),
                        DataRow dr = dtDisAssist.NewRow();
                        dr["DIS_NO"] = vDisNo;
                        dr["ITEM"] = vItem;
                        dr["PERIOD"] = vPeriod;
                        dr["CHAN_NO"] = "0";//更新時固定為0
                        dr["ASSIST_CODE"] = "10";
                        dr["OPERATOR1"] = DBNull.Value;
                        dr["OP_VALUE1"] = DBNull.Value;
                        dr["OPERATOR2"] = DBNull.Value;
                        dr["OP_VALUE2"] = DBNull.Value;
                        dr["CHANGE_TYPE"] = DBNull.Value;
                        dr["CHANGE_RATE"] = DBNull.Value;
                        dr["ORDER_CHANGE"] = dtDisTmpRecDiff.Rows[0]["ORDER_CHANGE"].ToString().Trim();
                        dr["UPDATEDATE"] = DateTime.Now;
                        dr["UPDATEUID"] = vUserID;
                        dtDisAssist.Rows.Add(dr);

                        bResult = BCODisAssist.CreateDisAssist(dtDisAssist, null, DBT);

                        #endregion
                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisAssist.CreateDisAssist:Step{0} 發生錯誤", "4.6"));
                #endregion

                #region 4.7) 若dtDisItem.Rows.DIS_TYPE ='109' =>需判斷是否記錄109等級配本設定

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisType109TmpNew;
                dc.CompareB = dtDisType109TmpOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("RANK_CODE", "", true);
                dc.CompareField.AddCompareFieldRow("RANK_LEVEL", "", true);
                //dc.CompareField.AddCompareFieldRow("VENDOR", "", true);
                dc.CompareField.AddCompareFieldRow("PATTERN_NO", "", true);
                dc.CompareField.AddCompareFieldRow("RANK_DIS_QTY", "", false);

                dc.CompareData();
                dtDisType109TmpDiff = dc.ADiff;
                #endregion

                if (dtDisTmpRecNew != null && dtDisTmpRecNew.Rows.Count > 0)
                {
                    if (dtDisTmpRecNew.Rows[0]["DIS_TYPE"].ToString().Trim() == "109")
                    {
                        //if (dtDisType109TmpDiff != null && dtDisType109TmpDiff.Rows.Count > 0)
                        //{
                        //    MaintainDisType109Tmp BCODisType109 = new MaintainDisType109Tmp(ConnectionDB);
                        //    bResult = BCODisType109.SaveDisType109Tmp(dtDisType109TmpDiff, vDisNo, vItem, vPeriod, DBT);
                        //}

                        if (dtDisType109TmpNew != null && dtDisType109TmpNew.Rows.Count > 0)//20090811 added
                        {
                            MaintainDisType109Tmp BCODisType109 = new MaintainDisType109Tmp(ConnectionDB);
                            bResult = BCODisType109.SaveDisType109Tmp(dtDisType109TmpNew, vDisNo, vItem, vPeriod, DBT);
                        }
                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisType109Tmp.SaveDisType109Tmp:Step{0} 發生錯誤", "4.7"));

                #endregion

                #region 4.8) 若dtDisItem.Rows.DIS_TYPE in ('105','110') =>需判斷是否記錄105類似配本/110定額配本設定記錄

                #region 比較新舊值
                dc.Clear();
                dc.CompareA = dtDisTypeTmpNew;
                dc.CompareB = dtDisTypeTmpOld;
                dc.CompareField.AddCompareFieldRow("DIS_NO", "", true);
                dc.CompareField.AddCompareFieldRow("ITEM", "", true);
                dc.CompareField.AddCompareFieldRow("PERIOD", "", true);
                dc.CompareField.AddCompareFieldRow("DIS_TYPE", "", true);
                dc.CompareField.AddCompareFieldRow("DIS_QTY", "", false);

                dc.CompareData();
                dtDisTypeTmpDiff = dc.ADiff;
                dtDisTypeTmpDelete = dc.BOnly;

                #endregion

                if (dtDisTmpRecNew != null && dtDisTmpRecNew.Rows.Count > 0)
                {
                    if (dtDisTmpRecNew.Rows[0]["DIS_TYPE"].ToString().Trim() == "105" || dtDisTmpRecNew.Rows[0]["DIS_TYPE"].ToString().Trim() == "110")
                    {
                        //if (dtDisTypeTmpDiff != null && dtDisTypeTmpDiff.Rows.Count > 0)
                        //{
                        //    MaintainDisTypeTmp BCODisType = new MaintainDisTypeTmp(ConnectionDB);
                        //    bResult = BCODisType.SaveDisTypeTmp(dtDisTypeTmpDiff, vDisNo, vItem, vPeriod, DBT);
                        //}

                        if (dtDisTypeTmpNew != null && dtDisTypeTmpNew.Rows.Count > 0)//20090812 added
                        {
                            MaintainDisTypeTmp BCODisType = new MaintainDisTypeTmp(ConnectionDB);
                            bResult = BCODisType.SaveDisTypeTmp(dtDisTypeTmpNew, vDisNo, vItem, vPeriod, DBT);
                        }
                    }
                    else
                    {
                        if (dtDisTypeTmpDelete != null && dtDisTypeTmpDelete.Rows.Count > 0)//20090820 added
                        {
                            MaintainDisTypeTmp BCODisType = new MaintainDisTypeTmp(ConnectionDB);
                            bResult = BCODisType.DeleteDisTypeTmp(vDisNo, vItem, vPeriod, DBT);
                        }

                    }
                }
                else
                {
                    bResult = true;
                }

                if (!bResult)
                    throw new Exception(string.Format("MaintainDisTypeTmp.SaveDisTypeTmp:Step{0} 發生錯誤", "4.8"));

                #endregion

                #region 4.9) 異動其他相關資料表
                ParameterList.Clear();
                ParameterList.Add(vDisNo);
                ParameterList.Add(vItem);
                ParameterList.Add(vPeriod);
                ParameterList.Add(vUserID);

                ProcessALOCommon BCOProcessCommon = new ProcessALOCommon(ConnectionDB);

                bResult = BCOProcessCommon.UpdateOtherTables(ParameterList, DBT);

                if (!bResult)
                    throw new Exception(string.Format("ProcessALOCommon.UpdateOtherTables:Step{0} 發生錯誤", "4.9"));

                #endregion


                #endregion

                #region 交易成功

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }

                #endregion

            }
            catch (Exception ex)
            {
                #region 交易失敗

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation失敗
                    DBT.Rollback();
                }

                #endregion

                bResult = false;

                throw GetNewException(ex);
            }
            finally
            {
                #region 判斷是否關閉交易連線

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation,關閉連線
                    if (Conn.State == ConnectionState.Connecting)
                    {
                        Conn.Close();
                    }
                }

                #endregion

            }


            return bResult;

            #endregion
        }
Esempio n. 5
0
    /// <summary>
    /// 期別
    /// </summary>
    /// <param name="strChan"></param>
    /// <param name="strStore"></param>
    /// <param name="strItem"></param>
    /// <param name="strPeriod"></param>
    /// <param name="strBarcode"></param>
    /// <param name="strPeriodBarcode"></param>
    /// <param name="strRtnDdl"></param>
    /// <param name="strID"></param>
    /// <param name="strCode"></param>
    /// <param name="strUserID"></param>
    /// <param name="strPageTimeStamp"></param>
    /// <returns></returns>
    private string GetValueByPageMethod_PERIOD(string strChan, string strStore, string strItem, string strPeriod, string strBarcode, string strPeriodBarcode, string strRtnDdl, string strID, string strCode, string strUserID, string strPageTimeStamp)
    {
        #region

        string strRtn = "", strTemp1 = "", strTemp2 = "", strTemp3 = "", strTemp4 = "";

        try
        {
            //期別或品號有異動時,重取庫存
            if (Session[string.Format("CRM041_s_ITEM_{0}", strPageTimeStamp)].ToString() != strItem || Session[string.Format("CRM041_s_PERIOD_{0}", strPageTimeStamp)].ToString() != strPeriod)
            {
                Session[string.Format("CRM041_dtStock_{0}", strPageTimeStamp)] = null;
            }

            //s_CHAN_NO
            //s_STORE
            //s_ITEM
            //s_PERIOD
            Session[string.Format("CRM041_s_CHAN_NO_{0}", strPageTimeStamp)] = strChan;//通路
            Session[string.Format("CRM041_s_STORE_{0}", strPageTimeStamp)] = strStore;//門市
            Session[string.Format("CRM041_s_ITEM_{0}", strPageTimeStamp)] = strItem;//品號
            Session[string.Format("CRM041_s_PERIOD_{0}", strPageTimeStamp)] = strPeriod;//期別

            #region CHECK-1:檢查書店是否有未結案同品項訂單


            if (strID == string.Empty)
            {
                #region 從資料庫查詢資料
                ArrayList ParameterList = new ArrayList();

                ParameterList.Clear();
                ParameterList.Add(strChan);//通路
                ParameterList.Add(strStore);//門市
                ParameterList.Add(strItem);//品號
                ParameterList.Add(strPeriod);//期別
                ParameterList.Add(strUserID);
                ParameterList.Add(strCode);//訂單單號

                DataTable dt_Return_1 = new DataTable();
                BCO_CRM.RecordCRMOrder BCO1 = new BCO_CRM.RecordCRMOrder(ConntionDB);
                dt_Return_1 = BCO1.CheckOrderItemExist(ParameterList);
                BCO1.CloseConnection();
                System.Text.StringBuilder sb = new System.Text.StringBuilder();

                #endregion

                if (dt_Return_1.Rows.Count > 0)
                {
                    strTemp1 = string.Format("該門市已存在未結案之同品項訂單於訂單標號:[{0}],不可新增", dt_Return_1.Rows[0]["CRM_REQUEST_NO"].ToString());
                }
            }

            #endregion

            if (strTemp1 == "")
            {
                #region CHECK-2:檢查牌價是否已經正確建立

                ParameterList.Clear();
                ParameterList.Add(strStore);//門市
                ParameterList.Add(strItem);//品號
                ParameterList.Add(strPeriod);//期別
                ParameterList.Add(DateTime.Now.ToString("yyyy/MM/dd")); // 系統日
                ParameterList.Add(strUserID);
                BCO_ALO.ProcessALOCommon BCO2 = new BCO_ALO.ProcessALOCommon(ConntionDB);
                string sRes = BCO2.CheckStAcceptDisPrice(ParameterList);
                BCO2.CloseConnection();

                if (sRes != string.Empty)
                {
                    strTemp2 = string.Format("期別:[{0}],牌價未生效[{1}],不可新增", strPeriod, sRes);
                }

                #endregion

                if (strTemp2 == "")
                {
                    #region CHECK-3:設定二段碼、退書截止日與逾期客訂

                    string s_down_BARCODE = string.Empty;//一段碼
                    string s_down_PERIOD_BARCODE = string.Empty;//二段碼
                    string s_down_RTN_DDL = string.Empty;//退書截止日

                    s_down_BARCODE = strBarcode;
                    s_down_PERIOD_BARCODE = strPeriodBarcode;
                    s_down_RTN_DDL = strRtnDdl;

                    // 不管原來有沒有值,只要品號改變,都重新查詢
                    ParameterList.Clear();
                    ParameterList.Add(strChan);//通路
                    ParameterList.Add(strItem);//品號
                    ParameterList.Add(strPeriod);//期別
                    ParameterList.Add(strUserID);

                    DataTable dt_Return_2 = new DataTable();
                    BCO_CRM.QueryCRMCommon BCO3 = new BCO_CRM.QueryCRMCommon(ConntionDB);
                    dt_Return_2 = BCO3.QueryItemPeriodInfo(ParameterList);
                    BCO3.CloseConnection();

                    if (dt_Return_2.Rows.Count > 0)//有找到資料
                    {
                        s_down_BARCODE = dt_Return_2.Rows[0]["BARCODE"].ToString();
                        s_down_PERIOD_BARCODE = dt_Return_2.Rows[0]["PERIOD_BARCODE"].ToString();
                        s_down_RTN_DDL = DateTime.Parse(dt_Return_2.Rows[0]["RTN_DDL"].ToString()).ToString("yyyy/MM/dd");
                    }
                    else//查無資料
                    {
                        strTemp3 = string.Format("查無[一段碼][二段碼][退書截止日],無法新增");
                    }

                    #endregion

                    if (strTemp3 == "")
                    {
                        #region CHECK-4:逾期客訂確認

                        TimeSpan time = new TimeSpan(11, 00, 00);
                        bool b_down_IS_OVERDUE = false;
                        //20140515 家容提出移除逾期判斷
                        //DateTime d_Now;
                        //DateTime d_RTN_DDL;

                        //d_Now = DateTime.Now;
                        //d_RTN_DDL = DateTime.Parse(s_down_RTN_DDL);

                        //if (d_Now.DayOfWeek == DayOfWeek.Saturday || d_Now.DayOfWeek == DayOfWeek.Sunday ||
                        //    (d_Now.DayOfWeek == DayOfWeek.Friday && d_Now.TimeOfDay.CompareTo(time) >= 0))
                        //{
                        //    if (d_RTN_DDL.AddDays(-5).ToString("yyyy/MM/dd").CompareTo(d_Now.ToString("yyyy/MM/dd")) <= 0)
                        //    {
                        //        b_down_IS_OVERDUE = true;
                        //        b_IS_OVERDUE = true;
                        //    }
                        //}
                        //else
                        //{
                        //    if (d_RTN_DDL.AddDays(-2).ToString("yyyy/MM/dd").CompareTo(d_Now.ToString("yyyy/MM/dd")) <= 0)
                        //    {
                        //        b_down_IS_OVERDUE = true;
                        //        b_IS_OVERDUE = true;
                        //    }
                        //}

                        //[@逾期客訂].檢查結果為True時,顯示Confirm訊息『商品已逾期,不可退貨,確定要新增?』
                        //使用者確認要新增時,可繼續編輯。
                        //使用者選擇不新增時,取消本筆明細新增。

                        if (b_down_IS_OVERDUE == true)
                        {

                            strTemp4 = string.Format("TRUE-{0}-{1}-{2}-{3}-{4}-{5}",
                                Session[string.Format("CRM041_s_ROOT_NO_{0}", strPageTimeStamp)].ToString(), strItem, strPeriod, s_down_BARCODE, s_down_PERIOD_BARCODE, s_down_RTN_DDL);
                        }
                        else
                        {
                            strTemp4 = string.Format("FALSE-{0}-{1}-{2}-{3}-{4}-{5}",
                                Session[string.Format("CRM041_s_ROOT_NO_{0}", strPageTimeStamp)].ToString(), strItem, strPeriod, s_down_BARCODE, s_down_PERIOD_BARCODE, s_down_RTN_DDL);
                        }

                        #endregion

                        if (strTemp4.IndexOf("FALSE") != -1)
                        {
                            #region 取得庫存資訊

                            GetStockByPageMethod(Session[string.Format("CRM041_s_ROOT_NO_{0}", strPageTimeStamp)].ToString(), strItem, strPeriod, strUserID, strPageTimeStamp);

                            #endregion
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }

        return strRtn = string.Format("{0};{1};{2};{3}", strTemp1, strTemp2, strTemp3, strTemp4);
        #endregion
    }