private ContactPreferences getContactPreferencesToUpdate(ContactPreferencesViewModel preferences,
            string[] selectedPreferences, string[] allPreferences)
        {
            //first get list of selected prefences
            var listofSelectedPreferences = new List<Preference>();
            foreach (string preference in selectedPreferences)
            {
                string[] splitPreferences = preference.Split('/');
                listofSelectedPreferences.Add(new Preference
                {
                    Category = splitPreferences[0],
                    Value = splitPreferences[1]
                });
            }

            //manual mapping from ContactPreferencesViewModel to ContactPreferences
            var preferencesToUpdate = new ContactPreferences();
            preferencesToUpdate.Preferences = new List<Preference>();
            preferencesToUpdate.ExternalContactNumber = preferences.ExternalContactNumber;
            preferencesToUpdate.ExternalAddressNumber = preferences.ExternalAddressNumber;

            //loop through each preference
            foreach (string preference in allPreferences)
            {
                string[] splitPreferences = preference.Split('/');
                string preferenceCategory = splitPreferences[0];
                string preferenceValue = splitPreferences[1];
                //check if was actually selected..
                bool selected =
                    listofSelectedPreferences.Any(
                        s => s.Category.Equals(preferenceCategory) && s.Value.Equals(preferenceValue));
                preferencesToUpdate.Preferences.Add(new Preference
                {
                    Category = preferenceCategory,
                    Value = preferenceValue,
                    Selected = selected
                });
            }
            return preferencesToUpdate;
        }
        private ContactPreferencesOperationStatus GetContactPreferences(int externalContactNumber, bool currentRecordsOnly)
        {
            var opStatus = new ContactPreferencesOperationStatus { Status = true };
            ContactPreferences preferences = new ContactPreferences();
            preferences.ExternalContactNumber = externalContactNumber;
            //preferences.ExternalAddressNumber = externalAddressNumber;

            string sendXML = String.Format("<Parameters>" +
                "<ContactNumber>{0}</ContactNumber>" +
                //"<AddressNumber>{1}</AddressNumber>" +
                "</Parameters>",
                externalContactNumber);//, externalAddressNumber

            //Load xmldata into XDocument Object
            XDocument sendingXMLDoc = XDocument.Parse(sendXML);

            var careWebServices = new CARECustomerPortalExtensions.CareWebServices.NDataAccessSoapClient();
            string returnXML = careWebServices.SelectContactData(CustomerPortalExtensions.CareWebServices.XMLContactDataSelectionTypes.xcdtContactCategories, sendingXMLDoc.ToString());

            XDocument receivingXMLDoc = XDocument.Parse(returnXML);
            List<Preference> contactPreferences = new List<Preference>();

            try
            {

                foreach (XElement preferenceNode in receivingXMLDoc.Descendants("DataRow"))
                {
                    string status = preferenceNode.Element("Status").Value;
                    if (!currentRecordsOnly || status == "Current")
                    {
                        contactPreferences.Add(new Preference
                        {
                            Category = preferenceNode.Element("ActivityCode").Value,
                            Value = preferenceNode.Element("ActivityValueCode").Value,
                            ValidFrom = Convert.ToDateTime(preferenceNode.Element("ValidFrom").Value),
                            ValidTo = Convert.ToDateTime(preferenceNode.Element("ValidTo").Value)
                        });
                    }
                }

            }
            catch (Exception e)
            {
                opStatus = ContactPreferencesOperationStatus.CreateFromException("Error retrieving contact preferences from CARE: " + e.Message, e);
                opStatus.Status = false;
            }
            preferences.Preferences = contactPreferences;
            opStatus.UpdatedPreferences = preferences;
            return opStatus;
        }
 public ContactPreferencesOperationStatus SaveContactPreferences(ContactPreferences preferences)
 {
     throw new NotImplementedException();
 }
        public ContactPreferencesOperationStatus SaveContactPreferences(ContactPreferences preferences)
        {
            var opStatus = GetContactPreferences(preferences.ExternalContactNumber);

            if (opStatus.Status)
            {
                ContactPreferences existingPreferences = opStatus.UpdatedPreferences;

                try
                {
                    //loop through each new preference added
                    foreach (var preference in preferences.Preferences)
                    {

                        if (preference.Selected)
                        {
                            SavePreference(preference, preferences.ExternalContactNumber, preferences.ExternalAddressNumber);
                        }
                        else
                        {
                            //loop through any matching existing preferences ..
                            foreach (var existingPreference in existingPreferences.Preferences.FindAll(s => s.Category.Equals(preference.Category) && s.Value.Equals(preference.Value)))
                            {
                                //... and make them historical
                                MakePreferenceHistorical(existingPreference, preferences.ExternalContactNumber, preferences.ExternalAddressNumber);
                            }
                        }
                    }
                    //get the update preferences
                    opStatus = GetContactPreferences(preferences.ExternalContactNumber);

                }
                catch (Exception e)
                {
                    opStatus = ContactPreferencesOperationStatus.CreateFromException("Error retrieving contact preferences from CARE: " + e.Message, e);
                    opStatus.Status = false;
                }
            }
            //preferences.Preferences = contactPreferences;
            //opStatus.UpdatedPreferences = preferences;
            return opStatus;
        }