public void UpdateAttribute(string token, ContactAttribute attribute, bool useMyProfile)
        {
            var attributeDictionary = TranslateContactAttributeToDictionary(attribute);
            var subPageId = useMyProfile ? _myContactAttributesSubPage : _contactAttributesSubPage;            

            try
            {
                _ministryPlatformService.UpdateSubRecord(subPageId, attributeDictionary, token);
            }
            catch (Exception e)
            {
                var msg = string.Format("Error updating contact attribute, contactAttributeId: {0} attributeId: {1}",                                        
                                        attribute.ContactAttributeId, attribute.AttributeId);
                _logger.Error(msg, e);
                throw (new ApplicationException(msg, e));
            }
        }
        private List<ContactAttribute> TranslateSingleToMPAttribute(Dictionary<int, ContactSingleAttributeDTO> contactSingleAttributes)
        {
            var results = new List<ContactAttribute>();

            if (contactSingleAttributes == null)
            {
                return results;
            }

            foreach (var contactSingleAttribute in contactSingleAttributes)
            {
                var contactAttribute = contactSingleAttribute.Value;

                if (contactAttribute.Value == null)
                {
                    continue;
                }

                var mpContactAttribute = new ContactAttribute()
                {
                    AttributeId = contactAttribute.Value.AttributeId,
                    AttributeTypeId = contactSingleAttribute.Key,
                    Notes = contactAttribute.Notes
                };

                results.Add(mpContactAttribute);
            }
            return results;
        }
        private static ContactAttribute TranslateMultiToMPAttribute(ContactAttributeDTO contactAttribute, ContactAttributeTypeDTO contactAttributeType)
        {
            var mpContactAttribute = new ContactAttribute();
            if (contactAttribute == null)
            {
                return mpContactAttribute;
            }
            mpContactAttribute.AttributeId = contactAttribute.AttributeId;
            mpContactAttribute.AttributeTypeId = contactAttributeType != null ? contactAttributeType.AttributeTypeId : 0;
            mpContactAttribute.AttributeTypeName = contactAttributeType != null ? contactAttributeType.Name : string.Empty;
            mpContactAttribute.StartDate = contactAttribute.StartDate;
            mpContactAttribute.EndDate = contactAttribute.EndDate;
            mpContactAttribute.Notes = contactAttribute.Notes;

            return mpContactAttribute;
        }
 private void SaveAttribute(int contactId, ContactAttribute attribute, string token, bool useMyProfile)
 {
     if (attribute.ContactAttributeId == 0)
     {
         // These are new so add them
         _mpContactAttributeService.CreateAttribute(token, contactId, attribute, useMyProfile);
     }
     else
     {
         // These are existing so update them
         _mpContactAttributeService.UpdateAttribute(token, attribute, useMyProfile);
     }
 }
        private static Dictionary<string, object> TranslateContactAttributeToDictionary(ContactAttribute attribute)
        {
            var endDate = attribute.EndDate != null ? attribute.EndDate.GetValueOrDefault().Date : (DateTime?)null;

            var attributeDictionary = new Dictionary<string, object>
            {
                {"Attribute_Type_ID", attribute.AttributeTypeId},
                {"Attribute_ID", attribute.AttributeId},
                {"Contact_Attribute_ID", attribute.ContactAttributeId},
                {"Start_Date", attribute.StartDate.Date},
                {"End_Date", endDate},
                {"Notes", attribute.Notes}
            };
            return attributeDictionary;
        }