Ejemplo n.º 1
0
        public async Task <ActionResult <TaskViewModel> > RemoveTaskFromProjectAsync(Guid projectId, Guid taskId)
        {
            if (projectId == Guid.Empty || taskId == Guid.Empty)
            {
                return(BadRequest("No valid id received"));
            }
            try
            {
                ProjectTask projectTask = (await taskService.GetProjectTaskAsync(projectId, taskId)).Data;
                if (projectTask == null)
                {
                    return(NotFound("ProjectTask not found"));
                }
                TaskResult <ProjectTask> result = await taskService.RemoveProjectTaskAsync(projectTask);

                return(!result.Succeeded
                    ? UnprocessableEntity(new ErrorViewModel
                {
                    Type = Type.Error, Message = result.Message
                })
                    : Ok(TaskViewModel.CreateVm(result.Data.Task)));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(RemoveTaskFromProjectAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <TaskViewModel> > GetTaskAsync(Guid id)
        {
            if (id == Guid.Empty)
            {
                return(BadRequest("No valid id."));
            }
            try
            {
                TaskResult <Task> result = await taskService.GetTaskAsync(id);

                if (!result.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel {
                        Type = Type.Error, Message = result.Message
                    }));
                }
                if (result.Data == null)
                {
                    return(NotFound());
                }
                return(Ok(TaskViewModel.CreateVm(result.Data)));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(GetTaskAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <TaskViewModel> > SaveTaskAsync(TaskViewModel taskViewModel)
        {
            if (taskViewModel == null)
            {
                return(BadRequest("No valid task received"));
            }
            if (string.IsNullOrEmpty(taskViewModel.Name))
            {
                return(BadRequest("Name of a Task cannot be empty"));
            }
            if (taskViewModel.Category == null)
            {
                return(BadRequest("Category of a Task cannot be empty"));
            }

            try
            {
                Task task = TaskViewModel.CreateTask(taskViewModel);
                if (task == null)
                {
                    return(BadRequest("Unable to convert TaskViewModel to Task"));
                }

                string oid = IdentityHelper.GetOid(HttpContext.User.Identity as ClaimsIdentity);
                task.LastEditBy = oid;

                task.Category    = null;
                task.Instruction = null;

                TaskResult <Task> result;
                if (task.Id == Guid.Empty)
                {
                    result = await taskService.CreateTaskAsync(task);
                }
                else
                {
                    return(BadRequest("Cannot update existing Task with post method"));
                }

                if (!result.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel {
                        Type = Type.Error, Message = result.Message
                    }));
                }
                return(Ok(TaskViewModel.CreateVm(result.Data)));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(SaveTaskAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 4
0
        public async Task <ActionResult <TaskViewModel> > AddTaskToProjectAsync(ProjectTaskViewModel projectTaskViewModel)
        {
            if (projectTaskViewModel == null)
            {
                return(BadRequest("No valid ProjectTask received"));
            }
            if (projectTaskViewModel.ProjectId == Guid.Empty || projectTaskViewModel.TaskId == Guid.Empty)
            {
                return(BadRequest("Project and/or Task Ids cannot be empty"));
            }

            try
            {
                ProjectTask projectTask = ProjectTaskViewModel.CreateProjectTask(projectTaskViewModel);
                if (projectTask == null)
                {
                    return(BadRequest("Unable to convert ProjectTaskViewModel to ProjectTask"));
                }
                projectTask.Task    = (await taskService.GetTaskAsync(projectTask.TaskId)).Data;
                projectTask.Project = (await projectService.GetProjectDetailsAsync(projectTask.ProjectId)).Data;
                if (projectTask.Task == null || projectTask.Project == null)
                {
                    return(BadRequest("Unable to add project and or task to projecttask"));
                }

                string oid = IdentityHelper.GetOid(HttpContext.User.Identity as ClaimsIdentity);
                projectTask.LastEditBy = oid;

                TaskResult <ProjectTask> result;
                if (projectTask.Id == Guid.Empty)
                {
                    result = await taskService.AddTaskToProjectAsync(projectTask);
                }
                else
                {
                    return(BadRequest("Cannot update existing ProjectTask with post method"));
                }

                if (!result.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel {
                        Type = Type.Error, Message = result.Message
                    }));
                }
                return(Ok(TaskViewModel.CreateVm(result.Data.Task)));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(AddTaskToProjectAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 5
0
        public async Task <ActionResult <List <TaskViewModel> > > GetAllProjectTasksAsync(Guid projectId)
        {
            if (projectId == Guid.Empty)
            {
                return(BadRequest("No valid id."));
            }

            try
            {
                TaskListResult <ProjectTask> result = await taskService.GetAllProjectTasksAsync(projectId);

                if (!result.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel {
                        Type = Type.Error, Message = result.Message
                    }));
                }

                if (result.Data.Count == 0)
                {
                    return(Ok(new List <ProjectTaskViewModel>()));
                }

                List <TaskViewModel> taskViewModels =
                    result.Data.Select(projectTask => TaskViewModel.CreateVm(projectTask.Task)).ToList();

                return(Ok(taskViewModels));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(GetAllProjectTasksAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 6
0
        public async Task <ActionResult <AvailabilityDataViewModel> > GetAvailabilityData(Guid projectId)
        {
            if (projectId == Guid.Empty)
            {
                return(BadRequest("No valid projectId."));
            }
            try
            {
                TaskListResult <ProjectTask> taskResult = await taskService.GetAllProjectTasksAsync(projectId);

                TaskListResult <Shift> shiftResult =
                    await shiftService.GetShiftsWithAvailabilitiesAsync(projectId);

                if (!taskResult.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel
                    {
                        Type = Type.Error, Message = taskResult.Message
                    }));
                }
                if (!shiftResult.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel
                    {
                        Type = Type.Error, Message = shiftResult.Message
                    }));
                }

                List <Schedule> knownAvailabilities = new List <Schedule>();

                foreach (IGrouping <DateTime, Shift> grouping in shiftResult.Data.GroupBy(s => s.Date))
                {
                    List <AvailabilityStatus> dateStatus = new List <AvailabilityStatus>();
                    foreach (Shift shift in grouping)
                    {
                        int numberOfAvailabilities =
                            shift.Availabilities.Where(a => a.Type == AvailibilityType.Ok).Count();
                        int numberOfSchedule = shift.Availabilities.Count(a => a.Type == AvailibilityType.Scheduled);
                        if (numberOfSchedule >= shift.ParticipantsRequired)
                        {
                            dateStatus.Add(AvailabilityStatus.Scheduled);
                        }
                        else if (numberOfAvailabilities >= shift.ParticipantsRequired)
                        {
                            dateStatus.Add(AvailabilityStatus.Complete);
                        }
                        else
                        {
                            dateStatus.Add(AvailabilityStatus.Incomplete);
                        }
                    }

                    Schedule schedule = new Schedule(grouping.Key, AvailabilityStatus.Incomplete);
                    if (dateStatus.All(a => a == AvailabilityStatus.Complete || a == AvailabilityStatus.Scheduled))
                    {
                        schedule.Status = AvailabilityStatus.Complete;
                    }
                    if (dateStatus.All(a => a == AvailabilityStatus.Scheduled))
                    {
                        schedule.Status = AvailabilityStatus.Scheduled;
                    }

                    knownAvailabilities.Add(schedule);
                }

                List <TaskViewModel> taskViewModels = taskResult.Data
                                                      .Select(projectTask => TaskViewModel.CreateVm(projectTask.Task)).ToList();

                AvailabilityDataViewModel vm = new AvailabilityDataViewModel
                {
                    ProjectTasks        = taskViewModels,
                    KnownAvailabilities = knownAvailabilities
                };
                return(Ok(vm));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(GetAvailabilityData);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 7
0
        public async Task <ActionResult <AvailabilityDataViewModel> > GetAvailabilityData(Guid projectId, Guid userId)
        {
            if (projectId == Guid.Empty)
            {
                return(BadRequest("No valid projectId."));
            }
            if (userId == Guid.Empty)
            {
                return(BadRequest("No valid userId."));
            }
            try
            {
                TaskListResult <ProjectTask> taskResult = await taskService.GetAllProjectTasksAsync(projectId);

                TaskListResult <Shift> shiftResult =
                    await shiftService.GetShiftsWithAvailabilitiesAsync(projectId, userId);

                TaskResult <Person> person = await personService.GetPersonAsync(userId);

                if (!taskResult.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel
                    {
                        Type = Type.Error, Message = taskResult.Message
                    }));
                }
                if (!shiftResult.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel
                    {
                        Type = Type.Error, Message = shiftResult.Message
                    }));
                }
                if (!person.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel
                    {
                        Type = Type.Error, Message = person.Message
                    }));
                }

                List <Schedule> knownAvailabilities = new List <Schedule>();

                foreach (IGrouping <DateTime, Shift> grouping in shiftResult.Data.GroupBy(s => s.Date))
                {
                    int  numberOfShifts         = grouping.Count();
                    int  numberOfAvailabilities = 0;
                    bool scheduled    = false;
                    bool anyAvailable = false;
                    foreach (Shift shift in grouping)
                    {
                        if (shift.Availabilities.Count <= 0)
                        {
                            continue;
                        }
                        numberOfAvailabilities++;
                        shift.Availabilities.ForEach(a =>
                        {
                            if (a.Type == AvailibilityType.Scheduled)
                            {
                                scheduled = true;
                            }
                            else if (a.Type == AvailibilityType.Ok)
                            {
                                anyAvailable = true;
                            }
                        });
                    }

                    if (scheduled)
                    {
                        knownAvailabilities.Add(new Schedule(grouping.Key, AvailabilityStatus.Scheduled));
                    }
                    else if (anyAvailable)
                    {
                        knownAvailabilities.Add(new Schedule(grouping.Key, AvailabilityStatus.Complete));
                    }
                    else if (numberOfAvailabilities > 0 && !anyAvailable)
                    {
                        knownAvailabilities.Add(new Schedule(grouping.Key, AvailabilityStatus.Unavailable));
                    }
                    else
                    {
                        knownAvailabilities.Add(new Schedule(grouping.Key, AvailabilityStatus.Incomplete));
                    }
                }

                List <TaskViewModel> taskViewModels = taskResult.Data
                                                      .Where(t => t.Task.Requirements
                                                             .All(r => person.Data.Certificates
                                                                  .Where(c => c.DateExpired == null || c.DateExpired > DateTime.UtcNow)
                                                                  .Select(c => c.CertificateTypeId)
                                                                  .Contains(r.CertificateTypeId)))
                                                      .Select(projectTask => TaskViewModel
                                                              .CreateVm(projectTask.Task))
                                                      .ToList();

                AvailabilityDataViewModel vm = new AvailabilityDataViewModel
                {
                    ProjectTasks        = taskViewModels,
                    KnownAvailabilities = knownAvailabilities
                };
                return(Ok(vm));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(GetAvailabilityData);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }
Ejemplo n.º 8
0
        public async Task <ActionResult <TaskViewModel> > UpdateTaskAsync(TaskViewModel taskViewModel)
        {
            if (taskViewModel == null || taskViewModel.Id == Guid.Empty)
            {
                return(BadRequest("No valid project received"));
            }
            if (string.IsNullOrEmpty(taskViewModel.Name))
            {
                return(BadRequest("Name of a Task cannot be empty"));
            }
            if (taskViewModel.Category == null)
            {
                return(BadRequest("Category of a Task cannot be empty"));
            }
            try
            {
                Task oldTask = (await taskService.GetTaskAsync(taskViewModel.Id)).Data;
                if (oldTask == null)
                {
                    return(NotFound("Task not found"));
                }
                if (!oldTask.RowVersion.SequenceEqual(taskViewModel.RowVersion))
                {
                    return(BadRequest("Outdated entity received"));
                }
                Task updatedTask = TaskViewModel.CreateTask(taskViewModel);
                if (updatedTask == null)
                {
                    return(BadRequest("Unable to convert TaskViewModel to Task"));
                }

                oldTask.Color        = updatedTask.Color;
                oldTask.Description  = updatedTask.Description;
                oldTask.Name         = updatedTask.Name;
                oldTask.ProjectTasks = updatedTask.ProjectTasks;
                if (updatedTask.Instruction != null)
                {
                    oldTask.Instruction =
                        (await documentService.GetDocumentAsync(updatedTask.InstructionId ?? Guid.Empty))
                        .Data;
                    oldTask.InstructionId = oldTask.Instruction.Id;
                }

                if (updatedTask.CategoryId != Guid.Empty && oldTask.CategoryId != updatedTask.CategoryId)
                {
                    oldTask.Category   = (await taskService.GetCategoryAsync(updatedTask.CategoryId ?? Guid.Empty)).Data;
                    oldTask.CategoryId = oldTask.Category.Id;
                }

                string oid = IdentityHelper.GetOid(HttpContext.User.Identity as ClaimsIdentity);
                oldTask.LastEditBy = oid;

                TaskResult <Task> result = await taskService.UpdateTaskAsync(oldTask);

                if (!result.Succeeded)
                {
                    return(UnprocessableEntity(new ErrorViewModel {
                        Type = Type.Error, Message = result.Message
                    }));
                }
                return(Ok(TaskViewModel.CreateVm(result.Data)));
            }
            catch (Exception ex)
            {
                string message = GetType().Name + "Error in " + nameof(UpdateTaskAsync);
                logger.LogError(ex, message);
                return(UnprocessableEntity(new ErrorViewModel {
                    Type = Type.Error, Message = message
                }));
            }
        }