public async Task <IHttpActionResult> AddFMEAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FMEAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FMEATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FMEATree FMEATree = new FMEATree()
                {
                    Id = tree.Id, FMEAProjectId = docs.Id, FMEAProject = docs, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FMEATrees.Add(FMEATree);
                await db.SaveChangesAsync();

                return(Ok(new FTATreeRequestViewModel()
                {
                    Id = FMEATree.Id, Content = FMEATree.Content, ProjectId = docs.ProjectId
                }));
            }
            else
            {
                return(Conflict());
            }
        }
        public async Task <IHttpActionResult> AddFMEAProjectTree(FTATreeRequestViewModel tree)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var docs = db.FMEAProjects.Include("Project").Where(item => item.ProjectId == tree.ProjectId).FirstOrDefault();

            if (docs == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(docs.Project) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).Include("IdentityUser").FirstOrDefaultAsync();

            var tr = docs.FMEATrees.Where(item => item.Id == tree.Id).FirstOrDefault();

            if (tr == null)
            {
                FMEATree FMEATree = new FMEATree()
                {
                    Id = tree.Id, FMEAProjectId = docs.Id, FMEAProject = docs, Content = tree.Content, CreatedById = shqUser.IdentityUserId, CreatedTime = DateTime.Now, LastModifiedById = shqUser.IdentityUserId, LastModfiedTime = DateTime.Now
                };
                docs.FMEATrees.Add(FMEATree);
                await db.SaveChangesAsync();

                dynamic jsonSource = JObject.Parse(FMEATree.Content);
                foreach (var structureNode in jsonSource.structureNodes)
                {
                    foreach (var function in structureNode.FunctionSet)
                    {
                        foreach (var failure in function.FailureSet)
                        {
                            foreach (var property in failure.properties)
                            {
                                string key   = property.key;
                                string value = property.value;
                                if (property.previousValue != value)
                                {
                                    property.previousValue = value;
                                    db.ShqKeywordSets.Add(new ShqKeywordSet {
                                        Keyword = string.Format("{0}^{1}^{2}^{3}", structureNode.name, function.name, failure.name, key), KeywordValue = value
                                    });
                                }
                            }
                        }
                    }
                }

                FMEATree.Content = JsonConvert.SerializeObject(jsonSource);

                await db.SaveChangesAsync();

                (new AuditsController()).AddAuditEntry("api/FMEAProjects/AddTree", JsonConvert.SerializeObject(new ProjectViewModel(docs.Project, db)));
                return(Ok(new FTATreeRequestViewModel()
                {
                    Id = FMEATree.Id, Content = FMEATree.Content, ProjectId = docs.ProjectId
                }));
            }
            else
            {
                return(Conflict());
            }
        }