Example #1
0
        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);
        }
Example #3
0
        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));
        }
Example #5
0
        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>());
            }
        }