public async Task <ActionResult <List <GetPaymentResponse> > > GetPayments([FromQuery] GetPaymentsFilter filter)
 {
     return(Ok(await _paymentService.GetAllPayments(Account, filter)));
 }
Exemple #2
0
        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));
        }