public async Task ChangeStatus(int idDocumentTask, DocumentTaskStatus documentStatus) { var now = DateTime.Now; var task = await dbContext .DocumentTasks .Include(it => it.DocumentTaskStates).ThenInclude(it => it.DocumentTaskTypePath) .FirstAsync(it => it.IdDocumentTask == idDocumentTask); task.LastModified = now; var lastState = task.DocumentTaskStates.Last(); var idNextPath = lastState.DocumentTaskTypePath?.IdNextPath; var state = new DocumentTaskState { IdDocumentTask = idDocumentTask, StateDate = now, DocumentTaskStatus = documentStatus, IdDocumentTaskTypePath = idNextPath == null ? null : lastState.IdDocumentTaskTypePath }; dbContext.DocumentTaskStates.Add(state); if (documentStatus == DocumentTaskStatus.Accepted && idNextPath.HasValue) { dbContext.DocumentTaskStates.Add(new DocumentTaskState { IdDocumentTask = idDocumentTask, StateDate = now, DocumentTaskStatus = DocumentTaskStatus.RequireAction, IdDocumentTaskTypePath = idNextPath }); } if (!idNextPath.HasValue && documentStatus == DocumentTaskStatus.Accepted || documentStatus == DocumentTaskStatus.Denied) { var documents = await dbContext .Documents .Where(it => it.IdDocumentTask == idDocumentTask) .Select(it => it.IdDocument) .ToListAsync(); var service = new DocumentsService(dbContext); foreach (var idDocument in documents) { await service.ChangeStatus(idDocument, DocumentStatus.Blocat); } } }
public async Task Add(string userId, int idDocumentTaskType, IEnumerable <int> idDocuments) { var now = DateTime.Now; var task = new DocumentTask { UserId = userId, DateAdded = now, LastModified = now, IdDocumentTaskType = idDocumentTaskType, Documents = await dbContext.Documents.Where(it => idDocuments.Contains(it.IdDocument)).ToListAsync() }; var taskType = await dbContext.DocumentTaskTypes.Include(it => it.Paths).FirstAsync(it => it.IdDocumentTaskType == idDocumentTaskType); var state = new DocumentTaskState { StateDate = now, DocumentTaskStatus = DocumentTaskStatus.RequireAction, IdDocumentTaskTypePath = taskType.Paths.First(it => it.Index == 0).IdDocumentTaskTypePath }; task.DocumentTaskStates.Add(state); dbContext.DocumentTasks.Add(task); }