Come cambiare il prefisso dell'incremento dell'ordine?
-
13-12-2019 - |
Domanda
Gestisco un negozio (Magento CE 1.6.2) con 4 diverse viste di negozi, che hanno (per motivi storici) ID ID 1, 3, 4 e 7. I numeri d'ordine sono stati sembri come questo 10000001, 30000001, 40000001,70000001.
Ho configurato una nuova installazione con Magento CE 1.9.1, ma ora gli ID del negozio sono 1, 2, 3, 4 ...
Come posso cambiarlo nella vecchia situazione?
Ho trovato questo post -> http://www.thevortexcode.com/how-to-change-order-prefix-and-default-value-of-ordshirdmentinvoice-numbercredit-memo-in-magento/ Spiegare come impostare / Cahnge il eav_entity_store.increment_prefix
Soluzione
Basta modificare l'ID dei negozi nella colonna store_id
nella tabella del database core_store
.A causa delle chiavi straniere, questo si aggiornerà in quasi tutti gli altri tavoli.
Inoltre è necessario aggiornare:
- .
- Colonna
default_store_id
nella tabellacore_store_group
.
Come commentato, modifica del tuo ID di database effettivo sarebbe un po 'radicale.Inoltre dovresti comunque aggiornare la tabella eav_entity_store
.
Quindi, è possibile anche semplicemente impostare una configurazione per negozio per i tuoi ID di incremento.Puoi farlo nella tabella eav_entity_store
:
- .
- Per ID STORE 1, impostare
increment_prefix
a 1 - Per l'ID STORE 2, impostare
increment_prefix
a 3 - Per ID STORE 3, impostare
increment_prefix
a 4 - Per ID STORE 4, impostare
increment_prefix
a 7
Altri suggerimenti
Meglio utilizzare i wrapper modello piuttosto che le dichiarazioni SQL grezze.
Esempio:
$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();
.
Vedi:
Ho dovuto farlo molte volte per motivi diversi e questo è quello che faccio:
Questa query ti mostrerà l'ID incremento solo per Entity_type_code= ordine
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';
.
Una volta che hai individuato le righe che vorresti aggiornare puoi cambiarli come questo:
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};
.
Si noti che il valore per increment_last_id contiene già l'increment_prefix, quindi di solito ho rimosso il vecchio increment_prefix da increment_last_id in modo che il nuovo ID di incremento degli ordini sia buono.
Se hai Quotes con un incremento riservato_order_id è possibile che vedrai ancora ordini con il vecchio increment_id . Una volta che inizi a generare nuove citazioni dopo che l'aggiornamento dovrebbe andare bene.
Di solito nel mio ambiente di sviluppo ho appena impostato tutte le quotazioni su IS_Active= 0 dopo aver aggiornato l'incremento_id solo per avere un nuovo inizio.
Per maggiori dettagli Verifica qui: http://www.warpconduit.net/2012/04/18/how-to-change-the-order-increment-id-and-prefix-in-magento/
Cerco davvero ed evitare query dirette in un DB magento.Se possibile, creare un modulo semplice con uno script di installazione o aggiornamento che lo farà per te.Ad esempio, è possibile utilizzare lo script sottostante per modificare l'ID incremento e il prefisso incrementare:
<?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();
.
DOVE XXXXXXXXX è il tuo ID INCREMENS che vuoi iniziare e y essere l'ID del negozio che vuoi fare questo per.
Per modificare il prefisso effettivo, utilizzare la query qui sotto:
$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'";
.
Dove X è il prefisso che si desidera utilizzare e Y essere l'ID Sotre che vuoi fare questo per.