Impuestos exclusivos si se aplica el cupón, de lo contrario, impuestos incluidos en los artículos

2 minutos de lectura

avatar de usuario
عثمان غني

Tengo impuestos de configuración incluidos para todos mis artículos y llené el MRP en el precio. Pero ahora quiero aplicar los impuestos incluidos si el cliente no aplicó el cupón, es decir, compró en MRP. Pero cuando el cliente aplica el cupón, necesito aplicar impuestos sobre el monto posterior al descuento.

¿Es posible con la configuración dentro de Woocommerce o hay algún complemento disponible?

For e.g.
**Case I**
Product MRP = 670
Shipping    =  50
Tax 18%     = 102
Final price = 670 (Including Taxes) 
It's Fine.


**Case II**
Product MRP = 670
Discount 40%= 268
Price       = 402
Shipping    =  50
Tax 18%     =  61
Final price = 452 (Including Taxes)
But I need tax to calculated exclusively on discounted price i.e. 402+18% = 474+50 (Ship) = 524

He intentado seguir el filtro en mi complemento personalizado:

add_filter( 'woocommerce_calc_tax', 'inc_or_exc',10,3 );
// add_filter( 'woocommerce_calculate_totals', 'calculate_totals',11 );
function inc_or_exc( $taxes,$price,$rates ) {
    // echo "<pre>";
    if(!empty(WC()->cart->coupon_discount_amounts)){
        return  WC_Tax::calc_exclusive_tax( $price, $rates );
    }else{
        return  WC_Tax::calc_inclusive_tax( $price, $rates );
    }
}

Pero calcula los impuestos un poco extraño. Si el MRP del artículo es 100, muestra 98,85 y los totales no se actualizan con los nuevos impuestos y tarifas de envío después de ejecutar el complemento. Si desactivo el complemento, el MRP del artículo se muestra bien, es decir, 100.

Finalmente lo he solucionado.

Primero apliqué filtro exclusivo inclusivo. Luego llamó woocommerce_calculated_total con condición personalizada y logró mi motivo.

add_filter( 'woocommerce_calc_tax', 'inc_or_exc',10,3 );
// do_action('add_points');

add_filter( 'woocommerce_calculated_total', 'custom_calculated_total', 10, 2 );
function inc_or_exc( $taxes,$price,$rates ) {
    // echo "<pre>";
    if(!empty(WC()->cart->coupon_discount_amounts)){
        return  WC_Tax::calc_exclusive_tax( $price, $rates );
    }else{
        return  WC_Tax::calc_inclusive_tax( $price, $rates );
    }
}

function custom_calculated_total( $total, $cart ){
    // echo "<pre>";
    if(!empty(WC()->cart->coupon_discount_amounts)){
        return round( $total + WC()->cart->get_cart_contents_tax(), $cart->dp );
    }else{
        return round( $total, $cart->dp );
    }   
}

¿Ha sido útil esta solución?