Esempio n. 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);
        }
Esempio n. 2
0
        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);
        }