public async Task ShouldReturnPayRunDetails()
        {
            _payRunGateway.Setup(g => g.GetPayRunAsync(It.IsAny <Guid>(), It.IsAny <PayRunFields>(), It.IsAny <bool>()))
            .ReturnsAsync(_payrun);
            var pagedInvoices = _fixture.Build <PagedList <PayRunInvoiceDomain> >()
                                .Without(p => p.Capacity)
                                .Create();

            _payRunInvoiceGateway
            .Setup(g => g.GetPayRunInvoicesSummaryAsync(It.IsAny <Guid>(), It.IsAny <PayRunDetailsQueryParameters>()))
            .ReturnsAsync(pagedInvoices);

            var requestParam = new PayRunDetailsQueryParameters()
            {
                PageNumber = 1, PageSize = 11
            };
            var expectedResponse = PayrunExtensions.CreateDetailsViewResponse(_payrun, pagedInvoices, pagedInvoices.PagingMetaData);
            var response         = await _useCase.ExecuteAsync(_payrun.Id, requestParam).ConfigureAwait(false);

            _payRunGateway.Verify(x => x.GetPayRunAsync
                                      (_payrun.Id, It.IsAny <PayRunFields>(), It.IsAny <bool>()), Times.Once);

            _payRunInvoiceGateway.Verify(x => x.GetPayRunInvoicesSummaryAsync
                                             (_payrun.Id, It.Is <PayRunDetailsQueryParameters>(d => d.PageSize == 11 && d.PageNumber == 1)), Times.Once);

            response.Should().BeEquivalentTo(expectedResponse);
        }
        public static IQueryable <PayrunInvoice> FilterPayRunInvoices(
            this IQueryable <PayrunInvoice> invoices, PayRunDetailsQueryParameters parameters, bool usePredicates)
        {
            var query = invoices;

            if (usePredicates)
            {
                // Explode search term to tokens
                var searchTokens    = Regex.Split(parameters.SearchTerm ?? string.Empty, "\\s+").ToList();
                var searchPredicate = PredicateBuilder.New <PayrunInvoice>(true);
                foreach (var searchToken in searchTokens)
                {
                    searchPredicate = searchPredicate.Or(e =>
                                                         EF.Functions.ILike(e.Invoice.ServiceUser.FirstName, $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.ServiceUser.LastName, $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.ServiceUser.HackneyId.ToString(), $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.Number, $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.Supplier.CedarReferenceNumber, $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.Supplier.CedarId.ToString(), $"%{searchToken}%") ||
                                                         EF.Functions.ILike(e.Invoice.Supplier.SupplierName ?? "", $"%{searchToken}%"));
                }
                query = query.Where(searchPredicate);
            }

            return(query.Where(invoice =>
                               (parameters.PackageType == null || invoice.Invoice.Package.PackageType == parameters.PackageType) &&
                               (parameters.InvoiceStatus == null || invoice.InvoiceStatus == parameters.InvoiceStatus) &&
                               (parameters.FromDate == null || invoice.Invoice.DateCreated >= parameters.FromDate) &&
                               (parameters.ToDate == null || invoice.Invoice.DateCreated < parameters.ToDate)));
        }
        public async Task <ActionResult <PagedResponse <HeldInvoiceDetailsResponse> > > GetHeldInvoices(
            [FromServices] IGetHeldInvoicesUseCase useCase, [FromQuery] PayRunDetailsQueryParameters parameters)
        {
            var res = await useCase.ExecuteAsync(parameters);

            return(Ok(res));
        }
        public async Task <ActionResult <PayRunDetailsViewResponse> > GetPayRunDetails(
            [FromServices] IGetPayRunDetailsUseCase useCase, [FromQuery] PayRunDetailsQueryParameters parameters,
            Guid id)
        {
            var res = await useCase.ExecuteAsync(id, parameters);

            return(Ok(res));
        }
        public async Task <PagedResponse <HeldInvoiceDetailsResponse> > ExecuteAsync(PayRunDetailsQueryParameters parameters)
        {
            // Get held invoices
            var payRunInvoices = await _payRunInvoiceGateway.GetHeldInvoicesAsync(parameters);

            var result = CreateResponse(payRunInvoices, payRunInvoices.PagingMetaData);

            return(result);
        }
        public async Task <PagedList <HeldInvoiceDetailsDomain> > GetHeldInvoicesAsync(
            PayRunDetailsQueryParameters parameters)
        {
            parameters.InvoiceStatus = InvoiceStatus.Held;
            var query = _dbContext.PayrunInvoices
                        .Where(pr => pr.Payrun.Status != PayrunStatus.Archived)
                        .FilterPayRunInvoices(parameters, _dbContext.SupportsPredicates)
                        .TrackChanges(false);

            var heldInvoices = await query
                               .Skip((parameters.PageNumber - 1) *parameters.PageSize)
                               .Take(parameters.PageSize)
                               .OrderBy(pi => pi.Payrun.DateCreated)
                               .Select(pi => new HeldInvoiceDetailsDomain
            {
                PayRunId      = pi.PayrunId,
                PayRunNumber  = pi.Payrun.Number,
                DateCreated   = pi.DateCreated,
                StartDate     = pi.Payrun.StartDate,
                EndDate       = pi.Payrun.EndDate,
                PayRunInvoice = new PayRunInvoiceDomain
                {
                    Id              = pi.Id,
                    InvoiceId       = pi.InvoiceId,
                    CarePackageId   = pi.Invoice.PackageId,
                    ServiceUserId   = pi.Invoice.ServiceUserId,
                    ServiceUserName =
                        $"{pi.Invoice.ServiceUser.FirstName} {pi.Invoice.ServiceUser.MiddleName ?? string.Empty} {pi.Invoice.ServiceUser.LastName}",
                    SupplierId         = pi.Invoice.Supplier.CedarId ?? pi.Invoice.SupplierId,
                    SupplierName       = pi.Invoice.Supplier.SupplierName,
                    InvoiceNumber      = pi.Invoice.Number,
                    PackageType        = pi.Invoice.Package.PackageType,
                    NetTotal           = pi.Invoice.NetTotal,
                    GrossTotal         = pi.Invoice.GrossTotal,
                    InvoiceStatus      = pi.InvoiceStatus,
                    AssignedBrokerName = pi.Invoice.Package.Broker.Name,
                    InvoiceItems       = pi.Invoice.Items.Select(ii => new PayRunInvoiceItemDomain
                    {
                        Id             = ii.Id,
                        Name           = ii.Name,
                        FromDate       = ii.FromDate,
                        ToDate         = ii.ToDate,
                        Cost           = ii.WeeklyCost,
                        Quantity       = ii.Quantity,
                        TotalCost      = ii.TotalCost,
                        ClaimCollector = ii.ClaimCollector,
                        PriceEffect    = ii.PriceEffect
                    })
                }
            }).ToListAsync();

            var heldInvoiceCount = await query.CountAsync();

            return(PagedList <HeldInvoiceDetailsDomain> .ToPagedList(heldInvoices, heldInvoiceCount, parameters.PageNumber,
                                                                     parameters.PageSize));
        }
Пример #7
0
        public async Task <PayRunDetailsViewResponse> ExecuteAsync(Guid payrunId, PayRunDetailsQueryParameters parameters)
        {
            // Get pay run
            var payRun = await _payRunGateway
                         .GetPayRunAsync(payrunId)
                         .EnsureExistsAsync($"Pay Run {payrunId} not found");

            // Get pay run items
            var payRunInvoices =
                await _payRunInvoiceGateway.GetPayRunInvoicesSummaryAsync(payrunId, parameters);

            var result = PayrunExtensions.CreateDetailsViewResponse(payRun, payRunInvoices, payRunInvoices.PagingMetaData);

            return(result);
        }
Пример #8
0
        public async Task ShouldGetHeldInvoices()
        {
            var payRun     = CreateFullPayRun(true);
            var parameters = new PayRunDetailsQueryParameters {
                PageNumber = 1, PageSize = 10
            };
            var url = new UrlFormatter()
                      .SetBaseUrl("api/v1/payruns/held-invoices")
                      .AddParameter("pageNumber", parameters.PageNumber)
                      .AddParameter("pageSize", parameters.PageSize)
                      .ToString();
            var response = await _fixture.RestClient
                           .GetAsync <PagedResponse <HeldInvoiceDetailsResponse> >(url);

            Assert.NotNull(response);
            response.Message.StatusCode.Should().Be(HttpStatusCode.OK);
            response.Content.Data.Count().Should().BeGreaterThan(0);
        }
Пример #9
0
        public async Task ShouldGetPayRunDetails()
        {
            var payrun     = CreateFullPayRun();
            var parameters = new PayRunDetailsQueryParameters {
                PageNumber = 1, PageSize = 10
            };
            var url = new UrlFormatter()
                      .SetBaseUrl($"api/v1/payruns/{payrun.Id}")
                      .AddParameter("pageNumber", parameters.PageNumber)
                      .AddParameter("pageSize", parameters.PageSize)
                      .ToString();

            var response = await _fixture.RestClient
                           .GetAsync <PayRunDetailsViewResponse>(url);

            Assert.NotNull(response);
            response.Message.StatusCode.Should().Be(HttpStatusCode.OK);
        }
        public async Task <PagedList <PayRunInvoiceDomain> > GetPayRunInvoicesSummaryAsync(Guid payRunId,
                                                                                           PayRunDetailsQueryParameters parameters)
        {
            var query = _dbContext.PayrunInvoices.Where(p => p.PayrunId == payRunId)
                        .FilterPayRunInvoices(parameters, _dbContext.SupportsPredicates)
                        .TrackChanges(false);

            var payRunInvoices = await query
                                 .Skip((parameters.PageNumber - 1) *parameters.PageSize)
                                 .Take(parameters.PageSize)
                                 .Select(payRunInvoice => new PayRunInvoiceDomain
            {
                Id              = payRunInvoice.Id,
                InvoiceId       = payRunInvoice.InvoiceId,
                CarePackageId   = payRunInvoice.Invoice.PackageId,
                ServiceUserId   = payRunInvoice.Invoice.ServiceUserId,
                HackneyId       = payRunInvoice.Invoice.ServiceUser.HackneyId,
                ServiceUserName =
                    $"{payRunInvoice.Invoice.ServiceUser.FirstName} {payRunInvoice.Invoice.ServiceUser.MiddleName ?? string.Empty} {payRunInvoice.Invoice.ServiceUser.LastName}",
                SupplierId         = payRunInvoice.Invoice.Supplier.CedarId ?? payRunInvoice.Invoice.SupplierId,
                SupplierName       = payRunInvoice.Invoice.Supplier.SupplierName,
                InvoiceNumber      = payRunInvoice.Invoice.Number,
                PackageType        = payRunInvoice.Invoice.Package.PackageType,
                NetTotal           = payRunInvoice.Invoice.NetTotal,
                GrossTotal         = payRunInvoice.Invoice.GrossTotal,
                InvoiceStatus      = payRunInvoice.InvoiceStatus,
                AssignedBrokerName = payRunInvoice.Invoice.Package.Broker.Name,
                InvoiceItems       = payRunInvoice.Invoice.Items.Select(ii => new PayRunInvoiceItemDomain
                {
                    Id             = ii.Id,
                    Name           = ii.Name,
                    FromDate       = ii.FromDate,
                    ToDate         = ii.ToDate,
                    Cost           = ii.WeeklyCost,
                    Quantity       = ii.Quantity,
                    TotalCost      = ii.TotalCost,
                    ClaimCollector = ii.ClaimCollector,
                    PriceEffect    = ii.PriceEffect
                })
            }).ToListAsync();

            var invoiceCount = await query.CountAsync();

            return(PagedList <PayRunInvoiceDomain> .ToPagedList(payRunInvoices, invoiceCount, parameters.PageNumber,
                                                                parameters.PageSize));
        }