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