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
            });
        }
Ejemplo n.º 2
0
        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);
        }