using COA.EnterpriseServices.DataAccess.Entities; using COA.PartnerApis.QuickBase; using System.Collections.Generic; using System.Linq; namespace COA.EnterpriseServices.DataAccess.QuickBase { /// /// Maintains a list of entity types and property mappings to QuickBase fields /// internal static class RecordMapRegistry { private static readonly ICollection recordMaps = new List(); static RecordMapRegistry() { #region Creditor recordMaps.Add(new RecordMap() .WithDefaults() .WithProperty(c => c.ClientFirstName, CreditorsFieldMap.ClientFirstName) .WithProperty(c => c.ClientFirstName, CreditorsFieldMap.ClientFirstName) .WithProperty(c => c.ClientLastName, CreditorsFieldMap.ClientLastName) .WithProperty(c => c.CurrentCreditorProfileId, CreditorsFieldMap.RelatedCurrentCreditorPrimary) .WithProperty(c => c.OriginalCreditorProfileId, CreditorsFieldMap.RelatedOriginalCreditor) .WithProperty(c => c.Status, CreditorsFieldMap.CreditorStatus) .WithProperty(c => c.AccountNumber, CreditorsFieldMap.AccountNum)); #endregion #region Client recordMaps.Add(new RecordMap() .WithDefaults() .WithProperty(c => c.FirstName, ClientFieldMap.FirstName) .WithProperty(c => c.LastName, ClientFieldMap.LastName) .WithProperty(c => c.Email, ClientFieldMap.ClientPrimaryEmail) .WithProperty(c => c.Phone, ClientFieldMap.ClientPrimaryPhone) .WithProperty(c => c.Address, ClientFieldMap.Address1)); #endregion } internal static Record GetRecord(object item) { var data = new Record(); var itemType = item.GetType(); var properties = itemType.GetProperties(); var map = recordMaps.FirstOrDefault(r => r.ItemType == itemType); data.Table = map.Table; foreach (var property in properties) { var fieldMap = map.FieldMaps.FirstOrDefault(f => f.PropertyName == property.Name); if (fieldMap != null) { var value = property.GetValue(item); data.FieldIds.Add(new KeyValuePair(fieldMap.FieldId, value)); } } return data; } } }