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)); }
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); }
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); }
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)); }