Ejemplo n.º 1
0
        public async Task <PagedList <SaleApiModel> > GetAllSales(GetAllSalesQuery query, CancellationToken token)
        {
            var queryable = _set.AsNoTracking();


            //TODO: BUILD YOUR DIFFERENT QUERIES ON THE IQUERYABLE INSTANCE TO SEARCH FILTER AND ORDER
            if (query.SearchTerm is null && query.OrderByTerm is null)
            {
                var saleQueryable = queryable.Select(s => new SaleApiModel
                {
                    Id                = s.Id,
                    TypeOfPayment     = s.ModeOfPayment,
                    SaleDate          = s.SaleDate,
                    SalesPerson       = s.SalesPerson,
                    GrandTotal        = s.GrandTotal,
                    NumberOfItemsSold = s.ItemsSold.Count,
                    TypeOfSale        = s.TypeOfSale,
                    ProductsBought    = s.ItemsSold.Select(x => new ItemSoldApiModel
                    {
                        Id       = x.Id,
                        ItemName = x.ItemName,
                        Price    = x.Price,
                        Quantity = x.Quantity,     //this should be the quantity bought not the quantity in stock.
                        //ProductCategory = string.Join(",", x.ProductCategories.Select(x => x.Name).ToArray())
                    }).ToList()
                });

                var result = new PagedList <SaleApiModel>(
                    await saleQueryable.CountAsync(token).ConfigureAwait(false), query.PageNumber, query.PageSize,
                    await saleQueryable.ToListAsync(token).ConfigureAwait(false));
                return(result);
            }

            var parsedTotal = decimal.Parse(query.SearchTerm !);
            var parsedDate  = DateTimeOffset.Parse(query.SearchTerm !);

            queryable = queryable.Where(s => s.SalesPerson.Equals(query.SearchTerm) || s.SaleDate.Equals(parsedDate));
            queryable = queryable.OrderBy(x => x.SaleDate);
            //TODO: ALSO FACTOR IN THAT YOUR RESULT MUST BE PAGINATED.

            var processedResult = await PagedList <SaleApiModel> .CreatePagedListAsync(
                queryable.Select(x => new SaleApiModel
            {
                GrandTotal        = x.GrandTotal,
                Id                = x.Id,
                NumberOfItemsSold = x.ItemsSold.Count,
                SaleDate          = x.SaleDate,
                SalesPerson       = x.SalesPerson,
                TypeOfPayment     = x.ModeOfPayment,
                TypeOfSale        = x.TypeOfSale
            }), query.PageNumber, query.PageSize, token).ConfigureAwait(false);

            return(processedResult);
        }
Ejemplo n.º 2
0
        //GET : /api/Users/GetAllSales
        public async Task <ActionResult <IEnumerable <object> > > GetAllAsync([FromQuery] BaseSearchRequestModel request)
        {
            var getAllSales = new GetAllSalesQuery(_context);

            return(Ok(await Task.Run(() => getAllSales.GetAllSales(request))));
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <PaginatedResponse <SaleApiModel> > > Get([FromQuery] GetAllSalesQuery query)
        {
            var result = await _mediator.Send(query).ConfigureAwait(false);

            return(Ok(result));
        }