Totali Middleware – Integração Magazord

Totali Middleware – Versão 6.1G | Integração com e-commerce Magazord.

Magazord é uma plataforma de E-commerce que oferece suporte e funcionalidades em todos os aspectos que envolvem uma operação de comércio online e que é utilizado por nosso cliente Pontão Calçados.

Configuração

Totali Config

No cadastro de filiais, selecione a filial que será usada no E-Commerce e marque a opção [Exportar para Web?]

 

Caso seja utilizado algum Subestoque, deverá ser marcada a opção [Exportar para Web].

WSMiddleware

Nas abas [ Integração ], [ Magazord ], marcar [ Ativada ] e informar [ Tempo (em minutos) ] (de quanto em quanto tempo será executada a integração).

Acesse a aba [ Configurações Empresa ], edite a empresa que fará a integração com Magazord.

Nas abas [ 7 – Integração ], [ Magazord ] informe todos os campos.

 

 

Nas abas [ Integração ], [ Magazord ], marque [ Ativada ] e informe [ Tempo (em minutos)]. Esse será o intervalo de tempo em que será executada a integração.

 

Organograma do fluxo completo da integração.

 

API Magazord

A API Magazord trata as derivações em 4 itens distintos:

1 – COR EXIBE PAI | 2 – TAMANHO |  3 – ÚNICO | 4 – COR EXIBE FILHOS

 

Commerce

No Commerce, tratamos esses valores como Divisão e Subdivisão e para adequação nos relacionamentos com as informações da API e será necessário incluir esses relacionamentos na tabela integracaoChave da Guarda de forma manual.

Script para inclusão e criação dos relacionamentos:

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:31:58.662’, ‘2022-11-14 14:30:07.139’, ‘F’, 6, ‘derivacoes’, ‘4’, ‘derivacao’, ‘COR EXIBE FILHOS’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:31:59.489’, ‘2022-11-14 14:30:08.600’, ‘F’, 6, ‘derivacoes’, ‘2’, ‘derivacao’, ‘TAMANHO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:31:59.240’, ‘2022-11-11 17:56:09.549’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘ÚNICO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-11 17:56:12.161’, ‘F’, 6, ‘derivacoes’, ‘1’, ‘derivacao’, ‘COR EXIBE PAI’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-16 16:50:21.395’, ‘2022-11-16 16:50:21.395’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘SUB DIVISAO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-14 10:16:36.210’, ‘2022-11-14 10:16:36.210’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘DIVISAO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:11.586’, ‘F’, 6, ‘derivacoes’, ‘1’, ‘derivacao’, ‘1’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘1’, ‘derivacao’, ‘COR’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘2’, ‘derivacao’, ‘2’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:31:58.662’, ‘2022-11-14 14:30:07.139’, ‘F’, 6, ‘derivacoes’, ‘4’, ‘derivacao’, ‘4’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-16 16:50:22.803’, ‘2022-11-16 16:50:22.803’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘SEMENTE’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-16 16:50:22.793’, ‘2022-11-16 16:50:22.793’, ‘F’, 6, ‘derivacoes’, ‘2’, ‘derivacao’, ’41/42′);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘DIVISAO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘SUB DIVISAO’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘SEMENTE’);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘2’, ‘derivacao’, ’41/42′);

INSERT INTO public.integracaochave (intchv_cnpj, intchv_datinc, intchv_atu_em, intchv_export, intchv_tipint, intchv_tabint, intchv_chvint, intchv_tabcom, intchv_chvcom) VALUES(‘05236045000183’, ‘2022-11-11 17:32:01.500’, ‘2022-11-14 14:30:08.251’, ‘F’, 6, ‘derivacoes’, ‘3’, ‘derivacao’, ‘0’);

 

O Projeto

Neste projeto não serão importados os pedidos, mas as vendas, ou seja, as NF-e através do arquivo XML  e também os clientes, porque, obrigatoriamente, a Magazord exige que a emissão da nota seja pelo seu sistema.

Conforme análise, foi criado um processo de integração contínua no qual será possível realizar a configuração do tempo para integração, onde o processo irá executar conforme o tempo definido e irá exportar ou importar os documentos alterados ou incluídos no período.

Ex.: Supondo que a última execução foi as 01/08/2022 00:00:00, e agora seja 03/08/2022 18:00:00 o sistema deverá pegar as mudanças de cadastros que ocorreram nesse intervalo e realizar o processo de envio ao e-commerce, assim como deverá pegar as notas emitidas pelo e-commerce nesse intervalo e realizar a importação. Nesse sentido foi criado a rotina de sincronização conforme o tempo configurado.

Também foi criado a integração de documentos e envio dos cadastros em rotinas em paralelo pois a integração de cadastros pode levar 2 horas e não podemos ficar esse tempo sem importar as notas geradas pelo e-commerce, processo similar a sincronização do Totali Mobi.

Considerando o escopo, o projeto está dividido em duas partes:

  1. Exportação dos Cadastros
  2. Importação das Notas Fiscais

 

EXPORTAÇÃO DOS CADASTROS

Para integração dos produtos, foi necessário criar a integração dos seguintes dados:

 

CATEGORIAS

Pode ser selecionada de acordo com uma tabela específica para esta finalidade junto ao cliente, tendo como origem obrigatória uma das seguintes tabelas: TD_DEP, TD_CLI1, TD_CLI2, TD_CLI3 ou TD_CLI4.

 

MARCAS

Tem como origem das informações, a tabela TT_MAR do Commerce

 

DERIVAÇÕES

 Tem como origem das informações, as 4 derivações existentes na API Magazord (conforme INSERT disponibilizado acima)

 

ITENS VINCULADOS ÀS DERIVAÇÕES > ItemDerivacao

Tem como origem das informações, as tabelas TT_DIV e TT_SUB do Commerce com relacionamento para TD_DIV e TD_SUB respectivamente, das quais com base no relacionamento especificado no INSERT do item 2 serão retornados os itens associados a COR, TAMANHO, ÚNICO de acordo com seus respectivos registros de Divisão e Subdivisão.

 

ITENS DA DIVISÃO

ITENS DA SUBDIVISÃO

Esses itens deverão ser associados de forma automática ao executar o serviço do middleware onde conforme os registros são retornados da API Magazord, os mesmos terão suas respectivas associações com um identificador chave na tabela integracaoChave da Guarda.

Exemplo:

PRODUTO

Tem como origem das informações, a tabela TT_PRO com relacionamento com as tabelas TT_MAR, TD_DEP, TD_CL1, TD_CL2, TD_CL3, TD_CL4, TD_MED, TD_GRA, TD_DIV E TD_SUB

 

O produto é enviado a API conforme o seguinte modelo:

{

  “codigo”: “00154604A”,

  “nome”: “TENIS BEIRA RIO”,

  “marca”: 7782,

  “derivacoes”: [1,2],

  “categorias”: [44],

  “unidadeMedida”: “PC”,

  “origemFiscal”: 0,

  “produtoLoja”: [{“titulo”:””,”loja”:1}],

  “modelo”: “TENIS BEIRA RIO 4174419 VERMELHO”,

  “acompanha”: “”,

  “palavraChave”: “TENIS”,

  “peso”: 0,

  “altura”: 0,

  “largura”: 0,

  “comprimento”: 0,

  “ativo”: true,

  “ncm”: “64029990”,

  “cest”: “”

}

 

É obrigatório o envio das seguintes informações:

codigo       = [PRO.REFBAS];

nome         = [PRO.DESMAT];

marca        = [MAR.CODMAR];

origemFiscal = [PRO.ORIPRO];

derivacoes   = [1], [2], [3] ou [1,2];

categorias   = [CODTAB]; Tabela vinculada em Busca Categoria Em WSMiddleware

produtoLoja  = [IDLOJA]; De acordo com informado em ID Loja WSMiddleware

 

Importante: Marcas e Categorias deverão ser enviadas antes do envio do Produto.

 

GRADE

produtoDerivacao > Magazord

Tem como origem das informações, a tabela TT_GRA com relacionamento com as tabelas TT_PRO, TT_EAN, TD_GRA, TD_DIV, TD_SUB, TT_DIV e TT_SUB. Nesse processo, enviamos todos os itens da grade relacionados com os produtos enviados anteriormente, assim como as derivações que pertence a ele.

Exemplo:

Para o produto enviado no exemplo acima código: 00154604A

Enviaremos todos os itens da grade relacionados a ele:

 

O item da grade é enviado a API conforme o seguinte modelo:

{

    “codigoProduto”: “00154604A”,

    “codigo”: “08393487”,

    “nome”: “TENIS BEIRA RIO”,

    “peso”: 0,

    “altura”: 0,

    “largura”: 0,

    “comprimento”: 0,

    “ativo”: false,

    “derivacoes”: [{

            “derivacao”: 2,

            “valor”: “37”

        }, {

            “derivacao”: 1,

            “valor”: “VERMELHO”

        }

    ],

    “lojas”: [1]

}

 

É obrigatório o envio das seguintes informações:

codigoProduto = [PRO.REFBAS];

codigo        = [GRA.REFPRO];

nome          = [PRO.DESMAT];

derivacoes    = [1], [2], [3] ou [1,2];

produtoLoja   = [IDLOJA]; De acordo com informado em ID Loja WSMiddleware

 

Como no envio do produto informamos que possui “derivacoes”: [1,2], no envio dos itens da grade informaremos quais são as respectivas derivações, nesse caso acima:  

 

    “derivacoes”: [{

            “derivacao”: 2,

            “valor”: “37”

        }, {

            “derivacao”: 1,

            “valor”: “VERMELHO”

        }

    ],

1 = COR e 2 = TAMANHO

 

LISTA DE PREÇOS

Tem como origem das informações a tabela TT_PRE com relacionamento com as tabelas TT_GRA e TT_CFG.

Nesse processo foi considerado a tabela de preço padrão configurada para operação de venda em TT_CFG.FILPRE e TT_CFG.CODPRE e o envio do preço é realizado para cada item da grade dentro da filial.

 

É obrigatório o envio das seguintes informações:

produto     = [GRA.REFPRO];

tabelaPreco = [PRE.CODPRE];

precoVenda  = [PRE.PRECOV];     

   

ESTOQUE

Tem como origem das informações a tabela TT_SAL com relacionamento com as tabelas TD_FIL, TD_MUL, TD_SUB, TT_SUB, TV_IPR, TT_GRA, TT_PRO e TT_CFG.

Nesse processo carregamos o saldo conforme TT_SAL, o qual faz o filtro pela filial e sub-estoque que será exportado para API, verifica-se a diferença para o estoque atual da API e gera a requisição para acerto de estoque conforme saldo atual no sistema.

 

É obrigatório o envio das seguintes informações:

produto      = [PRO_REFERENCIA];

deposito     = [1]; Não é devolvido o código do depósito pela API então enviamos 1

quantidade   = [PRO_SALDO];

tipo         = [1]; Físico  (2 – Previsto, 3 – Reservado, 4 – Virtual)

tipoOperacao = [0]; Ajuste  (1 – Entrada, 2 – Saída)

 

 IMPORTAÇÃO DAS NOTAS FISCAIS

 Nesse processo, consultamos o método listPedido que retornará uma lista de pedidos filtrando pelo período de alteração do status  “dataHoraUltimaAlteracaoSituacao[gte]” e “situacao in (6-Nota Fiscal Emitida, 7-Transporte, 8-Entregue, 20-Devolvido Estoque (Dep. 1), 21-Devolvido Estoque (Outros Dep.), 28-Nota Fiscal Denegada)”.

Com o retorno dos dados, realizamos uma nova consulta ao método getPedido informando o pedidoCodigo que por sua vez retornará o ID referente a sua respectiva Nota Fiscal.

Novamente consultamos um novo método getNotaFiscalById – Consulta Nota Fiscal pelo ID que enfim retorna o arquivo XML para que possamos realizar a sua importação para a base do Middleware e do Commerce.

Nesse ponto usamos o método já existente no middleware para realizar as importações, persistência dos dados e finalmente a gravação das informações da NF-e através do arquivo XML na base de dados do cliente.