/// <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(CreateWalletDeductionCommand request, CancellationToken cancellationToken) { try { var walletDeductionRequest = mapper.Map <Walletdeduction>(request.Request); var Category = await repository.MultiDetails.GetMultiDetailsByCode("CATEGORY"); if (Category != null && Category.Count > 0) { foreach (var item in Category) { if (item.Value.Trim().ToUpper() == request.Request.CategoryValue.Trim().ToUpper()) { walletDeductionRequest.CategoryId = item.Id; break; } } } bool IsCPL = false, IsCommission = false; if (walletDeductionRequest.DeductedAmount == 0 && walletDeductionRequest.CategoryId > 0) { Core.DTO.Requests.WalletRule.WalletRuleParameter Parameter = new Core.DTO.Requests.WalletRule.WalletRuleParameter(); Parameter.Value = walletDeductionRequest.CategoryId; Parameter.IsForServiceCategory = true; var rule = await repository.WalletRule.GetAllWalletRule(Parameter); if (rule != null && rule.Count > 0) { if (rule[0].Cplamount > 0) { walletDeductionRequest.DeductedAmount = (decimal)rule[0].Cplamount; IsCPL = true; } else if (rule[0].CommissionAmount > 0) { walletDeductionRequest.DeductedAmount = (decimal)rule[0].CommissionAmount; IsCommission = true; } } } else { if (request.Request.LeadMode.Trim().ToUpper() == "CPL") { IsCPL = true; } else if (request.Request.LeadMode.Trim().ToUpper() == "COMMISSION") { IsCommission = true; } //else if(request.Request.LeadMode.Trim().ToUpper() == "BOTH") //{ //} } WalletsParameter WP = new WalletsParameter(); WP.VendorId = walletDeductionRequest.VendorId; var walletResponse = await repository.Wallets.GetAllWallets(WP); if (walletResponse != null && walletResponse.Count > 0) { var Status = await repository.MultiDetails.GetMultiDetailByMultiDetailId(walletResponse[0].Status); if (Status != null && Status.Value.Trim().ToUpper() != "DEDUCT") { return(new APIResponse(walletDeductionRequest, HttpStatusCode.NoContent)); } decimal deductedBalance = ((walletResponse[0].Balance) - (walletDeductionRequest.DeductedAmount)); walletResponse[0].Balance = deductedBalance; repository.Wallets.UpdateWallet(walletResponse[0]); walletDeductionRequest.WalletBalance = deductedBalance; repository.WalletDeduction.CreateWalletDeduction(walletDeductionRequest); Core.Entity.Transactions transaction = new Core.Entity.Transactions(); transaction.WalletId = walletResponse[0].Id; if (IsCPL) { transaction.Particulars = request.Request.LeadIdNumber + "-CPL deducted"; } else if (IsCommission) { transaction.Particulars = request.Request.LeadIdNumber + "Commission deducted"; } else { transaction.Particulars = "Wallet deducted"; } transaction.TransactionDate = DateTime.UtcNow; var StatusData = await repository.MultiDetails.GetMultiDetailsByCode("PAYMENT TYPE"); if (StatusData != null && StatusData.Count > 0) { foreach (var item in StatusData) { if (item.Value.Trim().ToUpper() == "DEBIT") { transaction.TransactionType = item.Id; break; } } } transaction.Amount = walletDeductionRequest.DeductedAmount; transaction.WalletBalance = deductedBalance; transaction.CreatedBy = walletDeductionRequest.CreatedBy; transaction.CreatedAt = DateTime.UtcNow; repository.Transactions.CreateTransactions(transaction); await repository.SaveAsync(); } return(new APIResponse(walletDeductionRequest, HttpStatusCode.Created)); } catch (Exception ex) { logger.Error(ex, "Exception in method 'CreateWalletDeductionHandler()'"); 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(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(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)); } }