示例#1
0
        public IActionResult OnGet()
        {
            Init();

            var entMan = new EntityManager();
            var recMan = new RecordManager();

            #region << InitPage >>

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

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

            if (string.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }

            DomainRoot        = HttpContext.Request.Scheme + "://" + HttpContext.Request.Host;
            EntityMetaUrlRoot = "/api/v3/en_US/meta/entity/";

            EntityRecordUrlRoot = "/api/v3/en_US/record/";

            EQLUrlRoot = "/api/v3/en_US/eql";

            if (ErpEntity.Fields.Any())
            {
                SampleFieldId = ErpEntity.Fields[0].Id;
            }

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "web-api"));

            #endregion

            BeforeRender();
            return(Page());
        }
示例#2
0
        public void PageInit()
        {
            Init();

            ApiUrlRoot = PageContext.HttpContext.Request.Scheme + "://" + PageContext.HttpContext.Request.Host;

            #region << Init App >>
            var appServ = new AppService();
            App = appServ.GetApplication(RecordId ?? Guid.Empty);
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/application/l/list";
            }

            #region << Actions >>

            HeaderToolbar.AddRange(AdminPageUtils.GetAppAdminSubNav(App, "sitemap"));

            #endregion
        }
        public IActionResult OnGet()
        {
            var initResult = Init();

            if (initResult != null)
            {
                return(initResult);
            }

            InitPage();

            if (ErpEntity == null)
            {
                return(NotFound());
            }
            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "fields"));

            ErpRequestContext.PageContext = PageContext;

            BeforeRender();
            return(Page());
        }
示例#4
0
        public void PageInit()
        {
            #region << Init App >>
            var appServ = new AppService();
            App = appServ.GetApplication(RecordId ?? Guid.Empty);
            if (App != null)
            {
                Name        = App.Name;
                Label       = App.Label;
                Description = App.Description;
                IconClass   = App.IconClass;
                Author      = App.Author;
                Color       = App.Color;
                Weight      = App.Weight;
                if (App.Access != null && App.Access.Count > 0)
                {
                    Access = App.Access.Select(x => x.ToString()).ToList();
                }
            }
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/application/l/list";
            }

            #region << Init User Role Options >>
            var roles = new SecurityManager().GetAllRoles().OrderBy(x => x.Name).ToList();
            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption()
                {
                    Value = role.Id.ToString(),
                    Label = role.Name
                });
            }
            #endregion
            LocalNav = AdminPageUtils.GetAppAdminSubNav(App, "details");
        }
        public void PageInit()
        {
            var entMan = new EntityManager();
            var recMan = new RecordManager();

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;
            if (ErpEntity == null)
            {
                return;
            }

            if (!SecurityContext.HasEntityPermission(EntityPermission.Create, ErpEntity))
            {
                ErpEntity = null;
                return;
            }

            Fields = ErpEntity.Fields.OrderBy(x => x.Name).ToList();
            var idField = Fields.Single(x => x.Name == "id");

            Fields.Remove(idField);
            Fields = Fields.OrderBy(x => x.Name).ToList();
            Fields.Insert(0, idField);


            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/rl/data/l/";
            }

            HeaderActions.AddRange(new List <string>()
            {
                PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Save Record", formId: "CreateRecord"),
                PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: $"/sdk/objects/entity/r/{ErpEntity.Id}/rl/data/l/")
            });

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "data"));
        }
        public void PageInit()
        {
            Init();

            ApiUrlRoot = PageContext.HttpContext.Request.Scheme + "://" + PageContext.HttpContext.Request.Host;

            #region << Init Page >>
            var pageServ = new PageService();
            ErpPage = pageServ.GetPage(RecordId ?? Guid.Empty);

            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/page/l/list";
            }

            HeaderToolbar.AddRange(AdminPageUtils.GetPageAdminSubNav(ErpPage, "generated-body"));
            if (ErpPage != null)
            {
                PagePublicUrl = PageUtils.CalculatePageUrl(ErpPage.Id);
            }
        }
示例#7
0
        public void PageInit()
        {
            Init();

            #region << Init App >>
            var appServ = new AppService();
            App = appServ.GetApplication(RecordId ?? Guid.Empty);
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/application/l/list";
            }

            #region << Actions >>
            HeaderActions.Add($"<a href='/sdk/objects/page/c/create?returnUrl={HttpUtility.UrlEncode(CurrentUrl)}&Type=Application&AppId={(App != null ? App.Id.ToString() : "")}' class='btn btn-white btn-sm'><i class='fa fa-plus go-green'></i> CreatePage</a>");

            #endregion

            #region << Actions >>
            HeaderToolbar.AddRange(AdminPageUtils.GetAppAdminSubNav(App, "pages"));
            #endregion
        }
        public void PageInit()
        {
            Init();

            #region << Init Page >>
            var pageServ = new PageService();
            ErpPage = pageServ.GetPage(RecordId ?? Guid.Empty);
            if (ErpPage != null)
            {
                IsRazorBody = ErpPage.IsRazorBody;
                RazorBody   = ErpPage.RazorBody;
            }
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/page/l/list";
            }

            HeaderToolbar.AddRange(AdminPageUtils.GetPageAdminSubNav(ErpPage, "custom-body"));

            PagePublicUrl = PageUtils.CalculatePageUrl(ErpPage.Id);
        }
        public void PageInit()
        {
            Init();


            var entMan = new EntityManager();
            var relMan = new EntityRelationManager();

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;
            if (ErpEntity == null)
            {
                return;
            }

            var entityRelations = relMan.Read().Object.Where(x => x.TargetEntityId == ErpEntity.Id || x.OriginEntityId == ErpEntity.Id).ToList();

            Relation = entityRelations.SingleOrDefault(x => x.Id == RecordId);
            if (Relation == null)
            {
                return;
            }

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/rl/relations/r/{Relation.Id}/";
            }

            HeaderActions.AddRange(new List <string>()
            {
                PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Save Relation", formId: "ManageRecord"),
                PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: $"/sdk/objects/entity/r/{ErpEntity.Id}/rl/relations/r/{Relation.Id}/")
            });

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "relations"));

            TypeOptions = ModelExtensions.GetEnumAsSelectOptions <EntityRelationType>().FindAll(x => x.Value != "1").ToList();
        }
示例#10
0
        public void PageInit()
        {
            Init();

            #region << Init Page >>
            var pageServ = new PageService();
            ErpPage = pageServ.GetPage(RecordId ?? Guid.Empty);
            if (ErpPage != null)
            {
                Weight            = ErpPage.Weight;
                Label             = ErpPage.Label;
                LabelTranslations = ErpPage.LabelTranslations;
                Name        = ErpPage.Name;
                IconClass   = ErpPage.IconClass;
                System      = ErpPage.System;
                Type        = ErpPage.Type;
                AppId       = ErpPage.AppId;
                EntityId    = ErpPage.EntityId;
                AreaId      = ErpPage.AreaId;
                NodeId      = ErpPage.NodeId;
                IsRazorBody = ErpPage.IsRazorBody;
                Body        = ErpPage.Body;
                Layout      = ErpPage.Layout;
            }
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/page/l/list";
            }


            HeaderToolbar.AddRange(AdminPageUtils.GetPageAdminSubNav(ErpPage, "details"));

            PagePublicUrl = PageUtils.CalculatePageUrl(ErpPage.Id);
        }
示例#11
0
        public void PageInit()
        {
            Init();

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = "/sdk/objects/entity/l/list";
            }


            #region << Init Entity >>
            var entMan = new EntityManager();
            ErpEntity = entMan.ReadEntity(RecordId ?? Guid.Empty).Object;
            if (ErpEntity == null)
            {
                return;
            }

            if (ErpEntity.RecordScreenIdField != null)
            {
                var screenField = ErpEntity.Fields.FirstOrDefault(x => x.Id == ErpEntity.RecordScreenIdField);
                if (screenField != null)
                {
                    RecordScreenIdFieldName = screenField.Name;
                }
            }

            #endregion

            #region << Init RecordPermissions >>
            var valueGrid = new List <KeyStringList>();
            PermissionOptions = new List <SelectOption>()
            {
                new SelectOption("create", "create"),
                new SelectOption("read", "read"),
                new SelectOption("update", "update"),
                new SelectOption("delete", "delete")
            };

            var roles = AdminPageUtils.GetUserRoles();             //Special order is applied

            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                var keyValuesObj = new KeyStringList()
                {
                    Key    = role.Id.ToString(),
                    Values = new List <string>()
                };
                if (ErpEntity.RecordPermissions.CanCreate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("create");
                }
                if (ErpEntity.RecordPermissions.CanRead.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("read");
                }
                if (ErpEntity.RecordPermissions.CanUpdate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("update");
                }
                if (ErpEntity.RecordPermissions.CanDelete.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("delete");
                }

                valueGrid.Add(keyValuesObj);
            }
            RecordPermissions = JsonConvert.SerializeObject(valueGrid);
            #endregion

            #region << Actions >>

            if (ErpEntity.System)
            {
                HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.Disabled, label: "Delete locked", formId: "DeleteRecord", btnClass: "btn btn-white btn-sm", iconClass: "ti-trash", titleText: "System objects cannot be deleted"));
            }
            else
            {
                HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.ConfirmAndSubmitForm, label: "Delete Entity", formId: "DeleteRecord", btnClass: "btn btn-white btn-sm", iconClass: "ti-trash go-red"));
            };

            HeaderActions.Add($"<a href='/sdk/objects/entity/m/{(ErpEntity != null ? ErpEntity.Id : Guid.Empty)}/manage?returnUrl={HttpUtility.UrlEncode(CurrentUrl)}' class='btn btn-white btn-sm'><i class='ti-settings go-orange'></i> Manage</a>");

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "details"));

            #endregion
        }
示例#12
0
        public IActionResult OnGet()
        {
            var initResult = Init();

            if (initResult != null)
            {
                return(initResult);
            }

            #region << InitPage >>
            int           pager     = 0;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;

            ErpEntity = new EntityManager().ReadEntity(ParentRecordId ?? Guid.Empty).Object;

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

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }


            var pageSer = new PageService();
            var entMan  = new EntityManager();
            var appServ = new AppService();

            var pages    = pageSer.GetAll();
            var entities = entMan.ReadEntities().Object;
            var apps     = appServ.GetAllApplications();

            #region << Apply filters >>
            var submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            foreach (var filter in submittedFilters)
            {
                switch (filter.Name)
                {
                default:
                case "label":
                    if (filter.Type == FilterType.CONTAINS)
                    {
                        pages = pages.FindAll(x => x.Label.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant())).ToList();
                    }
                    break;

                case "name":
                    if (filter.Type == FilterType.CONTAINS)
                    {
                        pages = pages.FindAll(x => x.Name.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant())).ToList();
                    }
                    break;

                case "app":
                    if (filter.Type == FilterType.EQ)
                    {
                        var app = apps.FirstOrDefault(x => x.Name.ToLowerInvariant() == filter.Value.ToLowerInvariant());
                        if (app != null)
                        {
                            pages = pages.FindAll(x => x.AppId == app.Id).ToList();
                        }
                        else
                        {
                            pages = new List <ErpPage>();
                        }
                    }
                    break;

                case "entity":
                    if (filter.Type == FilterType.EQ)
                    {
                        var entity = entities.FirstOrDefault(x => x.Name.ToLowerInvariant() == filter.Value.ToLowerInvariant());
                        if (entity != null)
                        {
                            pages = pages.FindAll(x => x.EntityId == entity.Id).ToList();
                        }
                        else
                        {
                            pages = new List <ErpPage>();
                        }
                    }
                    break;

                case "type":
                    if (filter.Type == FilterType.CONTAINS)
                    {
                        foreach (var typeEnum in Enum.GetValues(typeof(PageType)).Cast <PageType>())
                        {
                            var enumDescription = typeEnum.GetLabel();
                            if (!enumDescription.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant()))
                            {
                                pages = pages.FindAll(x => x.Type != typeEnum).ToList();
                            }
                        }
                        //pages = pages.FindAll(x => x.Type == entity.Id).ToList();
                    }
                    break;

                case "system":
                    if (filter.Type == FilterType.EQ)
                    {
                        if (filter.Value == "true")
                        {
                            pages = pages.FindAll(x => x.System).ToList();
                        }
                        else if (filter.Value == "false")
                        {
                            pages = pages.FindAll(x => !x.System).ToList();
                        }
                    }
                    break;

                case "customized":
                    if (filter.Type == FilterType.EQ)
                    {
                        if (filter.Value == "true")
                        {
                            pages = pages.FindAll(x => x.IsRazorBody).ToList();
                        }
                        else if (filter.Value == "false")
                        {
                            pages = pages.FindAll(x => !x.IsRazorBody).ToList();
                        }
                    }
                    break;
                }
            }
            #endregion

            TotalCount = pages.Count;

            ReturnUrlEncoded = HttpUtility.UrlEncode(PageContext.HttpContext.Request.Path + PageContext.HttpContext.Request.QueryString);

            PageDescription = PageUtils.GenerateListPageDescription(PageContext.HttpContext, "", TotalCount);

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "pages"));
            #endregion

            #region << Create Columns >>

            Columns = new List <WvGridColumnMeta>()
            {
                new WvGridColumnMeta()
                {
                    Name  = "action",
                    Width = "1%"
                },
                new WvGridColumnMeta()
                {
                    Label      = "Label",
                    Name       = "label",
                    Sortable   = true,
                    Searchable = true
                },
                new WvGridColumnMeta()
                {
                    Label      = "Name",
                    Name       = "name",
                    Sortable   = true,
                    Searchable = true
                },
                new WvGridColumnMeta()
                {
                    Label = "App",
                    Name  = "app",
                    Width = "140px"
                },
                new WvGridColumnMeta()
                {
                    Label = "Entity",
                    Name  = "entity",
                    Width = "140px"
                },
                new WvGridColumnMeta()
                {
                    Label    = "Type",
                    Name     = "type",
                    Sortable = true,
                    Width    = "120px"
                },
                new WvGridColumnMeta()
                {
                    Label    = "system",
                    Name     = "system",
                    Sortable = true,
                    Width    = "80px"
                },
                new WvGridColumnMeta()
                {
                    Label    = "Customized",
                    Name     = "customized",
                    Sortable = true,
                    Width    = "80px"
                }
            };

            #endregion

            #region << Records >>
            pages = pages.FindAll(x => x.EntityId == ErpEntity.Id).ToList();
            switch (SortBy)
            {
            default:
            case "label":
                if (SortOrder == QuerySortType.Descending)
                {
                    pages = pages.OrderByDescending(x => x.Label).ToList();
                }
                else
                {
                    pages = pages.OrderBy(x => x.Label).ToList();
                }
                break;

            case "name":
                if (SortOrder == QuerySortType.Descending)
                {
                    pages = pages.OrderByDescending(x => x.Name).ToList();
                }
                else
                {
                    pages = pages.OrderBy(x => x.Name).ToList();
                }
                break;

            case "type":
                if (SortOrder == QuerySortType.Descending)
                {
                    pages = pages.OrderByDescending(x => x.Type).ToList();
                }
                else
                {
                    pages = pages.OrderBy(x => x.Type).ToList();
                }
                break;

            case "system":
                if (SortOrder == QuerySortType.Descending)
                {
                    pages = pages.OrderByDescending(x => x.System).ToList();
                }
                else
                {
                    pages = pages.OrderBy(x => x.System).ToList();
                }
                break;

            case "customized":
                if (SortOrder == QuerySortType.Descending)
                {
                    pages = pages.OrderByDescending(x => x.IsRazorBody).ToList();
                }
                else
                {
                    pages = pages.OrderBy(x => x.IsRazorBody).ToList();
                }
                break;
            }

            //Apply pager
            var skipPages = (Pager - 1) * PagerSize;
            pages = pages.Skip(skipPages).Take(PagerSize).ToList();

            foreach (var page in pages)
            {
                var record = new EntityRecord();
                record["action"] = $"<a class='btn btn-sm btn-outline-secondary' target='_blank' href='/sdk/objects/page/r/{page.Id}'><span class='fa fa-eye'></span></a>";
                record["label"]  = page.Label;
                record["name"]   = page.Name;
                record["app"]    = page.AppId != null?apps.First(x => x.Id == page.AppId).Name : "";

                record["entity"]     = page.EntityId != null?entities.First(x => x.Id == page.EntityId).Name : "";;
                record["type"]       = $"{page.Type.GetLabel()}";
                record["system"]     = page.System;
                record["customized"] = page.IsRazorBody;
                Records.Add(record);
            }
            #endregion


            BeforeRender();
            return(Page());
        }
示例#13
0
        public void InitPage()
        {
            Init();

            var entMan = new EntityManager();

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;
            if (ErpEntity == null)
            {
                return;
            }

            Field = ErpEntity.Fields.FirstOrDefault(x => x.Id == RecordId);
            if (Field == null)
            {
                return;
            }

            var allCards = AdminPageUtils.GetFieldCards();

            FieldCard = allCards.First(x => (string)x["type"] == ((int)Field.GetFieldType()).ToString());


            #region << Init RecordPermissions >>
            var valueGrid = new List <KeyStringList>();
            PermissionOptions = new List <SelectOption>()
            {
                new SelectOption("read", "read"),
                new SelectOption("update", "update")
            };

            var roles = AdminPageUtils.GetUserRoles();             //Special order is applied

            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                var keyValuesObj = new KeyStringList()
                {
                    Key    = role.Id.ToString(),
                    Values = new List <string>()
                };
                if (Field.Permissions.CanRead.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("read");
                }
                if (Field.Permissions.CanUpdate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("update");
                }
                valueGrid.Add(keyValuesObj);
            }
            FieldPermissions = JsonConvert.SerializeObject(valueGrid);
            #endregion

            #region << Actions >>
            if (Field.System)
            {
                HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.Disabled, label: "Delete Locked", formId: "DeleteRecord", iconClass: "ti-trash", titleText: "System objects cannot be deleted"));
            }
            else
            {
                HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.ConfirmAndSubmitForm, label: "Delete Field", formId: "DeleteRecord", btnClass: "btn btn-white btn-sm", iconClass: "ti-trash go-red"));
            };
            HeaderActions.Add($"<a href='/sdk/objects/entity/r/{(ErpEntity != null ? ErpEntity.Id : Guid.Empty)}/rl/fields/m/{Field.Id}' class='btn btn-white btn-sm'><i class='ti-settings go-orange'></i> Manage</a>");
            #endregion

            ApiUrlFieldInlineEdit = ErpSettings.ApiUrlTemplateFieldInlineEdit.Replace("{entityName}", ErpEntity.Name).Replace("{recordId}", (RecordId ?? Guid.Empty).ToString());
        }
示例#14
0
        public void OnGet()
        {
            Init();

            #region << InitPage >>

            HeaderToolbar.AddRange(AdminPageUtils.GetJobAdminSubNav("plan"));

            int           pager     = 0;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;


            #endregion

            #region << Create Columns >>

            Columns = new List <GridColumn>()
            {
                new GridColumn()
                {
                    Name  = "action",
                    Width = "140px"
                },
                new GridColumn()
                {
                    Label = "",
                    Name  = "status",
                    Width = "30px"
                },
                new GridColumn()
                {
                    Label = "name",
                    Name  = "name"
                },
                new GridColumn()
                {
                    Label = "type",
                    Name  = "type",
                    Width = "100px"
                },
                new GridColumn()
                {
                    Label = "last trigger",
                    Name  = "last_trigger",
                    Width = "140px"
                },
                new GridColumn()
                {
                    Label = "next trigger",
                    Name  = "next_trigger",
                    Width = "140px"
                },
            };

            #endregion

            #region << Records >>
            Records = ScheduleManager.Current.GetSchedulePlans().MapTo <OutputSchedulePlan>();
            Records = Records.OrderBy(x => x.Name).ThenByDescending(x => x.CreatedOn).ToList();

            #region << Apply Filters >>
            var submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            if (submittedFilters.Count > 0)
            {
                foreach (var filter in submittedFilters)
                {
                    switch (filter.Name)
                    {
                    case "name":
                        if (filter.Type == FilterType.CONTAINS)
                        {
                            Records = Records.FindAll(x => x.Name.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant())).ToList();
                        }
                        break;

                    default:
                        break;
                    }
                }
            }
            #endregion

            TotalCount = Records.Count;
            Records    = Records.Skip((Pager - 1) * PagerSize).Take(PagerSize).ToList();
            #endregion
        }
示例#15
0
        public IActionResult OnGet()
        {
            Init();

            var entMan = new EntityManager();
            var relMan = new EntityRelationManager();

            #region << InitPage >>
            int           pager     = 0;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

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

            if (string.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }

            var entityRelations = relMan.Read().Object.Where(x => x.TargetEntityId == ErpEntity.Id || x.OriginEntityId == ErpEntity.Id).ToList();

            #region << Apply filters >>
            var submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            if (submittedFilters.Count > 0)
            {
                foreach (var filter in submittedFilters)
                {
                    switch (filter.Name)
                    {
                    case "name":
                        if (filter.Type == FilterType.CONTAINS)
                        {
                            entityRelations = entityRelations.FindAll(x => x.Name.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant())).ToList();
                        }
                        break;
                    }
                }
            }
            #endregion

            entityRelations = entityRelations.OrderBy(x => x.Name).ToList();
            TotalCount      = entityRelations.Count;

            ReturnUrlEncoded = HttpUtility.UrlEncode(PageUtils.GetCurrentUrl(PageContext.HttpContext));

            PageDescription = PageUtils.GenerateListPageDescription(PageContext.HttpContext, "", TotalCount);
            #endregion

            #region << Create Columns >>

            Columns = new List <GridColumn>()
            {
                new GridColumn()
                {
                    Name  = "action",
                    Width = "1%"
                },
                new GridColumn()
                {
                    Label      = "Name",
                    Name       = "name",
                    Sortable   = true,
                    Searchable = true
                },
                new GridColumn()
                {
                    Label      = "Origin",
                    Name       = "origin",
                    Sortable   = false,
                    Searchable = false,
                    Width      = "25%"
                },
                new GridColumn()
                {
                    Label      = "Target",
                    Name       = "target",
                    Sortable   = false,
                    Searchable = false,
                    Width      = "25%",
                },
            };

            #endregion

            #region << Records >>
            //Apply sort
            if (!String.IsNullOrWhiteSpace(SortBy))
            {
                switch (SortBy)
                {
                case "name":
                    if (SortOrder == QuerySortType.Descending)
                    {
                        entityRelations = entityRelations.OrderByDescending(x => x.Name).ToList();
                    }
                    else
                    {
                        entityRelations = entityRelations.OrderBy(x => x.Name).ToList();
                    }
                    break;

                default:
                    break;
                }
            }

            //Apply pager
            var skipPages = (Pager - 1) * PagerSize;
            entityRelations = entityRelations.Skip(skipPages).Take(PagerSize).ToList();

            const string OneToOne   = " <span class='badge badge-primary badge-inverse' title='One to One' style='margin-left:5px;'>1 : 1</span>";
            const string OneToMany  = " <span class='badge badge-primary badge-inverse' title='One to Many' style='margin-left:5px;'>1 : N</span>";
            const string ManyToMany = " <span class='badge badge-primary badge-inverse' title='Many to Many' style='margin-left:5px;'>N : N</span>";

            foreach (var relation in entityRelations)
            {
                var nameColumnText = relation.Name + (relation.System ? " <i class='fa fa-fw fa-lock'></i>" : "");
                switch (relation.RelationType)
                {
                case EntityRelationType.OneToOne:
                    nameColumnText = nameColumnText + OneToOne;
                    break;

                case EntityRelationType.OneToMany:
                    nameColumnText = nameColumnText + OneToMany;
                    break;

                case EntityRelationType.ManyToMany:
                    nameColumnText = nameColumnText + ManyToMany;
                    break;
                }


                var originColumnText = $"<div><span class='go-gray'>Entity: </span> {relation.OriginEntityName}</div><div><span class='go-gray'>Field: </span> {relation.OriginFieldName}</div>";
                var targetColumnText = $"<div><span class='go-gray'>Entity: </span> {relation.TargetEntityName}</div><div><span class='go-gray'>Field: </span> {relation.TargetFieldName}</div>";

                var record = new EntityRecord();
                record["action"] = $"<a class='btn btn-sm btn-white' title='view relation details' href='/sdk/objects/entity/r/{ErpEntity.Id}/rl/relations/r/{relation.Id}?returnUrl={ReturnUrlEncoded}'><span class='ti-eye'></span></a>";
                record["name"]   = nameColumnText;
                record["origin"] = originColumnText;
                record["target"] = targetColumnText;
                Records.Add(record);
            }
            #endregion

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "relations"));

            ErpRequestContext.PageContext = PageContext;

            return(Page());
        }
示例#16
0
        public IActionResult OnGet()
        {
            Init();

            var entMan = new EntityManager();
            var recMan = new RecordManager();

            #region << InitPage >>
            int           pager     = 1;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

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

            ReadAccess   = SecurityContext.HasEntityPermission(EntityPermission.Read, ErpEntity);
            CreateAccess = SecurityContext.HasEntityPermission(EntityPermission.Create, ErpEntity);
            UpdateAccess = SecurityContext.HasEntityPermission(EntityPermission.Update, ErpEntity);
            DeleteAccess = SecurityContext.HasEntityPermission(EntityPermission.Delete, ErpEntity);

            if (string.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }

            Fields = ErpEntity.Fields.OrderBy(x => x.Name).ToList();
            var idField = Fields.Single(x => x.Name == "id");
            Fields.Remove(idField);
            Fields = Fields.OrderBy(x => x.Name).ToList();
            Fields.Insert(0, idField);

            List <QueryObject> filterQueries = new List <QueryObject>();

            #region << Process filters >>

            var submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            if (submittedFilters.Count > 0)
            {
                foreach (var filter in submittedFilters)
                {
                    if (!ErpEntity.Fields.Any(x => x.Name == filter.Name))
                    {
                        continue;
                    }

                    switch (filter.Type)
                    {
                    case FilterType.EQ:
                        filterQueries.Add(EntityQuery.QueryEQ(filter.Name, filter.Value));
                        break;

                    case FilterType.CONTAINS:
                        filterQueries.Add(EntityQuery.QueryContains(filter.Name, filter.Value));
                        break;

                    case FilterType.FTS:
                        filterQueries.Add(EntityQuery.QueryFTS(filter.Name, filter.Value));
                        break;

                    case FilterType.STARTSWITH:
                        filterQueries.Add(EntityQuery.QueryStartsWith(filter.Name, filter.Value));
                        break;

                    case FilterType.REGEX:
                        filterQueries.Add(EntityQuery.QueryRegex(filter.Name, filter.Value));
                        break;
                    }
                }
            }
            #endregion


            #region << Process Sort >>

            var sort = new List <QuerySortObject> {
                new QuerySortObject("id", QuerySortType.Ascending)
            };
            if (!String.IsNullOrWhiteSpace(SortBy) && Fields.Any(x => x.Name == SortBy))
            {
                sort = new List <QuerySortObject> {
                    new QuerySortObject(SortBy, SortOrder == QuerySortType.Ascending ? QuerySortType.Ascending : QuerySortType.Descending)
                }
            }
            ;

            #endregion

            if (!ReadAccess)
            {
                Records    = new List <EntityRecord>();
                TotalCount = 0;

                Validation.Message = "You have no permissions to view records.";
                Validation.Errors.Add(new ValidationError("", "You have no permissions to view records."));
            }
            else
            {
                EntityQuery enQuery = null;

                if (filterQueries.Any())
                {
                    enQuery = new EntityQuery(ErpEntity.Name, query: EntityQuery.QueryAND(filterQueries.ToArray()), sort: sort.ToArray(), skip: (pager - 1) * PagerSize, limit: PagerSize);
                }
                else
                {
                    enQuery = new EntityQuery(ErpEntity.Name, sort: sort.ToArray(), skip: (pager - 1) * PagerSize, limit: PagerSize);
                }

                var queryResponse = recMan.Find(enQuery);
                if (!queryResponse.Success)
                {
                    throw new Exception(queryResponse.Message);
                }

                Records    = queryResponse.Object.Data;
                TotalCount = (int)recMan.Count(enQuery).Object;
            }

            ReturnUrlEncoded = HttpUtility.UrlEncode(PageUtils.GetCurrentUrl(PageContext.HttpContext));
            PageDescription  = PageUtils.GenerateListPageDescription(PageContext.HttpContext, "", TotalCount);
            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "data"));

            #endregion

            #region << Create Columns >>

            Columns.Add(new GridColumn()
            {
                Name       = "",
                Label      = "",
                Width      = "90px",
                Sortable   = false,
                Searchable = false
            });

            foreach (var field in Fields)
            {
                var fieldAccess            = GetFieldAccess(field);
                var searchAndSortAvailable = field.Searchable && (fieldAccess == FieldAccess.Full || fieldAccess == FieldAccess.ReadOnly);
                var column = new GridColumn()
                {
                    Name       = field.Name,
                    Label      = field.Label,
                    Sortable   = searchAndSortAvailable,
                    Searchable = searchAndSortAvailable
                };

                if (field.GetFieldType() == FieldType.GuidField)
                {
                    column.Width = "1%";
                }

                Columns.Add(column);
            }

            #endregion

            #region << Filters >>

            foreach (var field in Fields)
            {
                //remove fields with no access from search
                var fieldAccess = GetFieldAccess(field);
                var searchable  = field.Searchable && (fieldAccess == FieldAccess.Full || fieldAccess == FieldAccess.ReadOnly);
                if (!searchable)
                {
                    continue;
                }

                if (field.Name == "id")
                {
                    dynamic filterObj = new ExpandoObject();
                    filterObj.Name         = field.Name;
                    filterObj.Label        = field.Label;
                    filterObj.Type         = FilterType.EQ;
                    filterObj.AllowedTypes = new List <FilterType> {
                        FilterType.EQ
                    };
                    Filters.Add(filterObj);
                }
                else if (field.Searchable)
                {
                    dynamic filterObj = new ExpandoObject();
                    filterObj.Name         = field.Name;
                    filterObj.Label        = field.Label;
                    filterObj.Type         = FilterType.EQ;
                    filterObj.AllowedTypes = new List <FilterType> {
                        FilterType.EQ, FilterType.NOT
                    };

                    var fieldType = field.GetFieldType();
                    if (fieldType == FieldType.TextField || fieldType == FieldType.MultiLineTextField ||
                        fieldType == FieldType.UrlField || fieldType == FieldType.EmailField || fieldType == FieldType.HtmlField ||
                        fieldType == FieldType.SelectField || fieldType == FieldType.MultiSelectField)
                    {
                        filterObj.AllowedTypes.Add(FilterType.REGEX);
                        filterObj.AllowedTypes.Add(FilterType.FTS);
                        filterObj.AllowedTypes.Add(FilterType.STARTSWITH);
                        filterObj.AllowedTypes.Add(FilterType.CONTAINS);
                    }

                    Filters.Add(filterObj);
                }
            }

            #endregion

            return(Page());
        }
示例#17
0
        public IActionResult OnPost()
        {
            if (!ModelState.IsValid)
            {
                throw new Exception("Antiforgery check failed.");
            }

            InitPage();

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

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{RecordId}/rl/fields/c/select";
            }

            //empty html input is not posted, so we init it with string.empty
            if (DefaultValue == null)
            {
                DefaultValue = string.Empty;
            }

            var entMan = new EntityManager();

            try
            {
                var newFieldId = Guid.NewGuid();
                if (Id != null)
                {
                    newFieldId = Id.Value;
                }

                var        response = new FieldResponse();
                InputField input    = null;
                switch (Type)
                {
                case FieldType.AutoNumberField:
                {
                    decimal defaultDecimal = 1;
                    if (Decimal.TryParse(DefaultValue, out decimal result))
                    {
                        defaultDecimal = result;
                    }

                    input = new InputAutoNumberField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultDecimal,
                        StartingNumber  = StartingNumber,
                        DisplayFormat   = DisplayFormat,
                        EnableSecurity  = EnableSecurity
                    };
                }
                break;

                case FieldType.CheckboxField:
                {
                    bool?defaultValue = null;
                    if (Boolean.TryParse(DefaultValue, out bool result))
                    {
                        defaultValue = result;
                    }
                    input = new InputCheckboxField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity
                    };
                }
                break;

                case FieldType.CurrencyField:
                {
                    decimal?defaultDecimal = null;
                    if (Decimal.TryParse(DefaultValue, out decimal result))
                    {
                        defaultDecimal = result;
                    }
                    input = new InputCurrencyField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultDecimal,
                        EnableSecurity  = EnableSecurity,
                        MinValue        = MinValue,
                        MaxValue        = MaxValue,
                        Currency        = Helpers.GetCurrencyType(CurrencyCode)
                    };
                }
                break;

                case FieldType.DateField:
                {
                    DateTime?defaultValue = null;
                    if (DateTime.TryParse(DefaultValue, out DateTime result))
                    {
                        defaultValue = result;
                    }
                    input = new InputDateField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        Format          = Format,
                        UseCurrentTimeAsDefaultValue = UseCurrentTimeAsDefaultValue
                    };
                }
                break;

                case FieldType.DateTimeField:
                {
                    DateTime?defaultValue = null;
                    if (DateTime.TryParse(DefaultValue, out DateTime result))
                    {
                        defaultValue = result;
                    }
                    input = new InputDateTimeField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        Format          = Format,
                        UseCurrentTimeAsDefaultValue = UseCurrentTimeAsDefaultValue
                    };
                }
                break;

                case FieldType.EmailField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputEmailField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        MaxLength       = MaxLength
                    };
                }
                break;

                case FieldType.FileField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputFileField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity
                    };
                }
                break;

                case FieldType.HtmlField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputHtmlField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity
                    };
                }
                break;

                case FieldType.ImageField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputImageField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity
                    };
                }
                break;

                case FieldType.MultiLineTextField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputMultiLineTextField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        MaxLength       = MaxLength
                    };
                }
                break;

                case FieldType.MultiSelectField:
                {
                    var selectOptions      = (SelectOptions ?? string.Empty).Split(Environment.NewLine);
                    var defaultOptions     = (DefaultValue ?? string.Empty).Split(Environment.NewLine);
                    var multiSelectOptions = new List <SelectOption>();
                    var defaultValues      = new List <string>();

                    foreach (var option in selectOptions)
                    {
                        if (!String.IsNullOrWhiteSpace(option))
                        {
                            var optionArray = option.Split(',');
                            var key         = "";
                            var value       = "";
                            var iconClass   = "";
                            var color       = "";
                            if (optionArray.Length > 0 && !String.IsNullOrWhiteSpace(optionArray[0]))
                            {
                                key = optionArray[0].Trim().ToLowerInvariant();
                            }
                            if (optionArray.Length > 1 && !String.IsNullOrWhiteSpace(optionArray[1]))
                            {
                                value = optionArray[1].Trim();
                            }
                            else if (optionArray.Length > 0 && !String.IsNullOrWhiteSpace(optionArray[0]))
                            {
                                value = key;
                            }
                            if (optionArray.Length > 2 && !String.IsNullOrWhiteSpace(optionArray[2]))
                            {
                                iconClass = optionArray[2].Trim();
                            }
                            if (optionArray.Length > 3 && !String.IsNullOrWhiteSpace(optionArray[3]))
                            {
                                color = optionArray[3].Trim();
                            }
                            if (!String.IsNullOrWhiteSpace(key) && !String.IsNullOrWhiteSpace(value))
                            {
                                multiSelectOptions.Add(new SelectOption()
                                    {
                                        Value     = key,
                                        Label     = value,
                                        IconClass = iconClass,
                                        Color     = color
                                    });
                            }
                        }
                    }

                    foreach (var option in defaultOptions)
                    {
                        var fixedOption = option.Trim().ToLowerInvariant();
                        if (!String.IsNullOrWhiteSpace(option) && multiSelectOptions.Any(x => x.Value == fixedOption))
                        {
                            defaultValues.Add(fixedOption);
                        }
                        else if (!String.IsNullOrWhiteSpace(option) && !multiSelectOptions.Any(x => x.Value == fixedOption))
                        {
                            Validation.Errors.Add(new ValidationError("DefaultValue", "one or more of the default values are not found as select options"));
                            throw Validation;
                        }
                    }

                    input = new InputMultiSelectField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        EnableSecurity  = EnableSecurity,
                        Options         = multiSelectOptions,
                        DefaultValue    = defaultValues
                    };
                }
                break;

                case FieldType.NumberField:
                {
                    decimal?defaultDecimal = null;
                    if (Decimal.TryParse(DefaultValue, out decimal result))
                    {
                        defaultDecimal = result;
                    }
                    input = new InputNumberField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultDecimal,
                        EnableSecurity  = EnableSecurity,
                        MinValue        = MinValue,
                        MaxValue        = MaxValue,
                        DecimalPlaces   = DecimalPlaces
                    };
                }
                break;

                case FieldType.PasswordField:
                {
                    input = new InputPasswordField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        MinLength       = MinLength,
                        Encrypted       = Encrypted,
                        EnableSecurity  = EnableSecurity,
                        MaxLength       = MaxLength
                    };
                }
                break;

                case FieldType.PercentField:
                {
                    decimal?defaultDecimal = null;
                    if (Decimal.TryParse(DefaultValue, out decimal result))
                    {
                        defaultDecimal = result;
                    }
                    input = new InputNumberField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultDecimal,
                        EnableSecurity  = EnableSecurity,
                        MinValue        = MinValue,
                        MaxValue        = MaxValue,
                        DecimalPlaces   = DecimalPlaces
                    };
                }
                break;

                case FieldType.PhoneField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputPhoneField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        MaxLength       = MaxLength
                    };
                }
                break;

                case FieldType.GuidField:
                {
                    Guid?defaultGuid = null;
                    if (Guid.TryParse(DefaultValue, out Guid result))
                    {
                        defaultGuid = result;
                    }
                    input = new InputGuidField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultGuid,
                        EnableSecurity  = EnableSecurity,
                        GenerateNewId   = GenerateNewId
                    };
                }
                break;

                case FieldType.SelectField:
                {
                    var selectOptions      = SelectOptions.Split(Environment.NewLine);
                    var modelSelectOptions = new List <SelectOption>();

                    foreach (var option in selectOptions)
                    {
                        if (!String.IsNullOrWhiteSpace(option))
                        {
                            var optionArray = option.Split(',');
                            var key         = "";
                            var value       = "";
                            var iconClass   = "";
                            var color       = "";
                            if (optionArray.Length > 0 && !String.IsNullOrWhiteSpace(optionArray[0]))
                            {
                                key = optionArray[0].Trim().ToLowerInvariant();
                            }
                            if (optionArray.Length > 1 && !String.IsNullOrWhiteSpace(optionArray[1]))
                            {
                                value = optionArray[1].Trim();
                            }
                            else if (optionArray.Length > 0 && !String.IsNullOrWhiteSpace(optionArray[0]))
                            {
                                value = key;
                            }
                            if (optionArray.Length > 2 && !String.IsNullOrWhiteSpace(optionArray[2]))
                            {
                                iconClass = optionArray[2].Trim();
                            }
                            if (optionArray.Length > 3 && !String.IsNullOrWhiteSpace(optionArray[3]))
                            {
                                color = optionArray[3].Trim();
                            }
                            if (!String.IsNullOrWhiteSpace(key) && !String.IsNullOrWhiteSpace(value))
                            {
                                modelSelectOptions.Add(new SelectOption()
                                    {
                                        Value     = key,
                                        Label     = value,
                                        IconClass = iconClass,
                                        Color     = color
                                    });
                            }
                        }
                    }

                    DefaultValue = DefaultValue.Trim().ToLowerInvariant();

                    if (!String.IsNullOrWhiteSpace(DefaultValue) && !modelSelectOptions.Any(x => x.Value == DefaultValue))
                    {
                        Validation.Errors.Add(new ValidationError("DefaultValue", "one or more of the default values are not found as select options"));
                        throw Validation;
                    }

                    input = new InputSelectField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = DefaultValue,
                        EnableSecurity  = EnableSecurity,
                        Options         = modelSelectOptions
                    };
                }
                break;

                case FieldType.UrlField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputUrlField()
                    {
                        Id                    = newFieldId,
                        Name                  = Name,
                        Label                 = Label,
                        Required              = Required,
                        Description           = Description,
                        Unique                = Unique,
                        HelpText              = HelpText,
                        System                = System,
                        PlaceholderText       = PlaceholderText,
                        Searchable            = Searchable,
                        DefaultValue          = defaultValue,
                        EnableSecurity        = EnableSecurity,
                        MaxLength             = MaxLength,
                        OpenTargetInNewWindow = OpenTargetInNewWindow
                    };
                }
                break;

                case FieldType.TextField:
                {
                    string defaultValue = null;
                    if (DefaultValue.ToLowerInvariant() != "null")
                    {
                        defaultValue = DefaultValue;
                    }

                    input = new InputTextField()
                    {
                        Id              = newFieldId,
                        Name            = Name,
                        Label           = Label,
                        Required        = Required,
                        Description     = Description,
                        Unique          = Unique,
                        HelpText        = HelpText,
                        System          = System,
                        PlaceholderText = PlaceholderText,
                        Searchable      = Searchable,
                        DefaultValue    = defaultValue,
                        EnableSecurity  = EnableSecurity,
                        MaxLength       = MaxLength
                    };
                }
                break;

                default:
                    throw new Exception("Field Type not recognized");
                }

                var recordPermissionsKeyValues = JsonConvert.DeserializeObject <List <KeyStringList> >(FieldPermissions);
                input.Permissions           = new FieldPermissions();
                input.Permissions.CanRead   = new List <Guid>();
                input.Permissions.CanUpdate = new List <Guid>();


                foreach (var role in recordPermissionsKeyValues)
                {
                    var roleId = Guid.Empty;
                    if (Guid.TryParse(role.Key, out Guid result))
                    {
                        roleId = result;
                    }
                    if (roleId != Guid.Empty)
                    {
                        if (role.Values.Contains("read"))
                        {
                            input.Permissions.CanRead.Add(roleId);
                        }
                        if (role.Values.Contains("update"))
                        {
                            input.Permissions.CanUpdate.Add(roleId);
                        }
                    }
                }

                response = entMan.CreateField(ErpEntity.Id, input);
                if (!response.Success)
                {
                    var exception = new ValidationException(response.Message);
                    exception.Errors = response.Errors.MapTo <ValidationError>();
                    throw exception;
                }

                // because of https://github.com/aspnet/Mvc/issues/6711, i added TempDataExtensions int
                // WebVella.Erp.Web.Utils and using Put and Get<> instead of
                // TempData["ScreenMessage"] = new ScreenMessage() { Message = "Field created successfully" };
                TempData.Put("ScreenMessage", new ScreenMessage()
                {
                    Message = "Field created successfully"
                });
                return(Redirect($"/sdk/objects/entity/r/{ErpEntity.Id}/rl/fields/l"));
            }
            catch (ValidationException ex)
            {
                Validation.Message = ex.Message;
                Validation.Errors  = ex.Errors;
            }
            catch (Exception ex)
            {
                Validation.Message = ex.Message;
                Validation.Errors.Add(new ValidationError("", ex.Message, isSystem: true));
            }

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "fields"));

            ErpRequestContext.PageContext = PageContext;

            BeforeRender();
            return(Page());
        }
示例#18
0
        public IActionResult OnGet()
        {
            var initResult = Init();

            if (initResult != null)
            {
                return(initResult);
            }

            InitPage();

            ErpRequestContext.PageContext = PageContext;

            EntityManager entMan = new EntityManager();


            Label       = ExistingEntity.Label;
            LabelPlural = ExistingEntity.LabelPlural;
            Color       = ExistingEntity.Color;
            IconName    = ExistingEntity.IconName;
            this.System = ExistingEntity.System;

            #region << Init RecordPermissions >>
            var valueGrid = new List <KeyStringList>();
            PermissionOptions = new List <SelectOption>()
            {
                new SelectOption("create", "create"),
                new SelectOption("read", "read"),
                new SelectOption("update", "update"),
                new SelectOption("delete", "delete")
            };

            var roles = AdminPageUtils.GetUserRoles();             //Special order is applied

            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                var keyValuesObj = new KeyStringList()
                {
                    Key    = role.Id.ToString(),
                    Values = new List <string>()
                };
                if (ExistingEntity.RecordPermissions.CanCreate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("create");
                }
                if (ExistingEntity.RecordPermissions.CanRead.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("read");
                }
                if (ExistingEntity.RecordPermissions.CanUpdate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("update");
                }
                if (ExistingEntity.RecordPermissions.CanDelete.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("delete");
                }

                valueGrid.Add(keyValuesObj);
            }
            RecordPermissions = JsonConvert.SerializeObject(valueGrid);
            #endregion

            BeforeRender();
            return(Page());
        }
示例#19
0
        public void PageInit()
        {
            #region << Init Entity >>
            var entMan = new EntityManager();
            ErpEntity = entMan.ReadEntity(RecordId ?? Guid.Empty).Object;
            if (ErpEntity != null && PageContext.HttpContext.Request.Method == "GET")
            {
                Name                = ErpEntity.Name;
                Label               = ErpEntity.Label;
                LabelPlural         = ErpEntity.LabelPlural;
                System              = ErpEntity.System;
                IconName            = ErpEntity.IconName;
                Color               = ErpEntity.Color;
                RecordScreenIdField = ErpEntity.RecordScreenIdField;

                foreach (var field in ErpEntity.Fields)
                {
                    FieldOptions.Add(new SelectOption()
                    {
                        Value = field.Id.ToString(),
                        Label = field.Name
                    });
                }
            }
            #endregion

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }


            #region << Init RecordPermissions >>
            var valueGrid = new List <KeyStringList>();
            PermissionOptions = new List <SelectOption>()
            {
                new SelectOption("create", "create"),
                new SelectOption("read", "read"),
                new SelectOption("update", "update"),
                new SelectOption("delete", "delete")
            };

            var roles = AdminPageUtils.GetUserRoles();             //Special order is applied

            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                var keyValuesObj = new KeyStringList()
                {
                    Key    = role.Id.ToString(),
                    Values = new List <string>()
                };
                if (ErpEntity.RecordPermissions.CanCreate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("create");
                }
                if (ErpEntity.RecordPermissions.CanRead.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("read");
                }
                if (ErpEntity.RecordPermissions.CanUpdate.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("update");
                }
                if (ErpEntity.RecordPermissions.CanDelete.Contains(role.Id))
                {
                    keyValuesObj.Values.Add("delete");
                }

                valueGrid.Add(keyValuesObj);
            }
            if (HttpContext.Request.Method == "GET")
            {
                RecordPermissions = JsonConvert.SerializeObject(valueGrid);
            }

            #endregion

            #region << Actions >>
            HeaderActions.AddRange(new List <string>()
            {
                PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Save Entity", formId: "ManageRecord"),
                PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: ReturnUrl, btnClass: "btn btn-sm btn-outline-secondary ml-1")
            });

            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "details"));

            #endregion
        }
示例#20
0
        public IActionResult OnGet()
        {
            Init();

            var entMan = new EntityManager();

            #region << InitPage >>
            int           pager     = 0;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

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

            if (String.IsNullOrWhiteSpace(ReturnUrl))
            {
                ReturnUrl = $"/sdk/objects/entity/r/{ErpEntity.Id}/";
            }

            var allFields = ErpEntity.Fields;

            #region << Apply filters >>
            var submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            if (submittedFilters.Count > 0)
            {
                foreach (var filter in submittedFilters)
                {
                    switch (filter.Name)
                    {
                    case "name":
                        if (filter.Type == FilterType.CONTAINS)
                        {
                            allFields = allFields.FindAll(x => x.Name.ToLowerInvariant().Contains(filter.Value.ToLowerInvariant())).ToList();
                        }
                        break;
                    }
                }
            }
            #endregion

            allFields  = allFields.OrderBy(x => x.Name).ToList();
            TotalCount = allFields.Count;

            ReturnUrlEncoded = HttpUtility.UrlEncode(PageUtils.GetCurrentUrl(PageContext.HttpContext));

            PageDescription = PageUtils.GenerateListPageDescription(PageContext.HttpContext, "", TotalCount);
            #endregion

            #region << Create Columns >>

            Columns = new List <GridColumn>()
            {
                new GridColumn()
                {
                    Name  = "action",
                    Width = "1%"
                },
                new GridColumn()
                {
                    Label      = "Name",
                    Name       = "name",
                    Sortable   = true,
                    Searchable = true
                },
                new GridColumn()
                {
                    Label = "Type",
                    Name  = "type",
                    Width = "120px"
                },
                new GridColumn()
                {
                    Label = "System",
                    Name  = "system",
                    Width = "1%"
                },
                new GridColumn()
                {
                    Label = "Required",
                    Name  = "required",
                    Width = "1%"
                },
                new GridColumn()
                {
                    Label = "Unique",
                    Name  = "unique",
                    Width = "80px"
                },
                new GridColumn()
                {
                    Label = "Searchable",
                    Name  = "searchable",
                    Width = "1%"
                },
            };

            #endregion

            #region << Records >>
            //Apply sort
            if (!String.IsNullOrWhiteSpace(SortBy))
            {
                switch (SortBy)
                {
                case "name":
                    if (SortOrder == QuerySortType.Descending)
                    {
                        allFields = allFields.OrderByDescending(x => x.Name).ToList();
                    }
                    else
                    {
                        allFields = allFields.OrderBy(x => x.Name).ToList();
                    }
                    break;

                default:
                    break;
                }
            }

            //Apply pager
            var skipPages = (Pager - 1) * PagerSize;
            allFields = allFields.Skip(skipPages).Take(PagerSize).ToList();

            foreach (var field in allFields)
            {
                var record = new EntityRecord();
                record["action"]     = $"<a class='btn btn-sm btn-white' title='App details' href='/sdk/objects/entity/r/{ErpEntity.Id}/rl/fields/r/{field.Id}?returnUrl={ReturnUrlEncoded}'><span class='ti-eye'></span></a>";
                record["name"]       = field.Name;
                record["type"]       = field.GetFieldType().ToString();
                record["system"]     = field.System;
                record["required"]   = field.Required;
                record["unique"]     = field.Unique;
                record["searchable"] = field.Searchable;
                Records.Add(record);
            }
            #endregion

            #region << Actions >>
            HeaderActions.AddRange(new List <string>()
            {
                $"<a href='/sdk/objects/entity/r/{(ErpEntity != null ? ErpEntity.Id : Guid.Empty)}/rl/fields/c/select?returnUrl={ReturnUrlEncoded}' class='btn btn-white btn-sm'><span class='fa fa-plus go-green'></span> Create Field</a>",
                $"<button type='button' onclick='ErpEvent.DISPATCH(\"WebVella.Erp.Web.Components.PcDrawer\",\"open\")' class='btn btn-white btn-sm'><span class='fa fa-search'></span> Search</a>"
            });
            HeaderToolbar.AddRange(AdminPageUtils.GetEntityAdminSubNav(ErpEntity, "fields"));
            #endregion


            ErpRequestContext.PageContext = PageContext;
            return(Page());
        }
示例#21
0
        public void InitPage()
        {
            Init();

            var entMan = new EntityManager();

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

            var allCards = AdminPageUtils.GetFieldCards();

            if (FieldTypeId > 19 || FieldTypeId < 1)
            {
                FieldTypeId = 18;
            }

            FieldCard = allCards.First(x => (string)x["type"] == FieldTypeId.ToString());

            if (Enum.TryParse <FieldType>(FieldTypeId.ToString(), out FieldType result))
            {
                Type = result;
            }

            #region << Field Type init >>
            switch (Type)
            {
            case FieldType.AutoNumberField:
                DisplayFormat = "{0}";
                break;

            case FieldType.CurrencyField:
                CurrencyOptions = Helpers.GetAllCurrency().MapTo <SelectOption>();
                break;

            case FieldType.DateTimeField:
                Format = "yyyy-MMM-dd HH:mm";
                break;

            default:
                break;
            }

            #endregion

            #region << Init RecordPermissions >>
            var valueGrid = new List <KeyStringList>();
            PermissionOptions = new List <SelectOption>()
            {
                new SelectOption("read", "read"),
                new SelectOption("update", "update")
            };

            var roles = AdminPageUtils.GetUserRoles();             //Special order is applied

            foreach (var role in roles)
            {
                RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                var keyValuesObj = new KeyStringList()
                {
                    Key    = role.Id.ToString(),
                    Values = new List <string>()
                };
            }

            #endregion

            #region << Actions >>
            HeaderActions.AddRange(new List <string>()
            {
                PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Create Field", formId: "CreateRecord", btnClass: "btn btn-green btn-sm", iconClass: "ti-plus"),
                PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: ReturnUrl)
            });

            #endregion
        }
示例#22
0
        public void InitPageData()
        {
            #region << InitPage >>

            HeaderToolbar.AddRange(AdminPageUtils.GetJobAdminSubNav("job"));

            int           pager     = 0;
            string        sortBy    = "";
            QuerySortType sortOrder = QuerySortType.Ascending;
            PageUtils.GetListQueryParams(PageContext.HttpContext, out pager, out sortBy, out sortOrder);
            Pager     = pager;
            SortBy    = sortBy;
            SortOrder = sortOrder;


            #endregion

            #region << Create Columns >>

            Columns = new List <WvGridColumnMeta>()
            {
                new WvGridColumnMeta()
                {
                    Name  = "action",
                    Width = "1%"
                },
                new WvGridColumnMeta()
                {
                    Label = "created on",
                    Name  = "created_on",
                    Width = "150px"
                },
                new WvGridColumnMeta()
                {
                    Label = "started on",
                    Name  = "started_on",
                    Width = "150px"
                },
                new WvGridColumnMeta()
                {
                    Label = "finished on",
                    Name  = "finished_on",
                    Width = "150px"
                },
                new WvGridColumnMeta()
                {
                    Label = "type name",
                    Name  = "type_name",
                },
                new WvGridColumnMeta()
                {
                    Label = "complete class name",
                    Name  = "complete_class_name",
                    Width = "400px"
                },
                new WvGridColumnMeta()
                {
                    Label = "status",
                    Name  = "status",
                    Width = "100px"
                }
            };

            #endregion

            #region << Records >>

            var    submittedFilters = PageUtils.GetPageFiltersFromQuery(PageContext.HttpContext);
            string typeName         = null;
            Guid?  typeId           = null;
            if (submittedFilters.Count > 0)
            {
                var whereClauseList = new List <string>();
                foreach (var filter in submittedFilters)
                {
                    switch (filter.Name)
                    {
                    case "type_name":
                        typeName = filter.Value;
                        break;

                    case "type_id":
                        if (Guid.TryParse(filter.Value, out Guid outGuid))
                        {
                            typeId = outGuid;
                        }
                        break;
                    }
                }
            }

            int totalCount;
            Records    = JobManager.Current.GetJobs(out totalCount, null, null, null, null, typeName, null, null, typeId, Pager, PagerSize);
            TotalCount = totalCount;

            #endregion
        }
示例#23
0
        public void InitPage(bool isGet = true)
        {
            IsPostgisInstalled = DbRepository.IsPostgisInstalled();

            var entMan = new EntityManager();

            ErpEntity = entMan.ReadEntity(ParentRecordId ?? Guid.Empty).Object;

            var allCards = AdminPageUtils.GetFieldCards();

            if (FieldTypeId == 20) //RelationField
            {
                throw new Exception("RelationField is unsupported field type");
            }

            FieldCard = allCards.First(x => (string)x["type"] == FieldTypeId.ToString());

            if (Enum.TryParse <FieldType>(FieldTypeId.ToString(), out FieldType result))
            {
                Type = result;
            }

            if (isGet)
            {
                #region << Field Type init >>
                switch (Type)
                {
                case FieldType.AutoNumberField:
                    DisplayFormat = "{0}";
                    break;

                case FieldType.CurrencyField:
                    CurrencyOptions = Helpers.GetAllCurrency().MapTo <SelectOption>();
                    break;

                case FieldType.DateTimeField:
                    Format = "yyyy-MMM-dd HH:mm";
                    break;

                case FieldType.GeographyField:
                {
                    foreach (int format in Enum.GetValues(typeof(GeographyFieldFormat)))
                    {
                        string value = format.ToString();
                        string name  = ((GeographyFieldFormat)format).ToString();
                        GeographyFormats.Add(new SelectOption(value, name));
                    }
                }
                break;

                default:
                    break;
                }

                #endregion

                #region << Init RecordPermissions >>
                var valueGrid = new List <KeyStringList>();
                PermissionOptions = new List <SelectOption>()
                {
                    new SelectOption("read", "read"),
                    new SelectOption("update", "update")
                };

                var roles = AdminPageUtils.GetUserRoles(); //Special order is applied

                foreach (var role in roles)
                {
                    RoleOptions.Add(new SelectOption(role.Id.ToString(), role.Name));
                    var keyValuesObj = new KeyStringList()
                    {
                        Key    = role.Id.ToString(),
                        Values = new List <string>()
                    };
                }

                #endregion
            }

            #region << Actions >>

            if (Type != FieldType.GeographyField)
            {
                HeaderActions.AddRange(new List <string>()
                {
                    PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Create Field", formId: "CreateRecord", btnClass: "btn btn-green btn-sm", iconClass: "fa fa-plus"),
                    PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: ReturnUrl)
                });
            }
            else if (Type == FieldType.GeographyField)
            {
                if (IsPostgisInstalled)
                {
                    HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.SubmitForm, label: "Create Field", formId: "CreateRecord", btnClass: "btn btn-green btn-sm", iconClass: "fa fa-plus"));
                }

                HeaderActions.Add(PageUtils.GetActionTemplate(PageUtilsActionType.Cancel, returnUrl: ReturnUrl));
            }
            #endregion
        }