public async Task <HttpResponseMessage> SaveMarketGroupDetails(int MarketDefId, int ClientId)
        {
            HttpContent      requestContent          = Request.Content;
            string           jsonContent             = requestContent.ReadAsStringAsync().Result;
            var              marketDefinitionDetails = JsonConvert.DeserializeObject <MarketDefinitionDetails>(jsonContent);
            MarketDefinition marketDefinition        = marketDefinitionDetails.MarketDefinition;
            var              IsEdit = MarketDefId > 0 ? 1 : 0;

            List <MarketDefinitionPack>    marketDefinitionPacks    = marketDefinition.MarketDefinitionPacks;//store Packs
            List <MarketDefinitionBaseMap> marketDefinitionBaseMaps = marketDefinition.MarketDefinitionBaseMaps;

            marketDefinition.MarketDefinitionPacks    = null;
            marketDefinition.MarketDefinitionBaseMaps = null;
            //to delete previous market base
            //_db.Database.ExecuteSqlCommand("Delete from MarketDefinitionbaseMaps Where marketdefinitionid=" + MarketDefId);
            SqlParameter paramMarketID = new SqlParameter("@MarketDefID", MarketDefId);
            await _db.Database.ExecuteSqlCommandAsync("exec DeleteMarketDefinitionBaseMap @MarketDefID", paramMarketID);

            var mkt = new MarketDefinition()
            {
                Id = MarketDefId, Name = marketDefinition.Name, ClientId = ClientId, Client = null, MarketDefinitionBaseMaps = null, MarketDefinitionPacks = null, LastSaved = DateTime.Now
            };

            _db.MarketDefinitions.AddOrUpdate(mkt);
            _db.SaveChanges();
            MarketDefId = mkt.Id;

            // to update market definitionId in base maps
            foreach (MarketDefinitionBaseMap rec in marketDefinitionBaseMaps)
            {
                rec.MarketDefinitionId = MarketDefId;
            }

            //to add marketbase again.
            _db.MarketDefinitionBaseMaps.AddRange(marketDefinitionBaseMaps);
            await _db.SaveChangesAsync();

            await SaveMarketPacks(marketDefinitionPacks, MarketDefId);
            await SaveGroupData(MarketDefId, marketDefinitionDetails.GroupView, IsEdit);
            await SaveMarketGroupPack(MarketDefId, marketDefinitionDetails.MarketGroupPack, IsEdit);

            if (marketDefinitionDetails.MarketGroupFilter != null)
            {
                await SaveMarketGroupFilter(MarketDefId, marketDefinitionDetails.MarketGroupFilter, IsEdit);
            }

            //return market info
            var returnDetails = new MarketDefinition()
            {
                Id = MarketDefId, Name = mkt.Name, ClientId = mkt.ClientId
            };

            return(Request.CreateResponse(HttpStatusCode.OK, returnDetails));
        }
        public async Task <HttpResponseMessage> saveClientMarketDef(int ID)
        {
            HttpContent requestContent = Request.Content;
            var         jsonContent    = requestContent.ReadAsStringAsync().Result;
            Guid        Id             = Guid.NewGuid();
            int         MarketDefId;
            var         client = JsonConvert.DeserializeObject <Client[]>(jsonContent);
            var         marketDefinitionPacks = client[0].MarketDefinitions[0].MarketDefinitionPacks;//store Packs

            //to remove marketdefinition packs from Marketdefinition model
            client[0].MarketDefinitions[0].MarketDefinitionPacks = null;
            //to clear market base when client save market base
            for (var i = 0; i < client[0].MarketDefinitions[0].MarketDefinitionBaseMaps.Count(); i++)
            {
                client[0].MarketDefinitions[0].MarketDefinitionBaseMaps[i].MarketBase = null;
            }

            client[0].MarketDefinitions[0].GuiId        = Id.ToString();
            client[0].MarketDefinitions[0].LastModified = DateTime.Now;
            var identity = (ClaimsIdentity)User.Identity;
            int uid      = Convert.ToInt32(identity.Claims.FirstOrDefault(c => c.Type == "userid").Value.ToString());

            client[0].MarketDefinitions[0].ModifiedBy = uid;
            using (var db = new EverestPortalContext())
            {
                _db.MarketDefinitions.Add(client[0].MarketDefinitions[0]).ClientId = ID;
                //_db.SaveChanges();
                await _db.SaveChangesAsync();

                MarketDefId = client[0].MarketDefinitions[0].Id;
            }



            var packsDt = new DataTable();

            packsDt.Columns.Add("Pack", typeof(string));
            packsDt.Columns.Add("MarketBase", typeof(string));
            packsDt.Columns.Add("MarketBaseId", typeof(string));
            packsDt.Columns.Add("GroupNumber", typeof(string));
            packsDt.Columns.Add("GroupName", typeof(string));
            packsDt.Columns.Add("Factor", typeof(string));
            packsDt.Columns.Add("PFC", typeof(string));
            packsDt.Columns.Add("Manufacturer", typeof(string));
            packsDt.Columns.Add("ATC4", typeof(string));
            packsDt.Columns.Add("NEC4", typeof(string));
            packsDt.Columns.Add("DataRefreshType", typeof(string));
            packsDt.Columns.Add("StateStatus", typeof(string));
            packsDt.Columns.Add("MarketDefinitionId", typeof(int));
            packsDt.Columns.Add("Alignment", typeof(string));
            packsDt.Columns.Add("Product", typeof(string));
            packsDt.Columns.Add("ChangeFlag", typeof(string));
            packsDt.Columns.Add("Molecule", typeof(string));


            foreach (var item in marketDefinitionPacks)
            {
                item.MarketDefinitionId = MarketDefId;
                packsDt.Rows.Add(item.Pack, item.MarketBase, item.MarketBaseId, item.GroupNumber, item.GroupName, item.Factor, item.PFC, item.Manufacturer, item.ATC4, item.NEC4, item.DataRefreshType, item.StateStatus, MarketDefId, item.Alignment, item.Product, item.ChangeFlag, item.Molecule);
            }

            SqlParameter paramMarketDefinitionID = new SqlParameter("@marketdefinitionid", MarketDefId);
            SqlParameter paramPacks = new SqlParameter("@TVP", packsDt);

            paramPacks.SqlDbType = System.Data.SqlDbType.Structured;
            paramPacks.TypeName  = "TYP_MarketDefinitionPacks";
            //_db.Database.ExecuteSqlCommand("exec  EditMarketDefinition @marketdefinitionid,@TVP", paramMarketDefinitionID, paramPacks);
            await _db.Database.ExecuteSqlCommandAsync("exec  EditMarketDefinition @marketdefinitionid,@TVP", paramMarketDefinitionID, paramPacks);


            var objClient = _db.MarketDefinitions.Where(u => u.ClientId == ID && u.GuiId == Id.ToString()).FirstOrDefault();

            /*var json = JsonConvert.SerializeObject(objClient, Formatting.Indented,
             *          new JsonSerializerSettings
             *          {
             *              ReferenceLoopHandling = ReferenceLoopHandling.Ignore
             *          });*/

            return(Request.CreateResponse(HttpStatusCode.OK, objClient));
        }