Копая глубже, я понял, что это eav_entity_type.increment_per_store
может быть полезно.
Это. Но только для случая, когда вы хотите все виды магазина (глобально, независимо от того, на каком веб-сайте они определены) вашей установки Magento имели одинаковый increment_id
диапазон номеров заказов .
Это не решает мою конкретную проблему, но, возможно, это полезно для некоторых других, так что здесь мы идем:
Чтобы активировать общий доступ к номерам вашего заказа, установите для eav_entity_type.increment_per_store
объекта заказа значение0
,
Это приводит к Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
использованию store_id = 0
при загрузкеeav_entity_store
записи объекта заказа независимо от того, к какому виду магазина он действительно принадлежит.
Если такой записи не существует, Magento создает ее, используя store_id
и increment_prefix
of 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;
}
Это должно работать для любого типа объекта с использованием eav/entity_increment_numeric
модели, как order
, invoice
, shipment
иcreditmemo
.
Имейте в виду, что я не смог найти никакой официальной документации increment_per_store
. И что в бэкэнде Magento нет опции, позволяющей вам это настроить.
Это может означать, а может и не означать, что оно не используется официально.
Используйте на свой риск. Если ваши изменения причиняют ущерб, не вините меня. Вы были предупреждены ^^