public async Task <IActionResult> Upgrade([FromRoute] Guid organizationId, [FromBody] ProviderOrganizationUpgradeInput input) { _logger.LogInformation(GetLogMessage("Provider")); if (_agencyOwner.IsProviderOwner) { throw new ApplicationException("Agency is already a provider 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, ProviderOrganizationUpgradeInput 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.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.ProviderOrganization == 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); _logger.LogDebug(GetLogMessage("Person Found {0}"), orgPerson.PersonId); retVal = UpgradeToProviderOrganization(input, organization, orgPerson, true); return(retVal); }
private OrganizationResult UpgradeToProviderOrganization(ProviderOrganizationUpgradeInput input, Organization organization, OrganizationPerson person, bool saveChanges = true) { _logger.LogInformation(GetLogMessage("{Organization}, Saving Changes: {saveChanges}"), organization.Name, saveChanges); var retVal = new OrganizationResult() { OrganizationId = organization.Id }; person.AccountManager = new OrganizationAccountManager() { AccountManagerId = person.PersonId, OrganizationId = person.OrganizationId, AccountManagerStream = input.AccountManagerStream, ObjectState = ObjectState.Added }; person.ProjectManager = new OrganizationProjectManager() { OrganizationId = person.OrganizationId, ProjectManagerId = person.PersonId, ProjectManagerStream = input.ProjectManagerStream, ObjectState = ObjectState.Added }; person.Contractor = new OrganizationContractor() { ContractorId = person.PersonId, OrganizationId = person.OrganizationId, ContractorStream = input.ContractorStream, ObjectState = ObjectState.Added }; person.ObjectState = ObjectState.Modified; var records = _organizationPersonRepo.InsertOrUpdateGraph(person, true); _logger.LogDebug(GetLogMessage("{0} Records updated"), records); if (records == 0) { retVal.Succeeded = false; retVal.ErrorMessage = "Unable to add user to provider roles"; return(retVal); } organization.ProviderOrganization = new ProviderOrganization() { ContractorStream = input.ContractorStream, ProjectManagerStream = input.ProjectManagerStream, AccountManagerStream = input.AccountManagerStream, AgencyStream = input.AgencyStream, Discoverable = input.Discoverable, ObjectState = ObjectState.Added, SystemStream = SystemStream, DefaultAccountManagerId = person.PersonId, DefaultContractorId = person.PersonId, DefaultProjectManagerId = person.PersonId }.InjectFrom(input) as ProviderOrganization; organization.ObjectState = ObjectState.Modified; organization.OrganizationType = organization.OrganizationType.Add(OrganizationType.Provider); _logger.LogDebug(GetLogMessage("new org type {0}"), organization.OrganizationType); var orgRecords = Repository.InsertOrUpdateGraph(organization, saveChanges); _logger.LogDebug(GetLogMessage("{0} Organization Records updated"), orgRecords); if (orgRecords == 0) { retVal.ErrorMessage = "Unable to update organization"; return(retVal); } var stripeResult = _subscriptionService.PushSubscription(organization.Id, saveChanges).Result; _logger.LogDebug(GetLogMessage("{StripeChanges} stripe records updated"), stripeResult); if (stripeResult > 0) { retVal.Succeeded = true; } return(retVal); }