/// <summary>
        /// Used when a person wants to remove an item he has ordered
        /// </summary>
        public void RemoveOneOrderedItem(Person person, OrderableItem item)
        {
            OrderLine itemToRemove = OrderLines.FirstOrDefault(x => x.Owner.Equals(person) && x.Item.Equals(item));
            if (itemToRemove != null)
            {
                if (person.State != States.Ordering)
                {
                    person.State = States.Ordering;
                    person.OnPropertyChanged("Status");
                }

                OrderLines.Remove(itemToRemove);
                person.OnPropertyChanged("OrderLines");
            }
        }
        /// <summary>
        /// Used when a person wants to order an item from the menu
        /// </summary>
        public void OrderOneItem(Person person, OrderableItem item)
        {
            if (person.State != States.Ordering)
            {
                person.State = States.Ordering;
                person.OnPropertyChanged("Status");
            }

            OrderLines.Add(new OrderLine(person, item));
            person.OnPropertyChanged("OrderLines");
        }
        /// <summary>
        /// Used when a person wants to pay for everything another person has ordered
        /// </summary>
        public void PayForPerson(Person payer, Person target)
        {
            if (!payer.Equals(target) && target.State == States.Checkout)
            {
                if (payer.State != States.Checkout)
                {
                    payer.State = States.Checkout;
                    payer.OnPropertyChanged("Status");
                }

                foreach (OrderLine line in OrderLines.Where(x => x.Owner.Equals(target)))
                {
                    line.PayForAll(payer);
                }
                payer.OnPropertyChanged("OrderLines");
                target.OnPropertyChanged("OrderLines");
            }
        }
 /// <summary>
 /// Used when a person pushed the confirm button,
 /// either for confirming an order or a bill
 /// </summary>
 public void NextStateForPerson(Person person, States newState)
 {
     person.State = newState;
     if (Persons.Count(x => x.State.Equals(person.State)) == Persons.Count ||
         (GlobalState == States.Checkout && OrderLines.Count == 0))
     {
         NextGlobalState();
     }
     person.OnPropertyChanged("Status");
 }