示例#1
0
        public async Task <int> CountAllAsync(
            PaginationFilter pagination,
            GetAllOrdersFilter filter,
            int requestedUserId)
        {
            var queryable = _context.Orders.AsQueryable();

            queryable = await AddFilterOnQuery(filter, queryable, requestedUserId);

            return(await queryable.CountAsync());
        }
示例#2
0
        /** GET ALL ASYNC */
        public async Task <IEnumerable <Order> > GetAllAsync(
            PaginationFilter pagination,
            GetAllOrdersFilter filter,
            int requestedUserId)
        {
            var queryable = _context.Orders.AsQueryable();

            queryable = await AddFilterOnQuery(filter, queryable, requestedUserId);

            var skip = (pagination.PageNumber - 1) * pagination.PageSize;

            return(await queryable
                   .Skip(skip)
                   .Take(pagination.PageSize)
                   .Include(o => o.OrderItems)
                   .ThenInclude(oi => oi.ProductTier)
                   .ThenInclude(pt => pt.Product)
                   .ThenInclude(p => p.ProductImages)
                   .Include(o => o.Address)
                   .Include(o => o.PaymentMethod)
                   .ToListAsync());
        }
示例#3
0
 private void AddFiltersOnQuery(ref IQueryable <Order> query, GetAllOrdersFilter filter)
 {
     if (!string.IsNullOrEmpty(filter?.CustomerName))
     {
         query = query.Where(x => x.CustomerName.Contains(filter.CustomerName));
     }
     if (!filter.CreatedDate.Equals(DateTime.MinValue))
     {
         query = query.Where(x => x.CreatedDate.Equals(filter.CreatedDate));
     }
     if (!string.IsNullOrEmpty(filter?.ProductName))
     {
         query = query.Where(x => x.OrderDetails.Any(x => x.Product.Name.Contains(filter.ProductName)));
     }
     if (filter?.ProductPrice != 0)
     {
         query = query.Where(x => x.OrderDetails.Any(x => x.Product.Price == filter.ProductPrice));
     }
     if (filter?.Quantity != 0)
     {
         query = query.Where(x => x.OrderDetails.Any(x => x.Quantity == filter.Quantity));
     }
 }
示例#4
0
 public async Task <IEnumerable <Order> > GetOrders(PaginationFilter paginationFilter, SortingFilter sortingFilter, GetAllOrdersFilter filter = null)
 {
     return(await orderRepository.GetAllFilteredAsync(paginationFilter, sortingFilter, filter));
 }
示例#5
0
        public async Task <IEnumerable <Order> > GetAllFilteredAsync(PaginationFilter paginationFilter, SortingFilter sortingFilter, GetAllOrdersFilter filter = null)
        {
            var query = dbContext.Set <Order>()
                        .Include(x => x.OrderDetails)
                        .ThenInclude(x => x.Product)
                        .AsQueryable();

            AddFiltersOnQuery(ref query, filter);
            SortingHelper.ApplySort(ref query, sortingFilter.OrderBy);

            return(await PaginationHelper <Order> .PagedList(query, paginationFilter.Page));
        }
示例#6
0
        private async Task <IQueryable <Order> > AddFilterOnQuery(
            GetAllOrdersFilter filter,
            IQueryable <Order> queryable,
            int requestedUserId
            )
        {
            var user = await _userService.GetByIdAsync(requestedUserId);

            /** If role is customer, then just get only order of that customer */
            if (user.Role.RoleName == RoleNameEnum.Customer)
            {
                queryable = queryable.Where(o => o.CustomerId == user.Customer.Id);
            }

            /** If role is storage manager then can't see canceled order */
            if (user.Role.RoleName == RoleNameEnum.StorageManager)
            {
                queryable = queryable.Where(o => o.OrderStatus != OrderStatus.Canceled &&
                                            o.OrderStatus != OrderStatus.New);
            }

            queryable = queryable.Where(x => x.IsDeleted == false);

            if (!string.IsNullOrEmpty(filter?.Code))
            {
                queryable = queryable.Where(x => x.Code.Contains(filter.Code));
            }

            if (!string.IsNullOrEmpty(filter?.FromCreatedAt))
            {
                try
                {
                    var fromCreatedAtDate = DateTime
                                            .ParseExact(filter?.FromCreatedAt, "dd-MM-yyyy", CultureInfo.InvariantCulture);
                    queryable = queryable.Where(x => x.CreatedAt >= fromCreatedAtDate);
                }
                catch
                {
                }
            }
            if (!string.IsNullOrEmpty(filter?.ToCreatedAt))
            {
                try
                {
                    var toCreatedAtDate = DateTime
                                          .ParseExact(filter?.ToCreatedAt, "dd-MM-yyyy", CultureInfo.InvariantCulture);
                    queryable = queryable.Where(x => x.CreatedAt <= toCreatedAtDate);
                }
                catch
                { }
            }

            if (!string.IsNullOrEmpty(filter?.Notes))
            {
                queryable = queryable.Where(x => x.Notes.Contains(filter.Notes));
            }

            // filter by total amount
            if (filter?.FromAmount != null)
            {
                queryable = queryable.Where(x => x.TotalAmount >= filter.FromAmount);
            }
            if (filter?.ToAmount != null && filter.ToAmount > 0)
            {
                queryable = queryable.Where(x => x.TotalAmount <= filter.ToAmount);
            }

            // filter by CreatedAt date
            // if (filter?.FromCreatedDate != null)
            // {
            //     queryable = queryable.Where(x => x.CreatedAt >= filter.FromCreatedDate);
            // }
            // if (filter?.ToCreatedDate != null)
            // {
            //     queryable = queryable.Where(x => x.CreatedAt <= filter.ToCreatedDate);
            // }

            if (filter?.IsGift != null && filter?.IsGift != BooleanSearch.All)
            {
                bool boolValue = filter.IsGift == BooleanSearch.True
                    ? true
                    : false;
                queryable = queryable.Where(x => x.IsGift == boolValue);
            }

            if (filter?.IsCustomerReceive != null &&
                user.Role.RoleName == RoleNameEnum.Admin &&
                filter?.IsGift != BooleanSearch.All)
            {
                bool boolValue = filter.IsCustomerReceive == BooleanSearch.True
                    ? true
                    : false;
                queryable = queryable.Where(x => x.IsCustomerReceive == boolValue);
            }

            if (filter?.CustomerId != null &&
                filter?.CustomerId != 0 &&
                user.Role.RoleName == RoleNameEnum.Admin)
            {
                queryable = queryable.Where(x => x.CustomerId == filter.CustomerId);
            }

            if (filter?.MethodOfPayment != null && filter?.MethodOfPayment != 0)
            {
                queryable = queryable.Where(x =>
                                            x.PaymentMethod.Method == filter.MethodOfPayment);
            }

            if (filter?.OrderStatus != null && filter?.OrderStatus != 0)
            {
                queryable = queryable.Where(x =>
                                            x.OrderStatus == filter.OrderStatus);
            }

            return(queryable);
        }