예제 #1
0
        public void SetStateInProgress(Guid applicationId)
        {
            var application = _traineeshipApplicationReadRepository.Get(applicationId);

            application.SetStateInProgress();
            _traineeshipApplicationWriteRepository.Save(application);
            _serviceBus.PublishMessage(new TraineeshipApplicationUpdate(applicationId, ApplicationUpdateType.Update));
        }
예제 #2
0
        public void CreateApplication(SubmitTraineeshipApplicationRequest request)
        {
            _logger.Debug("Creating traineeship application Id: {0}", request.ApplicationId);

            var applicationDetail = _apprenticeshipApplicationReadRepository.Get(request.ApplicationId, true);

            try
            {
                var candidate = _candidateReadRepository.Get(applicationDetail.CandidateId, true);

                if (candidate.LegacyCandidateId == 0)
                {
                    _logger.Info(
                        "Candidate with Id: {0} has not been created in the legacy system. Message will be requeued",
                        applicationDetail.CandidateId);
                    Requeue(request);
                }
                else
                {
                    applicationDetail.LegacyApplicationId = _legacyApplicationProvider.CreateApplication(applicationDetail);
                    _traineeeshipApplicationWriteRepository.Save(applicationDetail);
                }
            }
            catch (CustomException ex)
            {
                HandleCustomException(request, ex);
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("Submit traineeship application with Id = {0} request async process failed.", request.ApplicationId), ex);
                Requeue(request);
            }
        }
예제 #3
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);
            }
        }
        public TraineeshipApplicationDetail SaveApplication(TraineeshipApplicationDetail traineeshipApplicationDetail)
        {
            traineeshipApplicationDetail.DateApplied = DateTime.Now;
            var savedApplication = _traineeshipApplicationWriteRepository.Save(traineeshipApplicationDetail);

            SyncToCandidatesApplicationTemplate(savedApplication);

            return(savedApplication);
        }
예제 #5
0
        public TraineeshipApplicationDetail SaveApplication(
            Guid candidateId, int vacancyId, TraineeshipApplicationDetail traineeshipApplication)
        {
            // Set date applied when saving a traineeship application. Unlike apprenticeship applications, there are no intermediate states,
            // Draft, Submitting etc.
            traineeshipApplication.DateApplied = DateTime.UtcNow;

            var savedApplication = _traineeshipApplicationWriteRepository.Save(traineeshipApplication);

            SyncToCandidatesApplicationTemplate(candidateId, savedApplication);

            return(savedApplication);
        }
예제 #6
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 void GetTraineeshipApplicationsReturnsCorrectResults()
        {
            //Arrange - Build Applications
            var applications = BuildApprenticeshipApplicationDetails();

            applications.ForEach(a => _traineeshipApplicationWriteRepository.Save(a));

            //Act - Get application vacancy statuses
            var summaries = _traineeshipApplicationReadRepository
                            .GetApplicationSummaries(TestVacancyId)
                            .ToList();

            //Assert - the correct number of applicaitons with the correct vacancy state
            summaries.Count(v => v.VacancyStatus == VacancyStatuses.Live).Should().Be(10);
            summaries.Count(v => v.VacancyStatus == VacancyStatuses.Unavailable).Should().Be(7);
            summaries.Count(v => v.VacancyStatus == VacancyStatuses.Expired).Should().Be(6);
        }
        public void Update(TraineeshipApplicationDetail traineeeshipApplication, ApplicationStatusSummary applicationStatusSummary)
        {
            var originalLegacyApplicationId = traineeeshipApplication.LegacyApplicationId;
            var originalStatus        = traineeeshipApplication.Status;
            var originalVacancyStatus = traineeeshipApplication.VacancyStatus;
            var originalClosingDate   = traineeeshipApplication.Vacancy.ClosingDate;

            //todo: 1.6: remove this? we won't ever receive these updates while integrating with the legacy system for traineeships
            // invoked because the status of the apprenticeshipApplication / vacancy *may* have changed
            if (traineeeshipApplication.UpdateTraineeshipApplicationDetail(applicationStatusSummary))
            {
                // note, this flow will be extended to include a call to outbound communication later (when we do notifications)
                // note, may subsequently consolidate status updates for a candidate (when we do notifications) but may be done in another component
                const string format =
                    "Updating traineeship application (id='{0}', vacancy id='{1}', candidate='{2})" +
                    " from legacy application id='{3}' to '{4}'," +
                    " application status='{5}' to '{6}'," +
                    " vacancy status='{7}' to '{8}'," +
                    " closing date='{9}' to '{10}'";

                _logger.Info(
                    format,
                    traineeeshipApplication.EntityId,                      // 0
                    traineeeshipApplication.Vacancy.Id,                    // 1
                    traineeeshipApplication.CandidateDetails.EmailAddress, // 2

                    originalLegacyApplicationId,                           // 3
                    applicationStatusSummary.LegacyApplicationId,          // 4

                    originalStatus,                                        // 5
                    applicationStatusSummary.ApplicationStatus,            // 6

                    originalVacancyStatus,                                 // 7
                    applicationStatusSummary.VacancyStatus,                // 8

                    originalClosingDate,                                   // 9
                    applicationStatusSummary.ClosingDate);                 // 10

                _traineeshipApplicationWriteRepository.Save(traineeeshipApplication);
            }
        }
예제 #9
0
        public void SubmitApplication(Guid applicationId)
        {
            var traineeshipApplicationDetail = _traineeshipApplicationReadRepository.Get(applicationId, true);

            try
            {
                traineeshipApplicationDetail.SetStateSubmitting();
                traineeshipApplicationDetail.SetStateSubmitted();

                _traineeshipApplicationWriteRepository.Save(traineeshipApplicationDetail);
                _serviceBus.PublishMessage(new TraineeshipApplicationUpdate(traineeshipApplicationDetail.EntityId, ApplicationUpdateType.Create));

                NotifyCandidate(traineeshipApplicationDetail);
            }
            catch (Exception ex)
            {
                _logger.Debug("SubmitTraineeshipApplicationRequest could not be queued for ApplicationId={0}", applicationId);

                throw new CustomException("SubmitTraineeshipApplicationRequest could not be queued", ex,
                                          MessagingErrorCodes.ApplicationQueuingError);
            }
        }