public async Task <CustomerPaginatedDto> GetProductCustomers(BasePaginatedFilterDto pageFilter, Guid idProduct) { _logger.LogDebug($"Calling GetListPaginated Customer"); IQueryable <Customer> query = _dbCtx.Customers; if (!pageFilter.PageNumber.HasValue) { pageFilter.PageNumber = 0; } if (!pageFilter.PageSize.HasValue) { pageFilter.PageSize = 10; } if (!string.IsNullOrWhiteSpace(pageFilter.Filter)) { query = query.Where(x => x.FullName.ToLower().Contains(pageFilter.Filter.ToLower())); } var product = await _dbCtx.Products.FindAsync(idProduct); var now = product.EndDate.HasValue ? product.EndDate.Value : DateTime.UtcNow; query = query.Where(x => x.CustomerProductInstances.Any(y => y.ProductInstance.IdProduct == idProduct)); query = query.Where(x => x.CustomerProductInstances.Any(y => y.ExpirationDate.HasValue && y.ExpirationDate.Value <= now)); if (!string.IsNullOrWhiteSpace(pageFilter.SortColumn)) { if (pageFilter.SortColumn == "email") { query = pageFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.Email) : query.OrderBy(x => x.Email); } else if (pageFilter.SortColumn == "birthDate") { query = pageFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.BirthDate) : query.OrderBy(x => x.BirthDate); } else if (pageFilter.SortColumn == "medicalCertificateExpiration") { query = pageFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.MedicalCertificateExpiration) : query.OrderBy(x => x.MedicalCertificateExpiration); } else if (pageFilter.SortColumn == "expirationDate") { query = pageFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.MembershipFeeExpiryDate) : query.OrderBy(x => x.MembershipFeeExpiryDate); } else { // deafult ord by fullname query = pageFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.FullName) : query.OrderBy(x => x.FullName); } } else { //deafult order query = query.OrderBy(x => x.FullName); } var result = new CustomerPaginatedDto(); result.TotalItems = query.Count(); var customers = await query.Skip(pageFilter.PageSize.Value *pageFilter.PageNumber.Value).Take(pageFilter.PageSize.Value).ToArrayAsync(); result.Customers = customers.Select(x => x.ToDto(false)).ToArray(); return(result); }
public async Task <ActionResult <CustomerPaginatedDto> > GetProductCustomers([FromBody] BasePaginatedFilterDto filter, Guid idProduct) { var res = await _service.GetProductCustomers(filter, idProduct); return(res); }