private OrganizationResult UpgradeToMarketingOrganization(MarketingOrganizationUpgradeInput input, Organization organization, OrganizationPerson person, bool saveChanges = true) { _logger.LogInformation(GetLogMessage("{0}, {1}"), organization.Name, organization.OrganizationType.GetDescription()); if (person.Marketer == null) { _logger.LogDebug(GetLogMessage("No Marketer Found")); person.Marketer = new OrganizationMarketer() { MarketerId = person.PersonId, OrganizationId = person.OrganizationId, MarketerStream = input.MarketerStream, MarketerBonus = input.MarketerBonus, 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 marketer")); } organization.MarketingOrganization = new MarketingOrganization() { MarketerStream = input.MarketerStream, MarketingAgencyBonus = input.MarketingAgencyBonus, MarketerBonus = input.MarketerBonus, MarketingAgencyStream = input.MarketingAgencyStream, DefaultMarketerId = person.PersonId, ObjectState = ObjectState.Added, ServiceFeePerLead = 1 }.InjectFrom(input) as MarketingOrganization; organization.ObjectState = ObjectState.Modified; organization.OrganizationType = organization.OrganizationType.Add(OrganizationType.Marketing); _logger.LogDebug(GetLogMessage("new org type {0}"), organization.OrganizationType); var organizationResult = Repository.InsertOrUpdateGraph(organization, saveChanges); _logger.LogDebug(GetLogMessage("Organization Records Updated: {0}"), organizationResult); var subscriptionResult = _subscriptionService.PushSubscription(organization.Id, true).Result; _logger.LogDebug(GetLogMessage("Subscription Records Updated: {0}"), subscriptionResult); return(new OrganizationResult() { Succeeded = organizationResult > 0, OrganizationId = organization.Id }); }
public async Task <IActionResult> Upgrade([FromRoute] Guid organizationId, [FromBody] MarketingOrganizationUpgradeInput input) { if (_agencyOwner.IsMarketingOwner) { throw new ApplicationException("Agency is already a marketing 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, MarketingOrganizationUpgradeInput input) { _logger.LogInformation(GetLogMessage("{input}"), input); var retVal = new OrganizationResult() { OrganizationId = agencyOwner.OrganizationId }; var organization = await Repository.Queryable() .Include(x => x.MarketingOrganization) .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.MarketingOrganization == 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 = UpgradeToMarketingOrganization(input, organization, orgPerson, true); return(retVal); }