public static IEnumerable<Employee> FindEmployees(IEnumerable<Employee> employees, EmployeeQuery query)
        {
            var foundEmployees = new List<Employee>();

            foreach (Employee employee in employees)
            {
                // skills
                if (query.RequestedSkills != null && query.RequestedSkills.Length > 0 &&
                    !query.RequestedSkills.Any(employee.HasSkill))
                {
                    continue;
                }

                // career level
                if (query.RequestedCareerLevels != null && query.RequestedCareerLevels.Length > 0 &&
                    !query.RequestedCareerLevels.Any(requestedCareerLevel => employee.CareerLevel == requestedCareerLevel))
                {
                    continue;
                }

                // free time
                if (!employee.HasAnyAvailableTime(query.BeginOfWorkPeriod, query.EndOfWorkPeriod))
                {
                    continue;
                }

                foundEmployees.Add(employee);
            }

            return foundEmployees;
        }
        public EmployeeSearchResult[] FindPotentialEmployeesForCustomer(EmployeeQuery query)
        {
            if (query == null) throw new ArgumentNullException("query");

            IEnumerable<Employee> foundEmployees = this.FindEmployees(query);
            return foundEmployees
                .Select(e => new EmployeeSearchResult
                                 {
                                     Id = e.Id,
                                     Distance = 10.1F,
                                     EmployeeName = String.Format("{0} {1}", e.FirstName, e.LastName),
                                     Skills = e.Skills.ToArray(),
                                     Level = e.CareerLevel
                                 })
                .ToArray();
        }
        public void FindEmployees_NoRequestedSkillsAndCareerlevels_ReturnsAllEmployees()
        {
            // arrange
            IEnumerable<Employee> employees = CreateEmployees();

            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = new DateTime(2013, 1, 1),
                EndOfWorkPeriod = new DateTime(2015, 1, 4),
            };

            // act
            IEnumerable<Employee> result = EmployeeReservationServiceHelper.FindEmployees(employees, query);

            // assert
            Assert.AreEqual(2, result.Count());
        }
        public void FindPotentialEmployeesForCustomer_NoRequestedSkillsAndCareerlevels_ReturnsAllEmployees()
        {
            // arrange
            Mock<IRepository> mockedRepository = CreateMockedRepository();
            var service = new EmployeeReservationService(mockedRepository.Object);

            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = new DateTime(2013, 1, 1),
                EndOfWorkPeriod = new DateTime(2015, 1, 4),
            };

            // act
            EmployeeSearchResult[] result = service.FindPotentialEmployeesForCustomer(query);

            // assert
            Assert.AreEqual(2, result.Count());
        }
        public void FindEmployees_RequestASkillFromOneEmployee_ReturnsOnlyMatchingEmployees()
        {
            // arrange
            IEnumerable<Employee> employees = CreateEmployees();

            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = new DateTime(2013, 1, 1),
                EndOfWorkPeriod = new DateTime(2015, 1, 4),
                RequestedSkills = new[] { Skill.SqlServer }
            };

            // act
            IEnumerable<Employee> result = EmployeeReservationServiceHelper.FindEmployees(employees, query);

            // assert
            Assert.AreEqual(1, result.Count());
        }
        public EmployeeSearchResult[] FindPotentialEmployeesForCustomer(EmployeeQuery query)
        {
            var e = new EmployeeSearchResult()
                        {
                            Distance = 10.3f,
                            EmployeeName = "Hans Wurst",
                            Id = 1,
                            Level = CareerLevel.SoftwareEngineer,
                            Skills = new[] { Skill.WCF, Skill.AspDotNet, }
                        };

            var f = new EmployeeSearchResult()
            {
                Distance = 5.1f,
                EmployeeName = "Super Dev",
                Id = 1,
                Level = CareerLevel.JuniorSoftwareEngineer,
                Skills = new[] { Skill.WCF, Skill.CSharp, }
            };

            return new[] { e, f };
        }
        private IEnumerable<EmployeeSearchResult> SearchEmployees(SearchParamViewModel searchParamViewModel)
        {
            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = searchParamViewModel.StartDate,
                EndOfWorkPeriod = searchParamViewModel.EndDate,
                CustomerId = searchParamViewModel.SelectedCustomer,
                RequestedCareerLevels = searchParamViewModel.SelectedCareerLevels.Select(i => (CareerLevel)i).ToArray(),
                RequestedSkills = searchParamViewModel.SelectedSkills.Select(i => (Skill)i).ToArray()
            };

            return this.reservationService.FindPotentialEmployeesForCustomer(query);
        }
        public void FindEmployees_RequestOneCareerlevels_ReturnsOnlyMatchingEmployees()
        {
            // arrange
            IEnumerable<Employee> employees = CreateEmployees();

            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = new DateTime(2013, 1, 1),
                EndOfWorkPeriod = new DateTime(2015, 1, 4),
                RequestedCareerLevels = new[] { CareerLevel.JuniorSoftwareEngineer },
            };

            // act
            IEnumerable<Employee> result = EmployeeReservationServiceHelper.FindEmployees(employees, query);

            // assert
            Assert.AreEqual(1, result.Count());
        }
        public void FindEmployees_RequestedPeriodContainsOnlyOneEmployee_ReturnsOnlyMatchingEmployees()
        {
            // arrange
            IEnumerable<Employee> employees = CreateEmployees();

            var query = new EmployeeQuery
            {
                BeginOfWorkPeriod = new DateTime(2013, 5, 1),
                EndOfWorkPeriod = new DateTime(2013, 6, 1),
            };

            // act
            IEnumerable<Employee> result = EmployeeReservationServiceHelper.FindEmployees(employees, query);

            // assert
            Assert.AreEqual(1, result.Count());
        }
        private void RefreshValues()
        {
            var x = this.CareerLevels.SelectedItems.Count;

            var employeeQuery = new EmployeeQuery()
                                    {
                                        CustomerId = this.selectedCustomer.Id,
                                        BeginOfWorkPeriod = this.BeginOfWorkPeriod,
                                        EndOfWorkPeriod = this.EndOfWorkPeriod,
                                        RequestedCareerLevels = this.CareerLevels.SelectedItems.ToArray(),
                                        RequestedSkills = this.Skills.SelectedItems.ToArray()
                                    };

            EmployeeSearchResult[] result = this.service.FindPotentialEmployeesForCustomer(employeeQuery);
            var filtered = result.Where(empl => this.CareerLevels.SelectedItems.Contains(empl.Level));
            this.availableEmployees.ReplaceAllItemsWith(filtered);
        }
 private IEnumerable<Employee> FindEmployees(EmployeeQuery query)
 {
     return EmployeeReservationServiceHelper.FindEmployees(this.repository.GetEmployees(), query);
 }