public async Task <IActionResult> QualifyCandidate( [FromRoute] Guid organizationId, [FromRoute] Guid candidateId, [FromBody] CandidateQualifyInput input ) { var candidate = await _candidateService.QualifyCandidate(_agencyOwner, candidateId, input); return(Ok(candidate)); }
public async Task <CandidateResult> QualifyCandidate(IProviderAgencyOwner agencyOwner, Guid candidateId, CandidateQualifyInput input) { _logger.LogInformation(GetLogMessage("AO: {0}, CandidateId: {1}"), agencyOwner.OrganizationId, candidateId); var retVal = new CandidateResult() { CandidateId = candidateId }; var candidate = await Repository .Queryable() .ForAgencyOwner(agencyOwner) .FindById(candidateId) .FirstAsync(); if (candidate.Status != CandidateStatus.Qualified) { candidate.InjectFrom(input); candidate.ProjectManagerId = input.ProjectManagerId; candidate.ProjectManagerOrganizationId = agencyOwner.OrganizationId; candidate.ObjectState = ObjectState.Modified; candidate.UpdatedById = _userInfo.UserId; candidate.Updated = DateTimeOffset.UtcNow; candidate.Status = CandidateStatus.Qualified; candidate.StatusTransitions.Add(new CandidateStatusTransition() { ObjectState = ObjectState.Added, Status = CandidateStatus.Qualified }); var records = Repository.Update(candidate, true); _logger.LogDebug(GetLogMessage("{0} results added"), records); if (records > 0) { var individualBonusResult = await _individualBonusIntents.Create(new CreateBonusIntentOptions() { CandidateId = candidateId }); var organizationBonusResult = await _organizationBonusIntents.Create(new CreateBonusIntentOptions() { CandidateId = candidateId }); if (individualBonusResult.Succeeded && organizationBonusResult.Succeeded) { retVal.Succeeded = true; await Task.Run(() => { RaiseEvent(new CandidateQualifiedEvent { CandidateId = candidateId }); }); } retVal.Succeeded = true; await Task.Run(() => { RaiseEvent(new CandidateQualifiedEvent { CandidateId = candidateId }); }); } } else { _logger.LogDebug(GetLogMessage("Candidate is already qualified")); } return(retVal); }