public ISchedule LoadSchedule(int id) { // Get basic information about schedule ISchedulePresentationData schedule = GetScheduleFromId(id); ISchedule output = new ScheduleModel(schedule.Id, schedule.Name, schedule.StartingDay, schedule.LastDay); // Get list of employees (without available working options for now) List <WorkingPlan> plans = GetWorkingPlans(); List <IEmployeePresentationData> employeeData = GetEmployees(); List <IEmployee> employeesWithoutWorkingPlan = common.GetEmployeesWithoutWorkingPlan(plans, employeeData, output); // Fill in the list of employees with available options List <IEmployee> employees = new List <IEmployee>(); List <WorkingOptionOfEmployee> workingOptionOfEmployees = GetWorkingOptionOfEmployees(); List <IWorkingOption> workingOptions = GetWorkingOptions(); common.FillEmployeesWithWorkingOptions(employees, employeesWithoutWorkingPlan, workingOptionOfEmployees, workingOptions, output); // Add each employee to output schedule employees.ForEach(e => output.AddEmployee(e)); // Get working plan for each employee common.GetWorkingPlanForEmployees(employees, plans, output); return(output); }