public void SetStateInProgress(Guid applicationId) { var application = _traineeshipApplicationReadRepository.Get(applicationId); application.SetStateInProgress(); _traineeshipApplicationWriteRepository.Save(application); _serviceBus.PublishMessage(new TraineeshipApplicationUpdate(applicationId, ApplicationUpdateType.Update)); }
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); } }
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); }
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); }
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); } }
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); } }