23May

Modificar y remover decimales a Magento 1.9 (es_CL)

Dejar configurado Magento para Español Chile puede ser un verdadero dolor de cabeza. Es por eso que ya que me di el trabajo de encontrar la mejor de manera de hacerlo con la nueva versión de Magento, les indicaré paso a paso como pueden lograr esta tarea.

1. Lo primero que se debe hacer, es configurar todo Magento 1.9 en el Idioma en Español Chile tanto en el FrontEnd como en el BackEnd. Para esto deben ir a System>Configuration>General>General y dejar en Country Options como Default Country=Chile.

2. Luego en las misma opción de General ir a la opción Currency Setup y en Currency Options dejar como Peso Chileno en el Base, Default y Allowed Currency para que quede definido que usaremos sólo nuestra moneda chilena.

3. Al pie de la página de Magento, está el idioma de BackEnd que está configurado nuestro Admin Panel. Por lo que dejamos nuestro Interface Locale como Español (Chile) / español (Chile). Aquí se comunicará con el archivo es_Cl.xml que el que viene por defecto nos sirve perfectamente. Es importante que cualquier modificación que le hagan a este archivo en los <currencyFormats>, puede alterar este Tutorial, por lo que se recomiendo tener cuidado o mejor no modificarlo.

4. Buscaremos el archivo Currency.php ubicado en lib>Zend>Currency.php y buscaremos la siguiente línea en el código:

protected $_options = array(
        'position'  => self::STANDARD,
        'script'    => null,
        'format'    => null,
        'display'   => self::NO_SYMBOL,
        'precision' => 2,
        'name'      => null,
        'currency'  => null,
        'symbol'    => null,
        'locale'    => null,
        'value'     => 0,
        'service'   => null,
        'tag'       => 'Zend_Locale'
    );

y debe quedar así:

protected $_options = array(
        'position'  => self::STANDARD,
        'script'    => null,
        'format'    => null,
        'display'   => self::NO_SYMBOL,
        'precision' => 0, // aquí modificamos la precision
        'name'      => null,
        'currency'  => null,
        'symbol'    => null,
        'locale'    => null,
        'value'     => 0,
        'service'   => null,
        'tag'       => 'Zend_Locale'
    );

5. Buscaremos ahora el archivo Currency.php que está ubicado en app>code>core>Mage>Directory>Model>Currency.php y buscaremos la siguiente línea en el código:

public function format($price, $options = array(), $includeContainer = true, $addBrackets = false)
    {
        return $this->formatPrecision($price, 2, $options, $includeContainer, $addBrackets);
    }

y debe quedar así:

public function format($price, $options = array(), $includeContainer = true, $addBrackets = false)
    {
        return $this->formatPrecision($price, 0, $options, $includeContainer, $addBrackets);
    }

6. Buscaremos el archivo Order.php que está ubicado en app>code>core>Mage>Sales>Model>Order.php y buscaremos las siguientes líneas en el código:

 public function formatPrice($price, $addBrackets = false)
    {
        return $this->formatPricePrecision($price, 2, $addBrackets);
    }

y debe quedar así…

 public function formatPrice($price, $addBrackets = false)
    {
        return $this->formatPricePrecision($price, 0, $addBrackets);
    }

y en el mismo archivo esta otra línea

    public function formatBasePrice($price)
    {
        return $this->formatBasePricePrecision($price, 2);
    }

que debe quedar así

    public function formatBasePrice($price)
    {
        return $this->formatBasePricePrecision($price, 0);
    }

7. Buscaremos el archivo Order.php que está ubicado en app>code>core>Mage>XmlConnect>Helper>Customer>Order.php y buscaremos la siguiente línea en el código:

  public function formatPrice(Mage_Core_Block_Template $renderer, $price)
    {
        return $renderer->getOrder()->getOrderCurrency()->formatPrecision($price, 2, array(), false);
    }

y debe quedar así

  public function formatPrice(Mage_Core_Block_Template $renderer, $price)
    {
        return $renderer->getOrder()->getOrderCurrency()->formatPrecision($price, 0, array(), false);
    }

8. Y finalmente buscaremos el archivo List.php que está ubicado en app>code>core>Mage>XmlConnect>Block>Customer>Order>List.php y buscaremos la siguiente línea en el código:

if ($orders->count()) {
            foreach ($orders as $order) {
                $item = $ordersXmlObj->addChild('item');
                $item->addChild('entity_id', $order->getId());
                $item->addChild('number', $order->getRealOrderId());
                $item->addChild('date', $this->formatDate($order->getCreatedAtStoreDate()));
                if ($order->getShippingAddress()) {
                    $item->addChild('ship_to', $ordersXmlObj->escapeXml($order->getShippingAddress()->getName()));
                }
                $item->addChild('total', $order->getOrderCurrency()->formatPrecision(
                    $order->getGrandTotal(), 2, array(), false, false
                ));
                $item->addChild('status', $order->getStatusLabel());
            }
        }

y debe quedar así

if ($orders->count()) {
            foreach ($orders as $order) {
                $item = $ordersXmlObj->addChild('item');
                $item->addChild('entity_id', $order->getId());
                $item->addChild('number', $order->getRealOrderId());
                $item->addChild('date', $this->formatDate($order->getCreatedAtStoreDate()));
                if ($order->getShippingAddress()) {
                    $item->addChild('ship_to', $ordersXmlObj->escapeXml($order->getShippingAddress()->getName()));
                }
                $item->addChild('total', $order->getOrderCurrency()->formatPrecision(
                    $order->getGrandTotal(), 0, array(), false, false
                ));
                $item->addChild('status', $order->getStatusLabel());
            }
        }

Que significa todo esto? Estamos modificando la “formatPricePrecision” y “formatPrecision” de Magento que agrega una coma y viene por defecto con 2 decimales, al estar configurado como Dólar (US$). Es por eso que estamos modificando que en vez de que sean 2 decimales que sean 0.

price1

price2

 

Si hacen todo como corresponde debe funcionar sin problemas. OJO! El único detalle es que el precio en atributo Price* en el detalle y en el detalle de la Order en el BackEnd, se seguirá viendo con “.00” pero por sistema y FrontEnd todo estará funcionando sin decimales. Suerte!

Share this Story

5 comments

  1. Hola Carlos, cuando selecciono Peso Chileno en “Default Display Currency” me aparece el error: “Selected default display currency is not available in allowed currencies” ¿sabes a que se debe? Uso la version 1.9.1.1

    Muchas gracias!

    • carlos.pozo@zentidoo.com

      Hola Cristian, este error es porque no estás configurando el paquete de idioma correcto y al mismo tiempo no estás marcando la moneda que corresponde al idioma que estás implementando en el FrontEnd. Esto es super sencillo, primero debes descargar e instalar el paquete de idioma es_CL (te dejo un paquete español para Chile muy bueno AQUÍ) y ahí configuras el idioma y la moneda en todas las opciones del Admin de Magento. Te dejo un buen tutorial AQUÍ en inglés, pero que es la misma manera de configurar el idioma y la moneda. Slds!

  2. Muy buen articulo Carlos!!, tengo un problema con esto y son para los productos configurables, cuando selecciono alguno de la lista desplegable, aparecen los 2 decimales, ¿ Sabes como se puede arreglar esto?, gracias.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

zentidoo.com ® 2015. Todos los derechos reservados