public async Task <IActionResult> AcceptCandidate([FromRoute] Guid organizationId, [FromRoute] Guid candidateId, [FromBody] CandidateAcceptInput model) { var co = await _candidateService.Promote(_projectManager, candidateId, model); return(Ok(co)); }
public async Task <CandidatePromotionResult> Promote( IOrganizationProjectManager pm, Guid candidateId, CandidateAcceptInput model) { _logger.LogInformation(GetLogMessage("PM: {0}; Promoting Candidate: {1}"), pm.OrganizationId, candidateId); var candidate = await Repository.Queryable().ForOrganizationProjectManager(pm) .Where(x => x.Id == candidateId).FirstAsync(); var isNotValid = CheckValidation(candidateId, candidate, out var retVal); if (isNotValid) { return(retVal); } if (candidate.Status != CandidateStatus.Qualified && candidate.Status != CandidateStatus.Promoted) { retVal.ErrorMessage = "Candidate can only be promoted in the qualified state"; return(retVal); } _logger.LogDebug(GetLogMessage("Candidate is able to be promoted")); var orgPerson = await _organizationPersonService.Create(new CreateOrganizationPersonInput() { Iso2 = candidate.Iso2, ProvinceState = candidate.ProvinceState, FirstName = candidate.FirstName, LastName = candidate.LastName, EmailAddress = candidate.EmailAddress, PhoneNumber = candidate.PhoneNumber, SendEmail = false, ContractorStream = model.Rate, RecruiterId = candidate.RecruiterId, AffiliateOrganizationId = candidate.RecruiterOrganizationId, IsContractor = true }, pm.OrganizationId, candidate.RecruiterOrganizationId, false); if (orgPerson.Succeeded) { _logger.LogDebug(GetLogMessage("New person added {0}"), orgPerson.PersonId); candidate.Status = CandidateStatus.Promoted; candidate.StatusTransitions.Add(new CandidateStatusTransition() { ObjectState = ObjectState.Added, Status = CandidateStatus.Promoted }); candidate.UpdatedById = _userInfo.UserId; candidate.ObjectState = ObjectState.Modified; candidate.Updated = DateTimeOffset.UtcNow; var result = Repository.Update(candidate, true); _logger.LogDebug(GetLogMessage("{0} results added"), result); if (result > 0) { retVal.Succeeded = true; retVal.CandidateId = candidateId; retVal.PersonId = orgPerson.PersonId; await Task.Run(() => { RaiseEvent(new CandidatePromotedEvent() { CandidateId = candidateId }); }); } } else { _logger.LogWarning(GetLogMessage("Unable to create org person")); } return(retVal); }