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(); }
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(); }
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(); }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }
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"))); } }