/// <summary>
        /// Creates recurring items from a given reccurence pattern and time period
        /// </summary>
        /// <param name="workItem">The work item</param>
        /// <param name="model">The model</param>
        private void CreateOccurrences(WorkItem workItem, WorkItemDataInputModel model)
        {
            var occurrenceService = new OccurrenceService();
            var occurrenceDates   = occurrenceService.GetOccurrenceDates(workItem);

            workItem.RecurringItems = new List <RecurringItem>();
            foreach (var date in occurrenceDates)
            {
                var originalDate = new DateTime(date.Year, date.Month, date.Day, model.RecurringItemStart.Value.Hour, model.RecurringItemStart.Value.Minute, model.RecurringItemStart.Value.Second);
                if (!this.dataContext.RecurringItems.Any(r => r.OriginalDate == originalDate))
                {
                    workItem.RecurringItems.Add(new RecurringItem
                    {
                        Start        = new DateTime(date.Year, date.Month, date.Day, model.RecurringItemStart.Value.Hour, model.RecurringItemStart.Value.Minute, model.RecurringItemStart.Value.Second),
                        End          = new DateTime(date.Year, date.Month, date.Day, model.RecurringItemEnd.Value.Hour, model.RecurringItemEnd.Value.Minute, model.RecurringItemEnd.Value.Second),
                        OriginalDate = originalDate,
                        Exception    = false,
                        Subject      = workItem.Subject,
                        Body         = workItem.Body,
                        Location     = workItem.Location,
                        UpdatedAt    = DateTime.Now
                    });
                }
            }
        }
        public PartialViewResult SubscribeActivity(Guid Id)
        {
            //Db.Database.BeginTransaction()



            var activity = Db.Occurrences.SingleOrDefault(ac => ac.Id == Id);

            var model = new OccurrenceStateModel();

            if (activity != null)
            {
                model.Occurrence = activity;

                var userProfile = UserManager.FindByName(User.Identity.Name);


                var occService = new OccurrenceService(UserManager);
                var msg        = occService.SubscribeOccurrence(activity.Id, userProfile);

                model.HasError     = msg.HasError;
                model.ErrorMessage = msg.Message;
                model.Subscription = msg.Subscription;


                var logger  = LogManager.GetLogger("SubscribeActivity");
                var ac      = new ActivityService();
                var summary = ac.GetSummary(Id);
                if (msg.HasError)
                {
                    logger.InfoFormat("{0} ({1}) by [{2}]: {3}",
                                      summary.Activity.Name, summary.Activity.ShortName, User.Identity.Name, msg.Message);
                }
                else
                {
                    logger.InfoFormat("{0} ({1}) by [{2}]",
                                      summary.Activity.Name, summary.Activity.ShortName, User.Identity.Name);
                }


                if (new SystemConfig().MailSubscriptionEnabled)
                {
                    var mailModel = new SubscriptionMailModel
                    {
                        Summary      = summary,
                        Subscription = model.Subscription,
                        User         = userProfile,
                    };

                    var mail = new MailController();
                    mail.Subscription(mailModel).Deliver();
                }
            }

            return(PartialView("_SubscriptionState", model));
        }