Atualize Download Links dos Pedidos

Submitted by Eric on dom, 12/16/2018 - 20:38
Imagem
digital module

Hoje eu trago uma forma de "consertar" algo que pode ser bem chatinho para lojas que têm bastante produtos digitais, especialmente se você trabalho com pré vendas.
Se você criar um produto digital para pré venda (é necessário um módulo para isso) e por acaso ainda não tenha o link ou arquivo que será usado no produto, mas você precisa criar o product e liberar para seus clientes comprarem (pré venda). Provavelmente você usará um link como "http://DEFINIR// ou somente escrever "DEFINIR" ou fazer o upload de um arquivo que não é o correto já que os clientes não poderão baixar. Isso também se aplica a backorders ou pedidos normais que por algum motivo você quer que os clientes possam comprar, mas o link/arquivo não estará disponível até certa data.

Também se aplica caso você queira atualizar um link ou arquivo que possa trocar e você precisa que todos os seus clientes tenham o novo link/arquivo atualizados. Infelizmente o Magento não atualiza os pedidos com os novos links/arquivos e isso é BEM chato quando você tem vários pedidos com os exemplos dados. Para resolver o problema eu resolvi criar um módulo que faz justamente isso. Quando você atualiza o link/arquivo do produto, ele atualiza TODOS os pedidos com aquele produto.

Esta é a tabela no banco de dados responsável pelos items comprados com links/arquivos: downloadable_link_purchased_item
Eu fiz um pedido teste em uma loja no meu ambiente local e eu verifiquei o link_url desta tabela e podemos ver o link do pedido:

SELECT link_url FROM downloadable_link_purchased_item;
+----------------------+
| link_url             |
+----------------------+
| http://tbd/somefile.zip |
+----------------------+
1 row in set (0.00 sec)

E também podemos confirmar que o link é do produto:

SELECT product_id, sku, link_url
    -> FROM downloadable_link
    -> INNER JOIN catalog_product_entity
    -> WHERE entity_id = 3;
+------------+-----------------+----------------------+
| product_id | sku             | link_url             |
+------------+-----------------+----------------------+
|          3 | digital_product | http://tbd/somefile.zip |
+------------+-----------------+----------------------+

Também podemos confirmar que há um pedido com esse produto:

SELECT c.product_id, b.sku, c.link_url, b.order_id
    -> FROM downloadable_link c
    -> INNER JOIN catalog_product_entity a
    -> INNER JOIN sales_flat_order_item b
    -> WHERE entity_id = 3;
+------------+-----------------+----------------------+----------+
| product_id | sku             | link_url             | order_id |
+------------+-----------------+----------------------+----------+
|          3 | digital_product | http://tbd/somefile.zip |        1 |
+------------+-----------------+----------------------+----------+

Agora eu irei atualizar o link do produto de somefile.zip para myrealfile.zip no admin do Magento e iremos ver que nada acontece para o pedido na tabela downloadable_link_purchased_item.
Primeiro vamos verificar o downloadable_link para ter certeza que o link foi atualizado:

SELECT link_url FROM downloadable_link WHERE product_id = 3;
+---------------------------+
| link_url                  |
+---------------------------+
| http://tbd/myrealfile.zip |
+---------------------------+

Ok, então o produto tem o novo link, so the product has the new link. Agora vamos ver os pedidos:

SELECT item_id, link_url FROM downloadable_link_purchased_item;
+---------+-------------------------+
| item_id | link_url                |
+---------+-------------------------+
|       1 | http://tbd/somefile.zip |
+---------+-------------------------+

Bom, parece que ainda está com o link antigo, mas novos pedidos vão utilizar myrealfile.zip. Mas seria ótimo se ao atualizar o link ou arquivo do produto também atualizasse os pedidos. E é justamente por isso que criei o módulo MageBR_UpdateLinksPurchased e é totalmente gratuito para utilizar. Você pode fazer o download da versão mais nova aqui: here: https://github.com/CajuCLC/MageBR_UpdateLinksPurchased/releases/latest
Ou se deseja contribuir para deixar o módulo ainda melhor: https://github.com/CajuCLC/MageBR_UpdateLinksPurchased

Após instalar o módulo e atualizar os caches, vamos modificar um produto digital novamente, agora iremos mudar o link de myrealfile.zip para updatedlink.zip.
Vamos conferir se o produto tem o novo link:

SELECT link_url FROM downloadable_link WHERE product_id = 3;
+----------------------------+
| link_url                   |
+----------------------------+
| http://tbd/updatedlink.zip |
+----------------------------+

E o pedido também dever ter o novo link:

SELECT item_id, link_url FROM downloadable_link_purchased_item;
+---------+----------------------------+
| item_id | link_url                   |
+---------+----------------------------+
|       1 | http://tbd/updatedlink.zip |
+---------+----------------------------+

Pronto, todos os pedidos irão ter o novo link ou arquivo. MAS ainda não terminamos. Se você receber um erro ao tentar salvar o produto dizendo que order id não pode ser NULL, significa que você tem pedidos que foram deletados e não cancelados. Quando você deleta um pedido acaba deixando várias outras coisas sem estar relacionada a um pedido (NULL). Você pode checar rodando as queries abaixo:

SELECT * FROM downloadable_link_purchased WHERE order_id IS NULL;
SELECT * FROM downloadable_link_purchased_item WHERE order_item_id IS NULL;

Se qualquer query retornou algo, então você precisa remover elas. Na maioria das vezes não há problema, mas por favor criei um backup e tenha certeza que você pode deletar. Não nos responsabilizamos por qualquer problema.

DELETE FROM downloadable_link_purchased_item WHERE order_item_id IS NULL;
DELETE FROM downloadable_link_purchased WHERE order_id IS NULL;

E chegamos ao final, tudo estará funcionando como deve agora.

Caso tenha gostado deste tutorial e módulo, por favor compartilhe.


FacebookTwitterGoogle+Share

Comentar

HTML restrito

  • Tags HTML permitidas: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Quebras de linhas e parágrafos são gerados automaticamente.
  • Web page addresses and email addresses turn into links automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.