Add method to get rates based on order.
This method will prioritize getting rates from billing/shipping address instead of `WC()->customer` which in irrevelant in context of editing order from admin screen.
This commit is contained in:
parent
24a69fd249
commit
00b7b40c37
|
@ -1279,7 +1279,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
|
||||||
|
|
||||||
// If the prices include tax, discounts should be taken off the tax inclusive prices like in the cart.
|
// If the prices include tax, discounts should be taken off the tax inclusive prices like in the cart.
|
||||||
if ( $this->get_prices_include_tax() && wc_tax_enabled() && 'taxable' === $item->get_tax_status() ) {
|
if ( $this->get_prices_include_tax() && wc_tax_enabled() && 'taxable' === $item->get_tax_status() ) {
|
||||||
$taxes = WC_Tax::calc_tax( $amount, WC_Tax::get_rates_from_location( $item->get_tax_class(), $tax_location ), true );
|
$taxes = WC_Tax::calc_tax( $amount, $this->get_tax_rates( $item->get_tax_class(), $tax_location ), true );
|
||||||
|
|
||||||
// Use unrounded taxes so totals will be re-calculated accurately, like in cart.
|
// Use unrounded taxes so totals will be re-calculated accurately, like in cart.
|
||||||
$amount = $amount - array_sum( $taxes );
|
$amount = $amount - array_sum( $taxes );
|
||||||
|
@ -1330,7 +1330,7 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$taxes = array_sum( WC_Tax::calc_tax( $item_discount_amount, WC_Tax::get_rates_from_location( $item->get_tax_class(), $tax_location ), $this->get_prices_include_tax() ) );
|
$taxes = array_sum( WC_Tax::calc_tax( $item_discount_amount, $this->get_tax_rates( $item->get_tax_class(), $tax_location ), $this->get_prices_include_tax() ) );
|
||||||
if ( 'yes' !== get_option( 'woocommerce_tax_round_at_subtotal' ) ) {
|
if ( 'yes' !== get_option( 'woocommerce_tax_round_at_subtotal' ) ) {
|
||||||
$taxes = wc_round_tax_total( $taxes );
|
$taxes = wc_round_tax_total( $taxes );
|
||||||
}
|
}
|
||||||
|
@ -1524,6 +1524,21 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
|
||||||
return apply_filters( 'woocommerce_order_get_tax_location', $args, $this );
|
return apply_filters( 'woocommerce_order_get_tax_location', $args, $this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get tax rates for an order. Use order's shipping or billing address, defaults to base location.
|
||||||
|
*
|
||||||
|
* @param string $tax_class Tax class to get rates for.
|
||||||
|
* @param array $location_args Location to compute rates for. Should be in form: array( country, state, postcode, city).
|
||||||
|
* @param object $customer Only used to maintain backward compatibility for filter `woocommerce-matched_rates`.
|
||||||
|
*
|
||||||
|
* @return mixed|void Tax rates.
|
||||||
|
*/
|
||||||
|
protected function get_tax_rates( $tax_class, $location_args = array(), $customer = null ) {
|
||||||
|
$tax_location = $this->get_tax_location( $location_args );
|
||||||
|
$tax_location = array( $tax_location['country'], $tax_location['state'], $tax_location['postcode'], $tax_location['city'] );
|
||||||
|
return WC_Tax::get_rates_from_location( $tax_class, $tax_location, $customer );
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate taxes for all line items and shipping, and store the totals and tax rows.
|
* Calculate taxes for all line items and shipping, and store the totals and tax rows.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue