Beispiel #1
0
        public JobTask UpdateJobTask(JobTaskId jobTaskId, TitleAndDescription titleAndDescription, int order, IEnumerable <JobTaskItem> jobTaskItems)
        {
            JobTask existingJobTask = _jobTasks.SingleOrDefault(jt => jt.Id == jobTaskId);

            Guard.Against.Null(existingJobTask, nameof(existingJobTask));

            int currentOrder = existingJobTask.Order;
            int newTaskOrder = order > _jobTasks.Max(jt => jt.Order) ? _jobTasks.Max(jt => jt.Order) : order;

            existingJobTask
            .UpdateTitleAndDescription(titleAndDescription);

            existingJobTask.ClearAllJobTaskItems();
            if (jobTaskItems.Any())
            {
                foreach (var jobTaskItem in jobTaskItems)
                {
                    existingJobTask.AddNewJobTaskItem(jobTaskItem);
                }
            }

            if (existingJobTask.Order == newTaskOrder)
            {
                return(existingJobTask);
            }

            existingJobTask.PlaceTaskInPosition(newTaskOrder);

            // If the new task order is greater than the current order of the job task,
            // everything task below it in order gets decremented
            if (newTaskOrder > currentOrder)
            {
                ReorderJobTasks(
                    _jobTasks.Where(j => j.Order <= newTaskOrder && j.Id != existingJobTask.Id),
                    jt => jt.DecrementOrder(),
                    jt => jt.Order != 0
                    );
            }
            else
            {
                ReorderJobTasks(
                    _jobTasks.Where(j => j.Order >= newTaskOrder && j.Id != existingJobTask.Id),
                    jt => jt.IncrementOrder(),
                    jt => jt.Order + 1 < _jobTasks.Count
                    );
            }

            return(existingJobTask);
        }