2011-09-22 15 views
16

Ho creato un totale ordine personalizzato che offre uno sconto in determinate situazioni. Il totale complessivo viene sempre corretto, tuttavia il calcolo dell'imposta sulle vendite non tiene conto del mio sconto quando si calcola (quindi, se concedessi uno sconto di $ 10, l'importo dell'imposta sulle vendite è stato calcolato sull'intero importo prima del mio sconto).L'aggiunta di un ordine di sconto personalizzato totale in Magento non modifica l'imposta sulle vendite

Prendiamo ad esempio la seguente:

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

mio sconto personalizzato è la Sconti Multi unità. L'aliquota fiscale è del 6%. Come puoi vedere, il totale generale è corretto in base a tutti gli elementi pubblicitari, ma l'importo dell'imposta stessa non è corretto (si basa su tutti gli elementi pubblicitari tranne il mio sconto).

Nel mio file config.xml ho il seguente per ottenere il mio stato di funzionamento totale del sistema:

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

Quello che segue è il contenuto della mia classe totale dell'ordine:

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; 
} 

}

Per non pubblicare un enorme pezzo di codice qui che non sono sicuro sia necessario, posso dirvi che l'helper nel codice sopra riportato restituisce semplicemente l'importo della discoteca è per quel particolare oggetto nella citazione.

Qualcuno può aiutarmi a orientarmi nella giusta direzione per ottenere il calcolo delle imposte di vendita corretto?

EDIT:

Per mantenere questo semplice, ho tolto un sacco di mia logica dietro calcolare lo sconto e ora sto cercando di semplice prendere $ 10 di sconto sul totale dell'ordine come sconto. Come suggerito, non ho modificato il totale generale dell'indirizzo e ora sto solo impostando l'importo dello sconto e l'importo dello sconto base. Ora l'imposta sulle vendite non si somma e il totale complessivo è disattivato. Forse se c'è un buon tutorial là fuori che qualcuno può indicarmi sarebbe di aiuto? Non mi sembra di capire come i totali degli ordini interagiscano l'uno con l'altro.

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, perché si modifica $ indirizzo GrandTotal direttamente nella tua classe di sconto? Dovresti usare '$ address-> setDiscountAmount ($ address-> getDiscountAmount() + $ total_discount)' (o usare '$ item-> setDiscountAmount()' per impostare lo sconto per articolo) e lo sconto sarà usato in 'Mage_Sales_Model_Quote_Address_Total_Tax: : collect() 'per il calcolo delle tasse. – Zyava

+0

Per quanto ne so non puoi modificare tu stesso il totale generale. Devi impostare tu stesso un prezzo scontato (come hai già fatto) e Magento ne terrà conto nel calcolo dei totali. Prova a modificare il config.xml e fallo eseguire anche il totale parziale . Ho anche impiegato un po 'di tempo prima di capire davvero come Magento gestisce il calcolo dei totali. – Kenny

+0

Quindi ho provato entrambi quello che avete detto voi e sto avendo lo stesso problema (con l'aggiunta del totale generale di essere spento dato che non dovrei modificare il totale generale). Ho avuto l'idea di modificare il totale generale da uno degli altri moduli totali.Vedo nel modulo sconto che posso impostare subtotalWithDiscount e subtotalWithoutDiscount, quindi proverò anche io. –

risposta

3

Vai a System > Configuration. Seleziona "Tax" dal menu di navigazione a sinistra, quindi apri il gruppo "Calculation Settings" se non lo è già.

Provare a cambiare il "Apply Customer Tax" parametro "After Discount"

+1

So che questa domanda è un po 'datata, ma l'ho trovata mentre tentavo di eseguire un'attività simile. Non credo che questo funzionerà principalmente a causa del fatto che si tratta di un collezionista totale personalizzato, che non è esattamente uno "sconto" agli occhi di Magento. –

Problemi correlati