/// <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)); }
/// <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); }
/// <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()); }
/// <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();
public async Task <IActionResult> SaveFormModel([FromBody] FormModelDto formModel) { return(Tools.CreateResult(true, "", await _reportManager.AddOrEditFormReportAsync(formModel))); }