Beispiel #1
0
        public void PageInit()
        {
            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();
        }
Beispiel #2
0
        public void PageInit()
        {
            Init();

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

            var entMan       = new EntityManager();
            var relMan       = new EntityRelationManager();
            var allRelations = relMan.Read().Object;

            foreach (var entity in entMan.ReadEntities().Object)
            {
                foreach (var field in entity.Fields)
                {
                    if (field is GuidField)
                    {
                        var sfo = new SelectOption($"{entity.Id}${field.Id}", $"{entity.Name}.{field.Name}");
                        if (field.Unique && field.Required)
                        {
                            OriginOptions.Add(sfo);
                        }

                        if (!allRelations.Any(x => x.TargetFieldId == field.Id && x.RelationType != EntityRelationType.ManyToMany))
                        {
                            TargetOptions.Add(sfo);
                        }
                    }
                }
            }

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

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

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

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

            #region << Init Entity >>
            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;
            }

            #endregion

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

            #region << Actions >>

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

            HeaderActions.Add($"<a href='/sdk/objects/entity/r/{ErpEntity.Id}/rl/relations/m/{RecordId}' class='btn btn-white btn-sm'><i class='fa fa-cog go-orange'></i> Manage Relation</a>");

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

            #endregion

            TypeOptions = ModelExtensions.GetEnumAsSelectOptions <EntityRelationType>().FindAll(x => x.Value != "1").ToList();
        }
Beispiel #4
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var options = new PcGridOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcGridOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion


                ViewBag.Options          = options;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;


                ViewBag.CssBreakpointOptions = ModelExtensions.GetEnumAsSelectOptions <CssBreakpoint>();
                ViewBag.Page       = 1;
                ViewBag.TotalCount = 0;

                if (options.PageSize != null)
                {
                    ViewBag.PageSize = options.PageSize;
                }
                else
                {
                    ViewBag.PageSize = 0;
                }


                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var isVisible   = true;
                    var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(options.IsVisible);
                    if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                    {
                        if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                        {
                            isVisible = outBool;
                        }
                    }
                    else if (isVisibleDS is Boolean)
                    {
                        isVisible = (bool)isVisibleDS;
                    }
                    ViewBag.IsVisible = isVisible;

                    ViewBag.Records = context.DataModel.GetPropertyValueByDataSource(options.Records) as EntityRecordList ?? new EntityRecordList();

                    if (ViewBag.Records is EntityRecordList)
                    {
                        ViewBag.TotalCount = ((EntityRecordList)ViewBag.Records).TotalCount;
                    }
                    string pageKey = options.Prefix + options.QueryStringPage;
                    if (HttpContext.Request.Query.ContainsKey(pageKey))
                    {
                        var queryValue = HttpContext.Request.Query[pageKey].ToString();
                        if (Int16.TryParse(queryValue, out Int16 outInt))
                        {
                            ViewBag.Page = outInt;
                        }
                    }

                    string pagesizeKey = options.Prefix + options.QueryStringPageSize;
                    if (HttpContext.Request.Query.ContainsKey(pagesizeKey))
                    {
                        var queryValue = HttpContext.Request.Query[pagesizeKey].ToString();
                        if (Int16.TryParse(queryValue, out Int16 outInt))
                        {
                            ViewBag.PageSize = outInt;
                        }
                    }
                }
                else
                {
                    ViewBag.VerticalAlignmentOptions   = ModelExtensions.GetEnumAsSelectOptions <VerticalAlignmentType>();
                    ViewBag.HorizontalAlignmentOptions = ModelExtensions.GetEnumAsSelectOptions <HorizontalAlignmentType>();
                }
                var columns = new List <GridColumn>();

                #region << Init Columns >>
                if (options.VisibleColumns > 0)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container1Id,
                        Name        = options.Container1Name,
                        Label       = options.Container1Label,
                        Searchable  = options.Container1Searchable,
                        Sortable    = options.Container1Sortable,
                        Width       = options.Container1Width
                    });
                }
                if (options.VisibleColumns > 1)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container2Id,
                        Name        = options.Container2Name,
                        Label       = options.Container2Label,
                        Searchable  = options.Container2Searchable,
                        Sortable    = options.Container2Sortable,
                        Width       = options.Container2Width
                    });
                }
                if (options.VisibleColumns > 2)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container3Id,
                        Name        = options.Container3Name,
                        Label       = options.Container3Label,
                        Searchable  = options.Container3Searchable,
                        Sortable    = options.Container3Sortable,
                        Width       = options.Container3Width
                    });
                }
                if (options.VisibleColumns > 3)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container4Id,
                        Name        = options.Container4Name,
                        Label       = options.Container4Label,
                        Searchable  = options.Container4Searchable,
                        Sortable    = options.Container4Sortable,
                        Width       = options.Container4Width
                    });
                }
                if (options.VisibleColumns > 4)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container5Id,
                        Name        = options.Container5Name,
                        Label       = options.Container5Label,
                        Searchable  = options.Container5Searchable,
                        Sortable    = options.Container5Sortable,
                        Width       = options.Container5Width
                    });
                }
                if (options.VisibleColumns > 5)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container6Id,
                        Name        = options.Container6Name,
                        Label       = options.Container6Label,
                        Searchable  = options.Container6Searchable,
                        Sortable    = options.Container6Sortable,
                        Width       = options.Container6Width
                    });
                }
                if (options.VisibleColumns > 6)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container7Id,
                        Name        = options.Container7Name,
                        Label       = options.Container7Label,
                        Searchable  = options.Container7Searchable,
                        Sortable    = options.Container7Sortable,
                        Width       = options.Container7Width
                    });
                }
                if (options.VisibleColumns > 7)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container8Id,
                        Name        = options.Container8Name,
                        Label       = options.Container8Label,
                        Searchable  = options.Container8Searchable,
                        Sortable    = options.Container8Sortable,
                        Width       = options.Container8Width
                    });
                }
                if (options.VisibleColumns > 8)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container9Id,
                        Name        = options.Container9Name,
                        Label       = options.Container9Label,
                        Searchable  = options.Container9Searchable,
                        Sortable    = options.Container9Sortable,
                        Width       = options.Container9Width
                    });
                }
                if (options.VisibleColumns > 9)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container10Id,
                        Name        = options.Container10Name,
                        Label       = options.Container10Label,
                        Searchable  = options.Container10Searchable,
                        Sortable    = options.Container10Sortable,
                        Width       = options.Container10Width
                    });
                }
                if (options.VisibleColumns > 10)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container11Id,
                        Name        = options.Container11Name,
                        Label       = options.Container11Label,
                        Searchable  = options.Container11Searchable,
                        Sortable    = options.Container11Sortable,
                        Width       = options.Container11Width
                    });
                }
                if (options.VisibleColumns > 11)
                {
                    columns.Add(new GridColumn()
                    {
                        ContainerId = options.Container12Id,
                        Name        = options.Container12Name,
                        Label       = options.Container12Label,
                        Searchable  = options.Container12Searchable,
                        Sortable    = options.Container12Sortable,
                        Width       = options.Container12Width
                    });
                }
                #endregion

                ViewBag.Columns = columns;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (EqlException ex)
            {
                var errors = new List <ValidationError>();
                foreach (var error in ex.Errors)
                {
                    errors.Add(new ValidationError("eql", $"Line {error.Line}, Column {error.Column}: {error.Message}"));
                }
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message,
                    Errors  = errors
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #5
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query parameter 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var options = new PcProjectWidgetTasksQueueOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcProjectWidgetTasksQueueOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion


                ViewBag.Options          = options;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;
                ViewBag.TypeOptions      = ModelExtensions.GetEnumAsSelectOptions <TasksDueType>();

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    Guid?projectId = context.DataModel.GetPropertyValueByDataSource(options.ProjectId) as Guid?;

                    Guid?userId    = context.DataModel.GetPropertyValueByDataSource(options.UserId) as Guid?;
                    var  limit     = options.Type == TasksDueType.EndTimeNotDue ? 10 : 50;
                    var  taskQueue = new TaskService().GetTaskQueue(projectId, userId, options.Type, limit);

                    var users = new UserService().GetAll();

                    var resultRecords = new List <EntityRecord>();

                    foreach (var task in taskQueue)
                    {
                        var imagePath = "/webvella-erp-web/assets/avatar.png";
                        var user      = new EntityRecord();
                        user["username"] = "******";
                        if (task["owner_id"] != null)
                        {
                            user = users.First(x => (Guid)x["id"] == (Guid)task["owner_id"]);
                            if (user["image"] != null && (string)user["image"] != "")
                            {
                                imagePath = "/fs" + (string)user["image"];
                            }
                        }
                        string iconClass = "";
                        string color     = "";
                        new TaskService().GetTaskIconAndColor((string)task["priority"], out iconClass, out color);

                        var row = new EntityRecord();
                        row["task"] = $"<i class='{iconClass}' style='color:{color}'></i> <a href=\"/projects/tasks/tasks/r/{(Guid)task["id"]}/details\">[{task["key"]}] {task["subject"]}</a>";
                        row["user"] = $"<img src=\"{imagePath}\" class=\"rounded-circle\" width=\"24\"> {(string)user["username"]}";
                        row["date"] = ((DateTime?)task["end_time"]).ConvertToAppDate();
                        resultRecords.Add(row);
                    }
                    ViewBag.Records = resultRecords;
                }
                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #6
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }


                var optionsObject = InitOptions(context.Options);

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);

                #endregion

                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.Options          = optionsObject;
                ViewBag.ComponentContext = context;

                ViewBag.FlexSelfAlignTypeOptions     = ModelExtensions.GetEnumAsSelectOptions <FlexSelfAlignType>();
                ViewBag.FlexVerticalAlignmentOptions = ModelExtensions.GetEnumAsSelectOptions <FlexVerticalAlignmentType>();

                ViewBag.FlexHorizontalAlignmentOptions = ModelExtensions.GetEnumAsSelectOptions <FlexHorizontalAlignmentType>();

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #7
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                if (currentPage == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The page Id is required to be set as query param 'pid', when requesting this component")));
                }

                var instanceOptions = new PcBtnToolbarOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcBtnToolbarOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion


                ViewBag.Options            = instanceOptions;
                ViewBag.Node               = context.Node;
                ViewBag.ComponentMeta      = componentMeta;
                ViewBag.RequestContext     = ErpRequestContext;
                ViewBag.AppContext         = ErpAppContext.Current;
                ViewBag.ComponentContext   = context;
                ViewBag.GeneralHelpSection = HelpJsApiGeneralSection;

                ViewBag.CssSize = ModelExtensions.GetEnumAsSelectOptions <CssSize>();

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.ExceptionMessage = "Unknown component mode";
                    ViewBag.Errors           = new List <ValidationError>();
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #8
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                if (currentPage == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The page Id is required to be set as query param 'pid', when requesting this component")));
                }

                var instanceOptions = new PcSectionOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcSectionOptions>(context.Options.ToString());
                }

                //Check if it is defined in form group
                if (instanceOptions.LabelMode == LabelRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(LabelRenderMode)))
                    {
                        instanceOptions.LabelMode = (LabelRenderMode)context.Items[typeof(LabelRenderMode)];
                    }
                    else
                    {
                        instanceOptions.LabelMode = LabelRenderMode.Stacked;
                    }
                }

                //Check if it is defined in form group
                if (instanceOptions.FieldMode == FieldRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(FieldRenderMode)))
                    {
                        instanceOptions.FieldMode = (FieldRenderMode)context.Items[typeof(FieldRenderMode)];
                    }
                    else
                    {
                        instanceOptions.FieldMode = FieldRenderMode.Form;
                    }
                }
                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion


                ViewBag.Options            = instanceOptions;
                ViewBag.Node               = context.Node;
                ViewBag.ComponentMeta      = componentMeta;
                ViewBag.RequestContext     = ErpRequestContext;
                ViewBag.AppContext         = ErpAppContext.Current;
                ViewBag.ComponentContext   = context;
                ViewBag.GeneralHelpSection = HelpJsApiGeneralSection;

                if (context.Mode == ComponentMode.Display || context.Mode == ComponentMode.Design)
                {
                    ViewBag.ProcessedTitle = context.DataModel.GetPropertyValueByDataSource(instanceOptions.Title);
                }

                context.Items[typeof(LabelRenderMode)] = instanceOptions.LabelMode;
                context.Items[typeof(FieldRenderMode)] = instanceOptions.FieldMode;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    ViewBag.LabelRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <LabelRenderMode>();
                    ViewBag.FieldRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldRenderMode>();
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.ExceptionMessage = "Unknown component mode";
                    ViewBag.Errors           = new List <ValidationError>();
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #9
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                if (currentPage == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The page Id is required to be set as query param 'pid', when requesting this component")));
                }

                var instanceOptions = new PcButtonOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcButtonOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                ViewBag.Options        = instanceOptions;
                ViewBag.Node           = context.Node;
                ViewBag.ComponentMeta  = componentMeta;
                ViewBag.RequestContext = ErpRequestContext;
                ViewBag.AppContext     = ErpAppContext.Current;

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var isVisible   = true;
                    var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(instanceOptions.IsVisible);
                    if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                    {
                        if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                        {
                            isVisible = outBool;
                        }
                    }
                    else if (isVisibleDS is Boolean)
                    {
                        isVisible = (bool)isVisibleDS;
                    }
                    ViewBag.IsVisible = isVisible;

                    instanceOptions.Text      = context.DataModel.GetPropertyValueByDataSource(instanceOptions.Text) as string;
                    instanceOptions.Class     = context.DataModel.GetPropertyValueByDataSource(instanceOptions.Class) as string;
                    instanceOptions.IconClass = context.DataModel.GetPropertyValueByDataSource(instanceOptions.IconClass) as string;

                    ViewBag.ProcessedHref = context.DataModel.GetPropertyValueByDataSource(instanceOptions.Href);
                }
                #region << Select options >>
                ViewBag.CssSize = ModelExtensions.GetEnumAsSelectOptions <CssSize>();

                ViewBag.ColorOptions = ModelExtensions.GetEnumAsSelectOptions <ErpColor>().OrderBy(x => x.Label).ToList();

                ViewBag.TypeOptions = ModelExtensions.GetEnumAsSelectOptions <ButtonType>();

                #endregion
                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #10
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var instanceOptions = new PcTabNavOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcTabNavOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                ViewBag.Options          = instanceOptions;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var isVisible   = true;
                    var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(instanceOptions.IsVisible);
                    if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                    {
                        if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                        {
                            isVisible = outBool;
                        }
                    }
                    else if (isVisibleDS is Boolean)
                    {
                        isVisible = (bool)isVisibleDS;
                    }
                    if (!isVisible && context.Mode == ComponentMode.Display)
                    {
                        return(await Task.FromResult <IViewComponentResult>(Content("")));
                    }
                }

                if (context.Mode == ComponentMode.Options)
                {
                    ViewBag.RenderTypeOptions = ModelExtensions.GetEnumAsSelectOptions <TabNavRenderType>();
                }

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    if (instanceOptions.RenderType == TabNavRenderType.TABS)
                    {
                        return(await Task.FromResult <IViewComponentResult>(View("Display-Tabs")));
                    }
                    else
                    {
                        return(await Task.FromResult <IViewComponentResult>(View("Display-Pills")));
                    }

                case ComponentMode.Design:
                    if (instanceOptions.RenderType == TabNavRenderType.TABS)
                    {
                        return(await Task.FromResult <IViewComponentResult>(View("Design-Tabs")));
                    }
                    else
                    {
                        return(await Task.FromResult <IViewComponentResult>(View("Design-Pills")));
                    }

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var options = new PcGridFilterFieldOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcGridFilterFieldOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);

                #endregion


                ViewBag.Options          = options;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;

                var selectedQueryOptionsConverted = new List <string>();
                foreach (var option in options.QueryOptions)
                {
                    selectedQueryOptionsConverted.Add(((int)option).ToString());
                }
                ViewBag.ConvertedSelectedQueryOptions = selectedQueryOptionsConverted;

                if (context.Mode == ComponentMode.Options)
                {
                    ViewBag.FieldTypeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldType>();
                    var filterOptions = ModelExtensions.GetEnumAsSelectOptions <FilterType>();
                    var idField       = filterOptions.Single(x => x.Value == ((int)FilterType.Undefined).ToString());
                    filterOptions.Remove(idField);
                    ViewBag.FilterTypeOptions = filterOptions;
                }

                ViewBag.ValueOptions = new List <SelectOption>();
                var entity = context.DataModel.GetProperty("Entity");
                if (options.TryConnectToEntity)
                {
                    var fieldName   = options.Name;
                    var entityField = ((Entity)entity).Fields.FirstOrDefault(x => x.Name == fieldName);
                    if (entityField != null)
                    {
                        //Connection success override the local options
                        //Init model
                        if (String.IsNullOrWhiteSpace(options.Label))
                        {
                            options.Label = entityField.Label;
                        }

                        //Specific model properties
                        var fieldOptions = new List <SelectOption>();
                        switch (entityField.GetFieldType())
                        {
                        case FieldType.AutoNumberField:
                            options.FieldType = FieldType.AutoNumberField;
                            break;

                        case FieldType.CheckboxField:
                            options.FieldType = FieldType.CheckboxField;
                            break;

                        case FieldType.CurrencyField:
                            options.FieldType = FieldType.CurrencyField;
                            break;

                        case FieldType.DateField:
                            options.FieldType = FieldType.DateField;
                            break;

                        case FieldType.DateTimeField:
                            options.FieldType = FieldType.DateTimeField;
                            break;

                        case FieldType.EmailField:
                            options.FieldType = FieldType.EmailField;
                            break;

                        case FieldType.FileField:
                            options.FieldType = FieldType.FileField;
                            break;

                        case FieldType.GuidField:
                            options.FieldType = FieldType.GuidField;
                            break;

                        case FieldType.HtmlField:
                            options.FieldType = FieldType.HtmlField;
                            break;

                        case FieldType.ImageField:
                            options.FieldType = FieldType.ImageField;
                            break;

                        case FieldType.MultiLineTextField:
                            options.FieldType = FieldType.MultiLineTextField;
                            break;

                        case FieldType.NumberField:
                            options.FieldType = FieldType.NumberField;
                            break;

                        case FieldType.PercentField:
                            options.FieldType = FieldType.PercentField;
                            break;

                        case FieldType.PhoneField:
                            options.FieldType = FieldType.PhoneField;
                            break;

                        case FieldType.SelectField:
                            options.FieldType = FieldType.SelectField;
                            var selectField = ((SelectField)entityField);
                            ViewBag.ValueOptions = selectField.Options;
                            break;

                        case FieldType.MultiSelectField:
                            options.FieldType = FieldType.MultiSelectField;
                            break;

                        case FieldType.TextField:
                            options.FieldType = FieldType.TextField;
                            break;

                        case FieldType.UrlField:
                            options.FieldType = FieldType.UrlField;
                            break;

                        default:
                            throw new Exception("No such field Type");
                        }
                    }
                }

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.ExceptionMessage = "Unknown component mode";
                    ViewBag.Errors           = new List <ValidationError>();
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #12
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                if (currentPage == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The page Id is required to be set as query param 'pid', when requesting this component")));
                }

                var options = new PcSectionOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcSectionOptions>(context.Options.ToString());
                }

                //Check if it is defined in form group
                if (options.LabelMode == LabelRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(LabelRenderMode)))
                    {
                        options.LabelMode = (LabelRenderMode)context.Items[typeof(LabelRenderMode)];
                    }
                    else
                    {
                        options.LabelMode = LabelRenderMode.Stacked;
                    }
                }

                //Check if it is defined in form group
                if (options.FieldMode == FieldRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(FieldRenderMode)))
                    {
                        options.FieldMode = (FieldRenderMode)context.Items[typeof(FieldRenderMode)];
                    }
                    else
                    {
                        options.FieldMode = FieldRenderMode.Form;
                    }
                }
                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);

                //Init IsCollapsed from userPreferences
                if (HttpContext.User != null)
                {
                    var currentUser = AuthService.GetUser(HttpContext.User);
                    if (currentUser != null)
                    {
                        var componentData = new UserPreferencies().GetComponentData(currentUser.Id, "WebVella.Erp.Web.Components.PcSection");
                        if (componentData != null)
                        {
                            var collapsedNodeIds   = new List <Guid>();
                            var uncollapsedNodeIds = new List <Guid>();
                            if (componentData.Properties.ContainsKey("collapsed_node_ids") && componentData["collapsed_node_ids"] != null)
                            {
                                if (componentData["collapsed_node_ids"] is string)
                                {
                                    try
                                    {
                                        collapsedNodeIds = JsonConvert.DeserializeObject <List <Guid> >((string)componentData["collapsed_node_ids"]);
                                    }
                                    catch (Exception ex)
                                    {
                                        throw new Exception("WebVella.Erp.Web.Components.PcSection component data object in user preferences not in the correct format. collapsed_node_ids should be List<Guid>");
                                    }
                                }
                                else if (componentData["collapsed_node_ids"] is List <Guid> )
                                {
                                    collapsedNodeIds = (List <Guid>)componentData["collapsed_node_ids"];
                                }
                                else if (componentData["collapsed_node_ids"] is JArray)
                                {
                                    collapsedNodeIds = ((JArray)componentData["collapsed_node_ids"]).ToObject <List <Guid> >();
                                }
                                else
                                {
                                    throw new Exception("Unknown format of collapsed_node_ids");
                                }
                            }
                            if (componentData.Properties.ContainsKey("uncollapsed_node_ids") && componentData["uncollapsed_node_ids"] != null)
                            {
                                if (componentData["uncollapsed_node_ids"] is string)
                                {
                                    try
                                    {
                                        uncollapsedNodeIds = JsonConvert.DeserializeObject <List <Guid> >((string)componentData["uncollapsed_node_ids"]);
                                    }
                                    catch (Exception ex)
                                    {
                                        throw new Exception("WebVella.Erp.Web.Components.PcSection component data object in user preferences not in the correct format. uncollapsed_node_ids should be List<Guid>");
                                    }
                                }
                                else if (componentData["uncollapsed_node_ids"] is List <Guid> )
                                {
                                    uncollapsedNodeIds = (List <Guid>)componentData["uncollapsed_node_ids"];
                                }
                                else if (componentData["uncollapsed_node_ids"] is JArray)
                                {
                                    uncollapsedNodeIds = ((JArray)componentData["uncollapsed_node_ids"]).ToObject <List <Guid> >();
                                }
                                else
                                {
                                    throw new Exception("Unknown format of uncollapsed_node_ids");
                                }
                            }
                            if (collapsedNodeIds.Contains(context.Node.Id))
                            {
                                options.IsCollapsed = true;
                            }
                            else if (uncollapsedNodeIds.Contains(context.Node.Id))
                            {
                                options.IsCollapsed = false;
                            }
                        }
                    }
                }


                #endregion


                ViewBag.Options            = options;
                ViewBag.Node               = context.Node;
                ViewBag.ComponentMeta      = componentMeta;
                ViewBag.RequestContext     = ErpRequestContext;
                ViewBag.AppContext         = ErpAppContext.Current;
                ViewBag.ComponentContext   = context;
                ViewBag.GeneralHelpSection = HelpJsApiGeneralSection;

                if (context.Mode == ComponentMode.Display || context.Mode == ComponentMode.Design)
                {
                    var isVisible   = true;
                    var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(options.IsVisible);
                    if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                    {
                        if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                        {
                            isVisible = outBool;
                        }
                    }
                    else if (isVisibleDS is Boolean)
                    {
                        isVisible = (bool)isVisibleDS;
                    }
                    ViewBag.IsVisible = isVisible;

                    ViewBag.ProcessedTitle = context.DataModel.GetPropertyValueByDataSource(options.Title);

                    var isCollapsed = context.DataModel.GetPropertyValueByDataSource(options.IsCollapsedDs) as bool?;
                    if (isCollapsed != null)
                    {
                        options.IsCollapsed = isCollapsed.Value;
                        ViewBag.Options     = options;
                    }
                    else if (options.IsCollapsedDs.ToLowerInvariant() == "true")
                    {
                        options.IsCollapsed = true;
                        ViewBag.Options     = options;
                    }
                }

                context.Items[typeof(LabelRenderMode)] = options.LabelMode;
                context.Items[typeof(FieldRenderMode)] = options.FieldMode;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    ViewBag.LabelRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <LabelRenderMode>();
                    ViewBag.FieldRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldRenderMode>();
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #13
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var baseOptions = InitPcFieldBaseOptions(context);
                var options     = PcFieldMultiSelectOptions.CopyFromBaseOptions(baseOptions);
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcFieldMultiSelectOptions>(context.Options.ToString());
                }
                var modelFieldLabel = "";
                var model           = (PcFieldMultiSelectModel)InitPcFieldBaseModel(context, options, label: out modelFieldLabel, targetModel: "PcFieldMultiSelectModel");
                if (String.IsNullOrWhiteSpace(options.LabelText))
                {
                    options.LabelText = modelFieldLabel;
                }

                //Implementing Inherit label mode
                ViewBag.LabelMode = options.LabelMode;
                ViewBag.Mode      = options.Mode;

                if (options.LabelMode == LabelRenderMode.Undefined && baseOptions.LabelMode != LabelRenderMode.Undefined)
                {
                    ViewBag.LabelMode = baseOptions.LabelMode;
                }

                if (options.Mode == FieldRenderMode.Undefined && baseOptions.Mode != FieldRenderMode.Undefined)
                {
                    ViewBag.Mode = baseOptions.Mode;
                }


                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);

                var accessOverride = context.DataModel.GetPropertyValueByDataSource(options.AccessOverrideDs) as FieldAccess?;
                if (accessOverride != null)
                {
                    model.Access = accessOverride.Value;
                }
                var requiredOverride = context.DataModel.GetPropertyValueByDataSource(options.RequiredOverrideDs) as bool?;
                if (requiredOverride != null)
                {
                    model.Required = requiredOverride.Value;
                }
                else
                {
                    if (!String.IsNullOrWhiteSpace(options.RequiredOverrideDs))
                    {
                        if (options.RequiredOverrideDs.ToLowerInvariant() == "true")
                        {
                            model.Required = true;
                        }
                        else if (options.RequiredOverrideDs.ToLowerInvariant() == "false")
                        {
                            model.Required = false;
                        }
                    }
                }
                #endregion


                ViewBag.Options        = options;
                ViewBag.Model          = model;
                ViewBag.Node           = context.Node;
                ViewBag.ComponentMeta  = componentMeta;
                ViewBag.RequestContext = ErpRequestContext;
                ViewBag.AppContext     = ErpAppContext.Current;

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var isVisible   = true;
                    var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(options.IsVisible);
                    if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                    {
                        if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                        {
                            isVisible = outBool;
                        }
                    }
                    else if (isVisibleDS is Boolean)
                    {
                        isVisible = (bool)isVisibleDS;
                    }
                    ViewBag.IsVisible = isVisible;

                    #region << Init DataSources >>

                    dynamic valueResult = context.DataModel.GetPropertyValueByDataSource(options.Value);
                    if (valueResult == null)
                    {
                        model.Value = new List <string>();
                    }
                    else if (valueResult is List <string> )
                    {
                        model.Value = (List <string>)valueResult;
                    }
                    else if (valueResult is string)
                    {
                        var stringProcessed = false;
                        if (String.IsNullOrWhiteSpace(valueResult))
                        {
                            model.Value     = new List <string>();
                            stringProcessed = true;
                        }
                        if (!stringProcessed && (((string)valueResult).StartsWith("{") || ((string)valueResult).StartsWith("[")))
                        {
                            try
                            {
                                model.Value     = JsonConvert.DeserializeObject <List <string> >(valueResult.ToString());
                                stringProcessed = true;
                            }
                            catch
                            {
                                stringProcessed          = false;
                                ViewBag.ExceptionMessage = "Value Json Deserialization failed!";
                                ViewBag.Errors           = new List <ValidationError>();
                                return(await Task.FromResult <IViewComponentResult>(View("Error")));
                            }
                        }
                        if (!stringProcessed && ((string)valueResult).Contains(",") && !((string)valueResult).Contains("{") && !((string)valueResult).Contains("["))
                        {
                            var valueArray = ((string)valueResult).Split(',');
                            model.Value = new List <string>(valueArray);
                        }
                    }
                    else if (valueResult is List <Guid> )
                    {
                        model.Value = ((List <Guid>)valueResult).Select(x => x.ToString()).ToList();
                    }
                    else if (valueResult is Guid)
                    {
                        model.Value = new List <string>(valueResult.ToString());
                    }


                    var     dataSourceOptions = new List <SelectOption>();
                    dynamic optionsResult     = context.DataModel.GetPropertyValueByDataSource(options.Options);
                    if (optionsResult == null)
                    {
                    }
                    if (optionsResult is List <SelectOption> )
                    {
                        dataSourceOptions = (List <SelectOption>)optionsResult;
                    }
                    else if (optionsResult is string)
                    {
                        var stringProcessed = false;
                        if (String.IsNullOrWhiteSpace(optionsResult))
                        {
                            dataSourceOptions = new List <SelectOption>();
                            stringProcessed   = true;
                        }
                        //AJAX Options
                        if (!stringProcessed && ((string)optionsResult).StartsWith("{"))
                        {
                            try
                            {
                                options.AjaxDatasource = JsonConvert.DeserializeObject <SelectOptionsAjaxDatasource>(optionsResult, new JsonSerializerSettings()
                                {
                                    MissingMemberHandling = MissingMemberHandling.Error
                                });
                                stringProcessed = true;
                                ViewBag.Options = options;
                            }
                            catch
                            {
                            }
                        }
                        if (!stringProcessed && (((string)optionsResult).StartsWith("{") || ((string)optionsResult).StartsWith("[")))
                        {
                            try
                            {
                                dataSourceOptions = JsonConvert.DeserializeObject <List <SelectOption> >(optionsResult);
                                stringProcessed   = true;
                            }
                            catch
                            {
                                stringProcessed          = false;
                                ViewBag.ExceptionMessage = "Options Json Deserialization failed!";
                                ViewBag.Errors           = new List <ValidationError>();
                                return(await Task.FromResult <IViewComponentResult>(View("Error")));
                            }
                        }
                        if (!stringProcessed && ((string)optionsResult).Contains(",") && !((string)optionsResult).Contains("{") && !((string)optionsResult).Contains("["))
                        {
                            var optionsArray = ((string)optionsResult).Split(',');
                            var optionsList  = new List <SelectOption>();
                            foreach (var optionString in optionsArray)
                            {
                                optionsList.Add(new SelectOption(optionString, optionString));
                            }
                            dataSourceOptions = optionsList;
                        }
                    }
                    if (dataSourceOptions.Count > 0)
                    {
                        model.Options = dataSourceOptions;
                    }

                    #endregion
                }

                ViewBag.SelectMatchOptions = ModelExtensions.GetEnumAsSelectOptions <SelectMatchType>();

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #14
0
        public dynamic InitPcFieldBaseModel(PageComponentContext context, PcFieldBaseOptions options, out string label, string targetModel = "PcFieldBaseModel")
        {
            label = "";
            var model = new PcFieldBaseModel();

            if (context.Items.ContainsKey(typeof(ValidationException)))
            {
                model.ValidationErrors = ((ValidationException)context.Items[typeof(ValidationException)]).Errors;
            }

            model.LabelRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <LabelRenderMode>();

            model.FieldRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldRenderMode>();

            var recordId = context.DataModel.GetProperty("RecordId");

            if (recordId != null && recordId is Guid)
            {
                model.RecordId = (Guid)recordId;
            }

            var entity = context.DataModel.GetProperty("Entity");

            if (entity != null && entity is Entity)
            {
                model.EntityName = ((Entity)entity).Name;
                if (!String.IsNullOrWhiteSpace(model.EntityName) && model.RecordId != null)
                {
                    model.ApiUrl = $"/api/v3/en_US/record/{model.EntityName}/{model.RecordId}/";
                }

                if (options.TryConnectToEntity)
                {
                    var fieldName   = options.Name;
                    var entityField = ((Entity)entity).Fields.FirstOrDefault(x => x.Name == fieldName);
                    if (entityField != null)
                    {
                        //Connection success override the local options
                        //Init model
                        model.Placeholder   = entityField.PlaceholderText;
                        model.Description   = entityField.Description;
                        model.LabelHelpText = entityField.HelpText;
                        model.Required      = entityField.Required;
                        label = entityField.Label;
                        if (entityField.EnableSecurity)
                        {
                            var currentUser = context.DataModel.GetProperty("CurrentUser");
                            if (currentUser != null && currentUser is ErpUser)
                            {
                                var canRead   = false;
                                var canUpdate = false;
                                var user      = (ErpUser)currentUser;
                                foreach (var role in user.Roles)
                                {
                                    if (entityField.Permissions.CanRead.Any(x => x == role.Id))
                                    {
                                        canRead = true;
                                    }
                                    if (entityField.Permissions.CanUpdate.Any(x => x == role.Id))
                                    {
                                        canUpdate = true;
                                    }
                                }
                                if (canUpdate)
                                {
                                    model.Access = FieldAccess.Full;
                                }
                                else if (canRead)
                                {
                                    model.Access = FieldAccess.ReadOnly;
                                }
                                else
                                {
                                    model.Access = FieldAccess.Forbidden;
                                }
                            }
                        }

                        //Specific model properties
                        var fieldOptions = new List <SelectOption>();
                        switch (entityField.GetFieldType())
                        {
                        case FieldType.SelectField:
                            var selectField = ((SelectField)entityField);
                            model.DefaultValue = selectField.DefaultValue;
                            fieldOptions       = selectField.Options;
                            break;

                        case FieldType.MultiSelectField:
                            var multiselectField = ((MultiSelectField)entityField);
                            model.DefaultValue = multiselectField.DefaultValue;
                            fieldOptions       = multiselectField.Options;
                            break;

                        default:
                            break;
                        }
                        switch (targetModel)
                        {
                        case "PcFieldSelectModel":
                            return(PcFieldSelectModel.CopyFromBaseModel(model, fieldOptions));

                        case "PcFieldRadioListModel":
                            return(PcFieldRadioListModel.CopyFromBaseModel(model, fieldOptions));

                        case "PcFieldCheckboxListModel":
                            return(PcFieldCheckboxListModel.CopyFromBaseModel(model, fieldOptions));

                        case "PcFieldMultiSelectModel":
                            return(PcFieldMultiSelectModel.CopyFromBaseModel(model, fieldOptions));

                        case "PcFieldCheckboxGridModel":
                            return(PcFieldCheckboxGridModel.CopyFromBaseModel(model, new List <SelectOption>(), new List <SelectOption>()));

                        default:
                            return(model);
                        }
                    }
                }
            }

            switch (targetModel)
            {
            case "PcFieldSelectModel":
                return(PcFieldSelectModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldRadioListModel":
                return(PcFieldRadioListModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldCheckboxListModel":
                return(PcFieldCheckboxListModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldMultiSelectModel":
                return(PcFieldMultiSelectModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldCheckboxGridModel":
                return(PcFieldCheckboxGridModel.CopyFromBaseModel(model, new List <SelectOption>(), new List <SelectOption>()));

            default:
                return(model);
            }
        }
Beispiel #15
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var baseOptions = InitPcFieldBaseOptions(context);
                var options     = PcFieldHtmlOptions.CopyFromBaseOptions(baseOptions);
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcFieldHtmlOptions>(context.Options.ToString());
                }
                var modelFieldLabel = "";
                var model           = (PcFieldBaseModel)InitPcFieldBaseModel(context, options, label: out modelFieldLabel);
                if (String.IsNullOrWhiteSpace(options.LabelText))
                {
                    options.LabelText = modelFieldLabel;
                }

                ViewBag.LabelMode = options.LabelMode;
                ViewBag.Mode      = options.Mode;

                if (options.LabelMode == LabelRenderMode.Undefined && baseOptions.LabelMode != LabelRenderMode.Undefined)
                {
                    ViewBag.LabelMode = baseOptions.LabelMode;
                }

                if (options.Mode == FieldRenderMode.Undefined && baseOptions.Mode != FieldRenderMode.Undefined)
                {
                    ViewBag.Mode = baseOptions.Mode;
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    model.Value = context.DataModel.GetPropertyValueByDataSource(options.Value);
                }

                ViewBag.UploadModeOptions  = ModelExtensions.GetEnumAsSelectOptions <HtmlUploadMode>();
                ViewBag.ToolbarModeOptions = ModelExtensions.GetEnumAsSelectOptions <HtmlToolbarMode>();


                var isVisible   = true;
                var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(options.IsVisible);
                if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                {
                    if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                    {
                        isVisible = outBool;
                    }
                }
                else if (isVisibleDS is Boolean)
                {
                    isVisible = (bool)isVisibleDS;
                }
                ViewBag.IsVisible = isVisible;

                ViewBag.Options        = options;
                ViewBag.Model          = model;
                ViewBag.Node           = context.Node;
                ViewBag.ComponentMeta  = componentMeta;
                ViewBag.RequestContext = ErpRequestContext;
                ViewBag.AppContext     = ErpAppContext.Current;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #16
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var instanceOptions = new PcFormOptions();
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcFormOptions>(context.Options.ToString());
                    if (instanceOptions.LabelMode == LabelRenderMode.Undefined)
                    {
                        instanceOptions.LabelMode = LabelRenderMode.Stacked;
                    }
                    if (instanceOptions.Mode == FieldRenderMode.Undefined)
                    {
                        instanceOptions.Mode = FieldRenderMode.Form;
                    }
                }

                if (String.IsNullOrWhiteSpace(instanceOptions.Id))
                {
                    instanceOptions.Id = "wv-" + context.Node.Id.ToString();
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                var isVisible   = true;
                var isVisibleDS = context.DataModel.GetPropertyValueByDataSource(instanceOptions.IsVisible);
                if (isVisibleDS is string && !String.IsNullOrWhiteSpace(isVisibleDS.ToString()))
                {
                    if (Boolean.TryParse(isVisibleDS.ToString(), out bool outBool))
                    {
                        isVisible = outBool;
                    }
                }
                else if (isVisibleDS is Boolean)
                {
                    isVisible = (bool)isVisibleDS;
                }
                ViewBag.IsVisible = isVisible;

                ViewBag.Options            = instanceOptions;
                ViewBag.Node               = context.Node;
                ViewBag.ComponentMeta      = componentMeta;
                ViewBag.RequestContext     = ErpRequestContext;
                ViewBag.AppContext         = ErpAppContext.Current;
                ViewBag.ComponentContext   = context;
                ViewBag.GeneralHelpSection = HelpJsApiGeneralSection;

                ViewBag.LabelRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <LabelRenderMode>();

                ViewBag.FieldRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldRenderMode>();


                context.Items[typeof(LabelRenderMode)] = instanceOptions.LabelMode;
                context.Items[typeof(FieldRenderMode)] = instanceOptions.Mode;

                var validation = context.DataModel.GetProperty("Validation") as ValidationException ?? new ValidationException();

                context.Items[typeof(ValidationException)] = validation;
                ViewBag.Validation = validation;

                ViewBag.Action = "";
                if (!String.IsNullOrWhiteSpace(instanceOptions.HookKey))
                {
                    var queryList = new List <SelectOption>();
                    foreach (var key in HttpContext.Request.Query.Keys)
                    {
                        if (key != "hookKey")
                        {
                            queryList.Add(new SelectOption(key, HttpContext.Request.Query[key].ToString()));
                        }
                    }
                    queryList.Add(new SelectOption("hookKey", instanceOptions.HookKey));                    //override even if already present

                    ViewBag.Action = string.Format(HttpContext.Request.Path + "?{0}", string.Join("&", queryList.Select(kvp => string.Format("{0}={1}", kvp.Value, kvp.Label))));
                }

                ViewBag.MethodOptions = new List <SelectOption>()
                {
                    new SelectOption("get", "get"),
                    new SelectOption("post", "post")
                };


                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #17
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var baseOptions     = InitPcFieldBaseOptions(context);
                var instanceOptions = PcFieldHtmlOptions.CopyFromBaseOptions(baseOptions);
                if (context.Options != null)
                {
                    instanceOptions = JsonConvert.DeserializeObject <PcFieldHtmlOptions>(context.Options.ToString());
                    ////Check for connection to entity field
                    //if (instanceOptions.TryConnectToEntity)
                    //{
                    //	var entity = context.DataModel.GetProperty("Entity");
                    //	if (entity != null && entity is Entity)
                    //	{
                    //		var fieldName = instanceOptions.Name;
                    //		var entityField = ((Entity)entity).Fields.FirstOrDefault(x => x.Name == fieldName);
                    //		if (entityField != null && entityField is HtmlField)
                    //		{
                    //			var castedEntityField = ((HtmlField)entityField);
                    //			//No options connected
                    //		}
                    //	}
                    //}
                }
                var modelFieldLabel = "";
                var model           = (PcFieldBaseModel)InitPcFieldBaseModel(context, instanceOptions, label: out modelFieldLabel);
                if (String.IsNullOrWhiteSpace(instanceOptions.LabelText))
                {
                    instanceOptions.LabelText = modelFieldLabel;
                }

                ViewBag.LabelMode = instanceOptions.LabelMode;
                ViewBag.Mode      = instanceOptions.Mode;

                if (instanceOptions.LabelMode == LabelRenderMode.Undefined && baseOptions.LabelMode != LabelRenderMode.Undefined)
                {
                    ViewBag.LabelMode = baseOptions.LabelMode;
                }

                if (instanceOptions.Mode == FieldRenderMode.Undefined && baseOptions.Mode != FieldRenderMode.Undefined)
                {
                    ViewBag.Mode = baseOptions.Mode;
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    model.Value = context.DataModel.GetPropertyValueByDataSource(instanceOptions.Value);
                }

                ViewBag.UploadModeOptions  = ModelExtensions.GetEnumAsSelectOptions <HtmlUploadMode>();
                ViewBag.ToolbarModeOptions = ModelExtensions.GetEnumAsSelectOptions <HtmlToolbarMode>();


                ViewBag.Options        = instanceOptions;
                ViewBag.Model          = model;
                ViewBag.Node           = context.Node;
                ViewBag.ComponentMeta  = componentMeta;
                ViewBag.RequestContext = ErpRequestContext;
                ViewBag.AppContext     = ErpAppContext.Current;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.ExceptionMessage = "Unknown component mode";
                    ViewBag.Errors           = new List <ValidationError>();
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.ExceptionMessage = ex.Message;
                ViewBag.Errors           = new List <ValidationError>();
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #18
0
        public dynamic InitPcFieldBaseModel(PageComponentContext context, PcFieldBaseOptions options, out string label, string targetModel = "PcFieldBaseModel")
        {
            label = "";
            var model = new PcFieldBaseModel();

            if (context.Items.ContainsKey(typeof(ValidationException)))
            {
                model.ValidationErrors = ((ValidationException)context.Items[typeof(ValidationException)]).Errors;
            }

            model.LabelRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <LabelRenderMode>();

            model.FieldRenderModeOptions = ModelExtensions.GetEnumAsSelectOptions <FieldRenderMode>();

            if (context.Mode == ComponentMode.Options)
            {
                model.EntitySelectOptions = new MetaService().GetEntitiesAsSelectOptions();
            }

            var recordId = context.DataModel.GetProperty("RecordId");

            if (recordId != null && recordId is Guid)
            {
                model.RecordId = (Guid)recordId;
            }

            var entity = context.DataModel.GetProperty("Entity");

            if (entity != null && entity is Entity)
            {
                model.EntityName = ((Entity)entity).Name;
                if (!String.IsNullOrWhiteSpace(model.EntityName) && model.RecordId != null)
                {
                    model.ApiUrl = $"/api/v3/en_US/record/{model.EntityName}/{model.RecordId}/";
                }
            }

            Entity mappedEntity = null;

            if (options.ConnectedEntityId != null)
            {
                mappedEntity = new EntityManager().ReadEntity(options.ConnectedEntityId.Value).Object;
            }
            else if (options.ConnectedEntityId == null && entity is Entity)
            {
                mappedEntity = (Entity)entity;
            }

            if (mappedEntity != null)
            {
                var fieldName = options.Name;

                if (fieldName.StartsWith("$"))
                {
                    //Field with relation is set. Mapped entity should be changed
                    var fieldNameArray = fieldName.Replace("$", "").Split(".", StringSplitOptions.RemoveEmptyEntries);
                    if (fieldNameArray.Length == 2)
                    {
                        var relationName = fieldNameArray[0];
                        fieldName = fieldNameArray[1];
                        var relation = new EntityRelationManager().Read(relationName).Object;
                        if (relation != null)
                        {
                            if (relation.OriginEntityId == mappedEntity.Id)
                            {
                                mappedEntity = new EntityManager().ReadEntity(relation.TargetEntityId).Object;
                            }
                            else if (relation.TargetEntityId == mappedEntity.Id)
                            {
                                mappedEntity = new EntityManager().ReadEntity(relation.OriginEntityId).Object;
                            }
                        }
                    }
                }

                var entityField = mappedEntity.Fields.FirstOrDefault(x => x.Name == fieldName);
                if (entityField != null)
                {
                    //Connection success set local options if needed
                    if (String.IsNullOrWhiteSpace(model.Placeholder))
                    {
                        model.Placeholder = entityField.PlaceholderText;
                    }

                    if (String.IsNullOrWhiteSpace(model.Description))
                    {
                        model.Description = entityField.Description;
                    }

                    if (String.IsNullOrWhiteSpace(model.LabelHelpText))
                    {
                        model.LabelHelpText = entityField.HelpText;
                    }

                    if (String.IsNullOrWhiteSpace(label))
                    {
                        label = entityField.Label;
                    }

                    model.Required = entityField.Required;

                    if (entityField.EnableSecurity)
                    {
                        var currentUser = context.DataModel.GetProperty("CurrentUser");
                        if (currentUser != null && currentUser is ErpUser)
                        {
                            var canRead   = false;
                            var canUpdate = false;
                            var user      = (ErpUser)currentUser;
                            foreach (var role in user.Roles)
                            {
                                if (entityField.Permissions.CanRead.Any(x => x == role.Id))
                                {
                                    canRead = true;
                                }
                                if (entityField.Permissions.CanUpdate.Any(x => x == role.Id))
                                {
                                    canUpdate = true;
                                }
                            }
                            if (canUpdate)
                            {
                                model.Access = FieldAccess.Full;
                            }
                            else if (canRead)
                            {
                                model.Access = FieldAccess.ReadOnly;
                            }
                            else
                            {
                                model.Access = FieldAccess.Forbidden;
                            }
                        }
                    }

                    //Specific model properties
                    var fieldOptions = new List <SelectOption>();
                    switch (entityField.GetFieldType())
                    {
                    case FieldType.SelectField:
                        var selectField = ((SelectField)entityField);
                        model.DefaultValue = selectField.DefaultValue;
                        fieldOptions       = selectField.Options;
                        break;

                    case FieldType.MultiSelectField:
                        var multiselectField = ((MultiSelectField)entityField);
                        model.DefaultValue = multiselectField.DefaultValue;
                        fieldOptions       = multiselectField.Options;
                        break;

                    default:
                        break;
                    }
                    switch (targetModel)
                    {
                    case "PcFieldSelectModel":
                        return(PcFieldSelectModel.CopyFromBaseModel(model, fieldOptions));

                    case "PcFieldRadioListModel":
                        return(PcFieldRadioListModel.CopyFromBaseModel(model, fieldOptions));

                    case "PcFieldCheckboxListModel":
                        return(PcFieldCheckboxListModel.CopyFromBaseModel(model, fieldOptions));

                    case "PcFieldMultiSelectModel":
                        return(PcFieldMultiSelectModel.CopyFromBaseModel(model, fieldOptions));

                    case "PcFieldCheckboxGridModel":
                        return(PcFieldCheckboxGridModel.CopyFromBaseModel(model, new List <SelectOption>(), new List <SelectOption>()));

                    default:
                        return(model);
                    }
                }
            }

            switch (targetModel)
            {
            case "PcFieldSelectModel":
                return(PcFieldSelectModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldRadioListModel":
                return(PcFieldRadioListModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldCheckboxListModel":
                return(PcFieldCheckboxListModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldMultiSelectModel":
                return(PcFieldMultiSelectModel.CopyFromBaseModel(model, new List <SelectOption>()));

            case "PcFieldCheckboxGridModel":
                return(PcFieldCheckboxGridModel.CopyFromBaseModel(model, new List <SelectOption>(), new List <SelectOption>()));

            default:
                return(model);
            }
        }
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query parameter 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var options = new PcTaskRepeatRecurrenceSetOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcTaskRepeatRecurrenceSetOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion

                ViewBag.Options          = options;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;
                ViewBag.CurrentUser      = SecurityContext.CurrentUser;
                ViewBag.CurrentUserJson  = JsonConvert.SerializeObject(SecurityContext.CurrentUser);

                if (context.Mode != ComponentMode.Options && context.Mode != ComponentMode.Help)
                {
                    var record = (EntityRecord)context.DataModel.GetProperty("Record");
                    if (record == null)
                    {
                        throw new ValidationException()
                              {
                                  Message = "Record not found"
                              }
                    }
                    ;

                    ViewBag.RecurrenceTemplateString = "";
                    if (record.Properties.ContainsKey("recurrence_template") && record["recurrence_template"] is string)
                    {
                        ViewBag.RecurrenceTemplateString = (string)record["recurrence_template"];
                    }
                    ViewBag.TemplateDefault = JsonConvert.SerializeObject(new RecurrenceTemplate());

                    ViewBag.RecurrenceTypeOptions    = JsonConvert.SerializeObject(ModelExtensions.GetEnumAsSelectOptions <RecurrenceType>());
                    ViewBag.RecurrenceEndTypeOptions = JsonConvert.SerializeObject(ModelExtensions.GetEnumAsSelectOptions <RecurrenceEndType>());
                    var periodTypes = ModelExtensions.GetEnumAsSelectOptions <RecurrencePeriodType>();
                    periodTypes = periodTypes.FindAll(x => x.Value != "0" && x.Value != "1" && x.Value != "2").ToList();                     // remove seconds minutes and hour
                    ViewBag.PeriodTypeOptions           = JsonConvert.SerializeObject(periodTypes);
                    ViewBag.RecurrenceChangeTypeOptions = JsonConvert.SerializeObject(ModelExtensions.GetEnumAsSelectOptions <RecurrenceChangeType>());
                }
                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
Beispiel #20
0
        public async Task <IViewComponentResult> InvokeAsync(PageComponentContext context)
        {
            ErpPage currentPage = null;

            try
            {
                #region << Init >>
                if (context.Node == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: The node Id is required to be set as query param 'nid', when requesting this component")));
                }

                var pageFromModel = context.DataModel.GetProperty("Page");
                if (pageFromModel == null)
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel cannot be null")));
                }
                else if (pageFromModel is ErpPage)
                {
                    currentPage = (ErpPage)pageFromModel;
                }
                else
                {
                    return(await Task.FromResult <IViewComponentResult>(Content("Error: PageModel does not have Page property or it is not from ErpPage Type")));
                }

                var options = new PcChartOptions();
                if (context.Options != null)
                {
                    options = JsonConvert.DeserializeObject <PcChartOptions>(context.Options.ToString());
                }

                var componentMeta = new PageComponentLibraryService().GetComponentMeta(context.Node.ComponentName);
                #endregion


                ViewBag.Options          = options;
                ViewBag.Node             = context.Node;
                ViewBag.ComponentMeta    = componentMeta;
                ViewBag.RequestContext   = ErpRequestContext;
                ViewBag.AppContext       = ErpAppContext.Current;
                ViewBag.ComponentContext = context;

                var theme            = new Theme();
                var colorOptionsList = new List <string>()
                {
                    theme.TealColor, theme.PinkColor, theme.GreenColor, theme.OrangeColor, theme.RedColor, theme.PurpleColor, theme.DeepPurpleColor,
                    theme.BlueColor, theme.LightBlueColor, theme.CyanColor, theme.GreenColor, theme.IndigoColor, theme.LightGreenColor, theme.LimeColor, theme.YellowColor,
                    theme.AmberColor, theme.DeepOrangeColor
                };

                var bkgColorOptionsList = new List <string>()
                {
                    theme.TealLightColor, theme.PinkLightColor, theme.GreenLightColor, theme.OrangeLightColor, theme.RedLightColor, theme.PurpleLightColor, theme.DeepPurpleLightColor,
                    theme.BlueLightColor, theme.LightBlueLightColor, theme.CyanLightColor, theme.GreenLightColor, theme.IndigoLightColor, theme.LightGreenLightColor, theme.LimeLightColor, theme.YellowLightColor,
                    theme.AmberLightColor, theme.DeepOrangeLightColor
                };

                List <ErpChartDataset> dataSets = context.DataModel.GetPropertyValueByDataSource(options.Datasets) as List <ErpChartDataset> ?? new List <ErpChartDataset>();

                if (dataSets == null || dataSets.Count == 0)
                {
                    var decimalList = new List <decimal>();
                    decimalList = context.DataModel.GetPropertyValueByDataSource(options.Datasets) as List <decimal> ?? new List <decimal>();
                    if ((dataSets == null || dataSets.Count == 0) && !String.IsNullOrWhiteSpace(options.Datasets) && options.Datasets.Contains(","))
                    {
                        var optionValueCsv   = options.Datasets.Split(",");
                        var csvDecimalList   = new List <decimal>();
                        var csvParseHasError = false;
                        foreach (var valueString in optionValueCsv)
                        {
                            if (Decimal.TryParse(valueString.Trim(), out decimal outDecimal))
                            {
                                csvDecimalList.Add(outDecimal);
                            }
                            else
                            {
                                csvParseHasError = true;
                                break;
                            }
                        }
                        if (!csvParseHasError)
                        {
                            decimalList = csvDecimalList;
                        }
                    }

                    if (decimalList != null && decimalList.Count > 0)
                    {
                        var dataSet = new ErpChartDataset();
                        dataSet.Data = decimalList;
                        if (options.Type == ErpChartType.Area || options.Type == ErpChartType.Line)
                        {
                            dataSet.BorderColor     = colorOptionsList[0];
                            dataSet.BackgroundColor = bkgColorOptionsList[0];
                        }
                        else
                        {
                            dataSet.BorderColor     = new List <string>();
                            dataSet.BackgroundColor = new List <string>();
                            var index = 0;
                            foreach (var value in decimalList)
                            {
                                ((List <string>)dataSet.BorderColor).Add(colorOptionsList[index]);
                                if (options.Type == ErpChartType.Bar || options.Type == ErpChartType.HorizontalBar)
                                {
                                    ((List <string>)dataSet.BackgroundColor).Add(bkgColorOptionsList[index]);
                                }
                                else
                                {
                                    ((List <string>)dataSet.BackgroundColor).Add(colorOptionsList[index]);
                                }
                                index++;
                            }
                        }
                        dataSets.Add(dataSet);
                    }
                }

                List <string> labels = context.DataModel.GetPropertyValueByDataSource(options.Labels) as List <string> ?? new List <string>();
                if ((labels == null || labels.Count == 0) && !String.IsNullOrWhiteSpace(options.Labels) && options.Labels.Contains(","))
                {
                    labels = options.Labels.Split(",").ToList();
                }

                ViewBag.DataSets = dataSets;
                ViewBag.Labels   = labels;
                var chartTypeOptions = ModelExtensions.GetEnumAsSelectOptions <ErpChartType>();
                chartTypeOptions.First(x => x.Value == "4").Label = "area";
                ViewBag.ChartTypeOptions = chartTypeOptions;
                ViewBag.ShowLegend       = options.ShowLegend;
                ViewBag.Height           = options.Height;
                ViewBag.Width            = options.Width;
                ViewBag.Type             = (ErpChartType)options.Type;

                switch (context.Mode)
                {
                case ComponentMode.Display:
                    return(await Task.FromResult <IViewComponentResult>(View("Display")));

                case ComponentMode.Design:
                    return(await Task.FromResult <IViewComponentResult>(View("Design")));

                case ComponentMode.Options:
                    return(await Task.FromResult <IViewComponentResult>(View("Options")));

                case ComponentMode.Help:
                    return(await Task.FromResult <IViewComponentResult>(View("Help")));

                default:
                    ViewBag.Error = new ValidationException()
                    {
                        Message = "Unknown component mode"
                    };
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            catch (ValidationException ex)
            {
                ViewBag.Error = ex;
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
            catch (Exception ex)
            {
                ViewBag.Error = new ValidationException()
                {
                    Message = ex.Message
                };
                return(await Task.FromResult <IViewComponentResult>(View("Error")));
            }
        }
        public async Task <IViewComponentResult> InvokeAsync(Guid?pageId         = null, WvFieldRenderMode mode = WvFieldRenderMode.Form,
                                                             PageType?presetType = null, Guid?presetAppId       = null, Guid?presetEntityId = null)
        {
            //var typeOptions = new List<SelectFieldOption>();
            //var entityOptions = new List<SelectFieldOption>();
            //var applicationOptions = new List<SelectFieldOption>();
            //var areaOptions = new List<SelectFieldOption>();
            //var nodeOptions = new List<SelectFieldOption>();
            var pageSelectionTree = new PageSelectionTree();
            var erpPage           = new ErpPage();

            if (pageId == null)
            {
                if (presetType != null)
                {
                    erpPage.Type = presetType ?? PageType.Site;
                }
                if (presetAppId != null)
                {
                    erpPage.AppId = presetAppId.Value;
                }
                if (presetEntityId != null)
                {
                    erpPage.EntityId = presetEntityId.Value;
                    erpPage.Type     = PageType.RecordList;
                }
            }
            var pageSrv              = new PageService();
            var typeOptionsFieldId   = Guid.NewGuid();
            var appOptionsFieldId    = Guid.NewGuid();
            var areaOptionsFieldId   = Guid.NewGuid();
            var nodeOptionsFieldId   = Guid.NewGuid();
            var entityOptionsFieldId = Guid.NewGuid();

            #region << Init >>
            var apps     = new AppService().GetAllApplications();
            var entities = new EntityManager().ReadEntities().Object;

            #region << ErpPage && Init it>>
            if (pageId != null)
            {
                erpPage = pageSrv.GetPage(pageId ?? Guid.Empty);
                if (erpPage == null)
                {
                    ViewBag.ErrorMessage = "Error: the set pageId is not found as ErpPage!";
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }

                if (erpPage.Type == PageType.Application && erpPage.AppId == null)
                {
                    ViewBag.ErrorMessage = "Error: Application should have AppId!";
                    return(await Task.FromResult <IViewComponentResult>(View("Error")));
                }
            }
            #endregion

            #region << Type options >>
            {
                pageSelectionTree.AllTypes = ModelExtensions.GetEnumAsSelectOptions <PageType>().OrderBy(x => x.Label).ToList();
            }
            #endregion

            #region << App options >>
            {
                foreach (var app in apps)
                {
                    pageSelectionTree.AllApps.Add(new SelectOption()
                    {
                        Value = app.Id.ToString(),
                        Label = app.Name
                    });
                    //Set App tree
                    var appSelectionTree = new AppSelectionTree();
                    appSelectionTree.AppId = app.Id;
                    foreach (var area in app.Sitemap.Areas)
                    {
                        appSelectionTree.AllAreas.Add(new SelectOption()
                        {
                            Value = area.Id.ToString(),
                            Label = area.Name
                        });
                        var areaSelectionTree = new AreaSelectionTree()
                        {
                            AreaId = area.Id
                        };
                        foreach (var node in area.Nodes)
                        {
                            areaSelectionTree.AllNodes.Add(new SelectOption()
                            {
                                Value = node.Id.ToString(),
                                Label = node.Name
                            });
                        }
                        areaSelectionTree.AllNodes = areaSelectionTree.AllNodes.OrderBy(x => x.Label).ToList();
                        appSelectionTree.AreaSelectionTree.Add(areaSelectionTree);
                    }
                    pageSelectionTree.AppSelectionTree.Add(appSelectionTree);

                    //Set Entities
                    foreach (var entity in app.Entities)
                    {
                        appSelectionTree.Entities.Add(new SelectOption()
                        {
                            Value = entity.Entity.Id.ToString(),
                            Label = entity.Entity.Name
                        });
                    }
                    appSelectionTree.Entities = appSelectionTree.Entities.OrderBy(x => x.Label).ToList();
                }
                pageSelectionTree.AllApps = pageSelectionTree.AllApps.OrderBy(x => x.Label).ToList();
            }
            #endregion

            #region << Entity options >>
            foreach (var entity in entities)
            {
                pageSelectionTree.AllEntities.Add(new SelectOption()
                {
                    Value = entity.Id.ToString(),
                    Label = entity.Name
                });
            }
            pageSelectionTree.AllEntities = pageSelectionTree.AllEntities.OrderBy(x => x.Label).ToList();
            #endregion

            #endregion

            ViewBag.PageSelectionTree    = pageSelectionTree;
            ViewBag.ErpPage              = erpPage;
            ViewBag.TypeOptionsFieldId   = typeOptionsFieldId;
            ViewBag.AppOptionsFieldId    = appOptionsFieldId;
            ViewBag.AreaOptionsFieldId   = areaOptionsFieldId;
            ViewBag.NodeOptionsFieldId   = nodeOptionsFieldId;
            ViewBag.EntityOptionsFieldId = entityOptionsFieldId;

            var pageSelectionTreeJson = JsonConvert.SerializeObject(pageSelectionTree);

            ViewBag.EmbededJs = "";
            #region << Generate js script >>
            if (mode == WvFieldRenderMode.Form)
            {
                var jsCompressor = new JavaScriptCompressor();

                #region << Init Scripts >>

                var fileName       = "form.js";
                var scriptEl       = "<script type=\"text/javascript\">";
                var scriptTemplate = FileService.GetEmbeddedTextResource(fileName, "WebVella.Erp.Plugins.SDK.Components.WvSdkPageSitemap", "WebVella.Erp.Plugins.SDK");

                scriptTemplate = scriptTemplate.Replace("\"{{PageSelectionTreeJson}}\";", pageSelectionTreeJson);
                scriptTemplate = scriptTemplate.Replace("{{typeOptionsFieldId}}", typeOptionsFieldId.ToString());
                scriptTemplate = scriptTemplate.Replace("{{appOptionsFieldId}}", appOptionsFieldId.ToString());
                scriptTemplate = scriptTemplate.Replace("{{areaOptionsFieldId}}", areaOptionsFieldId.ToString());
                scriptTemplate = scriptTemplate.Replace("{{nodeOptionsFieldId}}", nodeOptionsFieldId.ToString());
                scriptTemplate = scriptTemplate.Replace("{{entityOptionsFieldId}}", entityOptionsFieldId.ToString());
                scriptEl      += jsCompressor.Compress(scriptTemplate);
                //scriptEl += scriptTemplate;
                scriptEl += "</script>";

                ViewBag.EmbededJs = scriptEl;
                #endregion
            }
            #endregion

            ViewBag.RenderMode = mode;

            var applicationOptions = new List <SelectOption>();
            var areaOptions        = new List <SelectOption>();
            var nodeOptions        = new List <SelectOption>();
            var entityOptions      = new List <SelectOption>();

            #region << Init Options >>
            //AppOptions

            applicationOptions = pageSelectionTree.AllApps;
            applicationOptions.Insert(0, new SelectOption()
            {
                Value = "", Label = "not selected"
            });
            areaOptions.Insert(0, new SelectOption()
            {
                Value = "", Label = "not selected"
            });
            nodeOptions.Insert(0, new SelectOption()
            {
                Value = "", Label = "not selected"
            });
            entityOptions = pageSelectionTree.AllEntities;
            entityOptions.Insert(0, new SelectOption()
            {
                Value = "", Label = "not selected"
            });

            //App is selected
            if (erpPage.AppId != null)
            {
                var treeAppOptions = pageSelectionTree.AppSelectionTree.First(x => x.AppId == erpPage.AppId);

                areaOptions = treeAppOptions.AllAreas;
                if (erpPage.AreaId == null)
                {
                    areaOptions.Insert(0, new SelectOption()
                    {
                        Value = "", Label = "not selected"
                    });
                    nodeOptions.Insert(0, new SelectOption()
                    {
                        Value = "", Label = "not selected"
                    });
                }
                else
                {
                    var treeAreaOptions = treeAppOptions.AreaSelectionTree.FirstOrDefault(x => x.AreaId == erpPage.AreaId);
                    if (treeAreaOptions != null)
                    {
                        nodeOptions = treeAreaOptions.AllNodes;
                    }
                }

                if (treeAppOptions.Entities.Count > 0)
                {
                    entityOptions = treeAppOptions.Entities;
                }
                else
                {
                    entityOptions = pageSelectionTree.AllEntities;
                }
            }

            #endregion

            ViewBag.ApplicationOptions = applicationOptions;
            ViewBag.AreaOptions        = areaOptions;
            ViewBag.NodeOptions        = nodeOptions;
            ViewBag.EntityOptions      = entityOptions;

            if (mode == WvFieldRenderMode.Form)
            {
                return(await Task.FromResult <IViewComponentResult>(View("Form")));
            }
            else
            {
                return(await Task.FromResult <IViewComponentResult>(View("Display")));
            }
        }