Personalizar números de pedido en Magento

Números de pedido personalizados en Magento

En Magento, el número de pedido se genera partiendo de 100000001 y se va incrementando de uno en uno por defecto. En ocasiones algunas empresas necesitan generar un valor personalizado con la finalidad de evitar un seguimiento de los pedidos. Tambien podriamos hacer coincidir el número de pedido con otras partes del sistema, por ejemplo, el número de factura, envío, etc…

El campo que identifica al número de pedido dentro de la base de datos es increment_id, y está presente en varias tablas de entidad. Los diferentes ajustes, relacionados con el formato del número y la secuencia de inicio, se definen en las tablas eav_entity_type  y eav_entity_store. Ahora veamos lo que podemos controlar.

La tabla eav_entity_store tiene dos atributos de interés: increment_prefix e increment_last_id.

  • increment_prefix especifica el prefijo que se añadirá al número, por defecto es «1».
  • increment_last_id define el último número de entidad. Aquí podemos cambiar el número inicial de pedidos, facturas y envíos.

La tabla eav_entity_type contiene los atributos que nos permiten cambiar el formato de número. Estos son:

  • increment_pad_length que se utiliza para ajustar la longitud del número excluyendo su prefijo
  • increment_pad_char utilizado para especificar el carácter de relleno hasta a la longitud requerida. Por defecto es cero.
  • increment_model que especifica la clase que se utiliza para generar los números. Esta clase es Mage_Eav_Model_Entity_Increment_Numeric para todas las entidades por defecto.

Por ejemplo, si queremos cambiar nuestro número de pedido añadiendo un prefijo personalizado, por ejemplo ‘P9’ de forma que quede como; P900000618.

Nota: Antes del primer pedido, no hay registros en la tabla eav_entity_store, por lo que será necesario realizar un pedido o crear un nuevo registro manualmente para los pedidos con entity_type_id = 5  y  store_id = 1, suponiendo que solo tenemos una store configurada.

En primer lugar, tenemos que actualizar el campo increment_prefix dentro de la tabla eav_entity_store  con el valor P9 y también el campo increment_last_id  hay que configurarlo para el valor P900000618.

eav_enttity_store

Después en la tabla eav_entity_type, establezca el valor del campo increment_pad_length a 8, (seguramente ya tendra este valor por defecto). Esta es la longitud del número sin el prefijo P9.

Hasta aquí solo se ha configurado un número de pedido inicial, si ahora realizamos un nuevo pedido veremos como el valor de Increment_last_id se incrementa en una unidad, quedando P900000619.

Generar incremento para el número de pedido

Vamos a dar un paso más generándo un número aleatorio, que sumaremos al último número de pedido para evitar que alguien pueda realizar un seguimiento de los pedidos.

Tenemos dos opciones para realizar esta tarea:

  1. Sobreescribir el nucleo de Magento copiando el archivo /app/code/core/Mage/Eav/Model/Entity/Increment/Numeric.php dentro de /app/code/local/Mage/Eav/Model/Entity/Increment/Numeric.php
  2. Crear un nuevo archivo que en este caso llamaremos Order.php dentro del directorio /app/code/local/Mage/Eav/Model/Entity/Increment/

Lo siguiente es editar el archivo Order.php y agregar la clase Mage_Eav_Model_Entity_Increment_Order con el siguiente código:

<?php 
class Mage_Eav_Model_Entity_Increment_Order extends Mage_Eav_Model_Entity_Increment_Abstract
{
    public function getNextId(){
        $last = $this->getLastId();
 
        if (strpos($last, $this->getPrefix()) === 0) {
            $last = (int)substr($last, strlen($this->getPrefix()) + 2);
        } else {
            $last = (int)$last;
        }
        // Incremento personalizado del último número de pedido
        $next = $last + rand(1, 300);
        return $this->format($next);
    }
 
    public function format($id){
        $result  = $this->getPrefix() . date('y');
        $result .= str_pad((string)$id, $this->getPadLength(), 
            $this->getPadChar(), STR_PAD_LEFT);
        return $result;
    }
}

Por último y muy importante, indicarle a Magento el nuevo archivo que vamos a usar para generear el siguiente número. Para ello actualizamos el campo increment_model de la tabla eav_entity_type con el valor eav/entity_increment_order con esto ya podemos utilizar el modelo personalizado que generara los números de pedido personalizados.

eav_entity_type

Atención: Si se cambia el valor del registro en la columna increment_model pero el fichero Order.php no existe, no se podrá finalizar el proceso de compra. (El botón para realizar compra en el checkout deja de funcionar)

Un comentario en “Números de pedido personalizados en Magento

  • Thanks, great article.

Comentarios y opiniones

Puede que tarde en responder, se paciente.

*
*