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 <CustomerPaginatedDto> GetListPaginated(CustomerFilterDto customerFilter) { _logger.LogDebug($"Calling GetListPaginated Customer"); var loadReceipts = true; IQueryable <Customer> query = _dbCtx.Customers; if (!customerFilter.PageNumber.HasValue) { customerFilter.PageNumber = 0; } if (!customerFilter.PageSize.HasValue) { customerFilter.PageSize = 10; } if (!string.IsNullOrWhiteSpace(customerFilter.Filter)) { query = query.Where(x => x.FullName.ToLower().Contains(customerFilter.Filter.ToLower())); } if (customerFilter.OnlyExpiredMedicalCertificates) { var month = await GetMonthTreshold(); var date = DateTime.UtcNow.AddMonths(month); loadReceipts = false; query = query.Where(x => !x.MedicalCertificateExpiration.HasValue || x.MedicalCertificateExpiration <= date).OrderBy(row => row.MedicalCertificateExpiration ?? DateTime.MinValue); } if (customerFilter.OnlyExpiredFees) { var month = await GetMonthTreshold(); var date = DateTime.UtcNow.AddMonths(month); loadReceipts = false; query = query.Where(x => !x.MembershipFeeExpiryDate.HasValue || x.MembershipFeeExpiryDate <= date).OrderBy(row => row.MembershipFeeExpiryDate ?? DateTime.MinValue); } if (!string.IsNullOrWhiteSpace(customerFilter.SortColumn)) { if (customerFilter.SortColumn == "email") { query = customerFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.Email) : query.OrderBy(x => x.Email); } else if (customerFilter.SortColumn == "birthDate") { query = customerFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.BirthDate) : query.OrderBy(x => x.BirthDate); } else if (customerFilter.SortColumn == "medicalCertificateExpiration") { query = customerFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.MedicalCertificateExpiration) : query.OrderBy(x => x.MedicalCertificateExpiration); } else if (customerFilter.SortColumn == "expirationDate") { query = customerFilter.SortOrder == "desc" ? query.OrderByDescending(x => x.MembershipFeeExpiryDate) : query.OrderBy(x => x.MembershipFeeExpiryDate); } else { // deafult ord by fullname query = customerFilter.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(customerFilter.PageSize.Value *customerFilter.PageNumber.Value).Take(customerFilter.PageSize.Value).ToArrayAsync(); result.Customers = customers.Select(x => x.ToDto(loadReceipts)).ToArray(); return(result); }