// Checks if a companies house member already exists private static bool DoesContactExist(Entity existingContact, CompaniesHouseMember companiesHouseMember) { string dynStr = string.Empty; if (existingContact.Attributes.Contains("firstname") && existingContact.Attributes["firstname"] != null) { dynStr += (string)existingContact["firstname"]; } if (existingContact.Attributes.Contains("lastname") && existingContact.Attributes["lastname"] != null) { dynStr += (string)existingContact["lastname"]; } if (existingContact.Attributes.Contains("defra_dobmonthcompanieshouse") && existingContact.Attributes["defra_dobmonthcompanieshouse"] != null) { dynStr += ((int)existingContact["defra_dobmonthcompanieshouse"]).ToString(); } if (existingContact.Attributes.Contains("defra_dobyearcompanieshouse_text") && existingContact.Attributes["defra_dobyearcompanieshouse_text"] != null) { dynStr += ((int)existingContact["defra_dobyearcompanieshouse_text"]).ToString(); } if (string.Equals(dynStr, (companiesHouseMember.firstname + companiesHouseMember.lastname + companiesHouseMember.date_of_birth.month + companiesHouseMember.date_of_birth.year), StringComparison.CurrentCultureIgnoreCase)) { return(true); } return(false); }
/// <summary> /// Maps a Companies member to a CRM contact, truncating field as required. /// </summary> public static Entity MapToContact(CompaniesHouseMember companiesHouseMember, Entity crmContact = null) { if (crmContact == null) { crmContact = new Entity(Contact.EntityLogicalName); } ContactAccountRoleCode crmContactRole = OfficerRoleMapping.MapToCrmContactRoleCode(companiesHouseMember.officer_role); crmContact[Contact.FromCompaniesHouseField] = true; crmContact[Contact.AccountRoleCodeField] = new OptionSetValue((int)crmContactRole); crmContact[Contact.FirstNameField] = companiesHouseMember.firstname.TruncateIfNeeded(Contact.FirstNameFieldLength); crmContact[Contact.LastNameField] = companiesHouseMember.lastname.TruncateIfNeeded(Contact.LastNameFieldLength); crmContact[Contact.JobTitleField] = companiesHouseMember.occupation.TruncateIfNeeded(Contact.JobTitleFieldLength); if (companiesHouseMember.date_of_birth != null) { crmContact[Contact.DobMonthCompaniesHouseField] = companiesHouseMember.date_of_birth.month; crmContact[Contact.DobYearCompaniesHouseField] = companiesHouseMember.date_of_birth.year.ToString(); } if (!string.IsNullOrEmpty(companiesHouseMember.resigned_on)) { try { crmContact[Contact.ResignedOnCompaniesHouseField] = DateTime.ParseExact(companiesHouseMember.resigned_on, "yyyy-MM-dd", CultureInfo.InvariantCulture); } catch (FormatException) { } } return(crmContact); }
/// <summary> /// Creates a new companies house acccount from a mcompanies house member /// </summary> /// <param name="parentAccount"></param> /// <param name="companiesHouseMember"></param> private Entity CreateAccountMember(CompaniesHouseMember companiesHouseMember) { // Map Companies house meber to an account and create it in CRM Entity newAccount = CompaniesHouseMemberMapping.MapToAccount(companiesHouseMember); newAccount.Id = _crmService.Create(newAccount); return(newAccount); }
/// <summary> /// Creates a new companies house contact linked to the account given in the parameters /// </summary> /// <param name="account">Parent account</param> /// <param name="companiesHouseMember"></param> private void CreateContactMember(Entity account, CompaniesHouseMember companiesHouseMember) { // Map Companies House member to CRM Entity newContact = CompaniesHouseMemberMapping.MapToContact(companiesHouseMember); // Link to the parent account newContact[Contact.ParentCustomerIdField] = account.ToEntityReference(); // Create in CRM _crmService.Create(newContact); }
/// <summary> /// Maps a Companies member to a CRM account, truncating field as required. /// </summary> public static Entity MapToAccount(CompaniesHouseMember companiesHouseMember, Entity crmAccount = null) { if (crmAccount == null) { crmAccount = new Entity(Account.EntityLogicalName); } crmAccount[Account.NameField] = companiesHouseMember.name.TruncateIfNeeded(Account.NameFieldLength); crmAccount[Account.CompanyNumberField] = companiesHouseMember.identification?.registration_number.TruncateIfNeeded(Account.CompanyNumberFieldLength); return(crmAccount); }
/// <summary> /// Updates the contact resigned date /// </summary> /// <param name="updateExistingContact"></param> /// <param name="companiesHouseMember"></param> private void UpdateAccountContact(Entity updateExistingContact, CompaniesHouseMember companiesHouseMember) { updateExistingContact["defra_fromcompanieshouse"] = true; try { updateExistingContact["defra_resignedoncompanieshouse"] = DateTime.ParseExact(companiesHouseMember.resigned_on, "yyyy-MM-dd", CultureInfo.InvariantCulture); } catch (FormatException) { _crmTracing.Trace($"Resigned Date {companiesHouseMember.resigned_on} is not in the correct format."); } _crmService.Update(updateExistingContact); }
// Checks if a companies house member already exists private bool IsCorporateMemberAlreadyLinked(Entity existingLink, CompaniesHouseMember companiesHouseMember) { _crmTracing.Trace($"IsCorporateMemberAlreadyLinked {companiesHouseMember}"); if (existingLink.Attributes.Contains(Account.ParentChildAccountManyToManyRelationshipAlias + "." + Account.CompanyNumberField) && companiesHouseMember.identification != null) { AliasedValue value = existingLink.Attributes[Account.ParentChildAccountManyToManyRelationshipAlias + "." + Account.CompanyNumberField] as AliasedValue; if (value != null && value.Value.ToString().Trim() == companiesHouseMember.identification.registration_number.Trim()) { // Matching account with the same company reg number exists return(true); } } return(false); }