public async Task <IActionResult> Create(TodoSaveModel todoSaveModel) { if (ModelState.IsValid) { //Init todo var todo = new Todo() { Title = todoSaveModel.Title, Content = todoSaveModel.Content, StartDate = todoSaveModel.StartDate, DueDate = todoSaveModel.DueDate, Scope = todoSaveModel.Scope, Status = TodoStatus.New, Created = DateTime.Now, CreatedBy = _currentUserService.UserId, LastModified = DateTime.Now, LastModifiedBy = _currentUserService.UserId, }; //Add file if (todoSaveModel.File != null) { todo.FileName = await _fileStorageService.SaveFileAsync(todoSaveModel.File); } //Add Assignment var listAssignment = new List <Assignment>(); if (todoSaveModel.SelectedListUserId != null) { listAssignment = todoSaveModel.SelectedListUserId.Select(ele => new Assignment { UserId = ele.ToString(), AssignmentDate = DateTime.UtcNow }).ToList(); } listAssignment.Add(new Assignment { UserId = _currentUserService.UserId, AssignmentDate = DateTime.UtcNow, }); // add self to todo todo.Assignments = listAssignment; _context.Add(todo); var successCreateTodo = await _context.SaveChangesAsync() > 0; if (successCreateTodo) { //Get user entity //var currentUser = await _context.Users.FindAsync(_currentUserService.UserId); var todoHistory = new TodoHistory { TodoId = todo.Id, LogContent = $"Khởi tạo công việc", }; _context.Add(todoHistory); await _context.SaveChangesAsync(); } return(RedirectToAction(nameof(Index))); } return(View(todoSaveModel)); }
public async Task <IActionResult> Edit(int id, [FromForm] TodoSaveModel todoSaveModel) { if (id != todoSaveModel.Id) { return(NotFound()); } if (ModelState.IsValid) { try { var todo = await _context.Todos.FindAsync(id); var oldTodo = await _context.Todos.AsNoTracking().Where(t => t.Id == id).FirstOrDefaultAsync(); todo.Title = todoSaveModel.Title; todo.Content = todoSaveModel.Content; todo.StartDate = todoSaveModel.StartDate; todo.DueDate = todoSaveModel.DueDate; todo.Scope = todoSaveModel.Scope; todo.Status = todoSaveModel.Status; if (todoSaveModel.File != null) { todo.FileName = await _fileStorageService.SaveFileAsync(todoSaveModel.File); } var newListAssignments = todoSaveModel.SelectedListUserId.Select(ele => new Assignment { TodoId = id, UserId = ele, AssignmentDate = DateTime.UtcNow, }).ToList(); var oldListAssignments = await _context.Assignments.Where(t => t.TodoId == id).ToListAsync(); var listToRemove = oldListAssignments.Where(o => !newListAssignments.Any(n => n.UserId == o.UserId)).ToList(); var listToAdd = newListAssignments.Where(o => !oldListAssignments.Any(n => n.UserId == o.UserId)).ToList(); _context.RemoveRange(listToRemove); _context.AddRange(listToAdd); _context.Update(todo); var successUpdateTodo = await _context.SaveChangesAsync() > 0; if (successUpdateTodo) { //Get user entity //var currentUser = await _context.Users.FindAsync(_currentUserService.UserId); var LogContent = ""; if (todo.Title != oldTodo.Title) { LogContent += $"+ Sửa tiêu để từ {oldTodo.Title} thành {todo.Title} \n"; } if (todo.Content != oldTodo.Content) { LogContent += $"+ Sửa nội dung từ {oldTodo.Content} thành {todo.Content} \n"; } if (todo.Status != oldTodo.Status) { LogContent += $"+ Sửa trạng thái từ {oldTodo.Status} thành {todo.Status} \n"; } if (todo.FileName != oldTodo.FileName) { LogContent += $"+ Sửa file từ {oldTodo.FileName} thành {todo.FileName} \n"; } if (todo.StartDate != oldTodo.StartDate) { LogContent += $"+ Sửa thời gian bắt đầu từ {oldTodo.StartDate} thành {todo.StartDate} \n"; } if (todo.DueDate != oldTodo.DueDate) { LogContent += $"+ Sửa thời gian kết thúc từ {oldTodo.DueDate} thành {todo.DueDate} \n"; } var newAssignmentUserString = await newListAssignments.ToUserStringAsync(_context); var oldAssignmentUserString = await oldListAssignments.ToUserStringAsync(_context); if (newAssignmentUserString != oldAssignmentUserString) { LogContent += $"+ Sửa thành viên từ {oldAssignmentUserString} thành {newAssignmentUserString} \n"; } if (LogContent != "") { var todoHistory = new TodoHistory { TodoId = todo.Id, LogContent = LogContent, }; _context.Add(todoHistory); await _context.SaveChangesAsync(); } } } catch (DbUpdateConcurrencyException) { if (!TodoExists(todoSaveModel.Id)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View(todoSaveModel)); }