TOTVS CRM | SFA - 12.1.2501
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
postprodutosub(text)
Parameters
Name
Type
Mode
json_origem
text
IN
Definition
declare json_produto json; json_produto_embalagem json; json_produto_filial json; json_produto_grupoproduto json; json_produto_tipoproduto json; produto_id integer; produto_embalagem_id integer; produto_filial_id integer; produto_grupoproduto_id integer; produto_tipoproduto_id integer; produto_external_id text; produto_embalagem_external_id text; produto_filial_external_id text; produto_grupoproduto_external_id text; produto_tipoproduto_external_id text; produto_embalagem_origem RECORD; produto_filial_origem RECORD; produto_grupoproduto_origem RECORD; produto_tipoproduto_origem RECORD; begin --PRODUTO --PRODUTO --PRODUTO --PRODUTO --Aqui retira a tag json e também é necessário retirar as chaves que sobram --pois o metodo json_extract_path_textxt não entende e não consegue extrair corretamente as subtags depois json_origem = CAST(json_extract_path_text(CAST(json_origem AS json),'json') AS TEXT); json_origem = substr(json_origem,2,length(json_origem )); json_origem = substr(json_origem,0,length(json_origem)); json_produto = cast(json_origem AS json); select codigoerp into produto_external_id from produto where codigoerp = json_extract_path_text(json_produto,'externalid'); if produto_external_id is null then select nextval('seqpkproduto')into produto_id; insert into produto(idproduto, descricao, codigoadicional, codigodebarra, idnativo, idunidademedidapadrao, idunidademedidavenda, pesomaximo, pesomedio, pesominimo, precocusto, quantidadeapresentacao, idnservico, codigoerp) values( produto_id, json_extract_path_text(json_produto,'descricao'), json_extract_path_text(json_produto,'codigoadicional'), json_extract_path_text(json_produto,'codigodebarra'), cast(json_extract_path_text(json_produto,'idnativo') as bigint), cast(json_extract_path_text(json_produto,'idunidademedidapadrao') as bigint), cast(json_extract_path_text(json_produto,'idunidademedidavenda') as bigint), cast(json_extract_path_text(json_produto,'pesomaximo') as numeric), cast(json_extract_path_text(json_produto,'pesomedio') as numeric), cast(json_extract_path_text(json_produto,'pesominimo') as numeric), cast(json_extract_path_text(json_produto,'precocusto') as numeric), cast(json_extract_path_text(json_produto,'quantidadeapresentacao') as numeric), cast(json_extract_path_text(json_produto,'idnservico') as bigint), json_extract_path_text(json_produto,'externalid') ); --EMBALAGENS DO PRODUTO --EMBALAGENS DO PRODUTO --EMBALAGENS DO PRODUTO --EMBALAGENS DO PRODUTO json_produto_embalagem = json_extract_path_text(json_produto,'ProdutoEmbalagem'); FOR produto_embalagem_origem IN SELECT json_extract_path_text(value,'idembalagem') AS idembalagem, json_extract_path_text(value,'fatorembalagem') AS fatorembalagem, json_extract_path_text(value,'idnexibeembalagem') AS idnexibeembalagem, json_extract_path_text(value,'idnpadrao') AS idnpadrao, json_extract_path_text(value,'idnativo') AS idnativo, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_produto_embalagem) LOOP -- Consulta Embalagens do Produto no SFA select codigoerp into produto_embalagem_external_id from produtoembalagem where codigoerp = produto_embalagem_origem.externalid; if produto_embalagem_external_id is null then -- Embalagens do Produto novos são inseridos. select nextval('seqpkprodutoembalagem')into produto_embalagem_id; insert into produtoembalagem (idprodutoembalagem, idembalagem, fatorembalagem, idnexibeembalagem, idnpadrao, idnativo, codigoerp, idproduto) values( produto_embalagem_id, cast(produto_embalagem_origem.idembalagem as bigint), cast(produto_embalagem_origem.fatorembalagem as numeric), cast(produto_embalagem_origem.idnexibeembalagem as bigint), cast(produto_embalagem_origem.idnpadrao as bigint), cast(produto_embalagem_origem.idnativo as bigint), produto_embalagem_origem.externalid, produto_id ); end if; END LOOP; -- FIM EMBALAGENS DO PRODUTO -- FIM EMBALAGENS DO PRODUTO -- FIM EMBALAGENS DO PRODUTO -- FIM EMBALAGENS DO PRODUTO --FILIAIS DO PRODUTO --FILIAIS DO PRODUTO --FILIAIS DO PRODUTO --FILIAIS DO PRODUTO json_produto_filial = json_extract_path_text(json_produto,'ProdutoFilial'); FOR produto_filial_origem IN SELECT json_extract_path_text(value,'idfiliallocal') AS idfiliallocal, json_extract_path_text(value,'idnpadrao') AS idnpadrao, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_produto_filial) LOOP -- Consulta Filiais do Produto no SFA select codigoerp into produto_filial_external_id from produtofilial where codigoerp = produto_filial_origem.externalid; if produto_filial_external_id is null then -- Filiais do Produto novos são inseridos. select nextval('seqpkprodutofilial')into produto_filial_id; insert into produtofilial (idprodutofilial, idlocalfilial, idnpadrao, codigoerp, idproduto) values( produto_filial_id, cast(produto_filial_origem.idfiliallocal as bigint), cast(produto_filial_origem.idnpadrao as bigint), produto_filial_origem.externalid, produto_id ); end if; END LOOP; -- FIM FILIAIS DO PRODUTO -- FIM FILIAIS DO PRODUTO -- FIM FILIAIS DO PRODUTO -- FIM FILIAIS DO PRODUTO --GRUPOS DO PRODUTO --GRUPOS DO PRODUTO --GRUPOS DO PRODUTO --GRUPOS DO PRODUTO json_produto_grupoproduto = json_extract_path_text(json_produto,'ProdutoGrupoProduto'); FOR produto_grupoproduto_origem IN SELECT json_extract_path_text(value,'idgrupoproduto') AS idgrupoproduto, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_produto_grupoproduto) LOOP -- Consulta grupos do Produto no SFA select codigoerp into produto_grupoproduto_external_id from produtogrupoproduto where codigoerp = produto_grupoproduto_origem.externalid; if produto_grupoproduto_external_id is null then -- Grupos do Produto novos são inseridos. select nextval('seqpkprodutogrupoproduto')into produto_grupoproduto_id; insert into produtogrupoproduto (idprodutogrupoproduto, idproduto, idgrupoproduto, codigoerp ) values( produto_grupoproduto_id, produto_id, cast(produto_grupoproduto_origem.idgrupoproduto as bigint), produto_grupoproduto_origem.externalid ); end if; END LOOP; -- FIM GRUPOS DO PRODUTO -- FIM GRUPOS DO PRODUTO -- FIM GRUPOS DO PRODUTO -- FIM GRUPOS DO PRODUTO --TIPOS DO PRODUTO --TIPOS DO PRODUTO --TIPOS DO PRODUTO --TIPOS DO PRODUTO json_produto_tipoproduto = json_extract_path_text(json_produto,'ProdutoTipoProduto'); FOR produto_tipoproduto_origem IN SELECT json_extract_path_text(value,'idtipoproduto') AS idtipoproduto, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_produto_tipoproduto) LOOP -- Tipos do Produto no SFA select codigoerp into produto_tipoproduto_external_id from produtotipoproduto where codigoerp = produto_tipoproduto_origem.externalid; if produto_tipoproduto_external_id is null then -- Tipos do Produto novos são inseridos. select nextval('seqpkprodutotipoproduto')into produto_tipoproduto_id; insert into produtotipoproduto (idprodutotipoproduto, idproduto, idtipoproduto, codigoerp ) values( produto_tipoproduto_id, produto_id, cast(produto_tipoproduto_origem.idtipoproduto as bigint), produto_tipoproduto_origem.externalid ); end if; END LOOP; -- FIM TIPOS DO PRODUTO -- FIM TIPOS DO PRODUTO -- FIM TIPOS DO PRODUTO -- FIM TIPOS DO PRODUTO else -- Quando já existe RAISE notice 'O produto (codigoerp = %) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .',cast(produto_external_id as text); return 'O produto (codigoerp = '||cast(produto_external_id as TEXT)||' ) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .'; end if; --FIM PRODUTO --FIM PRODUTO --FIM PRODUTO --FIM PRODUTO return '{"internalid" : "'||cast(produto_id as text)||'"}'; END;