public static Employee GenerateEmployee(int employeeLevel, bool?isMale = null)
        {
            var(addr1, addr2) = DummyData.GetRandomChitownStreet();
            var zip       = DummyData.GetRandomChitownZip();
            var dateHired = DummyData.GetRandomHireDate();
            var male      = isMale ?? DummyData.CoinToss();

            var employee = new Employee(
                dateHired: DummyData.GetRandomHireDate(),
                dateOfBirth: DummyData.GetRandomBirthDate(),
                employeeLevel: employeeLevel,
                firstName: DummyData.GenerateFakeFirstOrMiddleName(male),
                gender: male ? Gender.Male : Gender.Female,
                homeAddress: new Address(addr1, "Chicago", new State("IL"), new ZipCode(zip), addr2),
                lastName: DummyData.GenerateFakeLastName(),
                paidTimeOffPolicy: new PaidTimeOffPolicy(false, employeeLevel, true, 320.0m, "DEMO POLICY", 10.0m)
            {
                Id = random.Next()
            },
                salary: new Money((random.Next(25) + 10 * employeeLevel) * 1000.0M, Currency.USD),
                socialSecurityNumber: new SocialSecurityNumber(DummyData.GenerateFakeSSN()),
                middleName: random.Next() % 3 != 0 ? DummyData.GenerateFakeFirstOrMiddleName(male) : null,
                ptoHoursRemaining: 10.0m,
                subordinates: employeeLevel > 1 ? (from n in Enumerable.Range(1, random.Next(3) + employeeLevel) select GenerateEmployee(employeeLevel - 1)).ToList() : new List <Employee>()
                );

            return(employee);
        }