Example #1
0
        public IHttpActionResult GetPropertySchedule(int id)
        {
            var repository             = new EventTaskListRepository();
            var taskLists              = repository.GetPropertyEventTaskLists(id);
            var eventTaskListSchedules = new List <EventTaskListScheduleViewModel>();

            foreach (var taskList in taskLists)
            {
                var eventTaskListSchedule = new EventTaskListScheduleViewModel();
                eventTaskListSchedule.Id         = taskList.Id;
                eventTaskListSchedule.Name       = taskList.Name;
                eventTaskListSchedule.EventCount = taskList.PropertyService == null ? 0 : taskList.PropertyService.EventCount;
                eventTaskListSchedule.Schedules  = new List <EventScheduleViewModel>();
                decimal idx = 0;
                foreach (var eventSchedule in taskList.EventSchedules)
                {
                    if (!string.IsNullOrEmpty(eventSchedule.RecurrenceRule))
                    {
                        var pattern   = new RecurrencePattern(eventSchedule.RecurrenceRule);
                        var evaluator = new RecurrencePatternEvaluator(pattern);
                        var items     = evaluator.Evaluate(new CalDateTime(eventSchedule.StartTime), eventSchedule.StartTime,
                                                           eventSchedule.EndTime, false);
                        foreach (var item in items)
                        {
                            idx = idx + taskList.NumberServices ?? 0;
                            var schedule = new EventScheduleViewModel();
                            schedule.Date        = item.StartTime.Value.ToString("d");
                            schedule.Time        = item.StartTime.Value.ToString("t");
                            schedule.DateTime    = item.StartTime.Value;
                            schedule.EventNumber = idx;
                            schedule.FreeService = taskList.FreeServices.Any(f => f.ServiceTime == item.StartTime.Value);
                            eventTaskListSchedule.Schedules.Add(schedule);
                        }
                    }
                    else
                    {
                        idx = idx + taskList.NumberServices ?? 0;
                        var schedule = new EventScheduleViewModel();
                        schedule.Date        = eventSchedule.StartTime.ToString("d");
                        schedule.Time        = eventSchedule.StartTime.ToString("t");
                        schedule.DateTime    = eventSchedule.StartTime;
                        schedule.EventNumber = idx;
                        schedule.FreeService = taskList.FreeServices.Any(f => f.ServiceTime == eventSchedule.StartTime);
                        eventTaskListSchedule.Schedules.Add(schedule);
                    }
                }

                if (eventTaskListSchedule.Schedules.Any() || eventTaskListSchedule.EventCount > 0)
                {
                    eventTaskListSchedules.Add(eventTaskListSchedule);
                }
            }

            return(Ok(eventTaskListSchedules));
        }
Example #2
0
        public void Bug3119920()
        {
            using (StringReader sr = new StringReader("FREQ=WEEKLY;UNTIL=20251126T120000;INTERVAL=1;BYDAY=MO"))
            {
                DateTime start = DateTime.Parse("2010-11-27 9:00:00");
                RecurrencePatternSerializer serializer = new RecurrencePatternSerializer();
                RecurrencePattern rp = (RecurrencePattern)serializer.Deserialize(sr);
                RecurrencePatternEvaluator rpe = new RecurrencePatternEvaluator(rp);
                IList<IPeriod> recurringPeriods = rpe.Evaluate(new iCalDateTime(start), start, rp.Until, false);
                
                IPeriod period = recurringPeriods.ElementAt(recurringPeriods.Count() - 1);

                Assert.AreEqual(new iCalDateTime(2025, 11, 24, 9, 0, 0), period.StartTime);
            }
        }
Example #3
0
        // POST api/Task
        public HttpResponseMessage PostTask(EventViewModel task)
        {
            //var httpContext = (HttpContextWrapper)Request.Properties["MS_HttpContext"];
            //var models = httpContext.Request.Form["models"];

            //var task = JsonConvert.DeserializeObject<EventViewModel>(models);
            if (ModelState.IsValid)
            {
                var eventTaskList = db.EventTaskLists.Include("Property").Include("Crew").FirstOrDefault(e => e.Id == task.OwnerID);
                if (eventTaskList != null)
                {
                    task.Title = eventTaskList.Property.Name + ", " + eventTaskList.Crew.Name;
                }

                List <DateTime> holidays;

                using (var holidayRepo = new HolidayRepository())
                {
                    holidays = holidayRepo.GetHolidays().Select(h => h.HolidayDate.Date).ToList();
                }

                if (holidays.Contains(task.StartDate.Date))
                {
                    var       message = "Your schedule includes a holiday on: " + task.StartDate.Date;
                    HttpError err     = new HttpError(message);
                    return(Request.CreateResponse(HttpStatusCode.Conflict, err));
                }

                if (!string.IsNullOrEmpty(task.RecurrenceRule))
                {
                    var pattern   = new RecurrencePattern(task.RecurrenceRule);
                    var evaluator = new RecurrencePatternEvaluator(pattern);
                    var items     = evaluator.Evaluate(new CalDateTime(task.StartDate), task.Start,
                                                       task.StartDate.AddDays(1), false);

                    var allItems = evaluator.Evaluate(new CalDateTime(task.StartDate), task.Start,
                                                      task.End.AddYears(5), true); //Adding 5 years since the end date is equal to the start date. The recurrence rule handles our occurences

                    var holiday = allItems.FirstOrDefault(i => holidays.Contains(i.StartTime.Date));
                    if (holiday != null)
                    {
                        var       message = "Your schedule includes a holiday on: " + holiday.StartTime.Date;
                        HttpError err     = new HttpError(message);
                        return(Request.CreateResponse(HttpStatusCode.Conflict, err));
                    }

                    if (!items.Any())
                    {
                        var startEntity = new EventSchedule
                        {
                            Id                  = task.TaskID,
                            Title               = task.Title,
                            StartTime           = task.Start,
                            StartTimezone       = task.StartTimezone,
                            EndTime             = task.End,
                            EndTimezone         = task.EndTimezone,
                            Description         = task.Description,
                            RecurrenceRule      = string.Empty,
                            RecurrenceException = string.Empty,
                            RecurrenceID        = null,
                            IsAllDay            = task.IsAllDay,
                            EventTaskListId     = task.OwnerID ?? 0
                        };

                        db.EventSchedules.Add(startEntity);
                    }
                }

                var entity = new EventSchedule
                {
                    Id                  = task.TaskID,
                    Title               = task.Title,
                    StartTime           = task.Start,
                    StartTimezone       = task.StartTimezone,
                    EndTime             = task.End,
                    EndTimezone         = task.EndTimezone,
                    Description         = task.Description,
                    RecurrenceRule      = task.RecurrenceRule,
                    RecurrenceException = task.RecurrenceException,
                    RecurrenceID        = task.RecurrenceID,
                    IsAllDay            = task.IsAllDay,
                    EventTaskListId     = task.OwnerID ?? 0
                };

                db.EventSchedules.Add(entity);
                db.SaveChanges();

                HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, new[] { task });
                response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = task.TaskID }));
                return(response);
            }
            else
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest));
            }
        }
Example #4
0
        public IEnumerable <EventDetails> GetEventSchedules(int year, int month, int date, int crewid)
        {
            try
            {
                //int crewid = 3;
                DateTime            selectedDate = new DateTime(year, month, date);
                DateTime            from         = GetFirstDayOfWeek(selectedDate, null);
                List <EventDetails> eventDetails = new List <EventDetails>();

                var service        = new EventService();
                var eventSchedules = service.GetEventsForCrewForDay(from, crewid);

                foreach (var eventVal in eventSchedules)
                {
                    EventTaskList propTask = db.EventTaskLists.Include("Crew").Include("Property").Include("EventTaskTimes").Single(pt => pt.Id == eventVal.EventTaskListId);
                    if (propTask.Crew == null)
                    {
                        continue;
                    }
                    Crew crewVal = propTask.Crew;
                    if (crewVal == null)
                    {
                        continue;
                    }

                    if (!string.IsNullOrEmpty(eventVal.RecurrenceRule))
                    {
                        var pattern   = new RecurrencePattern(eventVal.RecurrenceRule);
                        var evaluator = new RecurrencePatternEvaluator(pattern);
                        var items     = evaluator.Evaluate(new CalDateTime(eventVal.StartTime), eventVal.StartTime,
                                                           eventVal.StartTime.AddYears(5), false);
                        if (!items.Any(i => i.StartTime.Date == selectedDate))
                        {
                            continue;
                        }
                    }
                    else
                    {
                        if (eventVal.StartTime.AddDays(-1) > selectedDate || eventVal.EndTime < selectedDate)
                        {
                            continue;
                        }
                    }

                    EventDetails eventDetail = new EventDetails();

                    TimeZoneInfo estZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

                    eventDetail.EventId             = eventVal.Id;
                    eventDetail.StartTime           = TimeZoneInfo.ConvertTimeFromUtc(eventVal.StartTime, estZone);
                    eventDetail.EndTime             = TimeZoneInfo.ConvertTimeFromUtc(eventVal.EndTime, estZone);
                    eventDetail.ActualEndTime       = eventVal.ActualEndTime;
                    eventDetail.ActualStartTime     = eventVal.ActualStartTime;
                    eventDetail.IsAllDay            = eventVal.IsAllDay;
                    eventDetail.RecurrenceRule      = eventVal.RecurrenceRule;
                    eventDetail.RecurrenceID        = eventVal.RecurrenceID;
                    eventDetail.RecurrenceException = eventVal.RecurrenceException;
                    eventDetail.StartTimezone       = eventVal.StartTimezone;
                    eventDetail.EndTimezone         = eventVal.EndTimezone;
                    eventDetail.Status          = (StatusEnum)eventVal.Status;
                    eventDetail.Title           = eventVal.Title;
                    eventVal.EventTaskList      = propTask;
                    eventDetail.TaskId          = propTask.Id;
                    eventDetail.EventTaskListId = eventVal.EventTaskListId;
                    eventDetail.PropertyId      = propTask.Property.Id;
                    eventDetail.PropertyAddress = propTask.Property.Address1 + " " +
                                                  propTask.Property.Address2 + " " +
                                                  propTask.Property.City.Name + " " +
                                                  propTask.Property.State + " " +
                                                  propTask.Property.Zip;

                    eventDetail.PropertyName      = eventVal.EventTaskList.Property.Name;
                    eventDetail.PropertyRefNumber = eventVal.EventTaskList.Property.PropertyRefNumber;
                    var eventTaskTime = propTask.EventTaskTimes.FirstOrDefault(e => e.EventDate.Subtract(selectedDate) == TimeSpan.Zero);
                    if (eventTaskTime != null)
                    {
                        eventDetail.TaskStartTime = eventTaskTime.StartTime;
                        eventDetail.TaskEndTime   = eventTaskTime.EndTime;
                    }
                    eventDetails.Add(eventDetail);
                }


                return(eventDetails.OrderBy(e => e.StartTime));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }