Podczas kopania głębiej zdałem sobie sprawę, że eav_entity_type.increment_per_store
moż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_id
zakres 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_store
jednostkę zamówienia na 0
,
Prowadzi to do Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
użycia store_id = 0
podczas ładowania eav_entity_store
rekordu 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_id
i increment_prefix
od 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_numeric
modelu, jak order
, invoice
, shipment
i 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 ^^