public ActionResult Newsletter(CommunicationsContext context) { var member = _membersQuery.GetMember(context.UserId); if (member == null || !member.IsEnabled || !member.IsActivated) { return(HttpNotFound()); } var candidate = _candidatesQuery.GetCandidate(context.UserId); var resume = candidate.ResumeId == null ? null : _resumesQuery.GetResume(candidate.ResumeId.Value); var model = CreateModel <NewsletterModel>(context); model.Member = member; model.Candidate = candidate; model.Resume = resume; var lastMonth = new DateTimeRange(DateTime.Today.AddMonths(-1), DateTime.Today); model.TotalJobAds = _jobAdReportsQuery.GetCreatedJobAds(lastMonth); model.TotalViewed = _employerMemberAccessReportsQuery.GetMemberViewings(context.UserId, lastMonth); model.ProfilePercentComplete = _memberStatusQuery.GetPercentComplete(member, candidate, resume); var execution = _executeJobAdSearchCommand.SearchSuggested(member, null, new Range(0, MaxSuggestedJobCount)); var jobAds = _jobAdsQuery.GetJobAds <JobAd>(execution.Results.JobAdIds).ToDictionary(j => j.Id, j => j); model.SuggestedJobs = (from i in execution.Results.JobAdIds where jobAds.ContainsKey(i) select jobAds[i]).ToList(); return(View(model)); }
protected TListModel SuggestedJobs <TListModel>(IMember member, JobAdsPresentationModel presentation) where TListModel : JobAdSearchListModel, new() { presentation = PreparePresentationModel(presentation); // Search. var range = presentation.Pagination.ToRange(); var execution = _executeJobAdSearchCommand.SearchSuggested(member, null, presentation.Pagination.ToRange()); var model = new TListModel { Criteria = execution.Criteria, Presentation = presentation, ListType = JobAdListType.SuggestedJobs, Results = new JobAdListResultsModel { TotalJobAds = execution.Results.TotalMatches, JobAdIds = execution.Results.JobAdIds.SelectRange(range).ToList(), JobAds = GetMemberJobAdViews(member, execution.Results.JobAdIds.SelectRange(range)), }, Folders = GetFoldersModel(), BlockLists = GetBlockListsModel(), }; return(model); }
public void Run(Guid userId, DateTime lastRunTime) { const string method = "Run"; // The user has to be active to receive this email. if (!_userAccountsQuery.IsActive(userId)) { #region Log Logger.Raise(Event.Trace, method, "The user is not active and therefore won't get any suggested jobs.", Event.Arg("userId", userId)); #endregion return; } var member = _membersQuery.GetMember(userId); var execution = _jobAdSearchCommand.SearchSuggested(member, DateTime.Now - lastRunTime, new Range(0, MaxResults)); if (execution.Results.JobAdIds.Count == 0) { #region Log Logger.Raise(Event.Trace, method, "No new suggested jobs were found.", Event.Arg("userId", userId)); #endregion return; } var jobAdIds = execution.Results.JobAdIds.Take(MaxResults).ToList(); var jobAds = _jobAdsQuery.GetJobAds <JobAd>(jobAdIds).ToDictionary(j => j.Id, j => j); var emailJobAds = from i in jobAdIds where jobAds.ContainsKey(i) select jobAds[i]; var to = _membersQuery.GetMember(userId); var email = SuggestedJobsEmail.Create(to, emailJobAds, execution.Results.JobAdIds.Count); var ok = _emailsCommand.TrySend(email); #region Log if (ok) { Logger.Raise(Event.Trace, method, "SuggestedJobsEmail sent.", Event.Arg("userId", userId)); } else { Logger.Raise(Event.Warning, method, "Unable to send SuggestedJobsEmail.", Event.Arg("userId", userId)); } #endregion }
public ActionResult SuggestedJobs() { var pagination = PreparePagination(new Pagination()); var execution = _executeJobAdSearchCommand.SearchSuggested(CurrentMember, null, pagination.ToRange()); var jobAdIds = execution.Results.JobAdIds.SelectRange(pagination.ToRange()).ToList(); var model = new SuggestedJobsListMobileModel { Results = new JobAdListResultsMobileModel { JobAdIds = jobAdIds, JobAds = GetMemberJobAdViews(CurrentMember, jobAdIds), }, }; return(View(model)); }
private IList <MemberJobAdView> GetSuggestedJobs(IMember member, JobAdView jobAd) { const string method = "GetSuggestedJobs"; try { // If the jobAd is closed and there is a query in the referrer then do a search. if (jobAd.Status == JobAdStatus.Closed) { var q = HttpContext.Request.UrlReferrer == null ? string.Empty : HttpUtility.ParseQueryString(HttpContext.Request.UrlReferrer.Query)["q"]; if (!string.IsNullOrEmpty(q)) { var criteria = new JobAdSearchCriteria(); criteria.SetKeywords(q); return(GetSuggestedJobs(member, _executeJobAdSearchCommand.Search(member, criteria, new Range(0, MaxSuggestedJobsCount)).Results)); } } // If the member is logged in then get suggested jobs. if (member != null) { return(GetSuggestedJobs(member, _executeJobAdSearchCommand.SearchSuggested(member, null, new Range(0, MaxSuggestedJobsCount)).Results)); } // Otherwise get similar jobs to this one. return(GetSuggestedJobs(null, _executeJobAdSearchCommand.SearchSimilar(null, jobAd.Id, new Range(0, MaxSuggestedJobsCount)).Results)); } catch (Exception ex) { // If there is a problem then log but don't stop the user doing what they need to do. EventSource.Raise(Event.Error, method, "Cannot get suggested jobs.", ex, new StandardErrorHandler(), Event.Arg("jobAdId", jobAd.Id)); return(new List <MemberJobAdView>()); } }