Ao cavar mais fundo, percebi que isso eav_entity_type.increment_per_storepode ser útil.
Isto é. Mas apenas no caso, quando você deseja que todas as visualizações da loja (globalmente, não importa em qual site elas estejam definidas) da sua instalação do Magento compartilhem o mesmo increment_idintervalo de números de pedidos .
Isso não resolve meu problema específico, mas talvez seja útil para outros, então aqui vamos nós:
Para ativar o compartilhamento global de seus números de pedidos, defina eav_entity_type.increment_per_storea entidade do pedido como 0,
Isso leva ao Mage_Eav_Model_Entity_Type::fetchNewIncrementId()uso store_id = 0ao carregar o eav_entity_storeregistro da entidade do pedido, independentemente da exibição da loja à qual realmente pertence.
Se esse registro não existir, o Magento criará um, usando store_ide 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;
}
Isso deve funcionar para qualquer tipo de entidade usando o eav/entity_increment_numericmodelo, como order, invoice, shipmente creditmemo.
Esteja ciente, porém, de que ainda não consegui encontrar nenhuma documentação oficial increment_per_store. E que não há opção no back-end do Magento, permitindo que você configure isso.
Isso pode ou não significar que não se pensa que seja usado oficialmente.
Use por sua conta e risco. Se suas mudanças causam estragos, não me culpe. Você foi avisado ^^