2012-06-08 14 views
6

Belirli bir posta kodu için vergi oranını (para birimi cinsinden değil) almaya çalışıyorum, böylece üçüncü tarafa ait bir alıntı PDF çıktısında görüntüleyebiliyorum ("alıntı" ile ilişkisi yok) Magento, alışveriş sepeti ön ödeme olarak kullanıyor). Magento için hala nispeten yeni olsa da, getRateRequest() ve getRate() öğelerinin, tüm değişkenlere (ürün vergi sınıfı, müşteri vergi sınıfı, vb.) Göre vergi oranını elde eden iki ana işlevi olduğu görülüyor.getRate() ve Magento vergi yüzdesi

Bu, üçüncü taraf bir uzantı içindir ve tüm ürünlerimiz vergiye tabi olduğundan, yalnızca VariRate() öğesini Varien Object girdisiyle kullanacağımı ve vergi oranını döndüreceğini düşündüm. Bir haftalık deneme ve hatadan sonra neden her zaman sıfır oranını elde ettiğimi anlayamıyorum. GetRate() işlevini çağırdığımı ve Ülke ve Müşteri/Ürün sınıfı kimliği için ilk if() deyiminden sıfır döndürmediğini doğruladım. Ek olarak, tüm değişkenlerin getRate() işlevinin kendisinde iletildiğini ve erişilebilir olduğunu doğruladım.

Aşağıdaki girdiyle (getRateRequest() çıktısına göre getRate() çıktısını aldığım bir nesneyi oluşturdum ve birisinin veri girdimde neyin yanlış olduğuna ışık tutabileceğini umuyorum ya da getRate neden() işlevi her zaman sıfır sonucunu döndürüyor. Benim yedek plan sadece doğrudan SQL arama formülü yapmaktır

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

(aslında aşağıda $ değişkenlerle ayarlıyorum, onlar sadece daha önce yukarı tanımlanır ve benim test durumu değerlerden biri aşağıdadır) her ne kadar bu muhtemelen olacak biraz dağınık olsun. Web geliştirme ekibimiz iyi kodlama standartlarını tam olarak takip etmediğinden, ilk başlatma düzeltmeleri tamamlandıktan sonra bir sitenin yeniden yazılması benim için zaten geçerli (4 sayfalık).

Herhangi bir yardım için teşekkürler ve bunu okumak için zaman ayırın.

DÜZENLEME - yığın taşması müthiş :)

cevap

3

Eğer değiştirirseniz:

$TaxRequest->setRegionId(California); 

$TaxRequest->setRegionId($stateId); 

$ stateId sayısal bölge id

için. Kodunuz o zaman çalışmalıdır.

+1

Doh deneyebilirsiniz! Bir yıl ne kadar bir fark yaratıyor, sitemizin bu bölümünü yeniden çalışıyor ve bu kez biraz daha fazla bilgi sahibi olarak kendi sorduğum soruya rastladım. Kodumu sayısal durum kimliğini, ülke kodunu yansıtacak şekilde güncelledim ve getStore() yöntemiyle iletildi ve çok iyi çalıştı. Teşekkür ederim! –

6

Ayrıca bu

$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

Fikir için teşekkürler! Ancak bu durumda, her zaman aradığımı bize vereceğini düşünmüyorum. Yeniden satışa konu olan ve vergi tahsil etmeyen belirli müşteri hesaplarımız var. Bu kodun yalnızca bir ürün için olduğu ve müşteri vergi sınıfını dikkate almadığı anlaşılıyor. –