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)); }
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); } }
// 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)); } }
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; } }