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);
            }
        }
Exemplo n.º 2
0
        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"));
        }
Exemplo n.º 3
0
        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()));
        }
Exemplo n.º 4
0
        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)
            {
            }
        }