Plugin Author
Moloni
(@molonidevteam)
Boa tarde,
Teoricamente o hook corre sempre que um documento é inserido, com exceção se ocorrer algum erro durante a criação do documento. Para conseguirmos identificar o problema pode-nos indicar onde registam a vossa função ao nosso hook? Foi criado algum log no plugin?
@impressao3d podem partilhar o código que estão a usar para obter o Código AT?
Olá Marco, e malta da Moloni, obrigado pela ajuda.
Entretanto já conseguimos resolver o problema:
Eu inicialmente no código estava a usar o $order_id como se fosse o $order_id standard que é obtido pelo woocommerce, o que funcionava sempre ao fechar encomendas directamente no woocommerce.
// Get the order ID
$order = wc_get_order( $order_id );
// Get document ID from the order
$documentid = get_post_meta($order->id, '_moloni_sent', true);
(etc)
Mas ao fechar encomendas pelo API este $order_id standard do woocommerce já não estava disponível e o $order_id disponível pelo Moloni disponibilizava a info de forma diferente sendo a order_id como
“your_reference”
$your_reference = $order_id->your_reference ?? '';
peço desculpa se não descrevo o código da forma mais tecnicamente correcta, espero que tenha sido claro, deixo aqui o código e espero que possa ser útil para mais alguém:
https://github.com/jcmatoskx/MyRandomSnippets/blob/main/Moloni-Save-Codigo-AT-Number
-
This reply was modified 2 years, 1 month ago by
impressao3d.
-
This reply was modified 2 years, 1 month ago by
impressao3d.
Obrigado @impressao3d 💪
O que action moloni_after_insert_document passa para a nossa função é a instância da class \Moloni\Controllers\Documents e não o $order_id.
Nessa instância é suposto termos a propriedade document com a resposta já dada pelo Moloni depois de criado o documento (porque eles já fazem uma chamada à documents/getOne), e que deverá ter a entrada transport_code, pelo que algo assim deveria ser suficiente: https://gist.github.com/webdados/5f8af0804228d48513b2be150d979b1a
Agora a dúvida é se já vem preenchido ou não. @moloni, podem esclarecer?
Ou seja, não vejo necessidade de voltar a fazer uma chamada à API para obter dados.
Estou a aguardar ter a conta de testes activa e com séries registadas na AT para fazer testes.
Plugin Author
Moloni
(@molonidevteam)
Bom dia,
A criação de documentos é feita a dois passos. Primeiro geramos o documento em rascunho e logo a seguir chamamos o endpoint documents/getOne, seguido da action moloni_after_insert_document. Este passo serve para fazermos verificações de valores antes de fecharmos efetivamente o documento.
Portanto, esta action vai buscar a informação do documento ainda numa altura em que ele está em rascunho.
Para o que pretende, deverá usar a action moloni_after_close_document que corre já depois do documento ser fechado e de ter o código de transporte à AT.
Neste ponto, deverá fazer uma nova chamada ao endpoint documents/getOne para obter a informação do documento, agora, já fechado e com o código de transporte no parâmetro transport_code.
OK, então fazer a chamada no nosso código é sempre obrigatória porque vocês antes da action moloni_after_close_document não fazem nenhum documents/getOne.
É garantido, pelo menos na maioria das vezes, que quando fecham o documento temos logo o Código AT disponível?
Plugin Author
Moloni
(@molonidevteam)
Na maioria das vezes, sim, exceto algumas falhas que podem existir normalmente causadas pelos próprios serviços da AT que podem falhar ao fornecer o código de transporte.