/** 
  * Set destination address for order
  * This is either the customer billing address or shipping address depending on the shop settings
  * Can also be a business address if a local pickup method is being used
  *
  * @since 4.2
  * @return void
  */
 public function set_destination_address()
 {
     // Retrieve "tax based on" option
     $tax_based_on = get_option('woocommerce_tax_based_on');
     // Return origin address if this is a local pickup order
     if (wt_is_local_pickup($this->get_shipping_method()) || $tax_based_on == 'base') {
         return wootax_get_address(apply_filters('wootax_pickup_address', WT_DEFAULT_ADDRESS, WT_Orders::$addresses, $this->order_id));
     }
     // Attempt to fetch preferred address according to "tax based on" option; return billing by default
     $address_1 = $this->order->billing_address_1;
     $address_2 = $this->order->billing_address_2;
     $country = $this->order->billing_country;
     $state = $this->order->billing_state;
     $city = $this->order->billing_city;
     $zip5 = $this->order->billing_postcode;
     if ($tax_based_on == 'shipping') {
         $address_1 = !empty($this->order->shipping_address_1) ? $this->order->shipping_address_1 : $address_1;
         $address_2 = !empty($this->order->shipping_address_2) ? $this->order->shipping_address_2 : $address_2;
         $country = !empty($this->order->shipping_country) ? $this->order->shipping_country : $country;
         $state = !empty($this->order->shipping_state) ? $this->order->shipping_state : $state;
         $city = !empty($this->order->shipping_city) ? $this->order->shipping_city : $city;
         $zip5 = !empty($this->order->shipping_postcode) ? $this->order->shipping_postcode : $zip5;
     }
     // If address isn't saved yet, we will fall back to POSTed fields
     $post_zip = isset($_POST['postcode']) ? $_POST['postcode'] : '';
     $post_country = isset($_POST['country']) ? $_POST['country'] : '';
     $post_state = isset($_POST['state']) ? $_POST['state'] : '';
     $post_city = isset($_POST['city']) ? $_POST['city'] : '';
     // Parse ZIP code, splitting it into its 5 and 4-digit components
     $parsed_zip = parse_zip(!empty($zip5) ? $zip5 : $post_zip);
     // Return final address
     $address = array('Address1' => !empty($address_1) ? $address_1 : '', 'Address2' => !empty($address_2) ? $address_2 : '', 'Country' => !empty($country) ? $country : $post_country, 'State' => !empty($state) ? $state : $post_state, 'City' => !empty($city) ? $city : $post_city, 'Zip5' => $parsed_zip['zip5'], 'Zip4' => $parsed_zip['zip4']);
     $this->destination_address = $address;
 }
 /** 
  * Get destination address for order
  *
  * @since 4.2
  * @return (array) associative array containing customer address
  */
 public function get_destination_address()
 {
     // Retrieve "tax based on" option
     $tax_based_on = get_option('woocommerce_tax_based_on');
     // Return origin address if this is a local pickup order
     if (wt_is_local_pickup($this->get_shipping_method()) || $tax_based_on == 'base') {
         return wootax_get_address(apply_filters('wootax_pickup_address', WT_DEFAULT_ADDRESS, $this->addresses, -1));
     }
     // Initialize blank address array
     $address = array();
     // Fetch BOTH billing and shipping address
     $addresses = array('billing' => array('address_1' => WC()->customer->get_address(), 'address_2' => WC()->customer->get_address_2(), 'country' => WC()->customer->get_country(), 'state' => WC()->customer->get_state(), 'city' => WC()->customer->get_city(), 'zip5' => WC()->customer->get_postcode()), 'shipping' => array('address_1' => WC()->customer->get_shipping_address(), 'address_2' => WC()->customer->get_shipping_address_2(), 'country' => WC()->customer->get_shipping_country(), 'state' => WC()->customer->get_shipping_state(), 'city' => WC()->customer->get_shipping_city(), 'zip5' => WC()->customer->get_shipping_postcode()));
     // Attempt to fetch address preferred according to "tax based on" option; otherwise, return billing address
     $address_1 = $addresses['billing']['address_1'];
     $address_2 = $addresses['billing']['address_2'];
     $country = $addresses['billing']['country'];
     $state = $addresses['billing']['state'];
     $city = $addresses['billing']['city'];
     $zip5 = $addresses['billing']['zip5'];
     if ($tax_based_on) {
         $address_1 = !empty($addresses[$tax_based_on]['address_1']) ? $addresses[$tax_based_on]['address_1'] : $address_1;
         $address_2 = !empty($addresses[$tax_based_on]['address_2']) ? $addresses[$tax_based_on]['address_2'] : $address_2;
         $country = !empty($addresses[$tax_based_on]['country']) ? $addresses[$tax_based_on]['country'] : $country;
         $state = !empty($addresses[$tax_based_on]['state']) ? $addresses[$tax_based_on]['state'] : $state;
         $city = !empty($addresses[$tax_based_on]['city']) ? $addresses[$tax_based_on]['city'] : $city;
         $zip5 = !empty($addresses[$tax_based_on]['zip5']) ? $addresses[$tax_based_on]['zip5'] : $zip5;
     }
     // Build/return Address array
     $parsed_zip = parse_zip($zip5);
     $address['Address1'] = $address_1;
     $address['Address2'] = $address_2;
     $address['Country'] = $country;
     $address['State'] = $state;
     $address['City'] = $city;
     $address['Zip5'] = $parsed_zip['zip5'];
     $address['Zip4'] = $parsed_zip['zip4'];
     return $address;
 }