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

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);
}
}
}