private void FixupPositionInformation(PositionInformation previousValue) { if (previousValue != null && ReferenceEquals(previousValue.ChecklistElement, this)) { previousValue.ChecklistElement = null; } if (PositionInformation != null) { PositionInformation.ChecklistElement = this; } }
private void CheckIfNewBeginTimeAffectsPosInfo(Task taskToUpdate, HardSettings settings) { int numPosTrackedDays = settings.DaysOfHistoryToShow; DateTime posTrackingStartDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day - numPosTrackedDays); if (taskToUpdate.PositionInformation == null) { //BeginTime changed from non-pos-tracking timestamp to pos-tracking timestamp if (taskToUpdate.BeginTime >= posTrackingStartDate && taskToUpdate.BeginTime <= DateTime.Now) { //need to add PositionInfo. Add task to end of Group. PositionInformation pi = new PositionInformation(); ChecklistElement lastItemOfGroup = taskToUpdate.ParentGroup.ChecklistElements .SingleOrDefault(ce => ce.PositionInformation != null && ce.PositionInformation.NextItem == null); if (lastItemOfGroup != null) { lastItemOfGroup.PositionInformation.NextItem = taskToUpdate; pi.PreviousItem = lastItemOfGroup; } //else the group is currently empty taskToUpdate.PositionInformation = pi; } } else { //BeginTime changed from pos-tracking timestamp to non-pos-tracking timestamp //just remove PosInfo. if (taskToUpdate.BeginTime < posTrackingStartDate || taskToUpdate.BeginTime > DateTime.Now) { RemovePosInfoFromLinkedList(taskToUpdate); } } }