¿Cómo cambiar el prefijo de incremento de orden?
-
13-12-2019 - |
Pregunta
Dirijo una tienda (Magento CE 1.6.2) con 4 vistas de tienda diferentes, que tienen (por razones históricas) los ID 1, 3, 4 y 7.Los números de pedido se ven así: 10000001, 30000001, 40000001, 70000001.
He configurado una nueva instalación con Magento CE 1.9.1, pero ahora los ID de la tienda son 1, 2, 3, 4...
¿Cómo cambio esto en la situación anterior?
Me encontré con esta publicación --> http://www.thevortexcode.com/how-to-change-order-prefix-and-default-value-of-ordershipmentinvoice-numbercredit-memo-in-magento/ explicando cómo configurar/cambiar el eav_entity_store.increment_prefix
Pero esto no parece funcionar en 1.9...
Solución
Simplemente edite el ID de las tiendas en el store_id
columna en el core_store
tabla de base de datos.Debido a las claves externas, esto se actualizará en casi todas las demás tablas.
Además deberías actualizar:
default_store_id
columna encore_store_group
mesa
Como se comentó, cambiar la ID de su base de datos real sería un poco radical.Además, todavía tendrías que actualizar el eav_entity_store
mesa.
Por lo tanto, también puede simplemente establecer una configuración por tienda para sus ID de incremento.Puedes hacer esto en el eav_entity_store
mesa:
- Para ID de tienda 1, establezca
increment_prefix
a 1 - Para ID de tienda 2, establezca
increment_prefix
a 3 - Para ID de tienda 3, establezca
increment_prefix
para 4 - Para ID de tienda 4, establezca
increment_prefix
a 7
Otros consejos
MEJOR UTILICE MODELO WRAPTERS en lugar de declaraciones SQL cruda.
Ejemplo:
$productEntityType = Mage::getModel('eav/entity_type')
->loadByCode(Mage_Catalog_Model_Product::ENTITY);
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($productEntityType->getId(), 0);
$entityStoreConfig->setEntityTypeId($productEntityType->getId())
->setStoreId(0)
->setIncrementPrefix($prefix)
->setIncrementLastId($lastId)
->save();
ver:
Tuve que hacer esto muchas veces por diferentes razones y esto es lo que hago:
Esta consulta le mostrará la ID de incremento solo para Entity_Type_code= Order
SELECT * FROM eav_entity_store join eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
WHERE eav_entity_type.entity_type_code='order';
Una vez que localice las filas que le gustaría actualizar, puede cambiarlas como esta:
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_prefix='X'
WHERE eav_entity_type.entity_type_code='order' and eav_entity_store.eav_entity_store_id = {row_id_here};
Note que el valor para increment_last_id ya contiene el incremental_prefix, por lo que generalmente eliminé el antiguo incremental_prefix desde increment_last_id, por lo que el nuevo ID de incremento de pedidos se ve bien.
Si tiene cotizaciones con un increment_order_id reservado, entonces es posible que aún vea las órdenes con el antiguo incremental_id . Una vez que comience a generar nuevas cotizaciones después de la actualización, todo debería estar bien.
Por lo general, en mi entorno de desarrollo, simplemente configuro todas las citas en is_active= 0 después de actualizar el increment_id solo para tener un nuevo comienzo.
Para obtener más detalles, consulte aquí: http://www.warpconduit.net/2012/04/18/2012/04/18/how-to-change-the-order-increment-id-and-prefix-in-magento/
Realmente intento y evito las consultas directas en un Magento DB.Si es posible, cree un módulo simple que tenga un script de instalación o actualización que lo haga por usted.Por ejemplo, puede usar el siguiente script para cambiar el ID de incremento y el prefijo de incremento:
<?php
$this->startSetup();
/*
* Get the resource model
*/
$resource = Mage::getSingleton('core/resource');
/*
* Retrieve the write connection
*/
$writeConnection = $resource->getConnection('core_write');
/*
* Retrieve our table name
*/
$table = $resource->getTableName('eav/entity_store');
$table2=$resource->getTableName('eav/entity_type');
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_last_id='XXXXXXXXX'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
/*
* Execute the query
*/
$writeConnection->query($query);
$this->endSetup();
Donde XXXXXXXXX es su ID de incremento que desea iniciar y es el ID de la tienda para el que desea hacer esto.
Para cambiar el prefijo real, use la consulta a continuación:
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_prefix='X'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
Donde X es el prefijo que desea usar e y y y es el ID de Sotre con el que desea hacer esto.