Onde está o botão e quando se vê
As fichas de envio abrem-se a partir do menu Temu › Orders & Fulfillment › Fulfillment. Nesse ecrã está o botão Execute, que aparece sempre na ficha, sem condição na vista, e existe no Odoo 17, 18 e 19. O que se segue sobre o seu funcionamento corresponde ao código publicado para o Odoo 19.
O botão lança a operação que a ficha tem associada através da instância do Temu que lhe esteja atribuída. Primeiro verifica se existe instância e se o pedido pode ser construído; depois escreve estados e guarda o que o Temu responde.


Execute.
O que acontece sem carregar em nada
Parte do trabalho deste botão também acontece sem o carregar. O módulo amplia a gravação de uma ficha de guia e o botão padrão de validar da guia, e a partir daí pode reconciliar um envio que o Temu já dava como enviado. Fá-lo apenas se se cumprir tudo o seguinte:
- Existe ficha de envio, encomenda do Temu e referência de seguimento.
- O último erro da ficha de envio indica que a encomenda já foi enviada: tem o código
120012004, ou um texto do Temu que diz que a encomenda já foi enviada e que a alteração não é efetiva para uma encomenda enviada. - A encomenda tem número de encomenda pai do Temu (ou o identificador da encomenda do Temu) e número de ordem.
Então consulta o Temu sobre o estado do envio próprio. Se a resposta contiver o número de seguimento, a ficha passa a Done, o último erro é limpo, aplica-se o mesmo resumo do resultado que o botão usa, a guia fica marcada como sincronizada e deixa-se uma nota nela. Se a consulta falhar ou o seguimento não aparecer, nada muda.
Para lançar a operação à mão a partir da ficha, resta o botão Execute.
O caso: a Hogar Norte lança uma operação
Exemplo Caso ilustrativo: a empresa e os seus dados são inventados para explicar o fluxo.
A Hogar Norte é uma loja inventada que vende no Temu e gere os seus envios a partir do Odoo. Uma pessoa da equipa abre Temu › Orders & Fulfillment › Fulfillment e entra numa ficha nova. Vejamos o que acontece em cada tentativa.
Primeira tentativa: sem instância
Carrega em Execute com o campo Instance vazio (vê-se na ficha e na lista de Fulfillment). O método verifica-o logo à partida e pára com Temu instance is required.. Não escreveu nenhum estado nem guardou qualquer pedido: a ficha fica como estava.
Segunda tentativa: falta um dado
A ficha leva uma consulta de empresas de logística. Com a instância preenchida, o módulo tenta construir o pedido e pára com regionId is required for logistics companies query.. Continua sem se ter escrito nada. A mensagem diz que dado falta: completa-o e carrega de novo.
Terceira tentativa: corre bem
Agora o método segue esta ordem:
- Constrói o pedido com os dados da ficha. Se o campo
Request Override Json(separadorPayload Override) estiver preenchido e for um objeto, usa esse conteúdo tal qual como pedido. - Escreve o estado
Running, guarda o pedido construído e a hora do pedido, e limpa o último erro. - Chama a instância do Temu com a operação que corresponde à ficha.
- Se o Temu responder bem, prepara um resumo do resultado: se a resposta traz números de pacote, guarda-os ordenados e sem repetições, e se a ficha não tinha número de pacote, fica com o primeiro; se traz avisos, guarda-os um por linha; se traz uma reserva de recolha, guarda o seu número.
- Escreve de uma só vez
Done, a resposta, o resultado, esse resumo e a hora de conclusão, e deixa o último erro vazio.
O resumo calcula-se antes de escrever Done. Se o resumo falhar, Done não chega a ser escrito: o método trata-o como qualquer outro erro.
Quando algo falha depois de Running
Se a operação ou o resumo falharem depois de escrito Running, o código escreve Failed com a hora de conclusão e o texto do erro, e volta a lançar o erro, que é o aviso que a pessoa vê ao carregar. Verifica o estado na ficha em vez de dar por certo qual ficou.
Mensagens que podem travar o botão
Ao carregar em Execute, estas mensagens surgem quando o módulo prepara o pedido, antes de escrever Running. São algumas das que pode dar:
Temu instance is required.: a ficha não tem instância.Request Override JSON must be an object/dict payload.: o conteúdo do campoRequest Override Jsonda ficha não é um objeto.Provide orderSnList or payload lines for shipping services query.: na consulta de serviços de envio, não há nem lista de encomendas nem linhas.regionId is required for ship logistics type query.: falta esse dado na consulta de tipos de logística de envio.regionId is required for logistics companies query.: falta esse dado na consulta de empresas de logística.packageSnList is required for buy shipping result query.: falta a lista de pacotes na consulta do resultado do envio comprado.packageSnList is required for shipping document query.: falta a lista de pacotes na consulta de documentos de envio.parentOrderSn and orderSn are required for self shipment status query.: faltam esses dados na consulta de estado do envio próprio.mainPackageSn (package_sn) is required for shipment sub confirm.: falta o pacote principal ao confirmar subpacotes.At least one sub package request is required.: falta pelo menos um pedido de subpacote.pickupStartTime and pickupEndTime are required for pickup reservation creation.: faltam as horas da reserva de recolha.packageSnList is required for pickup reservation creation.: falta a lista de pacotes ao criar a reserva de recolha.packageSnList is required for pickup reservation result query.: falta a lista de pacotes ao consultar o resultado da reserva.reservationSn is required for pickup reservation cancellation.: falta o número de reserva ao cancelá-la.packageSn is required for tracking info query.: falta o pacote na consulta de seguimento.Set Request Override JSON for cooperative warehouse operation '…'.: em operações de armazém cooperativo, a mensagem pede que se preencha o campoRequest Override Json.
O que aprender com o caso
- A ordem é fixa: primeiro a instância, depois o pedido, a seguir os estados.
- As mensagens acima param a ação antes de escrever o que quer que seja: resolvem-se completando o que pedem.
Doneescreve-se de uma só vez, juntamente com a resposta, o resultado e o resumo; se o resumo falhar, a ficha passa aFailed.- O resumo do resultado é o mesmo que usa a reconciliação automática da guia.
- Um erro posterior a
Runningé relançado e deixa a ficha emFailed; depois de carregar, verifica o estado.
Como ajuda a FlexigoTech
O Temu Connector for Odoo é de pagamento único por versão e precisa da subscrição do FlexigoTech Cloud (plano Conector: 49 €/mês ou 490 €/ano, sem IVA). Está publicado para o Odoo 17, 18, 19 e 20. A ligação passa pelo FlexigoTech Cloud, que guarda as credenciais cifradas e avisa por e-mail se a sincronização falhar. Podes ver o módulo na sua página ou na ficha do Odoo Apps.
Se estás a implementar o Odoo e precisas de montar a logística com o Temu ou uma integração à medida, a FlexigoTech implementa o Odoo 17, 18, 19 e 20 e desenvolve conectores e integrações.
Continue a ler
Verificado no código do conector (versão 19.0) e nas fontes indicadas
Fontes
- Código do módulo: flexigobe_temu_connector 19.0 (455b3f0f): views/temu_fulfillment_views.xml
- Código do módulo: flexigobe_temu_connector 19.0 (455b3f0f): models/temu_fulfillment.py
- Código do módulo: flexigobe_temu_connector 19.0 (455b3f0f): models/stock_picking.py
- apps.odoo.com/apps/modules/19.0/flexigobe_temu_connector
- flexigotech.com/precios.html
- flexigotech.com/en/services.html
