public async Task <IActionResult> DeleteItem(int id) { try { var item = await _projectRepository.FindByIdAsync(id); if (item == null) { return(NotFound()); } else { // удалить все связанные записи... var tasks = await _projectTaskRepository.FindAsync(e => e.ProjectId.Equals(id) && !e.Deleted); foreach (var task in tasks) { task.Deleted = true; } item.Deleted = true; await _projectRepository.EditAsync(item); if (tasks.Count > 0) { await _projectTaskRepository.EditAsync(tasks.ToList()); } return(NoContent()); } } catch (Exception ex) { return(BadRequest(ex.Message)); } }
public async Task <ActionResult <ProjectTaskViewModel> > UpdateItem([FromForm] ProjectTaskViewModel item) { try { var existItem = await _projectTaskRepository.ProjectTaskByIdAsync(item.ProjectTaskId); if (existItem == null) { return(NotFound()); } var project = await ProjectByIdAsync(item.ProjectId); if (project == null) { return(BadRequest("Выбранный проект не найден")); } var group = await GroupByIdAsync(item.GroupId); if (group == null) { return(BadRequest("Выбранная группа не найдена")); } var taskType = await TaskTypeByIdAsync(item.TaskTypeId); if (taskType == null) { return(BadRequest("Выбранный тип задачи не найден")); } var taskStatus = await ProjectTaskStatusByIdAsync(item.ProjectTaskStatusId); if (taskStatus == null) { return(BadRequest("Выбранный статус не найден")); } existItem.Block = await BlockByIdAsync(item.BlockId); existItem.Project = project; existItem.Group = group; existItem.TaskStatus = taskStatus; existItem.TaskType = taskType; existItem.Details = item.Details; existItem.Note = item.Note; existItem.Priority = item.Priority; existItem.DurationHours = item.DurationHours; existItem.StartPlan = item.StartPlan; existItem.EndPlan = item.EndPlan; existItem.StartFact = item.StartFact; existItem.EndFact = item.EndFact; existItem.EffectAfterHours = item.EffectAfterHours; existItem.EffectAfterHours = item.EffectAfterHours; existItem.Important = item.Important; existItem.DateEdited = DateTime.Now; var userEdited = (await _userRepository.FindAsync(e => !e.Deleted && e.Login.ToLower().Equals(_userService.userLogin.ToLower()))).SingleOrDefault(); existItem.LoginEdited = userEdited != null ? userEdited.ShortName : _userService.userLogin; var newPerformers = new List <User>(); if (!string.IsNullOrEmpty(item.Users)) { existItem.ProjectTaskPerformers ??= new List <ProjectTaskPerformer>(); var userIds = item.Users.Split(",").Select(e => int.Parse(e)).ToList(); foreach (var p in existItem.ProjectTaskPerformers) { // пользователя нет в новых данных if (!userIds.Any(e => e == p.UserId)) { p.Deleted = true; } } foreach (int userId in userIds) { // проверяем if (!existItem.ProjectTaskPerformers.Any(e => e.UserId.Equals(userId) && !e.Deleted)) { var user = await _userRepository.FindByIdAsync(userId); if (user != null) { existItem.ProjectTaskPerformers.Add(new ProjectTaskPerformer() { User = user }); newPerformers.Add(user); } } } } else if (existItem.ProjectTaskPerformers != null && existItem.ProjectTaskPerformers.Count > 0) { foreach (var p in existItem.ProjectTaskPerformers) { p.Deleted = true; } } await _projectTaskRepository.EditAsync(existItem); //тут - для новых пользователей создается почтовое уведомление о задаче await _mailRepository.CreateMailsForNewPerformersAsync(newPerformers, existItem); return(_mapper.Map <ProjectTaskViewModel>(existItem)); } catch (Exception ex) { return(BadRequest(ex.Message)); } }