Comment changer le préfixe d'incrément de commande ?
-
13-12-2019 - |
Question
Je gère une boutique (Magento CE 1.6.2) avec 4 vues de magasin différentes, qui ont (pour des raisons historiques) les identifiants 1, 3, 4 et 7.Les numéros de commande ressemblent à ceci : 10000001, 30000001, 40000001, 70000001.
J'ai configuré une toute nouvelle installation avec Magento CE 1.9.1, mais maintenant les identifiants de magasin sont 1, 2, 3, 4...
Comment puis-je changer cela dans l’ancienne situation ?
Je suis tombé sur ce post --> http://www.thevortexcode.com/how-to-change-order-prefix-and-default-value-of-ordershipmentinvoice-numbercredit-memo-in-magento/ expliquant comment régler/changer le eav_entity_store.increment_prefix
Mais cela ne semble pas fonctionner dans la version 1.9...
La solution
Modifiez simplement l'ID des magasins dans le store_id
colonne dans la core_store
table de base de données.En raison des clés étrangères, cela sera mis à jour dans presque toutes les autres tables.
De plus, vous devez mettre à jour :
default_store_id
colonne danscore_store_group
tableau
Comme indiqué, changer les identifiants de votre base de données serait un peu radical.De plus, vous devrez toujours mettre à jour le eav_entity_store
tableau.
Ainsi, vous pouvez également simplement définir une configuration par magasin pour vos ID d'incrément.Vous pouvez le faire dans le eav_entity_store
tableau:
- Pour l'ID de magasin 1, définissez
increment_prefix
à 1 - Pour l'ID de magasin 2, définissez
increment_prefix
à 3 - Pour l'ID de magasin 3, définissez
increment_prefix
à 4 - Pour l'ID de magasin 4, définissez
increment_prefix
à 7
Autres conseils
Mieux vaut utiliser les wrappers de modèle plutôt que les instructions SQL brutes.
Exemple:
$productEntityType = Mage::getModel('eav/entity_type')
->loadByCode(Mage_Catalog_Model_Product::ENTITY);
$entityStoreConfig = Mage::getModel('eav/entity_store')
->loadByEntityStore($productEntityType->getId(), 0);
$entityStoreConfig->setEntityTypeId($productEntityType->getId())
->setStoreId(0)
->setIncrementPrefix($prefix)
->setIncrementLastId($lastId)
->save();
Voir:
J'ai dû le faire plusieurs fois pour différentes raisons et voici ce que je fais :
Cette requête vous montrera l'identifiant d'incrément uniquement pour Entity_type_code = order
SELECT * FROM eav_entity_store join eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
WHERE eav_entity_type.entity_type_code='order';
Une fois que vous avez localisé les lignes que vous souhaitez mettre à jour, vous pouvez les modifier comme ceci :
UPDATE eav_entity_store
INNER JOIN eav_entity_type ON eav_entity_type.entity_type_id = eav_entity_store.entity_type_id
SET eav_entity_store.increment_prefix='X'
WHERE eav_entity_type.entity_type_code='order' and eav_entity_store.eav_entity_store_id = {row_id_here};
Notez que la valeur deincrément_last_id contient déjà l'incrément_prefix, j'ai donc généralement supprimé l'ancien incrément_prefix de incrément_last_id afin que l'identifiant d'incrément des nouvelles commandes semble bon.
Si tu as les citations avec un incrément_order_id réservé, il est alors possible que vous voyiez toujours les commandes avec l'ancien incrément_id.Une fois que vous aurez commencé à générer de nouveaux devis après la mise à jour, tout devrait bien se passer.
Habituellement, dans mon environnement de développement, je définis simplement toutes les citations sur est_actif = 0 après avoir mis à jour l'incrément_id juste pour prendre un nouveau départ.
Pour plus de détails, vérifiez ici : http://www.warpconduit.net/2012/04/18/how-to-change-the-order-increment-id-and-prefix-in-magento/
J'essaie vraiment d'éviter les requêtes directes dans une base de données magento.Si possible, créez un module simple doté d'un script d'installation ou de mise à niveau qui le fera pour vous.Par exemple, vous pouvez utiliser le script ci-dessous pour modifier l'identifiant d'incrément et le préfixe d'incrément :
<?php
$this->startSetup();
/*
* Get the resource model
*/
$resource = Mage::getSingleton('core/resource');
/*
* Retrieve the write connection
*/
$writeConnection = $resource->getConnection('core_write');
/*
* Retrieve our table name
*/
$table = $resource->getTableName('eav/entity_store');
$table2=$resource->getTableName('eav/entity_type');
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_last_id='XXXXXXXXX'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
/*
* Execute the query
*/
$writeConnection->query($query);
$this->endSetup();
Où XXXXXXXXX est l'identifiant d'incrément auquel vous souhaitez commencer et Y est l'identifiant du magasin pour lequel vous souhaitez effectuer cette opération.
Pour modifier le préfixe réel, utilisez la requête ci-dessous :
$query = "UPDATE {$table}
INNER JOIN {$table2} ON {$table2}.entity_type_id ={$table}.entity_type_id
SET {$table}.increment_prefix='X'
WHERE {$table2}.entity_type_code='order' AND eav_entity_store.store_id = 'Y'";
Où X est le préfixe que vous souhaitez utiliser et Y étant l'identifiant pour lequel vous souhaitez le faire.