COA.EnterpriseServices/COA.EnterpriseServices.DataAccess.QuickBase/RecordMapRegistry.cs

69 lines
2.6 KiB
C#
Raw Permalink Normal View History

2020-10-16 02:03:30 +00:00
using COA.EnterpriseServices.DataAccess.Entities;
using COA.PartnerApis.QuickBase;
using System.Collections.Generic;
using System.Linq;
namespace COA.EnterpriseServices.DataAccess.QuickBase
{
/// <summary>
/// Maintains a list of entity types and property mappings to QuickBase fields
/// </summary>
internal static class RecordMapRegistry
{
private static readonly ICollection<RecordMap> recordMaps = new List<RecordMap>();
static RecordMapRegistry()
{
#region Creditor
recordMaps.Add(new RecordMap<Creditor, CreditorsFieldMap>()
.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<Entities.Client, ClientFieldMap>()
.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<int, object>(fieldMap.FieldId, value));
}
}
return data;
}
}
}