Ao cavar mais fundo, percebi que isso eav_entity_type.increment_per_store
pode 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_id
intervalo 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_store
a entidade do pedido como 0
,
Isso leva ao Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
uso store_id = 0
ao carregar o eav_entity_store
registro 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_id
e 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;
}
Isso deve funcionar para qualquer tipo de entidade usando o eav/entity_increment_numeric
modelo, como order
, invoice
, shipment
e 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 ^^