Копаючи глибше, я зрозумів, що 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
використовуючи 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 немає жодної опції, яка дозволяє вам це налаштувати.
Це може означати, а може і не означати, що офіційно його не використовують.
Використовуйте на свій страх і ризик. Якщо ваші зміни спричинили хаос, не звинувачуйте мене. Вас попередили ^^