Mentre scavavo più a fondo, mi sono reso conto che eav_entity_type.increment_per_store
potrebbe essere utile.
È. Ma solo per il caso, quando si desidera che tutte le visualizzazioni dello store (a livello globale, indipendentemente dal sito Web in cui sono definite) dell'installazione di Magento, condividano lo stesso increment_id
intervallo di numeri di ordine .
Questo non risolve il mio problema specifico, ma forse è utile per alcuni altri, quindi eccoci qui:
Per attivare la condivisione globale dei numeri dell'ordine, impostare eav_entity_type.increment_per_store
l'entità ordine su 0
,
Questo porta Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
all'utilizzo store_id = 0
durante il caricamento del eav_entity_store
record dell'entità ordine, indipendentemente dalla vista dello store a cui appartiene realmente.
Se tale record non esiste, Magento ne crea uno, usando store_id
e increment_prefix
di 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;
}
Questo dovrebbe funzionare per qualsiasi tipo di entità utilizzando il eav/entity_increment_numeric
modello, come order
, invoice
, shipment
e creditmemo
.
Ricorda però che non sono ancora riuscito a trovare alcuna documentazione ufficiale increment_per_store
. E che non esiste alcuna opzione nel backend Magento che ti consenta di configurarlo.
Questo può o meno significare che non si pensa che sia usato ufficialmente.
Utilizzare a proprio rischio. Se i tuoi cambiamenti causano il caos, non incolparmi. Sei stato avvisato ^^