Esempio n. 1
0
        public void SendDailyDigests(Guid batchId)
        {
            //todo: 1.7: this should accommodate more than just expiring drafts...
            var candidatesDailyDigest = _expiringDraftRepository.GetCandidatesDailyDigest();

            foreach (var candidateDailyDigest in candidatesDailyDigest)
            {
                var candidate = _candidateReadRepository.Get(candidateDailyDigest.Key);

                if (candidate.CommunicationPreferences.AllowEmail || candidate.CommunicationPreferences.AllowMobile)
                {
                    var communicationMessage = CommunicationRequestFactory.GetCommunicationMessage(candidate, candidateDailyDigest.Value);
                    _bus.PublishMessage(communicationMessage);

                    // Update candidates expiring drafts to sent
                    candidateDailyDigest.Value.ToList().ForEach(dd =>
                    {
                        dd.BatchId = batchId;
                        _expiringDraftRepository.Save(dd);
                    });
                }
                else
                {
                    // Delete candidates expiring drafts
                    candidateDailyDigest.Value.ToList().ForEach(_expiringDraftRepository.Delete);
                }
            }
        }
        public void TestMultiSaveGetAndDeleteCandidatesDailyDigest()
        {
            var       initialDailiDigestEmailscount = _expiringDraftRepository.GetCandidatesDailyDigest().Count;
            const int expiringEmailsToAdd           = 3;
            //Arrange
            var batchId        = Guid.NewGuid();
            var sentDateTime   = DateTime.UtcNow;
            var expiringDrafts =
                Builder <ExpiringApprenticeshipApplicationDraft> .CreateListOfSize(expiringEmailsToAdd)
                .All()
                .With(ed => ed.VacancyId    = TestVacancyId)
                .With(ed => ed.BatchId      = batchId)
                .With(ed => ed.SentDateTime = sentDateTime)
                .Build().ToList();

            //Act
            expiringDrafts.ForEach(ed =>
            {
                _expiringDraftRepository.Save(ed);
                ed.BatchId      = null;
                ed.SentDateTime = null;
                _expiringDraftRepository.Save(ed);
            });


            //Assert
            var candidatesDailyDigest = _expiringDraftRepository.GetCandidatesDailyDigest();

            candidatesDailyDigest.Count().Should().Be(expiringEmailsToAdd + initialDailiDigestEmailscount);
            var returnedExpiringDrafts = candidatesDailyDigest.SelectMany(cand => cand.Value.ToArray());

            returnedExpiringDrafts.Count(ed => ed.VacancyId == TestVacancyId && ed.BatchId == null && ed.SentDateTime == null)
            .Should()
            .Be(expiringEmailsToAdd);

            //Act
            expiringDrafts.ForEach(_expiringDraftRepository.Delete);

            //Assert
            candidatesDailyDigest = _expiringDraftRepository.GetCandidatesDailyDigest();
            candidatesDailyDigest.Count().Should().Be(initialDailiDigestEmailscount);
        }
Esempio n. 3
0
        public void SendDailyDigests(Guid batchId)
        {
            var candidatesExpiringDrafts          = _expiringDraftRepository.GetCandidatesDailyDigest();
            var candidatesApplicationStatusAlerts = _applicationStatusAlertRepository.GetCandidatesDailyDigest();

            var candidateIds = candidatesExpiringDrafts.Keys
                               .Union(candidatesApplicationStatusAlerts.Keys);

            foreach (var candidateId in candidateIds)
            {
                var candidate = _candidateReadRepository.Get(candidateId);
                var user      = _userReadRepository.Get(candidateId);

                if (candidate == null || user == null)
                {
                    _logService.Warn("Could not find a valid user or candidate for id: {0}. User is null: {1}, Candidate is null: {2}", candidateId, user == null, candidate == null);
                    return;
                }

                List <ExpiringApprenticeshipApplicationDraft> candidateExpiringDraftsDailyDigest;
                var candidateHasExpiringDrafts = candidatesExpiringDrafts.TryGetValue(candidateId, out candidateExpiringDraftsDailyDigest);

                List <ApplicationStatusAlert> candidateApplicationStatusAlertsDailyDigest;
                var candidateHasApplicationStatusAlerts = candidatesApplicationStatusAlerts.TryGetValue(candidateId, out candidateApplicationStatusAlertsDailyDigest);

                if (candidate.AllowsCommunication() && user.IsActive())
                {
                    var communicationRequest = CommunicationRequestFactory.GetDailyDigestCommunicationRequest(candidate, candidateExpiringDraftsDailyDigest, candidateApplicationStatusAlertsDailyDigest);

                    _serviceBus.PublishMessage(communicationRequest);

                    if (candidateHasExpiringDrafts)
                    {
                        // Update candidates expiring drafts to sent
                        candidateExpiringDraftsDailyDigest.ToList().ForEach(dd =>
                        {
                            dd.BatchId = batchId;
                            _expiringDraftRepository.Save(dd);
                        });
                    }

                    if (candidateHasApplicationStatusAlerts)
                    {
                        // Update candidates application status alerts to sent
                        candidateApplicationStatusAlertsDailyDigest.ToList().ForEach(dd =>
                        {
                            dd.BatchId = batchId;
                            _applicationStatusAlertRepository.Save(dd);
                        });
                    }
                }
                else
                {
                    if (candidateHasExpiringDrafts)
                    {
                        // Soft delete candidates expiring drafts by setting batch id to empty
                        candidateExpiringDraftsDailyDigest.ToList().ForEach(dd =>
                        {
                            dd.BatchId = Guid.Empty;
                            _expiringDraftRepository.Save(dd);
                        });
                    }

                    if (candidateHasApplicationStatusAlerts)
                    {
                        // Soft delete candidates saved application status alerts by setting batch id to empty
                        candidateApplicationStatusAlertsDailyDigest.ToList().ForEach(dd =>
                        {
                            dd.BatchId = Guid.Empty;
                            _applicationStatusAlertRepository.Save(dd);
                        });
                    }
                }
            }
        }