// TODO: Separate Load & Crate like in the CommonMealService
        public async Task <CommonMealShoppingInfo> Load(int mealId)
        {
            // Load the common meal, persons and guest regis
            var meal = await _commonMealRepository.GetById(mealId);

            // Load the existing expenses
            var expenses = (await _commonMealExpenseRepository
                            .GetByCommonMealId(mealId))
                           .ToDictionary(x => x.PersonId, x => x);

            // Create missing expenses (each chef should have an expense record):
            var missingExpenses = meal.Chefs
                                  .Where(chef => chef.PersonId != null && !expenses.ContainsKey(chef.PersonId.Value))
                                  .Select(chef => CreateDefaultExpense(chef.PersonId.Value, mealId))
                                  .ToImmutableList();

            var allExpenses = expenses.Values.Union(missingExpenses).OrderBy(x => x.PersonId).ThenBy(x => x.Id).ToImmutableList();

            // Create the shopping info
            var(adults, children) = await CalcMealInfo(meal.Registrations);

            var budget = (int)Math.Round((adults.Total * _commonMealPriceSettings.GetAdultPrice()) + (children.Total * _commonMealPriceSettings.GetChildPrice()), 0);

            return(new CommonMealShoppingInfo
            {
                MealId = mealId,
                Adults = adults,
                Children = children,
                Expenses = allExpenses,
                Budget = budget,
            });
        }
        public async Task <CommonMealShoppingInfoViewModel> Map(CommonMealShoppingInfo item)
        {
            var meal = await _commonMealRepository.GetById(item.MealId);

            return(new CommonMealShoppingInfoViewModel
            {
                MealId = item.MealId,
                Date = meal.Date,
                DateName = _timeFormatter.GetDateName(meal.Date),
                DayName = _timeFormatter.GetDayName(meal.Date).ToUpperFirstLetter(),
                Adults = _personGroupMapper.Map(item.Adults),
                Children = _personGroupMapper.Map(item.Children),
                Budget = item.Budget,
                Expenses = await _commonMealExpenseMapper.MapMany(item.Expenses)
            });
        }