public void ShouldCalculateWeeklyWithHoliday()
        {
            // Arrange
            var schedule = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(1, 2, 3, false),
                    new HourSet(1, 2, 3, true),
                    new HourSet(4, 5, 6, false),
                }
            };

            // Act
            var person = new MotorVehiclePerson()
            {
                WeeklySchedule = schedule
            };


            // Assert
            Assert.Equal(5, person.WeeklyCmvoHours);
            Assert.Equal(7, person.WeeklyHmvoHours);
            Assert.Equal(9, person.WeeklyOtherHours);
            Assert.Equal(1, person.NumHolidays);
        }
        private MotorVehiclePerson BuildPerson(MVSimulationViewModel vm)
        {
            var weeklySchedule = new MvoSchedule()
            {
                Hours = new List <HourSet>()
            };

            foreach (var vmHour in vm.Person.Hours)
            {
                weeklySchedule.Hours.Add(new HourSet(vmHour.HoursCmvo.Value, vmHour.HoursHmvo.Value, vmHour.HoursOther.Value, vmHour.IsHoliday));
            }

            var result = new MotorVehiclePerson()
            {
                Id             = Guid.NewGuid(),
                WeeklySchedule = weeklySchedule
            };

            return(result);
        }
        private List <Tuple <MvoSchedule, decimal> > GetSchedules()
        {
            var result = new List <Tuple <MvoSchedule, decimal> >();

            var scenario1 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(0, 8, 4, false),
                    new HourSet(0, 4, 8, false),
                    new HourSet(0, 10, 0, false),
                    new HourSet(0, 0, 10, false),
                    new HourSet(0, 6, 6, false),
                    new HourSet(0, 0, 8, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario1, 4m));

            var scenario2 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(8, 0, 4, false),
                    new HourSet(4, 0, 8, false),
                    new HourSet(10, 0, 0, false),
                    new HourSet(0, 0, 10, false),
                    new HourSet(6, 0, 6, false),
                    new HourSet(0, 5, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario2, 16m));

            var scenario3 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(6, 0, 6, false),
                    new HourSet(6, 0, 6, false),
                    new HourSet(10, 0, 0, false),
                    new HourSet(8, 2, 0, false),
                    new HourSet(6, 0, 6, false),
                    new HourSet(0, 5, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario3, 13m));

            var scenario4 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(9, 0, 0, false),
                    new HourSet(9, 0, 0, false),
                    new HourSet(9, 0, 0, false),
                    new HourSet(9, 0, 0, false),
                    new HourSet(9, 0, 0, false),
                    new HourSet(0, 0, 4, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario4, 4m));

            var scenario6 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(4, 4, 5, false),
                    new HourSet(4, 5, 4, false),
                    new HourSet(5, 4, 4, false),
                    new HourSet(4, 4, 5, false),
                    new HourSet(4, 5, 4, false),
                    new HourSet(0, 0, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario6, 5m));

            var scenario7 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(4, 4, 6, false),
                    new HourSet(4, 6, 4, false),
                    new HourSet(6, 4, 4, false),
                    new HourSet(5, 5, 5, false),
                    new HourSet(0, 0, 0, false),
                    new HourSet(0, 4, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario7, 5m));

            var scenario8 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(8, 4, 0, false),
                    new HourSet(8, 0, 4, false),
                    new HourSet(0, 2, 8, false),
                    new HourSet(0, 0, 0, true),
                    new HourSet(8, 4, 0, false),
                    new HourSet(0, 6, 4, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario8, 6m));

            var scenario9 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(8, 4, 0, false),
                    new HourSet(8, 0, 4, false),
                    new HourSet(0, 2, 8, false),
                    new HourSet(6, 5, 1, true),
                    new HourSet(8, 4, 0, false),
                    new HourSet(0, 6, 4, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario9, 6m));

            var scenario10 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(0, 4, 10, false),
                    new HourSet(0, 12, 6, false),
                    new HourSet(13, 0, 1, false),
                    new HourSet(0, 14, 0, false),
                    new HourSet(4, 0, 9, false),
                    new HourSet(0, 0, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario10, 13m));

            var scenario11 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(0, 12, 0, false),
                    new HourSet(0, 12, 0, false),
                    new HourSet(0, 12, 0, false),
                    new HourSet(0, 12, 0, false),
                    new HourSet(10, 0, 2, false),
                    new HourSet(0, 0, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario11, 3m));

            var scenario12 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(0, 0, 12, false),
                    new HourSet(0, 14, 0, false),
                    new HourSet(10, 0, 0, false),
                    new HourSet(0, 6, 10, false),
                    new HourSet(0, 12, 0, false),
                    new HourSet(0, 0, 6, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario12, 10m));

            var scenario13 = new MvoSchedule()
            {
                Hours = new List <HourSet>()
                {
                    new HourSet(8, 0, 0, false),
                    new HourSet(8, 0, 0, false),
                    new HourSet(8, 0, 0, false),
                    new HourSet(0, 0, 10, false),
                    new HourSet(0, 0, 0, false),
                    new HourSet(0, 10, 0, false),
                    new HourSet(0, 0, 0, false),
                }
            };

            result.Add(new Tuple <MvoSchedule, decimal>(scenario13, 2m));

            return(result);
        }