public abstract Address GetAddressFromPayEx(TransactionResult transactionResult);
 public override Address GetAddressFromPayEx(TransactionResult transactionResult)
 {
     return null;
 }
        public override Address GetAddressFromPayEx(TransactionResult transactionResult)
        {
            Log.InfoFormat("Attempting to retrieve address for PayEx transaction result: {0} for Invoice Ledger payment with ID:{1} belonging to order with ID: {2}", transactionResult, Payment.Id, OrderGroupId);
            if (transactionResult.Invoice == null || string.IsNullOrWhiteSpace(transactionResult.CustomerName))
            {
                Log.ErrorFormat("TransactionResult must contain both an invoice element and a customer name in order to retrieve address for PayEx transaction result. Payment with ID:{1} belonging to order with ID: {2}", Payment.Id, OrderGroupId);
                return null;
            }

            string lastName = string.Empty;
            string[] names = transactionResult.Invoice.CustomerName.Split(' ');
            string firstName = names[0];
            if (names.Length > 1)
                lastName = string.Join(" ", names.Skip(1));

            Address address = new Address
            {
                FirstName = firstName,
                LastName = lastName,
                Line1 = transactionResult.Invoice.CustomerStreetAddress,
                PostCode = transactionResult.Invoice.CustomerPostNumber,
                City = transactionResult.Invoice.CustomerCity,
                Email = transactionResult.Invoice.CustomerEmail
            };
            Log.InfoFormat("Successfully retrieved address:{0} from PayEx transaction result: {1} for Invoice Ledger payment with ID:{2} belonging to order with ID: {3}",
                address, transactionResult, Payment.Id, OrderGroupId);
            return address;
        }