Example #1
0
        public async void FetchData()
        {
            var service = new ShoppingQuery();
            var result  = await service.Get();

            if (result.Data != null)
            {
                var items = result.Data.Weeks.OrderByDescending(m => m.WeekId).Select(x => new Shopping()
                {
                    ShopperName = $"{x.Shopper.FirstName} {x.Shopper.LastName}", Cost = x.Cost, Owed = (x.Cost - x.Users.Sum(s => s.Paid)), Paid = x.Users.Sum(s => s.Paid)
                }).ToList();
                Shopping = new ObservableCollection <Model.Shopping>(items);
            }
        }
        public ShoppingList Handle(ShoppingQuery query)
        {
            var products = _productsRepository
                           .Query(onlyNotRemoved: false)
                           .Where(x =>
                                  IsNotRemovedAndIsNotSuitableForConsumptionEvenNextWeek(x) ||
                                  WasRemovedNotBeforeSevenDaysAgo(x)
                                  )
                           .ToList()
                           .Select(p =>
            {
                if (IsNotRemovedAndIsNotSuitableForConsumptionEvenNextWeek(p))
                {
                    if (p.IsSuitableForConsumption && !p.IsSuitableForConsumptionForDate(SystemTime.Now.AddDays(7)))
                    {
                        return(new ShoppingList.Product(p.Name,
                                                        $"Product won't be suitable for consumption for {GetDaysDifferenceFromNow(p.ExpirationDate)} days."));
                    }

                    if (!p.IsSuitableForConsumption)
                    {
                        return(new ShoppingList.Product(p.Name,
                                                        $"Product isn't suitable for consumption since {GetDaysDifferenceFromNow(p.ExpirationDate)} days."));
                    }
                }

                if (WasRemovedNotBeforeSevenDaysAgo(p))
                {
                    return(new ShoppingList.Product(p.Name,
                                                    $"Product was removed from fridge {GetDaysDifferenceFromNow(p.RemovedAt.Value)} days ago. Probably you will need it again."));
                }

                return(new ShoppingList.Product(string.Empty, string.Empty));
            })
                           .ToList();

            return(new ShoppingList(products.Count, products));
        }