예제 #1
0
        /// <summary>
        /// Create Project
        /// </summary>
        /// <param name="code">Code</param>
        /// <param name="name">Name</param>
        /// <returns></returns>
        public PmsResponse Create(string code, string name)
        {
            var response = new PmsResponse();

            try
            {
                var p = new Project
                {
                    Code  = code,
                    Name  = name,
                    State = State.Planned,
                    Id    = Guid.NewGuid()
                };

                _dbContext.Projects.Add(p);
                int r = _dbContext.SaveChanges();

                response.EntityId = p.Id;
                response.Message  = $"Project '{name}' successfully created.";
            }
            catch (Exception ex)
            {
                response.Message = "Project create error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #2
0
        /// <summary>
        /// Create Task.
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="description">Description</param>
        /// <param name="projectId">Project Id</param>
        /// <returns></returns>
        public PmsResponse Create(string name, string description, Guid projectId)
        {
            var response = new PmsResponse();

            try
            {
                var task = new Task
                {
                    Name        = name,
                    Description = description,
                    State       = State.Planned,
                    Id          = Guid.NewGuid(),
                    ProjectId   = projectId
                };

                _dbContext.Tasks.Add(task);
                int r = _dbContext.SaveChanges();

                response.EntityId = task.Id;
                response.Message  = $"Task '{name}' successfully created.";
            }
            catch (Exception ex)
            {
                response.Message = "Task create error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #3
0
        /// <summary>
        /// Updates Task
        /// </summary>
        /// <param name="id">Id</param>
        /// <param name="name">Name</param>
        /// <param name="description">Description</param>
        /// <returns></returns>
        public PmsResponse Update(Guid id, string name, string description)
        {
            var response = new PmsResponse();

            try
            {
                var task = _dbContext.Tasks.FirstOrDefault(p => p.Id == id);

                if (!string.IsNullOrWhiteSpace(name))
                {
                    task.Name = name;
                }

                if (!string.IsNullOrWhiteSpace(description))
                {
                    task.Description = description;
                }

                _dbContext.Update(task);
                int r = _dbContext.SaveChanges();

                response.EntityId = task.Id;
                response.Message  = $"Task {task.Name} successfully updated.";
            }
            catch (Exception ex)
            {
                response.Message = "Task update error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #4
0
        /// <summary>
        /// Sets Task State
        /// </summary>
        /// <param name="id"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public PmsResponse SetState(Guid id, State state)
        {
            var response = new PmsResponse();

            try
            {
                var task = _dbContext.Tasks.FirstOrDefault(t => t.Id == id);

                task.State = state;

                if (state == State.Completed)
                {
                    task.FinishDate = DateTime.UtcNow;
                }
                else if (state == State.InProgress)
                {
                    task.StartDate = DateTime.UtcNow;
                }

                _dbContext.Update(task);
                int r = _dbContext.SaveChanges();

                response.EntityId = task.Id;
                response.Message  = $"Task '{id}' state changed to {state}.";
            }
            catch (Exception ex)
            {
                response.Message = "Error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #5
0
        public ActionResult FinishTask([FromBody] FinishTaskModel model)
        {
            PmsResponse response = _workUnit.ChangeTaskState(model.Id, State.Completed);

            if (!response.Success)
            {
                return(BadRequest(response));
            }

            return(Ok(response));
        }
예제 #6
0
        public ActionResult StartTask([FromBody] StartTaskModel model)
        {
            PmsResponse response = _workUnit.ChangeTaskState(model.Id, State.InProgress);

            if (!response.Success)
            {
                return(BadRequest(response));
            }

            return(Ok(response));
        }
예제 #7
0
        /// <summary>
        /// Create Task.
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="description">Description</param>
        /// <param name="projectId">Project Id.</param>
        /// <returns></returns>
        public PmsResponse CreateTask(string name, string description, Guid projectId)
        {
            var response = new PmsResponse();

            try
            {
                if (string.IsNullOrWhiteSpace(name))
                {
                    response.Errors.Add($"'{nameof(name)}' can not be empty.");
                }

                var project = _projectRepository.Find(x => x.Id == projectId);
                if (!project.Any())
                {
                    response.Errors.Add($"Project Id='{projectId}' not found.");
                }

                if (response.Success)
                {
                    var createResp = _taskRepository.Create(name, description, projectId);

                    if (createResp.Success)
                    {
                        response = createResp;
                        UpdateProjectState(project.First());
                    }
                    else
                    {
                        response.Message = createResp.Message;
                        response.Errors.AddRange(createResp.Errors);
                    }
                }
                else
                {
                    response.Message = "Validation error";
                }
            }
            catch (Exception ex)
            {
                response.Message = "Task create error.";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #8
0
        /// <summary>
        /// Update Project
        /// </summary>
        /// <param name="id">Id</param>
        /// <param name="name">Name</param>
        /// <param name="state">State</param>
        /// <returns></returns>
        public PmsResponse Update(Guid id, string name, State?state, DateTime?startDate, DateTime?endDate)
        {
            var response = new PmsResponse();

            try
            {
                var p = _dbContext.Projects.FirstOrDefault(p => p.Id == id);

                if (!string.IsNullOrWhiteSpace(name))
                {
                    p.Name = name;
                }

                if (state.HasValue)
                {
                    p.State = state.Value;
                }

                if (startDate != null)
                {
                    p.StartDate = startDate.Value;
                }

                if (endDate != null)
                {
                    p.FinishDate = endDate.Value;
                }

                int r = _dbContext.SaveChanges();

                response.EntityId = p.Id;
                response.Message  = $"Project {p.Name} successfully updated.";
            }
            catch (Exception ex)
            {
                response.Message = "Project update error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #9
0
        /// <summary>
        /// Delete Project
        /// </summary>
        /// <param name="id">Id</param>
        /// <returns></returns>
        public PmsResponse Delete(Guid id)
        {
            var response = new PmsResponse();

            try
            {
                var p = _dbContext.Projects.FirstOrDefault(p => p.Id == id);
                _dbContext.Projects.Remove(p);
                int r = _dbContext.SaveChanges();

                response.EntityId = p.Id;
                response.Message  = $"Project {p.Name} successfully deleted.";
            }
            catch (Exception ex)
            {
                response.Message = "Project delete error";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #10
0
        /// <summary>
        /// Attaches Project to Parent Project
        /// </summary>
        /// <param name="mainProjectId">Parent Project Id</param>
        /// <param name="childProjectId">Current Project Id</param>
        /// <returns></returns>
        public PmsResponse AttachProject(Guid mainProjectId, Guid childProjectId)
        {
            var response = new PmsResponse();

            try
            {
                var childProject = _dbContext.Projects.FirstOrDefault(p => p.Id == childProjectId);

                if (childProject == null)
                {
                    response.Errors.Add($"Project with ID = '{childProjectId}' not found.");
                }

                var mainProject = _dbContext.Projects.FirstOrDefault(p => p.Id == mainProjectId);

                if (mainProject == null)
                {
                    response.Errors.Add($"Project with ID = '{mainProjectId}' not found.");
                }

                if (response.Errors.Any())
                {
                    throw new Exception("Validation error.");
                }

                childProject.ParentId = mainProjectId;
                _dbContext.SaveChanges();

                response.EntityId = childProjectId;
                response.Message  = $"Project with ID='{mainProjectId}' set as parent for Project ID '{childProjectId}'";
            }
            catch (Exception ex)
            {
                response.Message = "Project attachment error.";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #11
0
        /// <summary>
        /// Create SubTask.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="description"></param>
        /// <param name="parentTaskId"></param>
        /// <returns></returns>
        public PmsResponse CreateSubTask(string name, string description, Guid parentTaskId)
        {
            var response   = new PmsResponse();
            var parentTask = GetTask(parentTaskId);

            if (parentTask == null)
            {
                response.Message = "Validation error";
                response.Errors.Add($"Task with Id '{parentTaskId}' not found.");
            }
            else
            {
                response = CreateTask(name, description, parentTask.ProjectId);

                if (response.Success)
                {
                    _taskRepository.Attach(parentTaskId, response.EntityId);
                }
            }

            return(response);
        }
예제 #12
0
        /// <summary>
        /// Create Project.
        /// </summary>
        /// <param name="code">Code</param>
        /// <param name="name">Name</param>
        /// <param name="parentId">Parent Id</param>
        /// <returns></returns>
        public PmsResponse CreateProject(string code, string name, Guid?parentId)
        {
            PmsResponse response = new PmsResponse();
            var         project  = _projectRepository.Find(x => x.Code.Equals(code));

            if (project.Any())
            {
                response.Message = "Validation error";
                response.Errors.Add($"Project with code '{code}' already exists.");
            }
            else
            {
                if (parentId.HasValue)
                {
                    var parentProject = _projectRepository.Find(x => x.Id == parentId.Value);

                    if (!parentProject.Any())
                    {
                        response.Message = "Validation error";
                        response.Errors.Add($"Parent Project not found.");
                    }

                    if (response.Success)
                    {
                        response = _projectRepository.Create(code, name);
                        if (response.Success)
                        {
                            _projectRepository.AttachProject(parentId.Value, response.EntityId);
                        }
                    }
                }
                else
                {
                    response = _projectRepository.Create(code, name);
                }
            }

            return(response);
        }
예제 #13
0
        /// <summary>
        /// Attach Task to Parent Task
        /// </summary>
        /// <param name="mainTaskId">Parent Task</param>
        /// <param name="childTaskId">Current Task</param>
        /// <returns></returns>
        public PmsResponse Attach(Guid mainTaskId, Guid childTaskId)
        {
            var response = new PmsResponse();

            try
            {
                var child = _dbContext.Tasks.FirstOrDefault(p => p.Id == childTaskId);
                child.ParentTaskId = mainTaskId;
                _dbContext.Update(child);
                _dbContext.SaveChanges();

                response.EntityId = childTaskId;
                response.Message  = $"Task with ID='{mainTaskId}' set as parent for Task ID '{childTaskId}'";
            }
            catch (Exception ex)
            {
                response.Message = "Task attachment error.";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }
예제 #14
0
        /// <summary>
        /// Changes Task State.
        /// </summary>
        /// <param name="taskId">Task Id.</param>
        /// <param name="state">State</param>
        /// <returns></returns>
        public PmsResponse ChangeTaskState(Guid taskId, State state)
        {
            var response = new PmsResponse();

            try
            {
                if (state == State.Planned)
                {
                    response.Errors.Add($"'{nameof(State.Planned)}' is a default state.");
                }
                else
                {
                    var task = _taskRepository.Find(x => x.Id == taskId);

                    if (!task.Any())
                    {
                        throw new Exception($"Task '{taskId}' not found.");
                    }

                    PmsResponse resp = null;
                    if (state == State.Completed)
                    {
                        var childTasks = _taskRepository.Find(x => x.ParentTaskId == taskId);
                        if (childTasks.Any(x => x.State != State.Completed))
                        {
                            response.Message = "Validation error";
                            response.Errors.Add("Unable to complete task. Not finished subtasks exist.");
                        }
                        else
                        {
                            resp = _taskRepository.SetState(taskId, state);
                        }
                    }
                    else if (state == State.InProgress)
                    {
                        resp = _taskRepository.SetState(taskId, state);
                    }

                    if (resp != null)
                    {
                        UpdateProjectState(task.FirstOrDefault().Project);

                        if (resp.Success)
                        {
                            response.EntityId = resp.EntityId;
                        }
                        else
                        {
                            response.Errors.AddRange(resp.Errors);
                        }
                        response.Message = resp.Message;
                    }
                }
            }
            catch (Exception ex)
            {
                response.Message = "Validation error.";
                response.Errors.Add(ex.Message);
            }

            return(response);
        }