public bool canOrderGroupTrip(GroupTrip groupTrip)
        {
            if (groupTrip == null)
            {
                return(false);
            }

            if (DateTime.Compare(groupTrip.depatureTime, DateTime.Today) < 0)
            {
                return(false);
            }

            if (groupTrip.getNumPersonsOnBoard() <= 0)
            {
                return(false);
            }

            List <PriceCategory> priceCategories = groupTrip.getPriceCategories();
            int priceCategoriesFound             = 0;

            foreach (PriceCategory value in priceCategories)
            {
                if (this.priceCategories.Contains(value))
                {
                    priceCategoriesFound++;
                }
            }

            if (priceCategoriesFound != priceCategories.Count)
            {
                return(false);
            }

            if (!this.routes.Contains(groupTrip.route) || !this.ships.Contains(groupTrip.ship) ||
                !this.tripTypes.Contains(groupTrip.tripType))
            {
                return(false);
            }

            foreach (KeyValuePair <int, Order> entry in this.orders)
            {
                GroupTripOrder order = entry.Value as GroupTripOrder;

                if (order != null && groupTrip.ship == order.groupTrip.ship)
                {
                    /*
                     * Check, whether the time span of the new group trip overlaps with the available group trips
                     * if it's the same ship
                     */
                    if (DateTime.Compare(groupTrip.depatureTime, DateTime.Today) < 0 &&
                        DateTime.Compare(groupTrip.depatureTime, order.groupTrip.depatureTime) >= 0 &&
                        DateTime.Compare(groupTrip.depatureTime, order.groupTrip.returnTime) <= 0 ||
                        DateTime.Compare(groupTrip.returnTime, order.groupTrip.depatureTime) >= 0 &&
                        DateTime.Compare(groupTrip.returnTime, order.groupTrip.returnTime) <= 0)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }