public ActionResult DeleteConfirmed(int id)
        {
            DocCategory doccategory = db.DocCategories.Find(id);

            db.DocCategories.Remove(doccategory);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 public ActionResult Edit([Bind(Include = "id,CatName,date")] DocCategory doccategory)
 {
     if (ModelState.IsValid)
     {
         db.Entry(doccategory).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(doccategory));
 }
        public ActionResult Create([Bind(Include = "id,CatName,date")] DocCategory doccategory)
        {
            if (ModelState.IsValid)
            {
                doccategory.date = DateTime.Now;

                db.DocCategories.Add(doccategory);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(doccategory));
        }
        // GET: /Doctorcategory/Delete/5
        public ActionResult Delete(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            DocCategory doccategory = db.DocCategories.Find(id);

            if (doccategory == null)
            {
                return(HttpNotFound());
            }
            return(View(doccategory));
        }
        private DocBase CreateModel()
        {
            // Find assembly
            var a = Assembly.GetExecutingAssembly().GetReferencedAssemblies().FirstOrDefault(a => a.Name == _options.Value.PluginName);

            if (a == null)
            {
                throw new FileNotFoundException("Unable to load assembly for reflection.");
            }

            var model = new DocBase {
                Title    = "MSFS 2020 TouchPortal Plugin",
                Overview = "This plugin will provide a two way interface between Touch Portal and Microsoft Flight Simulator 2020 through SimConnect."
            };

            var assembly     = Assembly.Load(a);
            var assemblyList = assembly.GetTypes().ToList();

            // Get all classes with the TouchPortalCategory
            var classList = assemblyList.Where(t => t.CustomAttributes.Any(att => att.AttributeType == typeof(TouchPortalCategoryAttribute))).OrderBy(o => o.Name).ToList();

            // Loop through categories
            classList.ForEach(cat => {
                var catAttr = (TouchPortalCategoryAttribute)Attribute.GetCustomAttribute(cat, typeof(TouchPortalCategoryAttribute));
                var newCat  = new DocCategory {
                    Name = catAttr.Name
                };

                // Loop through Actions
                var actions = cat.GetMembers().Where(t => t.CustomAttributes.Any(att => att.AttributeType == typeof(TouchPortalActionAttribute))).ToList();
                actions.ForEach(act => {
                    var actionAttribute = (TouchPortalActionAttribute)Attribute.GetCustomAttribute(act, typeof(TouchPortalActionAttribute));
                    var newAct          = new DocAction {
                        Name        = actionAttribute.Name,
                        Description = actionAttribute.Description,
                        Type        = actionAttribute.Type,
                        Format      = actionAttribute.Format
                    };

                    // Loop through Action Data
                    var choiceAttributes = act.GetCustomAttributes <TouchPortalActionChoiceAttribute>()?.ToList();

                    if (choiceAttributes?.Count > 0)
                    {
                        for (int i = 0; i < choiceAttributes.Count; i++)
                        {
                            var data = new DocActionData {
                                Type         = "choice",
                                DefaultValue = choiceAttributes[i].DefaultValue,
                                Values       = string.Join(",", choiceAttributes[i].ChoiceValues)
                            };
                            newAct.Data.Add(data);
                        }
                    }

                    newCat.Actions.Add(newAct);
                });

                newCat.Actions = newCat.Actions.OrderBy(c => c.Name).ToList();

                // Loop through States
                var states = cat.GetFields().Where(m => m.CustomAttributes.Any(att => att.AttributeType == typeof(TouchPortalState))).ToList();
                states.ForEach(state => {
                    var stateAttribute = state.GetCustomAttribute <TouchPortalStateAttribute>();

                    if (stateAttribute != null)
                    {
                        var newState = new DocState {
                            Id           = $"{_options.Value.PluginName}.{catAttr.Id}.State.{stateAttribute.Id}",
                            Type         = stateAttribute.Type,
                            Description  = stateAttribute.Description,
                            DefaultValue = stateAttribute.Default
                        };

                        newCat.States.Add(newState);
                    }
                });

                newCat.States = newCat.States.OrderBy(c => c.Description).ToList();

                // Loop through Events

                model.Categories.Add(newCat);
            });

            model.Categories = model.Categories.OrderBy(c => c.Name).ToList();

            return(model);
        }