Beispiel #1
0
        public PlanTaskDto ToDto()
        {
            var result = new PlanTaskDto()
            {
                Title            = Title,
                CompleteDate     = CompleteDate.ToLocalTime(),
                CreatedDate      = CreatedDate.ToLocalTime(),
                Creator          = Creator.ToDto(),
                Deadline         = Deadline.ToLocalTime(),
                Description      = Description,
                Id               = Id,
                IsTask           = IsTask,
                SelectedForToday = SelectedForToday,
                Status           = this.Status,
                RemindAt         = RemindAt.ToLocalTime(),
                ReminderSent     = ReminderSent,
                PlannedBeginDate = PlannedBeginDate.ToLocalTime(),
                AccessRights     = (AccessRights == null ? new List <ACLEntryDto>()
                                : AccessRights.Select(x => x.ToDto())).ToList(),
                IsShared             = IsShared,
                PlannedDateProcessed = PlannedDateProcessed
            };


            if (Parent != null)
            {
                result.ParentTaskId = Parent.Id;
                result.Parent       = Parent.ToDto();
            }

            return(result);
        }
Beispiel #2
0
        public int[] GetAllTaskIdsForChildTasks(PlanTaskDto task)
        {
            List <int> taskIds = new List <int>();

            GetAllTaskIdsForChildTasks(task, taskIds);

            return(taskIds.ToArray());
        }
Beispiel #3
0
        private void GetAllTaskIdsForChildTasks(PlanTaskDto Task, List <int> IdsList)
        {
            IdsList.Add(Task.Id);
            IdsList.AddRange(Task.Children.Select(x => x.Id));

            foreach (var childTask in Task.Children)
            {
                GetAllTaskIdsForChildTasks(childTask, IdsList);
            }
        }
        public void AddNewNotificationForTask(PlanTaskDto taskDto)
        {
            if (taskDto.RemindAt.HasValue)
            {
                var notitification = new TaskReminderNotification(_config);

                notitification.TaskPlannedDate = taskDto.PlannedBeginDate.HasValue ?
                                                 taskDto.PlannedBeginDate.ToUtc().ToString() : "-";
                notitification.TaskTitle = taskDto.Title;
                var entity = notitification.GetNotificationEntity();
                entity.SendingDate   = taskDto.RemindAt.Value.ToUniversalTime();
                entity.State         = DAL.enums.EmailStateEnum.NotSent;
                entity.ReceiverEmail = taskDto.Creator.Email;

                _context.Notifications.Add(entity);

                _context.SaveChanges();
            }
        }
 public void AddOrUpdateTask([FromBody] PlanTaskDto taskForEdit)
 {
     _taskService.AddOrUpdate(taskForEdit);
 }
        public void AddOrUpdate(PlanTaskDto taskForEdit)
        {
            //_context.ChangeTracker.LazyLoadingEnabled = false;
            //_context.ChangeTracker.AutoDetectChangesEnabled = false;

            if (taskForEdit == null)
            {
                throw new Exception("PlanTaskDto NULL");
            }

            var entity = _context.TasksAndTargets.Include(x => x.Creator).
                         FirstOrDefault(x => x.Id == taskForEdit.Id);

            if (entity == null)
            {
                entity = new PlanTask();
            }

            if (taskForEdit.makeReminder.HasValue)
            {
                if (taskForEdit.makeReminder.Value)
                {
                    entity.RemindAt = taskForEdit.RemindAt.ToUtc();
                }
                else
                {
                    entity.RemindAt = null;
                }
            }

            entity.IsTask = taskForEdit.IsTask;

            if (taskForEdit.ParentTaskId.HasValue)
            {
                var parentEntity = _context.TasksAndTargets.
                                   FirstOrDefault(x => x.Id == taskForEdit.ParentTaskId.Value);

                if (parentEntity != null)
                {
                    entity.Parent = parentEntity;
                }
            }

            entity.SelectedForToday = taskForEdit.SelectedForToday;
            entity.Status           = taskForEdit.Status;
            entity.Title            = taskForEdit.Title;
            entity.Description      = taskForEdit.Description;

            // Date changed - reset status
            if (entity.PlannedBeginDate != taskForEdit.PlannedBeginDate.ToUtc())
            {
                entity.PlannedDateProcessed = taskForEdit.PlannedDateProcessed = false;
            }

            entity.PlannedBeginDate     = taskForEdit.PlannedBeginDate.ToUtc();
            entity.PlannedDateProcessed = taskForEdit.PlannedDateProcessed;


            entity.Deadline = taskForEdit.Deadline.ToUtc();

            entity.CompleteDate = taskForEdit.CompleteDate.ToUtc();

            if (entity.Id == 0)
            {
                entity.CreatedDate = DateTime.Now.ToUniversalTime();
            }

            // TODO set real creator
            if (entity.Id == 0)
            {
                DAL.Users.User creator = _userService.GetCurrentUser();

                entity.Creator = creator ?? throw new Exception("Creator user id null");
            }

            _userService.SetPasswordHashAndSaltUnModified(entity.Creator);
            _context.Entry(entity.Creator).State = EntityState.Unchanged;

            bool taskOrTargetCreated = false;

            if (entity.Id == 0)
            {
                taskOrTargetCreated = true;
                _context.TasksAndTargets.Add(entity);
            }

            _context.SaveChanges();

            _activityService.LogUserActivity(entity,
                                             taskOrTargetCreated ? DAL.enums.ActionTypeEnum.Added : DAL.enums.ActionTypeEnum.Edited);

            taskForEdit.Id = entity.Id;
        }
        private PlanTaskDto GetAllData(TaskFilter filter, IQueryable <PlanTask> query, bool byPassAccessCheck = false)
        {
            var currentUserId = _userService.GetCurrentUser().Id;
            //var result = query.Include(z => z.Creator).Include(y => y.Parent).Select(x => x.ToDto()).ToList();
            var resultEnt = query.Include(a => a.AccessRights).ThenInclude(a => a.User).Include(q => q.Creator).Include(y => y.Parent).Include(y => y.Parent.AccessRights).ThenInclude(z => z.User)
                            .ToList();

            var result = resultEnt.Select(x => x.ToDto()).ToList();

            List <PlanTask> parents = new List <PlanTask>();

            foreach (var ent in resultEnt)
            {
                GetAllParentsRecursive(ent, parents);
            }

            parents = parents.DistinctBy(x => x.Id).ToList();

            result.AddRange(parents.Select(x => x.ToDto()).DistinctBy(x => x.Id).ToList());
            result = result.DistinctBy(x => x.Id).ToList();

            SetChildren(result, result);

            // todo review this
            //if (string.IsNullOrWhiteSpace(filter.SearchText))
            //{
            result = result.Where(x => !x.ParentTaskId.HasValue || (filter.TaskId.HasValue && x.Id == filter.TaskId.Value)).ToList();
            //}



            if (filter.TaskId.HasValue)
            {
                result = result.Where(x => x.Id == filter.TaskId.Value).ToList();
            }

            result = result.DistinctBy(x => x.Id).ToList();

            //if (!filter.TaskId.HasValue && filter.ShowShared.HasValue && filter.ShowShared.Value)
            //{
            //	var shared = GetSharedFromList(result);

            //	if (shared.Count() > 0)
            //	{
            //		List<PlanTask> sharedChildren = new List<PlanTask>();

            //		foreach (var sharedTask in shared)
            //		{
            //			GetAllChilds(GetEntityById(sharedTask.Id), sharedChildren);
            //			result.AddRange(sharedChildren.Select(x => x.ToDto()));
            //		}

            //		SetChildren(result, result);
            //	}
            //}

            result = result.DistinctBy(x => x.Id).ToList();
            result.OrderBy(x => x.IsTask).ToList();

            var sharedTasksAndTargets = _context.TasksAndTargets.Where(x => x.IsShared).Include(a => a.AccessRights).
                                        ThenInclude(a => a.User).Include(q => q.Creator).Include(y => y.Parent).
                                        Include(y => y.Parent.AccessRights).ThenInclude(z => z.User).
                                        Where(z => z.AccessRights.Count(y => y.User != null && y.User.Id == currentUserId) > 0 ||
                                              (z.AccessRights.Count > 0 && z.Creator.Id == currentUserId)
                                              ).ToList();

            if (filter.ShowShared.HasValue && filter.ShowShared.Value)
            {
                var sharedGoals = sharedTasksAndTargets.Where(z => !z.IsTask);
                var sharedTasks = sharedTasksAndTargets.Where(z => z.IsTask);

                // Apply filter
                sharedGoals = FilterAchieved(filter, sharedGoals.AsQueryable());
                sharedTasks = FilterAchieved(filter, sharedTasks.AsQueryable());

                List <PlanTask> sharedGoalsChildren = new List <PlanTask>();
                sharedGoals.ToList().ForEach(x =>
                {
                    GetAllChilds(x, sharedGoalsChildren);
                });

                sharedGoalsChildren = FilterAchieved(filter, sharedGoalsChildren.AsQueryable()).ToList();

                List <PlanTask> sharedTasksChildren = new List <PlanTask>();
                sharedTasksChildren.ToList().ForEach(x =>
                {
                    GetAllChilds(x, sharedTasksChildren);
                });

                sharedTasksChildren = FilterAchieved(filter, sharedTasksChildren.AsQueryable()).ToList();

                var sharedGoalsList = sharedGoals.Select(x => x.ToDto()).ToList();
                var sharedTasksList = sharedTasks.Select(x => x.ToDto()).ToList();

                // Adding Children
                sharedGoalsList.AddRange(sharedGoalsChildren.Select(x => x.ToDto()));
                sharedTasksList.AddRange(sharedTasksChildren.Select(x => x.ToDto()));

                // Set children links
                SetChildren(sharedGoalsList, sharedGoalsList);
                SetChildren(sharedTasksList, sharedTasksList);

                sharedTasksList = sharedTasksList.DistinctBy(x => x.Id).Where(x => x.IsTask).ToList();
                sharedGoalsList = sharedGoalsList.DistinctBy(x => x.Id).Where(x => !x.IsTask).ToList();



                var sharedGoalsDto = new PlanTaskDto()
                {
                    Title    = "Общие цели",
                    Children = sharedGoalsList,
                    IsShared = true
                };

                var sharedTasksDto = new PlanTaskDto()
                {
                    Title    = "Общие задачи",
                    Children = sharedTasksList,
                    IsShared = true
                };

                if (sharedTasks.Count() > 0)
                {
                    result.Insert(0, sharedTasksDto);
                }

                if (sharedGoals.Count() > 0)
                {
                    result.Insert(0, sharedGoalsDto);
                }
            }
            else
            {
                if (filter.ShowShared.HasValue && !filter.ShowShared.Value || filter.ShowShared == null)
                {
                    result = result.Where(x => !x.IsShared).ToList();
                }
            }


            PlanTaskDto rootNode = new PlanTaskDto()
            {
                Title    = "Все цели",
                Children = result
                           //Children = query.Include(y => y.Parent).Include(z => z.Children)./*Include(z=>z.Children).Include(z=>z.Parent).Where(x => x.Parent == null)*/Select(x => x.ToDto()).ToList()
            };

            if (filter.TaskId.HasValue)
            {
                // Check task is shared
                var task = GetEntityById(filter.TaskId.Value);

                if (task == null)
                {
                    throw new Exception("task == null");
                }

                if (task.AccessRights.Count > 0 && task.Creator.Id != _userService.GetCurrentUser().Id)
                {
                    return(GetSharedTasksForTask(filter, task));
                }

                if (result.Count > 0)
                {
                    return(result.First());
                }

                return(CheckTaskAndGetIsSharedInTarget(filter.TaskId.Value, byPassAccessCheck));
            }

            return(rootNode);
        }