示例#1
0
        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));
        }
示例#2
0
        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);
        }