示例#1
0
        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);
        }
示例#2
0
        public async Task <ActionResult <CustomerPaginatedDto> > GetProductCustomers([FromBody] BasePaginatedFilterDto filter, Guid idProduct)
        {
            var res = await _service.GetProductCustomers(filter, idProduct);

            return(res);
        }