Podczas kopania głębiej zdałem sobie sprawę, że eav_entity_type.increment_per_storemoże to być pomocne.
To jest. Ale tylko w przypadku, gdy chcesz, aby wszystkie widoki sklepu (globalnie, bez względu na to, w której witrynie są zdefiniowane) Twojej instalacji Magento, aby miały ten sam increment_idzakres numerów zamówień .
To nie rozwiązuje mojego konkretnego problemu, ale może jest pomocne niektórym innym, więc zaczynamy:
Aby aktywować globalne udostępnianie numerów zamówień, ustaw eav_entity_type.increment_per_storejednostkę zamówienia na 0,
Prowadzi to do Mage_Eav_Model_Entity_Type::fetchNewIncrementId()użycia store_id = 0podczas ładowania eav_entity_storerekordu jednostki zamówienia, bez względu na to, do którego sklepu należy.
Jeśli nie ma takiego rekordu istnieje, Magento tworzy jedną, wykorzystując store_idi increment_prefixod 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;
}
To powinno działać dla każdego typu jednostki przy użyciu eav/entity_increment_numericmodelu, jak order, invoice, shipmenti creditmemo.
Pamiętaj jednak, że nie znalazłem jeszcze żadnej oficjalnej dokumentacji increment_per_store. I że nie ma opcji w backendzie Magento, która pozwala ci to skonfigurować.
Może to oznaczać, że nie jest oficjalnie używane.
Używaj na własne ryzyko. Jeśli twoje zmiany sieją spustoszenie, nie obwiniaj mnie. Zostałeś ostrzeżony ^^