Exemplo n.º 1
0
        /// <inheritdoc />
        /// <summary>
        /// Get table field configurations
        /// </summary>
        /// <param name="field"></param>
        /// <param name="schema"></param>
        /// <returns></returns>
        public virtual async Task <IEnumerable <FieldConfigViewModel> > GetTableFieldConfigurations(TableModelField field, string schema)
        {
            Arg.NotNull(field, nameof(TableModelField));
            var fieldType = await _context.TableFieldTypes.FirstOrDefaultAsync(x => x.Id == field.TableFieldTypeId);

            var fieldTypeConfig = _context.TableFieldConfigs.Where(x => x.TableFieldTypeId == fieldType.Id).ToList();
            var configFields    = new List <FieldConfigViewModel>();

            //TODO: if config not defined, load it
            foreach (var y in field.TableFieldConfigValues)
            {
                var fTypeConfig = fieldTypeConfig.FirstOrDefault(x => x.Id == y.TableFieldConfigId);
                if (fTypeConfig == null)
                {
                    continue;
                }

                var config = new FieldConfigViewModel
                {
                    Name        = fTypeConfig.Name,
                    Type        = fTypeConfig.Type,
                    ConfigId    = y.TableFieldConfigId,
                    Description = fTypeConfig.Description,
                    ConfigCode  = fTypeConfig.Code,
                    Value       = y.Value
                };

                if (fTypeConfig.Code.Equals(TableFieldConfigCode.Reference.ForeingSchemaTable))
                {
                    var tableName = field.TableFieldConfigValues
                                    .FirstOrDefault(x => x.TableFieldConfig.Code
                                                    .Equals(TableFieldConfigCode.Reference.ForeingTable));
                    if (tableName != null)
                    {
                        var table = _context.Table.FirstOrDefault(x =>
                                                                  x.Name.Equals(tableName.Value) && x.EntityType == GearSettings.DEFAULT_ENTITY_SCHEMA);
                        if (table != null && !table.IsPartOfDbContext && !table.IsSystem && !table.IsCommon)
                        {
                            config.Value = schema;
                        }
                    }
                }
                configFields.Add(config);
            }

            return(configFields);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Update display format configuration for table field
        /// </summary>
        /// <param name="fieldId"></param>
        /// <param name="target"></param>
        /// <param name="dbItems"></param>
        /// <returns></returns>
        private static async Task UpdateTableFieldDisplayFormatAsync(Guid fieldId, FieldConfigViewModel target, ICollection <TableFieldConfigValue> dbItems)
        {
            var context        = IoC.Resolve <IEntityContext>();
            var existentConfig = dbItems.FirstOrDefault(x => x.TableFieldConfig?.Code == target.ConfigCode);

            if (existentConfig == null)
            {
                var confType =
                    await context.TableFieldConfigs.FirstOrDefaultAsync(x =>
                                                                        x.Code == TableFieldConfigCode.Reference.DisplayFormat);

                context.TableFieldConfigValues.Add(new TableFieldConfigValue
                {
                    Value             = target.Value,
                    TableFieldConfig  = confType,
                    TableModelFieldId = fieldId
                });
            }
            else
            {
                existentConfig.Value = target.Value;
                context.TableFieldConfigValues.Remove(existentConfig);
                await context.SaveChangesAsync();

                context.TableFieldConfigValues.Add(existentConfig);
            }

            try
            {
                await context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> EditField([Required] CreateTableFieldViewModel field)
        {
            var table = await Context.Table
                        .Include(x => x.TableFields)
                        .FirstOrDefaultAsync(x => x.Id == field.TableId && x.TableFields.FirstOrDefault(y => y.Id == field.Id) != null);

            if (table == null)
            {
                return(NotFound());
            }
            var model = table.TableFields.FirstOrDefault(x => x.Id == field.Id);

            if (model == null)
            {
                return(NotFound());
            }
            switch (field.Parameter)
            {
            case FieldType.EntityReference:
                field.DataType = TableFieldDataType.Guid;
                break;

            case FieldType.Boolean:
                FieldConfigViewModel defaultBool = null;
                foreach (var c in field.Configurations)
                {
                    if (c.Name != FieldConfig.DefaultValue)
                    {
                        continue;
                    }
                    defaultBool = c;
                    break;
                }

                if (defaultBool?.Value != null && defaultBool.Value.Trim() == "on")
                {
                    defaultBool.Value = "1";
                }
                if (defaultBool?.Value != null && defaultBool.Value.Trim() == "off")
                {
                    defaultBool.Value = "0";
                }
                break;

            case FieldType.DateTime:
            case FieldType.Date:
            case FieldType.Time:
                FieldConfigViewModel defaultTime = null;
                foreach (var c in field.Configurations)
                {
                    if (c.Name != FieldConfig.DefaultValue)
                    {
                        continue;
                    }
                    defaultTime = c;
                    break;
                }

                if (defaultTime?.Value != null && defaultTime.Value.Trim() == "on")
                {
                    defaultTime.Value = "CURRENT_TIMESTAMP";
                }
                if (defaultTime?.Value != null && defaultTime.Value.Trim() == "off")
                {
                    defaultTime.Value = null;
                }
                break;
            }
            var fieldType = await Context.TableFieldTypes
                            .AsNoTracking()
                            .FirstOrDefaultAsync(x => x.DataType == field.DataType);

            var fieldTypeConfig = Context.TableFieldConfigs.AsNoTracking()
                                  .Where(x => x.TableFieldTypeId == fieldType.Id).ToList();

            var newConfigs     = field.Configurations;
            var dbFieldConfigs = Context.TableFieldConfigValues.AsNoTracking()
                                 .Include(x => x.TableFieldConfig)
                                 .Include(x => x.TableModelField)
                                 .Where(x => x.TableModelFieldId == field.Id).ToList();

            field.Configurations = dbFieldConfigs
                                   .Select(y =>
            {
                var conf = fieldTypeConfig.FirstOrDefault(x => x.Id == y.TableFieldConfigId);
                return(new FieldConfigViewModel
                {
                    Name = conf?.Name,
                    Type = conf?.Type,
                    ConfigId = y.TableFieldConfigId,
                    Description = fieldTypeConfig.Single(x => x.Id == y.TableFieldConfigId).Description,
                    Value = y.Value
                });
            }).ToList();

            var updateStructure = _tablesService.AddFieldSql(field, table.Name, ConnectionString, false, table.EntityType);

            // Save field model structure in the dataBase
            if (!updateStructure.IsSuccess)
            {
                return(View(field));
            }

            model.Description = field.Description;
            model.Name        = field.Name;
            model.DisplayName = field.DisplayName;
            model.AllowNull   = field.AllowNull;

            try
            {
                Context.TableFields.Update(model);
                Context.SaveChanges();
                _entityService.UpdateTableFieldConfigurations(model.Id, newConfigs, dbFieldConfigs);
                return(RedirectToAction("Edit", "Table", new { id = field.TableId, tab = "two" }));
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
                ModelState.AddModelError("Fail", ex.Message);
            }

            return(View(field));
        }
Exemplo n.º 4
0
        public static CreateTableFieldViewModel CreateSqlField(this CreateTableFieldViewModel field)
        {
            switch (field.Parameter)
            {
            case FieldType.EntityReference:
                field.DataType = TableFieldDataType.Guid;
                break;

            case FieldType.Boolean:
                FieldConfigViewModel defaultBool = null;
                foreach (var c in field.Configurations)
                {
                    if (c.Name != FieldConfig.DefaultValue)
                    {
                        continue;
                    }
                    defaultBool = c;
                    break;
                }

                if (defaultBool?.Value != null && defaultBool.Value.Trim() == "on")
                {
                    defaultBool.Value = "1";
                }
                if (defaultBool?.Value != null && defaultBool.Value.Trim() == "off")
                {
                    defaultBool.Value = "0";
                }
                break;

            case FieldType.DateTime:
            case FieldType.Date:
            case FieldType.Time:
                FieldConfigViewModel defaultTime = null;
                foreach (var c in field.Configurations)
                {
                    if (c.Name != FieldConfig.DefaultValue)
                    {
                        continue;
                    }
                    defaultTime = c;
                    break;
                }

                if (defaultTime?.Value != null && defaultTime.Value.Trim() == "on")
                {
                    defaultTime.Value = "CURRENT_TIMESTAMP";
                }
                if (defaultTime?.Value != null && defaultTime.Value.Trim() == "off")
                {
                    defaultTime.Value = null;
                }
                break;

            case FieldType.File:
                field.DataType = TableFieldDataType.Guid;
                var foreignTable = field.Configurations.FirstOrDefault(s => s.Name == "ForeingTable");
                if (foreignTable != null)
                {
                    foreignTable.Value = "FileReferences";
                }

                break;
            }
            return(field);
        }