public ActionResult SubscriptionRules(SubscriptionRuleModel model)
        {
            var occurrence = Db.Occurrences.SingleOrDefault(oc => oc.Id == model.OccurrenceId);

            var capacity = model.CapacityOption > 0 ? model.Capacity : model.CapacityOption;

            // in der occurrence speichern ist nie verkehrt
            occurrence.Capacity = capacity;

            // und jetzt zurück in die slots, falls vorhanden
            var summary = ActivityService.GetSummary(model.OccurrenceId);

            if (summary is ActivityDateSummary)
            {
                var dateSummary = summary as ActivityDateSummary;
                foreach (var slot in dateSummary.Date.Slots)
                {
                    slot.Occurrence.Capacity = capacity;
                }
            }

            switch (model.SubscriptionBeginLimitOption)
            {
            case -1:            // Absolute Beschränkung
                occurrence.FromIsRestricted = true;

                var day   = DateTime.Parse(model.SubscriptionBegin);
                var time  = DateTime.Parse(model.SubscriptionBeginTime);
                var begin = day.Add(time.TimeOfDay);
                occurrence.FromDateTime = begin;
                occurrence.FromTimeSpan = null;
                break;

            case 0:             // keine Beschränkung
                occurrence.FromIsRestricted = false;
                occurrence.FromDateTime     = null;
                occurrence.FromTimeSpan     = null;
                break;

            case 12:            // relative Beschränkung 12h
            case 24:            // relative Beschränkung 24h
                occurrence.FromIsRestricted = true;
                occurrence.FromDateTime     = null;
                occurrence.FromTimeSpan     = new TimeSpan(model.SubscriptionBeginLimitOption - 1, 59, 0);
                break;
            }


            switch (model.SubscriptionEndLimitOption)
            {
            case -1:            // Absolute Beschränkung
                occurrence.UntilIsRestricted = true;

                var day  = DateTime.Parse(model.SubscriptionEnd);
                var time = DateTime.Parse(model.SubscriptionEndTime);
                var end  = day.Add(time.TimeOfDay);

                occurrence.UntilDateTime = end;
                occurrence.UntilTimeSpan = null;
                break;

            case 0:             // keine Beschränkung
                occurrence.UntilIsRestricted = false;
                occurrence.UntilDateTime     = null;
                occurrence.UntilTimeSpan     = null;
                break;

            case 12:            // relative Beschränkung 12h
            case 24:            // relative Beschränkung 24h
                occurrence.UntilIsRestricted = true;
                occurrence.UntilDateTime     = null;
                occurrence.UntilTimeSpan     = new TimeSpan(model.SubscriptionEndLimitOption - 1, 59, 0);
                break;
            }


            Db.SaveChanges();

            return(RedirectToAction(summary.Action, summary.Controller, new { id = summary.Id }));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult SubscriptionRules(Guid id)
        {
            var model = new SubscriptionRuleModel();

            var summary = ActivityService.GetSummary(id);

            model.Summary = summary;

            var occurrence = Db.Occurrences.SingleOrDefault(occ => occ.Id == id);

            model.OccurrenceId = occurrence.Id;

            // für Slots gilt: Es gelten die Kapazitätsbeschränkungen des Slots
            var capacity = occurrence.Capacity;

            if (summary is ActivityDateSummary)
            {
                var dateSummary = summary as ActivityDateSummary;
                if (dateSummary.Date.Slots.Any())
                {
                    capacity = dateSummary.Date.Slots.First().Occurrence.Capacity;
                }
            }


            model.Capacity       = capacity;
            model.CapacityOption = capacity > 0 ? 1 : capacity;


            model.SubscriptionBegin     = DateTime.Today.ToShortDateString();
            model.SubscriptionBeginTime = "18:00";

            if (occurrence.FromIsRestricted)
            {
                if (occurrence.FromDateTime.HasValue)
                {
                    model.SubscriptionBeginLimitOption = -1;
                    model.SubscriptionBegin            = occurrence.FromDateTime.Value.ToShortDateString();
                    model.SubscriptionBeginTime        = occurrence.FromDateTime.Value.ToString("t");
                }
                if (occurrence.FromTimeSpan.HasValue)
                {
                    if (occurrence.FromTimeSpan.Value.Hours == 12)
                    {
                        model.SubscriptionBeginLimitOption = 12;
                    }
                    else
                    {
                        model.SubscriptionBeginLimitOption = 24;
                    }
                }
            }
            else
            {
                model.SubscriptionBeginLimitOption = 0;
            }



            model.SubscriptionEnd     = DateTime.Today.ToShortDateString();
            model.SubscriptionEndTime = "18:00";

            if (occurrence.UntilIsRestricted)
            {
                if (occurrence.UntilDateTime.HasValue)
                {
                    model.SubscriptionEndLimitOption = -1;
                    model.SubscriptionEnd            = occurrence.UntilDateTime.Value.ToShortDateString();
                    model.SubscriptionEndTime        = occurrence.UntilDateTime.Value.ToString("t");
                }
                if (occurrence.UntilTimeSpan.HasValue)
                {
                    if (occurrence.UntilTimeSpan.Value.Hours == 12)
                    {
                        model.SubscriptionEndLimitOption = 12;
                    }
                    else
                    {
                        model.SubscriptionEndLimitOption = 24;
                    }
                }
            }
            else
            {
                model.SubscriptionEndLimitOption = 0;
            }



            SetTimeSelections();
            SetRestrictionSelections();


            return(View(model));
        }