Beispiel #1
0
 public static void AssignUpdate(LeadModels model, Lead entity, User user, string userId)
 {
     if (userId != null)
     {
         entity.FirstName = model.FirstName;
         entity.LastName  = model.LastName;
         entity.Email     = model.Email;
         entity.Website   = model.Website;
         entity.Mobile    = model.Mobile;
         entity.Phone     = model.Phone;
         entity.UpdatedBy = userId ?? "0";
         entity.UpdatedOn = Utility.GetDateTime();
     }
 }
Beispiel #2
0
        public static Lead CreateLead(LeadModels model, string userId)
        {
            var lead = new Lead
            {
                FirstName   = model.FirstName,
                LastName    = model.LastName,
                Email       = model.Email,
                Website     = model.Website,
                Mobile      = model.Mobile,
                Status      = Constants.RecordStatus.Active,
                CompanyName = model.CompanyName,
                ExternalId  = model.ExternalId,
                Phone       = model.Phone,
                CreatedBy   = userId ?? "0",
                CreatedOn   = Utility.GetDateTime(),
                CallStatus  = Constants.LeadCallStatus.NotDone
            };

            return(lead);
        }
Beispiel #3
0
        public async Task AddLeadAsync(List <LeadModels> model)
        {
            LeadModels lead = new LeadModels();


            List <LeadModels> distinct = model.GroupBy(x => new { x.Phone })
                                         .Select(x => x.First())
                                         .ToList();

            /*List<LeadModels> distinctContact = model.GroupBy(x => new { x.Mobile })
             *                       .Select(x => x.First())
             *                       .ToList();*/

            foreach (var addLead in distinct)
            {
                var leadfact = LeadFactory.CreateLead(addLead, _userId);
                await _leadRepository.AddAsync(leadfact);
            }
            await _unitOfWork.SaveChangesAsync();
        }
Beispiel #4
0
        public async Task <HttpResponseMessage> SalesforceSync(datas odatas)
        {
            dynamic oLeadModels  = new LeadModels();
            dynamic Lead         = new ExpandoObject();
            var     leaCustom    = (from a in odatas.oLead select new { a }).FirstOrDefault();
            var     datasLeadobj = new JavaScriptSerializer().Serialize(leaCustom.a);
            JObject lead         = JObject.Parse(datasLeadobj);

            lead.Property("CustomFields").Remove();
            lead.Merge(leaCustom.a.CustomFields);
            Lead = lead;

            dynamic Account     = new ExpandoObject();
            var     accCustom   = (from a in odatas.oAccount select new { a }).FirstOrDefault();
            var     datasAccobj = new JavaScriptSerializer().Serialize(accCustom.a);
            JObject account     = JObject.Parse(datasAccobj);

            account.Property("CustomFields").Remove();
            account.Merge(accCustom.a.CustomFields);
            Account = account;

            dynamic Contact      = new ExpandoObject();
            var     cont         = (from a in odatas.oContacts select new { a }).FirstOrDefault();
            var     datasContobj = new JavaScriptSerializer().Serialize(cont.a);
            JObject contacts     = JObject.Parse(datasContobj);

            contacts.Property("CustomFields").Remove();
            contacts.Merge(cont.a.CustomFields);
            Contact = contacts;

            dynamic Opportunity = new ExpandoObject();
            var     opp         = (from a in odatas.oOpportunity select new { a }).FirstOrDefault();
            var     datasOppobj = new JavaScriptSerializer().Serialize(opp.a);
            JObject opporunity  = JObject.Parse(datasOppobj);

            opporunity.Property("CustomFields").Remove();
            opporunity.Merge(opp.a.CustomFields);
            Opportunity = opporunity;

            dynamic CartItems    = new ExpandoObject();
            var     cart         = (from a in odatas.oCartItems select new { a }).FirstOrDefault();
            var     datasCartobj = new JavaScriptSerializer().Serialize(cart.a);
            JObject CartItem     = JObject.Parse(datasCartobj);

            CartItems = CartItem;

            dynamic ProductItems    = new ExpandoObject();
            var     productItem     = (from a in odatas.oShipping select new { a }).FirstOrDefault();
            var     datasProductobj = new JavaScriptSerializer().Serialize(productItem.a);
            JObject ProductItem     = JObject.Parse(datasProductobj);

            ProductItems = ProductItem;

            dynamic DiscountItems    = new ExpandoObject();
            var     discountItem     = (from a in odatas.oDiscount select new { a }).FirstOrDefault();
            var     datasDiscountobj = new JavaScriptSerializer().Serialize(discountItem.a);
            JObject DiscountItem     = JObject.Parse(datasDiscountobj);

            DiscountItems = DiscountItem;

            dynamic oCredential   = new SFCredential();
            dynamic Credential    = new ExpandoObject();
            var     CredCustom    = (from a in odatas.oCredential select new { a }).FirstOrDefault();
            var     Credentialobj = new JavaScriptSerializer().Serialize(CredCustom.a);
            JObject credential    = JObject.Parse(Credentialobj);

            Credential = credential;

            //Request Log
            dynamic oSalesforceModels = new LeadModels();
            dynamic Salesforce        = new ExpandoObject();
            JObject salesforce        = new JObject();

            salesforce.Add("Lead", Lead);
            salesforce.Add("Account", Account);
            salesforce.Add("Contact", Contact);
            salesforce.Add("Opportunity", Opportunity);
            salesforce.Add("CartItems", CartItems);
            salesforce.Add("ProductItems", ProductItems);
            salesforce.Add("DiscountItems", DiscountItems);
            salesforce.Add("Credential", Credential);
            Salesforce = salesforce;


            try
            {
                var    LeadId           = string.Empty;
                var    campaignId       = string.Empty;
                var    contactId        = string.Empty;
                var    Accountid        = string.Empty;
                string productId        = string.Empty;
                var    pricebookID      = string.Empty;
                var    accountIds       = string.Empty;
                var    products         = string.Empty;
                var    Shippingproducts = string.Empty;
                var    opportunityId    = string.Empty;
                var    statuscode       = string.Empty;

                #region Object Declaration

                #endregion
                ConfigurationModels oConfigurationmodels = new ConfigurationModels();
                oConfigurationmodels.ApplicationId = Credential.ApplicationId;
                var authResult = Configurations.Authentication(oConfigurationmodels);
                if (authResult != "Success")
                {
                    return(response = Request.CreateResponse(HttpStatusCode.Forbidden, authResult));
                }
                else
                {
                    orderId = Convert.ToString(Opportunity.Order_Number__c);
                    string request = Convert.ToString(((dynamic)(odatas)));

                    var OCustomerId = Configurations.GetCustomerId(oConfigurationmodels);
                    oConfigurationmodels.CustomerId = Convert.ToInt32(OCustomerId[0].CustomerId);

                    var OConfigurationModels = Configurations.GetConfigurationDetails(oConfigurationmodels);
                    clientId           = OConfigurationModels[0].ConsumerId;
                    clientSecretKey    = OConfigurationModels[0].ConsumerSecretKey;
                    salesforceUserName = OConfigurationModels[0].SalesForceUserName;
                    salesforcePassword = OConfigurationModels[0].SalesForceUserPassword;
                    securityToken      = OConfigurationModels[0].SecurityToken;
                    SalesforceTokenURL = OConfigurationModels[0].SalesforceTokenURL;
                    CustomerID         = Convert.ToInt32(OConfigurationModels[0].CustomerId);

                    //Request Log
                    int requestId = Errorlog.LogRequestToSF(CustomerID, Convert.ToString(Salesforce));

                    var auth = new AuthenticationClient();
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
                    await auth.UsernamePasswordAsync(clientId, clientSecretKey, salesforceUserName, salesforcePassword + securityToken, SalesforceTokenURL);

                    var forceClient = new ForceClient(auth.InstanceUrl, auth.AccessToken, auth.ApiVersion);
                    //Errorlog.LogRequestToSF(CustomerID, request, orderId);


                    #region Lead Conversion
                    //Get contact details based on First Name, Last Name, Email and Parent Account
                    var contact = await forceClient.QueryAsync <dynamic>("SELECT Id,AccountId  FROM Contact WHERE Firstname= '" + Lead.FirstName + "' AND LastName = '" + Lead.LastName + "' AND Email='" + Lead.Email + "' ");

                    //Get lead details based on First Name, Last Name, Email, Status and Lead Source
                    var leadDetail = await forceClient.QueryAsync <dynamic>("SELECT Id,Company FROM Lead WHERE ( LastName='" + Lead.LastName + "' and Email='" + Lead.Email + "') and Status='Open - Not Contacted' ");

                    //var priceBook2Iddetail = await forceClient.QueryAsync<dynamic>("SELECT Id FROM Pricebook2 WHERE IsActive = false AND IsStandard = true ");
                    priceBook2Id = CartItems.PriceBook2Id;
                    //priceBook2Id = (priceBook2Iddetail.Records[0].Id).Value;


                    if (leadDetail.TotalSize > 0)
                    {
                        Lead.FirstName = Lead.FirstName;
                        Lead.LastName  = Lead.LastName;
                        LeadId         = (leadDetail.Records[0].Id).Value;
                        var success = await forceClient.UpdateAsync("Lead", LeadId, Lead);
                    }

                    #endregion

                    #region Account
                    // Creating Account in Salesforce
                    Account.ParentId = CartItems.ParentAccountID;
                    if (contact.TotalSize > 0)
                    {
                        var Accountids    = (contact.Records[0].AccountId).Value;
                        var accountResult = await forceClient.UpdateAsync("Account", Accountids, Account);

                        Accountid = Accountids;
                        Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.ACCOUNT_UPDATE, Accountid), requestId, statuscode);
                        response = Request.CreateResponse(HttpStatusCode.Created, "Account Updated");
                    }
                    else
                    {
                        var accountIdResult = await forceClient.CreateAsync("Account", Account);

                        Accountid = (accountIdResult.Id);
                        Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.ACCOUNT_CREATE, Accountid), requestId, statuscode);
                        response = Request.CreateResponse(HttpStatusCode.Created, "Account Created");
                    }
                    #endregion

                    #region Contact
                    var contactDetail = await forceClient.QueryAsync <dynamic>("SELECT Id from Contact WHERE AccountId='" + Accountid + "'");

                    if (contactDetail.TotalSize > 0)
                    {
                        //Update Contact
                        var contactIdValue = (contactDetail.Records[0].Id).Value;
                        contactId = contactIdValue;
                        await forceClient.UpdateAsync("Contact", contactId, Contact);

                        Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.CONTACT_UPDATE, contactId), requestId, statuscode);
                        response = Request.CreateResponse(HttpStatusCode.Created, "Contact and Account Updated");
                    }
                    else
                    {
                        //Create Contact
                        Contact.AccountId = Accountid;
                        var contactIds = await forceClient.CreateAsync("Contact", Contact);

                        contactId = (contactIds.Id);
                        Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.CONTACT_CREATE, contactId), requestId, statuscode);
                        response = Request.CreateResponse(HttpStatusCode.Created, "Contact and Account Created");
                    }
                    #endregion

                    #region Opportunity

                    Opportunity.AccountId = Accountid;
                    var OpportunityId = await forceClient.CreateAsync("Opportunity", Opportunity);

                    opportunityId = (OpportunityId.Id);
                    Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.OPPORTUNITY_CREATE, opportunityId), requestId, statuscode);
                    response = Request.CreateResponse(HttpStatusCode.Created, "Opportunity, Contact and Account Created Successfully");

                    #endregion

                    #region Opportunitycontactrole
                    // Inserting Opportunitycontactrole
                    dynamic OpportunityContactRole = new ExpandoObject();
                    {
                        OpportunityContactRole.ContactId     = contactId;
                        OpportunityContactRole.OpportunityId = (OpportunityId.Id);
                        OpportunityContactRole.Role          = "Business User";
                    }
                    var ContactRole = await forceClient.CreateAsync("OpportunityContactRole", OpportunityContactRole);

                    #endregion

                    #region kitproduct details for opportunity line item
                    List <CartItems> cartItem = new List <CartItems>();

                    foreach (var cartItems in ((dynamic)(odatas)).oCartItems)
                    {
                        string sku         = cartItems.sku;
                        string description = "Product";
                        if (sku.Substring(sku.Length - 1).Equals("-"))
                        {
                            sku = sku.Substring(0, sku.Length - 1);
                        }

                        // Get the pricebookentryid
                        double totalprice = Convert.ToDouble(cartItems.price * cartItems.quantity);

                        var productDetails = await forceClient.QueryAsync <dynamic>("SELECT ID FROM PricebookEntry WHERE ProductCode ='" + sku + "'AND PRICEBOOK2ID='" + priceBook2Id + "'");

                        if (productDetails.TotalSize == 0)
                        {
                            // Create a new product
                            dynamic Product2 = new ExpandoObject();
                            Product2.Name        = cartItems.productName;
                            Product2.ProductCode = sku;
                            Product2.IsActive    = true;
                            var product = await forceClient.QueryAsync <dynamic>("SELECT Id FROM Product2 WHERE ProductCode ='" + sku + "'");

                            if (product.TotalSize > 0)
                            {
                                var ProductID = (product.Records[0].Id).Value;
                                productId = ProductID;
                                await forceClient.UpdateAsync("Product2", productId, Product2);
                            }
                            else
                            {
                                var productsId = await forceClient.CreateAsync("Product2", Product2);

                                productId = productsId.Id;
                            }


                            // Create a pricebook entry for standard pricebook
                            dynamic PricebookEntry = new ExpandoObject();
                            PricebookEntry.Pricebook2Id     = priceBook2Id;
                            PricebookEntry.Product2Id       = productId;
                            PricebookEntry.IsActive         = true;
                            PricebookEntry.UnitPrice        = cartItems.price;
                            PricebookEntry.UseStandardPrice = false;
                            var pricebookid = await forceClient.CreateAsync("PricebookEntry", PricebookEntry);

                            pricebookID = pricebookid.Id;
                            Errorlog.LogRequestToSF(CustomerID, " productId '" + productId + "'Created Sucessfully");
                        }


                        //pricebookID = (productDetails.Records[0].Id);
                        string  PricebookEntryId    = !string.IsNullOrEmpty(pricebookID) ? pricebookID : (productDetails.Records[0].Id);
                        dynamic opportunitylineItem = new ExpandoObject();
                        //Assign values to opportunity line item
                        opportunitylineItem.OpportunityId    = (OpportunityId.Id);
                        opportunitylineItem.PricebookEntryId = PricebookEntryId;
                        opportunitylineItem.TotalPrice       = Convert.ToDouble(totalprice);
                        opportunitylineItem.Description      = description;

                        if (cartItems.isAKit == true)
                        {
                            long kitCount = cartItems.kitCount;

                            kitCount++;
                            {
                                opportunitylineItem.Quantity = kitCount * cartItems.quantity;
                                var OpportunityLineItemResult = await forceClient.CreateAsync("OpportunityLineItem", opportunitylineItem); //Insert Opportunity line item
                            }
                        }
                        else
                        {
                            opportunitylineItem.Quantity = cartItems.quantity;
                            var OpportunityLineItemResult = await forceClient.CreateAsync("OpportunityLineItem", opportunitylineItem); //Update Opportunity line item
                        }
                    }
                    //FedEx Shipping Line Item
                    shipMethod = ProductItems.SalesforceShippingMethod;
                    //shipMethod = "Test Shiping Method";
                    if (!string.IsNullOrEmpty(shipMethod) && Opportunity.ShippingTotal__c != 0)
                    {
                        pricebookID = "";
                        productId   = "";
                        var priceBookDetail = await forceClient.QueryAsync <dynamic>("SELECT ID FROM PricebookEntry WHERE NAME ='" + shipMethod + "'AND PRICEBOOK2ID='" + priceBook2Id + "'");

                        if (priceBookDetail.TotalSize == 0)
                        {
                            // Create a new product
                            dynamic Product2 = new ExpandoObject();
                            Product2.Name = shipMethod;
                            var Shippingproduct = await forceClient.QueryAsync <dynamic>("SELECT Id FROM Product2 WHERE Name ='" + shipMethod + "'");

                            if (Shippingproduct.TotalSize > 0)
                            {
                                var ProductID = (Shippingproduct.Records[0].Id).Value;
                                productId = ProductID;
                                await forceClient.UpdateAsync("Product2", productId, Product2);
                            }
                            else
                            {
                                var productsId = await forceClient.CreateAsync("Product2", Product2);

                                productId = productsId.Id;
                            }
                            Errorlog.LogRequestToSF(CustomerID, " productId '" + productId + "'Created Sucessfully");
                            // Create a pricebook entry for standard pricebook
                            dynamic PricebookEntry = new ExpandoObject();
                            PricebookEntry.Pricebook2Id     = priceBook2Id;
                            PricebookEntry.Product2Id       = productId;
                            PricebookEntry.IsActive         = true;
                            PricebookEntry.UnitPrice        = Convert.ToDouble(Opportunity.ShippingTotal__c);
                            PricebookEntry.UseStandardPrice = false;
                            var pricebookid = await forceClient.CreateAsync("PricebookEntry", PricebookEntry);

                            pricebookID = pricebookid.Id;
                        }

                        dynamic OpportunityLineItem = new ExpandoObject();
                        OpportunityLineItem.OpportunityId    = (OpportunityId.Id);
                        OpportunityLineItem.PricebookEntryId = !string.IsNullOrEmpty(pricebookID) ? pricebookID : (priceBookDetail.Records[0].Id);
                        OpportunityLineItem.Description      = "Shipping Product";
                        OpportunityLineItem.Quantity         = 1.0;
                        OpportunityLineItem.TotalPrice       = Convert.ToDouble(Opportunity.ShippingTotal__c);
                        var OpportunityLineItemResult = await forceClient.CreateAsync("OpportunityLineItem", OpportunityLineItem);
                    }
                    //Discount Line item

                    if (DiscountItems.orderCount < 0)
                    {
                        pricebookID = "";
                        productId   = "";
                        //var priceBook2IdDiscount = await forceClient.QueryAsync<dynamic>("SELECT Id FROM Pricebook2 WHERE IsActive = false AND IsStandard = true ");
                        var priceBook2IdDiscount = await forceClient.QueryAsync <dynamic>("SELECT ID FROM PricebookEntry WHERE NAME ='Discount Amount' AND PRICEBOOK2ID='" + priceBook2Id + "'");

                        if (priceBook2IdDiscount.TotalSize == 0)
                        {
                            // Create a new product
                            dynamic Product2 = new ExpandoObject();
                            Product2.Name = "Discount Amount";
                            var Discountproduct = await forceClient.QueryAsync <dynamic>("SELECT Id FROM Product2 WHERE Name = ' Discount Amount ' ");

                            if (Discountproduct.TotalSize > 0)
                            {
                                var DiscountID = (Discountproduct.Records[0].Id).Value;
                                productId = DiscountID;
                                await forceClient.UpdateAsync("Product2", productId, Product2);
                            }
                            else
                            {
                                var productsId = await forceClient.CreateAsync("Product2", Product2);

                                productId = productsId.Id;
                            }
                            Errorlog.LogRequestToSF(CustomerID, " productId '" + productId + "'Created Sucessfully");
                            // Create a pricebook entry for standard pricebook
                            dynamic PricebookEntry = new ExpandoObject();
                            PricebookEntry.Pricebook2Id     = priceBook2Id;
                            PricebookEntry.Product2Id       = productId;
                            PricebookEntry.IsActive         = true;
                            PricebookEntry.UnitPrice        = DiscountItems.orderCount;
                            PricebookEntry.UseStandardPrice = false;
                            var pricebookid = await forceClient.CreateAsync("PricebookEntry", PricebookEntry);

                            pricebookID = pricebookid.Id;
                        }

                        dynamic OpportunityLineItem = new ExpandoObject();
                        OpportunityLineItem.OpportunityId    = (OpportunityId.Id);
                        OpportunityLineItem.PricebookEntryId = !string.IsNullOrEmpty(pricebookID) ? pricebookID : (priceBook2IdDiscount.Records[0].Id);
                        //OpportunityLineItem.PricebookEntryId = PricebookEntryId;
                        OpportunityLineItem.Description = "Discount Total";
                        OpportunityLineItem.Quantity    = 1.0;
                        OpportunityLineItem.TotalPrice  = DiscountItems.orderCount;
                        var OpportunityLineItemResult = await forceClient.CreateAsync("OpportunityLineItem", OpportunityLineItem);
                    }
                    Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.SUCCESS_RESPONSE, contactId), requestId, statuscode = "OK");
                    #endregion
                    return(response);
                }
            }
            catch (Exception ex)
            {
                Email email = new Email();
                errorMessage = ex.Message.ToString();
                errorMessage = (errorMessage == "authentication failure") ? "Please Check your salesforce UserName ,Password , SecurityToken and SalesforceTokenURL" : (errorMessage == "invalid client credentials") ? "Please Check your salesforce clientId and clientSecretKey  " : errorMessage;
                Errorlog.ErrorDetail(CustomerID, orderId, "SalesforceSync", errorMessage, 1);
                email.SendMailForError("Salesforce Account Sync Error", email.BodyService(Convert.ToString(Lead.FirstName + " " + Lead.LastName), Convert.ToString(Lead.Email), Convert.ToString(Credential.ApplicationId), ex.Message.ToString(), ex.StackTrace.ToString()));
                response = Request.CreateResponse(HttpStatusCode.InternalServerError, errorMessage);
                return(response);
            }
        }
Beispiel #5
0
        public async Task <HttpResponseMessage> CreateLead(Lead odatas)
        {
            dynamic oLeadModels  = new LeadModels();
            dynamic Lead         = new ExpandoObject();
            var     leaCustom    = (from a in odatas.oLead select new { a }).FirstOrDefault();
            var     datasLeadobj = new JavaScriptSerializer().Serialize(leaCustom.a);
            JObject lead         = JObject.Parse(datasLeadobj);

            lead.Property("CustomFields").Remove();
            lead.Merge(leaCustom.a.CustomFields);
            Lead = lead;

            dynamic oCredential   = new SFCredential();
            dynamic Credential    = new ExpandoObject();
            var     CredCustom    = (from a in odatas.oCredential select new { a }).FirstOrDefault();
            var     Credentialobj = new JavaScriptSerializer().Serialize(CredCustom.a);
            JObject credential    = JObject.Parse(Credentialobj);

            Credential = credential;

            //Request Log
            dynamic oSalesforceModels = new LeadModels();
            dynamic Salesforce        = new ExpandoObject();
            JObject salesforce        = new JObject();

            salesforce.Add("Lead", Lead);
            salesforce.Add("Credential", Credential);
            Salesforce = salesforce;


            try
            {
                var    leadId     = string.Empty;
                var    campaignId = string.Empty;
                var    contactId  = string.Empty;
                var    Accountid  = string.Empty;
                string productId  = string.Empty;
                var    statuscode = string.Empty;

                #region Object Declarations



                #endregion
                ConfigurationModels oConfigurationmodels = new ConfigurationModels();
                oConfigurationmodels.ApplicationId = Credential.ApplicationId;
                var authResult = Configurations.Authentication(oConfigurationmodels);
                if (authResult != "Success")
                {
                    return(response = Request.CreateResponse(HttpStatusCode.Forbidden, authResult));
                }
                else
                {
                    var response11 = new HttpResponseMessage(HttpStatusCode.Unauthorized);
                    #region API details
                    //ConfigurationModels oConfigurationmodels = new ConfigurationModels();
                    //oConfigurationmodels.ApplicationId = Credential.ApplicationId;
                    var OCustomerId = Configurations.GetCustomerId(oConfigurationmodels);
                    oConfigurationmodels.CustomerId = Convert.ToInt32(OCustomerId[0].CustomerId);
                    var OConfigurationModels = Configurations.GetConfigurationDetails(oConfigurationmodels);
                    clientId           = OConfigurationModels[0].ConsumerId;
                    clientSecretKey    = OConfigurationModels[0].ConsumerSecretKey;
                    salesforceUserName = OConfigurationModels[0].SalesForceUserName;
                    salesforcePassword = OConfigurationModels[0].SalesForceUserPassword;
                    securityToken      = OConfigurationModels[0].SecurityToken;
                    SalesforceTokenURL = OConfigurationModels[0].SalesforceTokenURL;
                    CustomerID         = Convert.ToInt32(OConfigurationModels[0].CustomerId);
                    LeadSetting        = true;
                    CampaignSetting    = true;

                    //Request Log
                    int requestId = Errorlog.LogRequestToSF(CustomerID, Convert.ToString(Salesforce));

                    var auth = new AuthenticationClient();
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
                    await auth.UsernamePasswordAsync(clientId, clientSecretKey, salesforceUserName, salesforcePassword + securityToken, SalesforceTokenURL);

                    var forceClient = new ForceClient(auth.InstanceUrl, auth.AccessToken, auth.ApiVersion);

                    //Errorlog.LogRequestToSF(CustomerID, request, orderId);
                    #endregion

                    #region Lead

                    if (LeadSetting)
                    {
                        var leadResult = await forceClient.QueryAsync <dynamic>("SELECT Id FROM Lead WHERE (FirstName='" + Lead.FirstName + "' and LastName='" + Lead.LastName + "' and Email='" + Lead.Email + "') and Status='Open - Not Contacted' and LeadSource = '" + Lead.LeadSource + "'");

                        if ((leadResult).TotalSize > 0)
                        {
                            leadId = (leadResult.Records[0].Id).Value;
                            var leadUpdateResult = await forceClient.UpdateAsync("Lead", leadId, Lead);

                            Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.LEAD_UPDATE, leadId), requestId, statuscode);
                            response = Request.CreateResponse(HttpStatusCode.Created, "Lead Updated Successfully");
                        }
                        else
                        {
                            leadResult = await forceClient.CreateAsync("Lead", Lead);

                            leadId = (leadResult.Id);
                            Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.LEAD_CREATE, leadId), requestId, statuscode);
                            response = Request.CreateResponse(HttpStatusCode.Created, "Lead Created Successfully");
                        }

                        if (CampaignSetting)
                        {
                            #region Campaign
                            // Get Campaign Id based on its Name
                            var campaignResult = await forceClient.QueryAsync <dynamic>("SELECT ID FROM Campaign WHERE Name = '" + Lead.LeadSource + "' ");

                            campaignId = (campaignResult.Records[0].Id).Value;

                            // Checks whether the Lead already associated with corresponding campagign.
                            var campaignMemberResult = await forceClient.QueryAsync <dynamic>("SELECT Id FROM CampaignMember WHERE CampaignId = '" + campaignId + "' AND LeadId = '" + leadId + "'");

                            if (campaignMemberResult.TotalSize <= 0)
                            {
                                // Lead campaign member association
                                dynamic campaignMember = new ExpandoObject();
                                campaignMember.LeadId     = leadId;
                                campaignMember.CampaignId = campaignId;
                                campaignMember.Status     = "Sent";
                                var campaignid = await forceClient.CreateAsync("CampaignMember", campaignMember);

                                Errorlog.LogResponseToSF(CustomerID, string.Format(Thread.CurrentThread.CurrentCulture, Helper.Messages.CAMPAING_CREATE, campaignId), requestId, statuscode);
                                response = Request.CreateResponse(HttpStatusCode.Created, "Lead and Campaign Created Successfully");
                            }
                            #endregion
                        }
                    }
                    #endregion
                    return(response);
                }
            }
            catch (Exception ex)
            {
                Email email = new Email();
                errorMessage = ex.Message.ToString();
                errorMessage = (errorMessage == "authentication failure") ? "Please Check your salesforce UserName ,Password , SecurityToken and SalesforceTokenURL" : (errorMessage == "invalid client credentials") ? "Please Check your salesforce clientId and clientSecretKey  " : errorMessage;
                Errorlog.ErrorDetail(CustomerID, orderId, "CreateLead", errorMessage, 1);
                email.SendMailForError("Salesforce Lead Creation Error", email.BodyService(Convert.ToString(Lead.FirstName + " " + Lead.LastName), Convert.ToString(Lead.Email), Convert.ToString(Credential.ApplicationId), ex.Message.ToString(), ex.StackTrace.ToString()));
                response = Request.CreateResponse(HttpStatusCode.InternalServerError, errorMessage);
                return(response);
            }
        }