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
        }
        public bool UpdateItemAndChanRefer(DataTable dtDisItemReferDiff, DataTable dtDisItemReferAdd, DataTable dtDisItemReferDelete,
            DataTable dtDisChanOld, DataTable dtDisChanNew, DataTable dtDisItemReferNew, string vItem, string vPeriod, DbTransaction RootDBT)
        {
            bool bResult = false;
            bool IsRootTranscation = false;

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

                #region 啟動交易或指定RootTranscation

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

                #endregion

                MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB);
                DataTable dtAvailableChan = null;
                ArrayList ParameterList = new ArrayList();
                ArrayList ParameterList2 = new ArrayList();

                //  處理刪除:dtDel
                if (dtDisItemReferDelete != null && dtDisItemReferDelete.Rows.Count > 0)
                {
                    #region
                    foreach (DataRow dr in dtDisItemReferDelete.Rows)
                    {
                        //a)呼叫MaintainDisItemRefer.DeleteDisItemRefer();
                        ParameterList.Clear();
                        ParameterList.Add(dr["ID"]);
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        ParameterList.Add(dr["REFER_RATE"]);
                        ParameterList.Add(dr["UPDATEDATE"]);
                        ParameterList.Add(dr["UPDATEUID"]);
                        bResult = DeleteDisItemRefer(ParameterList, DBT);

                        //b)呼叫MaintainDisChanRefer.DeleteChanReferByReferItem();
                        if (dtDisChanOld != null)
                        {
                            foreach (DataRow dr2 in dtDisChanOld.Rows)
                            {
                                ParameterList2.Clear();
                                ParameterList2.Add(dr2["ID"]);//此處傳的ID無法使用,因為傳的是VDS_ALO_DIS_CHAN的,需要的是VDS_ALO_DIS_CHAN_REFER
                                ParameterList2.Add(dr["DIS_NO"]);
                                ParameterList2.Add(dr["ITEM"]);
                                ParameterList2.Add(dr2["CHAN_NO"]);
                                ParameterList2.Add(dr["PERIOD"]);
                                ParameterList2.Add(dr["RITEM"]);
                                ParameterList2.Add(dr["RPERIOD"]);
                                ParameterList2.Add(dr["REFER_RATE"]);
                                ParameterList2.Add(dr2["UPDATEDATE"]);
                                ParameterList2.Add(dr2["UPDATEUID"]);
                                bResult = BCODisChanRefer.DeleteChanReferByReferItem(ParameterList2, DBT);
                            }
                        }

                    }
                    #endregion
                }

                //  處理新增:dtAdd
                if (dtDisItemReferAdd != null && dtDisItemReferAdd.Rows.Count > 0)
                {
                    #region
                    if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0)
                    {
                        MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                        ParameterList.Clear();
                        ParameterList.Add(vItem);
                        ParameterList.Add(vPeriod);
                        dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                    }
                    else
                    {
                        dtAvailableChan = dtDisChanNew;
                    }

                    for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++)
                    {
                        //20090804 added:先刪除
                        ParameterList.Clear();
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]);
                        bResult = BCODisChanRefer.DeleteOldChanRefer(ParameterList, DBT);
                        break;
                    }


                    for (Int32 i = 0; i <= dtDisItemReferAdd.Rows.Count - 1; i++)
                    {
                        //1.逐筆建立商品參照檔資訊
                        ParameterList.Clear();
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["DIS_NO"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["ITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["PERIOD"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["RITEM"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["RPERIOD"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["REFER_RATE"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEDATE"]);
                        ParameterList.Add(dtDisItemReferAdd.Rows[i]["CREATEUID"]);

                        bResult = CreateDisItemReferFor111(ParameterList, DBT);
                    }

                    for (Int32 i = 0; i <= dtDisItemReferNew.Rows.Count - 1; i++)//因為在此之前會做全部刪除的動作,但dtDisItemReferAdd不會記錄未變更的筆數,所以傳入dtDisItemReferNew
                    {
                        //2.建立品項通路參照資訊
                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {
                            ParameterList2.Clear();
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["DIS_NO"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["ITEM"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["RITEM"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["RPERIOD"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["REFER_RATE"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEDATE"]);
                            ParameterList2.Add(dtDisItemReferNew.Rows[i]["CREATEUID"]);

                            bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT);
                        }
                    }
                    #endregion
                }

                //  處理更新:dtUpdate
                if (dtDisItemReferDiff != null && dtDisItemReferDiff.Rows.Count > 0)
                {
                    #region
                    foreach (DataRow dr in dtDisItemReferDiff.Rows)
                    {
                        //1.逐筆更新商品參照檔資訊
                        ParameterList.Clear();

                        //old
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        //new
                        ParameterList.Add(dr["DIS_NO"]);
                        ParameterList.Add(dr["ITEM"]);
                        ParameterList.Add(dr["PERIOD"]);
                        ParameterList.Add(dr["RITEM"]);
                        ParameterList.Add(dr["RPERIOD"]);
                        ParameterList.Add(dr["REFER_RATE"]);
                        ParameterList.Add(dr["UPDATEDATE"]);
                        ParameterList.Add(dr["UPDATEUID"]);

                        bResult = UpdateDisItemReferFor111_2(ParameterList, DBT);

                        if (dtDisChanNew == null || dtDisChanNew.Rows.Count <= 0)
                        {
                            MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                            ParameterList.Clear();
                            ParameterList.Add(vItem);
                            ParameterList.Add(vPeriod);
                            dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                        }
                        else
                        {
                            dtAvailableChan = dtDisChanNew;
                        }

                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {
                            //2.更新品項通路參照資訊
                            ParameterList2.Clear();
                            //old                            
                            ParameterList2.Add(dr["DIS_NO"]);
                            ParameterList2.Add(dr["ITEM"]);
                            ParameterList2.Add(dr["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dr["RITEM"]);
                            ParameterList2.Add(dr["RPERIOD"]);
                            //new
                            ParameterList2.Add(dr["DIS_NO"]);
                            ParameterList2.Add(dr["ITEM"]);
                            ParameterList2.Add(dr["PERIOD"]);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dr["RITEM"]);
                            ParameterList2.Add(dr["RPERIOD"]);
                            ParameterList2.Add(dr["REFER_RATE"]);
                            ParameterList2.Add(dr["UPDATEDATE"]);
                            ParameterList2.Add(dr["UPDATEUID"]);
                            bResult = BCODisChanRefer.UpdateDisChanRefer2(ParameterList2, DBT);
                        }

                    }
                    #endregion
                }


                #region 交易成功

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

                bResult = true;
                #endregion
            }
            catch (Exception ex)
            {
                #region 交易失敗

                bResult = false;

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

                #endregion

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

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

                #endregion

            }

            return bResult;
        }
        public bool CreateItemAndChanRefer(DataTable dtDisItemRefer, DataTable dtDisChan, string vDisNo, string vItem, string vPeriod, DbTransaction RootDBT)
        {
            #region
            bool bResult = false;
            bool IsRootTranscation = false;

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


                #region 啟動交易或指定RootTranscation

                if (IsRootTranscation)
                {
                    //獨立呼叫啟動Transcation
                    Conn = USEDB.CreateConnection();
                    Conn.Open();
                    DBT = Conn.BeginTransaction();
                    System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Open Connetction:{2} ",
                                                                     System.Web.HttpContext.Current.Session["UID"].ToString(),
                                                                      DateTime.Now.ToString(),
                                                                      DBT.GetHashCode().ToString())
                                                              );

                }
                else
                {
                    DBT = RootDBT;
                    System.Web.HttpContext.Current.Trace.Warn(string.Format("使用者:{0} 於{1}.CreateItemAndChanRefer.Used Old Connetction:{2} ",
                                                                     System.Web.HttpContext.Current.Session["UID"].ToString(),
                                                                      DateTime.Now.ToString(),
                                                                      DBT.GetHashCode().ToString())
                                                              );

                }

                #endregion

                DataTable dtAvailableChan = null;
                ArrayList ParameterList = new ArrayList();
                ArrayList ParameterList2 = new ArrayList();


                //4.1) 檢查目前配本通路暫存檔是否有值,無值則選擇所有可配通路 
                if (dtDisChan == null || dtDisChan.Rows.Count <= 0)
                {
                    MaintainDisRecord BCODisRecord = new MaintainDisRecord(ConnectionDB);
                    ParameterList.Clear();
                    ParameterList.Add(vItem);
                    ParameterList.Add(vPeriod);
                    dtAvailableChan = BCODisRecord.QueryForSelectDisChan(ParameterList);
                }
                else
                {
                    dtAvailableChan = dtDisChan;
                }

                //4.2) 處理新增

                if (dtDisItemRefer != null && dtDisItemRefer.Rows.Count > 0)
                {
                    MaintainDisChanRefer BCODisChanRefer = new MaintainDisChanRefer(ConnectionDB);


                    for (Int32 i = 0; i <= dtDisItemRefer.Rows.Count - 1; i++)
                    {
                        //1.逐筆建立商品參照檔資訊
                        ParameterList.Clear();
                        ParameterList.Add(vDisNo);
                        ParameterList.Add(vItem);
                        ParameterList.Add(vPeriod);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["RITEM"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["RPERIOD"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]);
                        ParameterList.Add(dtDisItemRefer.Rows[i]["CREATEUID"]);

                        bResult = CreateDisItemReferFor111(ParameterList, DBT);

                        //2.建立品項通路參照資訊

                        for (Int32 k = 0; k <= dtAvailableChan.Rows.Count - 1; k++)
                        {

                            ParameterList2.Clear();
                            ParameterList2.Add(vDisNo);
                            ParameterList2.Add(vItem);
                            ParameterList2.Add(vPeriod);
                            ParameterList2.Add(dtAvailableChan.Rows[k]["CHAN_NO"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["RITEM"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["RPERIOD"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["REFER_RATE"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEDATE"]);
                            ParameterList2.Add(dtDisItemRefer.Rows[i]["CREATEUID"]);

                            bResult = BCODisChanRefer.CreateDisChanRefer(ParameterList2, DBT);
                        }
                    }
                }

                #region 交易成功

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

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

                bResult = false;

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

                #endregion

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

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

                #endregion

            }

            return bResult;
            #endregion
        }
    /// <summary>
    /// 抓取目前參照商品資料
    /// </summary>
    private void GetDisChanRefer()
    {
        #region
        string OLDDataSessionIDAndName = "ALO11OLDStoreChainReferData_" + PrePageTimeStamp;

        DataTable ProcessDt;
        int ReferRate_SumValue = 0;

        if (Session[OLDDataSessionIDAndName] == null || (Session[OLDDataSessionIDAndName] != null  &&  CheckChanIsNotExisted(CHANNO)))
        {
            #region 無Session LOAD DB

            FirstTimeHidden.Value = "1";

            ALOModel.MaintainDisChanRefer MDCR = new ALOModel.MaintainDisChanRefer(ConnectionDB);

            #region 輸入變數

            ArrayList ParameterList = new ArrayList();//20091113

            ParameterList.Clear();
            //配本序號
            ParameterList.Add(DISNO);
            //商品品號
            ParameterList.Add(ITEM);
            //期別
            ParameterList.Add(PERIOD);
            //通路
            ParameterList.Add(CHANNO);

            #endregion

            DataTable Dt = MDCR.QueryDisChanReferFor111(ParameterList);

            // ProcessDt = dtSetChainRef;            
            ProcessDt = dtSetChainRef.Clone();  
            for (int x = 0; x < Dt.Rows.Count; x++)
            {
                DataRow Dr = ProcessDt.NewRow();

                Dr["CHANNO"] = CHANNO;
                Dr["ITEM"] = Dt.Rows[x]["RITEM"].ToString();
                Dr["ITEM_NAME"] = Dt.Rows[x]["ITEM_NAME"].ToString();
                Dr["PERIOD"] = Dt.Rows[x]["RPERIOD"].ToString();
                Dr["ACCEPT_QTY"] = Dt.Rows[x]["ST_ACCEPT_QTY"].ToString();
                Dr["BACK_QTY"] = Dt.Rows[x]["BACKWARD_QTY"].ToString();
                Dr["REAL_REVENU"] = Dt.Rows[x]["REAL_REVENU"].ToString();
                Dr["REAL_SALERATE"] = Dt.Rows[x]["REAL_SALERATE"].ToString();
                Dr["REFER_RATE"] = Dt.Rows[x]["REFER_RATE"].ToString();
                Dr["N_EXISTINDB"] = Dt.Rows[x]["N_EXISTINDB"].ToString();

                //參照比率加總
                ReferRate_SumValue += int.Parse(Dt.Rows[x]["REFER_RATE"].ToString());

                ProcessDt.Rows.Add(Dr);
            }

            //加入舊的SESSION
            Session[OLDDataSessionIDAndName] = ProcessDt.Copy();

            #endregion
        }
        else
        {
            #region 有Session LOAD Session(無新資料LOAD舊的否則LOAD新資料)

            string NEWDataSessionIDAndName = "ALO11NEWStoreChainReferData_" + PrePageTimeStamp;

            if (Session[NEWDataSessionIDAndName] == null) //無新資料
            {
                DataTable Dt = (DataTable)Session[OLDDataSessionIDAndName];
                ProcessDt = Dt.Clone();

                DataRow[] Drs = Dt.Select("CHANNO = '" + CHANNO + "'");

                for (int x = 0; x < Drs.Length; x++)
                {
                    DataRow Dr = ProcessDt.NewRow();

                    Dr["CHANNO"] = Drs[x]["CHANNO"].ToString();
                    Dr["ITEM"] = Drs[x]["ITEM"].ToString();
                    Dr["ITEM_NAME"] = Drs[x]["ITEM_NAME"].ToString();
                    Dr["PERIOD"] = Drs[x]["PERIOD"].ToString();
                    Dr["ACCEPT_QTY"] = Drs[x]["ACCEPT_QTY"].ToString();
                    Dr["BACK_QTY"] = Drs[x]["BACK_QTY"].ToString();
                    Dr["REAL_REVENU"] = Drs[x]["REAL_REVENU"].ToString();
                    Dr["REAL_SALERATE"] = Drs[x]["REAL_SALERATE"].ToString();
                    Dr["REFER_RATE"] = Drs[x]["REFER_RATE"].ToString();
                    Dr["N_EXISTINDB"] = Drs[x]["N_EXISTINDB"].ToString();

                    ProcessDt.Rows.Add(Dr);

                    //參照比率加總
                    ReferRate_SumValue += int.Parse(Drs[x]["REFER_RATE"].ToString());
                }
            }
            else
            {
                DataTable Dt = (DataTable)Session[NEWDataSessionIDAndName];
                ProcessDt = Dt.Clone();

                DataRow[] Drs = Dt.Select("CHANNO = '" + CHANNO + "'");

                for (int x = 0; x < Drs.Length; x++)
                {
                    DataRow Dr = ProcessDt.NewRow();

                    Dr["CHANNO"] = Drs[x]["CHANNO"].ToString();
                    Dr["ITEM"] = Drs[x]["ITEM"].ToString();
                    Dr["ITEM_NAME"] = Drs[x]["ITEM_NAME"].ToString();
                    Dr["PERIOD"] = Drs[x]["PERIOD"].ToString();
                    Dr["ACCEPT_QTY"] = Drs[x]["ACCEPT_QTY"].ToString();
                    Dr["BACK_QTY"] = Drs[x]["BACK_QTY"].ToString();
                    Dr["REAL_REVENU"] = Drs[x]["REAL_REVENU"].ToString();
                    Dr["REAL_SALERATE"] = Drs[x]["REAL_SALERATE"].ToString();
                    Dr["REFER_RATE"] = Drs[x]["REFER_RATE"].ToString();
                    Dr["N_EXISTINDB"] = Drs[x]["N_EXISTINDB"].ToString();

                    ProcessDt.Rows.Add(Dr);

                    //參照比率加總
                    ReferRate_SumValue += int.Parse(Drs[x]["REFER_RATE"].ToString());
                }
            }
            #endregion
        }
        
        dtSetChainRef = ProcessDt;
        GVSumHidden.Value = ReferRate_SumValue.ToString();

        gv_Result.DataSource = ProcessDt;
        gv_Result.DataBind();
        #endregion
    }
        /// <summary>
        /// 更新通路參照
        /// </summary>
        /// <param name="dtDisChanReferNew">新的通路參照</param>
        /// <param name="vDisNo">配本序號</param>
        /// <param name="vItem">商品</param>
        /// <param name="vPeriod">期別</param>
        /// <param name="UpdateUser">更新使用者</param>
        /// <param name="RootDBT">交易</param>
        /// <returns>回傳成功失敗</returns>
        public bool UpdateDisChanReferFor(DataTable dtDisChanReferNew,
                                          string vDisNo, 
                                          string vItem, 
                                          string vPeriod,
                                          string UpdateUser,
                                          DbTransaction RootDBT
                                          )
        {
            bool IsRootTranscation = false;
            bool bResult = false;
            ArrayList ProcParameterList = new ArrayList();
            string v_Chan_No = "";
            try
            {
                //判斷是否有傳入Root Transcation 
                IsRootTranscation = (RootDBT == null) ? true : false;

                #region 啟動交易或指定RootTranscation

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

                #endregion

                #region 刪除舊資料

                MaintainDisChanRefer MDCR = new MaintainDisChanRefer(ConnectionDB);

                v_Chan_No = "";
                foreach (DataRow dr in dtDisChanReferNew.Rows)
                {
                    if (v_Chan_No != dr["CHANNO"].ToString().Trim())
                    {

                        #region 輸入變數

                        ProcParameterList.Clear();
                        //配本序號
                        ProcParameterList.Add(vDisNo);
                        //商品
                        ProcParameterList.Add(vItem);
                        //期別
                        ProcParameterList.Add(vPeriod);
                        //通路
                        ProcParameterList.Add(dr["CHANNO"].ToString().Trim());

                        #endregion

                        bool DeleteOk = MDCR.DeleteOldChanReferByChan(ProcParameterList,
                                                                DBT
                                                                );

                        if (!DeleteOk)
                        {
                            throw new Exception("刪除通路參照舊資料失敗!!");
                        }
                    }
                    v_Chan_No = dr["CHANNO"].ToString().Trim();
                }
                #endregion

                #region 依設定新增預設值

                if (dtDisChanReferNew != null) //有新增通路參照
                {
                    for (int x = 0; x < dtDisChanReferNew.Rows.Count; x++)
                    {
                        #region 輸入資料

                        ProcParameterList.Clear();
                        //配本序號
                        ProcParameterList.Add(vDisNo);
                        //商品
                        ProcParameterList.Add(vItem);
                        //期別
                        ProcParameterList.Add(vPeriod);
                        //通路
                        ProcParameterList.Add(dtDisChanReferNew.Rows[x]["CHANNO"].ToString());
                        //參照商品
                        ProcParameterList.Add(dtDisChanReferNew.Rows[x]["ITEM"].ToString());
                        //參照期別
                        ProcParameterList.Add(dtDisChanReferNew.Rows[x]["PERIOD"].ToString());
                        //參照比率
                        ProcParameterList.Add(dtDisChanReferNew.Rows[x]["REFER_RATE"].ToString());
                        //建立時間
                        ProcParameterList.Add(DateTime.Now);
                        //建立者
                        ProcParameterList.Add(UpdateUser);

                        #endregion

                        bool CreateOK = CreateDisChanRefer(ProcParameterList,
                                                           DBT
                                                           );

                        if (!CreateOK)
                        {
                            throw new Exception("依設定新增更新參照通路失敗!!");
                        }
                    }
                }
                #endregion

                #region 交易成功

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

                #endregion

                bResult = true;
            }
            catch (Exception ex)
            {
                #region 交易失敗

                bResult = false;

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

                #endregion

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

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

                #endregion
            }

            return bResult;
        }
Example #6
0
 private void MakeDataTableDisChanRefer()
 {
     #region
     try
     {
         ALOModel.MaintainDisChanRefer BCO = new ALOModel.MaintainDisChanRefer(ConnectionDB);
         dtDisChanRefer = BCO.GetDisChanReferSchema();
     }
     catch (Exception ex)
     {
         ErrorMsgLabel.Text = ex.Message;
     }
     #endregion
 }