public ActionResult Edit([Bind(Include = "Views12,TcSet")] EditViewsVM editVM, int[] TcSetID, int[]lsystemid, int[] CalcID)
        {
            ViewBag.Calculation = db.Calculation.Where(x => !x.CalculationFormula.Contains("Length")).ToList();

            if (ModelState.IsValid)
            {
                var views = db.Views.Where(x => x.ViewsID == editVM.Views12.ViewsID).FirstOrDefault();
                if(db.Views.Any(x=>x.ViewsName.Equals(editVM.Views12.ViewsName)&&(x.ViewsID!=editVM.Views12.ViewsID)))
                {
                    ModelState.AddModelError("", "View name already exists");
                    Views views12 = db.Views.Find(editVM.Views12.ViewsID);
                    var model = new EditViewsVM
                    {
                        Views12 = views12,
                        TcSet = new List<TcSet>(), Calculation = new List<Calculation>()
                    };
                    var set = db.ViewsProperty.Where(x => x.ViewsID == views12.ViewsID).ToList();
                    foreach (var item in set)
                        model.TcSet.Add(item.TcSet);
                    ViewBag.TC = db.TechnicalCharacteristic.OrderBy(x=>x.TCName).ToList();
                    model.Calculation = db.ViewsCalculation.Where(x => x.ViewsID == views.ViewsID).Select(x => x.Calculation).ToList();
                    
                    return View(model);
                }
                if (TcSetID == null)
                {
                    ModelState.AddModelError("", "You have not selected any properties in the View");
                    //ViewBag.Lsystem = db.Lsystem.Where(x => x.LsystemID != 0);
                    Views views12 = db.Views.Find(views.ViewsID);
                    var model = new EditViewsVM
                    {
                        Views12 = views12,
                        TcSet = new List<TcSet>(),
                        Calculation =  new List<Calculation>()
                    };
                    var set = db.ViewsProperty.Where(x => x.ViewsID == views12.ViewsID).ToList();
                    foreach (var item in set)
                        model.TcSet.Add(db.TcSet.FirstOrDefault(x => x.TcSetID == item.TcSetID));
                    ViewBag.TC = db.TechnicalCharacteristic.OrderBy(x=>x.TCName).ToList();
                    model.Calculation = db.ViewsCalculation.Where(x => x.ViewsID == views.ViewsID).Select(x => x.Calculation).ToList();


                    return View(model);
                }
                views.ViewsName = editVM.Views12.ViewsName;
                views.DescriptionDE = editVM.Views12.DescriptionDE;
                views.DescriptionEN = editVM.Views12.DescriptionEN;
                views.ModifiedBy = User.Identity.Name;
                views.ModifiedOn = DateTime.Now;
                
                
                db.Entry(views).State = EntityState.Modified;
                db.Entry(views).Property(x => x.CreatedBy).IsModified = false;
                db.Entry(views).Property(x => x.CreatedOn).IsModified = false;
                

               
                
                var viewprop = db.ViewsProperty.Where(x => x.ViewsID == views.ViewsID).ToList();
                foreach (var item in viewprop)
                    db.ViewsProperty.Remove(item);
                var setname = new List<string>();
                foreach(var setid in TcSetID)
                {
                    
                    var set = db.TcSet.FirstOrDefault(y => y.TcSetID == setid).SetName;
                    if(!setname.Contains(set))
                    {
                        setname.Add(set);
                        var x = new ViewsProperty();
                        x.TcSetID = setid;
                        x.ViewsID = views.ViewsID;
                        db.ViewsProperty.Add(x);
                    }
                   
                }

                foreach (var item in db.ViewsCalculation.Where(x => x.ViewsID == views.ViewsID).ToList())
                    db.ViewsCalculation.Remove(item);
                foreach(var item in CalcID)
                {
                    var c = new ViewsCalculation
                    {
                        ViewsID = views.ViewsID,
                        CalculationID = item

                    };
                    db.ViewsCalculation.Add(c);
                }

                db.SaveChanges();
                return RedirectToAction("Index");
            
            }
            return View("Error");
        }
 // GET: Views/Edit/5
 public ActionResult Edit(int? id)
 {
     //ViewBag.Lsystem = db.Lsystem.Where(x => x.LsystemID != 0);
     if (id == null)
     {
         ViewBag.Error = "A null parameter was passed to the function";
         return View("Error");
     }
     Views views = db.Views.Find(id);
     var model = new EditViewsVM
     {
         Views12 = views,
         TcSet = new List<TcSet>(),
          Calculation = new List<Calculation>()
     };
     var set = db.ViewsProperty.Where(x => x.ViewsID == id).ToList();
     foreach (var item in set)
         model.TcSet.Add(item.TcSet);
     model.Calculation = db.ViewsCalculation.Where(x => x.ViewsID == id).Select(x=>x.Calculation).ToList();
     ViewBag.TC = db.TechnicalCharacteristic.OrderBy(x=>x.TCName).ToList();
     ViewBag.Calculation = db.Calculation.Where(x => !x.CalculationFormula.Contains("Length")).ToList();
     if (views == null)
     {
         ViewBag.Error = "The requested View does not exist";
         return View("Error");
     }
     return View(model);
 }