2011-02-02 23 views
7

Necesito hacer una llamada a una API de un tercero para actualizar los aranceles/impuestos para el envío internacional durante la etapa de revisión del proceso de pago. Tengo la llamada de la API lista para comenzar, sin embargo, me falta una forma de agregar los aranceles e impuestos devueltos a la cotización.Magento: agregar derechos/impuestos a una cotización durante la revisión

¿Hay una forma integrada de hacerlo?

im esperando que hay algo así como

$quote->addCostComponent("Duties", 5.0); 
+0

sí, hay. pero olvidé cómo exactamente. ¿No sería mejor preguntar esto en los foros de magento? –

+4

@Joe, los foros de Magento son un páramo si buscas ayuda con el código. Dado que esta es una pregunta relacionada con el código, parece más que apropiada para la audiencia aquí. –

+0

@JosephMastey En cuanto a magento y así, miren [área 51 propuesta de magento] (http://area51.stackexchange.com/proposals/48872/magento) – Khez

Respuesta

15

Es necesario para llevar a cabo tales etapas:

  1. En primer lugar es necesario crear los atributos de sus derechos de aduana/impuestos para la visualización de ellos con el fin , no solo agregue al gran total. Debe haber al menos dos atributos, uno para el valor en la moneda del sitio web (utilizado en la captura de pagos y debe tener el prefijo base_) y un valor en la moneda mostrada (usado solo para mostrar el importe en la divisa deseada para el cliente). Estos atributos se deben agregar a cada entidad con la parte financiera (quote_address, order, invoice). Por ejemplo, debería ser: base_your_attribute_code y your_attribute_code con tipo decimal.

  2. Luego hay que crear su modelo de colector total que debería extenderse a partir Mage_Sales_Model_Quote_Address_Total_Abstract e implementar recoger y métodos de captación como en este ejemplo:

    /** 
    * Your custom total model 
    * 
    */ 
    class Your_Module_Model_Total_Custom extends Mage_Sales_Model_Quote_Address_Total_Abstract 
    { 
        /** 
        * Constructor that should initiaze 
        */ 
        public function __construct() 
        { 
         $this->setCode('your_attribute_code'); 
        } 
    
        /** 
        * Used each time when collectTotals is invoked 
        * 
        * @param Mage_Sales_Model_Quote_Address $address 
        * @return Your_Module_Model_Total_Custom 
        */ 
        public function collect(Mage_Sales_Model_Quote_Address $address) 
        { 
         parent::collect($address); 
    
         // ... Some your api calls to retrive amount ... 
    
         // Set base amount of your custom fee 
         $this->_setBaseAmount($calculatedAmount); 
    
         // Set amount of your custom fee in displayed currency 
         $this->_setAmount(
          $address->getQuote()->getStore()->convertPrice($calculatedAmount, false) 
         ); 
    
         return $this; 
        } 
    
        /** 
        * Used each time when totals are displayed 
        * 
        * @param Mage_Sales_Model_Quote_Address $address 
        * @return Your_Module_Model_Total_Custom 
        */ 
        public function fetch(Mage_Sales_Model_Quote_Address $address) 
        { 
         // Display total only if it is not zero 
         if ($address->getYourAttributeCode() != 0) { 
          $address->addTotal(array(
           'code' => $this->getCode(), 
           'title' => 'My Custom Duty', 
           'value' => $address->getYourAttributeCode() 
          )); 
         } 
        } 
    } 
    
  3. Después de que se crea el modelo de colector necesita añadirlo a de configuración:

    <config> 
        <global> 
         <sales> 
          <quote> 
           <totals> 
            <your_total_code> 
             <class>your_module/total_custom</class> 
             <before>grand_total</before> 
             <after>shipping</after> 
            </your_total_code> 
           </totals> 
          </quote> 
         </sales> 
        </global> 
    </config> 
    
    • clase nodo contiene la alias de clase de su modelo de recopilador
    • antes de y después de los nodos indican el orden de invocación de su recopilador.
  4. es necesario agregar sus atributos totales de campo conjuntos que serán utilizados para copiar datos calculados en orden o factura:

    <config> 
        <global> 
         <fieldsets> 
          <!-- copies data from quote address to order during the order placement --> 
          <sales_convert_quote_address> 
           <base_your_attribute_code><to_order>*</to_order></base_your_attribute_code> 
           <your_attribute_code><to_order>*</to_order></your_attribute_code> 
          </sales_convert_quote_address> 
    
          <!-- copies data from order to invoice/shipment/creditmemo during their creation --> 
          <sales_convert_order> 
           <base_your_attribute_code><to_invoice>*</to_invoice><to_shipment>*</to_shipment><to_cm>*</to_cm></base_your_attribute_code> 
           <your_attribute_code><to_invoice>*</to_invoice><to_shipment>*</to_shipment><to_cm>*</to_cm></your_attribute_code> 
          </sales_convert_order> 
    
         </fieldsets> 
        </global> 
    </config> 
    
  5. Después de realizar estos pasos usted será capaz de ver su tarifa de encargo en totales

+0

Todavía estoy mirando lo que podría haber salido mal pero el impuesto calculado cantidad que se muestra en el total, pero no aparece como su propia línea de pedido – rennat

+0

@rennat, ¿ha definido el método 'fetch'? –

+0

sí, agregué algunos registros de depuración y me pregunto si tiene que ver con las convenciones de nomenclatura para el método getYourAttributeCode()? He usado BJLTAX en cada instancia, pero getBJLTAX() no devuelve nada, de hecho también lo hacen getBjltax() y getbjltax(). – rennat

Cuestiones relacionadas