private static SaveUpdateResponseModel createContactResponseModel(CreateCrmContactResponse contactBase, InvoiceCRMConatactModel contact) { var response = new SaveUpdateResponseModel(); response.Data = contact; if (contactBase.ContactID != null && contactBase.Contact != null) { var crmContact = contactBase.Contact as CrmContact; if (crmContact != null) { response.Data.ContactId = string.IsNullOrEmpty(crmContact.ContactId) ? 0 : int.Parse(crmContact.ContactId); if (crmContact.Addresses != null && crmContact.Addresses.Count > 0) { response.Data.Address.Id = string.IsNullOrEmpty((crmContact.Addresses.First() as ContactAddress).AddressId) ? 0 : int.Parse((crmContact.Addresses.First() as ContactAddress).AddressId); } if (crmContact.EmailAddresses != null && crmContact.EmailAddresses.Count > 0) { response.Data.EmailDetail.Id = string.IsNullOrEmpty((crmContact.EmailAddresses.First() as ContactEmailAddress).EmailId) ? 0 : int.Parse((crmContact.EmailAddresses.First() as ContactEmailAddress).EmailId); } if (crmContact.Phones != null && crmContact.Phones.Count > 0) { response.Data.PhoneDetail.Id = string.IsNullOrEmpty((crmContact.Phones.First() as CrmContactPhone).Id) ? 0 : int.Parse((crmContact.Phones.First() as CrmContactPhone).Id); } } } else { response.DuplicatedContacts = (from c in contactBase.DuplicateContacts select new InvoiceCRMConatactModel { ContactId = c.ContactId != null ? int.Parse(c.ContactId) : 0, FirstName = (c as CrmContact).Name != null ? (c as CrmContact).Name.First : "", LastName = (c as CrmContact).Name != null ? (c as CrmContact).Name.Last : "", Address = ConvertToAddressViewModel((c as CrmContact).Addresses != null ? (c as CrmContact).Addresses.FirstOrDefault() : new Address_V03()) == null ? new InvoiceAddressModel() : ConvertToAddressViewModel((c as CrmContact).Addresses != null ? (c as CrmContact).Addresses.FirstOrDefault() : new Address_V03()), PhoneDetail = new InvoicePhoneDetail() { Id = (c as CrmContact).Phones != null ? int.Parse((c as CrmContact).Phones.FirstOrDefault().Id) : 0, }, }).ToList(); } return(response); }
private static SaveUpdateResponseModel Create(InvoiceCRMConatactModel contact, string memberId) { var proxy = ServiceClientProvider.GetCRMContactServiceProxy(); try { var createCrmContactRequest = new CreateCrmContactRequest(); createCrmContactRequest.OwnerId = memberId; createCrmContactRequest.IsContactInformationRequired = true; CrmContact crmContact = new CrmContact(); crmContact.ContactId = null; crmContact.ContactType = CrmContactType.Customer; crmContact.ContactPriority = ContactPriorityType.None; crmContact.ContactSource = ContactSourceType.ECommerce; crmContact.ContactStatus = ContactStatusType.None; crmContact.OwnerMemberId = memberId; crmContact.IsDuplicateNameCheckRequired = contact.IsDuplicateCheckRequire; crmContact.EmailAddresses = contact.EmailDetail != null && string.IsNullOrEmpty(contact.EmailDetail.EmailAddress) ? null : new List <EmailAddress_V01> { new ContactEmailAddress { EmailId = string.Empty, Address = contact.EmailDetail.EmailAddress, IsPrimary = true } }; crmContact.FollowupAppointments = new List <FollowupAppointment>() ; crmContact.Addresses = contact.Address == null ? null : new List <Address_V03>() { new ContactAddress { AddressId = null, Line1 = contact.Address.Address1, City = contact.Address.City, Line2 = contact.Address.Address2, StateProvinceTerritory = contact.Address.State, PostalCode = contact.Address.PostalCode, Country = contact.Address.Country, IsPrimary = true, TypeOfAddress = AddressType.ShipTo } }; crmContact.Name = new Name_V01 { First = contact.FirstName, Last = contact.LastName, }; crmContact.Phones = contact.PhoneDetail == null || string.IsNullOrEmpty(contact.PhoneDetail.PhoneNumber) ? null : new List <CrmContactPhone>() { new CrmContactPhone { Id = string.Empty, IsPrimary = true, Number = contact.PhoneDetail.PhoneNumber, PhoneType = CrmContactPhoneType.Mobile } }; createCrmContactRequest.Value = crmContact; var circuitBreaker = CircuitBreakerFactory.GetFactory().GetCircuitBreaker <CreateCrmContactResponse>(); var response = circuitBreaker.Execute(() => proxy.CreateContact(new CreateContactRequest(createCrmContactRequest)).CreateContactResult as CreateCrmContactResponse); if (response == null) { LoggerHelper.Warn($"Create customer for ds {memberId} failed: response is null."); return(null); } return(createContactResponseModel(response, contact)); } catch (Exception ex) { LoggerHelper.Info($"ContactSaver:Create Failed. message: {ex.Message}, exception: {ex}"); SaveUpdateResponseModel errorModel = new SaveUpdateResponseModel(); return(errorModel); } finally { proxy.Close(); } }