Exemplo n.º 1
0
        public async Task <IActionResult> UpdateCandidate([FromRoute] Guid organizationId, [FromRoute] Guid candidateId,
                                                          [FromBody] CandidateInput model)
        {
            var candidate =
                await _candidateService.UpdateCandidate(_projectManager, candidateId,
                                                        model);

            return(Ok(candidate));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> CreateExternalCandidate(
            [FromRoute] Guid organizationId,
            [FromRoute] Guid externalId,
            [FromBody] CandidateInput model)
        {
            var am = await _candidateService.CreateExternalCandidate(_recruiter, externalId, model);

            return(Ok(am));
        }
Exemplo n.º 3
0
        public Task <CandidateResult> CreateExternalCandidate(IOrganizationRecruiter re, Guid providerOrganizationId, CandidateInput model)
        {
            _logger.LogInformation(GetLogMessage("For Email: {email}; with code: {code}"), model.EmailAddress,
                                   model.ReferralCode);

            return(CreateCandidate(re, providerOrganizationId, model));
        }
Exemplo n.º 4
0
        private async Task <CandidateResult> CreateCandidate(IOrganizationRecruiter re, Guid providerOrganizationId, CandidateInput input)
        {
            _logger.LogInformation(GetLogMessage("RE: {0}"), re.OrganizationId);
            var retVal = new CandidateResult();

            var isExternal = providerOrganizationId != re.OrganizationId;

            _logger.LogDebug(GetLogMessage("External Lead: {0}"), isExternal);

            var recruiter = await _recruiterRepository.Queryable()
                            .Include(x => x.Recruiter)
                            .ThenInclude(x => x.Person)
                            .Where(x => x.RecruiterId == re.RecruiterId && x.OrganizationId == re.OrganizationId)
                            .FirstAsync();

            var recruiterBonus         = recruiter.RecruiterBonus;
            var recruitingAgencyBonus  = 0m;
            var recruitingAgencyStream = 0m;
            var recruiterStream        = recruiter.RecruiterStream;


            _logger.LogDebug(
                GetLogMessage(
                    $@"Recruiter Found: {recruiter.Recruiter.Person.DisplayName}"));

            if (isExternal)
            {
                var recruitingAgreement = await _recruitingAgreements.Queryable()
                                          .Where(x => x.ProviderOrganizationId == providerOrganizationId &&
                                                 x.RecruitingOrganizationId == re.OrganizationId)
                                          .FirstOrDefaultAsync();


                if (recruitingAgreement == null)
                {
                    retVal.ErrorMessage = "Recruiting agreement doesn't exist between recruiting and provider organization";
                    return(retVal);
                }

                if (recruitingAgreement.Status != AgreementStatus.Approved)
                {
                    retVal.ErrorMessage = "Recruiting agreement is not approved";
                    return(retVal);
                }

                _logger.LogTrace(
                    GetLogMessage(
                        $@"Recruiting Agreement found to be valid"));


                recruiterBonus         = recruitingAgreement.RecruiterBonus;
                recruitingAgencyBonus  = recruitingAgreement.RecruitingAgencyBonus;
                recruitingAgencyStream = recruitingAgreement.RecruitingAgencyStream;
                recruiterStream        = recruitingAgreement.RecruiterStream;
            }

            var candidate = new Candidate
            {
                Iso2                    = input.Iso2,
                ProvinceState           = input.ProvinceState,
                RecruiterStream         = recruiterStream,
                RecruiterBonus          = recruiterBonus,
                RecruitingAgencyStream  = recruitingAgencyStream,
                RecruitingAgencyBonus   = recruitingAgencyBonus,
                ProviderOrganizationId  = providerOrganizationId,
                RecruiterOrganizationId = re.OrganizationId,
                RecruiterId             = re.RecruiterId,
                UpdatedById             = _userInfo.UserId,
                CreatedById             = _userInfo.UserId,
                ObjectState             = ObjectState.Added,
                Status                  = CandidateStatus.New,
                StatusTransitions       = new List <CandidateStatusTransition>()
                {
                    new CandidateStatusTransition()
                    {
                        Status      = CandidateStatus.New,
                        ObjectState = ObjectState.Added
                    }
                }
            }.InjectFrom(input) as Candidate;

            var candidateResult = Repository.Insert(candidate, true);

            _logger.LogDebug(GetLogMessage("{0} records updated in database."), candidateResult);

            if (candidateResult > 0)
            {
                retVal.Succeeded   = true;
                retVal.CandidateId = candidate.Id;

                await Task.Run(() =>
                {
                    RaiseEvent(new CandidateCreatedEvent
                    {
                        CandidateId = candidate.Id
                    });
                });
            }

            return(retVal);
        }
        public async Task <CandidateResult> UpdateCandidate(IOrganizationProjectManager pm, Guid candidateId, CandidateInput model)
        {
            var entity = await Repository.Queryable().ForOrganizationProjectManager(pm)
                         .FirstOrDefaultAsync(n => n.Id == candidateId);

            if (entity == null)
            {
                return(null);
            }

            entity.InjectFrom(model);

            return(await UpdateCandidate(entity));
        }
        public async Task <CandidateResult> UpdateCandidate(IProviderAgencyOwner ao, Guid candidateId, CandidateInput model)
        {
            var entity = await Repository.Queryable().ForAgencyOwner(ao)
                         .FirstOrDefaultAsync(n => n.Id == candidateId);

            if (entity == null)
            {
                return(null);
            }

            entity.InjectFrom(model);

            return(await UpdateCandidate(entity));
        }
        public async Task <CandidateResult> UpdateCandidate(IOrganizationRecruiter re, Guid candidateId, CandidateInput model)
        {
            var entity = await Repository.Queryable()
                         .ForOrganizationRecruiter(re)
                         .GetById(candidateId).FirstOrDefaultAsync();

            if (entity == null)
            {
                return(null);
            }

            entity.InjectFrom(model);

            return(await UpdateCandidate(entity));
        }
 /// <summary>
 /// To add additional optional information, such as a government id, after the candidate has been created.
 /// </summary>
 /// <param name="candidateId"></param>
 /// <param name="input"></param>
 /// <returns></returns>
 public static Task <Candidate> UpdateCandidateAsync(string candidateId, CandidateInput input)
 {
     return(AccurateCrudOperations.UpdateAsync <CandidateInput, Candidate>("candidate/" + candidateId, input));
 }
 /// <summary>
 /// This is used create a new candidate to use in any number of background check orders and searches.
 /// The candidate can be created with a minimum set of information, and additional information can be added via API later,
 /// or in the INTERACTIVE workflow, the applicant may add the needed personal information directly through a secure web form.
 /// </summary>
 /// <param name="input"></param>
 /// <returns></returns>
 public static Task <Candidate> CreateCandidateAsync(CandidateInput input)
 {
     return(AccurateCrudOperations.CreateAsync <CandidateInput, Candidate>("candidate", input));
 }