Example #1
0
        public async Task <ActionResult <ResultSetDto <ServingNewDtoModel> > > AddServing([FromBody] ServingNewDtoModel request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Serving serving = new Serving()
            {
                Title = request.Title,
                Price = request.Price,
                Desc  = request.Desc
            };

            var resultSave = await _servingService.AddServingAsync(serving);

            if (!resultSave.IsSucced)
            {
                return(BadRequest(resultSave.Message));
            }


            request.ServingId = resultSave.Data.Id.ToString();

            return(Ok(new ResultSetDto <ServingNewDtoModel>()
            {
                IsSuced = true,
                Message = "",
                Data = request
            }));
        }
Example #2
0
        public async Task <ResultSet> EditServingAsync(Serving request)
        {
            if (!_servingRepository.EditServing(request))
            {
                return new ResultSet()
                       {
                           IsSucced = false, Message = "Serving Not Edited"
                       }
            }
            ;

            try
            {
                await _servingRepository.SaveAsync();
            }
            catch (Exception e)
            {
                return(new ResultSet()
                {
                    IsSucced = false, Message = e.Message
                });
            }
            return(new ResultSet()
            {
                IsSucced = true, Message = string.Empty
            });
        }
Example #3
0
        public void ServingDefault()
        {
            Serving<String> serving = new Serving<String>();

             Assert.AreEqual(default(String), serving.Entity);
             Assert.AreEqual(0, serving.Quantity);
             Assert.IsFalse( serving.IsValid );
             Assert.AreEqual( Messages.Error_No_ServingItem, serving["Entity"] );
             Assert.AreEqual( Messages.Error_No_Quantity, serving["Quantity"] );

             // Set the Item
             serving.Entity = "This is a test";
             Assert.IsFalse( serving.IsValid );
             Assert.IsNull( serving["Entity"] );
             Assert.AreEqual( Messages.Error_No_Quantity, serving["Quantity"] );

             // Set the Quantity to another invalid value
             serving.Quantity = -1;
             Assert.IsFalse( serving.IsValid );
             Assert.IsNull( serving["Entity"] );
             Assert.AreEqual( Messages.Error_No_Quantity, serving["Quantity"] );

             // Set the Quantity to a valid value
             serving.Quantity = 1;
             Assert.IsTrue( serving.IsValid );
             Assert.IsNull( serving["Entity"] );
             Assert.IsNull( serving["Quantity"] );
        }
Example #4
0
        public async Task CreateAsync(Serving serving)
        {
            using var ctx = new RestaurantContext();
            await ctx.Servings.AddAsync(serving);

            await ctx.SaveChangesAsync();
        }
 public Serving ToModel(Serving model)
 {
     model.MenuId   = MenuId;
     model.CourseId = CourseId;
     model.DishId   = DishId;
     return(model);
 }
Example #6
0
        static void ObjectHierarchy()
        {
            Beer beer = new Beer()
            {
                Name = "Sly Fox IPA", Flavor = "yummy", OriginalGravity = 4.2m
            };
            Glass glass = new Glass()
            {
                Name = "Pilsner", Ounces = 16
            };

            Database.Connection().Insert("InsertBeer", beer);
            Database.Connection().Insert("InsertGlass", glass);

            Serving serving = new Serving()
            {
                When = DateTime.Parse("1/1/2012")
            };

            serving.Beer  = beer;
            serving.Glass = glass;
            Database.Connection().Insert("InsertServing", serving);

            var servings = Database.Connection().QuerySql <Serving, Beer, Glass>("SELECT s.*, b.*, g.* FROM Servings s JOIN Beer b ON (s.BeerID = b.ID) JOIN Glasses g ON (s.GlassesID = g.ID)", Parameters.Empty);

            foreach (var s in servings)
            {
                Console.WriteLine("{0} {1} {2}", s.When, s.Beer.Name, s.Glass.Ounces);
            }
        }
Example #7
0
        public ResultSet EditServing(Serving request)
        {
            if (!_servingRepository.EditServing(request))
            {
                return new ResultSet()
                       {
                           IsSucced = false, Message = "Serving Not Edited"
                       }
            }
            ;

            try
            {
                _servingRepository.Save();
            }
            catch
            {
                return(new ResultSet()
                {
                    IsSucced = false, Message = "Serving Not Edited"
                });
            }
            return(new ResultSet()
            {
                IsSucced = true, Message = string.Empty
            });
        }
Example #8
0
            public void TestCreateServingAsync()
            {
                ContextSeeders.Seed();
                var sbo = new ServingBusinessObject();

                var rbo    = new RestaurantBusinessObject();
                var mealbo = new MealBusinessObject();
                var drbo   = new DietaryRestrictionBusinessObject();
                var mbo    = new MenuBusinessObject();
                var cbo    = new CourseBusinessObject();
                var dbo    = new DishBusinessObject();

                var restaurant = new Restaurant("a", "b", "c", "d", "f", 6);
                var meal       = new Meal("a", "b", "c");
                var dr         = new DietaryRestriction("ok");
                var menu       = new Menu(DateTime.Now, restaurant.Id, meal.Id);
                var course     = new Course("yes");
                var dish       = new Dish("uh", dr.Id);

                rbo.Create(restaurant);
                mealbo.Create(meal);
                drbo.Create(dr);
                mbo.Create(menu);
                cbo.Create(course);
                dbo.Create(dish);

                var serving = new Serving(menu.Id, course.Id, dish.Id);

                var resCreate = sbo.CreateAsync(serving).Result;
                var resGet    = sbo.ReadAsync(serving.Id).Result;

                Assert.IsTrue(resCreate.Success && resGet.Success && resGet.Result != null);
            }
Example #9
0
        public ActionResult Create([FromBody] ServingViewModel vm)
        {
            var s    = new Serving(vm.MenuId, vm.CourseId, vm.DishId);
            var res  = _bo.Create(s);
            var code = res.Success ? HttpStatusCode.OK : HttpStatusCode.InternalServerError;

            return(new ObjectResult(code));
        }
Example #10
0
        public ActionResult Post([FromBody] Serving value)
        {
            _servingRepository.Create(value);

            _mealService.calculateCalories(value.MealId);

            return(Ok(_servingRepository.Save()));
        }
Example #11
0
        public void ApplyData(Serving s, int kcal100)
        {
            Name.Text        = HTMLCleaner.Static.Replace(s.name);
            Description.Text = string.Format("{0}g", s.weight_gram);
            double _kcal = (((double)kcal100 / 100) * int.Parse(s.weight_gram));

            Kcal.Text = Math.Round(_kcal).ToString();
        }
 public static ServingViewModel Parse(Serving vm)
 {
     return(new ServingViewModel()
     {
         MenuId = vm.MenuId,
         CourseId = vm.CourseId,
         DishId = vm.DishId
     });
 }
Example #13
0
 public static ServingViewModel Parse(Serving serving)
 {
     return(new ServingViewModel()
     {
         Id = serving.Id,
         MenuId = serving.MenuId,
         DishId = serving.DishId,
         CourseId = serving.CourseId,
     });
 }
Example #14
0
        public void ServingEntityQuantity()
        {
            Serving<String> serving = new Serving<String>( "This is a test string", 42 );

             Assert.AreEqual( "This is a test string", serving.Entity );
             Assert.AreEqual( 42, serving.Quantity );
             Assert.IsTrue( serving.IsValid );
             Assert.IsNull( serving["Entity"] );
             Assert.IsNull( serving["Quantity"] );
        }
Example #15
0
        protected override void SynchronizeProperties()
        {
            //base.SynchronizeProperties();
            Serving serving  = (Serving)Data.DataBoundItem;
            Dish    dish     = serving.Dish;
            string  name     = dish.Name;
            int     quantity = serving.Quantity;

            this.ToolTipText = string.Format("Carbo: {0}\nProteine: {1}\nGrassi: {2}\nKcal: {3}\n", dish.Carbohydrates, dish.Proteins, dish.Fats, dish.Calories);
            this.Text        = "<html>" + name + " (" + quantity + "g)</html>";
        }
Example #16
0
 public bool AddServing(Serving serving)
 {
     try
     {
         _servingRepository.Insert(serving);
     }
     catch
     {
         return(false);
     }
     return(true);
 }
        protected override GeneralViewHolder populateHolder(GeneralViewHolder _holder)
        {
            Serving item = (Serving)items[itemPosition];
            ServingItemViewHolder holder = (ServingItemViewHolder)_holder;

            if (item != null)
            {
                holder.ApplyData(item, int.Parse(SessionManager.Static.Item.Data.kcal));
            }

            return(holder);
        }
Example #18
0
        public ResultSet <Serving> AddServing(Serving request)
        {
            _servingRepository.AddServing(request);
            _servingRepository.Save();

            return(new ResultSet <Serving>()
            {
                IsSucced = true,
                Message = string.Empty,
                Data = request
            });
        }
Example #19
0
 public bool EditServing(Serving serving)
 {
     try
     {
         _servingRepository.Update(serving);
     }
     catch
     {
         return(false);
     }
     return(true);
 }
Example #20
0
        public async Task Handle(OrderPayedNotification notification, CancellationToken cancellationToken)
        {
            var order = await _db.Orders
                        .Include(x => x.Lines)
                        .FirstAsync(x => x.Id == notification.OrderId);

            var payment = await _db.Payments
                          .Include(x => x.Account)
                          .FirstAsync(x => x.Id == notification.PaymentId);

            var highPriority = payment.Method == PaymentMethod.Account && payment.Account.HighPriorityServing;

            var servingLines = order.Lines
                               .OrderBy(x => x.Position)
                               .Where(x => x.IsServing)
                               .Select((line, index) => new ServingLine()
            {
                Position    = index,
                OrderLineId = line.Id,
                Name        = line.Name,
                Quantity    = line.Quantity - line.Receiveable
            })
                               .Where(x => x.Quantity > 0)
                               .ToList();

            if (servingLines.Count > 0)
            {
                var newestTag = await _db.OrderTags
                                .OrderByDescending(x => x.Attached)
                                .FirstOrDefaultAsync(x => x.OrderId == order.Id && x.Detached == null);

                var serving = new Serving()
                {
                    OrderId       = order.Id,
                    PointOfSaleId = order.PointOfSaleId,
                    State         = ServingState.Pending,
                    HighPriority  = highPriority,
                    Created       = LocalClock.Now,
                    TagNumber     = newestTag?.Number,
                    Lines         = servingLines.ToList()
                };

                _db.Servings.Add(serving);

                await _db.SaveChangesAsync();

                await _mediator.Publish(new ServingCreatedNotification(serving.Id));
            }
        }
Example #21
0
        public async Task <ActionResult <Serving> > Create(int orderId, Serving serving)
        {
            var order = await _db.Orders
                        .Include(x => x.Lines)
                        .FirstOrDefaultAsync(x => x.Id == orderId);

            if (order == null)
            {
                return(NotFound());
            }

            var newestTag = await _db.OrderTags
                            .OrderByDescending(x => x.Attached)
                            .FirstOrDefaultAsync(x => x.OrderId == order.Id && x.Detached == null);

            serving.OrderId   = orderId;
            serving.State     = ServingState.Pending;
            serving.TagNumber = newestTag?.Number;
            serving.Created   = LocalClock.Now;

            var orderLinesById = order.Lines.ToDictionary(x => x.Id, x => x);

            var position = 0;

            foreach (var servingLine in serving.Lines)
            {
                if (orderLinesById.TryGetValue(servingLine.OrderLineId, out var orderLine))
                {
                    servingLine.Position = position++;
                    servingLine.Name     = orderLine.Name;

                    // Adjust receivable on order line
                    orderLine.Receiveable = Math.Max(orderLine.Receiveable - servingLine.Quantity, 0);
                }
                else
                {
                    return(BadRequest());
                }
            }

            _db.Servings.Add(serving);

            await _db.SaveChangesAsync();

            await _mediator.Publish(new ServingCreatedNotification(serving.Id));

            return(serving);
        }
Example #22
0
        public async Task <ActionResult <ResultSetDto <ServingEditDtoModel> > > EditServing([FromBody] ServingEditDtoModel request)
        {
            if (!ModelState.IsValid)
            {
                string message = "";
                foreach (var er in ModelState.Values.SelectMany(modelstate => modelstate.Errors))
                {
                    message += er.ErrorMessage + " \n";
                }

                return(Ok(new ResultSetDto()
                {
                    IsSuced = false,
                    Message = message
                }));
            }



            var resultServing = await _servingService.GetServingByIdAsync(Guid.Parse(request.ServingId));

            if (!resultServing.IsSucced)
            {
                return(BadRequest(resultServing.Message));
            }

            Serving servingEdit = resultServing.Data;

            servingEdit.Title = request.Title;
            servingEdit.Price = request.Price;
            servingEdit.Desc  = request.Desc;

            var result = await _servingService.EditServingAsync(servingEdit);

            if (!result.IsSucced)
            {
                return(BadRequest(result.Message));
            }

            return(Ok(new ResultSetDto <ServingEditDtoModel>()
            {
                IsSuced = true,
                Message = "",
                Data = request
            }));
        }
Example #23
0
 public OperationResult Delete(Serving serving)
 {
     try
     {
         _dao.Delete(serving);
         return(new OperationResult()
         {
             Success = true
         });
     }
     catch (Exception e)
     {
         return(new OperationResult()
         {
             Success = false, Exception = e
         });
     }
 }
Example #24
0
        public async Task <ResultSet <Serving> > AddServingAsync(Serving request)
        {
            _servingRepository.AddServing(request);

            try{ await _servingRepository.SaveAsync(); }

            catch (Exception e) { return(new ResultSet <Serving>()
                {
                    IsSucced = false, Message = e.Message
                }); }

            return(new ResultSet <Serving>()
            {
                IsSucced = true,
                Message = string.Empty,
                Data = request
            });
        }
 public OperationResult Create(Serving item)
 {
     try
     {
         _dao.Create(item);
         return(new OperationResult()
         {
             Success = true
         });
     }
     catch (Exception e)
     {
         return(new OperationResult()
         {
             Success = false, Exception = e
         });
     }
 }
Example #26
0
        public void TestCreateAndListServingAsync()
        {
            RestaurantSeeder.Seed();
            var cbo = new CourseBusinessObject();
            var dbo = new DishBusinessObject();
            var mbo = new MenuBusinessObject();
            var sbo = new ServingBusinessObject();

            var c = cbo.ListAsync().Result.Result.First();
            var d = dbo.ListAsync().Result.Result.First();
            var m = mbo.ListAsync().Result.Result.First();

            var dr        = new Serving(m.Id, d.Id, c.Id);
            var resCreate = sbo.CreateAsync(dr).Result;
            var resGet    = sbo.ReadAsync(dr.Id).Result;

            Assert.IsTrue(resCreate.Success && resGet.Success && resGet.Result != null);
        }
Example #27
0
 public virtual OperationResult Delete(Serving serving)
 {
     try
     {
         using var transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions, TransactionScopeAsyncFlowOption.Enabled);
         _dao.Update(serving);
         transactionScope.Complete();
         return(new OperationResult {
             Success = true
         });
     }
     catch (Exception e)
     {
         return(new OperationResult()
         {
             Success = false, Exception = e
         });
     }
 }
Example #28
0
        public async Task <OperationResult> DeleteAsync(Serving serving)
        {
            try
            {
                await _dao.DeleteAsync(serving);

                return(new OperationResult()
                {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new OperationResult()
                {
                    Success = false, Exception = e
                });
            }
        }
        public async Task <OperationResult> CreateAsync(Serving item)
        {
            try
            {
                await _dao.CreateAsync(item);

                return(new OperationResult()
                {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new OperationResult()
                {
                    Success = false, Exception = e
                });
            }
        }
Example #30
0
            public void TestUpdateServingAsync()
            {
                ContextSeeders.Seed();
                var sbo     = new ServingBusinessObject();
                var resList = sbo.List();
                var item    = resList.Result.FirstOrDefault();

                var rbo    = new RestaurantBusinessObject();
                var mealbo = new MealBusinessObject();
                var drbo   = new DietaryRestrictionBusinessObject();
                var mbo    = new MenuBusinessObject();
                var cbo    = new CourseBusinessObject();
                var dbo    = new DishBusinessObject();

                var restaurant = new Restaurant("a", "b", "c", "d", "f", 6);
                var meal       = new Meal("a", "b", "c");
                var dr         = new DietaryRestriction("ok");
                var menu       = new Menu(DateTime.Now, restaurant.Id, meal.Id);
                var course     = new Course("yes");
                var dish       = new Dish("uh", dr.Id);

                rbo.Create(restaurant);
                mealbo.Create(meal);
                drbo.Create(dr);
                mbo.Create(menu);
                cbo.Create(course);
                dbo.Create(dish);

                var newServing = new Serving(menu.Id, course.Id, dish.Id);

                item.MenuId   = newServing.MenuId;
                item.CourseId = newServing.CourseId;
                item.DishId   = newServing.DishId;

                var resUpdate = sbo.UpdateAsync(item).Result;

                resList = sbo.ListAsync().Result;

                Assert.IsTrue(resList.Success && resUpdate.Success &&
                              resList.Result.First().MenuId == newServing.MenuId && resList.Result.First().CourseId == newServing.CourseId &&
                              resList.Result.First().DishId == newServing.DishId);
            }
Example #31
0
        public async virtual Task <OperationResult> UpdateAsync(Serving serving)
        {
            try
            {
                using var transactionScope = new TransactionScope(TransactionScopeOption.Required, transactionOptions, TransactionScopeAsyncFlowOption.Enabled);
                await _dao.UpdateAsync(serving);

                transactionScope.Complete();
                return(new OperationResult <List <Serving> > {
                    Success = true
                });
            }
            catch (Exception e)
            {
                return(new OperationResult <List <Serving> >()
                {
                    Success = false, Exception = e
                });
            }
        }
Example #32
0
 /// <summary>
 /// Extension метод для суммирования полей класса NutritionInfo со значениями класса Serving и количества еды.
 /// </summary>
 /// <param name="nutritionInfo">Экземпляр класса NutritionInfo информации о энергетической ценности.</param>
 /// <param name="serving">Экземпляр класса Serving информации о порции еды.</param>
 /// <param name="foodQty">Количество еды.</param>
 public static void Sum(this NutritionInfoDTO nutritionInfo, Serving serving, decimal foodQty)
 {
     nutritionInfo.Kcal               += serving.KCal.HasValue ? (serving.KCal.Value) * foodQty : 0;
     nutritionInfo.Carbohydrate       += (serving.Carbohydrate) * foodQty;
     nutritionInfo.Protein            += (serving.Protein) * foodQty;
     nutritionInfo.Fat                += (serving.Fat) * foodQty;
     nutritionInfo.DietaryFiber       += (serving.DietaryFiber) * foodQty;
     nutritionInfo.Sugars             += (serving.Sugars) * foodQty;
     nutritionInfo.SaturatedFat       += (serving.SaturatedFat) * foodQty;
     nutritionInfo.MonounsaturatedFat += (serving.MonounsaturatedFat) * foodQty;
     nutritionInfo.PolyunsaturatedFat += (serving.PolyunsaturatedFat) * foodQty;
     nutritionInfo.TransFat           += (serving.TransFat) * foodQty;
     nutritionInfo.Cholesterol        += (serving.Cholesterol) * foodQty;
     nutritionInfo.Sodium             += (serving.Sodium) * foodQty;
     nutritionInfo.Potassium          += (serving.Potassium) * foodQty;
     nutritionInfo.Calcium            += (serving.Calcium) * foodQty;
     nutritionInfo.Iron               += (serving.Iron) * foodQty;
     nutritionInfo.VitaminA           += (serving.VitaminA) * foodQty;
     nutritionInfo.VitaminC           += (serving.VitaminC) * foodQty;
 }
Example #33
0
		static void ObjectHierarchy()
		{
			Beer beer = new Beer() { Name = "Sly Fox IPA", Flavor = "yummy", OriginalGravity = 4.2m };
			Glass glass = new Glass() { Name = "Pilsner", Ounces = 16 };

			Database.Connection().Insert("InsertBeer", beer);
			Database.Connection().Insert("InsertGlass", glass);

			Serving serving = new Serving() { When = DateTime.Parse("1/1/2012") };
			serving.Beer = beer;
			serving.Glass = glass;
			Database.Connection().Insert("InsertServing", serving);

			var servings = Database.Connection().QuerySql<Serving, Beer, Glass>("SELECT s.*, b.*, g.* FROM Servings s JOIN Beer b ON (s.BeerID = b.ID) JOIN Glasses g ON (s.GlassesID = g.ID)", Parameters.Empty);
			foreach (var s in servings)
				Console.WriteLine("{0} {1} {2}", s.When, s.Beer.Name, s.Glass.Ounces);
		}
Example #34
0
        // This is really, really ugly.  It works, but it is not pretty.  Look into changing this.
        private void LoadRepository( String dataFileName )
        {
            XDocument xmlDoc;

             using (FileStream stream = new FileStream( dataFileName, FileMode.Open ))
             {
            using (XmlReader xmlRdr = new XmlTextReader( stream ))
            {
               xmlDoc = XDocument.Load( xmlRdr );

               // If we don't have the root element
               if (xmlDoc.Element( rootNodeTag ) == null)
               {
                  _foodGroups = new List<FoodGroup>();
                  _foodItems = new List<FoodItem>();
                  _mealTypes = new List<MealType>();
                  _mealTemplates = new List<MealTemplate>();
                  _meals = new List<Meal>();
               }
               else
               {
                  if (xmlDoc.Element( rootNodeTag ).Element( foodGroupsNodeTag ) != null)
                  {
                     _foodGroups =
                        (from foodGroupElement in xmlDoc.Element( rootNodeTag ).Element( foodGroupsNodeTag ).Elements( foodGroupNodeTag )
                         select new FoodGroup(
                            (Guid)foodGroupElement.Attribute( idAttribute ),
                            (String)foodGroupElement.Attribute( nameAttribute ),
                            foodGroupElement.Element( descriptionNodeTag ) == null ? null :
                            (String)foodGroupElement.Element( descriptionNodeTag ).Value )).ToList();
                  }
                  else
                  {
                     _foodGroups = new List<FoodGroup>();
                  }

                  // FoodItems
                  _foodItems = new List<FoodItem>();
                  if (xmlDoc.Element( rootNodeTag ).Element( foodItemsNodeTag ) != null)
                  {
                     foreach (XElement foodItemElement in xmlDoc.Element( rootNodeTag ).Element( foodItemsNodeTag ).Elements( foodItemNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        FoodItem foodItem = new FoodItem( (Guid)foodItemElement.Attribute( idAttribute ),
                           (String)foodItemElement.Attribute( nameAttribute ),
                           foodItemElement.Element( descriptionNodeTag ) == null ? null :
                           (String)foodItemElement.Element( descriptionNodeTag ).Value,
                           (Decimal)foodItemElement.Attribute( caloriesAttribute ) ); // TODO: Should probably do a tryparse on that...
                        _foodItems.Add( foodItem );

                        // Loop through the FoodGroupServings to build that list
                        if (foodItemElement.Element( foodGroupServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in foodItemElement.Element( foodGroupServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodGroup> foodGroupServing = new Serving<FoodGroup>(
                                 _foodGroups.Find( fg => fg.ID == (Guid)servingElement.Attribute( foodGroupIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              foodItem.FoodGroupsPerServing.Add( foodGroupServing );
                           }
                        }
                     }
                  }

                  if (xmlDoc.Element( rootNodeTag ).Element( mealTypesNodeTag ) != null)
                  {
                     _mealTypes =
                        (from mealTypeElement in xmlDoc.Element( rootNodeTag ).Element( mealTypesNodeTag ).Elements( mealTypeNodeTag )
                         select new MealType(
                            (Guid)mealTypeElement.Attribute( idAttribute ),
                            (String)mealTypeElement.Attribute( nameAttribute ),
                            mealTypeElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealTypeElement.Element( descriptionNodeTag ).Value,
                            (DateTime)mealTypeElement.Attribute( dateTimeAttribute ),
                            (Boolean)mealTypeElement.Attribute( useDefaultDateTimeAttribute ) )).ToList();
                  }
                  else
                  {
                     _mealTypes = new List<MealType>();
                  }

                  // Meal Templates
                  _mealTemplates = new List<MealTemplate>();
                  if (xmlDoc.Element( rootNodeTag ).Element( mealTemplatesNodeTag ) != null)
                  {
                     foreach (XElement mealTemplateElement in xmlDoc.Element( rootNodeTag ).Element( mealTemplatesNodeTag ).Elements( mealNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        MealTemplate mealTemplate = new MealTemplate(
                           (Guid)mealTemplateElement.Attribute( idAttribute ),
                           _mealTypes.Find( mt => mt.ID == (Guid)mealTemplateElement.Attribute( mealTypeIdAttribute ) ),
                           (DateTime)mealTemplateElement.Attribute( dateTimeAttribute ),
                           (String)mealTemplateElement.Attribute( nameAttribute ),
                            mealTemplateElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealTemplateElement.Element( descriptionNodeTag ).Value );
                        _mealTemplates.Add( mealTemplate );

                        // Loop through the FoodItemServings to build that list
                        if (mealTemplateElement.Element( foodItemServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in mealTemplateElement.Element( foodItemServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodItem> foodItem = new Serving<FoodItem>(
                                 _foodItems.Find( fi => fi.ID == (Guid)servingElement.Attribute( foodItemIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              mealTemplate.FoodItemServings.Add( foodItem );
                           }
                        }
                     }
                  }

                  // Meals
                  _meals = new List<Meal>();
                  if (xmlDoc.Element( rootNodeTag ).Element( mealsNodeTag ) != null)
                  {
                     foreach (XElement mealElement in xmlDoc.Element( rootNodeTag ).Element( mealsNodeTag ).Elements( mealNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        var meal = new Meal(
                           (Guid)mealElement.Attribute( idAttribute ),
                           _mealTypes.Find( mt => mt.ID == (Guid)mealElement.Attribute( mealTypeIdAttribute ) ),
                           (DateTime)mealElement.Attribute( dateTimeAttribute ),
                           (String)mealElement.Attribute( nameAttribute ),
                            mealElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealElement.Element( descriptionNodeTag ).Value );
                        _meals.Add( meal );

                        // Loop through the FoodItemServings to build that list
                        if (mealElement.Element( foodItemServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in mealElement.Element( foodItemServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodItem> foodItem = new Serving<FoodItem>(
                                 _foodItems.Find( fi => fi.ID == (Guid)servingElement.Attribute( foodItemIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              meal.FoodItemServings.Add( foodItem );
                           }
                        }
                     }
                  }
               }
            }
             }
        }
        public void ServingViewModelServing()
        {
            FoodGroup foodGroupOne = new FoodGroup( Guid.NewGuid(), "FoodGroupOne", "Test Food Group #1" );
             Serving<FoodGroup> serving = new Serving<FoodGroup>( foodGroupOne, 2.5M );
             ServingViewModel<FoodGroup> servingViewModel = new ServingViewModel<FoodGroup>( serving );

             Assert.IsTrue( servingViewModel.IsValid );
             Assert.AreEqual( foodGroupOne, servingViewModel.Entity );
             Assert.AreEqual( 2.5M, servingViewModel.Quantity );
             Assert.IsNull( servingViewModel["Quantity"] );
             Assert.IsNull( servingViewModel["Entity"] );
        }
        public void ServingViewModelPropertyChanged()
        {
            MealType pi = new MealType( Guid.NewGuid(), "pi", "not the tasty kind", DateTime.Now, false );
             MealType e = new MealType( Guid.NewGuid(), "e", "exponent", DateTime.Now, false );

             PropertyChangedHandler propertyChangedHandler = new PropertyChangedHandler();

             Serving<MealType> serving = new Serving<MealType>( pi, 3.14159M );
             ServingViewModel<MealType> servingViewModel = new ServingViewModel<MealType>( serving );
             servingViewModel.PropertyChanged += propertyChangedHandler.OnPropertyChanged;

             Assert.AreEqual( pi, servingViewModel.Entity );
             Assert.AreEqual( 3.14159M, servingViewModel.Quantity );
             Assert.IsNull( propertyChangedHandler.Sender );
             Assert.AreEqual( 0, propertyChangedHandler.PropertiesChanged.Count );

             servingViewModel.Entity = e;
             Assert.AreEqual( servingViewModel, propertyChangedHandler.Sender );
             Assert.AreEqual( 3, propertyChangedHandler.PropertiesChanged.Count );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "Entity" ) );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "IsDirty" ) );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "IsValid" ) );
             Assert.AreEqual( e, serving.Entity );
             Assert.AreEqual( 3.14159M, serving.Quantity );

             propertyChangedHandler.Reset();
             servingViewModel.Quantity = 2.71828183M;
             Assert.AreEqual( servingViewModel, propertyChangedHandler.Sender );
             Assert.AreEqual( 3, propertyChangedHandler.PropertiesChanged.Count );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "Quantity" ) );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "IsDirty" ) );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "IsValid" ) );
             Assert.AreEqual( e, serving.Entity );
             Assert.AreEqual( 2.71828183M, serving.Quantity );
        }