Ejemplo n.º 1
0
        public async Task <IActionResult> QualifyLead([FromRoute] Guid organizationId, [FromRoute] Guid leadId,
                                                      [FromBody] LeadQualifyInput input)
        {
            var ao = _agencyOwner.Value;
            var r  = await _leadService.QualifyLead(ao, leadId, input);

            return(Ok(r));
        }
Ejemplo n.º 2
0
        public async Task <LeadResult> QualifyLead(IProviderAgencyOwner ao, Guid leadId, LeadQualifyInput input)
        {
            _logger.LogInformation(GetLogMessage($@"LeadId: {leadId}"));

            var retVal = new LeadResult()
            {
                LeadId = leadId
            };

            var entity = await Repository
                         .Queryable()
                         .ForAgencyOwner(ao)
                         .Where(x => x.Id == leadId)
                         .FirstAsync();

            if (entity.Status != LeadStatus.Qualified)
            {
                entity.InjectFrom(input);
                entity.AccountManagerId             = input.AccountManagerId;
                entity.AccountManagerOrganizationId = ao.OrganizationId;
                entity.Status      = LeadStatus.Qualified;
                entity.UpdatedById = _userInfo.Value.UserId;
                entity.Updated     = DateTimeOffset.UtcNow;
                entity.ObjectState = ObjectState.Modified;

                entity.StatusTransitions.Add(new LeadStatusTransition()
                {
                    Status      = LeadStatus.Qualified,
                    ObjectState = ObjectState.Added
                });

                var leadResult = Repository.Update(entity, true);

                _logger.LogDebug(GetLogMessage("{0} records added"), leadResult);

                if (leadResult > 0)
                {
                    var individualBonusResult = await _individualBonusIntents.Create(new CreateBonusIntentOptions()
                    {
                        LeadId = leadId
                    });

                    var organizationBonusResult = await _organizationBonusIntents.Create(new CreateBonusIntentOptions()
                    {
                        LeadId = leadId
                    });

                    if (individualBonusResult.Succeeded && organizationBonusResult.Succeeded)
                    {
                        retVal.Succeeded = true;
                        await Task.Run(() =>
                        {
                            RaiseEvent(new LeadQualifiedEvent
                            {
                                LeadId = leadId
                            });
                        });
                    }
                }
            }
            else
            {
                _logger.LogDebug(GetLogMessage("Lead is already qualified"));
            }

            return(retVal);
        }