// Not  used : changed to Views Result
        public ActionResult ViewSystemValues(int LsystemID,int ViewsID)
        {
            try
            {
                Lsystem lsystem = db.Lsystem.FirstOrDefault(x => x.LsystemID == LsystemID);
                ViewBag.LsystemName = lsystem.LsystemName;
                ViewBag.ViewsName = db.Views.FirstOrDefault(x => x.ViewsID == ViewsID).ViewsName;
                Views views = db.Views.FirstOrDefault(x => x.ViewsID == ViewsID);
                var req_prop = db.ViewsProperty.Where(x => x.ViewsID == ViewsID).ToList().OrderBy(x => x.TcSetID);
                var req_set = new List<TcSet>();
                foreach (var item in req_prop)
                    req_set.Add(item.TcSet);
                var configlist = db.ConfigurationCollection.Where(x => x.LsystemID == LsystemID).ToList();
                var tcidlist = new List<int>();
                //foreach (var item in views.TechnicalCharacteristic)
                //    tcidlist.Add(item.TechnicalCharacteristicID);
                var opidlist = new List<int>();
                foreach (var item in tcidlist)
                {
                    foreach (var op in lsystem.Options)
                        if (op.TechnicalCharacteristicID == item)
                            opidlist.Add(op.OptionID);
                }
                var covlist = new List<Config_OptionVal>();

                foreach (var item in configlist)
                {
                    foreach (var opid in opidlist)
                    {
                        foreach (var c in db.Config_OptionVal)
                        {
                            if (c.OptionID == opid && c.ConfigurationCollectionID == item.ConfigurationCollectionID && !covlist.Contains(c))
                                covlist.Add(c);
                        }
                    }

                }


                var ovcombi = new List<List<int>>();

                var op_ov_list = new List<Tuple<int, int, List<int>>>();
                foreach (var con in configlist)
                {

                    foreach (var op in opidlist)
                    {
                        var ovidlist = new List<int>();
                        foreach (var cov in covlist)
                        {
                            if (cov.ConfigurationCollectionID == con.ConfigurationCollectionID && cov.OptionID == op)
                            {
                                ovidlist.Add(cov.OptionValueID);
                            }
                        }
                        op_ov_list.Add(new Tuple<int, int, List<int>>(con.ConfigurationCollectionID, op, ovidlist));
                    }

                }
                var ovrows = new List<List<String>>();

                var B = new List<String>();
                foreach (var config in configlist)
                {
                    var A = new List<String>();
                    int count = 0;
                    foreach (var item in op_ov_list)
                    {
                        if (item.Item1 == config.ConfigurationCollectionID)
                        {
                            if (count == 0)
                            {
                                foreach (var ov in item.Item3)

                                    A.Add(ov.ToString());
                                count++;
                            }
                            else
                            {
                                foreach (var ov in item.Item3)
                                    B.Add(ov.ToString());
                                A = Cartesian(A, B);
                            }

                        }
                    }
                    ovrows.Add(A.Distinct().ToList());

                }
                var distinctrows = new List<String>();
                foreach (var item in ovrows)
                {
                    foreach (var a in item)
                    {
                        if (!distinctrows.Contains(a))
                            distinctrows.Add(a);
                    }
                }

                var rowovidlist = new List<int[]>();
                foreach (var item in distinctrows)
                {
                    int i = 0;
                    string[] itemsplit = item.Split(new string[] { "delim" }, StringSplitOptions.None);
                    int[] opid = new int[itemsplit.Count()];
                    foreach (var x in itemsplit)
                        opid[i++] = int.Parse(x);
                    rowovidlist.Add(opid);
                }


                var model = new ModelToBePassed { TcSet = req_set, ViewsVM = new List<ViewsVM>() };
                model.TcSet = req_set;
                var r = new List<String[]>();
                var distinctr = new List<String[]>();
                foreach (var item in rowovidlist)
                {
                    var row = new String[req_set.Count()];
                    int i = 0;


                    foreach (var ovid in item)
                    {
                        var ov = db.OptionValue.FirstOrDefault(x => x.OptionValueID == ovid);

                        int count = 0;
                        foreach (var set in ov.SetValue.OrderBy(x => x.TcSet.TcSetID))
                        {
                            count++;
                            //Important part is commented
                            if (req_set.Any(x => x.TcSetID == set.TcSetID))
                            {
                                row[i++] = set.Value;

                                break;
                            }

                            //if (!req_set.Any(x => x.TcSetID == set.TcSetID))
                            //    row[i++] = "null";

                            //if (a.TcSetID == set.TcSetID)
                            //    row[i++] = set.Value;
                            else if (count == ov.SetValue.Count())
                                row[i++] = "no value";
                        }
                    }

                    r.Add(row);

                }

                foreach (var item in op_ov_list)
                {
                    var ov_list = new List<int>();

                }

                var stringlist = new List<String>();
                foreach (var item in r)
                {
                    string s = "delim";
                    foreach (var x in item)
                    {
                        if (x == null)
                            s = s + "no value" + "delim";
                        else
                            s = s + x + "delim";
                    }
                    s = string.Join("", s.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries));
                    stringlist.Add(s);
                }
                var distinctstringlist = stringlist.Distinct().ToList();



                distinctr = r.Distinct().ToList();

                foreach (var item in distinctstringlist)
                {
                    var row1 = new String[req_set.Count()];
                    row1 = item.Split(new string[] { "delim" }, StringSplitOptions.RemoveEmptyEntries);
                    var viewvm = new ViewsVM();
                    viewvm.row = row1;
                    model.ViewsVM.Add(viewvm);
                }

                return View(model);
            }
            catch(Exception e)
            {
                ViewBag.Error = e.Message;
                return View("Error");
            }
        }
        //To View the different values for the system in the View : Not required    
        public ActionResult ViewSystemValue (int LsystemID,int ViewsID)
        {
            try
            {


                var model = new List<ViewSystemValuesVM>();
                var lsystem = db.Lsystem.FirstOrDefault(x => x.LsystemID == LsystemID);
                ViewBag.LsystemName = lsystem.LsystemName;
                ViewBag.ViewsName = db.Views.FirstOrDefault(x => x.ViewsID == ViewsID).ViewsName;
                var viewslist = db.ViewsProperty.Where(x => x.ViewsID == ViewsID).ToList();
                var tclist = new List<TcSet>();
                var tcid = new List<int>();
                foreach (var item in viewslist)
                {
                    tclist.Add(db.TcSet.FirstOrDefault(x => x.TcSetID == item.TcSetID));
                    tcid.Add(item.TcSetID);
                }


                var optionlist = new List<Option>();
                foreach (var item in tclist)
                {
                    foreach (var op in db.Option.ToList())
                    {
                        if (op.TechnicalCharacteristicID == item.TechnicalCharacteristicID && op.LsystemID == LsystemID)
                            if (!optionlist.Contains(op))
                                optionlist.Add(op);
                    }

                }
                foreach (var item in optionlist)
                {
                    foreach (var ov in item.OptionValues)
                    {
                        foreach (var sv in ov.SetValue)
                        {
                            if (tclist.Any(p => p.TcSetID == sv.TcSetID))
                            {
                                var VM = new ViewSystemValuesVM();
                                VM.TcSetID = sv.TcSetID;
                                VM.Value = sv.Value;
                                model.Add(VM);
                            }
                        }
                    }
                }
                string[] myArray = new string[tclist.Count()];
                var model1 = new List<String[]>();
                int tclistcount = tclist.Count();
                int[] tcidcopy = new int[tclistcount];
                var serialize = new List<Tuple<int, List<string>>>();

                for (int i = 0; i < tcid.Count(); i++)
                {
                    var val = new List<string>();
                    foreach (var item in model)
                    {
                        if (tcid[i] == item.TcSetID)
                            val.Add(item.Value);

                    }
                    serialize.Add(new Tuple<int, List<string>>(tcid[i], val));
                }
                var rowval = new List<string>();
                int j = 0;
                var A = new List<String>();
                foreach (var item in serialize)
                {
                    if (j == 0)
                    {
                        A = item.Item2;
                        j = 1;

                    }
                    else
                        A = Cartesian(A, item.Item2);
                }

                ViewBag.A = A;

                var distinctlist = new List<String>();
                distinctlist = A.Distinct().ToList();

                var ViewsVM = new List<ViewsVM>();
                foreach (var item in distinctlist)
                {
                    var row = new ViewsVM();
                    row.row = item.Split(new string[] { "delim" }, StringSplitOptions.None);
                    ViewsVM.Add(row);

                }


                var modeltobepassed = new ModelToBePassed
                {
                    ViewsVM = ViewsVM,
                    TcSet = tclist
                };

                return View(modeltobepassed);
            }
            catch(Exception e)
            {
                ViewBag.Error = e.Message;
                return View("Error");
            }
        }