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.

356 lines
18 KiB

12 months ago
12 months ago
12 months ago
12 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
11 months ago
12 months ago
11 months ago
11 months ago
  1. using CustomerOnlineV2.Api.API.TPApi;
  2. using CustomerOnlineV2.Common.Helper;
  3. using CustomerOnlineV2.Common.Models;
  4. using CustomerOnlineV2.Common.Models.AccountModel;
  5. using CustomerOnlineV2.Common.Models.HomeModel;
  6. using CustomerOnlineV2.Common.Models.TransactionModel;
  7. using CustomerOnlineV2.Repository.Repository.TransactionRepository;
  8. using Microsoft.Extensions.Logging;
  9. using Newtonsoft.Json;
  10. namespace CustomerOnlineV2.Business.Business.TransactionBusiness
  11. {
  12. public class TransactionBusiness : ITransactionBusiness
  13. {
  14. private readonly ILogger<TransactionBusiness> _logger;
  15. private readonly ITransactionRepository _transactionRepo;
  16. private readonly ITPApiService _tpApi;
  17. public TransactionBusiness(ILogger<TransactionBusiness> logger, ITransactionRepository transactionRepo, ITPApiService tpApi)
  18. {
  19. _logger = logger;
  20. _transactionRepo = transactionRepo;
  21. _tpApi = tpApi;
  22. }
  23. public async Task<ExrateResponse> DoCalculation(SendTransactionModel calcRequest, LoginResponse loginDetails)
  24. {
  25. ExrateResponse _response = new ExrateResponse();
  26. _logger.LogDebug("TRANSACTIONBUSINESS | DOCALCULATION | REQUEST | " + JsonConvert.SerializeObject(calcRequest));
  27. _response = ValidateExrateRequest(calcRequest);
  28. if (_response.ResponseCode == ResponseHelper.SUCCESS)
  29. {
  30. ExratePayoutDetailsModel _partnerDetails = await _transactionRepo.GetPayoutDetails(calcRequest, loginDetails);
  31. ExrateCalculateRequestModel _request = GenerateExrateParams(calcRequest, loginDetails, _partnerDetails);
  32. _response = await _tpApi.GetExRate(_request);
  33. _response.ProcessId = calcRequest.ProcessId;
  34. _response.tpExRate = _partnerDetails.TpExRate;
  35. }
  36. return _response;
  37. }
  38. public async Task<SendMoneyResponse> SendMoney(SendTransactionModel sendMoneyRequest, LoginResponse loginDetails)
  39. {
  40. SendMoneyResponse _response = new SendMoneyResponse();
  41. _logger.LogDebug("TRANSACTIONBUSINESS | SENDMONEY | REQUEST | " + JsonConvert.SerializeObject(sendMoneyRequest));
  42. _response = ValidateSendMoneyRequest(sendMoneyRequest);
  43. if (_response.ResponseCode == ResponseHelper.SUCCESS)
  44. {
  45. SendMoneyRequestModel _request = GenerateSendMoneyParams(sendMoneyRequest, loginDetails);
  46. _response = await _tpApi.SendMoney(_request);
  47. }
  48. return _response;
  49. }
  50. public async Task<SendMoneySuccessModel> GetTransactionDetails(string id, LoginResponse loginDetails)
  51. {
  52. return await _transactionRepo.GetTransactionDetails(id, loginDetails);
  53. }
  54. public async Task<TransactionDetailModel> GetReceiptData(string id, LoginResponse loginDetails)
  55. {
  56. return await _transactionRepo.GetReceiptData(id, loginDetails);
  57. }
  58. public async Task<SendMoneySuccessModel> SaveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
  59. {
  60. return await _transactionRepo.SaveTranData(tranData, loginDetails);
  61. }
  62. public async Task<SendMoneySuccessModel> UpdateTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
  63. {
  64. return await _transactionRepo.UpdateTranData(tranData, loginDetails);
  65. }
  66. private SendMoneyRequestModel GenerateSendMoneyParams(SendTransactionModel sendMoneyRequest, LoginResponse loginDetails)
  67. {
  68. return new SendMoneyRequestModel
  69. {
  70. SenderId = loginDetails.UserId,
  71. SIpAddress = sendMoneyRequest.IpAddress,
  72. IsRealtime = "false",
  73. RequestedBy = "online",
  74. Receiver = new Common.Models.TransactionModel.ReceiverModel { ReceiverId = sendMoneyRequest.Receiver },
  75. CDDI = new CDDIModel
  76. {
  77. PurposeOfRemittance = sendMoneyRequest.PurposeOfRemit,
  78. SourceOfFund = sendMoneyRequest.SourceOfFund,
  79. },
  80. SCountryId = Utilities.ReadFromAppSettings("OnlineAgent:SendingCountry"),
  81. PCountryId = sendMoneyRequest.ReceivingCountry,
  82. DeliveryMethodId = sendMoneyRequest.DeliveryMethod,
  83. CollCurr = Utilities.ReadFromAppSettings("OnlineAgent:CollCurrency"),
  84. PayoutCurr = sendMoneyRequest.PayoutCurrency,
  85. CollAmt = sendMoneyRequest.CollectAmount,
  86. PayoutAmt = sendMoneyRequest.PayoutAmount,
  87. TransferAmt = sendMoneyRequest.TransferAmount,
  88. ServiceCharge = sendMoneyRequest.ServiceCharge,
  89. ExRate = sendMoneyRequest.ExRate,
  90. CalBy = sendMoneyRequest.CalcBy,
  91. TpPCurr = sendMoneyRequest.PayoutCurrency,
  92. PayOutPartnerId = sendMoneyRequest.PayoutPartner,
  93. ForexSessionId = sendMoneyRequest.ForexSessionId,
  94. PaymentType = "wallet",
  95. SchemeId = sendMoneyRequest.SchemeId,
  96. TpExRate = sendMoneyRequest.TpExRate,
  97. ProcessId = sendMoneyRequest.ProcessId,
  98. UserName = loginDetails.UserName,
  99. ProviderId = "online",
  100. DiscountedFee = sendMoneyRequest.DiscountFee,
  101. };
  102. }
  103. private ExrateCalculateRequestModel GenerateExrateParams(SendTransactionModel calcRequest, LoginResponse loginDetails, ExratePayoutDetailsModel partnerDetails)
  104. {
  105. return new ExrateCalculateRequestModel()
  106. {
  107. RequestedBy = "mobile",
  108. SCountry = Utilities.ReadFromAppSettings("OnlineAgent:SendingCountry"),
  109. SSuperAgent = Utilities.ReadFromAppSettings("OnlineAgent:SuperAgentId"),
  110. SBranch = Utilities.ReadFromAppSettings("OnlineAgent:BranchId"),
  111. CollCurrency = Utilities.ReadFromAppSettings("OnlineAgent:CollCurrency"),
  112. PayoutPartner = partnerDetails.PayoutPartner,
  113. PCountry = calcRequest.ReceivingCountry,
  114. PCountryName = partnerDetails.PayoutCountryName,
  115. pCountryCode = partnerDetails.PayoutCountryCode,
  116. PCurrency = partnerDetails.PayoutCurrency,
  117. SCurrency = Utilities.ReadFromAppSettings("OnlineAgent:CollCurrency"),
  118. CAmount = calcRequest.CollectAmount,
  119. PAmount = calcRequest.PayoutAmount,
  120. ServiceType = calcRequest.DeliveryMethod,
  121. CalcBy = calcRequest.CalcBy,
  122. PaymentType = "wallet",
  123. IsManualSc = "false",
  124. ManualSc = "0",
  125. IsExRateCalcByPartner = "false",
  126. ProcessFor = Utilities.ReadFromAppSettings("OnlineAgent:ProcessFor"),
  127. ProcessId = calcRequest.ProcessId,
  128. UserName = loginDetails.UserName,
  129. SessionId = calcRequest.ProcessId,
  130. SchemeId = calcRequest.SchemeId,
  131. TpExRate = partnerDetails.TpExRate,
  132. DiscountedFee = calcRequest.DiscountFee
  133. };
  134. }
  135. private SendMoneyResponse ValidateSendMoneyRequest(SendTransactionModel sendMoneyRequest)
  136. {
  137. SendMoneyResponse _response = new SendMoneyResponse();
  138. _response.ResponseCode = ResponseHelper.SUCCESS;
  139. _response.ResponseMessage = ResponseMessageHelper.SUCCESS;
  140. if (string.IsNullOrEmpty(sendMoneyRequest.CalcBy))
  141. {
  142. _response.ResponseCode = ResponseHelper.FAILED;
  143. _response.ResponseMessage = "Param calcBy can not be emoty!";
  144. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  145. }
  146. else if (sendMoneyRequest.CalcBy != "c" || (sendMoneyRequest.CalcBy != "p"))
  147. {
  148. _response.ResponseCode = ResponseHelper.FAILED;
  149. _response.ResponseMessage = "Param calcBy have invalid value!";
  150. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  151. }
  152. else if (string.IsNullOrEmpty(sendMoneyRequest.ReceivingCountry))
  153. {
  154. _response.ResponseCode = ResponseHelper.FAILED;
  155. _response.ResponseMessage = "Param ReceivingCountry can not be emoty!";
  156. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  157. }
  158. else if (string.IsNullOrEmpty(sendMoneyRequest.DeliveryMethod))
  159. {
  160. _response.ResponseCode = ResponseHelper.FAILED;
  161. _response.ResponseMessage = "Param DeliveryMethod can not be emoty!";
  162. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  163. }
  164. else if (string.IsNullOrEmpty(sendMoneyRequest.CollectAmount))
  165. {
  166. _response.ResponseCode = ResponseHelper.FAILED;
  167. _response.ResponseMessage = "Params CollectAmount can not be emoty!";
  168. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  169. }
  170. else if (string.IsNullOrEmpty(sendMoneyRequest.PayoutAmount))
  171. {
  172. _response.ResponseCode = ResponseHelper.FAILED;
  173. _response.ResponseMessage = "Params PayoutAmount can not be emoty!";
  174. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  175. }
  176. else if (string.IsNullOrEmpty(sendMoneyRequest.SchemeId))
  177. {
  178. _response.ResponseCode = ResponseHelper.FAILED;
  179. _response.ResponseMessage = "Param SchemeId can not be emoty!";
  180. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  181. }
  182. else if (Utilities.TryParseDecimal(sendMoneyRequest.CollectAmount) <= 0)
  183. {
  184. _response.ResponseCode = ResponseHelper.FAILED;
  185. _response.ResponseMessage = "Param CollectAmount has invalid value!";
  186. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  187. }
  188. else if (Utilities.TryParseDecimal(sendMoneyRequest.PayoutAmount) <= 0)
  189. {
  190. _response.ResponseCode = ResponseHelper.FAILED;
  191. _response.ResponseMessage = "Param PayoutAmount has invalid value!";
  192. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  193. }
  194. else if (sendMoneyRequest.CalcBy == "c" && Utilities.TryParseDecimal(sendMoneyRequest.CollectAmount) <= 0)
  195. {
  196. _response.ResponseCode = ResponseHelper.FAILED;
  197. _response.ResponseMessage = "Param CollectAmount has invalid value!";
  198. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  199. }
  200. else if (sendMoneyRequest.CalcBy == "p" && Utilities.TryParseDecimal(sendMoneyRequest.PayoutAmount) <= 0)
  201. {
  202. _response.ResponseCode = ResponseHelper.FAILED;
  203. _response.ResponseMessage = "Param PayoutAmount has invalid value!";
  204. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  205. }
  206. else if (string.IsNullOrEmpty(sendMoneyRequest.Receiver))
  207. {
  208. _response.ResponseCode = ResponseHelper.FAILED;
  209. _response.ResponseMessage = "Params Receiver can not be emoty!";
  210. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  211. }
  212. else if (string.IsNullOrEmpty(sendMoneyRequest.PurposeOfRemit))
  213. {
  214. _response.ResponseCode = ResponseHelper.FAILED;
  215. _response.ResponseMessage = "Params PurposeOfRemit can not be emoty!";
  216. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  217. }
  218. else if (Convert.ToBoolean(sendMoneyRequest.TermsAndConditions) != true)
  219. {
  220. _response.ResponseCode = ResponseHelper.FAILED;
  221. _response.ResponseMessage = "Param TermsAndConditions has invalid value!";
  222. _logger.LogError("TRANSACTIONBUSINESS | SENDMONEY.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  223. }
  224. return _response;
  225. }
  226. private ExrateResponse ValidateExrateRequest(SendTransactionModel calcRequest)
  227. {
  228. ExrateResponse _response = new ExrateResponse();
  229. _response.ResponseCode = ResponseHelper.SUCCESS;
  230. _response.ResponseMessage = ResponseMessageHelper.SUCCESS;
  231. if (string.IsNullOrEmpty(calcRequest.CalcBy))
  232. {
  233. _response.ResponseCode = ResponseHelper.FAILED;
  234. _response.ResponseMessage = "Param calcBy can not be emoty!";
  235. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  236. }
  237. else if (calcRequest.CalcBy != "c" || calcRequest.CalcBy != "p")
  238. {
  239. _response.ResponseCode = ResponseHelper.FAILED;
  240. _response.ResponseMessage = "Param calcBy have invalid value!";
  241. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  242. }
  243. else if (string.IsNullOrEmpty(calcRequest.ReceivingCountry))
  244. {
  245. _response.ResponseCode = ResponseHelper.FAILED;
  246. _response.ResponseMessage = "Param ReceivingCountry can not be emoty!";
  247. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  248. }
  249. else if (string.IsNullOrEmpty(calcRequest.DeliveryMethod))
  250. {
  251. _response.ResponseCode = ResponseHelper.FAILED;
  252. _response.ResponseMessage = "Param DeliveryMethod can not be emoty!";
  253. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  254. }
  255. else if (string.IsNullOrEmpty(calcRequest.CollectAmount))
  256. {
  257. if (string.IsNullOrEmpty(calcRequest.PayoutAmount))
  258. {
  259. _response.ResponseCode = ResponseHelper.FAILED;
  260. _response.ResponseMessage = "Params CollectAmount and PayoutAmount can not be emoty!";
  261. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  262. }
  263. }
  264. else if (string.IsNullOrEmpty(calcRequest.SchemeId))
  265. {
  266. _response.ResponseCode = ResponseHelper.FAILED;
  267. _response.ResponseMessage = "Param SchemeId can not be emoty!";
  268. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  269. }
  270. else if (Utilities.TryParseDecimal(calcRequest.CollectAmount) <= 0)
  271. {
  272. if (Utilities.TryParseDecimal(calcRequest.PayoutAmount) <= 0)
  273. {
  274. _response.ResponseCode = ResponseHelper.FAILED;
  275. _response.ResponseMessage = "Param CollectAmount or PayoutAmount has invalid value!";
  276. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  277. }
  278. }
  279. else if (calcRequest.CalcBy == "c" && Utilities.TryParseDecimal(calcRequest.CollectAmount) <= 0)
  280. {
  281. _response.ResponseCode = ResponseHelper.FAILED;
  282. _response.ResponseMessage = "Param CollectAmount has invalid value!";
  283. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  284. }
  285. else if (calcRequest.CalcBy == "p" && Utilities.TryParseDecimal(calcRequest.PayoutAmount) <= 0)
  286. {
  287. _response.ResponseCode = ResponseHelper.FAILED;
  288. _response.ResponseMessage = "Param PayoutAmount has invalid value!";
  289. _logger.LogError("TRANSACTIONBUSINESS | DOCALCULATION.VALIDATEEXRATEREQUEST | REQUEST | " + JsonConvert.SerializeObject(_response));
  290. }
  291. return _response;
  292. }
  293. public async Task<CustomerTransactionList> GetTranData(LoginResponse loginDetails)
  294. {
  295. return await _transactionRepo.GetTranData(loginDetails);
  296. }
  297. public async Task<CustomerTransactionList> GetTransactionReportList(LoginResponse loginDetails , CustomerTransaction model)
  298. {
  299. return await _transactionRepo.GetTransactionReportList(loginDetails, model);
  300. }
  301. public async Task<CustomerNotificationModel> GetRewardPoints(LoginResponse loginDetails)
  302. {
  303. return (CustomerNotificationModel)await _transactionRepo.GetRewardPoints(loginDetails);
  304. }
  305. }
  306. }