/// <summary> /// Handles a request /// </summary> /// <param name="request">The request</param> /// <param name="cancellationToken">Cancellation token</param> /// <returns> /// Response from the request /// </returns> public async Task <APIResponse> Handle(GetAllTransactionsQuery request, CancellationToken cancellationToken) { try { if (request.TransactionsParameter.IsForVendor) { Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter(); WP.VendorId = request.TransactionsParameter.Value; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (walletResponse != null && walletResponse.Count > 0) { request.TransactionsParameter.Value = walletResponse[0].Id; } } var transactions = await repository.Transactions.GetAllTransactions(request.TransactionsParameter); return(new APIResponse(transactions, HttpStatusCode.OK)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'GetAllTransactionsHandler()'"); var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message; return(new APIResponse(exMessage, HttpStatusCode.InternalServerError)); } }
/// <summary> /// Handles a request /// </summary> /// <param name="request">The request</param> /// <param name="cancellationToken">Cancellation token</param> /// <returns> /// Response from the request /// </returns> public async Task <APIResponse> Handle(UpdateRefundCommand request, CancellationToken cancellationToken) { try { var refund = await repository.Refund.GetRefundById(request.RefundId); if (refund == null) { return(new APIResponse(HttpStatusCode.NotFound)); } if (request.IsApproved == true || request.IsRejected == true) { string status = string.Empty; if (request.IsApproved) { status = "APPROVE"; } else if (request.IsRejected) { status = "REJECT"; } var BHstatus = await repository.MultiDetails.GetMultiDetailsByCode("BH STATUS"); if (BHstatus != null && BHstatus.Count > 0) { foreach (var type in BHstatus) { if (type.Value.Trim().ToUpper() == status) { request.Request.Bhstatus = type.Id; break; } } } } var refundRequest = mapper.Map(request.Request, refund); decimal Balance = 0; Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter(); WP.VendorId = refund.RaisedBy; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (walletResponse != null && walletResponse.Count > 0) { Balance = walletResponse[0].Balance; } if (request.IsApproved) { Paymentbook paymentbook = new Paymentbook(); paymentbook.EntryDate = DateTime.UtcNow; paymentbook.VendorId = refund.RaisedBy; var PaymentType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE"); if (PaymentType != null && PaymentType.Count > 0) { foreach (var item in PaymentType) { if (item.Value.Trim().ToUpper() == "DEBIT") { paymentbook.PaymentType = item.Id; break; } } } var PaymentStatus = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT STATUS"); if (PaymentStatus != null && PaymentStatus.Count > 0) { foreach (var item in PaymentStatus) { if (item.Value.Trim().ToUpper() == "PAID") { paymentbook.PaymentStatus = item.Id; break; } } } var PaymentMode = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT MODE"); if (PaymentMode != null && PaymentMode.Count > 0) { foreach (var item in PaymentMode) { if (item.Value.Trim().ToUpper() == "CASH") { paymentbook.PaymentMode = item.Id; break; } } } paymentbook.PaymentAmount = (decimal)refund.ApprovedAmount; paymentbook.PaymentDate = DateTime.UtcNow; paymentbook.WalletBalance = Balance; paymentbook.CreatedBy = (int)refundRequest.UpdatedBy; paymentbook.CreatedAt = DateTime.UtcNow; repository.PaymentBook.CreatePaymentBook(paymentbook); } refundRequest.WalletBalance = Balance; repository.Refund.UpdateRefund(refundRequest); await repository.SaveAsync(); return(new APIResponse(HttpStatusCode.NoContent)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'UpdateRefundHandler()'"); var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message; return(new APIResponse(exMessage, HttpStatusCode.InternalServerError)); } }
/// <summary> /// Handles a request /// </summary> /// <param name="request">The request</param> /// <param name="cancellationToken">Cancellation token</param> /// <returns> /// Response from the request /// </returns> public async Task <APIResponse> Handle(CreateWalletAdjustmentCommand request, CancellationToken cancellationToken) { try { var walletAdjustmentRequest = mapper.Map <Walletadjustment>(request.Request); Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter(); WP.VendorId = walletAdjustmentRequest.VendorId; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (walletResponse != null && walletResponse.Count > 0) { decimal Balance = 0; var AdjustmentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(walletAdjustmentRequest.AdjustmentType); Core.Entity.Transactions transaction = new Core.Entity.Transactions(); transaction.WalletId = walletResponse[0].Id; transaction.TransactionDate = DateTime.UtcNow; transaction.Amount = walletAdjustmentRequest.AdjustmentAmount; var StatusData = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE"); if (AdjustmentType.Value.Trim().ToUpper() == "ADD WALLET") { Balance = walletResponse[0].Balance + walletAdjustmentRequest.AdjustmentAmount; transaction.Particulars = "Wallet credited by adjustment"; if (StatusData != null && StatusData.Count > 0) { foreach (var item in StatusData) { if (item.Value.ToUpper() == "CREDIT") { transaction.TransactionType = item.Id; break; } } } } else { Balance = walletResponse[0].Balance - walletAdjustmentRequest.AdjustmentAmount; transaction.Particulars = "Wallet debited by adjustment"; if (StatusData != null && StatusData.Count > 0) { foreach (var item in StatusData) { if (item.Value.ToUpper() == "DEBIT") { transaction.TransactionType = item.Id; break; } } } } transaction.WalletBalance = Balance; transaction.CreatedBy = walletAdjustmentRequest.CreatedBy; transaction.CreatedAt = DateTime.UtcNow; repository.Transactions.CreateTransactions(transaction); walletResponse[0].Balance = Balance; repository.Wallets.UpdateWallet(walletResponse[0]); } repository.WalletAdjustment.CreateWalletAdjustment(walletAdjustmentRequest); await repository.SaveAsync(); return(new APIResponse(walletAdjustmentRequest, HttpStatusCode.Created)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'CreateWalletAdjustmentHandler()'"); var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message; return(new APIResponse(exMessage, HttpStatusCode.InternalServerError)); } }
/// <summary> /// Handles a request /// </summary> /// <param name="request">The request</param> /// <param name="cancellationToken">Cancellation token</param> /// <returns> /// Response from the request /// </returns> public async Task <APIResponse> Handle(UpdatePaymentBookCommand request, CancellationToken cancellationToken) { try { var paymentBook = await repository.PaymentBook.GetPaymentBookById(request.PaymentBookId); if (paymentBook == null) { return(new APIResponse(HttpStatusCode.NotFound)); } request.Request.PaymentRefNumber = paymentBook.PaymentRefNumber; var PaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBook.PaymentStatus); var PaymentBookRequest = mapper.Map(request.Request, paymentBook); if (PaymentStatus.Value.Trim().ToUpper() != "PAID") { var CurrentPaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(PaymentBookRequest.PaymentStatus); var PaymentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(PaymentBookRequest.PaymentType); if (CurrentPaymentStatus.Value.Trim().ToUpper() == "PAID" && PaymentType.Value.Trim().ToUpper() == "CREDIT") { Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter(); WP.VendorId = PaymentBookRequest.VendorId; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (walletResponse != null && walletResponse.Count > 0) { walletResponse[0].Balance += PaymentBookRequest.PaymentAmount; repository.Wallets.UpdateWallet(walletResponse[0]); var PackageType = await repository.MultiDetails.GetMultiDetailByMultiDetailId((int)PaymentBookRequest.PackageType); Core.Entity.Transactions transaction = new Core.Entity.Transactions(); transaction.WalletId = walletResponse[0].Id; transaction.ReferenceNo = PaymentBookRequest.PaymentRefNumber; if (PackageType.Value.Trim().ToUpper() == "SUBSCRIPTION") { transaction.Particulars = request.Request.PackageName + "-taken (" + PackageType.Value + ")"; } else if (PackageType.Value.Trim().ToUpper() == "TOP-UP") { transaction.Particulars = request.Request.PackageName + "-done (" + PackageType.Value + ")"; } else { transaction.Particulars = PackageType.Value; } transaction.TransactionDate = DateTime.UtcNow; var TransactionType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE"); if (TransactionType != null && TransactionType.Count > 0) { foreach (var type in TransactionType) { if (type.Value.ToUpper() == "CREDIT") { transaction.TransactionType = type.Id; break; } } } transaction.Amount = PaymentBookRequest.PaymentAmount; transaction.WalletBalance = walletResponse[0].Balance; transaction.CreatedBy = PaymentBookRequest.CreatedBy; transaction.CreatedAt = DateTime.UtcNow; repository.Transactions.CreateTransactions(transaction); } } } repository.PaymentBook.UpdatePaymentBook(PaymentBookRequest); await repository.SaveAsync(); return(new APIResponse(HttpStatusCode.NoContent)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'UpdatePaymentBookHandler()'"); var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message; return(new APIResponse(exMessage, HttpStatusCode.InternalServerError)); } }
/// <summary> /// Handles a request /// </summary> /// <param name="request">The request</param> /// <param name="cancellationToken">Cancellation token</param> /// <returns> /// Response from the request /// </returns> public async Task <APIResponse> Handle(CreatePaymentBookCommand request, CancellationToken cancellationToken) { try { //Random string generator var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; var stringChars = new char[8]; var random = new Random(); for (int i = 0; i < stringChars.Length; i++) { stringChars[i] = chars[random.Next(chars.Length)]; } var finalString = new String(stringChars); //Random string generator decimal Balance = 0; ArrayList WalletData = new ArrayList(); foreach (var item in request.Request.Payment_Book) { var paymentBookRequest = mapper.Map <Paymentbook>(item); var PaymentStatus = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBookRequest.PaymentStatus); var PaymentType = await repository.MultiDetails.GetMultiDetailByMultiDetailId(paymentBookRequest.PaymentType); Core.DTO.Requests.Wallet.WalletsParameter WP = new Core.DTO.Requests.Wallet.WalletsParameter(); WP.VendorId = paymentBookRequest.VendorId; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (PaymentStatus.Value.Trim().ToUpper() == "PAID" && PaymentType.Value.Trim().ToUpper() == "CREDIT") { if (walletResponse != null && walletResponse.Count > 0) { if (paymentBookRequest.PaymentRefNumber.Trim() == string.Empty) { paymentBookRequest.PaymentRefNumber = "REF-" + finalString; } if (!WalletData.Contains(walletResponse[0].Id)) { WalletData.Add(walletResponse[0].Id); Balance = walletResponse[0].Balance + paymentBookRequest.PaymentAmount; } else { Balance += paymentBookRequest.PaymentAmount; } paymentBookRequest.WalletBalance = Balance; //repository.Wallets.UpdateWallet(walletResponse[0]); var PackageType = await repository.MultiDetails.GetMultiDetailByMultiDetailId((int)paymentBookRequest.PackageType); Core.Entity.Transactions transaction = new Core.Entity.Transactions(); transaction.WalletId = walletResponse[0].Id; transaction.ReferenceNo = paymentBookRequest.PaymentRefNumber; if (PackageType.Value.Trim().ToUpper() == "SUBSCRIPTION") { transaction.Particulars = item.PackageName + "-taken (" + PackageType.Value + ")"; } else if (PackageType.Value.Trim().ToUpper() == "TOP-UP") { transaction.Particulars = item.PackageName + "-done (" + PackageType.Value + ")"; } else { transaction.Particulars = PackageType.Value; } transaction.TransactionDate = DateTime.UtcNow; var TransactionType = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE"); if (TransactionType != null && TransactionType.Count > 0) { foreach (var type in TransactionType) { if (type.Value.ToUpper() == "CREDIT") { transaction.TransactionType = type.Id; break; } } } transaction.Amount = paymentBookRequest.PaymentAmount; transaction.WalletBalance = Balance; transaction.CreatedBy = paymentBookRequest.CreatedBy; transaction.CreatedAt = DateTime.UtcNow; repository.Transactions.CreateTransactions(transaction); } } else { if (walletResponse != null && walletResponse.Count > 0) { paymentBookRequest.WalletBalance = walletResponse[0].Balance; } if (paymentBookRequest.PaymentRefNumber.Trim() == string.Empty) { paymentBookRequest.PaymentRefNumber = "REF-" + finalString; } } repository.PaymentBook.CreatePaymentBook(paymentBookRequest); } if (WalletData.Count > 0 && Balance > 0) { var Wallet = await repository.Wallets.GetWalletById((int)WalletData[0]); Wallet.Balance = Balance; repository.Wallets.UpdateWallet(Wallet); } await repository.SaveAsync(); return(new APIResponse(HttpStatusCode.Created)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'CreatePaymentBookHandler()'"); var exMessage = ex.InnerException != null ? ex.InnerException.Message : ex.Message; return(new APIResponse(exMessage, HttpStatusCode.InternalServerError)); } }