Пример #1
0
        public async Task <IActionResult> UpdateLead([FromRoute] Guid organizationId, [FromRoute] Guid leadId,
                                                     [FromBody] LeadInput model)
        {
            var lead = await _leadService.UpdateLead(_accountManager, leadId, model);

            return(Ok(lead));
        }
Пример #2
0
        public Status createLead([FromBody] LeadInput input)
        {
            //string crmURL = VLCC.CustomerOrderData.WEBAPI.Properties.Settings.Default.CRMConnectionString;
            //CrmConnection connections = CrmConnection.Parse(crmURL);
            //OrganizationService orgService = new OrganizationService(connections);
            string UserName = VLCC.CustomerOrderData.WEBAPI.Properties.Settings.Default.UserName;
            string Password = VLCC.CustomerOrderData.WEBAPI.Properties.Settings.Default.Password;
            string service  = VLCC.CustomerOrderData.WEBAPI.Properties.Settings.Default.Service;
            IOrganizationService orgService = ConnectToMSCRM(UserName, Password, service);
            Status        status            = new Status();
            ClientEnquiry clientEnquiry     = new ClientEnquiry();

            if (!string.IsNullOrEmpty(input.PhoneNo))
            {
                if (Regex.IsMatch(input.PhoneNo, @"\d{10}$"))
                {
                    status = clientEnquiry.createEnquiry(input, orgService);
                }
                else
                {
                    status.code    = "201";
                    status.message = "Mobile number is invalid";
                }
            }
            else
            {
                status.code    = "201";
                status.message = "Mobile Number is mandatory";
            }
            return(status);
        }
Пример #3
0
        public async Task <LeadResult> UpdateLead(Guid leadId, LeadInput model)
        {
            _logger.LogInformation(GetLogMessage("Updating Lead: {0}; Input: {@input}"), leadId, model);
            var retVal = new LeadResult()
            {
                LeadId = leadId
            };

            var entity = await Repository.FirstOrDefaultAsync(n => n.Id == leadId);

            entity.InjectFrom <NullableInjection>(model);
            entity.UpdatedById = _userInfo.Value.UserId;
            entity.Updated     = DateTimeOffset.UtcNow;
            entity.ObjectState = ObjectState.Modified;

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

            _logger.LogDebug(GetLogMessage("{0} records updated in database"), leadResult);

            if (leadResult > 0)
            {
                retVal.Succeeded = true;
                await Task.Run(() =>
                {
                    RaiseEvent(new LeadUpdatedEvent
                    {
                        LeadId = retVal.LeadId.Value
                    });
                });
            }


            return(retVal);
        }
Пример #4
0
        public async Task <IActionResult> CreateLead(
            [FromRoute] Guid organizationId,
            [FromBody] LeadInput model)
        {
            var result = await _leadService.CreateInternalLead(_marketer, model);

            return(Ok(result));
        }
Пример #5
0
        public Task <LeadResult> CreateInternalLead(
            IOrganizationMarketer ma,
            LeadInput model)
        {
            _logger.LogInformation(GetLogMessage("MA: {0}"), ma.OrganizationId);

            return(CreateLead(ma, ma.OrganizationId, model));
        }
Пример #6
0
        public async Task <IActionResult> UpdateLead([FromRoute] Guid organizationId, [FromRoute] Guid leadId,
                                                     [FromBody] LeadInput model)
        {
            var ao   = _agencyOwner.Value;
            var lead = await _leadService.UpdateLead(ao, leadId, model);

            return(Ok(lead));
        }
Пример #7
0
        // this call is unique in that it doesn't accept a principal and still returns a concrete output type
        public async Task <LeadResult> CreateInternalLead(Guid organizationId, LeadInput model)
        {
            _logger.LogInformation(
                GetLogMessage("Org: {0}"), organizationId);

            var organizationMarketer =
                await _marketerService.GetMarketerOrDefault <OrganizationMarketerOutput>(organizationId, null,
                                                                                         model.ReferralCode);

            return(await CreateInternalLead(organizationMarketer, model));
        }
Пример #8
0
        public Task <LeadResult> UpdateLead(IOrganizationMarketer ma, Guid leadId, LeadInput model)
        {
            _logger.LogInformation(GetLogMessage("MA: {0}; updating lead: {1}"), ma.OrganizationId, leadId);

            return(UpdateLead(leadId, model));
        }
Пример #9
0
 public Task <LeadResult> UpdateLead(IOrganizationAccountManager am, Guid leadId, LeadInput model)
 {
     _logger.LogInformation(GetLogMessage("AM: {0}; updating lead: {1}"), am.OrganizationId, leadId);
     return(UpdateLead(leadId, model));
 }
Пример #10
0
        public Task <LeadResult> UpdateLead(IProviderAgencyOwner agencyOwner, Guid leadId, LeadInput model)
        {
            _logger.LogInformation(GetLogMessage("PAO: {0}; updating lead: {1}"), agencyOwner.OrganizationId, leadId);

            return(UpdateLead(leadId, model));
        }
Пример #11
0
        private async Task <LeadResult> CreateLead(IOrganizationMarketer ma, Guid providerOrganizationId, LeadInput input)
        {
            _logger.LogInformation(GetLogMessage("MA: {0}"), ma.OrganizationId);

            var retVal = new LeadResult();

            if (await CountLeadsPerProviderByEmail(providerOrganizationId, input.EmailAddress) > 0)
            {
                retVal.ErrorMessage = "Email has already been used as a lead for this organization";
                retVal.Succeeded    = false;

                return(retVal);
            }

            _logger.LogDebug(GetLogMessage("Email hasn't been used by this organization"));

            var isExternal = providerOrganizationId != ma.OrganizationId;

            _logger.LogDebug(GetLogMessage("External Lead: {0}"), isExternal);

            var marketer = await _marketerService.Repository.Queryable()
                           .Include(x => x.Marketer)
                           .ThenInclude(x => x.Person)
                           .Where(x => x.MarketerId == ma.MarketerId && x.OrganizationId == ma.OrganizationId)
                           .FirstAsync();

            var marketerBonus        = marketer.MarketerBonus;
            var marketerAgencyBonus  = 0m;
            var marketerAgencyStream = 0m;
            var marketerStream       = marketer.MarketerStream;


            _logger.LogTrace(
                GetLogMessage(
                    $@"Marketer Found: {marketer.MarketerId}"));

            if (isExternal)
            {
                var marketingAgreement = await _marketingAgreements.Queryable()
                                         .Where(x => x.ProviderOrganizationId == providerOrganizationId &&
                                                x.MarketingOrganizationId == ma.OrganizationId)
                                         .FirstOrDefaultAsync();


                if (marketingAgreement == null)
                {
                    retVal.ErrorMessage =
                        "Marketing agreement doesn't exist between marketing and provider organization";
                    return(retVal);
                }


                if (marketingAgreement.Status != AgreementStatus.Approved)
                {
                    retVal.ErrorMessage = "Marketing agreement is not approved";
                    return(retVal);
                }

                _logger.LogDebug(
                    GetLogMessage(
                        $@"Marketing Agreement found to be valid"));

                marketerBonus        = marketingAgreement.MarketerBonus;
                marketerAgencyBonus  = marketingAgreement.MarketingAgencyBonus;
                marketerAgencyStream = marketingAgreement.MarketingAgencyStream;
                marketerStream       = marketingAgreement.MarketerStream;
            }


            var lead = new Lead
            {
                Iso2                   = input.Iso2,
                ProvinceState          = input.ProvinceState,
                MarketerId             = marketer.MarketerId,
                MarketerOrganizationId = marketer.OrganizationId,
                MarketerStream         = marketerStream,
                MarketerBonus          = marketerBonus,
                MarketingAgencyBonus   = marketerAgencyBonus,
                MarketingAgencyStream  = marketerAgencyStream,
                ProviderOrganizationId = providerOrganizationId,
                UpdatedById            = marketer.MarketerId,
                CreatedById            = marketer.MarketerId, // cant be _userInfo.UserId
                ObjectState            = ObjectState.Added,
                Status                 = LeadStatus.New
            };

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

            lead.InjectFrom(input);

            var records = Repository.Insert(lead, true);

            _logger.LogDebug(GetLogMessage("{0} records updated in db"), records);

            if (records > 0)
            {
                retVal.LeadId    = lead.Id;
                retVal.Succeeded = true;

                await Task.Run(() => RaiseEvent(new LeadCreatedEvent
                {
                    LeadId = lead.Id
                }));
            }

            return(retVal);
        }
Пример #12
0
 public async Task <LeadResult> CreateExternalLead(IOrganizationMarketer ma, Guid providerOrganizationId, LeadInput model)
 {
     _logger.LogInformation(GetLogMessage("MA: {0}"), ma.OrganizationId);
     return(await CreateLead(ma, providerOrganizationId, model));
 }
Пример #13
0
        public async Task <IActionResult> CreateLead([FromRoute] Guid organizationId, [FromQuery] string referralCode, [FromBody] LeadInput input)
        {
            var marketer =
                await _marketerService.GetMarketerOrDefault <OrganizationMarketerOutput>(organizationId, null,
                                                                                         referralCode);

            var lead = await _leadService.CreateInternalLead(marketer, input);

            return(Ok(lead));
        }
        public Status createEnquiry(LeadInput input, IOrganizationService orgService)
        {
            Status _status = new Status();

            try
            {
                Entity eLead = new Entity("new_cientenquiry1");
                if (!string.IsNullOrEmpty(input.CustomerCity))
                {
                    Guid cityId = getCityId(input.CustomerCity, orgService);
                    if (cityId != Guid.Empty)
                    {
                        eLead["new_ct"] = new EntityReference("new_city", cityId);
                    }
                    else
                    {
                        _status.code    = "202";
                        _status.message = "City Not Found in CRM";
                        return(_status);
                    }
                }
                if (!string.IsNullOrEmpty(input.CenterCode))
                {
                    Guid centerId = getCenterId(input.CenterCode, orgService);
                    if (centerId != Guid.Empty)
                    {
                        eLead["new_center"] = new EntityReference("new_center", centerId);
                    }
                    else
                    {
                        _status.code    = "202";
                        _status.message = "Center Not Found in CRM";
                        return(_status);
                    }
                }
                if (!string.IsNullOrEmpty(input.CustomerEmail))
                {
                    eLead["new_emailid1"] = input.CustomerEmail;
                }
                if (!string.IsNullOrEmpty(input.CustomerName))
                {
                    eLead["new_name"] = input.CustomerName;
                }
                if (!string.IsNullOrEmpty(input.CustomerGender))
                {
                    string gender = input.CustomerGender.ToLower();
                    if (gender.Equals("male"))
                    {
                        eLead["new_gen"] = new OptionSetValue(100000001);
                    }
                    else if (gender.Equals("female"))
                    {
                        eLead["new_gen"] = new OptionSetValue(100000000);
                    }
                    else if (gender.Equals("transgender"))
                    {
                        eLead["new_gen"] = new OptionSetValue(3);
                    }
                    else
                    {
                        _status.code    = "202";
                        _status.message = "Gender should be either Male,Female or Transgender";
                        return(_status);
                    }
                }
                if (!string.IsNullOrEmpty(input.ServiceCategory))
                {
                    eLead["pcl_servicecategoy"] = input.ServiceCategory;
                }
                if (!string.IsNullOrEmpty(input.Service))
                {
                    eLead["pcl_service"] = input.Service;
                }
                if (!string.IsNullOrEmpty(input.SubService))
                {
                    eLead["pcl_subservice"] = input.SubService;
                }
                if (!string.IsNullOrEmpty(input.CampaignCode))
                {
                    eLead["pcl_campaignname"] = input.CampaignCode;
                }
                if (!string.IsNullOrEmpty(input.Source))
                {
                    eLead["pcl_source"] = input.Source;
                }
                eLead["new_phone"] = input.PhoneNo;
                eLead["new_re"]    = new OptionSetValue(100000018);

                if (string.IsNullOrEmpty(input.Source) && string.IsNullOrEmpty(input.CampaignCode) && string.IsNullOrEmpty(input.Service) && string.IsNullOrEmpty(input.SubService) && string.IsNullOrEmpty(input.ServiceCategory) && string.IsNullOrEmpty(input.CustomerGender) && string.IsNullOrEmpty(input.CustomerName) && string.IsNullOrEmpty(input.CustomerEmail) && string.IsNullOrEmpty(input.CenterCode) && string.IsNullOrEmpty(input.CustomerCity))
                {
                    _status.code    = "202";
                    _status.message = "No data present except Mobile";
                }
                else
                {
                    orgService.Create(eLead);
                    _status.code    = "200";
                    _status.message = "SUCCESS";
                }
            }
            catch (Exception ex)
            {
                _status.code    = "201";
                _status.message = ex.Message;
            }
            return(_status);
        }