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...

Était-ce utile?

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 dans core_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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top