/// <summary>
 /// 【功能】:查詢檔期活動折扣資料
 /// 
 /// 【傳入值】:
 /// 〔@依照傳入的查詢條件〕
 /// 
 /// 【回傳值】:
 /// 〔@參考web ui spec〕
 /// 
 /// 【主要TABLE】:
 /// A=VDS_STM_PROMOTE_MST
 /// B=VDS_STM_PROMOTE_DTL
 /// 
 /// 【說明】:
 /// 1.正確回傳查詢的dataset,欄位請參照web ui spec。
 /// 2.關聯A.PROMOTE_ID=B.PROMOTE_ID
 /// 3.ENABLE=1
 /// </summary>
 public string QueryPromoteExhibition(string V_PROMOTE_ID)
 {
     try
     {
         DBO.STM_STM20_DBO dbo = new STM_STM20_DBO(ref USEDB);
         string V_EXIST_FLAG = "";
         dbo.doCheckPromoteExists(V_PROMOTE_ID, out V_EXIST_FLAG);
         return V_EXIST_FLAG;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
 /// <summary>
 /// 目的:查詢上傳後的成功筆數
 /// Table:VDS_STM_PROMOTE_DTL_TMP
 /// 條件:V_CREATEUID
 /// </summary>
 public void QueryPromoteTelTmpImportStat(int N_IMPORT_KIND,string V_CREATEUID, out int N_TMP_CNT, out int N_TAB_CNT)
 {
     try
     {
         DBO.STM_STM20_DBO dbo = new STM_STM20_DBO(ref USEDB);
         dbo.doQueryPromoteDtlTmpImportStat(N_IMPORT_KIND,V_CREATEUID, out N_TMP_CNT, out N_TAB_CNT);
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
		/// <summary>
		/// 目的:查詢錯誤訊息資料
		/// Table:
		/// C=VDS_STM_PROMOTE_DTL_TMP
		/// 條件:[資料型態]=2:錯誤資料、[建立人員]=@登入者
		/// 回傳:
		/// Improt_kind=1的錯誤資料顯示在第一個gridview。
		/// Improt_kind=2的錯誤資料顯示在第二個gridview。
		/// </summary>
        public DataTable QueryErrorByFind(int N_IMPORT_KIND,string V_CREATEUID, DateTime D_CREATEDATE_S, DateTime D_CREATEDATE_E)
        {
            try
            {
                DBO.STM_STM20_DBO dbo = new STM_STM20_DBO(ref USEDB);
                return dbo.doQueryPromoteDtlTmpError(N_IMPORT_KIND,V_CREATEUID, D_CREATEDATE_S, D_CREATEDATE_E);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
		/// <summary>
		/// 目的:將上傳檔案內容,存入暫存檔
		/// 傳入參數:
		/// 〔@檔期編號〕
		/// 1.先清除前一次,同一使用者執行的匯入暫存資訊與錯誤資訊。
		/// 相關Table:
		/// C=VDS_STM_PROMOTE_DTL_TMP
		/// 2.讀取匯入檔案到暫存DataSet。
		/// C.PROMOTE_ID=〔@檔期編號〕,其他欄位參照檔案格式。
		/// 3.檢查匯入檔案格式內容是否正確,如有任何錯誤,則停止上傳流程,並回傳錯誤訊息。
		///   『XX檔案,檔案內容錯誤:@錯誤說明』 (格式請參考資料庫Table Shcema)
		///       * 日期:檢查日期格式。
		///       * 數字:檢查內容是否為數字。
		///       * 文字:檢查長度是否溢位。
		///       * 檔案欄位數是否不足。
		///       * 兩個工作表匯入內容有任一筆錯,皆視為錯誤,整批放棄。
		///       * 匯入表格細節說明請參考:WEB UI SPEC 文件
		/// 4. 格式檢查正確無誤後
		///    a) 暫存檔中的[狀態]欄位調整為1:FILE TO TMP
		///    b) 呼叫 [CheckData] ,檢查資料內容邏輯正確性
		/// 5.無論CheckData()檢查結果是否為True,
		///    皆將上傳檔案內容新增到資料庫Tmp Table:,
		///    並記錄錯誤原因、匯入者、匯入日期、處理檔案名稱=上傳檔名。
		///   c)上述匯入需一併Commit,處理期間有任何錯誤,皆視為異常,整批Rollback,並回傳錯誤訊息。
		/// 6. 如果CheckData()檢查結果=false 上傳流程完成,回傳處理筆數訊息:上傳總筆數、成功筆數、失敗筆數。
		/// 7.如果import_kind=2 CheckData()檢查結果=True,表示2個檔案都沒有錯誤,才呼叫[ImportPromoteDiscount.
		/// TmpToDB],處理匯入正式表單。* 匯入檔案對應,請參考工作表:STM20 檔期活動折扣匯入(檔案格式)。
		/// </summary>
        public void FileToTmp(DataTable dt, DbTransaction RootDBT, string V_CREATEUID,  out string ErrorMsg)
        {
            bool IsRootTranscation = false;

            try
            {
                DBO.STM_STM20_DBO dbo = new STM_STM20_DBO(ref USEDB);
                ErrorMsg = "";
                //判斷是否有傳入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 清空VDS_STM_PROMOTE_DTL_TMP

                dbo.doDeletePromoteDtlTmp(V_CREATEUID, DBT);

                #endregion

                #region FileToTmp
                ArrayList ParameterList = new ArrayList();
                string V_RESULT = "1";

                if (dt != null)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {                        
                        ParameterList.Clear();
                        ParameterList.Add(dt.Rows[i]["DATASOURCE"].ToString());
                        ParameterList.Add(Convert.ToInt32(dt.Rows[i]["ROW_NUM"].ToString()));
                        ParameterList.Add(Convert.ToInt32(dt.Rows[i]["IMPORT_KIND"].ToString()));
                        ParameterList.Add(dt.Rows[i]["PROMOTE_CODE"].ToString());
                        ParameterList.Add(dt.Rows[i]["STORE"].ToString());
                        ParameterList.Add(dt.Rows[i]["ITEM"].ToString());
                        ParameterList.Add(dt.Rows[i]["PERIOD"].ToString());
                        ParameterList.Add(GetValueSetParameter(dt.Rows[i]["COST_SUBSIDY_PERCENT"].ToString(),"float",false));
                        ParameterList.Add(GetValueSetParameter(dt.Rows[i]["PRICE_SUBSIDY_PERCENT"].ToString(), "float", false));
                        ParameterList.Add(System.DateTime.Now);
                        ParameterList.Add(V_CREATEUID);
                        
                        dbo.doCreatePromoteDtlTmp(ParameterList, DBT);                        
                    }
                }
                #endregion

                #region TmpToDB

                dbo.doCreatePromoteDtl(V_CREATEUID, DBT, out V_RESULT);

                if (V_RESULT == "0")
                    ErrorMsg = "轉入正式檔期活動折扣失敗,請檢視異常報表!";
                #endregion

                if (IsRootTranscation)
                {
                    //獨立呼叫Transcation成立
                    DBT.Commit();
                }
            }
            catch (Exception ex)
            {
                #region 交易失敗

                DBT.Rollback();
                #endregion

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

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

                #endregion

            }
        }