void IEmployerMemberContactsCommand.ContactMembers(ChannelApp app, IEmployer employer, ProfessionalViews views, ContactMemberMessage messageTemplate) { var cleaner = new MemberMessageCleaner(); var cleanedBody = cleaner.CleanBody(messageTemplate.Body); var cleanedSubject = cleaner.CleanSubject(messageTemplate.Subject); // Try to access all the members. var accesses = _employerMemberViewsCommand.AccessMembers(app, employer, views, MemberAccessReason.MessageSent); // Get the member and the representative if there is one. var representativeIds = _memberContactsQuery.GetRepresentativeContacts(from m in views select m.Id); // Iterate through them all exercising credits when needed. var handlers = MessageCreated; foreach (var view in views) { var viewId = view.Id; var representativeId = representativeIds[view.Id]; var access = (from a in accesses where a.MemberId == viewId select a).SingleOrDefault(); ContactMember(messageTemplate, employer, view, cleanedSubject, cleanedBody, representativeId, access, handlers); } }
public ActionResult Download(ResumeMimeType?mimeType, Guid[] candidateIds) { try { // Get the employer. var employer = CurrentEmployer; // Get the views to unlock the members. var professionalViews = _employerMemberViewsQuery.GetProfessionalViews(employer, candidateIds); _employerMemberViewsCommand.AccessMembers(ActivityContext.Channel.App, employer, professionalViews, MemberAccessReason.ResumeDownloaded); // Unlocking will change what the employer can see so get them again. var views = _employerMemberViewsQuery.GetEmployerMemberViews(employer, candidateIds); mimeType = GetMimeType(mimeType, candidateIds); switch (mimeType.Value) { case ResumeMimeType.Doc: return(DocFile(_employerResumeFilesQuery.GetResumeFile(views[candidateIds[0]]))); default: return(ZipFile(_employerResumeFilesQuery.GetResumeFile(views))); } } catch (UserException ex) { ModelState.AddModelError(ex, new StandardErrorHandler()); } return(View("Error")); }
public ActionResult PhoneNumbers(Guid[] candidateIds) { try { var employer = CurrentEmployer; var views = _employerMemberViewsQuery.GetProfessionalViews(employer, candidateIds); _employerMemberViewsCommand.AccessMembers(ActivityContext.Channel.App, employer, views, MemberAccessReason.PhoneNumberViewed); return(Json(new JsonResponseModel())); } catch (UserException ex) { ModelState.AddModelError(ex, new StandardErrorHandler()); } return(Json(new JsonResponseModel())); }
public void TestBulkDailyLimit() { var employer = CreateEmployer(); // Access up to the bulk daily limit doing 2 at a time. for (var index = 0; index < BulkDailyLimit / 2; ++index) { var member1 = CreateMember(2 * index); var member2 = CreateMember(2 * index + 1); // Check the counts. var counts = _repository.GetMemberAccessCounts(employer.Id, new[] { member1.Id, member2.Id }, new[] { GetAccessReason() }); Assert.AreEqual(2 * index, counts.Item1); Assert.AreEqual(2 * index, counts.Item2); _employerMemberViewsCommand.AccessMembers(_app, employer, _employerMemberViewsQuery.GetProfessionalViews(employer, new[] { member1, member2 }), GetAccessReason()); } // Go two more. try { var member1 = CreateMember(BulkDailyLimit); var member2 = CreateMember(BulkDailyLimit + 1); var counts = _repository.GetMemberAccessCounts(employer.Id, new[] { member1.Id, member2.Id }, new[] { GetAccessReason() }); Assert.AreEqual(BulkDailyLimit, counts.Item1); Assert.AreEqual(BulkDailyLimit, counts.Item2); _employerMemberViewsCommand.AccessMembers(_app, employer, _employerMemberViewsQuery.GetProfessionalViews(employer, new[] { member1, member2 }), GetAccessReason()); Assert.Fail(); } catch (TooManyAccessesException) { } }