private IEnumerable <string> Property(ScreenSectionEntityFormFields entityFormFieldEntity, IEnumerable <ScreenSectionEntityFormFields> effes, string requestObjectName = "request", string existingObjectName = "", int level = 0, bool add = false) { var properties = new List <string>(); foreach (var group in entityFormFieldEntity.FormFields.GroupBy(ff => ff.EntityPropertyId)) { var formField = group.First(); switch (formField.PropertyType) { case PropertyType.PrimaryKey: case PropertyType.ParentRelationshipOneToOne: // Ignore break; case PropertyType.ParentRelationshipOneToMany: case PropertyType.ReferenceRelationship: properties.Add($" {new string(' ', 4 * level)}updates.Add(update.Set(p => p.{existingObjectName}{formField.InternalNameCSharp}, {requestObjectName}.{formField.InternalNameCSharp}));"); break; default: properties.Add($" {new string(' ', 4 * level)}updates.Add(update.Set(p => p.{existingObjectName}{formField.InternalNameCSharp}, {requestObjectName}.{formField.InternalNameCSharp}));"); break; } } if (entityFormFieldEntity.ChildEntities != null) { foreach (var childEntityFormFieldEntity in entityFormFieldEntity.ChildEntities) { var childProperties = new List <string>(); var childObjectName = $"{requestObjectName}.{childEntityFormFieldEntity.InternalName}"; var childExistingObjectName = $"{(string.IsNullOrEmpty(existingObjectName) ? "" : $"{existingObjectName}.")}{childEntityFormFieldEntity.InternalName}.";
private IEnumerable <string> GetPropertiesRecursive(ScreenSectionEntityFormFields entityFormFieldEntity, IEnumerable <ScreenSectionEntityFormFields> effes, string objectName = "item", int level = 0) { var properties = new List <string>(); foreach (var group in entityFormFieldEntity.FormFields.GroupBy(ff => ff.EntityPropertyId)) { var formField = group.First(); switch (formField.PropertyType) { case PropertyType.ReferenceRelationship: properties.Add($" {new string(' ', 4 * level)}{formField.InternalNameCSharp} = {objectName}.{formField.InternalNameCSharp}"); // TODO: Title should be configurable // TODO: is it faster to do the bool check on the key instead of object? // TODO: needs to work for all levels if (level == 0) { properties.Add($" {new string(' ', 4 * level)}{formField.InternalNameAlternateCSharp} = {objectName}.{formField.Property.InternalName} != null ? {objectName}.{formField.Property.InternalName}.Title : null"); } break; case PropertyType.ParentRelationshipOneToOne: // TODO break; default: properties.Add($" {new string(' ', 4 * level)}{formField.InternalNameCSharp} = {objectName}.{formField.InternalNameCSharp}"); break; } } if (entityFormFieldEntity.ChildEntities != null) { foreach (var childEntityFormFieldEntity in entityFormFieldEntity.ChildEntities) { var childProperties = new List <string>(); var childObjectName = $"{objectName}.{childEntityFormFieldEntity.InternalName}"; foreach (var effe in effes) { if (effe.Entity.Id == childEntityFormFieldEntity.Id) { childProperties.AddRange(GetPropertiesRecursive(effe, effes, childObjectName, level + 1)); } } var parentPropertyInternalName = (from p in childEntityFormFieldEntity.Properties where p.PropertyType == PropertyType.ParentRelationshipOneToOne select p).Single().InternalName; properties.Add($@" {new string(' ', 4 * level)}{childEntityFormFieldEntity.InternalName} = {childObjectName} == null || !{childObjectName}.{parentPropertyInternalName}Id.HasValue ? null : new {childEntityFormFieldEntity.InternalName}Response{{ {string.Join(string.Concat(",", Environment.NewLine), childProperties)} {new string(' ', 4 * level)}}}"); } } return(properties); }
private IEnumerable <string> Property(ScreenSectionEntityFormFields entityFormFieldEntity, IEnumerable <ScreenSectionEntityFormFields> effes, string requestObjectName = "put", string existingObjectName = "existingRecord", int level = 0, bool add = false) { var properties = new List <string>(); foreach (var group in entityFormFieldEntity.FormFields.GroupBy(ff => ff.EntityPropertyId)) { var formField = group.First(); switch (formField.PropertyType) { case PropertyType.PrimaryKey: case PropertyType.ParentRelationshipOneToOne: // Ignore break; default: properties.Add($" {new string(' ', 4 * level)}{existingObjectName}.{formField.InternalNameCSharp} = {requestObjectName}.{formField.InternalNameCSharp};"); break; } } if (entityFormFieldEntity.ChildEntities != null) { foreach (var childEntityFormFieldEntity in entityFormFieldEntity.ChildEntities) { var childProperties = new List <string>(); var childObjectName = $"{requestObjectName}.{childEntityFormFieldEntity.InternalName}"; var childExistingObjectName = $"{existingObjectName}.{childEntityFormFieldEntity.InternalName}"; foreach (var effe in effes) { if (effe.Entity.Id == childEntityFormFieldEntity.Id) { childProperties.AddRange(Property(effe, effes, childObjectName, childExistingObjectName, level + 1)); } } var parentPropertyInternalName = (from p in childEntityFormFieldEntity.Properties where p.PropertyType == PropertyType.ParentRelationshipOneToOne select p).Single().InternalName; if (add) { properties.Add($@" if ({childObjectName} != null) {{ {existingObjectName}.{childEntityFormFieldEntity.InternalName} = new {childEntityFormFieldEntity.InternalName}(); {string.Join(Environment.NewLine, childProperties)} }}"); } else { properties.Add($@" if ({childObjectName} == null) {{ {existingObjectName}.{childEntityFormFieldEntity.InternalName} = null; }} else {{ if ({existingObjectName}.{childEntityFormFieldEntity.InternalName} == null || !{existingObjectName}.{childEntityFormFieldEntity.InternalName}.{parentPropertyInternalName}Id.HasValue) {{ {existingObjectName}.{childEntityFormFieldEntity.InternalName} = new {childEntityFormFieldEntity.InternalName}(); }} {string.Join(Environment.NewLine, childProperties)} }}"); } } } return(properties); }