/// <summary> /// 傳入參數:@沖方單號、@繳款別、@沖尾差、@其它差異、@匯兌差異、@合計、@沖帳餘額 /// 回傳:是否異動成功 /// /// 動作: /// (1)判斷繳款別類型(1=電匯、2=支票、3=應收付調整) /// (1.1)電匯: /// (A)依COLL_NO=@沖方單號異動資料庫VDS_CAA_COLL_MAIN欄位 /// (a)DIFF_AMT=@沖尾差 /// (b)OTHER_AMT=@其它差異 /// (c)REMIT_AMT=@匯兌差異 /// (d)SUM_DUE_AMT=@合計 /// (e)DUE_REMAIN_AMT=@沖帳餘額 /// (f)TEMPORAL_FLG=1 /// (g)TEMPORAL_DATE=系統日(AP) /// /// (B)依COLL_NO=@沖方單號取得資料庫VDS_CAA_COLL_MAIN欄位 /// (a)STORE_ID=M.STORE_ID /// (b)ROOT_NO="" /// (c)TAX_TYPE="" /// (d)TEMP_AMT=M.COLL_REMAIN_AMT /// (e)SUM_WASH_AMT=0 /// (f)TEMP_REMAIN_AMT=M.COLL_REMAIN_AMT /// /// (1.2)支票: /// (A)依BOND_NO=@沖方單號異動資料庫VDS_CAA_BOND_MAIN欄位 /// (a)DIFF_AMT=@沖尾差 /// (b)OTHER_AMT=@其它差異 /// (c)REMIT_AMT=@匯兌差異 /// (d)SUM_BOND_AMT=@合計 /// (e)BOND_REMAIN_AMT=@沖帳餘額 /// (f)TEMPORAL_FLG=1 /// (g)TEMPORAL_DATE=系統日(AP) /// (B)依BOND_NO=@沖方單號取得資料庫VDS_CAA_BOND_MAIN欄位 /// (a)STORE_ID=M.STORE_ID /// (b)ROOT_NO="" /// (c)TAX_TYPE="" /// (d)TEMP_AMT=M.BOND_REMAIN_AMT /// (e)SUM_WASH_AMT=0 /// (f)TEMP_REMAIN_AMT=M.BOND_REMAIN_AMT /// /// (1.3)應收應付調整: /// (A)依DUE_NO=@沖方單號異動資料庫VDS_CAA_DUE_MAIN欄位 /// (a)DIFF_AMT=@沖尾差 /// (b)OTHER_AMT=@其它差異 /// (c)REMIT_AMT=@匯兌差異 /// (d)SUM_DUE_AMT=@合計 /// (e)DUE_REMAIN_AMT=@沖帳餘額 /// (f)TEMPORAL_FLG=1 /// (g)TEMPORAL_DATE=系統日(AP) /// (B)依DUE_NO=@沖方單號取得資料庫VDS_CAA_DUE_MAIN欄位 /// (a)STORE_ID=M.STORE_ID /// (b)ROOT_NO=M.ROOT_NO /// (c)TAX_TYPE=M.TAX_TYPE /// (d)TEMP_AMT=M.DUE_REMAIN_AMT /// (e)SUM_WASH_AMT=0 /// (f)TEMP_REMAIN_AMT=M.DUE_REMAIN_AMT /// /// (2)新增一筆資料至暫收檔VDS_CAA_TEMP_MAIN /// (2.1)TEMP_NO =取號原則 /// (2.2)SOURCE_TYPE=2(1表銷折轉暫收、2表溢付) /// (2.3)SOURCE_NO=@沖方單號 /// (2.4)STORE_ID=流程(B)取得之欄位STORE_ID /// (2.5)ROOT_NO=流程(B)取得之欄位ROOT_NO /// (2.6)TAX_TYPE==流程(B)取得之欄位TAX_TYPE /// (2.7)TEMP_AMT=流程(B)取得之欄位DISC_AMT /// (2.8)SUM_WASH_AMT=流程(B)取得之欄位SUM_WASH_AMT /// (2.9)TEMP_REMAIN_AMT=流程(B)取得之欄位TEMP_REMAIN_AMT /// (2.10)CHG_INCOME_TYPE=0 /// (2.11)CHG_INCOME_DATE='' /// /// /// (3)以上三個動作均一併完成,若有一個失敗則rollback回去。 /// </summary> public bool ChangeStatusToTemp(ArrayList ParameterList) { bool bResult = false; bool IsRootTranscation = false; DbTransaction RootDBT = null; int iResult = 0; try { CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB); //判斷是否有傳入Root Transcation IsRootTranscation = (RootDBT == null) ? true : false; #region 啟動交易或指定RootTranscation if (IsRootTranscation) { //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); } else { DBT = RootDBT; } #endregion string strPAY_TYPE = ParameterList[0].ToString(); string strWASH_NO = ParameterList[1].ToString(); string strUID = ParameterList[2].ToString(); string strUPDATEDATE = ParameterList[3].ToString(); string strCLOSE_MONTH = ParameterList[4].ToString(); string strTEMPORAL_DATE = strUPDATEDATE; //string strAPL_DATE = ConvertDB_Date(GetAPLDATE()); ArrayList ParaData = new ArrayList(); ParaData.Clear(); ParaData.Add(strPAY_TYPE); ParaData.Add(strWASH_NO); ParaData.Add(strUID); ParaData.Add(strUPDATEDATE); DataTable dtData = DBO.QueryPayToTemp(ParaData); string strSTORE_ID = ""; string strROOT_NO = ""; string strTAX_TYPE = ""; string strTEMP_AMT = ""; string strSUM_WASH_AMT = "0"; string strTEMP_REMAIN_AMT = ""; string strTEMP_DATE = ""; if (dtData.Rows.Count > 0) { strSTORE_ID = dtData.Rows[0]["STORE_ID"].ToString().Trim(); strROOT_NO = dtData.Rows[0]["ROOT_NO"].ToString().Trim(); strTAX_TYPE = dtData.Rows[0]["TAX_TYPE"].ToString().Trim(); strTEMP_AMT = dtData.Rows[0]["REMAIN_AMT"].ToString().Trim(); strTEMP_REMAIN_AMT = dtData.Rows[0]["REMAIN_AMT"].ToString().Trim(); ; strTEMP_DATE = dtData.Rows[0]["TEMP_DATE"].ToString().Trim(); ; } else { throw new Exception("找不到[" + strWASH_NO + "]此筆繳款資料"); } #region 寫入暫收檔 ArrayList ParaTemp = new ArrayList(); //新增暫收檔參數 string strTEMP_NO = string.Empty; string strID = string.Empty; ParaTemp.Clear(); ParaTemp.Add("2"); // (1) 來源 = SOURCE_TYPE ParaTemp.Add(strWASH_NO); // (2) 來源單號 = SOURCE_NO ParaTemp.Add(strSTORE_ID); // (3) 客戶店號 = STORE_ID ParaTemp.Add(strROOT_NO); // (4) 商品群分類 = ROOT_NO ParaTemp.Add(strTAX_TYPE); // (5) 稅別 = TAX_TYPE ParaTemp.Add(strTEMP_AMT); // (6) 暫收金額 = TEMP_AMT ParaTemp.Add(strSUM_WASH_AMT); // (7) 累計沖帳金額 = SUM_TEMP_AMT ParaTemp.Add(strTEMP_REMAIN_AMT); // (8) 暫收餘額 = TEMP_REMAIN_AMT ParaTemp.Add(""); // (9) 備註說明 = MEMO ParaTemp.Add(strCLOSE_MONTH); // (10) 結帳年月 = CLOSE_MONTH ParaTemp.Add("0"); // (11) 轉其它收入 = CHG_INCOME_TYPE ParaTemp.Add(""); // (12) 轉其它收入日期 = CHG_INCOME_DATE ParaTemp.Add(strUPDATEDATE); // (13) 建立日期 = CREATEDATE (系統抓取目前AP機器之時間) ParaTemp.Add(strUID); // (14) 建立人員 = CREATEUID (系統抓取登入之使用者ID) //ParaTemp.Add(strAPL_DATE.Substring(0, 10)); // (15) 暫收日期 = TEMP_DATE 10碼就好了 ParaTemp.Add(strTEMP_DATE); // (15) 暫收日期 iResult = DBO.CreateTempRecord(DBT, ParaTemp, out strTEMP_NO, out strID); #endregion #region 繳款資料寫入Flag ArrayList ParaPay = new ArrayList(); ParaPay.Clear(); ParaPay.Add(strPAY_TYPE); //1.V_PAY_TYPE ParaPay.Add(strWASH_NO); //2.V_COLL_NO ParaPay.Add(strTEMPORAL_DATE); //3.V_TEMPORAL_DATE ParaPay.Add(strUID); //4.V_UPDATEUID ParaPay.Add(strUPDATEDATE); //5.V_UPDATEDATE iResult = DBO.UpdatePayToTemp(DBT, ParaPay); #endregion #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); bResult = true; } #endregion } catch (Exception ex) { #region 交易失敗 if (IsRootTranscation) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw ex; } finally { #region 判斷是否關閉交易連線 if (IsRootTranscation) { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } #endregion } return bResult; }