protected EmailTemplateFieldDTO RemoveFieldFromList(bool isTemplateUpdate)
        {
            EmailTemplateFieldDTO field = new EmailTemplateFieldDTO();

            //get fieldList from session if exists
            if (Session["FieldList"] != null)
            {
                FieldList = (List <EmailTemplateFieldDTO>)Session["FieldList"];
            }
            else
            {
                return(field);
            }

            //If field is updating/deleting then remove the old field from UI and data structure
            if (Session["SelectedFieldIndex"] != null)
            {
                if (Session["SelectedFieldValue"] != null && FieldList != null)
                {
                    var selectedValue = Session["SelectedFieldValue"].ToString();
                    //if template is updating get the removed field instance (if field is updating)
                    if (isTemplateUpdate)
                    {
                        field = FieldList.Where(f => f.FieldName == selectedValue).FirstOrDefault();
                    }
                    FieldList.RemoveAll(f => f.FieldName == selectedValue);
                }
                cbxFieldList.RemoveByIndex(Convert.ToInt32(Session["SelectedFieldIndex"]));
            }

            Session["FieldList"] = FieldList;
            return(field);
        }
        protected void SaveFieldAfterValidation()
        {
            //get fieldOptionList
            List <FieldOptionDTO> foList = new List <FieldOptionDTO>();

            if (Session["FieldOptions"] != null)
            {
                foList = (List <FieldOptionDTO>)Session["FieldOptions"];
            }

            //create a field obj on save field
            var DataType     = X.GetCmp <ComboBox>(nameof(cbxDataType)).Value;
            var DefaultValue = X.GetCmp <TextField>("txDefaultValue").Text;
            var DisplayName  = X.GetCmp <TextField>("txDisplayName").Text;
            var FieldName    = X.GetCmp <TextField>("txFieldName").Text;
            var FieldOrder   = Convert.ToInt32(X.GetCmp <TextField>("txFieldOrder").Text);
            var FieldType    = Session["FieldType"].ToString();
            var IsAllowBlank = Convert.ToBoolean(cbxAllowBlank.Value);
            var v            = new EmailTemplateFieldDTO()
            {
                DataType     = Convert.ToString(DataType),
                DefaultValue = DefaultValue,
                DisplayName  = DisplayName,
                FieldName    = FieldName,
                FieldOrder   = FieldOrder,
                FieldType    = FieldType,
                IsAllowBlank = IsAllowBlank,
                FieldOptions = foList
            };


            //get fieldList from session if exists
            if (Session["FieldList"] != null)
            {
                FieldList = (List <EmailTemplateFieldDTO>)Session["FieldList"];
            }

            FieldList.Add(v);

            //update session
            Session["FieldList"] = FieldList;

            //form reset
            //FormPanelFieldData.Reset();

            //hide the form panel
            X.GetCmp <Ext.Net.Panel>("panelFieldData").Hidden = true;

            //set window height as form panel is hidden
            this.Window1.Height = 240;

            //reset radio group to select again
            rdRadioGroup.Reset();

            //reset fieldOption session value
            Session["FieldOptions"] = null;

            //show template save button if >0 field are added
            if (FieldList.Count > 0)
            {
                X.GetCmp <Ext.Net.Button>("btnSaveTemplate").Show();
            }
        }
        protected bool CheckValidity()
        {
            string fieldValue;

            List <EmailTemplateFieldDTO> fieldList    = null;
            EmailTemplateFieldDTO        currentField = null;

            var isDuplicate   = false;
            int count         = 1;
            var fieldSelected = Convert.ToString(Session["SelectedFieldValue"]);

            if (Session["FieldList"] != null && fieldSelected != null)
            {
                fieldList    = (List <EmailTemplateFieldDTO>)Session["FieldList"];
                currentField = fieldList.Where(f => f.FieldName == fieldSelected).FirstOrDefault();
            }


            string value, validationMsg = "";

            //validate if field name is duplicate
            value       = txFieldName.Value.ToString();
            isDuplicate = fieldList != null?fieldList.Exists(f => f.FieldName == value && (fieldSelected == "" || f.FieldName != fieldSelected)) : false;

            if (isDuplicate)
            {
                validationMsg += $"{count++}. Field Name already exists!<br>";
                isDuplicate    = false;
            }

            //validate if field order is duplicate
            value       = txFieldOrder.Value.ToString();
            isDuplicate = fieldList != null?fieldList.Exists(f => f.FieldOrder.ToString() == value && (fieldSelected == "" || f.FieldOrder != currentField.FieldOrder)) : false;

            if (isDuplicate)
            {
                validationMsg += $"{count++}. Field Order already exists!<br>";
                isDuplicate    = false;
            }

            //validate if field display name is duplicate
            value       = txDisplayName.Value.ToString();
            isDuplicate = fieldList != null?fieldList.Exists(f => f.DisplayName == value && (fieldSelected == null || f.DisplayName != currentField.DisplayName)) : false;

            if (isDuplicate)
            {
                validationMsg += $"{count++}. Field Display Name already exists!<br>";
                isDuplicate    = false;
            }

            //validate if field options exists for dropdown field
            if (Session["FieldType"] != null && Session["FieldType"].ToString().ToLower() == "dropdown")
            {
                var foList = (List <FieldOptionDTO>)Session["FieldOptions"];
                if (foList == null || foList.Count < 1)
                {
                    validationMsg += $"{count++}. Atleast one field option required!<br>";
                }
            }

            if (validationMsg != "")
            {
                X.Msg.Alert("Validation", validationMsg).Show();
                return(false);
            }
            return(true);
        }
        private Control GetControl(EmailTemplateFieldDTO field)
        {
            switch (field.FieldType)
            {
            case TEXT_BOX:
                if (field.DataType.Equals(INT, StringComparison.InvariantCultureIgnoreCase))
                {
                    var textField = new NumberField()
                    {
                        ID         = field.FieldName,
                        FieldLabel = field.DisplayName,
                        TabIndex   = (short)field.FieldOrder,
                        AllowBlank = field.IsAllowBlank,
                        Text       = field.DefaultValue
                    };

                    if (!string.IsNullOrEmpty(field.FormatRegEx))
                    {
                        textField.Regex = textField.MaskRe = field.FormatRegEx;
                    }

                    return(textField);
                }
                else
                {
                    var textField = new TextField()
                    {
                        ID         = field.FieldName,
                        FieldLabel = field.DisplayName,
                        TabIndex   = (short)field.FieldOrder,
                        AllowBlank = field.IsAllowBlank,
                        Text       = field.DefaultValue
                    };

                    if (!string.IsNullOrEmpty(field.FormatRegEx))
                    {
                        textField.Regex = textField.MaskRe = field.FormatRegEx;
                    }

                    return(textField);
                }

            case DROP_DOWN:
                var comboBox = new ComboBox()
                {
                    ID         = field.FieldName,
                    FieldLabel = field.DisplayName,
                    Text       = $"Select {field.DisplayName}",
                    Editable   = false,
                    TabIndex   = (short)field.FieldOrder,
                    AllowBlank = field.IsAllowBlank
                };

                if (field.FieldOptions != null && field.FieldOptions.Count > 0)
                {
                    field.FieldOptions.ForEach((fo) => comboBox.Items.Add(new Ext.Net.ListItem()
                    {
                        Text = fo.DisplayName, Value = fo.Value
                    }));
                }

                return(comboBox);

            case CHECK_BOX:
                var checkbox = new Checkbox()
                {
                    ID         = field.FieldName,
                    FieldLabel = field.DisplayName,
                    TabIndex   = (short)field.FieldOrder,
                };

                return(checkbox);

            default:
                return(null);
            }
        }