public async Task <ActionResult <List <GetPaymentResponse> > > GetPayments([FromQuery] GetPaymentsFilter filter) { return(Ok(await _paymentService.GetAllPayments(Account, filter))); }
public async Task <List <GetPaymentResponse> > GetAllPayments(Account account, GetPaymentsFilter filter) { // prepare filter predicate var predicate = PredicateBuilder.New <Payment>(true); if (!string.IsNullOrEmpty(filter?.SearchString)) { // Special case for Quote Ref Number. Quote Ref Number is displayed with # to the end user. if (filter.SearchString.StartsWith("#")) { // If searchString starts with # it gives a sign that user wants to search by Quote Ref Number. // We need to remove # since it is not stored in DB. predicate = predicate.Or(p => p.Quote.ReferenceNumber.ToString().ToLower().Contains(filter.SearchString.Remove(0, 1).ToLower())); } else { predicate = predicate.Or(p => p.Provider.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.TransactionId.ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Amount.ToString().ToLower().Contains(filter.SearchString.ToLower())); predicate = predicate.Or(p => p.Customer.CompanyName.ToLower().Contains(filter.SearchString.ToLower())); } } if (account.Role == Role.Customer) { // customer can get only his own payments var customer = await _unitOfWork.Customers.GetByAccountId(account.Id); predicate = predicate.And(p => p.CustomerId == customer.Id); } if (!string.IsNullOrEmpty(filter?.DateRange)) { switch (filter.DateRange) { case "30-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-30)); break; case "7-days": predicate = predicate.And(p => p.Created >= DateTime.UtcNow.AddDays(-7)); break; case "today": predicate = predicate.And(p => p.Created.Date == DateTime.UtcNow.Date); break; } } if (filter.Status is not null) { predicate = predicate.And(p => p.Status.Equals(filter.Status)); } var payment = await _unitOfWork.Payments.FindWithQuoteAndCustomer(predicate); return(_mapper.Map <List <GetPaymentResponse> >(payment)); }