private void Designer_RefreshState(Models.TheGridDesignerViewModel v)
        {
            var mq = new BO.myQuery(v.Rec.j72Entity);
            var ce = BL.TheEntities.ByPrefix(mq.Prefix);

            v.Relations = BL.TheEntities.getApplicableRelations(mq.Prefix); //návazné relace
            v.Relations.Insert(0, new BO.EntityRelation()
            {
                TableName = ce.TableName, AliasSingular = ce.AliasSingular, SqlFrom = ce.SqlFromGrid, RelName = "a"
            });                                                                                                                                                 //primární tabulka a

            v.AllColumns = _colsProvider.AllColumns().ToList();
            v.AllColumns.RemoveAll(p => p.VisibleWithinEntityOnly != null && p.VisibleWithinEntityOnly.Contains(v.Rec.j72Entity.Substring(0, 3)) == false);    //nepatřičné kategorie/štítky

            v.SelectedColumns = _colsProvider.ParseTheGridColumns(mq.Prefix, v.Rec.j72Columns);
            v.lisQueryFields  = new BL.TheQueryFieldProvider(v.Rec.j72Entity.Substring(0, 3)).getPallete();
            v.lisPeriods      = _pp.getPallete();

            if (v.lisJ73 == null)
            {
                v.lisJ73 = new List <BO.j73TheGridQuery>();
            }
            foreach (var c in v.lisJ73.Where(p => p.j73Column != null))
            {
                if (v.lisQueryFields.Where(p => p.Field == c.j73Column).Count() > 0)
                {
                    var cc = v.lisQueryFields.Where(p => p.Field == c.j73Column).First();
                    c.FieldType    = cc.FieldType;
                    c.FieldEntity  = cc.SourceEntity;
                    c.MasterPrefix = cc.MasterPrefix;
                    c.MasterPid    = cc.MasterPid;
                }
            }
        }
        public IActionResult Designer(int j72id)
        {
            var v = new Models.TheGridDesignerViewModel();

            v.Rec = Factory.j72TheGridTemplateBL.Load(j72id);
            if (v.Rec == null)
            {
                return(RecNotFound(v));
            }
            else
            {
                if (v.Rec.j72IsSystem == false && v.Rec.j03ID == Factory.CurrentUser.pid)
                {
                    v.HasOwnerPermissions = true;
                    var mq = new BO.myQuery("j04UserRole");
                    mq.j72id = j72id;
                    var lis = Factory.j04UserRoleBL.GetList(mq);
                    v.j04IDs   = string.Join(",", lis.Select(p => p.pid));
                    v.j04Names = string.Join(",", lis.Select(p => p.j04Name));
                }

                v.lisJ73 = Factory.j72TheGridTemplateBL.GetList_j73(v.Rec.pid, v.Rec.j72Entity.Substring(0, 3)).ToList();
                foreach (var c in v.lisJ73)
                {
                    c.TempGuid = BO.BAS.GetGuid();
                }
                Designer_RefreshState(v);

                return(View(v));
            }
        }
        public IActionResult Designer(Models.TheGridDesignerViewModel v, bool restore2factory, string oper, string guid, string j72name)    //uložení grid sloupců
        {
            Designer_RefreshState(v);

            if (oper == "postback")
            {
                return(View(v));
            }
            if (oper == "saveas" && j72name != null)
            {
                var recJ72 = Factory.j72TheGridTemplateBL.Load(v.Rec.pid);
                var lisJ73 = Factory.j72TheGridTemplateBL.GetList_j73(recJ72.pid, recJ72.j72Entity.Substring(0, 3)).ToList();
                recJ72.j72IsSystem = false; recJ72.j72ID = 0; recJ72.pid = 0; recJ72.j72Name = j72name; recJ72.j03ID = Factory.CurrentUser.pid;
                List <int> j04ids   = BO.BAS.ConvertString2ListInt(v.j04IDs);
                var        intJ72ID = Factory.j72TheGridTemplateBL.Save(recJ72, lisJ73, j04ids, new List <int>());
                return(RedirectToActionPermanent("Designer", new { j72id = intJ72ID }));
            }
            if (oper == "rename" && j72name != null)
            {
                var recJ72 = Factory.j72TheGridTemplateBL.Load(v.Rec.pid);
                recJ72.j72Name = j72name;
                var intJ72ID = Factory.j72TheGridTemplateBL.Save(recJ72, null, null, null);
                return(RedirectToActionPermanent("Designer", new { j72id = intJ72ID }));
            }
            if (oper == "delete" && v.HasOwnerPermissions)
            {
                if (Factory.CBL.DeleteRecord("j72", v.Rec.pid) == "1")
                {
                    v.Rec.pid = Factory.j72TheGridTemplateBL.LoadState(v.Rec.j72Entity, Factory.CurrentUser.pid, v.Rec.j72MasterEntity).pid;
                    v.SetJavascript_CallOnLoad(v.Rec.pid);
                    return(View(v));
                }
            }
            if (oper == "changefield" && guid != null)
            {
                if (v.lisJ73.Where(p => p.TempGuid == guid).Count() > 0)
                {
                    var c = v.lisJ73.Where(p => p.TempGuid == guid).First();
                    c.j73Value      = null; c.j73ValueAlias = null;
                    c.j73ComboValue = 0;
                    c.j73Date1      = null; c.j73Date2 = null;
                    c.j73Num1       = 0; c.j73Num2 = 0;
                }
                return(View(v));
            }

            if (oper == "add_j73")
            {
                var c = new BO.j73TheGridQuery()
                {
                    TempGuid = BO.BAS.GetGuid(), j73Column = v.lisQueryFields.First().Field
                };
                c.FieldType   = v.lisQueryFields.Where(p => p.Field == c.j73Column).First().FieldType;
                c.FieldEntity = v.lisQueryFields.Where(p => p.Field == c.j73Column).First().SourceEntity;
                v.lisJ73.Add(c);

                return(View(v));
            }
            if (oper == "delete_j73")
            {
                v.lisJ73.First(p => p.TempGuid == guid).IsTempDeleted = true;
                return(View(v));
            }
            if (oper == "clear_j73")
            {
                v.lisJ73.Clear();
                return(View(v));
            }
            if (restore2factory == true)
            {
                Factory.CBL.DeleteRecord("j72", v.Rec.pid);
                v.SetJavascript_CallOnLoad(v.Rec.pid);
                return(View(v));
            }

            if (ModelState.IsValid)
            {
                var recJ72    = Factory.j72TheGridTemplateBL.Load(v.Rec.pid);
                var gridState = Factory.j72TheGridTemplateBL.LoadState(v.Rec.pid, Factory.CurrentUser.pid);

                recJ72.j72Columns              = v.Rec.j72Columns;
                recJ72.j72IsPublic             = v.Rec.j72IsPublic;
                recJ72.j72IsMainMenu           = v.Rec.j72IsMainMenu;
                gridState.j75Filter            = ""; //automaticky vyčistit aktuální sloupcový filtr
                gridState.j75CurrentPagerIndex = 0;
                gridState.j75CurrentRecordPid  = 0;

                if (gridState.j75SortDataField != null)
                {
                    if (recJ72.j72Columns.IndexOf(gridState.j75SortDataField) == -1) //vyčistit sort field, pokud se již nenachází ve vybraných sloupcích
                    {
                        gridState.j75SortDataField = "";
                        gridState.j75SortOrder     = "";
                    }
                }
                List <int> j04ids   = BO.BAS.ConvertString2ListInt(v.j04IDs);
                int        intJ72ID = Factory.j72TheGridTemplateBL.Save(recJ72, v.lisJ73.Where(p => p.j73ID > 0 || p.IsTempDeleted == false).ToList(), j04ids, new List <int>());
                if (intJ72ID > 0)
                {
                    Factory.j72TheGridTemplateBL.SaveState(gridState, Factory.CurrentUser.pid);
                    if (gridState.j72MasterEntity == null)
                    {
                        Factory.CBL.SetUserParam("masterview-j72id-" + gridState.j72Entity.Substring(0, 3), intJ72ID.ToString());
                    }

                    v.SetJavascript_CallOnLoad(v.Rec.pid);
                    return(View(v));
                }
                else
                {
                    return(View(v));
                }

                //return RedirectToActionPermanent("Designer", new { j72id = v.Rec.pid });
            }


            return(View(v));
        }