2011-09-22 20 views
16

He creado un total de pedido personalizado que ofrece un descuento en ciertas situaciones. El total general siempre es correcto, sin embargo, el cálculo del impuesto a las ventas no tiene en cuenta mi descuento al calcular (por lo que si ofrecía un descuento de $ 10, el monto del impuesto a las ventas se calculaba sobre el monto total antes de mi descuento).Agregar un pedido de descuento personalizado Total en Magento no cambia el impuesto sobre las ventas

Tomemos como ejemplo el siguiente:

Subtotal:    $856.49 
Multi Unit Discounts: -$22.50 
Shipping:    $10.96 
Tax:     $52.05 
Grand Total:   $897.00 

Mi descuento personalizada es la unidad de múltiples Descuentos. La tasa de impuestos es del 6%. Como puede ver, el total general es correcto en función de todas las líneas de pedido, pero el importe del impuesto en sí no es correcto (se basa en todas las líneas de pedido, excepto en mi descuento).

En mi archivo config.xml Tengo el siguiente en llegar mi pedido de trabajo total en el sistema:

 <sales> 
     <quote> 
      <totals> 
       <mud> 
        <class>Wpe_Multiunitdiscount_Model_Multiunitdiscount</class> 
        <before>tax</before> 
       </mud> 
      </totals> 
     </quote> 
    </sales>  

El siguiente es el contenido de mi clase de orden total:

class Wpe_Multiunitdiscount_Model_Multiunitdiscount extends Mage_Sales_Model_Quote_Address_Total_Abstract { 

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $items = $address->getAllItems(); 

    $total_discount = 0; 

    foreach($items as $item) { 
     $product_discounts = Mage::helper("multiunitdiscount")->findDiscounts($item); 
     if($product_discounts > 0) { 
      $total_discount += $product_discounts; 
     } 
    } 

    $address->setMudAmount($total_discount); 

    $address->setGrandTotal($address->getGrandTotal() - $address->getMudAmount()); 
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $address->getMudAmount()); 
    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    if($address->getMudAmount() > 0) { 

     $address->addTotal(array(
      'code' => $this->getCode(), 
      'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
      'value' => -$address->getMudAmount(), 
     )); 
    } 
    return $this; 
} 

}

Por el motivo de no publicar una gran parte del código aquí que no estoy seguro es necesario, puedo decirles que el ayudante del código anterior simplemente devuelve la cantidad de dinero que la disco unt es para ese artículo en particular en la cita.

¿Alguien puede ayudarme a orientarme en la dirección correcta para que el cálculo del impuesto a las ventas sea correcto?

EDIT:

Para que esto sea sencillo, he quitado mucho de mi lógica detrás de calcular el descuento y ahora estoy tratando de tomar sencilla $ 10 de descuento sobre el total del pedido como un descuento. Como se sugirió, no modifiqué el total general de la dirección y ahora solo estoy configurando el monto del descuento y el monto de descuento base. Ahora el impuesto a las ventas no se suma y el total general está desactivado. Tal vez si hay un buen tutorial por ahí que alguien me puede señalar ayude? No parece entender cómo todos los totales de la orden interactúan entre sí.

public function collect(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->setMudDiscount(10); 
    $address->setDiscountAmount($address->getDiscountAmount() + $address->getMudDiscount()); 
    $address->setBaseDiscountAmount($address->getBaseDiscountAmount() + $address->getMudDiscount()); 

    return $this; 
} 

public function fetch(Mage_Sales_Model_Quote_Address $address) { 

    if ($address->getData('address_type')=='billing') return $this; 

    $address->addTotal(array(
     'code' => $this->getCode(), 
     'title' => Mage::helper('sales')->__('Multi Unit Discounts'), 
     'value' => -$address->getMudDiscount(), 
    )); 
    return $this; 
} 
+0

Hmm, ¿por qué modificar la dirección $ grandtotal directamente en su clase de descuento? Debe usar '$ address-> setDiscountAmount ($ address-> getDiscountAmount() + $ total_discount)' (o use '$ item-> setDiscountAmount()' para establecer el descuento por artículo) y su descuento se usará en 'Mage_Sales_Model_Quote_Address_Total_Tax: : collect() 'para el cálculo de impuestos. – Zyava

+0

Por lo que sé, no puede modificar el total general usted mismo. Debe establecer un precio de descuento usted mismo (como ya lo hizo) y Magento tendrá esto en cuenta al calcular los totales. Intente modificar config.xml y haga que se ejecute también subtotal. También me tomé un tiempo antes de comprender realmente la forma en que Magento maneja el cálculo de los totales. – Kenny

+0

Así que probé lo que ustedes dos dijeron y estoy teniendo el mismo problema (con la adición del total general apagado ahora ya que no se supone que modifique el total). Tengo la idea de modificar el total general de uno de los otros módulos totales.Estoy viendo en el módulo de descuentos que puedo establecer el subtotal con descuento y el subtotal sin descuento, así que lo intentaré también. –

Respuesta

3

Ve a System > Configuration. Seleccione "Tax" en la barra de navegación de la izquierda, luego abra el grupo "Calculation Settings" si no lo está.

Intente cambiar el parámetro "Apply Customer Tax" a "After Discount"

+1

Sé que esta pregunta es un poco anticuada, pero me encontré con ella mientras intentaba realizar una tarea similar. No creo que esto funcione principalmente debido al hecho de que este es un recopilador total personalizado, que no es exactamente un 'descuento' a los ojos de Magento. –

Cuestiones relacionadas