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 }); }
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); }