public IActionResult Save([FromBody] TaskSaveModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } try { model.SetStatusByUserId(GetCurrentUserId()); return(Ok(_tasksMethods.Save(model))); } catch (ClientException ex) { return(BadRequest(new { message = ex.Message })); } catch (Exception ex) { return(StatusCode(500, new { message = ex.Message })); } }
public ProjectTask Save(TaskSaveModel model) { if (string.IsNullOrEmpty(model.title)) { throw new Exception("title required"); } if (model.startDate.HasValue) { if (model.plannedEnd.HasValue && model.plannedEnd.Value <= model.startDate.Value) { throw new ClientException("Planned Date must be greater than Start Date"); } if (model.actualEnd.HasValue && model.actualEnd.Value <= model.startDate.Value) { throw new ClientException("Actual Date must be greater than Start Date"); } } else if (model.plannedEnd.HasValue || model.actualEnd.HasValue) { throw new Exception("Cannot insert Planned or Actual end date without a Start date"); } if (model.id.HasValue) { // # save task # // get project var dbTask = db.ProjectTasks.FirstOrDefault(k => k.ID == model.id.Value); if (dbTask == null) { throw new ClientException("record not found"); } // check if status changed bool statusChanged = dbTask.StatusCode != model.statusCode || dbTask.StatusByUserId != model.GetStatusByUserId(); if (statusChanged) { // append project's status modification db.ProjectTaskStatusModifications.Add(new DataSets.ProjectTaskStatusModification() { ProjectTaskId = dbTask.ID, StatusCode = dbTask.StatusCode, ModifiedByUserId = dbTask.StatusByUserId, DateModified = DateTime.Now }); } // update the task dbTask.Title = model.title; dbTask.Description = model.description; dbTask.StartDate = model.startDate; dbTask.PlannedEnd = model.plannedEnd; dbTask.ActualEnd = model.actualEnd; dbTask.LastModifiedDate = DateTime.Now; dbTask.StatusCode = model.statusCode; dbTask.StatusByUserId = model.GetStatusByUserId(); db.SaveChanges(); return(GetById(dbTask.ID)); } else { // # new task # // check title if exist bool nameExist = db.ProjectTasks.Any(k => k.Title == model.title); if (nameExist) { throw new ClientException($"task exist under title {model.title}"); } DataSets.ProjectTask dbTask = new DataSets.ProjectTask() { Title = model.title, ProjectId = model.projectId, Description = model.description, DateAdded = DateTime.Now, StartDate = model.startDate, PlannedEnd = model.plannedEnd, ActualEnd = model.actualEnd, StatusCode = model.statusCode, StatusByUserId = model.GetStatusByUserId() }; // add the task db.ProjectTasks.Add(dbTask); // save changes on task db.SaveChanges(); return(GetById(dbTask.ID)); } }