/// <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(CreateWalletRuleCommand request, CancellationToken cancellationToken) { try { var walletRuleRequest = mapper.Map <Walletrule>(request.Request); Core.DTO.Requests.WalletRule.WalletRuleParameter WP = new Core.DTO.Requests.WalletRule.WalletRuleParameter(); WP.Value = walletRuleRequest.ServiceCategoryId; WP.IsForServiceCategory = true; var walletRule = await repository.WalletRule.GetAllWalletRule(WP); if (walletRule == null || walletRule.Count == 0) { repository.WalletRule.CreateWalletRule(walletRuleRequest); await repository.SaveAsync(); return(new APIResponse(walletRuleRequest, HttpStatusCode.Created)); } else { return(new APIResponse(HttpStatusCode.NoContent)); } } catch (Exception ex) { logger.Error(ex, "Exception in method 'CreateWalletRuleHandler()'"); 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(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)); } }