You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
331 lines
12 KiB
331 lines
12 KiB
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("<root>");
|
|
foreach (var itm in res)
|
|
{
|
|
var parts = itm.Split('|');
|
|
sb.Append(@"<row pin=""" + parts[1] + @""" status=""" + parts[2] + @""" pd=""" + parts[7] + @""" />");
|
|
}
|
|
|
|
sb.Append("</root>");
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|