/// <summary> /// Creates work event from details. /// </summary> /// <param name="details">Work event details.</param> /// <returns>Work event from details.</returns> private static WorkEvent GetEventFromDetails( WorkEventDetails details ) { if( details == null ) throw new ArgumentNullException( "details" ); WorkEvent workEvent = new WorkEvent(); workEvent.ID = details.ID; workEvent.Name = details.Name; workEvent.BeginTime = ( details.BeginTime <= details.EndTime ) ? details.BeginTime : details.EndTime; workEvent.EndTime = ( details.EndTime >= details.BeginTime ) ? details.EndTime : details.BeginTime; workEvent.UserID = details.UserID; workEvent.ProjectID = details.ProjectID; workEvent.WorkCategoryID = details.WorkCategoryID; workEvent.EventTypeID = details.UptimeEventTypeID; return workEvent; }
/// <summary> /// Check if two event intersects or both open. /// </summary> /// <param name="dateEvent">First event for checking.</param> /// <param name="checkEvent">Second event for checking.</param> /// <returns>Exception.</returns> private static Exception isIntersectsOrOpen(WorkEvent dateEvent, WorkEvent checkEvent) { // ПРАВИЛО: События W и B не могут пересекаться. if (dateEvent.Intersects(checkEvent)) return new Exception("Work events or breaks can't intersect."); // ПРАВИЛО: Не может быть двух открытых событий данного типа. if (dateEvent.IsOpen && checkEvent.IsOpen) return new Exception("There can't be two open work or break events."); return null; }
/// <summary> /// Does this event intersect with another event. /// </summary> /// <param name="workEvent">Another work event.</param> /// <returns>True, if this event intersects with another event; false, otherwise.</returns> public bool Intersects( WorkEvent workEvent ) { if( workEvent == null ) throw new ArgumentNullException( "workEvent" ); return IsOpen ? workEvent.EndTime > BeginTime : (workEvent.BeginTime < EndTime) && (workEvent.EndTime > BeginTime); }