public async Task <bool> EditAsync(AssignmentEditDto input) { var assignment = await this.context.Assignments.SingleOrDefaultAsync(a => a.Id == input.Id); assignment.ExecutorId = input.ExecutorId; assignment.StartingDate = DateTime.ParseExact(input.StartingDate, Constants.DATETIME_FORMAT, CultureInfo.InvariantCulture); if (input.Deadline == Constants.EMPTY_STRING) { assignment.Deadline = null; } else if (input.Deadline == null) { assignment.Deadline = null; } else { assignment.Deadline = DateTime.ParseExact(input.Deadline, Constants.DATETIME_FORMAT, CultureInfo.InvariantCulture); } assignment.Priority = input.Priority; assignment.Type = input.Type; assignment.Name = input.Name; assignment.Description = input.Description; assignment.IsProjectRelated = input.IsProjectRelated; if (input.IsProjectRelated) { assignment.ProjectId = input.ProjectId; } else { assignment.ProjectId = null; } await this.ChangeStatusAndProgressLogic(assignment, input); await this.AddRemoveAssistants(assignment, input); this.context.Assignments.Update(assignment); var result = await this.context.SaveChangesAsync(); return(result > 0); }
private async Task AddRemoveAssistants(Assignment assignment, AssignmentEditDto input) { var assignmentAssistantsIds = assignment.AssignmentsAssistants.Select(aa => aa.AssistantId).ToList(); var assistantsToRemove = assignmentAssistantsIds.Except(input.AssistantsIds).ToList(); var assistantsToAdd = input.AssistantsIds.Except(assignmentAssistantsIds).ToList(); if (assistantsToRemove.Count() > 0) { await this.assignmentsEmployeesService.RemoveAssistantsAsync(assistantsToRemove, assignment.Id); } if (assistantsToAdd.Count() > 0) { await this.assignmentsEmployeesService.AddAssistantsAsync(assistantsToAdd, assignment.Id); } }
//Helper methods private async Task ChangeStatusAndProgressLogic(Assignment assignment, AssignmentEditDto input) { if (assignment.Status.Name == Constants.STATUS_COMPLETED && assignment.StatusId != input.StatusId) { assignment.EndDate = null; assignment.StatusId = input.StatusId; assignment.Progress = input.Progress; } else if ((await this.statusesService.GetStatusNameByIdAsync(input.StatusId)) == Constants.STATUS_COMPLETED && assignment.StatusId != input.StatusId) { assignment.EndDate = DateTime.UtcNow; assignment.StatusId = input.StatusId; assignment.Progress = Constants.PROGRESS_MAX_VALUE; } else { assignment.StatusId = input.StatusId; assignment.Progress = input.Progress; } }