Exemplo n.º 1
0
        public async Task <IActionResult> GetByPaymentsFilter(
            [Required][RowKey] string merchantId,
            IEnumerable <string> statuses,
            DateTime?dateFrom,
            DateTime?dateTo,
            string searchText,
            [GreaterThan(0)] int?take
            )
        {
            var statusesConverted = new List <InvoiceStatus>();

            if (statuses != null)
            {
                foreach (var status in statuses)
                {
                    try
                    {
                        statusesConverted.Add(status.Trim().ParseEnum <InvoiceStatus>());
                    }
                    catch (Exception)
                    {
                        return(BadRequest(ErrorResponse.Create($"Invoice status <{status}> is not valid")));
                    }
                }
            }

            var result = new GetByPaymentsFilterResponse();

            IReadOnlyList <Invoice> invoices = await _invoiceService.GetByFilterAsync(new InvoiceFilter
            {
                MerchantIds = new List <string> {
                    merchantId
                },
                Statuses = statusesConverted,
                DateFrom = dateFrom,
                DateTo   = dateTo
            });


            if (!string.IsNullOrWhiteSpace(searchText))
            {
                var s = searchText;
                invoices = invoices.Where(_ =>
                                          _.Number.Contains(s) || _.ClientName.Contains(s) || _.ClientEmail.Contains(s)).ToList();
            }

            if (take.HasValue)
            {
                result.HasMoreInvoices = invoices.Count > take.Value;
                invoices = invoices.OrderByDescending(x => x.CreatedDate).Take(take.Value).ToList();
            }
            else
            {
                invoices = invoices.OrderByDescending(x => x.CreatedDate).ToList();
            }

            result.Invoices = Mapper.Map <List <InvoiceModel> >(invoices);

            return(Ok(result));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> GetByPaymentsFilter(
            [Required][RowKey] string merchantId,
            IEnumerable <string> statuses,
            IEnumerable <string> processingErrors,
            DateTime?dateFrom,
            DateTime?dateTo,
            [Range(1, int.MaxValue)] int?take
            )
        {
            var statusesConverted = new List <PaymentRequestStatus>();

            if (statuses != null)
            {
                foreach (var status in statuses)
                {
                    try
                    {
                        statusesConverted.Add(status.Trim().ParseEnum <PaymentRequestStatus>());
                    }
                    catch (Exception)
                    {
                        return(BadRequest(ErrorResponse.Create(
                                              $"PaymentRequestStatus <{status}> is not valid. " +
                                              $"Valid values are: {string.Join(",", Enum.GetNames(typeof(PaymentRequestStatus)))}")));
                    }
                }
            }

            var processingErrorsConverted = new List <PaymentRequestProcessingError>();

            if (processingErrors != null)
            {
                foreach (var processingError in processingErrors)
                {
                    try
                    {
                        processingErrorsConverted.Add(processingError.Trim().ParseEnum <PaymentRequestProcessingError>());
                    }
                    catch (Exception)
                    {
                        return(BadRequest(ErrorResponse.Create(
                                              $"PaymentRequestProcessingError <{processingError}> is not valid. " +
                                              $"Valid values are: {string.Join(",", Enum.GetNames(typeof(PaymentRequestProcessingError)))}")));
                    }
                }
            }

            var paymentRequests = await _paymentRequestService.GetByFilterAsync(new PaymentsFilter
            {
                MerchantId       = merchantId,
                Statuses         = statusesConverted,
                ProcessingErrors = processingErrorsConverted,
                DateFrom         = dateFrom,
                DateTo           = dateTo
            });

            var result = new GetByPaymentsFilterResponse();

            if (take.HasValue)
            {
                result.HasMorePaymentRequests = paymentRequests.Count > take.Value;
                paymentRequests = paymentRequests.OrderByDescending(x => x.Timestamp).Take(take.Value).ToList();
            }
            else
            {
                paymentRequests = paymentRequests.OrderByDescending(x => x.Timestamp).ToList();
            }

            result.PaymeentRequests = paymentRequests;

            return(Ok(result));
        }