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; } }
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)); }