private bool ProcessTraineeshipApplication(ApplicationStatusSummary applicationStatusSummary)
        {
            var traineeshipApplicationDetail = _traineeshipApplicationReadRepository.Get(applicationStatusSummary.LegacyApplicationId);

            if (traineeshipApplicationDetail == null && applicationStatusSummary.LegacyCandidateId != 0)
            {
                // in some cases the application can't be found using the application IDs so use legacy candidate and vacancy IDs
                var candidate = _candidateReadRepository.Get(applicationStatusSummary.LegacyCandidateId, false);

                if (candidate == null)
                {
                    return(false);
                }

                traineeshipApplicationDetail = _traineeshipApplicationReadRepository.GetForCandidate(candidate.EntityId, applicationStatusSummary.LegacyVacancyId);
            }

            if (traineeshipApplicationDetail == null)
            {
                return(false);
            }

            _applicationStatusUpdateStrategy.Update(traineeshipApplicationDetail, applicationStatusSummary);

            return(true);
        }
Пример #2
0
        public void Update(Candidate candidate, IEnumerable <ApplicationStatusSummary> applicationStatuses)
        {
            // For the specified candidate, update the application repo for any of the status updates
            // passed in (if they're different).
            foreach (var applicationStatusSummary in applicationStatuses)
            {
                var legacyVacancyId = applicationStatusSummary.LegacyVacancyId;

                // Try apprenticeships first, the majority should be apprenticeships
                var apprenticeshipApplication = _apprenticeshipApplicationReadRepository.GetForCandidate(candidate.EntityId, legacyVacancyId);

                if (apprenticeshipApplication != null)
                {
                    if (apprenticeshipApplication.UpdateApprenticeshipApplicationDetail(applicationStatusSummary))
                    {
                        _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplication);
                        _applicationStatusChangedStrategy.Send(applicationStatusSummary);
                    }
                    return;
                }

                var traineeshipApplication = _traineeshipApplicationReadRepository.GetForCandidate(candidate.EntityId, legacyVacancyId);

                if (traineeshipApplication != null)
                {
                    if (traineeshipApplication.UpdateTraineeshipApplicationDetail(applicationStatusSummary))
                    {
                        _traineeshipApplicationWriteRepository.Save(traineeshipApplication);
                    }
                    return;
                }

                _logger.Warn("Unable to find apprenticeship or traineeship application with legacy ID \"{0}\".", applicationStatusSummary.LegacyApplicationId);
            }
        }
        protected override bool DoHandle(User user, Candidate candidate)
        {
            Guid entityId;

            if (user == null)
            {
                //If user is null, the candidate should be deleted as an orphaned record
                entityId = candidate.EntityId;
            }
            else
            {
                entityId = user.EntityId;

                //A null candidate record means the user is orphaned and so should be deleted
                if (candidate != null)
                {
                    if (user.Status != UserStatuses.PendingDeletion)
                    {
                        return(false);
                    }

                    if (!user.DateUpdated.HasValue)
                    {
                        return(false);
                    }

                    var housekeepingCyclesSinceDateUpdated = GetHousekeepingCyclesSince(user.DateUpdated.Value);

                    if (housekeepingCyclesSinceDateUpdated < Configuration.HardDeleteAccountAfterCycles)
                    {
                        return(false);
                    }
                }
            }

            var savedSearches = _savedSearchReadRepository.GetForCandidate(entityId);
            var apprenticeshipApplications = _apprenticeshipApplicationReadRepository.GetForCandidate(entityId);
            var traineeshipApplications    = _traineeshipApplicationReadRepository.GetForCandidate(entityId);

            Audit(entityId, user, candidate, savedSearches, apprenticeshipApplications, traineeshipApplications);

            //These methods aren't transactional however the code can cope with missing entities and so will self heal over time in the unlikely event of partial failure

            DeleteApprenticeshipApplications(apprenticeshipApplications);

            DeleteTraineeshipApplications(traineeshipApplications);

            DeleteSavedSearches(savedSearches);

            DeleteCandidate(entityId);

            DeleteAuthentication(entityId);

            DeleteUser(entityId);

            _serviceBus.PublishMessage(new CandidateUserUpdate(entityId, CandidateUserUpdateType.Delete));

            return(true);
        }
        public TraineeshipApplicationDetail GetTraineeshipApplication(Guid candidateId, int vacancyId)
        {
            Condition.Requires(candidateId);

            _logger.Debug(
                "Calling CandidateService to get the apprenticeship application of the user with Id={0} to the vacancy with Id={1}.",
                candidateId, vacancyId);

            return(_traineeshipApplicationReadRepository.GetForCandidate(candidateId, vacancyId));
        }
Пример #5
0
        public void Update(Guid candidateId, int vacancyId, VacancyDetail vacancyDetail)
        {
            // Try apprenticeships first, the majority should be apprenticeships.
            // Note that it is possible for a candidate to have no application for this vacancy.
            var apprenticeshipApplication = _apprenticeshipApplicationReadRepository.GetForCandidate(candidateId, vacancyId);
            var updated = false;

            if (apprenticeshipApplication != null)
            {
                if (apprenticeshipApplication.VacancyStatus != vacancyDetail.VacancyStatus)
                {
                    apprenticeshipApplication.VacancyStatus = vacancyDetail.VacancyStatus;
                    updated = true;
                }

                if (apprenticeshipApplication.Vacancy.ClosingDate != vacancyDetail.ClosingDate)
                {
                    apprenticeshipApplication.Vacancy.ClosingDate = vacancyDetail.ClosingDate;
                    updated = true;
                }

                if (updated)
                {
                    _apprenticeshipApplicationWriteRepository.Save(apprenticeshipApplication);
                }
            }
            else
            {
                var traineeshipApplication = _traineeshipApplicationReadRepository.GetForCandidate(candidateId, vacancyId);

                if (traineeshipApplication != null)
                {
                    if (traineeshipApplication.VacancyStatus != vacancyDetail.VacancyStatus)
                    {
                        traineeshipApplication.VacancyStatus = vacancyDetail.VacancyStatus;
                        updated = true;
                    }

                    if (traineeshipApplication.Vacancy.ClosingDate != vacancyDetail.ClosingDate)
                    {
                        traineeshipApplication.Vacancy.ClosingDate = vacancyDetail.ClosingDate;
                        updated = true;
                    }

                    if (updated)
                    {
                        _traineeshipApplicationWriteRepository.Save(traineeshipApplication);
                    }
                }
            }
        }
 public IList <TraineeshipApplicationSummary> GetApplications(Guid candidateId)
 {
     return(_traineeshipApplicationReadRepository.GetForCandidate(candidateId));
 }