private static void CheckVisibility(ProfessionalView view, MemberAccessReason reason)
        {
            // This check is here is to ensure that the member does in fact have something the employer wants to see
            // and that it is visible, even after exercising a credit.

            switch (reason)
            {
            case MemberAccessReason.PhoneNumberViewed:

                // Must have a phone number.

                if (!view.HasPhoneNumbers ||
                    !view.VisibilitySettings.Professional.EmploymentVisibility.IsFlagSet(ProfessionalVisibility.Resume) ||
                    !view.VisibilitySettings.Professional.EmploymentVisibility.IsFlagSet(ProfessionalVisibility.PhoneNumbers))
                {
                    throw new NotVisibleException();
                }
                break;

            default:

                // Must have a visible resume.  Really should be checking for view.Resume != null but that means
                // loading a lot of information from the database for a rare case.  It is basically assumed
                // that if it gets to here the member has a resume.

                if (!view.VisibilitySettings.Professional.EmploymentVisibility.IsFlagSet(ProfessionalVisibility.Resume))
                {
                    throw new NotVisibleException();
                }
                break;
            }
        }
Example #2
0
        private ActionResult AccessMember(Guid candidateId, MemberAccessReason reason)
        {
            try
            {
                var employer = CurrentEmployer;
                var view     = _employerMemberViewsQuery.GetEmployerMemberView(employer, candidateId);
                if (view == null)
                {
                    return(JsonNotFound("candidate", JsonRequestBehavior.AllowGet));
                }

                // Access the member.

                _employerMemberViewsCommand.AccessMember(ActivityContext.Channel.App, employer, view, reason);

                // Accessing will change what the employer can see so get the view again.

                view = _employerMemberViewsQuery.GetEmployerMemberView(employer, candidateId);
                return(Json(new CandidateResponseModel {
                    Candidate = GetCandidateModel(view)
                }, JsonRequestBehavior.AllowGet));
            }
            catch (UserException ex)
            {
                ModelState.AddModelError(ex, new StandardErrorHandler());
            }

            return(Json(new JsonResponseModel(), JsonRequestBehavior.AllowGet));
        }
 private static void CheckVisibility(IEnumerable <ProfessionalView> views, MemberAccessReason reason)
 {
     foreach (var view in views)
     {
         CheckVisibility(view, reason);
     }
 }
 int IEmployerMemberAccessReportsRepository.GetMemberAccesses(MemberAccessReason reason, Channel channel, DateTimeRange timeRange)
 {
     using (var dc = CreateDataContext(true))
     {
         return(GetMemberAccessesByReason(dc, reason, channel.Id, timeRange));
     }
 }
 int IEmployerMemberAccessReportsRepository.GetMemberAccesses(Guid memberId, MemberAccessReason reason)
 {
     using (var dc = CreateDataContext(true))
     {
         var count = GetMemberAccessesByMemberAndReason(dc, memberId, reason);
         return(count == null ? 0 : (int)count.Value);
     }
 }
        private void CheckAccessLimit(Guid employerId, IEnumerable <Guid> memberIds, MemberAccessReason reason)
        {
            switch (reason)
            {
            case MemberAccessReason.ResumeDownloaded:
            case MemberAccessReason.ResumeSent:
                CheckAccessLimit(employerId, memberIds, _bulkDailyLimit, _bulkWeeklyLimit, MemberAccessReason.ResumeDownloaded, MemberAccessReason.ResumeSent);
                break;

            case MemberAccessReason.Unlock:
            case MemberAccessReason.PhoneNumberViewed:
                CheckAccessLimit(employerId, memberIds, _bulkUnlockDailyLimit, _bulkUnlockWeeklyLimit, MemberAccessReason.Unlock, MemberAccessReason.PhoneNumberViewed);
                break;

            default:
                CheckAccessLimit(employerId, memberIds, _bulkDailyLimit, _bulkWeeklyLimit, reason);
                break;
            }
        }
        private void CheckAccessLimit(Guid employerId, Guid memberId, MemberAccessReason reason)
        {
            switch (reason)
            {
            case MemberAccessReason.ResumeDownloaded:
            case MemberAccessReason.ResumeSent:
                CheckAccessLimit(employerId, memberId, _dailyLimit, _weeklyLimit, MemberAccessReason.ResumeDownloaded, MemberAccessReason.ResumeSent);
                break;

            case MemberAccessReason.Unlock:
            case MemberAccessReason.PhoneNumberViewed:
                CheckAccessLimit(employerId, memberId, _dailyLimit, _weeklyLimit, MemberAccessReason.Unlock, MemberAccessReason.PhoneNumberViewed);
                break;

            default:
                CheckAccessLimit(employerId, memberId, _dailyLimit, _weeklyLimit, reason);
                break;
            }
        }
        private void CheckCanAccessMember(IEmployer employer, ProfessionalView view, MemberAccessReason reason)
        {
            // An anonymous employer means insufficient credits.

            if (employer == null)
            {
                throw new InsufficientCreditsException {
                          Available = 0, Required = 1
                }
            }
            ;

            // Make sure the details are visible.

            CheckVisibility(view, reason);

            // Check against limits.

            CheckAccessLimit(employer.Id, view.Id, reason);

            // Check the credit.

            _employerCreditsCommand.CheckCanExerciseContactCredit(employer, view);
        }
 int IEmployerMemberAccessReportsRepository.GetEmployerAccesses(Guid employerId, MemberAccessReason reason, DateTimeRange timeRange)
 {
     using (var dc = CreateDataContext(true))
     {
         return(GetMemberAccessesByEmployer(dc, employerId, reason, timeRange));
     }
 }
 int IEmployerMemberAccessReportsQuery.GetMemberAccesses(Guid memberId, MemberAccessReason reason)
 {
     return(_repository.GetMemberAccesses(memberId, reason));
 }
        private void CheckCanAccessMembers(IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
        {
            switch (views.Count())
            {
            case 0:
                break;

            case 1:
                CheckCanAccessMember(employer, views.First(), reason);
                break;

            default:
                CheckCanAccessBulkMembers(employer, views, reason);
                break;
            }
        }
        private IList <MemberAccess> AccessMembers(ChannelApp app, IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
        {
            switch (views.Count())
            {
            case 0:
                return(new List <MemberAccess>());

            case 1:
                return(new List <MemberAccess> {
                    AccessMember(app, employer, views.First(), reason)
                });

            default:
                return(AccessBulkMembers(app, employer, views, reason));
            }
        }
 void IEmployerMemberViewsCommand.CheckCanAccessMembers(ChannelApp app, IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
 {
     CheckCanAccessMembers(employer, views, reason);
 }
 IList <MemberAccess> IEmployerMemberViewsCommand.AccessMembers(ChannelApp app, IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
 {
     return(AccessMembers(app, employer, views, reason));
 }
        private void CheckCanAccessBulkMembers(IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
        {
            if (employer == null)
            {
                throw new InsufficientCreditsException {
                          Available = 0, Required = views.Count()
                }
            }
            ;

            // Make sure the details are visible.

            CheckVisibility(views, reason);

            // Check against limits.

            CheckAccessLimit(employer.Id, from v in views select v.Id, reason);

            // Check the credits.

            _employerCreditsCommand.CheckCanExerciseContactCredits(employer, views);
        }
        private IList <MemberAccess> CreateMemberAccesses(ChannelApp app, Guid employerId, IEnumerable <Guid> memberIds, MemberAccessReason reason, IDictionary <Guid, Guid?> exercisedCreditIds)
        {
            var accesses = new List <MemberAccess>();

            foreach (var memberId in memberIds)
            {
                var access = new MemberAccess
                {
                    Reason            = reason,
                    EmployerId        = employerId,
                    MemberId          = memberId,
                    ExercisedCreditId = exercisedCreditIds[memberId],
                    ChannelId         = app.ChannelId,
                    AppId             = app.Id,
                };
                access.Prepare();
                access.Validate();
                accesses.Add(access);
            }

            _repository.CreateMemberAccesses(accesses);
            return(accesses);
        }
        private MemberAccess CreateMemberAccess(ChannelApp app, Guid employerId, Guid memberId, MemberAccessReason reason, Guid?exercisedCreditId)
        {
            var access = new MemberAccess
            {
                Reason            = reason,
                EmployerId        = employerId,
                MemberId          = memberId,
                ExercisedCreditId = exercisedCreditId,
                ChannelId         = app.ChannelId,
                AppId             = app.Id,
            };

            access.Prepare();
            access.Validate();
            _repository.CreateMemberAccess(access);
            return(access);
        }
 IDictionary <Guid, int> IEmployerMemberAccessReportsQuery.GetEmployerAccesses(IEnumerable <Guid> employerIds, MemberAccessReason reason, DateTimeRange timeRange)
 {
     return(_repository.GetEmployerAccesses(employerIds, reason, timeRange));
 }
        private MemberAccess AccessMember(ChannelApp app, IEmployer employer, ProfessionalView view, MemberAccessReason reason)
        {
            // An anonymous employer means insufficient credits.

            if (employer == null)
            {
                throw new InsufficientCreditsException {
                          Available = 0, Required = 1
                }
            }
            ;

            // Make sure the details are visible.

            CheckVisibility(view, reason);

            // Check against limits.

            CheckAccessLimit(employer.Id, view.Id, reason);

            // Exercise the credit.

            var exercisedCreditId = _employerCreditsCommand.ExerciseContactCredit(employer, view);

            // Record the access.

            return(CreateMemberAccess(app, employer.Id, view.Id, reason, exercisedCreditId));
        }
 IDictionary <Guid, int> IEmployerMemberAccessReportsRepository.GetEmployerAccesses(IEnumerable <Guid> employerIds, MemberAccessReason reason, DateTimeRange timeRange)
 {
     using (var dc = CreateDataContext(true))
     {
         var contacts = GetAllMemberUnlockingsByEmployer(dc, new SplitList <Guid>(employerIds).ToString(), reason, timeRange).ToDictionary(c => c.Item1, c => c.Item2);
         return((from e in employerIds select new { EmployerId = e, Count = contacts.ContainsKey(e) ? contacts[e] : 0 }).ToDictionary(e => e.EmployerId, e => e.Count));
     }
 }
 MemberAccess IEmployerMemberViewsCommand.AccessMember(ChannelApp app, IEmployer employer, ProfessionalView view, MemberAccessReason reason)
 {
     return(AccessMember(app, employer, view, reason));
 }
 int IEmployerMemberAccessReportsQuery.GetEmployerAccesses(Guid employerId, MemberAccessReason reason, DateTimeRange timeRange)
 {
     return(_repository.GetEmployerAccesses(employerId, reason, timeRange));
 }
        private IList <MemberAccess> AccessBulkMembers(ChannelApp app, IEmployer employer, ProfessionalViews views, MemberAccessReason reason)
        {
            if (employer == null)
            {
                throw new InsufficientCreditsException {
                          Available = 0, Required = views.Count()
                }
            }
            ;

            // Make sure the details are visible.

            CheckVisibility(views, reason);

            // Check against limits.

            CheckAccessLimit(employer.Id, from v in views select v.Id, reason);

            // Exercise the credits.

            var exercisedCreditIds = _employerCreditsCommand.ExerciseContactCredits(employer, views);

            // Record the accesses.

            return(CreateMemberAccesses(app, employer.Id, from v in views select v.Id, reason, exercisedCreditIds));
        }