예제 #1
0
 /// <summary>
 /// Добавление новой формы
 /// </summary>
 /// <param name="modelArg">Модель данных для добавления</param>
 /// <returns>Результат выполнения</returns>
 public async Task <ResultCrmDb> AddOrEditFormReportAsync(FormModelDto modelArg)
 {
     if (modelArg.Id == 0 && string.IsNullOrWhiteSpace(modelArg.NameClassDataEngine))
     {
         modelArg.NameClassDataEngine = nameof(ReportEngineDefaultData);
     }
     return(await AddOrEditModel(modelArg, _reportDbContext.FormModel));
 }
예제 #2
0
        /// <summary>
        /// Проверка сохранеяемой модели по предоставленным правилам
        /// </summary>
        /// <param name="saveModel">Модель для сохранения</param>
        /// <param name="formModelId">Системный номер модели данных</param>
        /// <returns></returns>
        public async Task <ResultCrmDb> ValidateModel(dynamic saveModel, FormModelDto formModelId)
        {
            var result = new ResultCrmDb();

            if (!(saveModel is JObject))
            {
                return(result);
            }
            var fields = await _reportDbContext.Field.Where(f => f.FormModelId == formModelId.Id).ToListAsync();

            var saveRuleModel = saveModel as JObject;

            var models = _reportDbContext.ValidationRuleEntity.Where(f => f.FormModelId == formModelId.Id && f.IsDeleted == false);

            foreach (var ruleEntity in models)
            {
                if (ruleEntity.TypeValidation == TypeValidation.Component)
                {
                    continue;
                }
                var sql = ruleEntity.Content;
                foreach (var jObject in saveRuleModel)
                {
                    sql = sql.Replace($"[{jObject.Key}]", jObject.Value.ToObject <string>());
                }

                foreach (var field in fields)
                {
                    sql = sql.Replace($"[{field.Name.GetFieldName()}]", field.TypeControl == TypeControl.NumericEdit ? "0" : "null");
                }

                using (var connection = _connectorManager.GetConnection())
                {
                    var res = await connection.QueryFirstOrDefaultAsync <int>(sql);

                    if (res > 0)
                    {
                        result.AddError(ruleEntity.Name, ruleEntity.ToolTip);
                    }
                }
            }


            return(result);
        }
예제 #3
0
        /// <summary>
        /// Получить список полей для редактирования
        /// </summary>
        /// <param name="fields"></param>
        /// <param name="entity"></param>
        /// <returns></returns>
        public async Task <string> GetProperty(IEnumerable <FieldAccessDto> fields, FormModelDto entity)
        {
            var fieldAccessDtos = fields.Where(f => f.IsDetail ?? false).ToList();
            var jArray          = new JArray();
            var count           = (entity.ColCount ?? 0) == 0 ? 1 : entity.ColCount;

            for (int i = 1; i <= count; i++)
            {
                var fieldsGroup = fieldAccessDtos.ToList();
                foreach (var field in fieldsGroup.Where(f => (f.ParentId ?? 0) == 0))
                {
                    JObject jObject;
                    switch (field.TypeGroup)
                    {
                    case TypeGroup.None:
                        jObject = await CreateSimpleItem(field);

                        break;

                    case TypeGroup.Group:
                        jObject = await CreateGroupItem(field, fieldsGroup);

                        break;

                    case TypeGroup.Tab:
                        jObject = await CreateGroupItem(field, fieldsGroup);

                        break;

                    default:
                        jObject = null;
                        break;
                    }
                    if (jObject == null)
                    {
                        continue;
                    }
                    jArray.Add(jObject);
                }
            }

            return(jArray.ToString());
        }
예제 #4
0
        /// <summary>
        /// Сохранение измененных данных с фронта
        /// </summary>
        /// <param name="p">Класс параметров для сохранения данных</param>
        /// <param name="userName"></param>
        /// <param name="formModelSave">Модель для сохранения данных</param>
        /// <param name="formModel"></param>
        /// <returns></returns>
        public virtual async Task <ResultCrmDb> SaveModels(FormModelDto formModel, string userName, dynamic formModelSave)
        {
            var result = new ResultCrmDb();

            if (!(formModelSave is JObject))
            {
                return(result);
            }
            var modelSave  = formModelSave as JObject;
            var fieldsBase = (await _reportManager.GetFieldsFormAsync(userName, formModel.Id, false, fields =>
                                                                      fields.Where(f => !(f.IsVirtual ?? false)))).ToList();
            var fileds = fieldsBase.Where(f => (((f.IsDetail ?? false) && !(f.IsVirtual ?? false)) ||
                                                modelSave.Properties().FirstOrDefault(ff => ff.Name == ColumnHelper.GetFieldName(f.Name)) != null) || (f.IsKey ?? false)).ToList();

            var data     = formModelSave as JObject;
            var fieldKey = fileds.FirstOrDefault(f => f.IsKey ?? false);

            if (fieldKey == null)
            {
                return(result);
            }

            var  valueKey = data.GetValue(fieldKey.Name)?.Value <string>();
            bool isNew    = string.IsNullOrWhiteSpace(valueKey) || valueKey == "0";

            using var connection = _connectorManager.GetConnection();
            var db = new QueryFactory(connection, _connectorManager.Compiler);

            var query    = db.Query(formModel.TableName);
            var columns  = fileds.Select(s => ColumnHelper.GetFieldName(s.Name));
            var dataSave = fileds.Select(s =>
            {
                var value = data.GetValue(ColumnHelper.GetFieldName(s.Name))?.Value <string>();
                return(s.TypeControl switch
                {
                    TypeControl.DateEdit => (value == null ? null : data.GetValue(s.Name)?.Value <DateTime>()) as object,
                    TypeControl.NumericEdit => (value == null ? 0 : data.GetValue(s.Name)?.Value <decimal>()) as object,
                    TypeControl.CheckBox => (value == null ? null : data.GetValue(s.Name)?.Value <bool>()) as object,
                    _ => value as object
                });
            }).ToList();
예제 #5
0
 public async Task <IActionResult> SaveFormModel([FromBody] FormModelDto formModel)
 {
     return(Tools.CreateResult(true, "", await _reportManager.AddOrEditFormReportAsync(formModel)));
 }