예제 #1
0
        public void TryGetVacancyReference(string value, bool expectParse, string expectedVacancyReference)
        {
            string vacancyReference;

            Assert.That(VacancyHelper.TryGetVacancyReference(value, out vacancyReference), Is.EqualTo(expectParse));
            Assert.That(vacancyReference, Is.EqualTo(expectedVacancyReference));
        }
예제 #2
0
 public static void AddServerRules(this AbstractValidator <ApprenticeshipSearchViewModel> validator)
 {
     validator.RuleFor(x => x.Location)
     .Length(3, 99)
     .When(x => x.Location != null && !x.Location.Any(Char.IsDigit) && !VacancyHelper.IsVacancyReference(x.Keywords))
     .WithMessage(ApprenticeshipSearchViewModelMessages.LocationMessages.LengthErrorText);
 }
 public static void AddLocationRules(this AbstractValidator <TraineeshipSearchViewModel> validator)
 {
     // NOTE: no message here, 'no results' help text provides suggestions to user.
     validator.RuleFor(x => x.Location)
     .Must(HaveLatAndLongPopulated)
     .When(x => !VacancyHelper.IsVacancyReference(x.ReferenceNumber));
 }
예제 #4
0
 public static void AddLocationRules(this AbstractValidator <ApprenticeshipSearchViewModel> validator)
 {
     // NOTE: no message here, 'no results' help text provides suggestions to user.
     validator.RuleFor(x => x.Location)
     .Must(HaveLatAndLongPopulated)
     .When(x => x.SearchMode == ApprenticeshipSearchMode.Keyword || x.SearchMode == ApprenticeshipSearchMode.Category)
     .When(x => !VacancyHelper.IsVacancyReference(x.Keywords));
 }
예제 #5
0
        public TraineeshipSearchResponseViewModel FindVacancies(TraineeshipSearchViewModel search)
        {
            _logger.Debug("Calling SearchProvider to find traineeship vacancies.");
            string vacancyReference;
            var    searchLocation     = _traineeshipSearchMapper.Map <TraineeshipSearchViewModel, Location>(search);
            var    isVacancyReference = VacancyHelper.TryGetVacancyReference(search.ReferenceNumber, out vacancyReference);

            try
            {
                var searchRequest = new TraineeshipSearchParameters
                {
                    Location     = searchLocation,
                    PageNumber   = search.PageNumber,
                    PageSize     = search.ResultsPerPage,
                    SearchRadius = search.WithinDistance,
                    SortType     = search.SortType
                };
                if (isVacancyReference)
                {
                    searchRequest.VacancyReference = vacancyReference;
                }

                var searchResults = _traineeshipSearchService.Search(searchRequest);

                if (searchResults.Total == 1)
                {
                    var exactMatchResponse = _traineeshipSearchMapper.Map <SearchResults <TraineeshipSearchResponse, TraineeshipSearchParameters>, TraineeshipSearchResponseViewModel>(searchResults);
                    exactMatchResponse.ExactMatchFound = true;
                    return(exactMatchResponse);
                }

                if (searchResults.Total > 1)
                {
                    _logger.Info($"{searchResults.Total} results found for Vacancy Reference Number {vacancyReference}");
                }
                var searchResponse =
                    _traineeshipSearchMapper.Map <SearchResults <TraineeshipSearchResponse, TraineeshipSearchParameters>, TraineeshipSearchResponseViewModel>(
                        searchResults);

                searchResponse.TotalHits     = searchResults.Total;
                searchResponse.PageSize      = search.ResultsPerPage;
                searchResponse.VacancySearch = search;

                return(searchResponse);
            }
            catch (CustomException ex)
            {
                // ReSharper disable once FormatStringProblem
                _logger.Error("Find traineeship vacancies failed. Check inner details for more info", ex);
                return(new TraineeshipSearchResponseViewModel(VacancySearchResultsPageMessages.VacancySearchFailed));
            }
            catch (Exception e)
            {
                _logger.Error("Find traineeship vacancies failed. Check inner details for more info", e);
                throw;
            }
        }
예제 #6
0
        public MediatorResponse <TraineeshipVacancyDetailViewModel> DetailsByReferenceNumber(string vacancyReferenceNumberString, Guid?candidateId)
        {
            int vacancyReferenceNumber;

            if (VacancyHelper.TryGetVacancyReferenceNumber(vacancyReferenceNumberString, out vacancyReferenceNumber))
            {
                var vacancyDetailViewModel = _traineeshipVacancyProvider.GetVacancyDetailViewModelByReferenceNumber(candidateId, vacancyReferenceNumber);
                return(GetDetails(vacancyDetailViewModel));
            }
            return(GetMediatorResponse <TraineeshipVacancyDetailViewModel>(TraineeshipSearchMediatorCodes.Details.VacancyNotFound));
        }
        public MediatorResponse <TransferVacanciesResultsViewModel> GetVacancyDetails(TransferVacanciesViewModel viewModel)
        {
            try
            {
                var vacanciesToBeTransferred          = new List <TransferVacancyViewModel>();
                var transferVacanciesResultsViewModel = new TransferVacanciesResultsViewModel
                {
                    TransferVacanciesViewModel = viewModel,
                    NotFoundVacancyNumbers     = new List <string>()
                };

                if (viewModel != null && viewModel.VacancyReferenceNumbers.Any())
                {
                    foreach (var vacancy in viewModel.VacancyReferenceNumbers.Split(','))
                    {
                        string vacancyReference;
                        if (VacancyHelper.TryGetVacancyReference(vacancy, out vacancyReference))
                        {
                            var vacancyDetails = _vacancyPostingService.GetVacancyByReferenceNumber(Convert.ToInt32(vacancyReference));
                            if (vacancyDetails != null)
                            {
                                var vacancyView = new TransferVacancyViewModel
                                {
                                    ContractOwnerId            = vacancyDetails.ContractOwnerId,
                                    VacancyManagerId           = vacancyDetails.VacancyManagerId,
                                    VacancyReferenceNumber     = vacancyDetails.VacancyReferenceNumber,
                                    DeliveryOrganisationId     = vacancyDetails.DeliveryOrganisationId,
                                    VacancyOwnerRelationShipId = vacancyDetails.VacancyOwnerRelationshipId,
                                    ProviderName = _providerService.GetProvider(vacancyDetails.ContractOwnerId).TradingName,
                                    VacancyTitle = vacancyDetails.Title,
                                    EmployerName = vacancyDetails.EmployerName
                                };
                                if (vacancyDetails.VacancyManagerId.HasValue)
                                {
                                    vacancyView.ProviderSiteName =
                                        _providerService.GetProviderSite(vacancyDetails.VacancyManagerId.Value).TradingName;
                                }
                                vacanciesToBeTransferred.Add(vacancyView);
                            }
                            else
                            {
                                transferVacanciesResultsViewModel.NotFoundVacancyNumbers.Add(vacancy);
                            }
                        }
                    }
                }
                transferVacanciesResultsViewModel.VacanciesToBeTransferredVm = vacanciesToBeTransferred;
                return(GetMediatorResponse(AdminMediatorCodes.GetVacancyDetails.Ok, transferVacanciesResultsViewModel));
            }
            catch (CustomException exception) when(exception.Code == ErrorCodes.ProviderVacancyAuthorisation.Failed)
            {
                return(GetMediatorResponse(AdminMediatorCodes.GetVacancyDetails.FailedAuthorisation, new TransferVacanciesResultsViewModel(), TransferVacanciesMessages.UnAuthorisedAccess, UserMessageLevel.Warning));
            }
        }
예제 #8
0
        public static void AddServerRules(this AbstractValidator <ApprenticeshipSearchViewModel> validator)
        {
            validator.RuleFor(x => x.Location)
            .Length(3, 99)
            .When(IsKeywordOrCategorySearch)
            .When(x => x.Location != null && !x.Location.Any(Char.IsDigit) && !VacancyHelper.IsVacancyReference(x.Keywords))
            .WithMessage(ApprenticeshipSearchViewModelMessages.LocationMessages.LengthErrorText);

            validator.RuleFor(x => x.SavedSearchId)
            .NotEmpty()
            .When(x => x.SearchMode == ApprenticeshipSearchMode.SavedSearches)
            .WithMessage(ApprenticeshipSearchViewModelMessages.SavedSearchMessages.RequiredErrorText);
        }
예제 #9
0
        public async Task <OrchestratorResponse> UpdatePublishedVacancyAsync(ProposedChangesEditModel m, VacancyUser user)
        {
            var vacancy = await GetVacancy(m);

            var proposedClosingDate = m.ProposedClosingDate.AsDateTimeUk()?.ToUniversalTime();
            var proposedStartDate   = m.ProposedStartDate.AsDateTimeUk()?.ToUniversalTime();

            var updateKind = VacancyHelper.DetermineLiveUpdateKind(vacancy, proposedClosingDate, proposedStartDate);

            vacancy.ClosingDate = proposedClosingDate;
            vacancy.StartDate   = proposedStartDate;

            return(await ValidateAndExecute(
                       vacancy,
                       v => _client.Validate(v, ValdationRules),
                       v => _client.UpdatePublishedVacancyAsync(vacancy, user, updateKind)
                       ));
        }
예제 #10
0
        public static void AddCommonRules(this AbstractValidator <ApprenticeshipSearchViewModel> validator)
        {
            validator.RuleFor(x => x.Location)
            .NotEmpty()
            .When(x => !VacancyHelper.IsVacancyReference(x.Keywords))
            .WithMessage(ApprenticeshipSearchViewModelMessages.LocationMessages.RequiredErrorText)
            .Length(2, 99)
            .WithMessage(ApprenticeshipSearchViewModelMessages.LocationMessages.LengthErrorText)
            .Matches(ApprenticeshipSearchViewModelMessages.LocationMessages.WhiteList)
            .WithMessage(ApprenticeshipSearchViewModelMessages.LocationMessages.WhiteListErrorText);

            validator.RuleFor(x => x.Keywords)
            .Matches(ApprenticeshipSearchViewModelMessages.KeywordMessages.WhiteList)
            .WithMessage(ApprenticeshipSearchViewModelMessages.KeywordMessages.WhiteListErrorText);

            validator.RuleFor(x => x.Category)
            .NotEmpty()
            .When(x => x.SearchMode == ApprenticeshipSearchMode.Category)
            .WithMessage(ApprenticeshipSearchViewModelMessages.CategoryMessages.RequiredErrorText);
        }
        public IHttpActionResult PostVacancy(VacancyHelper vacancyHelper)
        {
            var action  = vacancyHelper.action;
            var vacancy = vacancyHelper.vacancy;

            if (action == "create")
            {
                var result = AddNewVacancy(vacancy);
                if (result == false)
                {
                    return(ResponseMessage(new HttpResponseMessage(HttpStatusCode.BadRequest)));
                }
            }
            else if (action == "update")
            {
                UpdateVacancy(vacancy);
            }
            else if (action == "delete")
            {
                DeleteVacancy(vacancy.Vacancy_Code);
            }

            return(CreatedAtRoute("DefaultApi", new { id = vacancy.Vacancy_Code }, vacancy));
        }
예제 #12
0
        public static void Start(Worker worker, Database.Database db)
        {
            var logger = new Logger.ConsoleLogger();

            var seeAdsLoop = true;

            var             mainVacancies = db.GetVacancies();
            IList <Vacancy> vacancies     = mainVacancies;

            while (seeAdsLoop)
            {
                Console.Clear();

                ExceptionHandle.Handle(VacancyHelper.SeeAds, vacancies);

                ConsoleScreen.PrintMenu(ConsoleScreen.FilterMenu, ConsoleColor.Blue);

                var filterMenuChoice = (FilterMenuEnum)ConsoleScreen.Input(ConsoleScreen.FilterMenu.Count);

                switch (filterMenuChoice)
                {
                case FilterMenuEnum.Select:
                {
                    var loop2 = true;
                    while (loop2)
                    {
                        Console.Clear();
                        if (!ExceptionHandle.Handle(VacancyHelper.SeeAds, vacancies))
                        {
                            break;
                        }
                        Console.WriteLine("Vacancy id: ");
                        var vacId = UserHelper.InputGuid();

                        try
                        {
                            var vacancy = VacancyHelper.GetVacancy(vacId, vacancies);

                            while (true)
                            {
                                var requestFromWorker = vacancy.CheckWorkerRequest(worker.Guid);
                                Console.Clear();
                                Console.WriteLine(vacancy++);     // increase vacancy view count and print
                                Database.Database.Changes = true;

                                Console.WriteLine();
                                Console.WriteLine($"1. {(requestFromWorker ? "Cancel" : "Request")}");;
                                Console.WriteLine("2. Back");
                                var choice = ConsoleScreen.Input(2);

                                if (choice == 1)
                                {
                                    if (requestFromWorker)
                                    {
                                        vacancy.RemoveRequest(worker.Guid);
                                    }
                                    else
                                    {
                                        Cv cv = null;
                                        while (true)
                                        {
                                            Console.Clear();
                                            if (!ExceptionHandle.Handle(worker.ShowAllCv, true))
                                            {
                                                LoggerPublisher.OnLogInfo("Please add public Cv!");
                                                ConsoleScreen.Clear();
                                                break;
                                            }

                                            var cvId = UserHelper.InputGuid();

                                            try
                                            {
                                                cv = CvHelper.GetCv(cvId, worker.Cvs);
                                                break;
                                            }
                                            catch (Exception e)
                                            {
                                                LoggerPublisher.OnLogError(e.Message);
                                                ConsoleScreen.Clear();
                                            }
                                        }

                                        if (cv != null)
                                        {
                                            vacancy.SendRequest(worker.Guid, cv.Guid);
                                        }
                                    }
                                }
                                else if (choice == 2)
                                {
                                    if (ConsoleScreen.DisplayMessageBox("Info", "Do you want to see other Ads?",
                                                                        MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                                    {
                                        loop2 = false;
                                    }
                                    break;
                                }
                            }

                            if (loop2)
                            {
                                continue;
                            }
                        }
                        catch (Exception e)
                        {
                            LoggerPublisher.OnLogError(e.Message);
                            ConsoleScreen.Clear();
                        }

                        if (!loop2 || ConsoleScreen.DisplayMessageBox("Info", "Do you want to try again?",
                                                                      MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                        {
                            break;
                        }
                    }
                    break;
                }

                case FilterMenuEnum.ByCategory:
                {
                    Console.Clear();

                    vacancies = ExceptionHandle.Handle(VacancyFilter.FilterByCategory, UserHelper.InputCategory(),
                                                       vacancies);

                    break;
                }

                case FilterMenuEnum.ByEducation:
                {
                    Console.Clear();

                    vacancies = ExceptionHandle.Handle(VacancyFilter.FilterByEducation, UserHelper.InputEducation(), vacancies);
                    break;
                }

                case FilterMenuEnum.ByExperience:
                {
                    Console.Clear();

                    vacancies = ExceptionHandle.Handle(VacancyFilter.FilterByExperience, UserHelper.InputExperience(), vacancies);
                    break;
                }

                case FilterMenuEnum.ByRegion:
                {
                    Console.Clear();

                    vacancies = ExceptionHandle.Handle(VacancyFilter.FilterByRegion, UserHelper.InputRegion(), vacancies);
                    break;
                }

                case FilterMenuEnum.BySalary:
                {
                    Console.Clear();
                    var input  = UserHelper.InputSalary();
                    var salary = UserHelper.ParseSalary(input);

                    vacancies = ExceptionHandle.Handle(VacancyFilter.FilterBySalary, salary, vacancies);
                    break;
                }

                case FilterMenuEnum.Reset:
                {
                    vacancies = mainVacancies;
                    break;
                }

                case FilterMenuEnum.Back:
                {
                    seeAdsLoop = false;
                    break;
                }
                }
            }
        }
예제 #13
0
 public void IsVacancyReference(string value, bool expectTrue)
 {
     Assert.That(VacancyHelper.IsVacancyReference(value), Is.EqualTo(expectTrue));
 }
예제 #14
0
        private static Vacancy CreateNewVacancy()
        {
            var newVacancy = new Vacancy {
                Contact = new Contact()
            };

            // contact initialize

            while (true)
            {
                var mail = VacancyHelper.InputData("Mail");
                if (ExceptionHandle.Handle(UserHelper.ValidateMail, mail))
                {
                    newVacancy.Contact.Mail = mail;
                    break;
                }
            }

            var maxPhoneNumbers = 3;

            while (maxPhoneNumbers > 0)
            {
                var phone = VacancyHelper.InputData("Phone");

                if (ExceptionHandle.Handle(UserHelper.ValidatePhone, phone))
                {
                    newVacancy.Contact.Phones.Add(phone);
                    maxPhoneNumbers--;

                    if (maxPhoneNumbers == 0 || ConsoleScreen.DisplayMessageBox("Info", "Do you want to add more phone number?",
                                                                                MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                    {
                        break;
                    }
                    continue;
                }
                if (maxPhoneNumbers != 3 && ConsoleScreen.DisplayMessageBox("Info", "Do you want to try again?",
                                                                            MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                {
                    break;
                }
            }

            // add initialize

            newVacancy.Ad = new Advert();


            newVacancy.Ad.Category = UserHelper.InputCategory();

            Console.Clear();

            newVacancy.Ad.Position = VacancyHelper.InputData("Position");

            newVacancy.Ad.Region = UserHelper.InputRegion();



            newVacancy.Ad.Education = UserHelper.InputEducation();



            newVacancy.Ad.Experience = UserHelper.InputExperience();

            Console.Clear();

            newVacancy.Ad.Requirements = VacancyHelper.InputData("Requirements");

            Console.Clear();

            newVacancy.Ad.JobDescription = VacancyHelper.InputData("Job Description");

            Console.Clear();

            newVacancy.Ad.Company = VacancyHelper.InputData("Company");

            Console.Clear();

            newVacancy.Ad.Contact = VacancyHelper.InputData("Contact");

            newVacancy.Ad.SalaryRange = UserHelper.InputSalaryRange();
            return(newVacancy);
        }
예제 #15
0
        public static void Start(Entities.Employer employer, Database.Database db)
        {
            var logger = new Logger.ConsoleLogger();

            var seeCvsLoop = true;


            var mainCvs = db.GetCvs();

            IList <Cv> cvs = mainCvs;


            while (seeCvsLoop)
            {
                Console.Clear();

                ExceptionHandle.Handle(CvHelper.SeeCvs, cvs);

                ConsoleScreen.PrintMenu(ConsoleScreen.FilterMenu, ConsoleColor.Blue);

                var filterMenuChoice = (FilterMenuEnum)ConsoleScreen.Input(ConsoleScreen.FilterMenu.Count);

                switch (filterMenuChoice)
                {
                case FilterMenuEnum.Select:
                {
                    var loop3 = true;
                    while (loop3)
                    {
                        Console.Clear();
                        if (!ExceptionHandle.Handle(CvHelper.SeeCvs, cvs))
                        {
                            break;
                        }
                        Console.WriteLine("Cv id: ");

                        var cvId = UserHelper.InputGuid();

                        try
                        {
                            var cv = CvHelper.GetCv(cvId, cvs);

                            Console.Clear();

                            while (true)
                            {
                                var requestFromEmployer = cv.CheckEmployerRequest(employer.Guid);

                                Console.Clear();

                                Console.WriteLine(cv++);     // increase view count and print.

                                Database.Database.Changes = true;

                                Console.WriteLine();

                                Console.WriteLine($"1. {(requestFromEmployer ? "Cancel" : "Request")}");

                                Console.WriteLine("2. Back");

                                var choice = ConsoleScreen.Input(2);

                                if (choice == 1)
                                {
                                    if (requestFromEmployer)
                                    {
                                        cv.RemoveRequest(employer.Guid);
                                    }
                                    else
                                    {
                                        Vacancy vacancy = null;

                                        while (true)
                                        {
                                            Console.Clear();
                                            if (!ExceptionHandle.Handle(employer.ShowAllAds, true))
                                            {
                                                LoggerPublisher.OnLogInfo("Please add public Vacancy!");
                                                ConsoleScreen.Clear();
                                                break;
                                            }

                                            var vacancyId = UserHelper.InputGuid();


                                            try
                                            {
                                                vacancy = VacancyHelper.GetVacancy(vacancyId, employer.Vacancies);
                                                break;
                                            }
                                            catch (Exception e)
                                            {
                                                LoggerPublisher.OnLogError(e.Message);
                                                ConsoleScreen.Clear();
                                            }
                                        }

                                        if (vacancy != null)
                                        {
                                            cv.SendRequest(employer.Guid, vacancy.Guid);
                                        }
                                    }
                                }
                                else if (choice == 2)
                                {
                                    if (ConsoleScreen.DisplayMessageBox("Info", "Do you want to see other Cvs?",
                                                                        MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                                    {
                                        loop3 = false;
                                    }
                                    break;
                                }
                            }

                            if (loop3)
                            {
                                continue;
                            }
                        }
                        catch (Exception e)
                        {
                            LoggerPublisher.OnLogError(e.Message);
                        }
                    }
                    break;
                }

                case FilterMenuEnum.ByCategory:
                {
                    Console.Clear();

                    cvs = ExceptionHandle.Handle(CvFilter.FilterByCategory, UserHelper.InputCategory(), cvs);
                    break;
                }

                case FilterMenuEnum.ByEducation:
                {
                    Console.Clear();

                    cvs = ExceptionHandle.Handle(CvFilter.FilterByEducation, UserHelper.InputEducation(), cvs);
                    break;
                }

                case FilterMenuEnum.ByExperience:
                {
                    Console.Clear();

                    cvs = ExceptionHandle.Handle(CvFilter.FilterByExperience, UserHelper.InputExperience(), cvs);
                    break;
                }

                case FilterMenuEnum.ByRegion:
                {
                    Console.Clear();

                    cvs = ExceptionHandle.Handle(CvFilter.FilterByRegion, UserHelper.InputRegion(), cvs);
                    break;
                }

                case FilterMenuEnum.BySalary:
                {
                    Console.Clear();

                    var input  = UserHelper.InputSalary();
                    var salary = UserHelper.ParseSalary(input);
                    cvs = ExceptionHandle.Handle(CvFilter.FilterBySalary, salary, cvs);
                    break;
                }

                case FilterMenuEnum.Reset:
                {
                    cvs = mainCvs;
                    break;
                }

                case FilterMenuEnum.Back:
                {
                    seeCvsLoop = false;
                    break;
                }
                }
            }
        }
예제 #16
0
        public override void Execute()
        {
            WriteLiteral("\r\n");


            #line 7 "..\..\Views\ApprenticeshipSearch\Results.cshtml"

            ViewBag.Title = "Results - Find an apprenticeship";
            Layout        = "~/Views/Shared/_Layout.cshtml";

            var locationTypeLink = Model.VacancySearch.LocationType == ApprenticeshipLocationType.National ? Url.Action("results", new ApprenticeshipSearchViewModel(Model.VacancySearch)
            {
                LocationType = ApprenticeshipLocationType.NonNational, SearchAction = SearchAction.LocationTypeChanged, PageNumber = 1
            }) : Url.Action("results", new ApprenticeshipSearchViewModel(Model.VacancySearch)
            {
                LocationType = ApprenticeshipLocationType.National, SearchAction = SearchAction.LocationTypeChanged, SortType = VacancySearchSortType.Distance, PageNumber = 1
            });

            string resultMessage;
            string nationalResultsMessage;

            if (Model.TotalLocalHits == 0)
            {
                resultMessage = "";
            }
            else if (Model.TotalLocalHits == 1)
            {
                if (Model.VacancySearch.LocationType == ApprenticeshipLocationType.National)
                {
                    resultMessage = "We've found <b class=\"bold-medium\">1</b> <a id='localLocationTypeLink' href=" + locationTypeLink + ">apprenticeship in your selected area</a>.";
                }
                else
                {
                    resultMessage = "We've found <b class=\"bold-medium\">1</b> apprenticeship in your selected area.";
                }
            }
            else
            {
                if (Model.VacancySearch.LocationType == ApprenticeshipLocationType.National)
                {
                    var message = "We've found <b class=\"bold-medium\">{0}</b> <a id='localLocationTypeLink' href=" + locationTypeLink + ">apprenticeships in your selected area</a>.";
                    resultMessage = string.Format(message, Model.TotalLocalHits);
                }
                else
                {
                    resultMessage = string.Format("We've found <b class=\"bold-medium\">{0}</b> apprenticeships in your selected area.", Model.TotalLocalHits);
                }
            }

            if (Model.TotalNationalHits == 0)
            {
                nationalResultsMessage = "";
            }
            else
            {
                var nationalResultsMessagePrefix = Model.TotalLocalHits == 0 ? "We've found" : "We've also found";

                if (Model.TotalNationalHits == 1)
                {
                    if (Model.VacancySearch.LocationType == ApprenticeshipLocationType.NonNational)
                    {
                        nationalResultsMessage = string.Format("{1} <a id='nationwideLocationTypeLink' href={0}>1 apprenticeship nationwide</a>.", locationTypeLink, nationalResultsMessagePrefix);
                    }
                    else
                    {
                        nationalResultsMessage = nationalResultsMessagePrefix + " 1 apprenticeship nationwide.";
                    }
                }
                else
                {
                    if (Model.VacancySearch.LocationType == ApprenticeshipLocationType.NonNational)
                    {
                        nationalResultsMessage = string.Format("{2} <a id='nationwideLocationTypeLink' href={1}>{0} apprenticeships nationwide</a>.", Model.TotalNationalHits, locationTypeLink, nationalResultsMessagePrefix);
                    }
                    else
                    {
                        nationalResultsMessage = string.Format("{1} {0} apprenticeships nationwide.", Model.TotalNationalHits, nationalResultsMessagePrefix);
                    }
                }
            }


            #line default
            #line hidden
            WriteLiteral("\r\n\r\n");

            DefineSection("metatags", () => {
                WriteLiteral("\r\n    ");

                WriteLiteral("\r\n    <meta");

                WriteLiteral(" name=\"WT.oss_r\"");

                WriteAttribute("content", Tuple.Create(" content=\"", 3558), Tuple.Create("\"", 3589)

            #line 82 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                               , Tuple.Create(Tuple.Create("", 3568), Tuple.Create <System.Object, System.Int32>(Model.TotalLocalHits

            #line default
            #line hidden
                                                                                                                 , 3568), false)
                               );

                WriteLiteral(" />\r\n");
            });

            WriteLiteral("\r\n<div");

            WriteLiteral(" class=\"search-results-wrapper grid-wrapper\"");

            WriteLiteral(">\r\n    <div");

            WriteLiteral(" class=\"hgroup\"");

            WriteLiteral(">\r\n        <h1");

            WriteLiteral(" class=\"heading-xlarge\"");

            WriteLiteral(">Search results</h1>\r\n        <div");

            WriteLiteral(" id=\"vacancy-result-summary\"");

            WriteLiteral(">\r\n            <p");

            WriteLiteral(" id=\"result-message\"");

            WriteLiteral(" class=\"small-btm-margin\"");

            WriteLiteral(">");


            #line 89 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
            Write(Html.Raw(resultMessage));


            #line default
            #line hidden
            WriteLiteral("</p>\r\n            <p");

            WriteLiteral(" id=\"national-results-message\"");

            WriteLiteral(">");


            #line 90 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
            Write(Html.Raw(nationalResultsMessage));


            #line default
            #line hidden
            WriteLiteral("</p>\r\n        </div>\r\n    </div>\r\n\r\n");


            #line 94 "..\..\Views\ApprenticeshipSearch\Results.cshtml"


            #line default
            #line hidden

            #line 94 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
            using (Html.BeginRouteForm(CandidateRouteNames.ApprenticeshipResults, FormMethod.Get))
            {
                Html.Partial("ValidationSummary", ViewData.ModelState);
                Html.RenderPartial("_searchUpdate", Model.VacancySearch);


            #line default
            #line hidden
                WriteLiteral("        <section");

                WriteLiteral(" class=\"grid grid-2-3\"");

                WriteLiteral(">\r\n");


            #line 99 "..\..\Views\ApprenticeshipSearch\Results.cshtml"


            #line default
            #line hidden

            #line 99 "..\..\Views\ApprenticeshipSearch\Results.cshtml"

                if (Model.TotalLocalHits == 0 && Model.TotalNationalHits == 0)
                {
            #line default
            #line hidden
                    WriteLiteral("                    <p");

                    WriteLiteral(" id=\"search-no-results-title\"");

                    WriteLiteral(">There are currently no apprenticeships that match your search.</p>\r\n");

                    WriteLiteral("                    <p>Try editing your search:</p>\r\n");

                    WriteLiteral("                    <ul");

                    WriteLiteral(" id=\"search-no-results\"");

                    WriteLiteral(">\r\n");


            #line 105 "..\..\Views\ApprenticeshipSearch\Results.cshtml"


            #line default
            #line hidden

            #line 105 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                    if (Model.VacancySearch.SearchMode == ApprenticeshipSearchMode.Keyword)
                    {
                        if (VacancyHelper.IsVacancyReference(Model.VacancySearch.Keywords))
                        {
            #line default
            #line hidden
                            WriteLiteral("                                <li");

                            WriteLiteral(" id=\"search-no-results-reference-number\"");

                            WriteLiteral(">try a different reference number</li>\r\n");


            #line 110 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                        }
                        else
                        {
            #line default
            #line hidden
                            WriteLiteral("                                <li");

                            WriteLiteral(" id=\"search-no-results-keywords\"");

                            WriteLiteral(">using different keywords</li>\r\n");


            #line 114 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                        }
                    }


            #line default
            #line hidden
                    WriteLiteral("                        ");


            #line 116 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                    if (Model.VacancySearch.SearchMode == ApprenticeshipSearchMode.Category)
                    {
                        if (Model.VacancySearch.SubCategories == null || Model.VacancySearch.SubCategories.Length == 0)
                        {
            #line default
            #line hidden
                            WriteLiteral("                                <li");

                            WriteLiteral(" id=\"search-no-results-category\"");

                            WriteLiteral(">try a different category</li>\r\n");


            #line 121 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                        }
                        else
                        {
            #line default
            #line hidden
                            WriteLiteral("                                <li");

                            WriteLiteral(" id=\"search-no-results-sub-category\"");

                            WriteLiteral(">select a different sub-category or sub-categories</li>\r\n");


            #line 125 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                        }
                    }


            #line default
            #line hidden
                    WriteLiteral("                        <li>expanding your search location</li>\r\n");


            #line 128 "..\..\Views\ApprenticeshipSearch\Results.cshtml"


            #line default
            #line hidden

            #line 128 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                    if (Model.VacancySearch.ApprenticeshipLevel != "All")
                    {
            #line default
            #line hidden
                        WriteLiteral("                            <li");

                        WriteLiteral(" id=\"search-no-results-apprenticeship-levels\"");

                        WriteLiteral(">using a different level, or change to all levels</li>\r\n");


            #line 131 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                    }


            #line default
            #line hidden
                    WriteLiteral("                    </ul>\r\n");


            #line 133 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                }
                else
                {
            #line default
            #line hidden
                    WriteLiteral("                    <div");

                    WriteLiteral(" id=\"pagedList\"");

                    WriteLiteral(">\r\n");


            #line 137 "..\..\Views\ApprenticeshipSearch\Results.cshtml"


            #line default
            #line hidden

            #line 137 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                    Html.RenderPartial("_searchResults", Model);

            #line default
            #line hidden
                    WriteLiteral("\r\n                    </div>\r\n");


            #line 139 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                }


            #line default
            #line hidden
                WriteLiteral("\r\n        </section>\r\n");


            #line 142 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
            }


            #line default
            #line hidden
            WriteLiteral("</div>\r\n\r\n");

            DefineSection("scripts", () => {
                WriteLiteral("\r\n    <script");

                WriteLiteral(" type=\"text/javascript\"");

                WriteLiteral(" src=\"https://maps.googleapis.com/maps/api/js?v=3\"");

                WriteLiteral("></script>\r\n\r\n");

                WriteLiteral("    ");


            #line 149 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                Write(Scripts.Render("~/bundles/nas/locationsearch"));


            #line default
            #line hidden
                WriteLiteral("\r\n    <script");

                WriteLiteral(" type=\"text/javascript\"");

                WriteLiteral(">\r\n        $(function () {\r\n            $(\"#Location\").locationMatch({\r\n         " +
                             "       url: \'");


            #line 153 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                Write(Url.Action("location", "Location"));


            #line default
            #line hidden
                WriteLiteral(@"',
                longitude: '#Longitude',
                latitude: '#Latitude',
                latlonhash: '#Hash'
            });

            $('#sort-results').change(function () {

                $('#SearchAction').val(""Sort"");
                $(""form"").submit();
            });

            $('#results-per-page').change(function () {
                $('#SearchAction').val(""Sort"");
                $(""form"").submit();
            });

            $('#search-button').click(function () {
                $('#LocationType').val(""NonNational"");
            });
            $(""#search-tab-control"").click(function () {
                $(""#SearchMode"").val(""Keyword"");
            });

            $(""#browse-tab-control"").click(function () {
                $(""#SearchMode"").val(""Category"");
            });
        });
    </script>


");

                WriteLiteral("    ");


            #line 184 "..\..\Views\ApprenticeshipSearch\Results.cshtml"
                Write(Scripts.Render("~/bundles/nas/resultsMap"));


            #line default
            #line hidden
                WriteLiteral("\r\n\r\n");
            });
        }
예제 #17
0
        public ApprenticeshipSearchResponseViewModel FindVacancies(ApprenticeshipSearchViewModel search)
        {
            _logger.Debug("Calling SearchProvider to find apprenticeship vacancies.");

            var searchLocation = _apprenticeshipSearchMapper.Map <ApprenticeshipSearchViewModel, Location>(search);

            try
            {
                string vacancyReference;
                var    isVacancyReference = VacancyHelper.TryGetVacancyReference(search.Keywords, out vacancyReference);

                if ((search.SearchField == ApprenticeshipSearchField.All.ToString() && isVacancyReference) || search.SearchField == ApprenticeshipSearchField.ReferenceNumber.ToString())
                {
                    if (isVacancyReference)
                    {
                        var searchParameters = new ApprenticeshipSearchParameters
                        {
                            VacancyReference = vacancyReference,
                            PageNumber       = 1,
                            PageSize         = 1
                        };

                        var searchResults = _apprenticeshipSearchService.Search(searchParameters);

                        //Expect only a single result. Any other number should be interpreted as no results
                        if (searchResults.Total == 1)
                        {
                            var exactMatchResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(searchResults);
                            exactMatchResponse.ExactMatchFound = true;
                            return(exactMatchResponse);
                        }

                        if (searchResults.Total > 1)
                        {
                            _logger.Info("{0} results found for Vacancy Reference Number {1} parsed from {2}. Expected 0 or 1", searchResults.Total, vacancyReference, search.Keywords);
                        }
                    }

                    var response = new ApprenticeshipSearchResponseViewModel
                    {
                        Vacancies     = new List <ApprenticeshipVacancySummaryViewModel>(),
                        VacancySearch = search
                    };

                    return(response);
                }

                var results = ProcessNationalAndNonNationalSearches(search, searchLocation);

                var nationalResults    = results[ResultsKeys.National];
                var nonNationalResults = results[ResultsKeys.NonNational];
                var unfilteredResults  = results[ResultsKeys.Unfiltered];

                var nationalResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(nationalResults);

                nationalResponse.VacancySearch = search;

                var nonNationalResponse = _apprenticeshipSearchMapper.Map <SearchResults <ApprenticeshipSearchResponse, ApprenticeshipSearchParameters>, ApprenticeshipSearchResponseViewModel>(nonNationalResults);

                nonNationalResponse.VacancySearch = search;

                if (search.LocationType == ApprenticeshipLocationType.NonNational)
                {
                    nonNationalResponse.TotalLocalHits    = nonNationalResults.Total;
                    nonNationalResponse.TotalNationalHits = nationalResults.Total;
                    nonNationalResponse.PageSize          = search.ResultsPerPage;

                    if (nonNationalResults.Total == 0 && nationalResults.Total > 0)
                    {
                        nonNationalResponse.Vacancies = nationalResponse.Vacancies;

                        var vacancySearch = nonNationalResponse.VacancySearch;

                        if (vacancySearch.SearchAction == SearchAction.Search || vacancySearch.SortType == VacancySearchSortType.Distance)
                        {
                            vacancySearch.SortType = string.IsNullOrWhiteSpace(vacancySearch.Keywords) ? VacancySearchSortType.ClosingDate : VacancySearchSortType.Relevancy;
                        }

                        vacancySearch.LocationType = ApprenticeshipLocationType.National;
                        SetAggregationResults(nonNationalResponse, nationalResults.AggregationResults, unfilteredResults.AggregationResults);
                    }
                    else
                    {
                        SetAggregationResults(nonNationalResponse, nonNationalResults.AggregationResults, unfilteredResults.AggregationResults);
                    }

                    return(nonNationalResponse);
                }

                nationalResponse.TotalLocalHits    = nonNationalResults.Total;
                nationalResponse.TotalNationalHits = nationalResults.Total;
                nationalResponse.PageSize          = search.ResultsPerPage;

                if (nationalResults.Total == 0 && nonNationalResults.Total > 0)
                {
                    nationalResponse.Vacancies = nonNationalResponse.Vacancies;
                    SetAggregationResults(nonNationalResponse, nonNationalResults.AggregationResults, unfilteredResults.AggregationResults);
                }
                else
                {
                    SetAggregationResults(nonNationalResponse, nationalResults.AggregationResults, unfilteredResults.AggregationResults);
                }

                return(nationalResponse);
            }
            catch (CustomException ex)
            {
                _logger.Error("Find apprenticeship vacancies failed. Check inner details for more info", ex);
                return(new ApprenticeshipSearchResponseViewModel(VacancySearchResultsPageMessages.VacancySearchFailed));
            }
            catch (Exception e)
            {
                _logger.Error("Find apprenticeship vacancies failed. Check inner details for more info", e);
                throw;
            }
        }
예제 #18
0
        private static void VacancyUpdateSideStart(Vacancy vacancy)
        {
            while (true)
            {
                Console.Clear();

                Console.WriteLine(vacancy);

                Console.WriteLine();

                ConsoleScreen.PrintMenu(ConsoleScreen.VacancyUpdateMenu, ConsoleColor.DarkGreen);

                var updateChoice = (VacancyUpdateChoices)ConsoleScreen.Input(ConsoleScreen.VacancyUpdateMenu.Count);

                if (updateChoice == VacancyUpdateChoices.Back)
                {
                    break;
                }

                switch (updateChoice)
                {
                case VacancyUpdateChoices.ChangeVisibility:
                {
                    vacancy.IsPublic = !vacancy.IsPublic;
                    LoggerPublisher.OnLogInfo($"Visibility changed to {(vacancy.IsPublic ? "Public" : "Private")}");
                    break;
                }

                case VacancyUpdateChoices.Mail:
                {
                    while (true)
                    {
                        var mail = VacancyHelper.InputData("Mail");
                        if (ExceptionHandle.Handle(UserHelper.ValidateMail, mail))
                        {
                            vacancy.Contact.Mail = mail;
                            break;
                        }
                    }

                    LoggerPublisher.OnLogInfo("Mail updated!");
                    break;
                }

                case VacancyUpdateChoices.Phones:
                {
                    if (vacancy.Contact.Phones.Count != 3 && ConsoleScreen.DisplayMessageBox("Info", "Do you want to add phone number or delete?",
                                                                                             MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
                    {
                        Console.WriteLine("Add phone number: ");

                        var maxPhoneNumbers = 3 - vacancy.Contact.Phones.Count;
                        while (maxPhoneNumbers > 0)
                        {
                            var phone = VacancyHelper.InputData("Phone");

                            if (ExceptionHandle.Handle(UserHelper.ValidatePhone, phone))
                            {
                                vacancy.Contact.Phones.Add(phone);
                                maxPhoneNumbers--;

                                if (maxPhoneNumbers == 0 || ConsoleScreen.DisplayMessageBox("Info", "Do you want to add more phone number?",
                                                                                            MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                                {
                                    break;
                                }
                                continue;
                            }
                            if (maxPhoneNumbers != 3 && ConsoleScreen.DisplayMessageBox("Info", "Do you want to try again?",
                                                                                        MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        if (vacancy.Contact.Phones.Count > 0)
                        {
                            while (true)
                            {
                                Console.Clear();
                                Console.WriteLine("Delete phone number: ");

                                for (var i = 0; i < vacancy.Contact.Phones.Count; i++)
                                {
                                    Console.WriteLine($"{i + 1}. {vacancy.Contact.Phones[i]}");
                                }

                                var phoneIndex = ConsoleScreen.Input(vacancy.Contact.Phones.Count) - 1;

                                vacancy.Contact.Phones.RemoveAt(phoneIndex);

                                LoggerPublisher.OnLogInfo("Phone number deleted");


                                if (vacancy.Contact.Phones.Count == 0 || ConsoleScreen.DisplayMessageBox("Info", "Do you want to delete more phone number?",
                                                                                                         MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.No)
                                {
                                    break;
                                }
                            }
                        }
                    }

                    break;
                }

                case VacancyUpdateChoices.Category:
                {
                    vacancy.Ad.Category = UserHelper.InputCategory();

                    LoggerPublisher.OnLogInfo("Category updated");
                    break;
                }

                case VacancyUpdateChoices.Position:
                {
                    vacancy.Ad.Position = VacancyHelper.InputData("Position");

                    LoggerPublisher.OnLogInfo("Position updated");
                    break;
                }

                case VacancyUpdateChoices.Region:
                {
                    vacancy.Ad.Region = UserHelper.InputRegion();

                    LoggerPublisher.OnLogInfo("Region updated");
                    break;
                }

                case VacancyUpdateChoices.Salary:
                {
                    vacancy.Ad.SalaryRange = UserHelper.InputSalaryRange();

                    LoggerPublisher.OnLogInfo("Salary updated");
                    break;
                }

                case VacancyUpdateChoices.Education:
                {
                    vacancy.Ad.Education = UserHelper.InputEducation();

                    LoggerPublisher.OnLogInfo("Education updated");
                    break;
                }

                case VacancyUpdateChoices.Experience:
                {
                    vacancy.Ad.Experience = UserHelper.InputExperience();

                    LoggerPublisher.OnLogInfo("Experience updated");
                    break;
                }

                case VacancyUpdateChoices.Requirements:
                {
                    vacancy.Ad.Requirements = VacancyHelper.InputData("Requirements");

                    LoggerPublisher.OnLogInfo("Requirements updated");
                    break;
                }

                case VacancyUpdateChoices.JobDescription:
                {
                    vacancy.Ad.JobDescription = VacancyHelper.InputData("Job Description");

                    LoggerPublisher.OnLogInfo("Job Description updated");
                    break;
                }

                case VacancyUpdateChoices.Company:
                {
                    vacancy.Ad.Company = VacancyHelper.InputData("Company");

                    LoggerPublisher.OnLogInfo("Company updated");
                    break;
                }

                case VacancyUpdateChoices.Contact:
                {
                    vacancy.Ad.Contact = VacancyHelper.InputData("Contact");

                    LoggerPublisher.OnLogInfo("Contact updated");
                    break;
                }
                }
                Database.Database.Changes = true;
                ConsoleScreen.Clear();
            }
        }