2012-06-08 9 views
6

Próbuję uzyskać stawkę podatku (procent, nie waluta) dla danego kodu pocztowego, dzięki czemu mogę wyświetlić go w cudzysłowie wydruku PDF wyceny (bez związku z "cytatem" Magento wykorzystuje jako pre-kasę koszyka). Chociaż wciąż jestem względnie nowy w Magento, wydaje się, że getRateRequest() i getRate() są dwiema głównymi funkcjami, które pobierają stawkę podatkową w oparciu o wszystkie zmienne (klasa podatku od produktu, klasa podatku od klienta itp.).getRate() i procent podatku od Magento

Ponieważ jest to rozszerzenie strony trzeciej, a wszystkie nasze produkty podlegają opodatkowaniu, pomyślałem, że po prostu użyłbym metody getRate() z prawidłowym wejściem obiektu Varien i zwróciłoby to stawkę podatku. Po tygodniu prób i błędów nie mogę zrozumieć, dlaczego zawsze uzyskuję stawkę zerową. Potwierdziłem, że wywołuję funkcję getRate() i że nie zwraca ona wartości zerowej od pierwszej instrukcji if() sprawdzającej identyfikator kraju i klienta/klasy produktu. Ponadto potwierdziłem, że wszystkie zmienne są przekazywane i dostępne w samej funkcji getRate().

Utworzono obiekt z poniższymi danymi wejściowymi (w oparciu o wynik getRateRequest()), który wywołuję za pomocą getRate() i mam nadzieję, że ktoś może rzucić światło na to, co jest nie tak z moim wprowadzeniem danych lub dlaczego getRate Funkcja() zawsze zwraca wynik równy zeru. (Ja faktycznie ustawienie z $ zmiennych poniżej, są one po prostu zdefiniowane wcześniej i jeden z moich testów wartości przypadków są poniżej)

// 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); 

Mój backup plan jest po prostu zrobić bezpośredni wzór SQL odnośnika mimo że prawdopodobnie będzie trochę się pogmatwać. Ponieważ nasz zespół zajmujący się tworzeniem stron internetowych nie postępował zgodnie z odpowiednimi standardami kodowania, ewentualne ponowne zapisywanie stron jest w mojej przyszłości, tak czy inaczej, gdy tylko pojawią się pierwsze poprawki do uruchamiania (wszystkie 4 strony z nich).

Dzięki za pomoc i poświęcenie czasu na przeczytanie tego.

EDIT - Stack Overflow jest niesamowite :)

Odpowiedz

3

przypadku zmiany:

$TaxRequest->setRegionId(California); 

do

$TaxRequest->setRegionId($stateId); 

gdzie $ stateId jest numeryczny identyfikator regionu. Twój kod powinien wtedy działać.

+1

Doh! Jaka jest różnica w roku, przerabiając tę ​​część naszej witryny i natknąłem się na moje własne pytanie, tym razem z nieco większą wiedzą. Zaktualizowałem mój kod, aby odzwierciedlał numeryczny identyfikator państwa, kod kraju i przekazywany w getStore() i działał dobrze. Dziękuję Ci! –

6

Można również spróbować tej

$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

Dzięki za pomysł! Jednak w tym przypadku nie sądzę, że zawsze da nam to, czego szukam. Mamy pewne konta klientów, które są odsprzedawane i nie są obciążane podatkiem, wygląda na to, że ten kod dotyczy tylko produktu i nie uwzględnia klasy podatkowej klienta. –

Powiązane problemy