/// <summary>
        /// Sync table from entity framework
        /// </summary>
        /// <param name="tableModel"></param>
        /// <param name="tableId"></param>
        /// <returns></returns>
        public async Task SyncEntityFromEntityFramework(SynchronizeTableViewModel tableModel, Guid tableId)
        {
            var fieldTypeList = await _context.TableFieldTypes.ToListAsync();

            var fieldConfigList = await _context.TableFieldConfigs.ToListAsync();

            foreach (var item in tableModel.Fields)
            {
                if (item.Configurations != null)
                {
                    foreach (var configViewModel in item.Configurations)
                    {
                        configViewModel.Name = fieldConfigList.FirstOrDefault(x => x.Code == configViewModel.ConfigCode)?.Name;
                    }
                }
                // Save field model in the dataBase
                var configValues = new List <TableFieldConfigValue>();
                var fieldType    = fieldTypeList.FirstOrDefault(x => x.Code == item.TableFieldCode);
                if (fieldType == null)
                {
                    continue;
                }
                var model = new TableModelField
                {
                    DataType         = item.DataType,
                    DisplayName      = item.DisplayName,
                    TableId          = tableId,
                    Description      = item.Description,
                    Name             = item.Name,
                    AllowNull        = item.AllowNull,
                    Synchronized     = true,
                    TableFieldTypeId = fieldType.Id,
                };
                if (item.Configurations != null)
                {
                    foreach (var configItem in item.Configurations)
                    {
                        var config = fieldConfigList.FirstOrDefault(x => x.Code == configItem.ConfigCode);
                        if (config == null)
                        {
                            continue;
                        }

                        configValues.Add(new TableFieldConfigValue
                        {
                            TableFieldConfigId = config.Id,
                            TableModelFieldId  = model.Id,
                            Value = configItem.Value,
                        });
                    }
                }
                model.TableFieldConfigValues = configValues;
                _context.TableFields.Add(model);
                await _context.SaveAsync();
            }
        }
Beispiel #2
0
        /// <summary>
        /// Get Input Body
        /// </summary>
        /// <param name="field"></param>
        /// <returns></returns>
        private async Task <string> GetInputBody(TableModelField field)
        {
            //TODO: On config type render inout body
            var configurations = await _dbContext.TableFieldConfigValues
                                 .Include(x => x.TableFieldConfig)
                                 .Where(x => x.TableModelFieldId == field.Id).ToListAsync();

            var content = string.Empty;

            switch (field.DataType)
            {
            case "nvarchar":
            {
                content = FormField.GetInputTextField(field.Id.ToString());
            }
            break;
            }

            if (configurations.Any())
            {
                //Ignore
            }
            return(content);
        }
Beispiel #3
0
 /// <summary>
 /// Get table field html body
 /// </summary>
 /// <param name="field"></param>
 /// <returns></returns>
 private async Task <string> GetTableFieldBody(TableModelField field)
 {
     return(string.Format(FormField.FieldBodyTemplate, field.Id, await GetInputBody(field), field.Description, field.DisplayName ?? field.Name));
 }
        /// <summary>
        /// Complete sync entity
        /// </summary>
        /// <param name="tableModel"></param>
        /// <param name="table"></param>
        private async Task SyncEntityFieldsAsync(SynchronizeTableViewModel tableModel, TableModel table)
        {
            var resultModel = await _context.Table
                              .AsNoTracking()
                              .Include(x => x.TableFields)
                              .FirstOrDefaultAsync(x => x.Id == table.Id);

            if (resultModel == null)
            {
                return;
            }
            {
                if (tableModel.IsStaticFromEntityFramework)
                {
                    await SyncEntityFromEntityFramework(tableModel, resultModel.Id);
                }
                else
                {
                    var fieldTypeList   = _context.TableFieldTypes.ToList();
                    var fieldConfigList = _context.TableFieldConfigs.ToList();

                    foreach (var item in tableModel.Fields)
                    {
                        foreach (var configViewModel in item.Configurations)
                        {
                            configViewModel.Name = fieldConfigList.FirstOrDefault(x => x.Code == configViewModel.ConfigCode)?.Name;

                            if (configViewModel.ConfigCode != "9999")
                            {
                                continue;
                            }
                            if (configViewModel.Value == "systemcore")
                            {
                                configViewModel.Value = table.EntityType;
                            }
                        }

                        var insertField = _tablesService.AddFieldSql(item, tableModel.Name, _connectionString, true, table.EntityType);
                        // Save field model in the dataBase
                        if (!insertField.Result)
                        {
                            continue;
                        }
                        {
                            var configValues   = new List <TableFieldConfigValue>();
                            var tableFieldType = fieldTypeList.FirstOrDefault(x => x.Code == item.TableFieldCode);
                            if (tableFieldType == null)
                            {
                                continue;
                            }
                            var model = new TableModelField
                            {
                                DataType         = item.DataType,
                                TableId          = resultModel.Id,
                                Description      = item.Description,
                                Name             = item.Name,
                                DisplayName      = item.DisplayName,
                                AllowNull        = item.AllowNull,
                                Synchronized     = true,
                                TableFieldTypeId = tableFieldType.Id
                            };

                            foreach (var configItem in item.Configurations)
                            {
                                var config = fieldConfigList.FirstOrDefault(x => x.Code == configItem.ConfigCode);
                                if (config == null)
                                {
                                    continue;
                                }
                                configValues.Add(new TableFieldConfigValue
                                {
                                    TableFieldConfigId = config.Id,
                                    TableModelFieldId  = model.Id,
                                    Value = configItem.Value,
                                });
                            }

                            model.TableFieldConfigValues = configValues;
                            _context.TableFields.Add(model);
                            var dbResult = await _context.SaveAsync();

                            if (!dbResult.IsSuccess)
                            {
                                Debug.WriteLine(dbResult.Errors);
                            }
                        }
                    }
                }
            }
        }
        public async Task <IActionResult> AddField(CreateTableFieldViewModel field)
        {
            var entitiesList = _entityService.Tables;
            var table        = entitiesList.FirstOrDefault(x => x.Id == field.TableId);
            var tableName    = table?.Name;
            var schema       = table?.EntityType;

            field.EntitiesList = entitiesList.Select(x => x.Name).ToList();
            if (table == null)
            {
                ModelState.AddModelError(string.Empty, "Table not found");
                return(View(field));
            }

            var baseEntityProps = BaseModel.GetPropsName().Select(x => x.ToLower()).ToList();

            if (baseEntityProps.Contains(field.Name.Trim().ToLower()))
            {
                ModelState.AddModelError(string.Empty, "This field name can't be used, is system name!");
                return(View(field));
            }

            var configurationsRq = await _entityService.RetrieveConfigurationsOnAddNewTableFieldAsyncTask(field);

            if (configurationsRq.IsSuccess)
            {
                field.Configurations = configurationsRq.Result.ToList();
            }

            field = field.CreateSqlField();
            var insertField = _tablesService.AddFieldSql(field, tableName, ConnectionString, true, schema);

            // Save field model in the dataBase
            if (!insertField.Result)
            {
                ModelState.AddModelError(string.Empty, "Fail to apply changes to database!");
                return(View(field));
            }

            if (!table.IsCommon)
            {
                var isDynamic         = true;
                var isReference       = false;
                var referenceIsCommon = true;
                var tenants           = _organizationService.GetAllTenants().Where(x => x.MachineName != GearSettings.DEFAULT_ENTITY_SCHEMA).ToList();
                if (field.Parameter == FieldType.EntityReference)
                {
                    isReference = true;
                    var referenceTableName = field.Configurations
                                             .FirstOrDefault(x => x.Name == nameof(TableFieldConfigCode.Reference.ForeingTable))?.Value;

                    if (!referenceTableName.IsNullOrEmpty())
                    {
                        var refTable = await Context.Table.FirstOrDefaultAsync(x =>
                                                                               x.Name.Equals(referenceTableName) && x.EntityType.Equals(GearSettings.DEFAULT_ENTITY_SCHEMA) ||
                                                                               x.Name.Equals(referenceTableName) && x.IsPartOfDbContext);

                        if (refTable.IsPartOfDbContext)
                        {
                            isDynamic = false;
                        }
                        else if (!refTable.IsCommon)
                        {
                            referenceIsCommon = false;
                        }
                    }
                }

                foreach (var tenant in tenants)
                {
                    if (isDynamic && isReference && !referenceIsCommon)
                    {
                        var schemaConf = field.Configurations?.FirstOrDefault(x =>
                                                                              x.ConfigCode.Equals(TableFieldConfigCode.Reference.ForeingSchemaTable));
                        if (schemaConf != null)
                        {
                            var index = field.Configurations.IndexOf(schemaConf);
                            schemaConf.Value     = tenant.MachineName;
                            field.Configurations = field.Configurations.Replace(index, schemaConf).ToList();
                        }
                    }
                    _tablesService.AddFieldSql(field, tableName, ConnectionString, true, tenant.MachineName);
                }
            }

            var configs = field.Configurations.Select(item => new TableFieldConfigValue
            {
                TableFieldConfigId = item.ConfigId,
                Value = item.Value,
            }).ToList();

            var model = new TableModelField
            {
                DataType               = field.DataType,
                TableId                = field.TableId,
                Description            = field.Description,
                Name                   = field.Name,
                DisplayName            = field.DisplayName,
                AllowNull              = field.AllowNull,
                Synchronized           = true,
                TableFieldTypeId       = field.TableFieldTypeId,
                TableFieldConfigValues = configs
            };

            Context.TableFields.Add(model);
            var result = await Context.SaveAsync();

            if (result.IsSuccess)
            {
                RefreshRuntimeTypes();
                return(RedirectToAction("Edit", "Table", new { id = field.TableId, tab = "two" }));
            }

            ModelState.AppendResultModelErrors(result.Errors);

            return(View(field));
        }
Beispiel #6
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);
        }