/// <summary> /// 功能說明:作廢發票資料 /// /// 傳入參數:@發票號碼 /// /// 回傳:是否作廢成功 /// /// 資料庫:VDS_CAA_INV_MAIN(銷項發票檔) /// /// 說明: /// /// (1)依INV_NO=@發票號碼 AND ENABLE=1 AND CANCEL_FLG=0,查詢資料庫VDS_CAA_INV_MAIN之資料 /// (1.1)判斷此筆資料是否存在 /// 不存在:回傳訊息(此筆發票資料不存在或已作廢,請重新輸入) /// 存在:判斷查詢此筆資料是否己折讓或沖帳 /// 若INV_UAMT = NON_INV_UAMT 且 INV_TAX = NON_INV_TAX INV_AMT = /// INV_REMAIN_AMT /// 則執行呼叫流程(1.2) /// 若有不符合的,則回傳訊息:(此筆發票資料己折讓或沖帳,故無法換開、作廢) /// (1.2)異動欄位如下: /// CANCEL_FLG=1 /// CANCEL_DATE=取目前系統日期 /// INV_VERSION = 流程(1)查詢之欄位INV_VERSION資料 +1 /// </summary> public int CancelInvByChange(ArrayList ParameterList, DbTransaction RootDBT) { int iResult; bool IsRootTranscation = false; try { CAA_22DBO DBO = new CAA_22DBO(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 iResult = DBO.CancelInvByChange(ParameterList, RootDBT); #region 交易成功 if (IsRootTranscation) { //獨立呼叫Transcation成立 DBT.Commit(); } #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 iResult; }
/// <summary> /// 功能說明:檢核1對多換開金額是否符合且執行換開發票作業 /// /// 傳入參數:LIST資料 /// /// 回傳:是否異動成功 /// /// TABLE: /// VDS_CAA_INV_MAIN(銷項發票檔) /// /// 說明: /// 1判斷是否字軌月結(呼叫ChanMonthCloseYN.ChanMonthCloseYN<傳入CAA15、@結帳年月>) /// 已月結:回傳訊息(字軌已月結,無法金額換開) /// 未月結:依INV_NO=@發票號碼 AND ENABLE=1,查詢資料庫VDS_CAA_INV_MAIN欄位CANCEL_FLG之資料 /// 1.1 判斷CANCEL_FLG /// 1.1.1 CANCEL_FLG=0:(回傳訊息:此筆發票尚未作廢,請先執行發票作廢作業) /// 1.1.2 是:判斷加總@LIST之銷售金額 是否等於 流程1取得之欄位 INV_UAMT /// 1.1.2.1 是:一筆一筆新增直至結束 /// 新增資料庫VDS_CAA_INV_MAIN之資料,欄位如下: /// CLOSE_MONTH=流程1取得之CLOSE_MONTH /// INV_DATE=取系統內此月份最後一筆資料之發票日期 /// INV_NO=@新發票號碼 /// IS_SCHEDULE=流程1取得IS_SCHEDULE /// INV_CHKNO=發票各數字相加*7/4取餘數 /// INVOICE_DATE_RANGE=流程1取得INVOICE_DATE_RANGE /// FORM_NO=2(人工開立) /// SOURCE_TYPE=1(營業系統) /// INV_KIND=流程1取得INV_KIND /// TAX_TYPE=流程1取得TAX_TYPE /// ITEM_NAME=流程1取得ITEM_NAME /// INV_UAMT=@銷售金額 /// INV_TAX=@稅額 /// INV_AMT=@銷售金額 +@稅額 /// MEMO=流程1取得MEMO /// CANCEL_FLG=0 /// PRINT_FLG=0 /// JUMP_FLG=0 /// CANCEL_DATE='' /// OLD_INV_NO='' /// STORE_ID= 流程1取得STORE_ID /// ROOT_NO=流程1取得ROOT_NO /// KEYIN_DATE='' /// CHG_INV_TYPE='' /// CREATEDATE=系統日 /// CREATEUID=登入之使用者ID /// UPDATEDATE=系統日 /// UPDATEUID=登入之使用者ID /// ENABLE=1 /// INV_FORM=31 /// NON_INV_UAMT=@銷售金額 /// NON_INV_TAX=@稅額 /// INV_VERSION=0 /// INV_REMAIN_AMT=@銷售金額 +@稅額 /// DUE_DATE=INV_DATE + INVOICE_DATE_RANGE(票期) /// INDEED_DATE='' /// WASH_STATUS=0 /// VOUCH_DOC=流程1取得VOUCH_DOC /// VOUCH_RFNO=流程1取得VOUCH_RFNO /// 1.1.2.1.1 判斷整批是否新增成功: /// 是:回傳Y(Y表示:異動成功) /// 否:ROLLBACK資料並回傳N(N表示:資料庫異動失敗,請重新執行) /// 1.1.2.2 否:回傳1(1表示:異動失敗,換開發票之銷售金額總合需與原發票金額相同) /// </summary> public bool CHGInvOneToMore(ArrayList ParameterList) { bool bResult = false; bool IsRootTranscation = false; ArrayList Param = new ArrayList(); DbTransaction RootDBT = null; int iResult = 0; try { CAA_22DBO DBO = new CAA_22DBO(ref USEDB); string strOLD_INV_NO = ParameterList[0].ToString(); string strUPDATEDATE = ParameterList[1].ToString(); string strUPDATEUID = ParameterList[2].ToString(); string strOLD_UPDATEDATE = ParameterList[3].ToString(); string strOLD_UPDATEUID = ParameterList[4].ToString(); DataTable dtInv = (DataTable)ParameterList[5]; string strOLD_INV_DATE = ParameterList[6].ToString(); string strINV_INVOICE_TYPE = ParameterList[7].ToString(); //判斷是否有傳入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 更新原始發票的CHG_INV_TYPE=1 Param.Clear(); Param.Add(strOLD_INV_NO); Param.Add(strUPDATEDATE); Param.Add(strUPDATEUID); Param.Add(strOLD_UPDATEDATE); Param.Add(strOLD_UPDATEUID); iResult = DBO.CHGInvOneToMore1(DBT, Param); #endregion #region 建立一對多發票資料 for (int i = 0; i < dtInv.Rows.Count; i++) { Param.Clear(); Param.Add(strOLD_INV_NO); Param.Add(strOLD_INV_DATE.Replace("/", "").Substring(0, 6)); Param.Add(dtInv.Rows[i]["INV_UAMT"].ToString()); Param.Add(dtInv.Rows[i]["INV_TAX"].ToString()); Param.Add(dtInv.Rows[i]["INV_AMT"].ToString()); Param.Add(strUPDATEDATE); Param.Add(strUPDATEUID); Param.Add(strINV_INVOICE_TYPE); iResult = DBO.CHGInvOneToMore2(DBT, Param); } #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; }
//取得一對多換開的發票資料 public DataTable QueryInvoiceByMore(ArrayList ParameterList) { try { CAA_22DBO DBO = new CAA_22DBO(ref USEDB); DataTable dt = DBO.QueryInvoiceByMore(ParameterList); return dt; } catch (Exception ex) { throw ex; } }
/// <summary> /// 檢查發票是否己折讓或沖帳 /// </summary> /// <param name="ParameterList"></param> /// <returns></returns> public DataTable CheckInvData(ArrayList ParameterList) { try { CAA_22DBO DBO = new CAA_22DBO(ref USEDB); DataTable dt = DBO.CheckInvData(ParameterList); return dt; } catch (Exception ex) { throw ex; } }