TOTVS CRM | SFA - 12.1.2501
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
postnotafiscalsub(text)
Parameters
Name
Type
Mode
json_origem
text
IN
Definition
declare json_notafiscal json; json_notafiscal_itens json; notafiscal_id integer; notafiscal_itens_id integer; notafiscal_external_id text; notafiscal_itens_external_id text; notafiscal_itens_origem RECORD; begin --CABECALHO NOTAFISCAL --CABECALHO NOTAFISCAL --CABECALHO NOTAFISCAL --CABECALHO NOTAFISCAL --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_notafiscal = cast(json_origem AS json); select codigoerp into notafiscal_external_id from notafiscal where codigoerp = json_extract_path_text(json_notafiscal,'externalid'); if notafiscal_external_id is null then select nextval('seqpknotafiscal')into notafiscal_id; insert into notafiscal(idnotafiscal, idncancelada, numeronotafiscal, serie, horaatualizacao, dataemissao, valorfaturado, idlocal, idparceiro, idusuario, idtiponotafiscal, idlocalfilialfaturamento, idlocalfilialretirada, idlocalfilialvenda, observacao, idcondicaopagamento, valorfrete, valorseguro, codigoerp) values( notafiscal_id, cast(json_extract_path_text(json_notafiscal,'idncancelada') as bigint), json_extract_path_text(json_notafiscal,'numeronotafiscal'), json_extract_path_text(json_notafiscal,'serie'), json_extract_path_text(json_notafiscal,'horaatualizacao'), cast(json_extract_path_text(json_notafiscal,'dataemissao') as date), cast(json_extract_path_text(json_notafiscal,'valorfaturado') as numeric), cast(json_extract_path_text(json_notafiscal,'idclientelocal') as bigint), cast(json_extract_path_text(json_notafiscal,'idcliente') as bigint), cast(json_extract_path_text(json_notafiscal,'idusuario') as bigint), cast(json_extract_path_text(json_notafiscal,'idtiponotafiscal') as bigint), cast(json_extract_path_text(json_notafiscal,'idfiliallocalfaturamento') as bigint), cast(json_extract_path_text(json_notafiscal,'idfiliallocalretirada') as bigint), cast(json_extract_path_text(json_notafiscal,'idfiliallocalvenda') as bigint), json_extract_path_text(json_notafiscal,'observacao'), cast(json_extract_path_text(json_notafiscal,'idcondicaopagamento') as bigint), cast(json_extract_path_text(json_notafiscal,'valorfrete') as numeric), cast(json_extract_path_text(json_notafiscal,'valorseguro') as numeric), json_extract_path_text(json_notafiscal,'externalid') ); --ITENS DO NOTAFISCAL --ITENS DO NOTAFISCAL --ITENS DO NOTAFISCAL --ITENS DO NOTAFISCAL json_notafiscal_itens = json_extract_path_text(json_notafiscal,'NotaFiscalProduto'); FOR notafiscal_itens_origem IN SELECT json_extract_path_text(value,'quantidadefaturada') AS quantidadefaturada, json_extract_path_text(value,'precofaturado') AS precofaturado, json_extract_path_text(value,'precooriginal') AS precooriginal, json_extract_path_text(value,'idproduto') AS idproduto, json_extract_path_text(value,'idpedido') AS idpedido, json_extract_path_text(value,'idcfop') AS idcfop, json_extract_path_text(value,'valortotalliquido') AS valortotalliquido, json_extract_path_text(value,'valortotalbruto') AS valortotalbruto, json_extract_path_text(value,'externalid') AS externalid FROM json_array_elements(json_notafiscal_itens) LOOP -- Consulta Itens de Notas no SFA select codigoerp into notafiscal_itens_external_id from notafiscalproduto where codigoerp = notafiscal_itens_origem.externalid; if notafiscal_itens_external_id is null then -- Itens de Notas novos são inseridos. select nextval('seqpkpedidoproduto')into notafiscal_itens_id; insert into notafiscalproduto (idnotafiscalproduto, quantidadefaturada, precofaturado, precooriginal, idnotafiscal, idproduto, idpedido, idcfop, valortotalliquido, valortotalbruto, codigoerp) values( notafiscal_itens_id, cast(notafiscal_itens_origem.quantidadefaturada as numeric), cast(notafiscal_itens_origem.precofaturado as numeric), cast(notafiscal_itens_origem.precooriginal as numeric), notafiscal_id, cast(notafiscal_itens_origem.idproduto as bigint), cast(notafiscal_itens_origem.idpedido as bigint), cast(notafiscal_itens_origem.idcfop as bigint), cast(notafiscal_itens_origem.valortotalliquido as numeric), cast(notafiscal_itens_origem.valortotalbruto as numeric), notafiscal_itens_origem.externalid ); end if; END LOOP; -- FIM ITENS DO NOTAFISCAL -- FIM ITENS DO NOTAFISCAL -- FIM ITENS DO NOTAFISCAL -- FIM ITENS DO NOTAFISCAL else -- Quando já existe RAISE notice 'A notafiscal (codigoerp = %) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .',cast(notafiscal_external_id as text); return 'A notafiscal (codigoerp = '||cast(notafiscal_external_id as TEXT)||' ) já existe, não foi possível inserí-lo, mande um PUT ao invés de POST .'; end if; --FIM CABECALHO NOTAFISCAL --FIM CABECALHO NOTAFISCAL --FIM CABECALHO NOTAFISCAL --FIM CABECALHO NOTAFISCAL return '{"internalid" : "'||cast(notafiscal_id as text)||'"}'; END;