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

  1. using Swift.API.GlobalBank;
  2. using Swift.DAL.SwiftDAL;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. namespace Swift.DAL.BL.Transaction.ThirdParty.GlobalBank
  9. {
  10. public class GlobalBankDao : RemittanceDao
  11. {
  12. public DbResult CreateTransaction(string user, string id, bool pushAnyway, bool isReprocess = false)
  13. {
  14. var row = GetTxnDetail(user, id, isReprocess); //false was replaced by isReprocess
  15. var dr = new DbResult();
  16. if (row == null) //if txn not found in remittran
  17. {
  18. dr.SetError("1", "Transaction not found", null);
  19. return dr;
  20. }
  21. dr = PushToApi(user, ref row, pushAnyway); //false was replaced by pushAnyway
  22. if (dr.ErrorCode.Equals("0") || dr.TpErrorCode.ToUpper().Equals("R900"))
  23. {
  24. return Update(user, id, dr.Id, dr, isReprocess);
  25. }
  26. return dr;
  27. }
  28. public DbResult GetStatus(string user, string controlNo, out DataTable dataTable)
  29. {
  30. var dr = new DbResult();
  31. var drApi = new GlobalBankAPI().GetStatus(user, controlNo);
  32. dataTable = drApi.ErrorCode.Equals("0") ? GetTxnStatusDetail(user, controlNo) : null;
  33. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  34. return dr;
  35. }
  36. public DbResult GetAccountDetail(string user, string accNo)
  37. {
  38. var dr = new DbResult();
  39. var drApi = new GlobalBankAPI().GetAccountDetail(user, accNo);
  40. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  41. dr.Extra = drApi.Extra;
  42. return dr;
  43. }
  44. public DbResult SyncStatus(string user, string controlNo, string syncDate, string status)
  45. {
  46. var sql = string.Format("EXEC proc_ws_globalBank @flag='ss',@user={0}, @controlNo={1}, @syncDate={2},@status={3}"
  47. , FilterString(user)
  48. , FilterString(controlNo)
  49. , FilterString(syncDate)
  50. , FilterString(status));
  51. return ParseDbResult(sql);
  52. }
  53. public DbResult SynchronizePinStatus(string user, string date)
  54. {
  55. var dr = new DbResult();
  56. string[] res;
  57. var drApi = new GlobalBankAPI().GetTransactions(user, date, out res);
  58. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  59. if (!dr.ErrorCode.Equals("0"))
  60. {
  61. return dr;
  62. }
  63. var sb = new StringBuilder("<root>");
  64. foreach (var itm in res)
  65. {
  66. var parts = itm.Split('|');
  67. sb.Append(@"<row pin=""" + parts[1] + @""" status=""" + parts[2] + @""" pd=""" + parts[7] + @""" />");
  68. }
  69. sb.Append("</root>");
  70. var sql = string.Format("EXEC proc_ws_globalBank @flag='sps', @user={0},@xmlAPI={1},@syncDate={2}"
  71. , FilterString(user)
  72. , FilterString(sb.ToString())
  73. , FilterString(date));
  74. return ParseDbResult(sql);
  75. }
  76. public DbResult CancelRequest(string user, string controlNo, string remarks)
  77. {
  78. var dr = new DbResult();
  79. var drApi = new GlobalBankAPI().CancelTransaction(user, controlNo);
  80. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  81. if (dr.ErrorCode.Equals("0"))
  82. {
  83. dr = CancelTxn(user, controlNo, remarks);
  84. }
  85. return dr;
  86. }
  87. public DbResult UpdateReceiverName(string user, string controlNo, string accNo, string newBenefName, string oldBenefName)
  88. {
  89. var dr = new DbResult();
  90. var drApi = new GlobalBankAPI().UpdateReceiverName(user, controlNo,accNo,newBenefName,oldBenefName);
  91. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  92. return dr;
  93. }
  94. public DataTable GetPinDetailByDate(string user, string date)
  95. {
  96. var sql = string.Format( "EXEC proc_ws_globalBank @flag = 's', @syncDate={0}, @user={1}", FilterString(date), FilterString(user));
  97. return ExecuteDataTable(sql);
  98. }
  99. public DbResult Reprocess(string user, string id, string processId)
  100. {
  101. var row = GetTxnDetail(user, id, true);
  102. var dr = new DbResult();
  103. if (row == null) //if txn not found in remittran
  104. {
  105. dr.SetError("1", "Transaction not found", null);
  106. return dr;
  107. }
  108. var accountNo = row["benefAccIdNo"].ToString();
  109. var accountName = row["benefName"].ToString();
  110. var controlNo = row["controlNo"].ToString();
  111. var checkAccount = row["checkAccount"].ToString();
  112. var accountNameGbl = "";
  113. bool accountCheckRes = true;
  114. if (checkAccount.ToUpper() == "Y")
  115. {
  116. var dbResult = new DbResult();
  117. if (accountNo.Length != 13)
  118. {
  119. dbResult.SetError("1", "Preliminary account verification failed. Invalid account number length", "");
  120. return dbResult;
  121. }
  122. accountCheckRes = ValidateBankAccount(user, accountNo, accountName, out accountNameGbl);
  123. if (string.IsNullOrEmpty(accountNameGbl))
  124. {
  125. //TO DO: Update as New Account Y
  126. UpdateNewAccountFlag(user, controlNo);
  127. accountCheckRes = true;
  128. }
  129. }
  130. if (accountCheckRes)
  131. {
  132. dr = PushToApi(user, ref row, true, processId);
  133. if (dr.ErrorCode.Equals("0") || dr.TpErrorCode.ToUpper().Equals("R900"))
  134. {
  135. return Update(user, id, dr.Id, dr, true);
  136. }
  137. return dr;
  138. }
  139. return UpdateTroubleTicket(user, id, controlNo, accountName, accountNameGbl);
  140. }
  141. public ReportResult GetReconcileReport(string user, string date)
  142. {
  143. var dtBody = new DataTable();
  144. var dr = new GlobalBankAPI().GetReconcileReport(user, date, out dtBody);
  145. var dtResult = new DataTable();
  146. dtResult.Columns.Add("ErrorCode");
  147. dtResult.Columns.Add("Msg");
  148. dtResult.Columns.Add("Id");
  149. var row = dtResult.NewRow();
  150. row[0] = dr.ErrorCode;
  151. row[1] = dr.Msg;
  152. row[2] = dr.Id;
  153. dtResult.Rows.Add(row);
  154. var dtFilter = new DataTable();
  155. dtFilter.Columns.Add("Head");
  156. dtFilter.Columns.Add("Value");
  157. row = dtFilter.NewRow();
  158. row[0] = "Date";
  159. row[1] = date;
  160. dtFilter.Rows.Add(row);
  161. var dtTitle = new DataTable();
  162. dtTitle.Columns.Add("Title");
  163. row = dtTitle.NewRow();
  164. row[0] = "Reconcile Report Global Bank";
  165. dtTitle.Rows.Add(row);
  166. var ds = new DataSet();
  167. ds.Tables.Add(dtBody);
  168. ds.Tables.Add(dtResult);
  169. ds.Tables.Add(dtFilter);
  170. ds.Tables.Add(dtTitle);
  171. return ParseReportResult(ds);
  172. }
  173. #region Helper
  174. private DbResult PushToApi(string user, ref DataRow row, bool pushAnyway, string processId = "")
  175. {
  176. var dr = new DbResult();
  177. dr.SetError("0", "Success", "");
  178. if (row == null)
  179. {
  180. dr.SetError("1", "Transaction not found", null);
  181. return dr;
  182. }
  183. if (row["HitApi"].ToString().Equals("1") || pushAnyway)
  184. {
  185. var sendTxn = new GblSendTransactionRequest
  186. {
  187. ControlNo = row["controlNo"].ToString(),
  188. BenefName = row["benefName"].ToString(),
  189. BenefAdddress = row["benefAdddress"].ToString(),
  190. BenefTel = row["benefTel"].ToString(),
  191. BenefMobile = row["benefMobile"].ToString(),
  192. BenefIdType = row["benefIdType"].ToString(),
  193. BenefAccIdNo = row["benefAccIdNo"].ToString(),
  194. SenderName = row["senderName"].ToString(),
  195. SenderAddress = row["senderAddress"].ToString(),
  196. SenderTel = row["senderTel"].ToString(),
  197. SenderMobile = row["senderMobile"].ToString(),
  198. SenderIdType = row["senderIdType"].ToString(),
  199. SenderIdNo = row["senderIdNo"].ToString(),
  200. Purpose = row["purpose"].ToString(),
  201. RemitType = row["remitType"].ToString(),
  202. PayingBankBranchCd = row["PayingBankBranchCd"].ToString(),
  203. RCurrency = row["rCurrency"].ToString(),
  204. LocalAmount = row["localAmount"].ToString(),
  205. Amount = row["amount"].ToString(),
  206. ServiceCharge = row["serviceCharge"].ToString(),
  207. RCommission = row["rCommission"].ToString(),
  208. ExchangeRate = row["exchangeRate"].ToString(),
  209. RefNo = row["refNo"].ToString(),
  210. Remarks = row["remarks"].ToString(),
  211. Source = row["source"].ToString(),
  212. NewAccount = row["newAccount"].ToString(),
  213. customerDOB = row["customerDOB"].ToString()
  214. };
  215. var drApi = new GlobalBankAPI().CreateTransaction(user, sendTxn, processId);
  216. dr.SetError(drApi.ErrorCode, drApi.Msg, drApi.Id);
  217. dr.TpErrorCode = drApi.TpErrorCode;
  218. }
  219. return dr;
  220. }
  221. private DataRow GetTxnDetail(string user, string id, bool reprocessMode)
  222. {
  223. var sql = "EXEC proc_ws_globalBank ";
  224. if (reprocessMode)
  225. sql += " @flag='txnDetail-rp'";
  226. else
  227. sql += " @flag='txnDetail'";
  228. sql += ",@user=" + FilterString(user);
  229. sql += ",@id=" + FilterString(id);
  230. return ExecuteDataRow(sql);
  231. }
  232. private DataTable GetTxnStatusDetail(string user, string controlNo)
  233. {
  234. string sql = "EXEC proc_transactionUtility @flag='gbl-a'";
  235. sql += ",@user=" + FilterString(user);
  236. sql += ",@controlNo=" + FilterString(controlNo);
  237. //var sql = string.Format("EXEC proc_transactionUtility @flag='gbl-a',@user={0},@controlNo={1}" + FilterString(user), FilterString(controlNo));
  238. return ExecuteDataTable(sql);
  239. }
  240. private DbResult CancelTxn(string user, string controlNo, string remarks)
  241. {
  242. var sql = string.Format("EXEC proc_ws_globalBank @flag = 'c',@user={0},@controlNo={1},@remarks={2}"
  243. , FilterString(user)
  244. , FilterString(controlNo)
  245. , FilterString(remarks));
  246. return ParseDbResult(sql);
  247. }
  248. private DbResult Update(string user, string id, string controlNo2, DbResult dr, bool reprocessMode)
  249. {
  250. var flag = reprocessMode ? "rp-re" : "approve";
  251. var sql = string.Format("EXEC proc_ws_globalBank @flag='{0}', @user={1},@id={2},@controlNo2={3},@errorCode={4}, @errorMsg={5}, @tpErrorCode={6}"
  252. , flag
  253. , FilterString(user)
  254. , FilterString(id)
  255. , FilterString(controlNo2)
  256. , FilterString(dr.ErrorCode)
  257. , FilterString(dr.Msg)
  258. , FilterString(dr.TpErrorCode)
  259. );
  260. return ParseDbResult(sql);
  261. }
  262. private DbResult UpdateNewAccountFlag(string user, string controlNo)
  263. {
  264. var sql = string.Format("EXEC proc_ws_globalBank @flag = 'uaf',@user={0},@controlNo={1}", FilterString(user), FilterString(controlNo));
  265. return ParseDbResult(sql);
  266. }
  267. private DbResult UpdateTroubleTicket(string user, string id, string controlNo, string rNameIME, string rNameGbl)
  268. {
  269. var sql = string.Format("EXEC proc_ws_globalBank @flag='updateTT',@user={0}, @id={1}, @controlNo={2}, @rNameIME={3}, @rNameGbl={4}"
  270. , FilterString(user)
  271. , FilterString(id)
  272. , FilterString(controlNo)
  273. , FilterString(rNameIME)
  274. , FilterString(rNameGbl)
  275. );
  276. return ParseDbResult(sql);
  277. }
  278. private bool ValidateBankAccount(string user, string accountNo, string accountNameIME, out string accountNameGbl)
  279. {
  280. var _acctNameGbl = "";
  281. bool res = true;
  282. var response = new GlobalBankAPI().GetAccountDetail(user, accountNo);
  283. if (response.ErrorCode.Equals("0"))
  284. {
  285. if (response.Msg.ToUpper().Replace(" ", "") == accountNameIME.ToUpper().Replace(" ", ""))
  286. res = true;
  287. else
  288. res = false;
  289. _acctNameGbl = response.Msg.ToUpper();
  290. }
  291. accountNameGbl = _acctNameGbl;
  292. return res;
  293. }
  294. #endregion
  295. public DataTable GetDTTransactionForSync(string User, string Date)
  296. {
  297. var sql = string.Format("EXEC proc_ws_globalBank @flag = 'listForSync', @syncDate={0}, @user={1}", FilterString(Date), FilterString(User));
  298. return ExecuteDataTable(sql);
  299. }
  300. }
  301. }