示例#1
0
 public SchedulerService(
     TeamShiftScheduler teamShiftScheduler,
     IRepository <Employee, int> employeeRepository,
     IRepository <TransitionSet, int> transitionSetRepository
     )
 {
     _teamShiftScheduler      = teamShiftScheduler;
     _employeeRepository      = employeeRepository;
     _transitionSetRepository = transitionSetRepository;
 }
示例#2
0
        public async void CreateNewSchedule_Has_Statistics()
        {
            // Ref date, Monday August 20, 2018
            var date = new DateTime(2018, 8, 20);

            var teamShiftScheduler = new TeamShiftScheduler();

            var schedules = await teamShiftScheduler.CreateNewScheduleAsync(GetDefaultTransitionSet().RuleSet, GetEmployees(), date, 14, 2, 2, 7, 12, 1);

            // We have statistics for debugging
            Assert.NotEmpty(teamShiftScheduler.StatisticalResults);
        }
示例#3
0
        public async void CreateNewSchedule_Has_Result()
        {
            // Ref date, Monday August 20, 2018
            var date = new DateTime(2018, 8, 20);

            var teamShiftScheduler = new TeamShiftScheduler();

            var schedules = await teamShiftScheduler.CreateNewScheduleAsync(GetDefaultTransitionSet().RuleSet, GetEmployees(), date, 14, 2, 2, 7, 12, 1);

            // We have one schedule solution in the results
            Assert.Single(schedules);
        }
示例#4
0
        public async void CreateNewSchedule_Has_Valid_Params()
        {
            // Ref date, Monday August 20, 2018
            var date = new DateTime(2018, 8, 20);

            var teamShiftScheduler = new TeamShiftScheduler();

            var employees = GetEmployees();
            var schedules = await teamShiftScheduler.CreateNewScheduleAsync(GetDefaultTransitionSet().RuleSet, employees, date, 14, 2, 2, 7, 12, 3);

            // We have 3 solutions, dates match and we have 14 days * 10 employee shifts
            Assert.Equal(3, schedules.Count);
            foreach (var schedule in schedules)
            {
                Assert.Equal(14, schedule.Days);
                Assert.Equal(date, schedule.StartDate);
                Assert.Equal(date.AddDays(14), schedule.EndDate);
                Assert.Equal(140, schedule.Shifts.Count);

                foreach (var shift in schedule.Shifts)
                {
                    if (shift.Type == ShiftType.Day)
                    {
                        Assert.Equal(7, shift.StartDate.Hour);
                    }
                    if (shift.Type == ShiftType.Night)
                    {
                        Assert.Equal(19, shift.StartDate.Hour);
                    }
                    if (shift.Type == ShiftType.Off)
                    {
                        Assert.Equal(0, shift.StartDate.Hour);
                    }

                    if (shift.Type == ShiftType.Day)
                    {
                        Assert.Equal(19, shift.EndDate.Hour);
                    }
                    if (shift.Type == ShiftType.Night)
                    {
                        Assert.Equal(7, shift.EndDate.Hour);
                    }
                    if (shift.Type == ShiftType.Off)
                    {
                        Assert.Equal(0, shift.EndDate.Hour);
                    }

                    Assert.Contains(shift.Employee, employees);
                }
            }
        }
示例#5
0
        public async void CreateNewSchedule_Has_Valid_Result()
        {
            // Ref date, Monday August 20, 2018
            var date = new DateTime(2018, 8, 20);

            var teamShiftScheduler = new TeamShiftScheduler();

            var employees = GetEmployees();
            var schedules = await teamShiftScheduler.CreateNewScheduleAsync(GetDefaultTransitionSet().RuleSet, employees, date, 14, 2, 2, 7, 12, 3);

            var schedule = schedules.FirstOrDefault();

            Assert.NotNull(schedule);

            var shifts = schedule?.Shifts.ToList();

            Assert.IsType <Schedule>(schedule);
            Assert.IsType <List <Shift> >(shifts);

            // Check the result for rules
            for (int i = 0; i < 14; i++)
            {
                var currentDate = date.AddDays(i);
                var dateShifts  = shifts.Where(w => w.StartDate.Date == currentDate).ToList();

                Assert.Equal(10, dateShifts.Count);

                Assert.Equal(2, dateShifts.Count(w => w.Type == ShiftType.Day));
                Assert.Equal(2, dateShifts.Count(w => w.Type == ShiftType.Night));
                Assert.Equal(6, dateShifts.Count(w => w.Type == ShiftType.Off));

                Assert.Equal(10, dateShifts.Select(s => s.Employee).Distinct().Count());
            }

            // And more...
        }