O Magento pode ser configurado de forma que várias visualizações de loja do mesmo site possam compartilhar o mesmoincrement_id
intervalo de números de pedidos ? E se sim, como?
Por exemplo, com uma configuração de armazenamento múltiplo como esta em core_store
:
store_id code website_id group_id
0 admin 0 0
1 alpha 1 1
2 bravo 2 2
3 charlie 2 2
Agora, uma nova visualização da loja delta
é adicionada:
store_id code website_id group_id
4 delta 1 1
Supondo que alpha
o último ID de incremento do pedido atualmente seja 1000123, como obter:
next sell order number
alpha 1000124
delta 1000125
delta 1000126
alpha 1000127
A mesma pergunta vale para várias visualizações da loja que compartilham o mesmo increment_id
intervalo de números da fatura e / ou compartilham o mesmo intervalo de increment_id
números do creditmemo .
O Magento suporta esse recurso pronto para uso?
configuration
magento-1
multistore
Jürgen Thelen
fonte
fonte
Respostas:
Eu imagino que isso seria bastante difícil. Os IDs de incremento são armazenados na
eav_entity_store
tabela e, surpreendentemente, cada loja possui sua própria entrada, que é atualizada quando um pedido (e cotação, fatura etc.) é criado. Para que todas as lojas usem o mesmo incrementador, seria necessário reescrever essa lógica para que ela usasse a mesma linha no banco de dados. O impacto que isso pode ter em outras áreas do site é outra coisa que precisaria ser considerada.fonte
Mage::getModel('eav/entity_type')->loadByCode('invoice')->setIncrementPerStore(false)->save()
Você pode substituir o modelo de incremento de pedidos, remessas, faturas e notas de crédito reescrevendo a classe "eav / entity_increment_numeric", fornecendo lógica personalizada em um modelo seu.
Dê uma olhada nas classes ancestrais (Mage_Eav_Model_Entity_Increment_Numeric e Mage_Eav_Model_Entity_Increment_Abstract) para entender como fornecer sua própria lógica.
Você pode diferenciar a lógica entre diferentes entidades, verificando o parâmetro $ entityTypeCode da função getNextId () que você substituirá.
Outra maneira (mais invasiva) é especificar um modelo de incremento diferente para cada tipo de entidade, substituindo (via script de instalação) o valor da coluna "increment_model" da tabela "eav_entity_type". Pessoalmente, prefiro a solução "reescrever" mencionada acima.
Preste atenção: os IDs de incremento têm uma restrição de exclusividade nas versões mais recentes do Magento, portanto você não pode armazenar o mesmo ID de incremento para duas entidades diferentes do mesmo tipo. Em outras palavras, você não pode ter duas faturas diferentes com o mesmo ID de incremento.
Espero que ajude.
fonte
getLastId()
emMage_Eav_Model_Entity_Increment_Numeric
ou em qualquer outra classe ou interface na hierarquia. Btw, esta deve ser a resposta aceita.Varien_Object
deMage_Eav_Model_Entity_Type
Ao cavar mais fundo, percebi que isso
eav_entity_type.increment_per_store
pode ser útil.Isto é. Mas apenas no caso, quando você deseja que todas as visualizações da loja (globalmente, não importa em qual site elas estejam definidas) da sua instalação do Magento compartilhem o mesmo
increment_id
intervalo de números de pedidos .Isso não resolve meu problema específico, mas talvez seja útil para outros, então aqui vamos nós:
Para ativar o compartilhamento global de seus números de pedidos, defina
eav_entity_type.increment_per_store
a entidade do pedido como0
,Isso leva ao
Mage_Eav_Model_Entity_Type::fetchNewIncrementId()
usostore_id = 0
ao carregar oeav_entity_store
registro da entidade do pedido, independentemente da exibição da loja à qual realmente pertence.Se esse registro não existir, o Magento criará um, usando
store_id
eincrement_prefix
de0
.Isso deve funcionar para qualquer tipo de entidade usando o
eav/entity_increment_numeric
modelo, comoorder
,invoice
,shipment
ecreditmemo
.Esteja ciente, porém, de que ainda não consegui encontrar nenhuma documentação oficial
increment_per_store
. E que não há opção no back-end do Magento, permitindo que você configure isso.Isso pode ou não significar que não se pensa que seja usado oficialmente.
Use por sua conta e risco. Se suas mudanças causam estragos, não me culpe. Você foi avisado ^^
fonte
Não é suportado pronto para uso. Eu também queria fazer isso uma vez para ter uma segunda visualização de armazenamento para um teste A / B compartilhar o mesmo increment_id da loja original.
Tentei combinar esses dois números da maneira mais simples quando
checkout_submit_all_after
é demitido, mas me senti muito desconfortável com isso, então deixei cair. Eu acho que com mais visualizações de loja e muito tráfego, isso pode resultar em uma verdadeira bagunça, então você precisa se aprofundar na lógica do Magentos.fonte
Solução:
Ter um intervalo de pedidos / fatura / creditmemo diferente etc ... é bastante bom para diferentes países, o que geralmente significa em nível de grupo de lojas.
Mas ter intervalos de números diferentes no nível da visualização da loja é uma coisa ruim se você usar as visualizações da loja para idiomas diferentes, o que pode ser feito em 90% de todos os casos.
Felizmente, não é tão difícil como proposto neste tópico:
O que vamos fazer é buscar o ID de visualização de loja padrão em vez de usar o ID de visualização de loja com o qual o método é chamado . Estamos fazendo isso resolvendo o grupo de lojas da visualização atual da loja e buscando seu ID de visualização padrão. Então, cada visualização de loja de um grupo de lojas específico usa o mesmo formato de intervalo numérico (o da visualização de loja padrão).
Crie esta classe:
Adicione esta reescrita ao config.xml do seu módulo:
Se você tem um jeito melhor, sem precisar reescrever, espalhe o conhecimento. Diverta-se. Não corte o núcleo.
fonte