示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }