Esempio n. 1
0
        public UserLogic(string file)
        {
            DataBaseFile = file;
            InitError    = InitErrors.None;

            try
            {
                string text_file = File.ReadAllText(DataBaseFile);
                data_base =
                    JsonConvert.DeserializeObject <DataBase>(text_file);
                //new DataBase(DataBaseFile);
            }
            catch (FileNotFoundException)
            {
                InitError = InitErrors.FileExistError;
            }
            catch (FormatException)
            {
                InitError = InitErrors.FileFormatError;
            }
            catch (Exception)
            {
                InitError = InitErrors.FileFormatError;
            }
            finally
            {
                if (data_base == null)
                {
                    data_base = new DataBase();
                }
            }
        }
        public override bool Initialize()
        {
#if UNITY_INPUT_SYSTEM
            //InputLayoutLoader.RegisterInputLayouts();
#endif


            //this only works at the right time in editor. In builds we use a different method (reading the asset manually)
#if UNITY_EDITOR
            Settings settings = Settings.GetSettings();
            if (settings != null)
            {
                UserDefinedSettings userDefinedSettings;
                userDefinedSettings.stereoRenderingMode = (ushort)settings.GetStereoRenderingMode();
                userDefinedSettings.mirrorViewMode      = (ushort)settings.GetMirrorViewMode();
                userDefinedSettings.rotateEyes          = (ushort)(settings.RotateEyes);

                SetUserDefinedSettings(userDefinedSettings);
            }
#else
            NotifyInBuild();
#endif

            CreateSubsystem <XRDisplaySubsystemDescriptor, XRDisplaySubsystem>(s_DisplaySubsystemDescriptors, PluginMetadata.DisplayProviderName);

            InitErrors result = GetInitializationResult();

            if (result != InitErrors.None)
            {
                DestroySubsystem <XRDisplaySubsystem>();
                Debug.LogError(PluginMetadata.DebugLogPrefix + "Could not initialize. Error code: " + result.ToString());
                return(false);
            }
            CreateSubsystem <XRInputSubsystemDescriptor, XRInputSubsystem>(s_InputSubsystemDescriptors, PluginMetadata.InputProviderName);

            Settings.GameViewOptions gameView = Settings.GetSettings().RenderGameView;
            // This line turns off rendering to the default game view, if desired.
            // See also Settings.SetGameView to change during runtime
            displaySubsystem.disableLegacyRenderer = (gameView == Settings.GameViewOptions.Disable);

            // OpenVREvents.Initialize();
            // TickCallbackDelegate callback = TickCallback;
            // RegisterTickCallback(callback);
            // callback(0);

            Debug.Log(PluginMetadata.DebugLogPrefix + "Runtime loader initialized");
            return(displaySubsystem != null && inputSubsystem != null);
        }
Esempio n. 3
0
        public bool InitField(TagHelperContext context, TagHelperOutput output)
        {
            var isSuccess = true;

            #region << Init >>
            if (FieldId == null)
            {
                FieldId = Guid.NewGuid();
            }

            if (String.IsNullOrWhiteSpace(ApiUrl) && Mode == FieldRenderMode.InlineEdit && (RecordId == null || String.IsNullOrWhiteSpace(EntityName)))
            {
                InitErrors.Add("In 'inlineEdit' when 'api-url' is not defined, entityName and recordId are required!");
            }

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

            if (Mode == FieldRenderMode.Undefined)
            {
                //Check if it is defined in form group
                if (context.Items.ContainsKey(typeof(FieldRenderMode)))
                {
                    Mode = (FieldRenderMode)context.Items[typeof(FieldRenderMode)];
                }
                else
                {
                    Mode = FieldRenderMode.Form;
                }
            }

            if (!String.IsNullOrWhiteSpace(Locale))
            {
                Culture = new CultureInfo(Locale);
            }

            if (String.IsNullOrWhiteSpace(Name) && (Mode == FieldRenderMode.Form || Mode == FieldRenderMode.InlineEdit) &&
                context.TagName != "wv-field-plaintext")
            {
                InitErrors.Add("In InlineEdit or Form the attribute 'name' is required");
            }
            if (ValidationErrors.Count > 0)
            {
                ValidationErrors = ValidationErrors.FindAll(x => x.PropertyName == Name.ToLowerInvariant()).ToList();
            }

            if (ValidationErrors.Count == 0)
            {
                //Check if it is defined in form group
                if (context.Items.ContainsKey(typeof(ValidationException)))
                {
                    var validation = (ValidationException)context.Items[typeof(ValidationException)];
                    if (validation != null & validation.Errors.Count > 0)
                    {
                        ValidationErrors = validation.Errors.FindAll(x => x.PropertyName == Name.ToLowerInvariant());
                    }
                }
            }

            if (AutoComplete == null)
            {
                if (context.Items.ContainsKey("FromAutocomplete"))
                {
                    AutoComplete = (bool)context.Items["FromAutocomplete"];
                }
            }

            #region << Init Value >>
            var       tagName   = context.TagName;
            var       errorList = new List <string>();
            FieldType?fieldType = FieldType.TextField;
            switch (context.TagName)
            {
            case "wv-field-autonumber":
                fieldType = FieldType.AutoNumberField;
                break;

            case "wv-field-checkbox":
                fieldType = FieldType.CheckboxField;
                break;

            case "wv-field-checkbox-grid":
            {
                fieldType = FieldType.TextField;
            }
            break;

            case "wv-field-currency":
                fieldType = FieldType.CurrencyField;
                break;

            case "wv-field-date":
                fieldType = FieldType.DateField;
                break;

            case "wv-field-datetime":
            case "wv-field-time":
                fieldType = FieldType.DateTimeField;
                break;

            case "wv-field-email":
                fieldType = FieldType.EmailField;
                break;

            case "wv-field-file":
                fieldType = FieldType.FileField;
                break;

            case "wv-field-html":
                fieldType = FieldType.HtmlField;
                break;

            case "wv-field-image":
                fieldType = FieldType.ImageField;
                break;

            case "wv-field-textarea":
                fieldType = FieldType.MultiLineTextField;
                break;

            case "wv-field-multiselect":
            case "wv-field-checkbox-list":
                fieldType = FieldType.MultiSelectField;
                if (Value is List <string> )
                {
                }
                else if (Value is List <SelectOption> )
                {
                    var newListString = new List <string>();
                    foreach (var option in (List <SelectOption>)Value)
                    {
                        newListString.Add(option.Value);
                    }
                    Value = newListString;
                }
                else
                {
                    throw new Exception("Expected multiselect value is List<string> or List<SelectOption>");
                }
                break;

            case "wv-field-number":
                fieldType = FieldType.NumberField;
                break;

            case "wv-field-password":
                fieldType = FieldType.PasswordField;
                break;

            case "wv-field-percent":
                fieldType = FieldType.PercentField;
                break;

            case "wv-field-phone":
                fieldType = FieldType.PhoneField;
                break;

            case "wv-field-guid":
                fieldType = FieldType.GuidField;
                break;

            case "wv-field-select":
                fieldType = FieldType.SelectField;
                break;

            case "wv-field-text":
                fieldType = FieldType.TextField;
                break;

            case "wv-field-url":
                fieldType = FieldType.UrlField;
                break;

            default:
                fieldType = null;
                break;
            }
            dynamic valueResult = null;
            DataUtils.ValidateValueToFieldType(fieldType, Value, out valueResult, out errorList);
            Value = valueResult;
            dynamic defaultValueResult = null;
            DataUtils.ValidateValueToFieldType(fieldType, DefaultValue, out defaultValueResult, out errorList);
            DefaultValue = defaultValueResult;

            if (errorList.Count > 0)
            {
                foreach (var error in errorList)
                {
                    InitErrors.Add(error);
                }
            }
            #endregion

            #endregion

            #region << Render Field Group / Output tag >>
            output.TagName = "div";
            if (!String.IsNullOrWhiteSpace(Class))
            {
                CssClassList.Add(Class);
            }
            CssClassList.Add("form-group");
            CssClassList.Add("erp-field");
            if (LabelMode == LabelRenderMode.Horizontal)
            {
                CssClassList.Add("label-horizontal");
            }
            if (!String.IsNullOrWhiteSpace(Id))
            {
                output.Attributes.Add("id", Id);
            }


            switch (LabelMode)
            {
            case LabelRenderMode.Hidden:
                CssClassList.Add("label-hidden");
                break;

            case LabelRenderMode.Horizontal:
                CssClassList.Add("row no-gutters");
                break;
            }

            switch (Mode)
            {
            case FieldRenderMode.Display:
                CssClassList.Add("display");
                break;

            case FieldRenderMode.Form:
                CssClassList.Add("form");
                break;

            case FieldRenderMode.InlineEdit:
                CssClassList.Add("inline-edit");
                break;

            case FieldRenderMode.Simple:
                CssClassList.Add("list");
                break;
            }

            output.Attributes.SetAttribute("class", String.Join(' ', CssClassList));

            #endregion

            #region << Render Label >>
            if (LabelMode != LabelRenderMode.Hidden)
            {
                var labelEl = new TagBuilder("label");
                //Set label attributes
                if (FieldId != null)
                {
                    labelEl.Attributes.Add("for", "input-" + FieldId);
                }
                if (LabelMode == LabelRenderMode.Horizontal)
                {
                    labelEl.Attributes.Add("class", "col-12 col-sm-auto col-form-label label-horizontal pr-0 pr-sm-2");
                }
                else
                {
                    labelEl.Attributes.Add("class", "control-label label-stacked");
                }

                //Set Required
                if (Required && Mode == FieldRenderMode.Form)
                {
                    var requiredEl = new TagBuilder("abbr");
                    requiredEl.MergeAttribute("class", "go-red");
                    requiredEl.MergeAttribute("title", "required");
                    requiredEl.InnerHtml.Append("*");
                    labelEl.InnerHtml.AppendHtml(requiredEl);
                }

                //Set Label text
                if (LabelMode != LabelRenderMode.Horizontal)
                {
                    labelEl.InnerHtml.AppendHtml(LabelText);
                }
                else
                {
                    labelEl.InnerHtml.AppendHtml(LabelText + ":");
                }

                //Set Help
                if (!String.IsNullOrWhiteSpace(LabelHelpText))
                {
                    var helpEl = new TagBuilder("i");
                    helpEl.MergeAttribute("class", "fa fa-fw fa-question-circle field-help");
                    helpEl.MergeAttribute("data-toggle", "tooltip");
                    helpEl.MergeAttribute("data-placement", "top");
                    helpEl.MergeAttribute("data-html", "true");
                    helpEl.MergeAttribute("id", "help-message-" + FieldId);
                    helpEl.MergeAttribute("title", LabelHelpText);
                    labelEl.InnerHtml.AppendHtml(helpEl);
                    var scriptEl = new TagBuilder("script");
                    var script   = $"$(function () {{$('#help-message-{FieldId}').tooltip();}})";
                    scriptEl.InnerHtml.AppendHtml(script);
                    labelEl.InnerHtml.AppendHtml(scriptEl);
                }
                ;

                //Set Warning
                if (!String.IsNullOrWhiteSpace(LabelWarningText))
                {
                    var helpEl = new TagBuilder("i");
                    helpEl.MergeAttribute("class", "fa fa-fw fa-exclamation-triangle field-warning-message");
                    helpEl.MergeAttribute("data-toggle", "tooltip");
                    helpEl.MergeAttribute("data-placement", "top");
                    helpEl.MergeAttribute("data-html", "true");
                    helpEl.MergeAttribute("id", "warning-message-" + FieldId);
                    helpEl.MergeAttribute("data-delay", "{ \"show\": 100, \"hide\": 3000 }");
                    helpEl.MergeAttribute("title", LabelWarningText);
                    labelEl.InnerHtml.AppendHtml(helpEl);
                    var scriptEl = new TagBuilder("script");
                    var script   = $"$(function () {{$('#warning-message-{FieldId}').tooltip();}})";
                    scriptEl.InnerHtml.AppendHtml(script);
                    labelEl.InnerHtml.AppendHtml(scriptEl);
                }
                ;

                //Set Error
                if (!String.IsNullOrWhiteSpace(LabelErrorText))
                {
                    var helpEl = new TagBuilder("i");
                    helpEl.MergeAttribute("class", "fa fa-fw fa-exclamation-circle field-error-message");
                    helpEl.MergeAttribute("data-toggle", "tooltip");
                    helpEl.MergeAttribute("data-placement", "top");
                    helpEl.MergeAttribute("data-html", "true");
                    helpEl.MergeAttribute("id", "error-message-" + FieldId);
                    helpEl.MergeAttribute("data-delay", "{ \"show\": 100, \"hide\": 3000 }");
                    helpEl.MergeAttribute("title", LabelErrorText);
                    labelEl.InnerHtml.AppendHtml(helpEl);
                    var scriptEl = new TagBuilder("script");
                    var script   = $"$(function () {{$('#error-message-{FieldId}').tooltip();}})";
                    scriptEl.InnerHtml.AppendHtml(script);
                    labelEl.InnerHtml.AppendHtml(scriptEl);
                }
                ;

                output.PreContent.AppendHtml(labelEl);
            }

            #endregion


            #region << Field Outer Wrapper tag - StartTag >>
            var fieldWrapper = new TagBuilder("div");
            fieldWrapper.AddCssClass("col");

            if (LabelMode == LabelRenderMode.Horizontal)
            {
                output.PreContent.AppendHtml(fieldWrapper.RenderStartTag());
            }
            #endregion

            #region << if Init Errors >>
            if (InitErrors.Count > 0)
            {
                var errorListEl = new TagBuilder("ul");
                errorListEl.AddCssClass("erp-error-list list-unstyled");
                foreach (var error in InitErrors)
                {
                    var errorEl = new TagBuilder("li");
                    errorEl.AddCssClass("go-red");

                    var iconEl = new TagBuilder("span");
                    iconEl.AddCssClass("fa fa-fw fa-exclamation");

                    errorEl.InnerHtml.AppendHtml(iconEl);
                    errorEl.InnerHtml.Append($"Error: {error}");

                    errorListEl.InnerHtml.AppendHtml(errorEl);
                }
                output.PostContent.AppendHtml(errorListEl);
                return(false);
            }
            #endregion

            #region << if Forbidden >>
            if (Access == FieldAccess.Forbidden)
            {
                if (Mode != FieldRenderMode.Simple)
                {
                    var forbiddenEl = new TagBuilder("div");
                    forbiddenEl.AddCssClass("form-control-plaintext");

                    var innerSpan = new TagBuilder("span");
                    innerSpan.AddCssClass("go-gray");

                    var innerIcon = new TagBuilder("span");
                    innerIcon.AddCssClass("fa fa-lock mr-1");

                    var innerEm = new TagBuilder("em");
                    innerEm.InnerHtml.Append(AccessDeniedMessage);

                    innerSpan.InnerHtml.AppendHtml(innerIcon);
                    innerSpan.InnerHtml.AppendHtml(innerEm);
                    forbiddenEl.InnerHtml.AppendHtml(innerSpan);

                    output.PostContent.AppendHtml(forbiddenEl);
                    return(false);
                }
                else
                {
                    var innerSpan = new TagBuilder("span");
                    innerSpan.AddCssClass("go-gray");

                    var innerIcon = new TagBuilder("span");
                    innerIcon.AddCssClass("fa fa-lock mr-1");

                    var innerEm = new TagBuilder("em");
                    innerEm.InnerHtml.Append(AccessDeniedMessage);
                    innerSpan.InnerHtml.AppendHtml(innerIcon);
                    innerSpan.InnerHtml.AppendHtml(innerEm);

                    output.SuppressOutput();
                    output.PostContent.AppendHtml(innerSpan);

                    return(false);
                }
            }
            #endregion

            #region << Field Outer Wrapper tag - End Tag >>
            if (LabelMode == LabelRenderMode.Horizontal)
            {
                output.PostContent.AppendHtml(fieldWrapper.RenderEndTag());
            }
            #endregion

            #region << Init SubInputEl >>

            if (ValidationErrors.Count == 1)
            {
                SubInputEl = new TagBuilder("div");
                SubInputEl.AddCssClass("invalid-feedback d-block");
                SubInputEl.InnerHtml.AppendHtml(ValidationErrors.First().Message);
            }
            else if (ValidationErrors.Count > 1)
            {
                SubInputEl = new TagBuilder("div");
                SubInputEl.AddCssClass("invalid-feedback d-block");
                var errorListEl = new TagBuilder("ul");
                foreach (var error in ValidationErrors)
                {
                    var errorEl = new TagBuilder("li");
                    errorEl.InnerHtml.AppendHtml(error.Message);
                    errorListEl.InnerHtml.AppendHtml(errorEl);
                }
                SubInputEl.InnerHtml.AppendHtml(errorListEl);
            }
            else if (!String.IsNullOrWhiteSpace(Description))
            {
                SubInputEl = new TagBuilder("div");
                SubInputEl.AddCssClass("field-description form-text text-muted");
                SubInputEl.InnerHtml.AppendHtml(Description);
            }
            #endregion

            #region << Init  EmptyValEl>>
            {
                EmptyValEl = new TagBuilder("div");
                EmptyValEl.AddCssClass("form-control-plaintext");

                var innerSpan = new TagBuilder("span");
                innerSpan.AddCssClass("go-gray");

                var innerEm = new TagBuilder("em");
                innerEm.InnerHtml.Append(EmptyValueMessage);

                innerSpan.InnerHtml.AppendHtml(innerEm);
                EmptyValEl.InnerHtml.AppendHtml(innerSpan);
            }
            #endregion

            return(isSuccess);
        }
Esempio n. 4
0
        public bool InitFilter(TagHelperContext context, TagHelperOutput output)
        {
            var isSuccess = true;

            #region << Init Props >>
            if (String.IsNullOrWhiteSpace(Name))
            {
                InitErrors.Add("Name attribute is required for wv-filter TagHelper!");
            }
            UrlQueryOfType   = $"{Prefix}q_{Name}_t";
            UrlQueryOfValue  = $"{Prefix}q_{Name}_v";
            UrlQueryOfValue2 = $"{Prefix}q_{Name}_v2";

            if (FilterId == Guid.Empty)
            {
                FilterId = Guid.NewGuid();
            }

            #endregion

            #region << Init Values >>

            #region << Preinit from URL - type,value,value2 >>
            var urlQueryDict = ViewContext.HttpContext.Request.Query;

            if (urlQueryDict.ContainsKey(UrlQueryOfType))
            {
                if (Enum.TryParse(urlQueryDict[UrlQueryOfType], out FilterType result))
                {
                    QueryType = result;
                }
            }

            if (urlQueryDict.ContainsKey(UrlQueryOfValue))
            {
                Value = (string)urlQueryDict[UrlQueryOfValue];
            }

            if (urlQueryDict.ContainsKey(UrlQueryOfValue2))
            {
                Value2 = (string)urlQueryDict[UrlQueryOfValue2];
            }
            #endregion

            #region << Convert to proper type = value, value2 >>
            var     tagName      = context.TagName;
            dynamic valueResult  = null;
            dynamic value2Result = null;
            var     errorList    = new List <string>();
            var     error2List   = new List <string>();
            var     fieldType    = FieldType.TextField;
            switch (context.TagName)
            {
            case "wv-filter-autonumber":
                fieldType = FieldType.AutoNumberField;
                break;

            case "wv-filter-checkbox":
                fieldType = FieldType.CheckboxField;
                break;

            case "wv-filter-currency":
                fieldType = FieldType.CurrencyField;
                break;

            case "wv-filter-date":
                fieldType = FieldType.DateField;
                break;

            case "wv-filter-datetime":
                fieldType = FieldType.DateTimeField;
                break;

            case "wv-filter-email":
                fieldType = FieldType.EmailField;
                break;

            case "wv-filter-file":
                fieldType = FieldType.FileField;
                break;

            case "wv-filter-guid":
                fieldType = FieldType.GuidField;
                break;

            case "wv-filter-html":
                fieldType = FieldType.HtmlField;
                break;

            case "wv-filter-image":
                fieldType = FieldType.ImageField;
                break;

            case "wv-filter-textarea":
                fieldType = FieldType.MultiLineTextField;
                break;

            case "wv-filter-multiselect":
                fieldType = FieldType.MultiSelectField;
                break;

            case "wv-filter-number":
                fieldType = FieldType.NumberField;
                break;

            case "wv-filter-percent":
                fieldType = FieldType.NumberField;
                break;

            case "wv-filter-phone":
                fieldType = FieldType.PhoneField;
                break;

            case "wv-filter-select":
                fieldType = FieldType.SelectField;
                break;

            case "wv-filter-url":
                fieldType = FieldType.UrlField;
                break;

            default:
                fieldType = FieldType.TextField;
                break;
            }

            DataUtils.ValidateValueToFieldType(fieldType, Value, out valueResult, out errorList);
            Value = valueResult;
            if (errorList.Count > 0)
            {
                Value = null;
            }

            DataUtils.ValidateValueToFieldType(fieldType, Value2, out value2Result, out error2List);
            Value2 = value2Result;
            if (error2List.Count > 0)
            {
                foreach (var error in error2List)
                {
                    InitErrors.Add(error);
                }
            }
            if (QueryOptions == null)
            {
                QueryOptions = new List <FilterType>();
            }

            if (QueryOptions.Count == 0)
            {
                QueryOptions = DataUtils.GetFilterTypesForFieldType(fieldType);
            }

            if (QueryType == FilterType.Undefined)
            {
                //If options has EQ selected
                if (QueryOptions.Any(x => x == FilterType.EQ))
                {
                    QueryType = FilterType.EQ;
                }
                //If not select the first in the options
                else if (QueryOptions.Any())
                {
                    QueryType = QueryOptions.First();
                }
            }

            #endregion


            #region << Render >>
            output.TagName = "div";
            output.AddCssClass("erp-field form-group erp-filter");
            output.Attributes.Add("id", $"erp-filter-{FilterId}");
            output.Attributes.Add("data-name", $"{Name}");
            output.Attributes.Add("data-prefix", $"{Prefix}");
            output.Attributes.Add("data-filter-id", $"{FilterId}");

            var labelEl = new TagBuilder("label");
            labelEl.AddCssClass("control-label");
            if (!String.IsNullOrWhiteSpace(Label))
            {
                labelEl.InnerHtml.AppendHtml(Label);
            }
            else
            {
                labelEl.InnerHtml.AppendHtml(Name);
            }
            var clearLink = new TagBuilder("a");
            clearLink.AddCssClass("clear-filter action");
            clearLink.Attributes.Add("href", "javascript:void(0)");
            clearLink.InnerHtml.Append("clear");

            if ((Value == null || Value.ToString() == "") && (Value2 == null || Value2.ToString() == ""))
            {
                clearLink.AddCssClass("d-none");
            }
            labelEl.InnerHtml.AppendHtml(clearLink);

            output.PreContent.AppendHtml(labelEl);



            #region << if Init Errors >>
            if (InitErrors.Count > 0)
            {
                var errorListEl = new TagBuilder("ul");
                errorListEl.AddCssClass("erp-error-list list-unstyled");
                foreach (var error in InitErrors)
                {
                    var errorEl = new TagBuilder("li");
                    errorEl.AddCssClass("go-red");

                    var iconEl = new TagBuilder("span");
                    iconEl.AddCssClass("fa fa-fw fa-exclamation");

                    errorEl.InnerHtml.AppendHtml(iconEl);
                    errorEl.InnerHtml.Append($"Error: {error}");

                    errorListEl.InnerHtml.AppendHtml(errorEl);
                }
                output.PostContent.AppendHtml(errorListEl);
                return(false);
            }
            #endregion

            #endregion


            #endregion

            #region << Query Type Select >>

            if (QueryOptions.Count > 1)
            {
                FilterTypeSelect = new TagBuilder("select");
                FilterTypeSelect.AddCssClass("form-control erp-filter-rule");
                FilterTypeSelect.Attributes.Add("name", $"{UrlQueryOfType}");
                foreach (var typeOption in QueryOptions)
                {
                    var optionEl = new TagBuilder("option");
                    optionEl.Attributes.Add("value", typeOption.ToString());
                    optionEl.InnerHtml.Append(typeOption.GetLabel());
                    if (QueryType == typeOption)
                    {
                        optionEl.Attributes.Add("selected", null);
                    }
                    FilterTypeSelect.InnerHtml.AppendHtml(optionEl);
                }
            }
            else
            {
                //If 1
                FilterTypeSelect = new TagBuilder("span");
                FilterTypeSelect.AddCssClass($"input-group-prepend erp-filter-rule");
                var prependText = new TagBuilder("span");
                prependText.AddCssClass("input-group-text");
                prependText.InnerHtml.AppendHtml(QueryOptions.First().GetLabel());
                FilterTypeSelect.InnerHtml.AppendHtml(prependText);

                var hiddenInput = new TagBuilder("input");
                hiddenInput.Attributes.Add("type", "hidden");
                hiddenInput.Attributes.Add("value", QueryOptions.First().ToString());
                hiddenInput.Attributes.Add("name", $"{UrlQueryOfType}");
                FilterTypeSelect.InnerHtml.AppendHtml(hiddenInput);
            }

            #endregion

            #region << ValueTextControl >>
            {
                ValueTextControl = new TagBuilder("input");
                ValueTextControl.AddCssClass("form-control value");
                if (QueryType != FilterType.BETWEEN && QueryType != FilterType.NOTBETWEEN)
                {
                    ValueTextControl.AddCssClass("rounded-right");
                }
                ValueTextControl.Attributes.Add("value", (Value ?? "").ToString());
                ValueTextControl.Attributes.Add("type", "text");
                ValueTextControl.Attributes.Add("name", UrlQueryOfValue);
            }
            #endregion

            #region << ValueNumberControl >>
            {
                ValueNumberControl = new TagBuilder("input");
                ValueNumberControl.AddCssClass("form-control value");
                if (QueryType != FilterType.BETWEEN && QueryType != FilterType.NOTBETWEEN)
                {
                    ValueNumberControl.AddCssClass("rounded-right");
                }
                ValueNumberControl.Attributes.Add("value", (Value ?? "").ToString());
                ValueNumberControl.Attributes.Add("type", "number");
                ValueNumberControl.Attributes.Add("name", UrlQueryOfValue);
            }
            #endregion

            #region << Value2NumberControl >>
            {
                Value2NumberControl = new TagBuilder("input");
                Value2NumberControl.Attributes.Add("value", (Value2 ?? "").ToString());
                Value2NumberControl.AddCssClass("form-control value2");
                Value2NumberControl.Attributes.Add("type", "number");
                if (QueryType == FilterType.BETWEEN || QueryType == FilterType.NOTBETWEEN)
                {
                    Value2NumberControl.Attributes.Add("name", UrlQueryOfValue2);
                }
                else
                {
                    Value2NumberControl.AddCssClass("d-none");
                }
            }
            #endregion

            #region << AndDivider >>
            {
                AndDivider = new TagBuilder("span");
                AndDivider.AddCssClass($"input-group-prepend input-group-append erp-filter-divider");
                if (QueryType != FilterType.BETWEEN && QueryType != FilterType.NOTBETWEEN)
                {
                    AndDivider.AddCssClass("d-none");
                }
                var prependText = new TagBuilder("span");
                prependText.AddCssClass("input-group-text divider");
                prependText.InnerHtml.Append("&");
                AndDivider.InnerHtml.AppendHtml(prependText);
            }
            #endregion

            var jsCompressor = new JavaScriptCompressor();

            #region << Init Scripts >>
            var tagHelperInitialized = false;
            if (ViewContext.HttpContext.Items.ContainsKey(typeof(WvFilterBase) + "-base"))
            {
                var tagHelperContext = (WvTagHelperContext)ViewContext.HttpContext.Items[typeof(WvFilterBase) + "-base"];
                tagHelperInitialized = tagHelperContext.Initialized;
            }
            if (!tagHelperInitialized)
            {
                var scriptContent = FileService.GetEmbeddedTextResource("base.js", "WebVella.Erp.Web.TagHelpers.WvFilterBase");
                var scriptEl      = new TagBuilder("script");
                scriptEl.Attributes.Add("type", "text/javascript");
                scriptEl.InnerHtml.AppendHtml(jsCompressor.Compress(scriptContent));
                output.PostContent.AppendHtml(scriptEl);

                ViewContext.HttpContext.Items[typeof(WvFilterBase) + "-base"] = new WvTagHelperContext()
                {
                    Initialized = true
                };
            }
            #endregion

            #region << Add Inline Init Script for this instance >>
            var initScript = new TagBuilder("script");
            initScript.Attributes.Add("type", "text/javascript");
            var scriptTemplate = @"
						$(function(){
							BaseFilterInit(""{{FilterId}}"",""{{Value2InputName}}"");
						});"                        ;
            scriptTemplate = scriptTemplate.Replace("{{FilterId}}", FilterId.ToString());
            scriptTemplate = scriptTemplate.Replace("{{Value2InputName}}", UrlQueryOfValue2.ToString());
            initScript.InnerHtml.AppendHtml(jsCompressor.Compress(scriptTemplate));

            output.PostContent.AppendHtml(initScript);
            #endregion



            return(isSuccess);
        }