public ActionResult Index(CandidateSearchModel candidateSearchModel, string sortString)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }
            var dto = mapper.Map <SearchCandidateDTO>(candidateSearchModel);
            ICollection <CandidateDTO> candidates;

            switch (sortString)
            {
            case SortStrings.DontSort:
                candidates = candidateAppService.Search(dto);
                break;

            case SortStrings.SortByExperience:
                candidates = candidateAppService.Search(dto).OrderBy(v => v.Experience).ToList();
                break;

            case SortStrings.SortByProfessionlField:
                candidates = candidateAppService.Search(dto).OrderBy(v => v.ProfessionalField).ToList();
                break;

            case SortStrings.SortBySkills:
                candidates = candidateAppService.Search(dto).OrderBy(v => v.Skills).ToList();
                break;

            default:
                candidates = candidateAppService.Search(dto);
                break;
            }

            return(PartialView(ViewStrings.SearchResultsView, mapper.Map <ICollection <CandidateModel> >(candidates)));
        }
Beispiel #2
0
        public IQueryable <Candidate> Find(CandidateSearchModel filter)
        {
            IQueryable <Candidate> query = dbSet.AsNoTracking();

            if (filter.Email != null)
            {
                query = query.Where(candidate => candidate.Contact != null && candidate.Contact.Email == filter.Email);
            }

            if (filter.Phone != null)
            {
                query = query.Where(candidate => candidate.Contact != null &&
                                    candidate.Contact.Phone == filter.Phone);
            }

            if (filter.Skype != null)
            {
                query = query.Where(candidate => candidate.Contact != null &&
                                    candidate.Contact.Skype == filter.Skype);
            }

            if (filter.HRM != null)
            {
                query = query.Where(candidate => candidate.HRM == filter.HRM);
            }

            if (filter.LastNameEng != null)
            {
                query = query.Where(candidate => candidate.LastNameEng == filter.LastNameEng);
            }

            if (filter.LastNameRus != null)
            {
                query = query.Where(candidate => candidate.LastNameRus == filter.LastNameRus);
            }

            if (filter.PrimarySkill != null)
            {
                query = query.Where(candidate => candidate.CandidatePrimarySkill != null &&
                                    candidate.CandidatePrimarySkill.TechSkill == filter.PrimarySkill);
            }

            if (filter.Level != null)
            {
                query = query.Where(candidate => candidate.CandidatePrimarySkill != null &&
                                    candidate.CandidatePrimarySkill.Level == filter.Level);
            }

            if (filter.City != null)
            {
                query = query.Where(candidate => candidate.City == filter.City);
            }

            if (filter.Status != null)
            {
                query = query.Where(candidate => candidate.Status == filter.Status);
            }

            return(query);
        }
Beispiel #3
0
        public async Task <IEnumerable <CandidateElasticModel> > Find(int skip, int amount,
                                                                      CandidateSearchModel searchOptions, CandidateSortModel sortModel)
        {
            var result = await Task.Run(() => _candidateElasticRepository.Search(skip, amount, searchOptions, sortModel));

            return(result);
        }
Beispiel #4
0
        public IHttpActionResult Get([FromBody] CandidateSearchModel searchParameters)
        {
            if (ModelState.IsValid)
            {
                var tupleResult = service.Get(
                    searchParameters.FirstName,
                    searchParameters.LastName,
                    searchParameters.RelocationAgreement,
                    searchParameters.IsMale,
                    searchParameters.MinAge,
                    searchParameters.MaxAge,
                    searchParameters.StartExperience,
                    searchParameters.MinSalary,
                    searchParameters.MaxSalary,
                    searchParameters.CurrencyId,
                    searchParameters.IndustryId,
                    searchParameters.Position,
                    searchParameters.Technology,
                    searchParameters.LanguageSkills,
                    searchParameters.CitiesIds,
                    searchParameters.Current,
                    searchParameters.Size
                    );

                var candidatesQuerryResult = tupleResult.Item1;
                var total = tupleResult.Item2;

                var ret = new { Candidate = candidatesQuerryResult, Current = searchParameters.Current, Size = searchParameters.Size, Total = total };
                return(Json(ret, BOT_SERIALIZER_SETTINGS));
            }
            return(BadRequest(ModelState));
        }
Beispiel #5
0
        public async Task <HttpContent> GetExcelByCandidates(int skip, int amount,
                                                             CandidateSearchModel searchModel, CandidateSortModel sortModel)
        {
            var stream = new MemoryStream(await AddToExcelCandidate(skip, amount, searchModel, sortModel));

            var content = CreateContent(stream, "Candidates.xlsx");

            return(content);
        }
Beispiel #6
0
        public async Task <byte[]> AddToExcelCandidate(int skip, int amount,
                                                       CandidateSearchModel searchOptions, CandidateSortModel sortModel)
        {
            var candidates = await candidateService.Find(skip, amount, searchOptions, sortModel);

            var excelCandidateList = candidates.Select(ConvertToExcelModel).ToList();

            var result = ExcelCreator.GenerateExcel(excelCandidateList);

            return(result);
        }
        public bool Filter(CandidateSearchModel searchOptions, Candidate candidate)
        {
            if (EqulasIdNullable(candidate.City, searchOptions.City))
            {
                return(false);
            }

            if (EqulasIdNullable(candidate.CandidatePrimarySkill?.TechSkill, searchOptions.PrimarySkill))
            {
                return(false);
            }

            if (EqualsId(candidate.HRM, searchOptions.HRM))
            {
                return(false);
            }

            if (EqualsId(candidate.Status, searchOptions.Status))
            {
                return(false);
            }

            if (EqulasIdNullable(candidate.CandidatePrimarySkill?.Level, searchOptions.Level))
            {
                return(false);
            }

            if (ContainsString(searchOptions.LastNameRus, candidate.LastNameRus))
            {
                return(false);
            }

            if (ContainsString(searchOptions.LastNameEng, candidate.LastNameEng))
            {
                return(false);
            }

            if (ContainsString(searchOptions.Phone, candidate.Contact?.Phone))
            {
                return(false);
            }

            if (ContainsString(searchOptions.Email, candidate.Contact?.Email))
            {
                return(false);
            }

            if (ContainsString(searchOptions.Skype, candidate.Contact?.Skype))
            {
                return(false);
            }

            return(true);
        }
        public IEnumerable <CandidateElasticModel> Search(int skip, int amount,
                                                          CandidateSearchModel searchModel, CandidateSortModel sortModel)
        {
            var sort = Sort(sortModel);

            searchModel = searchModel ?? new CandidateSearchModel();
            return(_client.Search <CandidateElasticModel>(s =>
                                                          s.Index(IndexName)
                                                          .Skip(skip)
                                                          .Take(amount)
                                                          .Query(q =>
                                                                 q.Nested(ns => ns
                                                                          .Path(p => p.PrimarySkill)
                                                                          .Query(qr => qr
                                                                                 .Term(x => x.PrimarySkill.TechSkill, searchModel.PrimarySkill)
                                                                                 )) &&
                                                                 q.Nested(ns => ns
                                                                          .Path(p => p.PrimarySkill)
                                                                          .Query(qr => qr
                                                                                 .Term(x => x.PrimarySkill.Level, searchModel.Level)
                                                                                 )) &&
                                                                 q.Term(x => x.HRM, searchModel.HRM) &&
                                                                 q.Term(x => x.City, searchModel.City) &&
                                                                 q.Term(x => x.Status.Id, searchModel.Status) &&
                                                                 //q.Match(m => m
                                                                 //    .Field(x => x.Phone)
                                                                 //    .Query(searchModel.Phone)
                                                                 //    .Fuzziness(Fuzziness.Auto)
                                                                 //) &&
                                                                 q.Fuzzy(x => x
                                                                         .Field(z => z.LastNameEng)
                                                                         // .Boost(1)
                                                                         .Value(searchModel.LastNameEng)
                                                                         .Fuzziness(Fuzziness.Auto)
                                                                         ) &&
                                                                 q.Fuzzy(x => x
                                                                         .Field(z => z.Skype)
                                                                         .Value(searchModel.Skype)
                                                                         .Fuzziness(Fuzziness.Auto)
                                                                         ) &&
                                                                 q.Fuzzy(x => x
                                                                         .Field(z => z.Email)
                                                                         .Value(searchModel.Email)
                                                                         .Fuzziness(Fuzziness.Auto)
                                                                         ) &&
                                                                 q.Fuzzy(x => x
                                                                         .Field(z => z.Phone)
                                                                         .Value(searchModel.Phone)
                                                                         .Fuzziness(Fuzziness.Auto)
                                                                         )
                                                                 )
                                                          .Sort(p => p = sort)
                                                          ).Documents);
        }
Beispiel #9
0
        // GET: Candidates
        public ActionResult Index(CandidateSearchModel model)
        {
            //qualification type select list
            ViewBag.TypesList = GetTypes(null);

            //qualification name select list
            ViewBag.NamesList = GetNames(null);

            //doing search
            CandidateLogic candidateLogic = new CandidateLogic();

            model = candidateLogic.GetCandidates(model);

            return(View(model));
        }
Beispiel #10
0
        public ActionResult GetCandidates(int id)
        {
            var vacancy = vacancyAppService.Get(id);

            if (vacancy == null)
            {
                return(View(ViewStrings.ErrorView));
            }
            CandidateSearchModel candidateSModel = new CandidateSearchModel()
            {
                Experience        = vacancy.Experience,
                ProfessionalField = vacancy.ProfessionalField,
                Skills            = vacancy.Requierements
            };

            return(RedirectToAction(ControllerStrings.IndexMethod, ControllerStrings.Candidate, new { candidateSearchModel = candidateSModel }));
        }
        public async Task <ICollection <Candidate> > Find(int skip, int amount, CandidateSearchModel searchOptions, CandidateSortModel sortModel)
        {
            IEnumerable <Candidate> candidates;

            if (searchOptions != null)
            {
                candidates = await Task.Run(() => candidateRepository.Find(searchOptions));
            }
            else
            {
                candidates = await Task.Run(() => candidateRepository.ReadAll());
            }

            candidates = Sorting(candidates, sortModel);

            var result = candidates.Skip(skip).Take(amount).ToList();

            return(result);
        }
Beispiel #12
0
        public CandidateSearchModel GetCandidates(CandidateSearchModel model)
        {
            //replace * with % for text box wild card search
            if (model.SchFirst != null)
            {
                model.SchFirst = model.SchFirst.Replace('*', '%');
            }
            if (model.SchLast != null)
            {
                model.SchLast = model.SchLast.Replace('*', '%');
            }
            if (model.SchPhone != null)
            {
                model.SchPhone = model.SchPhone.Replace('*', '%');
            }
            if (model.SchEmail != null)
            {
                model.SchEmail = model.SchEmail.Replace('*', '%');
            }
            if (model.SchZipCode != null)
            {
                model.SchZipCode = model.SchZipCode.Replace('*', '%');
            }

            //prepare qualification type parameter for stored procedure, matching multiple type
            if ((model.SchQTypes != null) && (model.SchQTypes.Any()))
            {
                string qtype = "";
                foreach (var item in model.SchQTypes)
                {
                    qtype += item + "|";
                }
                model.SchQuaType = qtype;
            }

            //prepare qualification name parameter for stored procedure, matching multiple name
            if ((model.SchQNames != null) && (model.SchQNames.Any()))
            {
                string qname = "";
                foreach (var item in model.SchQNames)
                {
                    qname += item + "|";
                }
                model.SchQuaName = qname;
            }

            //sql to linq execute the select candidate stored procedure
            CandidateDataClassesDataContext candidateData = new CandidateDataClassesDataContext();
            var result = candidateData.procCandidateSelect(model.SchFirst, model.SchLast, model.SchEmail, model.SchPhone,
                                                           model.SchZipCode, model.SchQuaType, model.SchQuaName, model.SchDate);

            //get result and store in temporary candidate list
            List <Models.Candidate.Candidate> lstCandidate = new List <Models.Candidate.Candidate>();

            foreach (var item in result)
            {
                Models.Candidate.Candidate candidate = new Models.Candidate.Candidate();
                candidate.CandidateId = item.CandidateId;
                candidate.FirstName   = item.FirstName;
                candidate.LastName    = item.LastName;
                candidate.Email       = item.Email;
                candidate.PhoneNumber = item.PhoneNumber;
                candidate.ZipCode     = item.ZipCode;
                lstCandidate.Add(candidate);
            }

            //assign back to model candidate, get count and return model
            model.Candidates   = lstCandidate;
            model.TotalRecords = model.Candidates.Count();
            return(model);
        }
Beispiel #13
0
        // GET: Canidates
        public async Task <IActionResult> Index(CandidateSearchModel candidateSearchModel)
        {
            candidateSearchModel.Candidates = await candidateSearchModel.GetCandidatesFromSearch(_context).ToListAsync();

            return(View(candidateSearchModel));
        }
Beispiel #14
0
        public async Task FindTest()
        {
            Candidate candidate1 = new Candidate()
            {
                Id = 22,

                FirstNameEng = "David",

                LastNameEng = "Fraller",

                FirstNameRus = "Давид",

                LastNameRus = "Фраллер",

                Status = 1,

                City = 2
            };

            Candidate candidate2 = new Candidate()
            {
                Id = 2,

                FirstNameEng = "Victor",

                LastNameEng = "Toll",

                FirstNameRus = "Виктор",

                LastNameRus = "Толл",

                Status = 3
            };

            CandidateSearchModel searchModel = new CandidateSearchModel()
            {
                LastNameEng = "David",

                City = 2,

                Status = 1
            };

            IQueryable <Candidate> candidateFindList = new List <Candidate>()
            {
                candidate1
            }.AsQueryable();

            IQueryable <Candidate> candidateReadList = new List <Candidate>()
            {
                candidate1, candidate2
            }.AsQueryable();

            mockCandidateRepository.Setup(x => x.Find(It.IsAny <CandidateSearchModel>())).Returns(candidateFindList);

            mockCandidateRepository.Setup(x => x.ReadAll()).Returns(candidateReadList);

            var candidateRepository = mockCandidateRepository.Object;

            var unitOfWork = mockUnitOfWork.Object;

            var contactRepository = mockContactRepository.Object;

            var jobContactsRepository = mockJobContactsRepository.Object;

            var statusRepository = mockStatusRepository.Object;

            var vacancyRepository = mockVacancyRepository.Object;

            var eventService = mockEventService.Object;

            var candidateService = new CandidateService(unitOfWork, candidateRepository, contactRepository,
                                                        jobContactsRepository, statusRepository, vacancyRepository, eventService);

            var result = await candidateService.Find(0, 5, searchModel, null);

            Assert.IsNotNull(result);

            var actual = await candidateService.Find(0, 5, null, null);

            Assert.AreEqual(2, actual.Count);
        }