• Resolved impressao3d

    (@impressao3d)


    Bom dia equipa Moloni, precisamos de uma ajuda a tentar descobrir o que se está a passar,

    Nós temos o plugin Moloni a gerar automaticamente os documentos quando o estado de uma encomenda é passado para “complete”.
    Utilizamos também o hook moloni_after_insert_document para automatizar alguns processos, nomeadamente guardar o código AT na encomenda Woocommerce também quando o seu estado é alterado para “Complete”.
    Conseguimos utilizar esta hook com sucesso sempre que o estado da encomenda se passa para “Completed” manualmente, mas caso este estado seja actualizado por REST API do woocommerce, parece dar a entender que a hook moloni_after_insert_document não corre.

    A questão é, caso o estado de uma encomenda seja atualizado por REST API a hook moloni_after_insert_document corre?
    Caso não corra, é possível fazer com que aconteça para que seja possível automatizarmos os nossos processos?

    Obrigado


Viewing 7 replies - 1 through 7 (of 7 total)
  • 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?

    Thread Starter impressao3d

    (@impressao3d)

    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.

Viewing 7 replies - 1 through 7 (of 7 total)

The topic ‘A hook moloni_after_insert_document corre após trigger por REST API?’ is closed to new replies.