/// <summary> /// 傳入參數:@畫面上有異動欄位List /// /// 處理: /// 【繳款資訊】 /// 判斷其繳款別:1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整 /// IF 繳款別=1 THEN /// 依COLL_NO = @收款單號 異動資料庫VDS_CAA_COLL_MAIN欄位如下: /// (1)DIFF_AMT = @沖尾差 /// (2)OTHER_DIFF = @其他差異 /// (3)REMIT_DIFF = @匯兌差異 /// (4)COLL_REMAIN_AMT = @沖帳餘額 /// (5)最後沖帳日=系統日(AP) /// (6)IF COLL_AMT <> COLL_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// ELSEIF 繳款別=2 THEN /// 依BOND_NO = @收款單號 異動資料庫VDS_CAA_BOND_MAIN欄位如下: /// (1)DIFF_AMT = @沖尾差 /// (2)OTHER_DIFF = @其他差異 /// (3)REMIT_DIFF = @匯兌差異 /// (4)BOND_REMAIN_AMT = @沖帳餘額 /// (5)最後沖帳日=系統日(AP) /// (6)IF BOND_AMT <> BOND_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// ELSE /// 依DUE_NO = @收款單號 異動資料庫VDS_CAA_DUE_MAIN欄位如下: /// (1)DIFF_AMT = @沖尾差 /// (2)OTHER_DIFF = @其他差異 /// (3)REMIT_DIFF = @匯兌差異 /// (4)DUE_REMAIN_AMT = @沖帳餘額 /// (5)最後沖帳日=系統日(AP) /// (6) SUM_DUE_AMT = DUE_AMT - DUE_REMAIN_AMT /// (7) IF DUE_AMT <> DUE_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// /// 【發票/折讓/暫收資訊】 /// 判斷其單別:1=發票、2=折讓、3=暫收 /// IF 單別=1 THEN /// 依INV_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_INV_MAIN欄位如下: /// (1)INV_REMAIN_AMT = @沖帳餘額 /// (2)INDEED_DATE = @確認付款日 /// (3)MEMO= @備註 /// (4) IF INV_UAMT <> INV_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// ELSEIF 單別=2 THEN /// 依DISC_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_DISC_MAIN欄位如下: /// (1)DISC_REMAIN_AMT = @沖帳餘額 /// (2)MEMO= @備註 /// (3) IF DISC_UAMT <> DISC_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// ELSE /// 依TEMP_NO = @發票/折讓/暫收單號 異動資料庫VDS_CAA_TEMP_MAIN欄位如下: /// (1)TEMP_REMAIN_AMT = @沖帳餘額 /// (2)MEMO= @備註 /// (3) IF TEMP_AMT <> TEMP_REMAIN_AMT THEN /// WASH_STATUS = 1 /// END IF /// (4) SUM_TEMP_AMT = TEMP_AMT - TEMP_REMAIN_AMT /// END IF /// /// 【發票/折讓/暫收資訊】 /// 將畫面之資料新增、刪除、異動至資料庫VDS_CAA_CONNECT_MAIN /// CUBE_NO = @發票/折讓/暫收單號 /// CUBE_TYPE = @單別(1=發票、2=折讓、3=暫收) /// WASH_NO = @收款單號 /// WASH_TYPE = @繳款別(1=電匯(專案代收)、2=支票/本票/匯票、3=應收付調整) /// WASH_AMT = @沖帳金額 /// WASH_DATE = @沖帳日期 /// CREATEDATE=系統日(AP) /// CREATEUID=登入之使用者 /// /// 回傳: /// 新增是否成功 /// </summary> public bool SaveAccountRecord(ArrayList ParameterList) { bool bResult = false; ArrayList Param = new ArrayList(); DbTransaction RootDBT = null; int iResult = 0; try { DataRow[] drPays = (DataRow[])ParameterList[0]; DataRow[] drInvDisTmps = (DataRow[])ParameterList[1]; DataTable dtConnectDel = (DataTable)ParameterList[2]; DataRow[] drConnects = (DataRow[])ParameterList[3]; DataTable dtInvDisTmpReCal = (DataTable)ParameterList[4]; string strUPDATEUID = ParameterList[5].ToString(); string strUPDATEDATE = ParameterList[6].ToString(); string strPAY_TYPE = ""; string strCUBE_TYPE = ""; string strLINK_NO = ""; string strLINK_TYPE = ""; CAA_AccountRecordDBO DBO = new CAA_AccountRecordDBO(ref USEDB); string strAPL_DATE = GetAPLDATE(); //獨立呼叫啟動Transcation Conn = USEDB.CreateConnection(); Conn.Open(); DBT = Conn.BeginTransaction(); //先更新立沖資訊 再更新繳款資訊 因為要取得最大沖帳日 #region 先刪除有異動過的立沖資訊 foreach (DataRow drDel in dtConnectDel.Rows) { Param.Clear(); Param.Add(drDel["LINK_NO"].ToString()); //1.收款單號 Param.Add("1"); //SOURCE_TYPE (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額 iResult = DBO.DelConnect(DBT, Param); } #endregion #region 更新立沖資訊 string strTempNo = ""; double iTempAmt = 0; foreach (DataRow drConnect in drConnects) { strCUBE_TYPE = Get_CubeTypeNo(drConnect["CUBE_TYPE"].ToString()); if (strCUBE_TYPE == "1") //只有新增CUBE_TYPE為發票的資料到 VDS_CAA_CONNECT_MAIN { if (strTempNo != drConnect["LINK_NO"].ToString()) //因為要用CREATEDATE時間來排序 所以多加這個判斷 { iTempAmt = 0; strTempNo = drConnect["LINK_NO"].ToString(); } iTempAmt++; strPAY_TYPE = Get_WashTypeNo(drConnect["WASH_TYPE"].ToString()); strLINK_TYPE = Get_WashTypeNo(drConnect["LINK_TYPE"].ToString()); Param.Clear(); Param.Add(drConnect["CUBE_NO"].ToString()); //0.發票 Param.Add(strCUBE_TYPE); //1.單別(1.發票) Param.Add(drConnect["WASH_NO"].ToString()); //2.沖帳單號 Param.Add(strPAY_TYPE); //3.沖帳別(1.電匯 2.支票 3.應收付調整 4.折讓 5.暫收) Param.Add(drConnect["WASH_AMT"].ToString()); //4.沖帳金額 Param.Add(ConvertDB_Date(drConnect["WASH_DATE"].ToString())); //5.沖帳日期 Param.Add(ConvertDB_Date_Add(drConnect["CREATEDATE"].ToString(), iTempAmt)); //6.CREATEDATE Param.Add(drConnect["CREATEUID"].ToString()); //7.CREATEUID Param.Add(drConnect["LINK_NO"].ToString()); //8.收款單號 Param.Add(strLINK_TYPE); //9.繳款別(0.發票與繳款直接沖 =>發票與暫收折讓沖 1.電匯 2.支票 3.應收付調整) Param.Add(drConnect["SOURCE_TYPE"].ToString()); //10.source_type (1)=>立沖帳 (2)=>轉暫收 (3)=>前期餘額 iResult = DBO.UpdateConnect(DBT, Param); } } #endregion #region 更新繳款資訊 foreach (DataRow drPay in drPays) { strPAY_TYPE = Get_WashTypeNo(drPay["PAY_TYPE"].ToString()); Param.Clear(); Param.Add(strPAY_TYPE); //1.繳款別 Param.Add(drPay["COLL_NO"].ToString()); //2.收款單號 Param.Add(drPay["DIFF_AMT"].ToString()); //3.沖尾差 Param.Add(drPay["OTHER_DIFF"].ToString()); //4.其他差異 Param.Add(drPay["REMIT_DIFF"].ToString()); //5.匯兌差異 Param.Add(drPay["REMAIN_AMT"].ToString()); //6.沖帳餘額 Param.Add(strAPL_DATE); //7.最後沖帳日 //8.狀態 Param.Add(Get_WashStatus(int.Parse(drPay["COLL_AMT"].ToString()) + int.Parse(drPay["CHARGE"].ToString()), int.Parse(drPay["REMAIN_AMT"].ToString()))); Param.Add(strUPDATEUID); //9.UPDATEUID Param.Add(ConvertDB_Date(strUPDATEDATE)); //10.UPDATEDATE iResult = DBO.UpdatePay(DBT, Param); } #endregion #region 更新發票/折讓/暫收資訊 foreach (DataRow drInvDisTmp in drInvDisTmps) { strCUBE_TYPE = Get_CubeTypeNo(drInvDisTmp["CUBE_TYPE"].ToString()); Param.Clear(); Param.Add(strCUBE_TYPE); //1.單別 Param.Add(drInvDisTmp["CUBE_NO"].ToString()); //2.單號 Param.Add(drInvDisTmp["REMIT_AMT"].ToString()); //3.沖帳餘額 Param.Add(ConvertDB_Date(drInvDisTmp["INDEED_DATE"].ToString())); //4.確認付款日 Param.Add(drInvDisTmp["MEMO"].ToString()); //5.備註 Param.Add(Get_WashStatus(int.Parse(drInvDisTmp["INV_AMT"].ToString()), int.Parse(drInvDisTmp["REMIT_AMT"].ToString()))); //6.狀態 Param.Add(strUPDATEUID); //7.UPDATEUID Param.Add(ConvertDB_Date(strUPDATEDATE)); //8.UPDATEDATE iResult = DBO.UpdateInvDisTemp(DBT, Param); } #endregion #region 所有異動過立沖的發票/折讓/暫收單號 重算餘額 foreach (DataRow dr in dtInvDisTmpReCal.Rows) { strCUBE_TYPE = Get_CubeTypeNo(dr["CUBE_TYPE"].ToString()); Param.Clear(); Param.Add(dr["CUBE_NO"].ToString()); //單號 Param.Add(strCUBE_TYPE); //單別 Param.Add(ConvertDB_Date(strUPDATEDATE)); //UPDATEDATE Param.Add(strUPDATEUID); //UPDATEUID iResult = DBO.ReCalInvDisTemp(DBT, Param); } #endregion #region 刪除金額為零的立沖資訊 foreach (DataRow drDel in dtConnectDel.Rows) { Param.Clear(); Param.Add(drDel["LINK_NO"].ToString()); //1.收款單號 iResult = DBO.DelConnectZero(DBT, Param); } #endregion //獨立呼叫Transcation成立 DBT.Commit(); bResult = true; } catch (Exception ex) { #region 交易失敗 if (DBT != null) { //獨立呼叫Transcation失敗 DBT.Rollback(); } #endregion throw ex; } finally { //獨立呼叫Transcation,關閉連線 if (Conn.State == ConnectionState.Connecting) { Conn.Close(); } } return bResult; }