Include shipping and fee in total
This commit is contained in:
parent
e20d886972
commit
9eece1cb1e
|
@ -24,6 +24,20 @@ class WC_Discounts {
|
||||||
*/
|
*/
|
||||||
protected $items = array();
|
protected $items = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores fee total from cart/order. Manual discounts can discount this.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
protected $fee_total = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stores shipping total from cart/order. Manual discounts can discount this.
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
protected $shipping_total = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An array of discounts which have been applied to items.
|
* An array of discounts which have been applied to items.
|
||||||
*
|
*
|
||||||
|
@ -84,7 +98,8 @@ class WC_Discounts {
|
||||||
* @param array $order Cart object.
|
* @param array $order Cart object.
|
||||||
*/
|
*/
|
||||||
public function set_items_from_order( $order ) {
|
public function set_items_from_order( $order ) {
|
||||||
$this->items = $this->discounts = $this->manual_discounts = array();
|
$this->items = $this->discounts = $this->manual_discounts = array();
|
||||||
|
$this->fee_total = $this->shipping_total = 0;
|
||||||
|
|
||||||
if ( ! is_a( $order, 'WC_Order' ) ) {
|
if ( ! is_a( $order, 'WC_Order' ) ) {
|
||||||
return;
|
return;
|
||||||
|
@ -101,6 +116,12 @@ class WC_Discounts {
|
||||||
}
|
}
|
||||||
|
|
||||||
uasort( $this->items, array( $this, 'sort_by_price' ) );
|
uasort( $this->items, array( $this, 'sort_by_price' ) );
|
||||||
|
|
||||||
|
foreach ( $order->get_fees() as $item ) {
|
||||||
|
$this->fee_total += wc_add_number_precision( $item->get_total() );
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->shipping_total = wc_add_number_precision( $order->get_shipping_total() );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -217,10 +238,15 @@ class WC_Discounts {
|
||||||
protected function get_total_after_discounts() {
|
protected function get_total_after_discounts() {
|
||||||
$total_to_discount = 0;
|
$total_to_discount = 0;
|
||||||
|
|
||||||
|
// Sum line item costs.
|
||||||
foreach ( $this->items as $item ) {
|
foreach ( $this->items as $item ) {
|
||||||
$total_to_discount += $this->get_discounted_price_in_cents( $item );
|
$total_to_discount += $this->get_discounted_price_in_cents( $item );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Manual discounts can also discount shipping and fees.
|
||||||
|
$total_to_discount += $this->shipping_total + $this->fee_total;
|
||||||
|
|
||||||
|
// Remove existing discount amounts.
|
||||||
foreach ( $this->manual_discounts as $key => $value ) {
|
foreach ( $this->manual_discounts as $key => $value ) {
|
||||||
$total_to_discount = $total_to_discount - $value->get_discount_total();
|
$total_to_discount = $total_to_discount - $value->get_discount_total();
|
||||||
}
|
}
|
||||||
|
@ -275,7 +301,7 @@ class WC_Discounts {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! $discount->get_amount() ) {
|
if ( ! $discount->get_amount() ) {
|
||||||
return new WP_Error( 'invalid_coupon', __( 'Invalid discount', 'woocommerce' ) );
|
return new WP_Error( 'invalid_discount', __( 'Invalid discount', 'woocommerce' ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
$total_to_discount = $this->get_total_after_discounts();
|
$total_to_discount = $this->get_total_after_discounts();
|
||||||
|
@ -300,7 +326,11 @@ class WC_Discounts {
|
||||||
* @param WC_Coupon $coupon Coupon object being applied to the items.
|
* @param WC_Coupon $coupon Coupon object being applied to the items.
|
||||||
* @return bool|WP_Error True if applied or WP_Error instance in failure.
|
* @return bool|WP_Error True if applied or WP_Error instance in failure.
|
||||||
*/
|
*/
|
||||||
protected function apply_coupon( $coupon ) {
|
public function apply_coupon( $coupon ) {
|
||||||
|
if ( ! is_a( $coupon, 'WC_Coupon' ) ) {
|
||||||
|
return new WP_Error( 'invalid_coupon', __( 'Invalid coupon', 'woocommerce' ) );
|
||||||
|
}
|
||||||
|
|
||||||
$is_coupon_valid = $this->is_coupon_valid( $coupon );
|
$is_coupon_valid = $this->is_coupon_valid( $coupon );
|
||||||
|
|
||||||
if ( is_wp_error( $is_coupon_valid ) ) {
|
if ( is_wp_error( $is_coupon_valid ) ) {
|
||||||
|
|
Loading…
Reference in New Issue