Pergunta

Eu administro uma loja (Magento CE 1.6.2) com 4 visualizações de loja diferentes, que possuem (por razões históricas) os IDs 1, 3, 4 e 7.Os números dos pedidos têm a seguinte aparência: 10000001, 30000001, 40000001, 70000001.

Eu configurei uma nova instalação com Magento CE 1.9.1, mas agora os IDs da loja são 1, 2, 3, 4...

Como faço para mudar isso na situação antiga?

Me deparei com esse post --> http://www.thevortexcode.com/how-to-change-order-prefix-and-default-value-of-ordershipmentinvoice-numbercredit-memo-in-magento/ explicando como definir/alterar o eav_entity_store.increment_prefix

Mas isso não parece funcionar em 1.9 ...

Foi útil?

Solução

Basta editar o ID das lojas no store_id coluna no core_store tabela do banco de dados.Por causa das chaves estrangeiras, isso será atualizado em quase todas as outras tabelas.

Além disso, você deve atualizar:

  • default_store_id coluna em core_store_group mesa

Conforme comentado, alterar os IDs reais do seu banco de dados seria um pouco radical.Além disso, você ainda teria que atualizar o eav_entity_store mesa.

Portanto, você também pode simplesmente definir uma configuração por loja para seus IDs de incremento.Você pode fazer isso no eav_entity_store mesa:

  • Para ID de loja 1, defina increment_prefix para 1
  • Para ID de loja 2, defina increment_prefix para 3
  • Para ID de loja 3, defina increment_prefix para 4
  • Para ID de loja 4, defina increment_prefix para 7

Outras dicas

É melhor usar wrappers de modelo em vez de instruções SQL brutas.

Exemplo:

$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();

Ver:

Tive que fazer isso muitas vezes por diferentes motivos e é isso que eu faço:

Esta consulta mostrará o ID de incremento apenas para entidade_type_code = pedido

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';

Depois de localizar as linhas que deseja atualizar, você pode alterá-las assim:

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};

Observe que o valor de increment_last_id já contém o increment_prefix, então geralmente removi o antigo increment_prefix de increment_last_id para que o novo ID de incremento de pedidos pareça bom.

Se você tem citações com um increment_order_id reservado, então é possível que você ainda veja pedidos com o antigo increment_id.Depois que você começar a gerar novas cotações após a atualização, tudo ficará bem.

Normalmente, no meu ambiente de desenvolvimento, apenas defino todas as aspas como está_ativo = 0 depois de atualizar o increment_id apenas para começar do zero.

Para mais detalhes confira aqui: http://www.warpconduit.net/2012/04/18/how-to-change-the-order-increment-id-and-prefix-in-magento/

Eu realmente tento evitar consultas diretas em um banco de dados magento.Se possível, crie um módulo simples que tenha um script de instalação ou atualização que fará isso para você.Por exemplo, você pode usar o script abaixo para alterar o ID de incremento e o prefixo de incremento:

<?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();

Onde XXXXXXXXX é o ID de incremento com o qual você deseja começar e Y é o ID da loja para o qual deseja fazer isso.

Para alterar o prefixo real, use a consulta abaixo:

        $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'";

Onde X é o prefixo que você deseja usar e Y é o ID do sotre para o qual você deseja fazer isso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top