/// <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); }
/// <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); }
/// <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); }
/// <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); }
public ActionResult FinishTask([FromBody] FinishTaskModel model) { PmsResponse response = _workUnit.ChangeTaskState(model.Id, State.Completed); if (!response.Success) { return(BadRequest(response)); } return(Ok(response)); }
public ActionResult StartTask([FromBody] StartTaskModel model) { PmsResponse response = _workUnit.ChangeTaskState(model.Id, State.InProgress); if (!response.Success) { return(BadRequest(response)); } return(Ok(response)); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }