private static List<DynamicColumnsCollection> MakeColumnsList(RegistrationFormAdminDetailView parent, List<DynamicColumnsCollection> columns, List<SubEntityRecord> recordList, DynamicFormDto form) { int eventRegistrationEntityId = GetEventRegistrationFormEntityId(parent); var columnCollection = new DynamicColumnsCollection(); int i = 0; foreach (var record in recordList) { //if dynamicColumnInstance Id = 0 then it's new, so save it. var dynamicColumnInstanceId = int.Parse(CommonUtils.GetFieldValue(record.Fields, _id)); if (dynamicColumnInstanceId == 0) dynamicColumnInstanceId = AddDynamicColumnInstant(parent, eventRegistrationEntityId, record); else UpdateDynamicColumnInstant(parent, eventRegistrationEntityId, record, dynamicColumnInstanceId); var column = new DynamicFormsDynamicColumnDto { DynamicForm = form, FormOrder = i++, DynamicColumnInstance = new DynamicColumnInstanceDto { Id = dynamicColumnInstanceId } }; columnCollection.Add(column); } columns.Add(columnCollection); return columns; }
private List<Field> BuildFields(DynamicFormDto form, bool newRecord) { var fields = new List<Field>(); if (!newRecord) fields.Add(new Field(_id, "Id", FieldTypes.Label, form.Id)); else fields.Add(new Field(_id, "Id", FieldTypes.Hidden, 0)); fields.Add(new Field(_templateName, "Template Name", FieldTypes.Text, form.Name, true)); return fields; }
public static int Save(RegistrationFormAdminDetailView parent, List<SubEntity> subEntities, string templateName) { try { if (string.IsNullOrEmpty(templateName.Trim())) throw new Exception("Template Name required."); var columns = new List<DynamicColumnsCollection>(); var form = new DynamicFormDto { Name = templateName, IsTemplate = true, Id = _templateId, LabelPosition = string.Empty }; var fieldList = new List<object>(); ValidateSubEntitites(subEntities); //build columns from both left and right subentities foreach (var sub in subEntities) { var records = sub.Records.Where(a => a.Action != RecordActions.Deleted).ToList(); columns = MakeColumnsList(parent, columns, records, form); //get fieldNames from both left and right columns, and then check for duplicates. var subEntityFields = records.Where(r => r.Fields != null).Select(f => f.Fields); foreach (var item in subEntityFields.ToList()) { var fieldName = item.Where(r => r.FieldName == _fieldName).Select(r => r.FieldValue).First(); fieldList.Add(fieldName); } } var duplicates = fieldList.GroupBy(x => x).Where(g => g.Count() > 1).Select(g => g.Key).ToList(); if (duplicates.Count() > 0) { var errorMessage = string.Format("The following fields appear in the template more than once, please remove the field from either the Left or Right Column: {0}", string.Join(", ", duplicates)); throw new Exception(errorMessage); } if (_templateId > 0) { var request = new UpdateDynamicFormWithColumnsRequest { Form = form, FieldsInColumns = columns }; parent.ProcessRequest<UpdateDynamicFormWithColumnsResponse>(request); } else { var request = new AddDynamicFormWithColumnsRequest { Form = form, FieldsInColumns = columns }; _templateId = parent.ProcessRequest<AddDynamicFormWithColumnsResponse>(request).Id; } return _templateId; } catch (Exception ex) { throw new Exception(ex.Message); } }
private List<SubEntity> BuildSubEntities(DynamicFormDto form) { var subEntities = new List<SubEntity>(); subEntities.Add(RegistrationFormColumnAdminDetailView.BuildSubEntity(this, form.Id, _registrationFormLeftColumn)); subEntities.Add(RegistrationFormColumnAdminDetailView.BuildSubEntity(this, form.Id, _registrationFormRightColumn)); _viewModel.SubEntities.Clear(); return subEntities; }