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()); }
/** 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()); }
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)); } }
public async Task <IEnumerable <Order> > GetOrders(PaginationFilter paginationFilter, SortingFilter sortingFilter, GetAllOrdersFilter filter = null) { return(await orderRepository.GetAllFilteredAsync(paginationFilter, sortingFilter, filter)); }
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)); }
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); }