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;
            }
        }