/// <summary> /// Обновление даты начала исполнения и завершения задачи /// </summary> private void UpdateStartAndCompletionDates() { #region StartDate { var newList = ExecutionHistory.Where(x => x.ExecutionState.ExecutionStateType == TaskExecutionStateType.New).Select(x => x.Date); var lastNewStateDate = DateTimeUtils.GetMaxDate(newList); var execList = ExecutionHistory.Where(x => x.ExecutionState.ExecutionStateType != TaskExecutionStateType.New).Select(x => x.Date); // Если статуса "новая" задача не имела, то берем все даты исполнений со статусом "в работе" var execStateDate = DateTimeUtils.GetMinDate(execList.Where(x => lastNewStateDate != null ? x > lastNewStateDate : true)); if (StartDate != execStateDate) { StartDate = execStateDate; // выставляем новую дату начала исполнения } } #endregion #region ComletionDate { var openList = ExecutionHistory.Where(x => x.ExecutionState.ExecutionStateType != TaskExecutionStateType.Completed).Select(x => x.Date); var lastOpenStateDate = DateTimeUtils.GetMaxDate(openList); var comletedList = ExecutionHistory.Where(x => x.ExecutionState.ExecutionStateType == TaskExecutionStateType.Completed).Select(x => x.Date); // Если "открытых" статусов задача не имела, то берем все даты исполнений с "закрытым" статусом var comletionStateDate = DateTimeUtils.GetMinDate(comletedList.Where(x => lastOpenStateDate != null ? x > lastOpenStateDate : true)); if (FactualCompletionDate != comletionStateDate) { FactualCompletionDate = comletionStateDate; } } #endregion }
/// <summary> /// Обновить задачу по последнему исполнению /// </summary> protected internal virtual void UpdateByLastExecution() { var maxDate = DateTimeUtils.GetMaxDate(ExecutionHistory.Select(x => x.Date)); var lastExecution = ExecutionHistory.Where(x => x.Date == maxDate).First(); UpdateTaskExecutionState(lastExecution); CompletionPercentage = lastExecution.CompletionPercentage; UpdateStartAndCompletionDates(); }