/// <summary> /// Reads the jobs from pages of data provided by the <see cref="IJobsDataProvider"/> /// </summary> /// <returns></returns> public async Task <JobSearchResult> ReadJobs(JobSearchQuery query) { if (_jobResultsParser == null) { throw new InvalidOperationException("You must specify jobResultsParser when creating this instance to read jobs"); } var jobs = new JobSearchResult() { Jobs = new List <Job>() }; var currentPage = 1; while (true) { Stream stream = null; try { stream = await ReadJobsFromTalentLink(currentPage, query).ConfigureAwait(false); if (_saveHtml) { stream = SaveHtml(query, currentPage, stream); } var parseResult = await _jobResultsParser.Parse(stream).ConfigureAwait(false); if (parseResult.Jobs.Count > 0) { jobs.Jobs.AddRange(parseResult.Jobs); } if (parseResult.IsLastPage) { break; } else { currentPage++; } } finally { stream?.Dispose(); } } return(jobs); }
protected void BtnSearch_Click(object sender, ImageClickEventArgs e) { ArrayList arrTemp; JobSearchQuery m_SearchQueries = new JobSearchQuery(); m_SearchQueries.Keyword = Util.ReplaceStrForDB(txtKeyword.Text); arrTemp = new ArrayList(); if (Request.Form[lbSelectedPositions.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedPositions.UniqueID].Split(',')); } m_SearchQueries.Positions = arrTemp; arrTemp = new ArrayList(); if (Request.Form[lbSelectedSectors.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedSectors.UniqueID].Split(',')); } m_SearchQueries.Sectors = arrTemp; arrTemp = new ArrayList(); if (Request.Form[lbSelectedCities.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedCities.UniqueID].Split(',')); } if (Request.Form[lbSelectedCountries.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedCountries.UniqueID].Split(',')); } m_SearchQueries.Cities = arrTemp; arrTemp = new ArrayList(); m_SearchQueries.Companies = arrTemp; m_SearchQueries.EducationLevels = arrTemp; m_SearchQueries.AgeRange = PIKCV.COM.EnumDB.AgeRange.age_All; m_SearchQueries.LabouringTypes = arrTemp; m_SearchQueries.JobDate = -1; m_SearchQueries.CustomJobs = (rdCustomJobs.Checked); this.smJobSearchQueries = m_SearchQueries; this.smListFilterTypes = new ArrayList(); this.Redirect("Employee-Jobs-Jobs"); }
/// <summary> /// Reads jobs matching the specified search query /// </summary> /// <param name="jobsSet">The jobs set.</param> /// <param name="query">The query.</param> /// <param name="baseUrl">The base URL.</param> /// <returns></returns> protected async Task <JobSearchResult> Jobs(JobsSet jobsSet, JobSearchQuery query, Uri baseUrl) { var jobsProvider = new JobsDataFromExamine(ExamineManager.Instance.SearchProviderCollection[jobsSet + "Searcher"], new QueryBuilder(new LuceneTokenisedQueryBuilder(), new KeywordsTokeniser(), new LuceneStopWordsRemover(), new WildcardSuffixFilter()), new SalaryRangeLuceneQueryBuilder(), new RelativeJobUrlGenerator(baseUrl)); var jobs = await jobsProvider.ReadJobs(query); foreach (var job in jobs.Jobs) { // Remove these unnecessary and large fields to significantly reduce the amount that's serialised and sent to the client job.AdvertHtml = null; job.AdditionalInformationHtml = null; job.EqualOpportunitiesHtml = null; } return(jobs); }
public void AllFiltersSingleValues() { // Format is [Work pattern] [type] jobs [in location] [paying salary range/pay grade] [advertised by organisation] [and matching keywords/reference] var query = new JobSearchQuery(); query.WorkPatterns.Add("part time"); query.ContractTypes.Add("Permanent"); query.JobTypes.Add("Care and social work"); query.Locations.Add("Eastbourne"); query.SalaryRanges.Add("£20000 - £30000"); query.PayGrades.Add("Pay grade"); query.Departments.Add("Adult Social Care"); query.Organisations.Add("East Sussex County Council"); query.Keywords = "test query"; var result = query.ToString(); Assert.AreEqual("Part time permanent care and social work jobs in Eastbourne paying £20000 - £30000 or Pay grade working for Adult Social Care advertised by East Sussex County Council and matching 'test query'", result); }
public async Task <ActionResult> ReplaceAlert(JobSearchQuery searchQuery) { if (ModelState.IsValid) { var converter = new JobSearchQueryConverter(ConfigurationManager.AppSettings["TranslateObsoleteJobTypes"]?.ToUpperInvariant() == "TRUE"); var encoder = new JobAlertIdEncoder(converter); var alertId = encoder.ParseIdFromUrl(new Uri(Request.Url, Request.RawUrl)); var repo = new AzureTableStorageAlertsRepository(converter, ConfigurationManager.ConnectionStrings["Escc.EastSussexGovUK.Umbraco.AzureStorage"].ConnectionString); var oldAlert = repo.GetAlertById(alertId); var newAlert = new JobAlert() { Query = searchQuery, Email = oldAlert.Email, Frequency = searchQuery.Frequency, JobsSet = searchQuery.JobsSet }; newAlert.AlertId = encoder.GenerateId(newAlert); if (oldAlert.AlertId == newAlert.AlertId) { // The alert id didn't change but the frequency may have, so update the existing alert await repo.SaveAlert(newAlert); } else { // The alert id, and therefore the criteria, changed, so save the new alert and delete the old one await repo.SaveAlert(newAlert); await repo.CancelAlert(oldAlert.AlertId); } var urlWithoutQueryString = new Uri(Request.Url, new Uri(Request.Url, Request.RawUrl).AbsolutePath); var urlWithoutAlertId = encoder.RemoveIdFromUrl(urlWithoutQueryString); var urlWithAlertId = encoder.AddIdToUrl(urlWithoutAlertId, newAlert.AlertId); return(new RedirectResult(urlWithAlertId + "?updated=1")); } else { return(new RedirectResult(Request.RawUrl)); } }
/// <summary> /// Reads the jobs from pages of data provided by the <see cref="IJobsDataProvider"/> /// </summary> /// <returns></returns> public async Task <JobSearchResult> ReadJobs(JobSearchQuery query) { if (_jobResultsParser == null) { throw new InvalidOperationException("You must specify jobResultsParser when creating this instance to read jobs"); } var jobs = new JobSearchResult() { Jobs = new List <Job>() }; foreach (var resultsUrl in _resultsUrls) { var stream = await ReadXml(resultsUrl, _proxy).ConfigureAwait(false); jobs.Jobs.AddRange((await _jobResultsParser.Parse(stream)).Jobs); } return(jobs); }
/// <summary> /// Saves the HTML to a folder under App_Data so that the success of the import can be monitored /// </summary> /// <param name="query">The query.</param> /// <param name="currentPage">The current page.</param> /// <param name="stream">The stream.</param> /// <returns></returns> private Stream SaveHtml(JobSearchQuery query, int currentPage, Stream stream) { var folder = HostingEnvironment.MapPath("~/App_Data/TalentLinkHtml"); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } string html = null; using (var reader = new StreamReader(stream)) { var queryString = HttpUtility.ParseQueryString(_resultsUrl.Query); var htmlFilename = $"{folder}/{queryString["mask"]}-{DateTime.UtcNow.ToIso8601DateTime().Replace(":", "-")}-{query.ToHash()}-Page{currentPage}.html"; html = reader.ReadToEnd(); File.WriteAllText(htmlFilename, html); } stream = new MemoryStream(Encoding.UTF8.GetBytes(html)); return(stream); }
private static async Task <IEnumerable <SimpleDataSet> > CreateDataSetFromLookupValues(string indexType, string groupKey, int fakeNodeId, IList <JobsLookupValue> lookupValues, Action <JobsLookupValue, JobSearchQuery> addLookupToQuery, IJobsDataProvider jobsDataProvider) { var dataSets = new List <SimpleDataSet>(); if (lookupValues != null) { foreach (var lookupValue in lookupValues) { JobSearchQuery query = null; if (addLookupToQuery != null) { query = new JobSearchQuery(); addLookupToQuery(lookupValue, query); query.ClosingDateFrom = DateTime.Today; } var simpleDataSet = new SimpleDataSet { NodeDefinition = new IndexedNode(), RowData = new Dictionary <string, string>() }; simpleDataSet.NodeDefinition.NodeId = fakeNodeId; simpleDataSet.NodeDefinition.Type = indexType; simpleDataSet.RowData.Add("id", lookupValue.LookupValueId); simpleDataSet.RowData.Add("group", groupKey); simpleDataSet.RowData.Add("text", lookupValue.Text); if (jobsDataProvider != null) { var jobs = await jobsDataProvider.ReadJobs(query).ConfigureAwait(false); simpleDataSet.RowData.Add("count", jobs.TotalJobs.ToString(CultureInfo.CurrentCulture)); } dataSets.Add(simpleDataSet); fakeNodeId++; } } return(dataSets); }
/// <summary> /// Initiates an HTTP request and returns the HTML. /// </summary> /// <returns></returns> private async Task <Stream> ReadJobsFromTalentLink(int currentPage, JobSearchQuery query) { var queryString = HttpUtility.ParseQueryString(_resultsUrl.Query); UpdateQueryString(queryString, "resultsperpage", "200"); UpdateQueryString(queryString, "pagenum", currentPage.ToString(CultureInfo.InvariantCulture)); if (query != null) { UpdateQueryString(queryString, "keywords", query.Keywords); UpdateQueryString(queryString, "jobnum", query.JobReference); UpdateQueryString(queryString, "LOV39", String.Join(",", query.Locations)); UpdateQueryString(queryString, "LOV40", String.Join(",", query.JobTypes)); UpdateQueryString(queryString, "LOV52", String.Join(",", query.Organisations)); UpdateQueryString(queryString, "LOV46", String.Join(",", query.SalaryRanges)); UpdateQueryString(queryString, "LOV50", String.Join(",", query.WorkPatterns)); AddSortOrderToQueryString(queryString, query.SortBy); } var pagedSourceUrl = new StringBuilder(_resultsUrl.Scheme).Append("://").Append(_resultsUrl.Authority).Append(_resultsUrl.AbsolutePath).Append("?").Append(queryString); return(await ReadHtml(new Uri(pagedSourceUrl.ToString()), _proxy).ConfigureAwait(false)); }
protected void rptFilters_ItemCommand(object source, RepeaterCommandEventArgs e) { int FilterID = int.Parse(e.CommandArgument.ToString()); //if (e.CommandName == "Remove") { // PIKCV.BUS.Filters.RemoveFilter(FilterID); // string FilterName = ((LinkButton)e.Item.FindControl("lnkFilterName")).Text; // Response.Write("<script>alert('" + FilterName + " adýyla kayýtlý filtereniz silinmiþtir');</script>"); // FillData(); //} //else if (e.CommandName == "Detail") { DataRow drFilter = PIKCV.BUS.Filters.GetFilter(FilterID); string FilterValue = drFilter["FilterValue"].ToString(); Serialize objSer = new Serialize(); JobSearchQuery SearchQueries = new JobSearchQuery(); SearchQueries = (JobSearchQuery)(objSer.DeserializeObject(FilterValue.Substring(1), typeof(JobSearchQuery))); this.smJobSearchQueries = SearchQueries; this.Redirect("Employee-Jobs-Jobs"); } else if (e.CommandName == "Rename") { ((LinkButton)e.Item.FindControl("lnkFilterName")).Visible = false; ((TextBox)e.Item.FindControl("txtFilterName")).Visible = true; ((LinkButton)e.Item.FindControl("lnkFilterRenameSave")).Visible = true; } else if (e.CommandName == "RenameSave") { PIKCV.BUS.Filters.RenameFilter(FilterID, Request.Form[((TextBox)e.Item.FindControl("txtFilterName")).UniqueID].ToString()); ((LinkButton)e.Item.FindControl("lnkFilterName")).Visible = true; ((TextBox)e.Item.FindControl("txtFilterName")).Visible = false; ((LinkButton)e.Item.FindControl("lnkFilterRenameSave")).Visible = false; FillData(); } }
/// <summary> /// Gets the jobs matching the supplied query /// </summary> /// <param name="query"></param> /// <returns></returns> public Task <JobSearchResult> ReadJobs(JobSearchQuery query) { var examineQuery = _searcher.CreateSearchCriteria(BooleanOperation.And); examineQuery.GroupedOr(new[] { "location" }, query.Locations.ToArray()) .And().GroupedOr(new[] { "contractType" }, query.ContractTypes.ToArray()) .And().GroupedOr(new[] { "salaryDisplay" }, query.PayGrades.ToArray()) .And().GroupedOr(new[] { "workPattern" }, query.WorkPatterns.ToArray()) .And().GroupedOr(new[] { "jobType" }, query.JobTypes.ToArray()) .And().GroupedOr(new[] { "department" }, query.Departments.ToArray()) .And().GroupedOr(new[] { "organisation" }, query.Organisations.ToArray()); // If any of the GroupedOr values are empty, Examine generates a Lucene query that requires no field set to no value: +() // so we need to remove that and use the rest of the generated Lucene query var generatedQuery = examineQuery.ToString(); generatedQuery = generatedQuery.Substring(34, generatedQuery.Length - 36); var modifiedQuery = generatedQuery.Replace("+()", String.Empty); if (_keywordsQueryBuilder != null) { // Search for title keywords by building up a clause that looks for any of the keywords to be present // in the job title modifiedQuery += _keywordsQueryBuilder.AnyOfTheseTermsInThisField(query.KeywordsInTitle ?? String.Empty, new SearchField() { FieldName = "title" }, true); // Search for keywords by building up a clause that looks for all of the keywords to be present // in any one of the specified fields. modifiedQuery += _keywordsQueryBuilder.AllOfTheseTermsInAnyOfTheseFields(query.Keywords ?? String.Empty, new[] { new SearchField() { FieldName = "reference" }, new SearchField() { FieldName = "title", Boost = 2 }, new SearchField() { FieldName = "organisation" }, new SearchField() { FieldName = "location" }, new SearchField() { FieldName = "jobType" }, new SearchField() { FieldName = "contractType" }, new SearchField() { FieldName = "department" }, new SearchField() { FieldName = "fullText", Boost = 0.5 } }, true); } // For the salary ranges we need a structure that Examine's fluent API can't build, so build the raw Lucene query instead if (_salaryQueryBuilder != null) { modifiedQuery += _salaryQueryBuilder.SalaryIsWithinAnyOfTheseRanges(query.SalaryRanges); } // Append a requirement that the job must not have closed if (query.ClosingDateFrom.HasValue) { modifiedQuery += " +closingDate:[" + query.ClosingDateFrom.Value.ToString("yyyyMMdd000000000") + " TO 30000000000000000]"; } var luceneQuery = _searcher.CreateSearchCriteria(BooleanOperation.And); var sortField = String.Empty; switch (query.SortBy) { case JobSearchQuery.JobsSortOrder.JobTitleAscending: case JobSearchQuery.JobsSortOrder.JobTitleDescending: sortField = "titleDisplay"; break; case JobSearchQuery.JobsSortOrder.LocationAscending: case JobSearchQuery.JobsSortOrder.LocationDescending: sortField = "locationDisplay"; break; case JobSearchQuery.JobsSortOrder.SalaryRangeAscending: case JobSearchQuery.JobsSortOrder.SalaryRangeDescending: sortField = "salarySort"; break; case JobSearchQuery.JobsSortOrder.WorkPatternAscending: case JobSearchQuery.JobsSortOrder.WorkPatternDescending: sortField = "workPattern"; break; case JobSearchQuery.JobsSortOrder.ClosingDateAscending: case JobSearchQuery.JobsSortOrder.ClosingDateDescending: sortField = "closingDate"; break; } if (String.IsNullOrWhiteSpace(modifiedQuery)) { modifiedQuery = "__NodeId:[0 TO 999999]"; } try { switch (query.SortBy) { case JobSearchQuery.JobsSortOrder.JobTitleAscending: case JobSearchQuery.JobsSortOrder.LocationAscending: case JobSearchQuery.JobsSortOrder.SalaryRangeAscending: case JobSearchQuery.JobsSortOrder.WorkPatternAscending: case JobSearchQuery.JobsSortOrder.ClosingDateAscending: luceneQuery.RawQuery(modifiedQuery).OrderBy(sortField); break; case JobSearchQuery.JobsSortOrder.JobTitleDescending: case JobSearchQuery.JobsSortOrder.LocationDescending: case JobSearchQuery.JobsSortOrder.SalaryRangeDescending: case JobSearchQuery.JobsSortOrder.WorkPatternDescending: case JobSearchQuery.JobsSortOrder.ClosingDateDescending: luceneQuery.RawQuery(modifiedQuery).OrderByDescending(sortField); break; default: luceneQuery.RawQuery(modifiedQuery); break; } var results = _searcher.Search(luceneQuery); var searchResult = new JobSearchResult() { TotalJobs = results.Count() }; IEnumerable <SearchResult> selectedResults; if (query.PageSize.HasValue) { selectedResults = results.Skip((query.CurrentPage - 1) * query.PageSize.Value).Take(query.PageSize.Value); } else { selectedResults = results; } searchResult.Jobs = BuildJobsFromExamineResults(selectedResults); return(Task.FromResult(searchResult)); } catch (ParseException exception) { exception.Data.Add("Reference", query.JobReference); exception.Data.Add("Job types", String.Join(",", query.JobTypes.ToArray())); exception.Data.Add("Keywords in title", query.KeywordsInTitle); exception.Data.Add("Keywords", query.Keywords); exception.Data.Add("Locations", String.Join(",", query.Locations.ToArray())); exception.Data.Add("Organisations", String.Join(",", query.Organisations.ToArray())); exception.Data.Add("Salary ranges", String.Join(",", query.SalaryRanges.ToArray())); exception.Data.Add("Contract types", String.Join(",", query.ContractTypes.ToArray())); exception.Data.Add("Work patterns", String.Join(",", query.WorkPatterns.ToArray())); exception.Data.Add("Sort", query.SortBy); exception.Data.Add("Generated query", modifiedQuery); exception.ToExceptionless().Submit(); var errorForLog = new StringBuilder($"Lucene.net could not parse {modifiedQuery} generated from parameters:").Append(Environment.NewLine) .Append("Reference:").Append(query.JobReference).Append(Environment.NewLine) .Append("Job types:").Append(String.Join(",", query.JobTypes.ToArray())).Append(Environment.NewLine) .Append("Keywords in title:").Append(query.KeywordsInTitle).Append(Environment.NewLine) .Append("Keywords:").Append(query.Keywords).Append(Environment.NewLine) .Append("Locations:").Append(String.Join(",", query.Locations.ToArray())).Append(Environment.NewLine) .Append("Organisations:").Append(String.Join(",", query.Organisations.ToArray())).Append(Environment.NewLine) .Append("Salary ranges:").Append(String.Join(",", query.SalaryRanges.ToArray())).Append(Environment.NewLine) .Append("Contract types:").Append(String.Join(",", query.ContractTypes.ToArray())).Append(Environment.NewLine) .Append("Work patterns:").Append(String.Join(",", query.WorkPatterns.ToArray())).Append(Environment.NewLine) .Append("Sort:").Append(query.SortBy).Append(Environment.NewLine); _log.Error(errorForLog.ToString()); return(Task.FromResult(new JobSearchResult())); } }
public IEnumerable <SimpleDataSet> GetAllData(string indexType) { //Ensure that an Umbraco context is available if (UmbracoContext.Current == null) { var dummyContext = new HttpContextWrapper( new HttpContext(new SimpleWorkerRequest("/", string.Empty, new StringWriter()))); UmbracoContext.EnsureContext( dummyContext, ApplicationContext.Current, new WebSecurity(dummyContext, ApplicationContext.Current), false); } var dataSets = new List <SimpleDataSet>(); try { var jobsDataProvider = GetJobsDataProvider(); var i = 1; var locations = Task.Run(async() => await _lookupValuesProvider.ReadLocations()).Result; foreach (var lookupValue in locations) { var query = new JobSearchQuery(); query.Locations.Add(lookupValue.Text); query.ClosingDateFrom = DateTime.Today; var simpleDataSet = Task.Run(async() => await CreateDataSetFromLookup(i, indexType, "Location", query, lookupValue, jobsDataProvider)).Result; dataSets.Add(simpleDataSet); i++; } var jobTypes = Task.Run(async() => await _lookupValuesProvider.ReadJobTypes()).Result; foreach (var lookupValue in jobTypes) { var query = new JobSearchQuery(); query.JobTypes.Add(lookupValue.Text); query.ClosingDateFrom = DateTime.Today; var simpleDataSet = Task.Run(async() => await CreateDataSetFromLookup(i, indexType, "JobType", query, lookupValue, jobsDataProvider)).Result; dataSets.Add(simpleDataSet); i++; } var salaryRanges = Task.Run(async() => await _lookupValuesProvider.ReadSalaryRanges()).Result; foreach (var lookupValue in salaryRanges) { var query = new JobSearchQuery(); query.SalaryRanges.Add(lookupValue.Text); query.ClosingDateFrom = DateTime.Today; var simpleDataSet = Task.Run(async() => await CreateDataSetFromLookup(i, indexType, "SalaryRange", query, lookupValue, jobsDataProvider)).Result; dataSets.Add(simpleDataSet); i++; } var organisations = Task.Run(async() => await _lookupValuesProvider.ReadOrganisations()).Result; foreach (var lookupValue in organisations) { var query = new JobSearchQuery(); query.Organisations.Add(lookupValue.Text); query.ClosingDateFrom = DateTime.Today; var simpleDataSet = Task.Run(async() => await CreateDataSetFromLookup(i, indexType, "Organisation", query, lookupValue, jobsDataProvider)).Result; dataSets.Add(simpleDataSet); i++; } var workPatterns = Task.Run(async() => await _lookupValuesProvider.ReadWorkPatterns()).Result; foreach (var lookupValue in workPatterns) { var query = new JobSearchQuery(); query.WorkPatterns.Add(lookupValue.Text); query.ClosingDateFrom = DateTime.Today; var simpleDataSet = Task.Run(async() => await CreateDataSetFromLookup(i, indexType, "WorkPattern", query, lookupValue, jobsDataProvider)).Result; dataSets.Add(simpleDataSet); i++; } } catch (Exception ex) { ex.ToExceptionless().Submit(); LogHelper.Error <BaseJobsIndexer>("error indexing:", ex); } LogHelper.Info <BaseLookupValuesIndexer>($"{dataSets.Count} items built for indexing by {this.GetType().ToString()}"); return(dataSets); }
private static async Task <SimpleDataSet> CreateDataSetFromLookup(int fakeNodeId, string indexType, string group, JobSearchQuery query, JobsLookupValue lookupValue, IJobsDataProvider jobsDataProvider) { var simpleDataSet = new SimpleDataSet { NodeDefinition = new IndexedNode(), RowData = new Dictionary <string, string>() }; simpleDataSet.NodeDefinition.NodeId = fakeNodeId; simpleDataSet.NodeDefinition.Type = indexType; simpleDataSet.RowData.Add("id", lookupValue.Id); simpleDataSet.RowData.Add("group", group); simpleDataSet.RowData.Add("text", lookupValue.Text); if (jobsDataProvider != null) { var jobs = await jobsDataProvider.ReadJobs(query); simpleDataSet.RowData.Add("count", jobs.Count.ToString(CultureInfo.CurrentCulture)); } return(simpleDataSet); }
public void DataBind(PIKCV.COM.Enumerations.ListTypes ListType) { DataTable dt = new DataTable(); DataTable dtInfo; switch (ListType) { case PIKCV.COM.Enumerations.ListTypes.Message: string JobID = "%"; if (CARETTA.COM.Util.IsNumeric(Request.QueryString["JobID"])) { JobID = Request.QueryString["JobID"].ToString(); } dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "", "ReadResult", false, -1); AddDataInfo(ref dtInfo, "Konu", "MessageTitle", false, -1, true, "Employee-Messages-MessageDetail", "MessageID"); AddDataInfo(ref dtInfo, "Gönderen", "CompanyName", true, 0); AddDataInfo(ref dtInfo, "Tarih", "CreateDate", false, -1); AddDataInfo(ref dtInfo, "", "Delete", false, -1); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.Messages.GetAllMessages(this.smUserID, false, PIKCV.COM.EnumDB.MemberTypes.Employee, this.HtQuery["CompanyName"].ToString(), JobID); dt.Columns.Add("ReadResult"); dt.Columns.Add("Delete"); foreach (DataRow dr in dt.Rows) { dr["Delete"] = "<a href=\"" + this.OpenConfirm(PIKCV.COM.EnumDB.ErrorTypes.cDeleteMessage, Convert.ToInt32(dr["MessageID"])) + "\">Sil<a>"; if (Convert.ToBoolean(dr["IsRead"])) { dr["ReadResult"] = "<img src='images/misc/read.jpg' />"; } else { dr["ReadResult"] = "<img src='images/misc/unread.jpg' />"; } } FilterCount(dtInfo); AddListFilterTypes(dt, "CompanyID", "CompanyName"); DataBind(dtInfo, dt, "Employee-Messages-Messages"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoMessage); break; case PIKCV.COM.Enumerations.ListTypes.UserJobApplicants: dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "Baþvuru Tarihi", "ApplicationDate", false, -1); AddDataInfo(ref dtInfo, "Firma", "CompanyName", true, 0); AddDataInfo(ref dtInfo, "Pozisyon", "PositionName", true, 1, true, "Employee-Jobs-JobDetail", "JobID"); AddDataInfo(ref dtInfo, "Durum", "JobApplicationStatusName", true, 2); AddDataInfo(ref dtInfo, "Mesaj", "MessageCount", false, -1, true, "Employee-Messages-Messages", "JobID"); AddDataInfo(ref dtInfo, "Baþvuru Ýptal", "CancelApplicant", false, -1); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.JobApplicants.GetUserJobApplicants(this.smUserID, this.smLanguageID, this.HtQuery["CompanyName"].ToString(), this.HtQuery["PositionName"].ToString(), this.HtQuery["JobApplicationStatusName"].ToString()); dt.Columns.Add("CancelApplicant"); foreach (DataRow dr in dt.Rows) { if ((PIKCV.COM.EnumDB.JobApplicationStates)dr["ApplicationStatusID"] == PIKCV.COM.EnumDB.JobApplicationStates.RecievedBack) { dr["CancelApplicant"] = ""; } else { dr["CancelApplicant"] = "<a href=\"" + this.OpenConfirm(PIKCV.COM.EnumDB.ErrorTypes.cCancelApplicant, Convert.ToInt32(dr["JobApplicantID"]), "") + "\">Baþvuru Ýptal<a>"; } } FilterCount(dtInfo); AddListFilterTypes(dt, "CompanyID", "CompanyName"); AddListFilterTypes(dt, "PositionID", "PositionName"); AddListFilterTypes(dt, "ApplicationStatusID", "JobApplicationStatusName"); DataBind(dtInfo, dt, "Employee-JobApplicants-JobApplicants"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoApplicant); break; case PIKCV.COM.Enumerations.ListTypes.CompanyMessages: dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "Konu", "MessageTitle", false, -1, true, "Company-Messages-MessageDetail", "MessageID"); AddDataInfo(ref dtInfo, "Tarih", "CreateDate", false, -1); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.Messages.GetCompanyMessages(this.smCompanyID, false, PIKCV.COM.EnumDB.MemberTypes.Company); FilterCount(dtInfo); DataBind(dtInfo, dt, "Company-Messages-Messages"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoMessage); break; case PIKCV.COM.Enumerations.ListTypes.CompanySentMessages: dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "", "ReadResult", false, -1); AddDataInfo(ref dtInfo, "Konu", "MessageTitle", false, -1, true, "Company-Messages-SendMessageDetail", "MessageID"); AddDataInfo(ref dtInfo, "Gönderilen", "FullName", true, 0, true, "Company-Messages-SentMessages", "UserID"); AddDataInfo(ref dtInfo, "Tarih", "CreateDate", false, -1); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.Messages.GetCompanySentMessages(this.smCompanyID, false, this.HtQuery["FullName"].ToString()); dt.Columns.Add("ReadResult"); foreach (DataRow dr in dt.Rows) { if (Convert.ToBoolean(dr["IsRead"])) { dr["ReadResult"] = ""; } else { dr["ReadResult"] = "<img src='images/misc/unread.jpg' />"; } } FilterCount(dtInfo); AddListFilterTypes(dt, "UserID", "FullName"); DataBind(dtInfo, dt, "Company-Messages-SentMessages"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoMessage); break; case PIKCV.COM.Enumerations.ListTypes.EnteredJobs: int m_Status = 1; PIKCV.COM.EnumDB.JobStatus JobStatus = PIKCV.COM.EnumDB.JobStatus.Active; if (CARETTA.COM.Util.IsNumeric(Request.QueryString["JobStatus"])) { m_Status = Convert.ToInt32(Request.QueryString["JobStatus"]); JobStatus = (PIKCV.COM.EnumDB.JobStatus)m_Status; } dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "Referans Numarasý", "ReferenceNumber", false, -1); AddDataInfo(ref dtInfo, "Pozisyon", "PositionName", true, 0); AddDataInfo(ref dtInfo, "Baþvuru", "ApplicantCount", false, -1, true, "Company-Jobs-JobApplicants", "JobID"); AddDataInfo(ref dtInfo, "Bitiþ Tarihi", "EndDate", false, -1); AddDataInfo(ref dtInfo, "Ýstatistik", "Statistics", false, -1); switch (JobStatus) { case PIKCV.COM.EnumDB.JobStatus.Active: AddDataInfo(ref dtInfo, "Durum", "Update", false, -1, true, "Company-Jobs-Jobs&JobFocus=2&JobSaveType=" + ((int)PIKCV.COM.Enumerations.JobSaveType.Update).ToString(), "JobID"); AddDataInfo(ref dtInfo, "", "Archive", false, -1, true, "Company-Jobs-PublicJobs&JobStatus=4", "JobID"); break; case PIKCV.COM.EnumDB.JobStatus.Draft: AddDataInfo(ref dtInfo, "Durum", "Update", false, -1, true, "Company-Jobs-Jobs&JobFocus=2&JobSaveType=" + ((int)PIKCV.COM.Enumerations.JobSaveType.ArchiveOrDraft).ToString(), "JobID"); AddDataInfo(ref dtInfo, "", "Archive", false, -1, true, "Company-Jobs-PublicJobs&JobStatus=1", "JobID"); break; case PIKCV.COM.EnumDB.JobStatus.Archive: AddDataInfo(ref dtInfo, "Durum", "Update", false, -1, true, "Company-Jobs-Jobs&JobFocus=2&JobSaveType=" + ((int)PIKCV.COM.Enumerations.JobSaveType.ArchiveOrDraft).ToString(), "JobID"); AddDataInfo(ref dtInfo, "", "Archive", false, -1, true, "Company-Jobs-PublicJobs&JobStatus=1", "JobID"); break; } AddDataInfo(ref dtInfo, "", "Delete", false, -1); //AddDataInfo(ref dtInfo, "", "Delete", false, -1, true, "Company-Jobs-PublicJobs&JobStatus=" + ((int)PIKCV.COM.EnumDB.JobStatus.Draft).ToString(), "JobID"); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.Job.GetCompanyJobsAll(this.smCompanyID, JobStatus, this.smLanguageID, this.HtQuery["PositionName"].ToString()); dt.Columns.Add("Update"); dt.Columns.Add("Archive"); dt.Columns.Add("Delete"); dt.Columns.Add("Statistics"); foreach (DataRow dr in dt.Rows) { switch (JobStatus) { case PIKCV.COM.EnumDB.JobStatus.Active: dr["Update"] = "Güncelle"; dr["Archive"] = "Arþivle"; dr["Delete"] = ""; break; case PIKCV.COM.EnumDB.JobStatus.Draft: dr["Update"] = "Güncelle"; dr["Archive"] = "Yayýnla"; //"<span onclick='DraftDeleteCtrl(3, 3)'>Delete</span>"; string Delete = "<u><b><span onclick='DraftDeleteCtrl(" + ((int)PIKCV.COM.EnumDB.JobStatus.Draft).ToString() + ", " + dr["JobID"].ToString() + ")'>Sil</span><b></u>"; dr["Delete"] = Delete; break; case PIKCV.COM.EnumDB.JobStatus.Archive: dr["Update"] = ""; dr["Delete"] = ""; dr["Archive"] = "Yayýnla"; break; } string StatisticImage = "<img onclick='OpenJobStatistics("; StatisticImage = StatisticImage + dr["JobID"].ToString() + ")'"; StatisticImage = StatisticImage + "style='cursor: pointer;' src='images/misc/statistic.png' width='16' height='14' />"; dr["Statistics"] = StatisticImage; string PositionName = "<strong><a href='javascript:;' onclick='OpenJobPreview(" + dr["JobID"].ToString() + ")'>" + dr["PositionName"].ToString() + "</a></strong>"; dr["PositionName"] = PositionName; } FilterCount(dtInfo); AddListFilterTypes(dt, "PositionID", "PositionName"); DataBind(dtInfo, dt, "Company-Jobs-PublicJobs"); string NoRecordMsg = String.Empty; switch (JobStatus) { case PIKCV.COM.EnumDB.JobStatus.Active: lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoJob); break; case PIKCV.COM.EnumDB.JobStatus.Draft: lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoDraftJob); break; case PIKCV.COM.EnumDB.JobStatus.Archive: lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoArchiveJob); break; } break; case PIKCV.COM.Enumerations.ListTypes.JobSearchResults: JobSearchQuery JobSearchQueries = this.smJobSearchQueries; dtInfo = new DataTable(); AddDataInfo(ref dtInfo, "Pozisyon", "PositionName_JobTitle", true, 0, true, "Employee-Jobs-JobDetail", "JobID"); AddDataInfo(ref dtInfo, "Ref NO", "ReferenceNumber", false, -1); AddDataInfo(ref dtInfo, "Firma", "CompanyName", true, 1); AddDataInfo(ref dtInfo, "Son Baþvuru", "EndDate", false, -1); AddDataInfo(ref dtInfo, "Tarih", "ModifyDate", false, -1); AddDataInfo(ref dtInfo, "Baþvuru", "IsApply", true, 2); string Keyword = JobSearchQueries.Keyword; string Positions = XMLHelper.BuildXmlString("Positions", "PositionID", JobSearchQueries.Positions); string Sectors = (JobSearchQueries.Sectors.Count > 0) ? XMLHelper.BuildXmlString("Sectors", "SectorID", JobSearchQueries.Sectors) : String.Empty; string Cities = (JobSearchQueries.Cities.Count > 0) ? XMLHelper.BuildXmlString("Cities", "PlaceID", JobSearchQueries.Cities) : String.Empty; string Companies = (JobSearchQueries.Companies.Count > 0) ? XMLHelper.BuildXmlString("Copmanies", "CompanyID", JobSearchQueries.Companies) : String.Empty; string EducationLevels = (JobSearchQueries.EducationLevels.Count > 0) ? XMLHelper.BuildXmlString("EducationLevels", "EducationLevelID", JobSearchQueries.EducationLevels) : String.Empty; PIKCV.COM.EnumDB.AgeRange AgeRange = JobSearchQueries.AgeRange; string LabouringTypes = (JobSearchQueries.LabouringTypes.Count > 0) ? XMLHelper.BuildXmlString("LabouringTypes", "LabouringTypeID", JobSearchQueries.LabouringTypes) : String.Empty; DateTime JobDate = (JobSearchQueries.JobDate != -1) ? DateTime.Now.AddDays(JobSearchQueries.JobDate) : DateTime.MinValue; bool CustomJobs = JobSearchQueries.CustomJobs; InitializeHtQuery(dtInfo); int PositionID = (this.HtQuery["PositionName_JobTitle"].ToString() == "%") ? -1 : Convert.ToInt32(this.HtQuery["PositionName_JobTitle"]); int CompanyID = (this.HtQuery["CompanyName"].ToString() == "%") ? -1 : Convert.ToInt32(this.HtQuery["CompanyName"]); int Status = (this.HtQuery["IsApply"].ToString() == "%") ? -1 : Convert.ToInt32(this.HtQuery["IsApply"]); PIKCV.BUS.Job objJob = new PIKCV.BUS.Job(); dt = objJob.GetJobs(this.smUserID, Keyword, Sectors, Cities, Positions, PIKCV.COM.EnumDB.JobStatus.Active, Companies, EducationLevels, LabouringTypes, AgeRange, JobDate, CustomJobs, PositionID, CompanyID, Status); FilterCount(dtInfo); AddListFilterTypes(dt, "PositionID", "PositionName_JobTitle"); AddListFilterTypes(dt, "CompanyID", "CompanyName"); AddListFilterTypes(dt, "Status", "IsApply"); DataBind(dtInfo, dt, "Employee-Jobs-Jobs"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoJobSearch); break; case PIKCV.COM.Enumerations.ListTypes.CompanyJobApplicants: int ApplicantJobID = 0; if (CARETTA.COM.Util.IsNumeric(Request.QueryString["JobID"])) { ApplicantJobID = Convert.ToInt32(Request.QueryString["JobID"]); } dtInfo = new DataTable(); //AddDataInfo(ref dtInfo, "Kiþi", "FullName", false, -1, true, "Company-Jobs-JobApplicants", "UserID"); AddDataInfo(ref dtInfo, "Kiþi", "FullName", false, -1); AddDataInfo(ref dtInfo, "Baþvuru Tarihi", "ApplicationDate", false, -1); AddDataInfo(ref dtInfo, "Puan", "Rate", false, -1); AddDataInfo(ref dtInfo, "Durum", "JobApplicationStatusName", true, 0); AddDataInfo(ref dtInfo, "", "Unsuitability", false, -1); InitializeHtQuery(dtInfo); dt = PIKCV.BUS.JobApplicants.GetCompanyJobApplicants(ApplicantJobID, this.smLanguageID, this.HtQuery["JobApplicationStatusName"].ToString()); dt.Columns.Add("Unsuitability"); foreach (DataRow dr in dt.Rows) { dr["FullName"] = "<a href='Pikcv.aspx?Pik=Company-Jobs-JobApplicants&UserID=" + dr["UserID"].ToString() + "&JobApplicantID=" + dr["JobApplicantID"].ToString() + "'>" + dr["FullName"].ToString() + "</a>"; if (!(Convert.ToInt32(dr["JobApplicationStatusID"]) == (int)PIKCV.COM.EnumDB.JobApplicationStates.Unsuitability)) { dr["Unsuitability"] = dr["Unsuitability"] = "<a href=\"" + this.OpenConfirm(PIKCV.COM.EnumDB.ErrorTypes.cJobApplicantUnsuitabilitySet, Convert.ToInt32(dr["JobApplicantID"])) + "\">Reddet<a>"; } } FilterCount(dtInfo); AddListFilterTypes(dt, "JobApplicationStatusID", "JobApplicationStatusName"); DataBind(dtInfo, dt, "Company-Jobs-JobApplicants"); lblNoRecord.Text = PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.NoApplicant); break; } }
public async Task Test_JobSearchQuery_PageForward_Should_ReturnNewPage() { // arrange var jobs = new JobFaker().Generate(100); await using var dbContext = GetDbContext(); await dbContext.Setup(x => x.Jobs, jobs); var search = new JobSearchCriteria(); // act var query = new JobSearchQuery(dbContext); var page1 = await query.Find(search, new PagingCriteria() { Page = 1, Size = 5 }); var page2 = await query.Find(search, new PagingCriteria() { Page = 2, Size = 5 }); var page3 = await query.Find(search, new PagingCriteria() { Page = 3, Size = 5 }); var page10 = await query.Find(search, new PagingCriteria() { Page = 10, Size = 5 }); // assert page1.Should().NotBeNull(); page1.Page.Should().Be(1); page1.TotalItems.Should().Be(100); page1.TotalPages.Should().Be(20); page1.Data.Should() .NotContain(page2.Data) .And.NotContain(page3.Data) .And.NotContain(page10.Data); page2.Should().NotBeNull(); page2.Page.Should().Be(2); page2.TotalItems.Should().Be(100); page2.TotalPages.Should().Be(20); page2.Data.Should() .NotContain(page1.Data) .And.NotContain(page3.Data) .And.NotContain(page10.Data); page3.Should().NotBeNull(); page3.Page.Should().Be(3); page3.TotalItems.Should().Be(100); page3.TotalPages.Should().Be(20); page3.Data.Should() .NotContain(page1.Data) .And.NotContain(page2.Data) .And.NotContain(page10.Data); page10.Should().NotBeNull(); page10.Page.Should().Be(10); page10.TotalItems.Should().Be(100); page10.TotalPages.Should().Be(20); page10.Data.Should() .NotContain(page1.Data) .And.NotContain(page2.Data) .And.NotContain(page3.Data); }
protected void BtnSearch_Click(object sender, ImageClickEventArgs e) { ArrayList arrTemp; JobSearchQuery m_SearchQueries = new JobSearchQuery(); m_SearchQueries.Keyword = Util.ReplaceStrForDB(txtKeyword.Text); arrTemp = new ArrayList(); if (Request.Form[lbSelectedPositions.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedPositions.UniqueID].Split(',')); } m_SearchQueries.Positions = arrTemp; arrTemp = new ArrayList(); if (Request.Form[lbSelectedSectors.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedSectors.UniqueID].Split(',')); } m_SearchQueries.Sectors = arrTemp; arrTemp = new ArrayList(); if (Request.Form[lbSelectedCities.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedCities.UniqueID].Split(',')); } if (Request.Form[lbSelectedCountries.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedCountries.UniqueID].Split(',')); } m_SearchQueries.Cities = arrTemp; arrTemp = new ArrayList(); if (Request.Form[lbSelectedCompanies.UniqueID] != null) { arrTemp.AddRange(Request.Form[lbSelectedCompanies.UniqueID].Split(',')); } m_SearchQueries.Companies = arrTemp; arrTemp = new ArrayList(); foreach (ListItem li in chEducationLevels.Items) { if (li.Selected) { arrTemp.Add(li.Value); } } m_SearchQueries.EducationLevels = arrTemp; m_SearchQueries.AgeRange = (PIKCV.COM.EnumDB.AgeRange)(int.Parse(rdAgeRange.SelectedValue)); arrTemp = new ArrayList(); foreach (ListItem li in chListLabouringTypes.Items) { if (li.Selected) { arrTemp.Add(li.Value); } } m_SearchQueries.LabouringTypes = arrTemp; m_SearchQueries.JobDate = int.Parse(rdJobDate.SelectedValue); m_SearchQueries.CustomJobs = (rdCustomJobs.Checked); this.smJobSearchQueries = m_SearchQueries; if (chIsFilterSave.Checked) { Serialize objSerialize = new Serialize(); string FilterValue = objSerialize.SerializeObject(this.smJobSearchQueries); if (PIKCV.BUS.Filters.CheckFilterExistance(this.smUserID, txtFilterName.Text, PIKCV.COM.EnumDB.MemberTypes.Employee, PIKCV.COM.EnumDB.FilterTypes.JobSearch) == 0) { PIKCV.BUS.Filters.SaveFilter(PIKCV.COM.EnumDB.FilterTypes.JobSearch, txtFilterName.Text, this.smUserID, PIKCV.COM.EnumDB.MemberTypes.Employee, FilterValue); this.smListFilterTypes = new ArrayList(); //Response.Write("<script>alert('Filtreniz kaydedilmiþtir, filtre bilgilerinize kayýtlý filtreleriniz bölümünden ulaþabilirsiniz');window.location.href('pikcv.aspx?Pik=Employee-Jobs-Jobs');</script>"); this.Redirect("Employee-Jobs-Jobs&PopupID=" + ((int)PIKCV.COM.EnumDB.ErrorTypes.FilterSaveSuccess).ToString()); } else { //TODO: seçtiði herþey gidiyor ShowModal.Show(UserControls_Common_uModalPopup.Icons.alert, PIKCV.COM.Data.GetErrorMessageTitleCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.FilterAlreadyExist), PIKCV.COM.Data.GetErrorMessageCache(this.cmbErrors, PIKCV.COM.EnumDB.ErrorTypes.FilterAlreadyExist), false); } } else { this.smListFilterTypes = new ArrayList(); this.Redirect("Employee-Jobs-Jobs"); } }