private OrganizationResult UpgradeToRecruitingOrganization(RecruitingOrganizationUpgradeInput input,
                                                                   Organization organization, OrganizationPerson person, bool saveChanges = true)
        {
            _logger.LogInformation(GetLogMessage("{0}"), organization.Name);

            if (person.Recruiter == null)
            {
                _logger.LogDebug(GetLogMessage("Person is not a recruiter"));

                person.Recruiter = new OrganizationRecruiter()
                {
                    RecruiterId     = person.PersonId,
                    OrganizationId  = person.OrganizationId,
                    RecruiterStream = input.RecruiterStream,
                    ObjectState     = ObjectState.Added,
                };
                person.ObjectState = ObjectState.Modified;

                var recordsUpdated = _organizationPersonRepo.InsertOrUpdateGraph(person, true);

                _logger.LogDebug(GetLogMessage("OrganizationPeople Records Updated: {0}"), recordsUpdated);
            }
            else
            {
                _logger.LogDebug(GetLogMessage("Person is already a recruiter"));
            }


            organization.RecruitingOrganization = new RecruitingOrganization()
            {
                RecruiterStream        = input.RecruiterStream,
                RecruitingAgencyStream = input.RecruitingAgencyStream,
                DefaultRecruiterId     = person.PersonId,
                Updated     = DateTimeOffset.UtcNow,
                Created     = DateTimeOffset.UtcNow,
                ObjectState = ObjectState.Added,
            }.InjectFrom(input) as RecruitingOrganization;
            organization.ObjectState      = ObjectState.Modified;
            organization.OrganizationType = organization.OrganizationType.Add(OrganizationType.Recruiting);

            var result = Repository.InsertOrUpdateGraph(organization, saveChanges);

            _logger.LogDebug(GetLogMessage("Pushing subscription to stripe..."));

            var result2 = _subscriptionService.PushSubscription(organization.Id, saveChanges).Result;

            _logger.LogDebug(GetLogMessage("{OrganizationRecordsChanged}, {StripeRecordsChanged}"), result, result2);


            return(new OrganizationResult()
            {
                Succeeded = result > 0,
                OrganizationId = organization.Id
            });
        }
예제 #2
0
        public async Task <IActionResult> Upgrade([FromRoute] Guid organizationId,
                                                  [FromBody] RecruitingOrganizationUpgradeInput input)
        {
            if (_agencyOwner.IsRecruitingOwner)
            {
                throw new ApplicationException("Agency is already a recruiting agency");
            }

            var result = await _organizationService
                         .UpgradeOrganization(_agencyOwner, input);

            if (result.Succeeded)
            {
                return(await Get(organizationId));
            }

            return(Ok(result));
        }
        public async Task <OrganizationResult> UpgradeOrganization(IAgencyOwner agencyOwner, RecruitingOrganizationUpgradeInput input)
        {
            _logger.LogInformation(GetLogMessage("{@input}"), input);

            var retVal = new OrganizationResult()
            {
                OrganizationId = agencyOwner.OrganizationId
            };

            var organization = await Repository.Queryable()
                               .Include(x => x.ProviderOrganization)
                               .Include(x => x.MarketingOrganization)
                               .Include(x => x.RecruitingOrganization)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Marketer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Customer)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Contractor)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.ProjectManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.AccountManager)
                               .Include(x => x.OrganizationPeople)
                               .ThenInclude(x => x.Recruiter)
                               .Where(x => x.Id == agencyOwner.OrganizationId && x.RecruitingOrganization == null)
                               .FirstOrDefaultAsync();


            if (organization == null)
            {
                retVal.ErrorMessage = "unable to upgrade organization, possibly because it's already upgraded";
                return(retVal);
            }

            var orgPerson = organization
                            .OrganizationPeople
                            .First(x => x.PersonId == agencyOwner.CustomerId);

            retVal = UpgradeToRecruitingOrganization(input, organization, orgPerson, true);

            return(retVal);
        }