コード例 #1
0
        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 }));
            }
        }
コード例 #2
0
        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));
            }
        }