public async Task <bool> TaskGroupParentOkayAsync(TaskGroupHeader taskGroupHeader, string accessToken)
        {
            Guid parentTaskGroupId = taskGroupHeader.ParentTaskGroupId ?? Guid.Empty;

            if (parentTaskGroupId != Guid.Empty)
            {
                TaskGroupHeader parentTaskGroupHeader = _unitOfWork.TaskGroupHeaders.Get(parentTaskGroupId);

                var userTeams = await GetUserTeamsAsync(accessToken);

                if (!userTeams.Contains(parentTaskGroupHeader.TeamHeaderId))
                {
                    parentTaskGroupHeader = null;
                }

                if (parentTaskGroupHeader == null)
                {
                    return(false);
                }

                taskGroupHeader.ClientHeaderId = Guid.Empty;
                taskGroupHeader.TeamHeaderId   = Guid.Empty;
                //taskGroupHeader.MainUserId = Guid.Empty;

                //Make sure the start and completion dates don't fall outside of the group headers dates
                taskGroupHeader.StartDate      = (taskGroupHeader.StartDate < parentTaskGroupHeader.StartDate) ? parentTaskGroupHeader.StartDate : taskGroupHeader.StartDate;
                taskGroupHeader.CompletionDate = (taskGroupHeader.CompletionDate > parentTaskGroupHeader.CompletionDate) ? parentTaskGroupHeader.CompletionDate : taskGroupHeader.CompletionDate;
            }
            else
            {
                taskGroupHeader.ParentTaskGroupId = null;
            }

            return(true);
        }
        public async Task <IActionResult> Get(string id)
        {
            try
            {
                var accessToken = await HttpContext.GetTokenAsync("access_token");

                TaskGroupHeader taskGroupHeader = null;

                if (Guid.TryParse(id, out Guid parsedId))
                {
                    taskGroupHeader = await _unitOfWork.TaskGroupHeaders.GetTaskGroupHeaderWithRelationsAsync(parsedId, false, accessToken);
                }
                else
                {
                    taskGroupHeader = await _unitOfWork.TaskGroupHeaders.GetTaskGroupHeaderWithRelationsAsync(id, false, accessToken);
                }

                if (taskGroupHeader != null)
                {
                    return(Ok(_mapper.Map <TaskGroupHead>(taskGroupHeader)));
                }
            }
            catch (Exception e)
            {
                string message = e.Message;
            }

            return(NotFound());
        }
        public async Task <IActionResult> Patch(string id, [FromBody] JsonPatchDocument <TaskGroupHead> taskGroupHeadPatch)
        {
            try
            {
                var accessToken = await HttpContext.GetTokenAsync("access_token");

                if (Guid.TryParse(id, out Guid parsedId))
                {
                    //var userId = User.FindFirstValue("sub");

                    var taskGroupHeader = _unitOfWork.TaskGroupHeaders.Get(parsedId);

                    if (taskGroupHeader != null)
                    {
                        if (await _taskManager.CanAccessTaskGroupHeaderAsync(taskGroupHeader.Id, accessToken))
                        {
                            var taskGroupHead = _mapper.Map <TaskGroupHead>(taskGroupHeader);

                            taskGroupHeadPatch.ApplyTo(taskGroupHead);

                            //Make sure the Original dates do not get changed
                            taskGroupHead.OriginalCompletionDate = taskGroupHeader.OriginalCompletionDate;
                            taskGroupHead.OriginalStartDate      = taskGroupHeader.OriginalStartDate;

                            if (taskGroupHeader.ParentTaskGroupId != null)
                            {
                                TaskGroupHeader parentTaskGroupHeader = _unitOfWork.TaskGroupHeaders.SingleOrDefault(c => c.Id == taskGroupHeader.ParentTaskGroupId, true);

                                if (parentTaskGroupHeader != null)
                                {
                                    //Make sure the start and completion dates don't fall outside of the group headers dates
                                    taskGroupHead.StartDate      = (taskGroupHead.StartDate < parentTaskGroupHeader.StartDate) ? parentTaskGroupHeader.StartDate : taskGroupHead.StartDate;
                                    taskGroupHead.CompletionDate = (taskGroupHead.CompletionDate > parentTaskGroupHeader.CompletionDate) ? parentTaskGroupHeader.CompletionDate : taskGroupHead.CompletionDate;
                                }
                            }

                            _mapper.Map(taskGroupHead, taskGroupHeader);

                            if (!await _taskManager.TaskGroupParentOkayAsync(taskGroupHeader, accessToken))
                            {
                                return(BadRequest());
                            }

                            _unitOfWork.Complete();

                            return(CreatedAtRoute("Get", new { id = _mapper.Map <TaskGroupHead>(taskGroupHeader).Id }, _mapper.Map <TaskGroupHead>(taskGroupHeader)));
                        }
                    }
                }
            }
            catch (Exception e)
            {
                string message = e.Message;
            }

            return(BadRequest());
        }
        public async Task <bool> TaskGroupTeamOkayAsync(TaskGroupHeader taskGroupHeader, string accessToken)
        {
            var userTeams = await GetUserTeamsAsync(accessToken);

            if (userTeams.Contains(taskGroupHeader.TeamHeaderId))
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 5
0
        public async Task <IActionResult> Post([FromBody] TaskHead taskHead)
        {
            try
            {
                var accessToken = await HttpContext.GetTokenAsync("access_token");

                if (taskHead.Id == Guid.Empty)
                {
                    TaskGroupHeader taskGroupHeader = _unitOfWork.TaskGroupHeaders.SingleOrDefault(c => c.Id == taskHead.TaskGroupHeaderId, true);
                    if (taskGroupHeader != null)
                    {
                        if (await _taskManager.CanAccessTaskGroupHeaderAsync(taskGroupHeader.Id, accessToken))
                        {
                            if (taskGroupHeader.Id != Guid.Empty)
                            {
                                var taskHeader = _mapper.Map <TaskHeader>(taskHead);

                                //Make sure the start and completion dates don't fall outside of the group headers dates
                                taskHeader.StartDate      = (taskHeader.StartDate < taskGroupHeader.StartDate) ? taskGroupHeader.StartDate : taskHeader.StartDate;
                                taskHeader.CompletionDate = (taskHeader.CompletionDate > taskGroupHeader.CompletionDate) ? taskGroupHeader.CompletionDate : taskHeader.CompletionDate;

                                if (!await _taskManager.SetNewTaskSequenceNoAsync(taskHeader, accessToken))
                                {
                                    return(BadRequest());
                                }

                                _unitOfWork.TaskHeaders.Add(taskHeader);

                                _unitOfWork.Complete();

                                return(Created(new Uri($"{Request.Path}/{taskHeader.Id}", UriKind.Relative), _mapper.Map <TaskHead>(taskHeader)));
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                string message = e.Message;
            }

            return(BadRequest());
        }
        public async Task <bool> SetNewTaskSequenceNoAsync(TaskHeader taskHeader, string accessToken)
        {
            taskHeader.SequenceNumber = 0;

            Guid parentTaskGroupHeaderId = taskHeader.TaskGroupHeaderId;

            if (parentTaskGroupHeaderId != Guid.Empty)
            {
                TaskGroupHeader parentTaskGroupHeader = await _unitOfWork.TaskGroupHeaders.GetTaskGroupHeaderWithRelationsAsync(parentTaskGroupHeaderId, true, accessToken);

                if (parentTaskGroupHeader != null)
                {
                    var maxChildTask = parentTaskGroupHeader.ChildTasks.OrderByDescending(f => f.SequenceNumber).FirstOrDefault();

                    if (maxChildTask != null)
                    {
                        taskHeader.SequenceNumber = maxChildTask.SequenceNumber + 1;
                    }
                }
            }

            return(true);
        }