Continuando con el post anterior (Añadiendo un recargo por pagar con PayPal en Magento) en el que comentábamos la idea de crear un nuevo total con sus correspondientes impuestos, comenzamos por mostrar la estructura de archivos necesaria.
En artículos anteriores habíamos conseguido mostrar la nueva fila con el recargo tanto en el carrito como el proceso de pedido de Magento, pero hay muchos otros sitios donde se muestran los totales en nuestra tienda Magento. Por ejemplo deberemos mostrar este nuevo total en:
- La visualización del pedido en la zona de usuario
- La visualización del pedido en el administrador
- Email del pedido
- Los documentos pdf: facturas, abonos, etc.
Añadir nuevo total a pedido en Magento
Para comenzar necesitaremos que cuando el cliente entre en su cuenta de usuario para ver los detalles de su pedido, vea esta nueva fila ya que si no, los totales no cuadrarán con lo que el usuario espera encontrar.
Podemos añadir un nuevo total a esta zona por medio de definiciones de layout. Para ello, en el archivo de actualización de layout de nuestro módulo Magento añadiremos las siguientes líneas:
<sales_order_view> <reference name="order_totals"> <block type="paypalfee/sales_order_total" name="paypalfee_total" before="tax" /> </reference> </sales_order_view>
Con estas líneas estamos creando un nuevo bloque (es un bloque estándar de Magento) dentro de la zona de totales y lo situamos antes del bloque tax (impuestos).
Dadas las líneas anteriores, deberemos definir un bloque en nuestro módulo en la ruta correspondiente:
app/code/local/<mi empresa>/<mi modulo>/Block/Sales/Order/Total.php
Este bloque debe extender del bloque Mage_Sales_Block_Order_Totals y únicamente es necesario definir una función que retorne la información de la nueva fila. Será tal y como se indica a continuación.
public function initTotals() { $this->getParentBlock()->addTotal(new Varien_Object(array( 'code'=> 'paypalfee', 'value'=> CANTIDAD A MOSTRAR, 'base_value'=> CANTIDAD A MOSTRAR EN MONEDA BASE, 'label'=> 'Recargo PayPal', )), 'subtotal', 'tax); } }
Los dos últimos parámetros, con valor «subtotal» y «tax» situan nuestro total entre los dos mencionados (después de subtotal y antes de tax).
En este ejemplo no entramos a indicar de donde obtenemos la cantidad a mostrar, que como es de imaginar deberá estar guardada junto al resto de la información del pedido, como un atributo más del mismo.
Mostrar el nuevo total en el administador de Magento
Al igual que de cara al usuario, también nos interesará que el nuevo total se muestre en nuestro administrador de Magento.
Podemos conseguirlo de forma similar, pero con un manejador diferente del layout (además dirigido al backend y no al frontend). En este caso sería con las siguientes líneas:
<adminhtml_sales_order_view> <reference name="order_totals"> <block type="paypalfee/sales_order_total" name="paypalfee_total" before="tax" /> </reference> </adminhtml_sales_order_view>
Mostrar el nuevo total en otras zonas de Magento
Existen otras zonas de Magento donde deberemos mostrar el nuevo total y que funcionan de forma muy similar a lo explicado anteriormente, solo variando el manejador del layout que activa la visualización.
Para las impresión del pedido desde la zona de usuario usaremos:
sales_order_print
Para facturas:
sales_order_invoice
sales_order_printinvoice
Para el email del pedido:
sales_email_order_items
Para el email de la factura:
sales_email_order_invoice_items
Resumen
Con lo visto hasta ahora tanto en este artículo como en los otros de la serie Añadiendo un recargo por pagar con PayPal en Magento, hemos aprendido a crear nuevos totales en Magento y a mostrarlos en las diferentes zonas de la tienda y del administrador.
Nos quedan todavía algunos pasos importantes como guardar el total en la base de datos junto al resto de la información del pedido y sobre todo enviar la información del recargo a PayPal, sumada al resto de conceptos.
Hey! Qué opinas sobre el artículo?