public static Guid CreateInspectionPortalQA(HttpClient httpClient, InspectionPortalQA questionSetup)
        {
            var questionObject = new JObject()
            {
                ["blu_name"]   = questionSetup.Name,
                ["blu_answer"] = questionSetup.Answer,
                ["blu_number"] = questionSetup.Number.ToString(),
                ["blu_type"]   = questionSetup.Type,
            };

            if (questionSetup.PropertyId != Guid.Empty)
            {
                questionObject["*****@*****.**"] = "/blu_inspections(" + questionSetup.PropertyId + ")";
            }
            if (questionSetup.InspectionId != Guid.Empty)
            {
                questionObject["*****@*****.**"] = "/blu_inspectiondetails(" + questionSetup.InspectionId + ")";
            }
            if (questionSetup.OpportunityId != Guid.Empty)
            {
                questionObject["*****@*****.**"] = "/opportunities(" + questionSetup.OpportunityId + ")";
            }
            if (questionSetup.OrderId != Guid.Empty)
            {
                questionObject["*****@*****.**"] = "/salesorders(" + questionSetup.OrderId + ")";
            }
            if (questionSetup.Id != Guid.Empty)
            {
                questionObject["*****@*****.**"] = "/blu_questionsetups(" + questionSetup.Id + ")";
            }

            var request = new HttpRequestMessage(HttpMethod.Post,
                                                 webApiQueryUrl + "blu_inspectionportalqas")
            {
                Content = new StringContent(questionObject.ToString(), Encoding.UTF8, "application/json")
            };
            var response = httpClient.SendAsync(request);

            if (!response.Result.IsSuccessStatusCode)
            {
                var error = response.Result.Content.ReadAsStringAsync();
                return(Guid.Empty);
            }
            var recordUrl = response.Result.Headers.GetValues("OData-EntityId").FirstOrDefault();

            if (recordUrl == null)
            {
                return(Guid.Empty);
            }
            var splitRetrievedData = recordUrl.Split('[', '(', ')', ']');
            var recordId           = Guid.Parse(splitRetrievedData[1]);

            return(recordId);
        }
        public static List <InspectionPortalQA> QueryQuestionSetupByQuestionSetup(HttpClient httpClient, Guid productId)
        {
            var questionSetups = new List <InspectionPortalQA>();

            var fetchXml = string.Empty;

            fetchXml += "<fetch>";
            fetchXml += "    <entity name='blu_blu_questionsetup_product' >";
            fetchXml += "        <attribute name='blu_questionsetupid' />";
            fetchXml += "        <attribute name='productid' />";
            fetchXml += "        <link-entity name='product' from='productid' to='productid' linke-type='inner' >";
            fetchXml += "            <attribute name='name' />";
            fetchXml += "            <attribute name='parentproductid' />";
            fetchXml += "            <filter>";
            fetchXml += "               <condition attribute='blu_requiredfor' operator='eq' value='" + productId + "' />";
            fetchXml += "            <filter>";
            fetchXml += "        </link-entity>";
            fetchXml += "        <link-entity name='blu_questionsetup' from='blu_questionsetupid' to='blu_questionsetupid' linke-type='inner' >";
            fetchXml += "           <attribute name='blu_questionsetupid' />";
            fetchXml += "           <attribute name='blu_name' />";
            fetchXml += "           <attribute name='blu_number' />";
            fetchXml += "           <attribute name='blu_type' />";
            fetchXml += "           <attribute name='blu_answerdatatype' />";
            fetchXml += "           <attribute name='blu_optionvalues' />";
            fetchXml += "           <attribute name='blu_uniquename' />";

            fetchXml += "        </link-entity>";
            fetchXml += "    </entity>";
            fetchXml += "</fetch>";

            var encodedQuery = SharedService.UrlEncode(fetchXml);

            var odataQuery = webApiQueryUrl + "blu_blu_questionsetup_productset?fetchXml=" +
                             encodedQuery;

            var     retrieveResponse  = httpClient.GetAsync(odataQuery);
            var     jRetrieveResponse = JObject.Parse(retrieveResponse.Result.Content.ReadAsStringAsync().Result);
            dynamic systemUserObject  = JsonConvert.DeserializeObject(jRetrieveResponse.ToString());

            if (systemUserObject == null || systemUserObject.value == null)
            {
                return(null);
            }
            if (systemUserObject.value.Count == 0)
            {
                return(null);
            }

            foreach (var data in systemUserObject.value)
            {
                var questionSetup = new InspectionPortalQA()
                {
                    Id             = data["blu_questionsetupid"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetupid"].ToString()),
                    AnswerDataType = data["blu_questionsetup2_x002e_blu_answerdatatype"] == null ?
                                     0 : (int)data["blu_questionsetup2_x002e_blu_answerdatatype"],
                    AnswerDataTypeText = data["*****@*****.**"] == null ?
                                         "" : data["*****@*****.**"].ToString(),
                    Name = data["blu_questionsetup2_x002e_blu_name"] == null ? "" : data["blu_questionsetup2_x002e_blu_name"].ToString(),
                    UniqueQuestionName = data["blu_questionsetup2_x002e_blu_uniquename"] == null ? "" : data["blu_questionsetup2_x002e_blu_uniquename"].ToString(),
                    Number             = data["blu_questionsetup2_x002e_blu_number"] == null ?
                                         -99 : (int)data["blu_questionsetup2_x002e_blu_number"],
                    OptionSetValues = data["blu_questionsetup2_x002e_blu_optionvalues"] == null
                        ? new string[0]
                        : data["blu_questionsetup2_x002e_blu_optionvalues"].ToString().Split(','),
                    Type = data["blu_questionsetup2_x002e_blu_type"] == null ?
                           0 : (int)data["blu_questionsetup2_x002e_blu_type"],

                    //Id = data["blu_questionsetup2_x002e_blu_questionsetupid"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetup2_x002e_blu_questionsetupid"].ToString()),

                    //AnswerDataType = data["blu_questionsetup2_x002e_blu_answerdatatype"] == null ?
                    //                0 : (int)data["blu_questionsetup2_x002e_blu_answerdatatype"],

                    //AnswerDataTypeText = data["*****@*****.**"] == null ?
                    //"" : data["*****@*****.**"].ToString(),

                    //Name = data["blu_questionsetup2_x002e_blu_name"] == null ? "" : data["blu_questionsetup2_x002e_blu_name"].ToString(),
                    //UniqueQuestionName = data["blu_questionsetup2_x002e_blu_uniquename"] == null ? "" : data["blu_questionsetup2_x002e_blu_uniquename"].ToString(),
                    //Number = data["blu_questionsetup2_x002e_blu_number"] == null ?
                    //                -99 : (int)data["blu_questionsetup2_x002e_blu_number"],
                    //OptionSetValues = data["blu_questionsetup2_x002e_blu_optionvalues"] == null
                    //    ? new string[0]
                    //    : data["blu_questionsetup2_x002e_blu_optionvalues"].ToString().Split(','),
                    //Type = data["blu_questionsetup2_x002e_blu_type"] == null ?
                    //                0 : (int)data["blu_questionsetup2_x002e_blu_type"],
                };
                questionSetup.UniqueName = Guid.NewGuid().ToString().Replace("-", "");
                questionSetups.Add(questionSetup);
            }

            return(questionSetups);
        }
        public static List <InspectionPortalQA> QueryTermsAndConditionsByQuestionSetup(HttpClient httpClient, Guid questionSetupId)
        {
            var questionSetups = new List <InspectionPortalQA>();

            var fetchXml = string.Empty;

            fetchXml += "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>";
            fetchXml += "  <entity name='blu_parentcategorysetup_questionsetup' >";
            fetchXml += "	<attribute name='blu_questionsetupidone' />";
            fetchXml += "    <attribute name='blu_questionsetupidtwo' />";
            fetchXml += "    <link-entity name='blu_questionsetup' from='blu_questionsetupid' to='blu_questionsetupidone' link-type='inner' >";
            fetchXml += "      <filter>";
            fetchXml += "        <condition attribute='blu_questionsetupid' operator='eq' value='" + questionSetupId + "' />";
            fetchXml += "        <condition attribute='blu_requiredfor' operator='eq' value='" + (int)InspectionPortalQA_RequiredFor.Portal + "' />";
            fetchXml += "      </filter>";
            fetchXml += "    </link-entity>";
            fetchXml += "	<link-entity name='blu_questionsetup' from='blu_questionsetupid' to='blu_questionsetupidtwo' >";
            fetchXml += "      <attribute name='blu_questionsetupid' />";
            fetchXml += "      <attribute name='blu_name' />";
            fetchXml += "      <attribute name='blu_number' />";
            fetchXml += "      <attribute name='blu_type' />";
            fetchXml += "      <attribute name='blu_answerdatatype' />";
            fetchXml += "      <attribute name='blu_optionvalues' />";
            fetchXml += "      <attribute name='blu_uniquename' />";
            fetchXml += "      <filter>";
            fetchXml += "        <condition attribute='blu_requiredfor' operator='eq' value='" + (int)InspectionPortalQA_RequiredFor.Portal + "' />";
            fetchXml += "        <condition attribute='blu_type' operator='eq' value='858890002' />";
            fetchXml += "      </filter>";
            fetchXml += "    </link-entity>";
            fetchXml += "  </entity>";
            fetchXml += "</fetch>";

            var encodedQuery = SharedService.UrlEncode(fetchXml);

            var odataQuery = webApiQueryUrl + "blu_parentcategorysetup_questionsetupset?fetchXml=" +
                             encodedQuery;

            var     retrieveResponse  = httpClient.GetAsync(odataQuery);
            var     jRetrieveResponse = JObject.Parse(retrieveResponse.Result.Content.ReadAsStringAsync().Result);
            dynamic systemUserObject  = JsonConvert.DeserializeObject(jRetrieveResponse.ToString());

            if (systemUserObject == null || systemUserObject.value == null)
            {
                return(null);
            }
            if (systemUserObject.value.Count == 0)
            {
                return(null);
            }

            foreach (var data in systemUserObject.value)
            {
                var questionSetup = new InspectionPortalQA()
                {
                    Id = data["blu_questionsetup2_x002e_blu_questionsetupid"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetup2_x002e_blu_questionsetupid"].ToString()),

                    AnswerDataType = data["blu_questionsetup2_x002e_blu_answerdatatype"] == null ?
                                     0 : (int)data["blu_questionsetup2_x002e_blu_answerdatatype"],

                    AnswerDataTypeText = data["*****@*****.**"] == null ?
                                         "" : data["*****@*****.**"].ToString(),

                    Name = data["blu_questionsetup2_x002e_blu_name"] == null ? "" : data["blu_questionsetup2_x002e_blu_name"].ToString(),
                    UniqueQuestionName = data["blu_questionsetup2_x002e_blu_uniquename"] == null ? "" : data["blu_questionsetup2_x002e_blu_uniquename"].ToString(),
                    Number             = data["blu_questionsetup2_x002e_blu_number"] == null ?
                                         -99 : (int)data["blu_questionsetup2_x002e_blu_number"],
                    OptionSetValues = data["blu_questionsetup2_x002e_blu_optionvalues"] == null
                        ? new string[0]
                        : data["blu_questionsetup2_x002e_blu_optionvalues"].ToString().Split(','),
                    Type = data["blu_questionsetup2_x002e_blu_type"] == null ?
                           0 : (int)data["blu_questionsetup2_x002e_blu_type"],
                    IsMandatory = data["blu_questionsetup1_x002e_blu_answerismandatory"] == null ?
                                  false : (bool)data["blu_questionsetup1_x002e_blu_answerismandatory"],
                };
                questionSetup.UniqueName = Guid.NewGuid().ToString().Replace("-", "");
                questionSetups.Add(questionSetup);
            }

            return(questionSetups);
        }
        public static List <InspectionPortalQA> QueryQuestionSetupByQuestionSetup(HttpClient httpClient, List <Guid> productIds, Guid priceListId)
        {
            var stockingProductIds = new List <Guid>();

            foreach (var productId in productIds)
            {
                var product = ProductService.QueryProduct(httpClient, productId);
                if (product.StockingProductId != Guid.Empty && !stockingProductIds.Contains(product.StockingProductId))
                {
                    stockingProductIds.Add(product.StockingProductId);
                }
            }

            var questionSetups = new List <InspectionPortalQA>();

            var fetchXml = string.Empty;

            fetchXml += "<fetch>";
            fetchXml += "    <entity name='blu_blu_questionsetup_product' >";
            fetchXml += "        <attribute name='blu_questionsetupid' />";
            fetchXml += "        <attribute name='productid' />";
            fetchXml += "        <link-entity name='product' from='productid' to='productid' linke-type='inner' >";
            fetchXml += "            <attribute name='name' />";
            fetchXml += "            <attribute name='parentproductid' />";
            fetchXml += "            <filter>";
            if (stockingProductIds != null && stockingProductIds.Count > 0)
            {
                fetchXml += "      <condition attribute='productid' operator='in'>";
                foreach (var stockingProductId in stockingProductIds)
                {
                    fetchXml += "        <value>" + stockingProductId + "</value>";
                }
                fetchXml += "      </condition>";
            }
            fetchXml += "            </filter>";
            fetchXml += "        </link-entity>";
            fetchXml += "        <link-entity name='blu_questionsetup' from='blu_questionsetupid' to='blu_questionsetupid' linke-type='inner' >";
            fetchXml += "           <attribute name='blu_questionsetupid' />";
            fetchXml += "           <attribute name='blu_name' />";
            fetchXml += "           <attribute name='blu_number' />";
            fetchXml += "           <attribute name='blu_type' />";
            fetchXml += "           <attribute name='blu_answerdatatype' />";
            fetchXml += "           <attribute name='blu_optionvalues' />";
            fetchXml += "           <attribute name='blu_uniquename' />";
            fetchXml += "           <attribute name='blu_answerismandatory' />";
            fetchXml += "           <attribute name='blu_additionalproduct' />";

            fetchXml += "        </link-entity>";
            fetchXml += "    </entity>";
            fetchXml += "</fetch>";

            var encodedQuery = SharedService.UrlEncode(fetchXml);

            var odataQuery = webApiQueryUrl + "blu_blu_questionsetup_productset?fetchXml=" +
                             encodedQuery;

            var     retrieveResponse  = httpClient.GetAsync(odataQuery);
            var     jRetrieveResponse = JObject.Parse(retrieveResponse.Result.Content.ReadAsStringAsync().Result);
            dynamic systemUserObject  = JsonConvert.DeserializeObject(jRetrieveResponse.ToString());

            if (systemUserObject != null && systemUserObject.value != null)
            {
                if (systemUserObject.value.Count != 0)
                {
                    foreach (var data in systemUserObject.value)
                    {
                        var questionSetup = new InspectionPortalQA()
                        {
                            Id             = data["blu_questionsetupid"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetupid"].ToString()),
                            AnswerDataType = data["blu_questionsetup2_x002e_blu_answerdatatype"] == null ?
                                             0 : (int)data["blu_questionsetup2_x002e_blu_answerdatatype"],
                            AnswerDataTypeText = data["*****@*****.**"] == null ?
                                                 "" : data["*****@*****.**"].ToString(),
                            Name = data["blu_questionsetup2_x002e_blu_name"] == null ? "" : data["blu_questionsetup2_x002e_blu_name"].ToString(),
                            UniqueQuestionName = data["blu_questionsetup2_x002e_blu_uniquename"] == null ? "" : data["blu_questionsetup2_x002e_blu_uniquename"].ToString(),
                            Number             = data["blu_questionsetup2_x002e_blu_number"] == null ?
                                                 -99 : (int)data["blu_questionsetup2_x002e_blu_number"],
                            OptionSetValues = data["blu_questionsetup2_x002e_blu_optionvalues"] == null
                                ? new string[0]
                                : data["blu_questionsetup2_x002e_blu_optionvalues"].ToString().Split(','),
                            Type = data["blu_questionsetup2_x002e_blu_type"] == null ?
                                   0 : (int)data["blu_questionsetup2_x002e_blu_type"],
                            IsMandatory = data["blu_questionsetup2_x002e_blu_answerismandatory"] == null ?
                                          false : (bool)data["blu_questionsetup2_x002e_blu_answerismandatory"],
                            AdditionalProductId = data["blu_questionsetup2_x002e_blu_additionalproduct"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetup2_x002e_blu_additionalproduct"].ToString()),
                        };
                        questionSetup.UniqueName = Guid.NewGuid().ToString().Replace("-", "");
                        questionSetups.Add(questionSetup);
                    }
                }
            }

            fetchXml  = string.Empty;
            fetchXml += "<fetch>";
            fetchXml += "  <entity name='blu_blu_questionsetup_pricelevel' >";
            fetchXml += "    <filter type='and' >";
            fetchXml += "      <condition attribute='pricelevelid' operator='eq' value='" + priceListId + "' />";
            fetchXml += "    </filter>";
            fetchXml += "    <link-entity name='blu_questionsetup' from='blu_questionsetupid' to='blu_questionsetupid' link-type='inner'  >";
            fetchXml += "           <attribute name='blu_questionsetupid' />";
            fetchXml += "           <attribute name='blu_name' />";
            fetchXml += "           <attribute name='blu_number' />";
            fetchXml += "           <attribute name='blu_type' />";
            fetchXml += "           <attribute name='blu_answerdatatype' />";
            fetchXml += "           <attribute name='blu_optionvalues' />";
            fetchXml += "           <attribute name='blu_uniquename' />";
            fetchXml += "           <attribute name='blu_answerismandatory' />";
            fetchXml += "           <attribute name='blu_additionalproduct' />";
            fetchXml += "    </link-entity>";
            fetchXml += "  </entity>";
            fetchXml += "</fetch>";

            encodedQuery = SharedService.UrlEncode(fetchXml);

            odataQuery = webApiQueryUrl + "blu_blu_questionsetup_pricelevelset?fetchXml=" +
                         encodedQuery;

            retrieveResponse  = httpClient.GetAsync(odataQuery);
            jRetrieveResponse = JObject.Parse(retrieveResponse.Result.Content.ReadAsStringAsync().Result);
            systemUserObject  = JsonConvert.DeserializeObject(jRetrieveResponse.ToString());
            if (systemUserObject == null || systemUserObject.value == null)
            {
                return(questionSetups);
            }
            if (systemUserObject.value.Count == 0)
            {
                return(questionSetups);
            }

            foreach (var data in systemUserObject.value)
            {
                var questionSetup = new InspectionPortalQA()
                {
                    Id             = data["blu_questionsetupid"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetupid"].ToString()),
                    AnswerDataType = data["blu_questionsetup1_x002e_blu_answerdatatype"] == null ?
                                     0 : (int)data["blu_questionsetup1_x002e_blu_answerdatatype"],
                    AnswerDataTypeText = data["*****@*****.**"] == null ?
                                         "" : data["*****@*****.**"].ToString(),
                    Name = data["blu_questionsetup1_x002e_blu_name"] == null ? "" : data["blu_questionsetup1_x002e_blu_name"].ToString(),
                    UniqueQuestionName = data["blu_questionsetup1_x002e_blu_uniquename"] == null ? "" : data["blu_questionsetup1_x002e_blu_uniquename"].ToString(),
                    Number             = data["blu_questionsetup1_x002e_blu_number"] == null ?
                                         -99 : (int)data["blu_questionsetup1_x002e_blu_number"],
                    OptionSetValues = data["blu_questionsetup1_x002e_blu_optionvalues"] == null
                        ? new string[0]
                        : data["blu_questionsetup1_x002e_blu_optionvalues"].ToString().Split(','),
                    Type = data["blu_questionsetup1_x002e_blu_type"] == null ?
                           0 : (int)data["blu_questionsetup1_x002e_blu_type"],
                    IsMandatory = data["blu_questionsetup1_x002e_blu_answerismandatory"] == null ?
                                  false : (bool)data["blu_questionsetup1_x002e_blu_answerismandatory"],
                    AdditionalProductId = data["blu_questionsetup1_x002e_blu_additionalproduct"] == null ? Guid.Empty : Guid.Parse(data["blu_questionsetup1_x002e_blu_additionalproduct"].ToString()),
                };
                questionSetup.UniqueName = Guid.NewGuid().ToString().Replace("-", "");
                questionSetup.Answer     = questionSetup.Type == (int)InspectionPortalQA_Type.TC ? "true" : "";
                questionSetups.Add(questionSetup);
            }

            return(questionSetups);
        }