Пример #1
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")));
            }
        }
Пример #2
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 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 parameter '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 == WvLabelRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(WvLabelRenderMode)))
                    {
                        options.LabelMode = (WvLabelRenderMode)context.Items[typeof(WvLabelRenderMode)];
                    }
                    else
                    {
                        options.LabelMode = WvLabelRenderMode.Stacked;
                    }
                }

                //Check if it is defined in form group
                if (options.FieldMode == WvFieldRenderMode.Undefined)
                {
                    if (context.Items.ContainsKey(typeof(WvFieldRenderMode)))
                    {
                        options.FieldMode = (WvFieldRenderMode)context.Items[typeof(WvFieldRenderMode)];
                    }
                    else
                    {
                        options.FieldMode = WvFieldRenderMode.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
                                    {
                                        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
                                    {
                                        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(WvLabelRenderMode)] = options.LabelMode;
                context.Items[typeof(WvFieldRenderMode)] = 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 = WebVella.TagHelpers.Utilities.ModelExtensions.GetEnumAsSelectOptions <WvLabelRenderMode>();
                    ViewBag.FieldRenderModeOptions = WebVella.TagHelpers.Utilities.ModelExtensions.GetEnumAsSelectOptions <WvFieldRenderMode>();
                    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")));
            }
        }