public static ScheduledEvent[] GetEventsOverlap(Schedule s, ScheduledEvent sdle) { SimpleQuery q = new SimpleQuery(typeof(ScheduledEvent), @" from ScheduledEvent S where S.Schedule = ? and ((S.StartDate <= ? and S.EndDate >= ?) or (S.StartDate <= ? and S.EndDate >= ?) or (S.StartDate >= ? and S.EndDate <= ?)) and S.Id != ? order by S.StartDate", s, sdle.StartDate, sdle.StartDate, sdle.EndDate, sdle.EndDate, sdle.StartDate, sdle.EndDate, sdle.Id); // order by S.StartDate", s, sdle.StartDate, sdle.StartDate, sdle.Id); return (ScheduledEvent[]) ExecuteQuery(q); }
/// <summary> /// Chain two arrays of ScheduledEvent /// </summary> /// <param name=s1>First array</param> /// <param name=s2>Second array</param> /// <returns>Array with s1 + s2</returns> /* private ScheduledEvent[] AddScheduledEvent(ScheduledEvent[] s1, ScheduledEvent[] s2) { int i; ScheduledEvent[] sdle = new ScheduledEvent[s1.Length + s2.Length]; for (i = 0; i < s1.Length; i++) sdle[i] = s1[i]; for (int j = i; j < s1.Length + s2.Length; j++) sdle[j] = s2[j - s1.Length]; return sdle; } */ /// <summary> /// Returns events in interval between dt and dt + 15 minutes /// </summary> /// <param name=sdles>Array of events where we search</param> /// <param name=dt>Start of the interval</param> /// <returns>Events in interval</returns> private ScheduledEvent[] GetEventsByDateTimeInArray(ScheduledEvent[] sdles, DateTime dt) { int j = 0; ScheduledEvent[] sdlesTemp = new ScheduledEvent[sdles.Length]; for (int i = 0; i < sdles.Length; i++) { if (((sdles[i].StartDate <= dt) && (sdles[i].EndDate >= dt)) || ((sdles[i].StartDate >= dt) && (sdles[i].EndDate < dt.AddMinutes(15)))) // Short events { sdlesTemp[j] = sdles[i]; j++; } } ScheduledEvent[] sdlesReturn = new ScheduledEvent[j]; for (int i = 0; i < j; i++) sdlesReturn[i] = sdlesTemp[i]; return sdlesReturn; }
private void SaveEvent(ScheduledEvent ev) { User user = (User)Context.Session["User"]; ev.Schedule = Schedule.FindByUser(user); DateTime dt = ev.StartDate; if (dt.Day < 13) ev.StartDate = new DateTime(dt.Year, dt.Day, dt.Month, dt.Hour, dt.Minute, dt.Second); dt = ev.EndDate; if (dt.Day < 13) ev.EndDate = new DateTime(dt.Year, dt.Day, dt.Month, dt.Hour, dt.Minute, dt.Second); if (ev.StartDate > ev.EndDate) // EndDate can't be before StartDate ev.EndDate = ev.StartDate; Schedule.FindByUser(user).Events.Add(ev); if (ev.Id != 0) ev.Save(); else ev.Create(); user.Update(); }
/// <summary> /// Return array with the number events in each day /// </summary> /// <param name=sdles>Array with events</param> private int[] CountDayEvents(ScheduledEvent[] sdles, int year, int month) { int daysInMonth = System.DateTime.DaysInMonth(year, month); Int32[] events = new Int32[daysInMonth + 1]; DateTime beginDay, endDay; for (int i = 1; i <= daysInMonth; i++) { events[i] = 0; beginDay = new DateTime(year, month, i, 0, 0, 0); endDay = new DateTime(year, month, i, 23, 59, 59); foreach (ScheduledEvent sdle in sdles) { if ((endDay >= sdle.StartDate) && (beginDay <= sdle.EndDate)) events[i]++; } } return events; }
private void Calendar(int year, int month, Schedule s) { ScheduledEvent[] sdles = ScheduledEvent.GetEventsInMonth(s, year, month); int[] dayEvents = CountDayEvents(sdles, year, month); /* foreach (Schedule s in user.Schedule.SharedSchedules) { ScheduledEvent[] sdlesTemp = ScheduledEvent.GetEventsInMonth(s, year, month); int[] dayEventsTemp = CountDayEvents(sdlesTemp, year, month); for (int i = 1; i <= daysInMonth; i++) dayEvents[i] += dayEventsTemp[i]; sdles = AddScheduledEvent(sdles, sdlesTemp); } */ IList monthMatrix = BuildMonth(year,month); PropertyBag["selectedMonth"] = month; PropertyBag["selectedYear"] = year; PropertyBag["monthMatrix"] = monthMatrix; PropertyBag["dayEvents"] = dayEvents; ScheduledEvent[] events = ScheduledEvent.GetNextOrderedEvents(s, DateTime.Now); // foreach (Schedule s in user.Schedule.SharedSchedules) // events = AddScheduledEvent(events, ScheduledEvent.GetNextOrderedEvents(s, DateTime.Now)); if (events.Length > 5) { ScheduledEvent[] sdlesTemp = new ScheduledEvent[5]; Array.Copy(events, sdlesTemp, 5); events = sdlesTemp; } PropertyBag["events"] = events; PropertyBag["today"] = DateTime.Now.ToShortDateString(); }