Mientras cavaba más profundo, me di cuenta de que eav_entity_type.increment_per_store
puede ser útil.
Es. Pero solo para el caso, cuando desea que todas las vistas de la tienda (globalmente, sin importar en qué sitio web estén definidas) de su instalación de Magento compartan el mismo increment_id
rango de números de pedido .
Esto no resuelve mi problema específico, pero tal vez sea útil para otros, así que aquí vamos:
Para activar el intercambio global de sus números de pedido, configure eav_entity_type.increment_per_store
la entidad de pedido en 0
,
Esto conduce al Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
uso store_id = 0
al cargar el eav_entity_store
registro de la entidad de pedido, sin importar a qué vista de la tienda pertenezca realmente.
Si no existe tal registro, Magento crea uno, usando store_id
y increment_prefix
de 0
.
public function fetchNewIncrementId($storeId = null)
{
if (!$this->getIncrementModel()) {
return false;
}
if (!$this->getIncrementPerStore() || ($storeId === null)) {
/**
* store_id null we can have for entity from removed store
*/
$storeId = 0;
}
// Start transaction to run SELECT ... FOR UPDATE
$this->_getResource()->beginTransaction();
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($this->getId(), $storeId);
if (!$entityStoreConfig->getId()) {
$entityStoreConfig
->setEntityTypeId($this->getId())
->setStoreId($storeId)
->setIncrementPrefix($storeId)
->save();
}
$incrementInstance = Mage::getModel($this->getIncrementModel())
->setPrefix($entityStoreConfig->getIncrementPrefix())
->setPadLength($this->getIncrementPadLength())
->setPadChar($this->getIncrementPadChar())
->setLastId($entityStoreConfig->getIncrementLastId())
->setEntityTypeId($entityStoreConfig->getEntityTypeId())
->setStoreId($entityStoreConfig->getStoreId());
/**
* do read lock on eav/entity_store to solve potential timing issues
* (most probably already done by beginTransaction of entity save)
*/
$incrementId = $incrementInstance->getNextId();
$entityStoreConfig->setIncrementLastId($incrementId);
$entityStoreConfig->save();
// Commit increment_last_id changes
$this->_getResource()->commit();
return $incrementId;
}
Esto debería funcionar para cualquier tipo de entidad utilizando el eav/entity_increment_numeric
modelo, como order
, invoice
, shipment
y creditmemo
.
Sin embargo, tenga en cuenta que increment_per_store
todavía no pude encontrar ninguna documentación oficial . Y que no hay ninguna opción en el backend de Magento que le permita configurar esto.
Esto puede o no significar que no se cree que se use oficialmente.
Úselo bajo su propio riesgo. Si tus cambios causan estragos, no me culpes. Has sido advertido ^^