2012-06-08 8 views
6

Sto cercando di ottenere l'aliquota fiscale (percentuale, non la valuta) per un determinato codice postale in modo da poterlo visualizzare in una citazione PDF di quote di terze parti (nessuna relazione con la "citazione" Magento usa come pre-checkout del carrello della spesa). Mentre sono ancora relativamente nuovo a Magento, sembra che getRateRequest() e getRate() siano le due funzioni principali che ottengono l'aliquota fiscale basata su tutte le variabili (classe imposta sul prodotto, classe imposta cliente, ecc.).getRate() e percentuale di imposta Magento

Poiché questo è per un'estensione di terze parti e tutti i nostri prodotti sono soggetti a tassazione, ho pensato di utilizzare semplicemente getRate() con l'input Varien Object corretto e restituire l'aliquota fiscale. Dopo una settimana di tentativi ed errori, non riesco a capire perché ottengo sempre un tasso pari a zero. Ho confermato che sto chiamando la funzione getRate() e che non restituisce zero dalla prima istruzione if() che verifica per Paese e ID classe prodotto/cliente. Inoltre ho confermato che tutte le variabili sono state trasmesse e accessibili nella funzione getRate() stessa.

Ho creato un oggetto con l'input seguente (basato sull'output di getRateRequest()) che chiamo con getRate() e spero che qualcuno possa far luce su cosa c'è di sbagliato nel mio input di dati o perché il getRate() la funzione restituisce sempre un risultato pari a zero. (In realtà sto impostazione con $ variabili sottostanti, sono solo definite in precedenza e uno dei miei valori di test case sono al di sotto)

// UPDATED CODE (variable values come from 3rd party quote extension) 

    $country = 'US'; // use short country code 
    $region = '12'; // must be numeric! 
    $postcode = '95050'; 
    // our quote extension stores the customer id ('2') which we use to get the tax class 
    $customer = Mage::getModel('customer/customer')->load('2'); 
    $custTax = $customer->getTaxClassId(); 

    $TaxRequest = new Varien_Object(); 
    $TaxRequest->setCountryId($country); 
    $TaxRequest->setRegionId($region); 
    $TaxRequest->setPostcode($postcode); 
    $TaxRequest->setStore(Mage::app()->getStore()); 
    $TaxRequest->setCustomerClassId($custTax); 
    $TaxRequest->setProductClassId(2); // 2=taxable id (all our products are taxable) 

    $taxCalculationModel = Mage::getSingleton('tax/calculation'); 
    $rate = $taxCalculationModel->getRate($TaxRequest); 

Il mio piano di backup è quello di fare solo una formula di ricerca diretta SQL anche se questo probabilmente lo farà diventa un po 'disordinato Dal momento che il nostro team di sviluppo web non ha seguito esattamente gli standard di codifica validi, un'eventuale riscrittura del sito è comunque nel mio futuro una volta che le correzioni iniziali del lancio sono state effettuate (tutte e 4 le pagine).

Grazie per l'aiuto e il tempo per leggere questo.

EDIT - Stack Overflow è impressionante :)

risposta

3

Se si cambia:

$TaxRequest->setRegionId(California); 

a

$TaxRequest->setRegionId($stateId); 

dove $ stateId è numerico regione id. Il tuo codice dovrebbe funzionare allora.

+1

Doh! Che differenza fa un anno, rielaborando questa parte del nostro sito e questa volta ho trovato la mia domanda con un po 'più di conoscenza. Aggiornato il mio codice per riflettere l'ID di stato numerico, il codice paese e passato in getStore() e ha funzionato bene. Grazie! –

6

Si può anche provare questo

$store = Mage::app()->getStore('default'); 
$request = Mage::getSingleton('tax/calculation')->getRateRequest(null, null, null, $store); 
$taxclassid = $product->getData('tax_class_id'); 
$percent = Mage::getSingleton('tax/calculation')->getRate($request->setProductClassId($taxclassid)); 
+0

Grazie per l'idea! Comunque in questo caso non penso che ci darà sempre quello che sto cercando. Abbiamo alcuni account cliente che vengono rivenduti e non vengono addebitate tasse, sembra che questo codice sia solo per un prodotto e non tenga conto della classe fiscale del cliente. –

Problemi correlati