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); }
public int[] GetAllTaskIdsForChildTasks(PlanTaskDto task) { List <int> taskIds = new List <int>(); GetAllTaskIdsForChildTasks(task, taskIds); return(taskIds.ToArray()); }
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); }