private static bool HasKey(Expando expando, string key) { return expando.GetProperties().Any(p => p.Key == key); }
public FieldResponse CreateField(Guid entityId, FieldType type, Expando data, string name, string label, Guid? id = null, string placeholderText = "", string helpText = "", string description = "", bool system = false, bool required = false, bool unique = false, bool searchable = false, bool auditable = false) { Field field = null; if (data == null) data = new Expando(); switch (type) { case FieldType.AutoNumberField: field = new AutoNumberField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((AutoNumberField)field).DefaultValue = (decimal?)data["defaultValue"]; if (HasKey(data, "startingNumber") && data["startingNumber"] != null) ((AutoNumberField)field).StartingNumber = (decimal?)data["startingNumber"]; if (HasKey(data, "displayFormat") && data["displayFormat"] != null) ((AutoNumberField)field).DisplayFormat = (string)data["displayFormat"]; break; case FieldType.CheckboxField: field = new CheckboxField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((CheckboxField)field).DefaultValue = (bool?)data["defaultValue"] ?? false; break; case FieldType.CurrencyField: field = new CurrencyField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((CurrencyField)field).DefaultValue = (decimal?)data["defaultValue"]; if (HasKey(data, "minValue") && data["minValue"] != null) ((CurrencyField)field).MinValue = (decimal?)data["minValue"]; if (HasKey(data, "maxValue") && data["maxValue"] != null) ((CurrencyField)field).MaxValue = (decimal?)data["maxValue"]; if (HasKey(data, "currency") && data["currency"] != null) { ((CurrencyField)field).Currency = (CurrencyType)data["currency"]; } else { ((CurrencyField)field).Currency = new CurrencyType(); ((CurrencyField)field).Currency.Code = "USD"; ((CurrencyField)field).Currency.DecimalDigits = 2; ((CurrencyField)field).Currency.Name = "US dollar"; ((CurrencyField)field).Currency.NamePlural = "US dollars"; ((CurrencyField)field).Currency.Rounding = 0; ((CurrencyField)field).Currency.Symbol = "$"; ((CurrencyField)field).Currency.SymbolNative = "$"; ((CurrencyField)field).Currency.SymbolPlacement = CurrencySymbolPlacement.Before; ((CurrencyField)field).DefaultValue = 1; } break; case FieldType.DateField: field = new DateField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((DateField)field).DefaultValue = (DateTime?)data["defaultValue"]; if (HasKey(data, "format") && data["format"] != null) ((DateField)field).Format = (string)data["format"]; if (HasKey(data, "useCurrentTimeAsDefaultValue") && data["useCurrentTimeAsDefaultValue"] != null) ((DateField)field).UseCurrentTimeAsDefaultValue = (bool?)data["useCurrentTimeAsDefaultValue"]; break; case FieldType.DateTimeField: field = new DateTimeField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((DateTimeField)field).DefaultValue = (DateTime?)data["defaultValue"]; if (HasKey(data, "format") && data["format"] != null) ((DateTimeField)field).Format = (string)data["format"]; if (HasKey(data, "useCurrentTimeAsDefaultValue") && data["useCurrentTimeAsDefaultValue"] != null) ((DateTimeField)field).UseCurrentTimeAsDefaultValue = (bool?)data["useCurrentTimeAsDefaultValue"]; break; case FieldType.EmailField: field = new EmailField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((EmailField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "maxLength") && data["maxLength"] != null) ((EmailField)field).MaxLength = (int?)data["maxLength"]; break; case FieldType.FileField: field = new FileField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((FileField)field).DefaultValue = (string)data["defaultValue"]; break; case FieldType.GuidField: field = new GuidField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((GuidField)field).DefaultValue = (Guid?)data["defaultValue"]; if (HasKey(data, "generateNewId") && data["generateNewId"] != null) ((GuidField)field).GenerateNewId = (bool?)data["generateNewId"]; break; case FieldType.HtmlField: field = new HtmlField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((HtmlField)field).DefaultValue = (string)data["defaultValue"]; break; case FieldType.ImageField: field = new ImageField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((ImageField)field).DefaultValue = (string)data["defaultValue"]; break; case FieldType.MultiLineTextField: field = new MultiLineTextField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((MultiLineTextField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "maxLength") && data["maxLength"] != null) ((MultiLineTextField)field).MaxLength = (int?)data["maxLength"]; if (HasKey(data, "visibleLineNumber") && data["visibleLineNumber"] != null) ((MultiLineTextField)field).VisibleLineNumber = (int?)data["visibleLineNumber"]; break; case FieldType.MultiSelectField: field = new MultiSelectField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((MultiSelectField)field).DefaultValue = (IEnumerable<string>)data["defaultValue"]; if (HasKey(data, "options") && data["options"] != null) ((MultiSelectField)field).Options = (List<MultiSelectFieldOption>)data["options"]; break; case FieldType.NumberField: field = new NumberField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((NumberField)field).DefaultValue = (int?)data["defaultValue"]; if (HasKey(data, "minValue") && data["minValue"] != null) ((NumberField)field).MinValue = (decimal?)data["minValue"]; if (HasKey(data, "maxValue") && data["maxValue"] != null) ((NumberField)field).MaxValue = (decimal?)data["maxValue"]; if (HasKey(data, "decimalPlaces") && data["decimalPlaces"] != null) ((NumberField)field).DecimalPlaces = (byte?)data["decimalPlaces"]; break; case FieldType.PasswordField: field = new PasswordField(); if (HasKey(data, "maxLength") && data["maxLength"] != null) ((PasswordField)field).MaxLength = (int?)data["maxLength"]; if (HasKey(data, "minLength") && data["minLength"] != null) ((PasswordField)field).MinLength = (int?)data["minLength"]; if (HasKey(data, "encrypted") && data["encrypted"] != null) ((PasswordField)field).Encrypted = (bool?)data["encrypted"]; break; case FieldType.PercentField: field = new PercentField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((PercentField)field).DefaultValue = (decimal?)data["defaultValue"]; //0.01m; if (HasKey(data, "minValue") && data["minValue"] != null) ((PercentField)field).MinValue = (decimal?)data["minValue"]; if (HasKey(data, "maxValue") && data["maxValue"] != null) ((PercentField)field).MaxValue = (decimal?)data["maxValue"]; if (HasKey(data, "decimalPlaces") && data["decimalPlaces"] != null) ((PercentField)field).DecimalPlaces = (byte?)data["decimalPlaces"]; break; case FieldType.PhoneField: field = new PhoneField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((PhoneField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "format") && data["format"] != null) ((PhoneField)field).Format = (string)data["format"]; if (HasKey(data, "maxLength") && data["maxLength"] != null) ((PhoneField)field).DefaultValue = (string)data["maxLength"]; break; case FieldType.SelectField: field = new SelectField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((SelectField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "options") && data["options"] != null) ((SelectField)field).Options = (List<SelectFieldOption>)data["options"]; break; case FieldType.TextField: field = new TextField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((TextField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "maxLength") && data["maxLength"] != null) ((TextField)field).MaxLength = (int?)data["maxLength"]; break; case FieldType.UrlField: field = new UrlField(); if (HasKey(data, "defaultValue") && data["defaultValue"] != null) ((UrlField)field).DefaultValue = (string)data["defaultValue"]; if (HasKey(data, "maxLength") && data["maxLength"] != null) ((UrlField)field).MaxLength = (int?)data["maxLength"]; if (HasKey(data, "openTargetInNewWindow") && data["openTargetInNewWindow"] != null) ((UrlField)field).OpenTargetInNewWindow = (bool?)data["openTargetInNewWindow"]; break; default: { FieldResponse response = new FieldResponse(); response.Timestamp = DateTime.UtcNow; response.Success = false; response.Message = "Not supported field type!"; response.Success = false; return response; } } field.Id = id.HasValue && id.Value != Guid.Empty ? id.Value : Guid.NewGuid(); field.Name = name; field.Label = label; field.PlaceholderText = placeholderText; field.Description = description; field.HelpText = helpText; field.Required = required; field.Unique = unique; field.Searchable = searchable; field.Auditable = auditable; field.System = system; return CreateField(entityId, field.MapTo<InputField>()); }