using Swift.API.GlobalBank; using Swift.DAL.SwiftDAL; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; namespace Swift.DAL.BL.Transaction.ThirdParty.GlobalBank { public class GlobalBankDao : RemittanceDao { public DbResult CreateTransaction(string user, string id, bool pushAnyway, bool isReprocess = false) { var row = GetTxnDetail(user, id, isReprocess); //false was replaced by isReprocess var dr = new DbResult(); if (row == null) //if txn not found in remittran { dr.SetError("1", "Transaction not found", null); return dr; } dr = PushToApi(user, ref row, pushAnyway); //false was replaced by pushAnyway if (dr.ErrorCode.Equals("0") || dr.TpErrorCode.ToUpper().Equals("R900")) { return Update(user, id, dr.Id, dr, isReprocess); } return dr; } public DbResult GetStatus(string user, string controlNo, out DataTable dataTable) { var dr = new DbResult(); var drApi = new GlobalBankAPI().GetStatus(user, controlNo); dataTable = drApi.ErrorCode.Equals("0") ? GetTxnStatusDetail(user, controlNo) : null; dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); return dr; } public DbResult GetAccountDetail(string user, string accNo) { var dr = new DbResult(); var drApi = new GlobalBankAPI().GetAccountDetail(user, accNo); dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); dr.Extra = drApi.Extra; return dr; } public DbResult SyncStatus(string user, string controlNo, string syncDate, string status) { var sql = string.Format("EXEC proc_ws_globalBank @flag='ss',@user={0}, @controlNo={1}, @syncDate={2},@status={3}" , FilterString(user) , FilterString(controlNo) , FilterString(syncDate) , FilterString(status)); return ParseDbResult(sql); } public DbResult SynchronizePinStatus(string user, string date) { var dr = new DbResult(); string[] res; var drApi = new GlobalBankAPI().GetTransactions(user, date, out res); dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); if (!dr.ErrorCode.Equals("0")) { return dr; } var sb = new StringBuilder(""); foreach (var itm in res) { var parts = itm.Split('|'); sb.Append(@""); } sb.Append(""); var sql = string.Format("EXEC proc_ws_globalBank @flag='sps', @user={0},@xmlAPI={1},@syncDate={2}" , FilterString(user) , FilterString(sb.ToString()) , FilterString(date)); return ParseDbResult(sql); } public DbResult CancelRequest(string user, string controlNo, string remarks) { var dr = new DbResult(); var drApi = new GlobalBankAPI().CancelTransaction(user, controlNo); dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); if (dr.ErrorCode.Equals("0")) { dr = CancelTxn(user, controlNo, remarks); } return dr; } public DbResult UpdateReceiverName(string user, string controlNo, string accNo, string newBenefName, string oldBenefName) { var dr = new DbResult(); var drApi = new GlobalBankAPI().UpdateReceiverName(user, controlNo,accNo,newBenefName,oldBenefName); dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); return dr; } public DataTable GetPinDetailByDate(string user, string date) { var sql = string.Format( "EXEC proc_ws_globalBank @flag = 's', @syncDate={0}, @user={1}", FilterString(date), FilterString(user)); return ExecuteDataTable(sql); } public DbResult Reprocess(string user, string id, string processId) { var row = GetTxnDetail(user, id, true); var dr = new DbResult(); if (row == null) //if txn not found in remittran { dr.SetError("1", "Transaction not found", null); return dr; } var accountNo = row["benefAccIdNo"].ToString(); var accountName = row["benefName"].ToString(); var controlNo = row["controlNo"].ToString(); var checkAccount = row["checkAccount"].ToString(); var accountNameGbl = ""; bool accountCheckRes = true; if (checkAccount.ToUpper() == "Y") { var dbResult = new DbResult(); if (accountNo.Length != 13) { dbResult.SetError("1", "Preliminary account verification failed. Invalid account number length", ""); return dbResult; } accountCheckRes = ValidateBankAccount(user, accountNo, accountName, out accountNameGbl); if (string.IsNullOrEmpty(accountNameGbl)) { //TO DO: Update as New Account Y UpdateNewAccountFlag(user, controlNo); accountCheckRes = true; } } if (accountCheckRes) { dr = PushToApi(user, ref row, true, processId); if (dr.ErrorCode.Equals("0") || dr.TpErrorCode.ToUpper().Equals("R900")) { return Update(user, id, dr.Id, dr, true); } return dr; } return UpdateTroubleTicket(user, id, controlNo, accountName, accountNameGbl); } public ReportResult GetReconcileReport(string user, string date) { var dtBody = new DataTable(); var dr = new GlobalBankAPI().GetReconcileReport(user, date, out dtBody); var dtResult = new DataTable(); dtResult.Columns.Add("ErrorCode"); dtResult.Columns.Add("Msg"); dtResult.Columns.Add("Id"); var row = dtResult.NewRow(); row[0] = dr.ErrorCode; row[1] = dr.Msg; row[2] = dr.Id; dtResult.Rows.Add(row); var dtFilter = new DataTable(); dtFilter.Columns.Add("Head"); dtFilter.Columns.Add("Value"); row = dtFilter.NewRow(); row[0] = "Date"; row[1] = date; dtFilter.Rows.Add(row); var dtTitle = new DataTable(); dtTitle.Columns.Add("Title"); row = dtTitle.NewRow(); row[0] = "Reconcile Report Global Bank"; dtTitle.Rows.Add(row); var ds = new DataSet(); ds.Tables.Add(dtBody); ds.Tables.Add(dtResult); ds.Tables.Add(dtFilter); ds.Tables.Add(dtTitle); return ParseReportResult(ds); } #region Helper private DbResult PushToApi(string user, ref DataRow row, bool pushAnyway, string processId = "") { var dr = new DbResult(); dr.SetError("0", "Success", ""); if (row == null) { dr.SetError("1", "Transaction not found", null); return dr; } if (row["HitApi"].ToString().Equals("1") || pushAnyway) { var sendTxn = new GblSendTransactionRequest { ControlNo = row["controlNo"].ToString(), BenefName = row["benefName"].ToString(), BenefAdddress = row["benefAdddress"].ToString(), BenefTel = row["benefTel"].ToString(), BenefMobile = row["benefMobile"].ToString(), BenefIdType = row["benefIdType"].ToString(), BenefAccIdNo = row["benefAccIdNo"].ToString(), SenderName = row["senderName"].ToString(), SenderAddress = row["senderAddress"].ToString(), SenderTel = row["senderTel"].ToString(), SenderMobile = row["senderMobile"].ToString(), SenderIdType = row["senderIdType"].ToString(), SenderIdNo = row["senderIdNo"].ToString(), Purpose = row["purpose"].ToString(), RemitType = row["remitType"].ToString(), PayingBankBranchCd = row["PayingBankBranchCd"].ToString(), RCurrency = row["rCurrency"].ToString(), LocalAmount = row["localAmount"].ToString(), Amount = row["amount"].ToString(), ServiceCharge = row["serviceCharge"].ToString(), RCommission = row["rCommission"].ToString(), ExchangeRate = row["exchangeRate"].ToString(), RefNo = row["refNo"].ToString(), Remarks = row["remarks"].ToString(), Source = row["source"].ToString(), NewAccount = row["newAccount"].ToString(), customerDOB = row["customerDOB"].ToString() }; var drApi = new GlobalBankAPI().CreateTransaction(user, sendTxn, processId); dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id); dr.TpErrorCode = drApi.TpErrorCode; } return dr; } private DataRow GetTxnDetail(string user, string id, bool reprocessMode) { var sql = "EXEC proc_ws_globalBank "; if (reprocessMode) sql += " @flag='txnDetail-rp'"; else sql += " @flag='txnDetail'"; sql += ",@user=" + FilterString(user); sql += ",@id=" + FilterString(id); return ExecuteDataRow(sql); } private DataTable GetTxnStatusDetail(string user, string controlNo) { string sql = "EXEC proc_transactionUtility @flag='gbl-a'"; sql += ",@user=" + FilterString(user); sql += ",@controlNo=" + FilterString(controlNo); //var sql = string.Format("EXEC proc_transactionUtility @flag='gbl-a',@user={0},@controlNo={1}" + FilterString(user), FilterString(controlNo)); return ExecuteDataTable(sql); } private DbResult CancelTxn(string user, string controlNo, string remarks) { var sql = string.Format("EXEC proc_ws_globalBank @flag = 'c',@user={0},@controlNo={1},@remarks={2}" , FilterString(user) , FilterString(controlNo) , FilterString(remarks)); return ParseDbResult(sql); } private DbResult Update(string user, string id, string controlNo2, DbResult dr, bool reprocessMode) { var flag = reprocessMode ? "rp-re" : "approve"; var sql = string.Format("EXEC proc_ws_globalBank @flag='{0}', @user={1},@id={2},@controlNo2={3},@errorCode={4}, @errorMsg={5}, @tpErrorCode={6}" , flag , FilterString(user) , FilterString(id) , FilterString(controlNo2) , FilterString(dr.ErrorCode) , FilterString(dr.Msg) , FilterString(dr.TpErrorCode) ); return ParseDbResult(sql); } private DbResult UpdateNewAccountFlag(string user, string controlNo) { var sql = string.Format("EXEC proc_ws_globalBank @flag = 'uaf',@user={0},@controlNo={1}", FilterString(user), FilterString(controlNo)); return ParseDbResult(sql); } private DbResult UpdateTroubleTicket(string user, string id, string controlNo, string rNameIME, string rNameGbl) { var sql = string.Format("EXEC proc_ws_globalBank @flag='updateTT',@user={0}, @id={1}, @controlNo={2}, @rNameIME={3}, @rNameGbl={4}" , FilterString(user) , FilterString(id) , FilterString(controlNo) , FilterString(rNameIME) , FilterString(rNameGbl) ); return ParseDbResult(sql); } private bool ValidateBankAccount(string user, string accountNo, string accountNameIME, out string accountNameGbl) { var _acctNameGbl = ""; bool res = true; var response = new GlobalBankAPI().GetAccountDetail(user, accountNo); if (response.ErrorCode.Equals("0")) { if (response.Msg.ToUpper().Replace(" ", "") == accountNameIME.ToUpper().Replace(" ", "")) res = true; else res = false; _acctNameGbl = response.Msg.ToUpper(); } accountNameGbl = _acctNameGbl; return res; } #endregion public DataTable GetDTTransactionForSync(string User, string Date) { var sql = string.Format("EXEC proc_ws_globalBank @flag = 'listForSync', @syncDate={0}, @user={1}", FilterString(Date), FilterString(User)); return ExecuteDataTable(sql); } } }