2012-06-08 20 views
6

Estoy tratando de obtener la tasa de impuestos (porcentaje, no moneda) para un código postal dado para que pueda mostrarlo en una cotización de terceros PDF impreso (sin relación con la "cotización" Magento lo utiliza como pre-pago y envío del carrito de compras). Aunque todavía soy relativamente nuevo en Magento, parece que getRateRequest() y getRate() son las dos funciones principales que obtienen la tasa impositiva basada en todas las variables (clase de impuesto de producto, clase de impuesto de cliente, etc.).getRate() y porcentaje de impuestos Magento

Como se trata de una extensión de un tercero y todos nuestros productos están sujetos a impuestos, pensé que usaría getRate() con la entrada de objeto Varien correcta y devolvería la tasa de impuestos. Después de una semana de prueba y error, no puedo entender por qué siempre obtengo una tasa de cero. Confirmé que estoy llamando a la función getRate() y que no devuelve cero desde la primera declaración if() que comprueba el ID de la clase de país y cliente/producto. Además, he confirmado que todas las variables están siendo transmitidas y accesibles en la función getRate().

He creado un objeto con la entrada siguiente (basada en la salida de getRateRequest()) que invoco con getRate() y espero que alguien pueda arrojar luz sobre lo que está mal con mi entrada de datos o por qué getRate() la función siempre devuelve un resultado de cero. (En realidad estoy ajuste con $ siguientes variables, que simplemente se definen anteriormente y uno de mis valores están por debajo de caso de prueba)

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

Mi plan de copia de seguridad es simplemente hacer una fórmula directa de consulta SQL a pesar de que probablemente lo hará ser un poco desordenado Debido a que nuestro equipo de desarrollo web no siguió exactamente los buenos estándares de codificación, una eventual reescritura del sitio estará en mi futuro una vez que se hayan corregido los inicios (las 4 páginas de ellos).

Gracias por cualquier ayuda y tómese el tiempo para leer esto.

EDITAR - desbordamiento de pila es impresionante :)

Respuesta

3

Si cambia:

$TaxRequest->setRegionId(California); 

a

$TaxRequest->setRegionId($stateId); 

donde $ IdentificadorEstado es numérico Identificación región. Tu código debería funcionar entonces.

+1

Doh! Qué diferencia hace un año, volviendo a trabajar esta parte de nuestro sitio y encontré mi propia pregunta con un poco más de conocimiento esta vez. Actualicé mi código para reflejar el ID de estado numérico, el código de país y lo pasé en getStore() y funcionó bien. ¡Gracias! –

6

También puede probar este

$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

¡Gracias por la idea! Sin embargo, en este caso, no creo que siempre nos dé lo que estoy buscando. Tenemos ciertas cuentas de clientes que son reventas y no cobran impuestos, parece que este código es solo para un producto y no tiene en cuenta la clase impositiva del cliente. –

Cuestiones relacionadas