public IHttpActionResult Create(TaskViewModel t) { Task task = new Task() { Name = t.Name, Description = t.Description, OwnerId = _userId, Status = false }; _uow.TaskRepository.Add(task); _uow.Save(); t.UsersInTask.ForEach(u => { var userinTask = new UsersInTask { TaskId = task.Id, DateStarted = DateTime.Now, Active = true, UserId = u.Id }; _uow.UsersInTasksRepository.Add(userinTask); }); _uow.Save(); _notifyRefreshNew(task); return(Ok(task)); }
public IHttpActionResult Update(TaskViewModel t) { var task = _uow.TaskRepository.Get(t.Id); // user is not the owner and is not in task if (task.OwnerId != _userId && !task.UsersInTasks.Select(u => u.UserId).Contains(_userId)) { return(NotFound()); } // task is closed, can't update if (task.Status.Value) { return(NotFound()); } // if task is not closed, but viewmodel has status true (close) if (!task.Status.Value && t.Status) { task.Status = true; task.UserClosedId = _userId; _uow.TaskRepository.Update(task); _uow.Save(); var usernames = task.UsersInTasks.Select(u => u.User.Username).ToList(); usernames.Add(task.Owner.Username); NotificationHub.NotifyRefreshTask(usernames, task.Id); NotificationHub.NotifyRefreshTasks(usernames, task.Id); return(Ok(task)); } var removedFriends = task.UsersInTasks.Where(u => !t.UsersInTask.Select(ut => ut.Id).Contains(u.UserId.Value)).ToList(); var removedFriendsUsernames = removedFriends.Select(f => f.User.Username).ToList(); var friendsToAdd = t.UsersInTask.Where(ut => !task.UsersInTasks.Select(u => u.UserId).Contains(ut.Id)).ToList(); removedFriends.ForEach(f => { var userInTask = _uow.UsersInTasksRepository.Get(u => u.TaskId == task.Id && u.UserId == f.UserId.Value).FirstOrDefault(); _uow.UsersInTasksRepository.Remove(userInTask); }); _uow.Save(); friendsToAdd.ForEach(f => { var userInTask = new UsersInTask { TaskId = task.Id, UserId = f.Id, Active = true, DateStarted = DateTime.Now }; _uow.UsersInTasksRepository.Add(userInTask); }); _uow.Save(); // load task again with changes task = _uow.TaskRepository.Get(t.Id); task.Name = t.Name; task.Description = t.Description; _uow.TaskRepository.Update(task); _uow.Save(); // notify users in task _notifyRefreshNew(task); // notify removed users from task NotificationHub.NotifyRefreshTasks(removedFriendsUsernames, task.Id); NotificationHub.NotifyRefreshTask(removedFriendsUsernames, task.Id); return(Ok(task)); }
public async Task <bool> Update(int id, TaskModelBL model) { if (model == null) { return(false); } if (!CheckAccess(id, out MyTask task)) { return(false); } task.Name = model.Name; task.TargetDate = model.TargetDate; task.Details = model.Details; task.IsRepeating = model.IsRepeating; task.TaskСategoryId = model.TaskСategoryId; task.TaskPriorityId = model.TaskPriorityId; task.EndDate = model.EndDate; task.ParentTaskId = model.ParentTaskId; context.MyTasks.Update(task); if (model.Friends != null) { foreach (var friend in model.Friends) { UsersInTask member = new UsersInTask { MyTaskId = model.Id, UserId = friend.UserId, UserInTaskTypeCode = 2 }; if (context.TaskTrackerUser.GetById(member.UserId) != null) { context.UsersInTasks.Create(member); } else { TaskTrackerUser user = new TaskTrackerUser { UserId = member.UserId }; context.TaskTrackerUser.Create(user); if (!context.UsersInTasks.GetAll().Any(ut => ut.UserId == member.UserId && ut.UserInTaskTypeCode == 2)) { context.UsersInTasks.Create(member); } } } } RepeatingTask repeatingTask = context.RepeatingTasks.GetById(id); if (repeatingTask != null && model.IsRepeating == true) { repeatingTask.Multiplier = (int)model.Multiplier; repeatingTask.PeriodCode = (int)model.PeriodCode; context.RepeatingTasks.Update(repeatingTask); } else if (repeatingTask != null && model.IsRepeating == false) { context.RepeatingTasks.Delete(repeatingTask); } else if (repeatingTask == null && model.IsRepeating == true && model.Multiplier != null && model.PeriodCode != null) { repeatingTask = new RepeatingTask { Id = model.Id, Multiplier = (int)model.Multiplier, PeriodCode = (int)model.PeriodCode }; context.RepeatingTasks.Create(repeatingTask); } context.SaveChanges(); var list = context.TaskFiles.GetAll().Where(tf => tf.TaskId == id).Select(tf => tf.FileId).ToList(); foreach (int FileId in list) { if (!model.files.Any(fl => fl.Id == FileId)) { _fileService.Delete(FileId); } } foreach (FileModelBL fl in model.files.Where(fl => !list.Any(fileid => fileid == fl.Id))) { _fileService.Create(id, fl); } if (model.Friends != null) { foreach (var _friend in model.Friends) { await _mailService.SendAsync(new MailModelBL() { To = _friend.Friend.Email, Subject = "Назначение соисполнителем на задачу", Body = $"Вы назначены соисполнителем на задачу <br> для просмотра перейдите по ссылке: <br> <a href=\"https://localhost:44347/MyTask/Update/{model.Id}\">Перейти...</a>" }); } } return(true); }
public bool Create(TaskModelBL model) { if (model == null) { return(false); } string UserId = HttpContextExtensions.GetUserId(_httpcontext); var user = context.TaskTrackerUser.GetAll().FirstOrDefault(x => x.UserId == UserId); if (user == null) { user = new TaskTrackerUser() { UserId = UserId }; context.TaskTrackerUser.Create(user); } MyTask task = new MyTask { Name = model.Name, StartDate = DateTime.Now, TargetDate = model.TargetDate, Details = model.Details, IsRepeating = model.IsRepeating, TaskСategoryId = model.TaskСategoryId, TaskPriorityId = model.TaskPriorityId, ParentTaskId = model.ParentTaskId }; context.MyTasks.Create(task); var UserInTask = new UsersInTask() { Task = task, UserId = UserId, TaskTrackerUser = user, UserInTaskTypeCode = 1 }; context.UsersInTasks.Create(UserInTask); if (model.Multiplier != null && model.PeriodCode != null) { RepeatingTask repeatingTask = new RepeatingTask { Task = task, PeriodCode = (int)model.PeriodCode, Multiplier = (int)model.Multiplier }; context.RepeatingTasks.Create(repeatingTask); } context.SaveChanges(); foreach (FileModelBL fl in model.files) { _fileService.Create(task.Id, fl); } return(true); }