Mientras cavaba más profundo, me di cuenta de que eav_entity_type.increment_per_storepuede 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_idrango 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_storela entidad de pedido en 0,
Esto conduce al Mage_Eav_Model_Entity_Type::fetchNewIncrementId()uso store_id = 0al cargar el eav_entity_storeregistro 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_idy increment_prefixde 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_numericmodelo, como order, invoice, shipmenty creditmemo.
Sin embargo, tenga en cuenta que increment_per_storetodaví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 ^^