TOTVS CRM | SFA - 12.1.2501
.public
Tables
(current)
Columns
Constraints
Relationships
Orphan Tables
Anomalies
Routines
postpedidosub(text)
Parameters
Name
Type
Mode
json
text
IN
Definition
declare internalid integer; --VARIAVEIS PEDIDO json_pedido json; pedido_id integer; pedido_datapedido date; pedido_datatransmissao date; pedido_external_id text; pedido_horatransmissao text; pedido_idcliente bigint; pedido_idcliente_externalid text; pedido_idclientelocal bigint; pedido_idclientelocal_externalid text; pedido_idcondicaopagamento bigint; pedido_idcondicaopagamento_externalid text; pedido_idfiliallocalfaturamento bigint; pedido_idfiliallocalfaturamento_externalid text; pedido_idfiliallocalvenda bigint; pedido_idfiliallocalvenda_externalid text; pedido_idtabelapreco bigint; pedido_idtabelapreco_externalid text; pedido_idtipocobranca bigint; pedido_idtipocobranca_externalid text; pedido_idsegmento bigint; pedido_idsegmento_externalid text; pedido_idtipopedido bigint; pedido_idtipopedido_externalid text; pedido_idtiposituacaopedido bigint; pedido_idtiposituacaopedido_externalid text; pedido_idusuario bigint; pedido_idusuario_externalid text; pedido_numeropedido text; pedido_numeropedidoerp text; pedido_observacaointegracao text; pedido_observacaonotafiscal text; pedido_observacaopedido text; pedido_quantidadetotal numeric; pedido_sglorigempedido text; pedido_valortotal numeric; pedido_idnexportadoerp bigint; pedido_idtipoestoque bigint; pedido_idtipoestoque_externalid text; pedido_numeronotafiscalorigem text; json_pedido_itens json; json_pedido_entrega json; json_pedido_parcela json; pedido_itens_id integer; pedido_entrega_id integer; pedido_parcela_id integer; pedido_itens_external_id text; pedido_entrega_external_id text; pedido_parcela_external_id text; pedido_itens_origem RECORD; pedido_entrega_origem RECORD; pedido_parcela_origem RECORD; begin --CABECALHO PEDIDO --CABECALHO PEDIDO --CABECALHO PEDIDO --CABECALHO PEDIDO --Aqui retira a tag json e também é necessário retirar as chaves que sobram --pois o metodo json_extract_path_text não entende e não consegue extrair corretamente as subtags depois --json = cast(CAST(json_extract_path_text(CAST(json AS json),'json') AS TEXT) as json); json_pedido = cast(json as json); select codigoerp into pedido_external_id from pedido where codigoerp = json_extract_path_text(json_pedido,'externalid'); --VALIDAÇÃO DE CODIGOERP JÁ EXISTENTE IF (select distinct 1 FROM PEDIDO WHERE CODIGOERP = pedido_external_id) = 1 THEN RAISE EXCEPTION 'externalid = %', pedido_external_id USING HINT = 'The record (externalid = '|| pedido_external_id ||') already exists, it was not possible to insert it.'; ELSE --EXTRAÇÃO DE CAMPOS DO JSON select nextval('seqpkpedido')into pedido_id; pedido_datapedido = cast(json_extract_path_text(json_pedido,'datapedido') as date); pedido_datatransmissao = cast(json_extract_path_text(json_pedido,'datatransmissao') as date); pedido_external_id = json_extract_path_text(json_pedido,'externalid'); pedido_horatransmissao = json_extract_path_text(json_pedido,'horatransmissao'); pedido_idcliente = cast(json_extract_path_text(json_pedido,'idcliente') as bigint); pedido_idcliente_externalid = json_extract_path_text(json_pedido,'idcliente_externalid'); pedido_idclientelocal = cast(json_extract_path_text(json_pedido,'idclientelocal') as bigint); pedido_idclientelocal_externalid = json_extract_path_text(json_pedido,'idclientelocal_externalid'); pedido_idcondicaopagamento = cast(json_extract_path_text(json_pedido,'idcondicaopagamento') as bigint); pedido_idcondicaopagamento_externalid = json_extract_path_text(json_pedido,'idcondicaopagamento_externalid'); pedido_idfiliallocalfaturamento = cast(json_extract_path_text(json_pedido,'idfiliallocalfaturamento') as bigint); pedido_idfiliallocalfaturamento_externalid = json_extract_path_text(json_pedido,'idfiliallocalfaturamento_externalid'); pedido_idfiliallocalvenda = cast(json_extract_path_text(json_pedido,'idfiliallocalvenda') as bigint); pedido_idfiliallocalvenda_externalid = json_extract_path_text(json_pedido,'idfiliallocalvenda_externalid'); pedido_idtabelapreco = cast(json_extract_path_text(json_pedido,'idtabelapreco') as bigint); pedido_idtabelapreco_externalid = json_extract_path_text(json_pedido,'idtabelapreco_externalid'); pedido_idtipocobranca = cast(json_extract_path_text(json_pedido,'idtipocobranca') as bigint); pedido_idtipocobranca_externalid = json_extract_path_text(json_pedido,'idtipocobranca_externalid'); pedido_idsegmento = cast(json_extract_path_text(json_pedido,'idsegmento') as bigint); pedido_idsegmento_externalid = json_extract_path_text(json_pedido,'idsegmento_externalid'); pedido_idtipopedido = cast(json_extract_path_text(json_pedido,'idtipopedido') as bigint); pedido_idtipopedido_externalid = json_extract_path_text(json_pedido,'idtipopedido_externalid'); pedido_idtiposituacaopedido = cast(json_extract_path_text(json_pedido,'idtiposituacaopedido') as bigint); pedido_idtiposituacaopedido_externalid = json_extract_path_text(json_pedido,'idtiposituacaopedido_externalid'); pedido_idusuario = cast(json_extract_path_text(json_pedido,'idusuario') as bigint); pedido_idusuario_externalid = json_extract_path_text(json_pedido,'idusuario_externalid'); pedido_numeropedido = json_extract_path_text(json_pedido,'numeropedido'); pedido_numeropedidoerp = json_extract_path_text(json_pedido,'numeropedidoerp'); pedido_observacaointegracao = json_extract_path_text(json_pedido,'observacaointegracao'); pedido_observacaonotafiscal = json_extract_path_text(json_pedido,'observacaonotafiscal'); pedido_observacaopedido = json_extract_path_text(json_pedido,'observacaopedido'); pedido_quantidadetotal = cast(json_extract_path_text(json_pedido,'quantidadetotal') as numeric); pedido_sglorigempedido = json_extract_path_text(json_pedido,'sglorigempedido'); pedido_valortotal = cast(json_extract_path_text(json_pedido,'valortotal') as numeric); pedido_idnexportadoerp = cast(json_extract_path_text(json_pedido,'idnexportadoerp') as bigint); pedido_idtipoestoque = cast(json_extract_path_text(json_pedido,'idtipoestoque') as bigint); pedido_idtipoestoque_externalid = json_extract_path_text(json_pedido,'idtipoestoque_externalid'); pedido_numeronotafiscalorigem = json_extract_path_text(json_pedido,'numeronotafiscalorigem'); --VALIDAÇÕES APÓS EXTRAÇÃO --IDNEXPORTADOERP NULO OU FORA DO PADRAO if pedido_idnexportadoerp is null or pedido_idnexportadoerp not in (0,1) then RAISE EXCEPTION 'idnexportadoerp = %', pedido_idnexportadoerp USING HINT = 'Field must not be null or different from 1 or 0.'; end if; --DATAPEDIDO NULO if pedido_datapedido is null then RAISE EXCEPTION 'datapedido = %', pedido_datapedido USING HINT = 'Field datapedido must be not null'; end if; --NUMEROPEDIDO NULO if pedido_numeropedido is null then RAISE EXCEPTION 'numeropedido = %', pedido_numeropedido USING HINT = 'Field numeropedido must be not null'; end if; --SGLORIGEMPEDIDO NULO if pedido_sglorigempedido is null then RAISE EXCEPTION 'sglorigempedido = %', pedido_sglorigempedido USING HINT = 'Field sglorigempedido must be not null'; end if; --LOOKUP TIPOSITUACAOPEDIDO IF pedido_idtiposituacaopedido IS NULL AND pedido_idtiposituacaopedido_externalid IS NOT NULL THEN pedido_idtiposituacaopedido = (SELECT C2.idtiposituacaopedido FROM tiposituacaopedido C2 WHERE C2.CODIGOERP = pedido_idtiposituacaopedido_externalid); END IF; --TIPOSITUACAOPEDIDO NULO if pedido_idtiposituacaopedido is null then RAISE EXCEPTION 'idtiposituacaopedido = %', pedido_idtiposituacaopedido USING HINT = 'Field idtiposituacaopedido must be not null'; end if; --LOOKUP CLIENTELOCAL IF pedido_idclientelocal IS NULL AND pedido_idclientelocal_externalid IS NOT NULL THEN pedido_idclientelocal = (SELECT C2.idlocal FROM local C2 WHERE C2.CODIGOERP = pedido_idclientelocal_externalid); END IF; --CLIENTELOCAL NULO if pedido_idclientelocal is null then RAISE EXCEPTION 'idclientelocal = %', pedido_idclientelocal USING HINT = 'Field idclientelocal must be not null'; end if; --LOOKUP CLIENTE IF pedido_idcliente IS NULL AND pedido_idcliente_externalid IS NOT NULL THEN pedido_idcliente = (SELECT C2.idparceiro FROM parceiro C2 WHERE C2.CODIGOERP = pedido_idcliente_externalid); END IF; --CLIENTE NULO if pedido_idcliente is null then RAISE EXCEPTION 'idcliente = %', pedido_idcliente USING HINT = 'Field idcliente must be not null'; end if; --LOOKUP USUARIO IF pedido_idusuario IS NULL AND pedido_idusuario_externalid IS NOT NULL THEN pedido_idusuario = (SELECT C2.idusuario FROM USUARIO C2 WHERE C2.CODIGOERP = pedido_idusuario_externalid); END IF; --USUARIO NULO if pedido_idusuario is null then RAISE EXCEPTION 'idusuario = %', pedido_idusuario USING HINT = 'Field idusuario must be not null'; end if; --CODIGOERP NULO if pedido_external_id is null or pedido_external_id = '' then RAISE EXCEPTION 'externalid = %', pedido_external_id USING HINT = 'Field externalid must be not null'; end if; --LOOKUPS NÃO OBRIGATÓRIOS --LOOKUP FILIALFATURAMENTO IF pedido_idfiliallocalfaturamento IS NULL AND pedido_idfiliallocalfaturamento_externalid IS NOT NULL THEN pedido_idfiliallocalfaturamento = (SELECT C2.idlocal FROM LOCAL C2 WHERE C2.CODIGOERP = pedido_idfiliallocalfaturamento_externalid); END IF; --LOOKUP FILIALVENDA IF pedido_idfiliallocalvenda IS NULL AND pedido_idfiliallocalvenda_externalid IS NOT NULL THEN pedido_idfiliallocalvenda = (SELECT C2.idlocal FROM LOCAL C2 WHERE C2.CODIGOERP = pedido_idfiliallocalvenda_externalid); END IF; --LOOKUP CONDICAOPAGAMENTO IF pedido_idcondicaopagamento IS NULL AND pedido_idcondicaopagamento_externalid IS NOT NULL THEN pedido_idcondicaopagamento = (SELECT C2.idcondicaopagamento FROM condicaopagamento C2 WHERE C2.CODIGOERP = pedido_idcondicaopagamento_externalid); END IF; --LOOKUP TABELAPRECO IF pedido_idtabelapreco IS NULL AND pedido_idtabelapreco_externalid IS NOT NULL THEN pedido_idtabelapreco = (SELECT C2.idtabelapreco FROM tabelapreco C2 WHERE C2.CODIGOERP = pedido_idtabelapreco_externalid); END IF; --LOOKUP TIPOPEDIDO IF pedido_idtipopedido IS NULL AND pedido_idtipopedido_externalid IS NOT NULL THEN pedido_idtipopedido = (SELECT C2.idtipopedido FROM tipopedido C2 WHERE C2.CODIGOERP = pedido_idtipopedido_externalid); END IF; --LOOKUP TIPOCOBRANCA IF pedido_idtipocobranca IS NULL AND pedido_idtipocobranca_externalid IS NOT NULL THEN pedido_idtipocobranca = (SELECT C2.idtipocobranca FROM tipocobranca C2 WHERE C2.CODIGOERP = pedido_idtipocobranca_externalid); END IF; --LOOKUP SEGMENTO IF pedido_idsegmento IS NULL AND pedido_idsegmento_externalid IS NOT NULL THEN pedido_idsegmento = (SELECT C2.idsegmento FROM segmento C2 WHERE C2.CODIGOERP = pedido_idsegmento_externalid); END IF; --LOOKUP TIPOESTOQUE IF pedido_idtipoestoque IS NULL AND pedido_idtipoestoque_externalid IS NOT NULL THEN pedido_idtipoestoque = (SELECT C2.idtipoestoque FROM tipoestoque C2 WHERE C2.CODIGOERP = pedido_idtipoestoque_externalid); END IF; insert into pedido (idpedido, numeropedido, numeropedidoerp, sglorigempedido, horatransmissao, datatransmissao, observacaopedido, observacaonotafiscal, datapedido, idlocalfilialfaturamento, idlocalfilialvenda, idtabelapreco, idcondicaopagamento, idtiposituacaopedido, idlocal, idparceiro, idusuario, idusuarioprofissional, idnexportadoerp, valortotal, quantidadetotal, idtipopedido, codigoerp, observacaointegracao, idtipocobranca, idsegmento, idtipoestoque, numeronotafiscalorigem) values ( pedido_id, pedido_numeropedido, pedido_numeropedidoerp, pedido_sglorigempedido, pedido_horatransmissao, pedido_datatransmissao, pedido_observacaopedido, pedido_observacaonotafiscal, pedido_datapedido, pedido_idfiliallocalfaturamento, pedido_idfiliallocalvenda, pedido_idtabelapreco, pedido_idcondicaopagamento, pedido_idtiposituacaopedido, pedido_idclientelocal, pedido_idcliente, pedido_idusuario, pedido_idusuario, pedido_idnexportadoerp, pedido_valortotal, pedido_quantidadetotal, pedido_idtipopedido, pedido_external_id, pedido_observacaointegracao, pedido_idtipocobranca, pedido_idsegmento, pedido_idtipoestoque, pedido_numeronotafiscalorigem) returning idpedido into internalid; --ITENS DO PEDIDO --ITENS DO PEDIDO --ITENS DO PEDIDO --ITENS DO PEDIDO json_pedido_itens = json_extract_path_text(json_pedido,'PedidoProduto'); FOR pedido_itens_origem IN SELECT json_extract_path_text(value,'datafaturamento') AS datafaturamento, json_extract_path_text(value,'datasituacao') AS datasituacao, json_extract_path_text(value,'externalid') AS externalid, cast(json_extract_path_text(value,'idproduto') as bigint) AS idproduto, json_extract_path_text(value,'idproduto_externalid') AS idproduto_externalid, cast(json_extract_path_text(value,'idtabelapreco') as bigint) AS idtabelapreco, json_extract_path_text(value,'idtabelapreco_externalid') AS idtabelapreco_externalid, cast(json_extract_path_text(value,'idtipopedido') as bigint) AS idtipopedido, json_extract_path_text(value,'idtipopedido_externalid') AS idtipopedido_externalid, cast(json_extract_path_text(value,'idtipositpedidoproduto') as bigint) AS idtipositpedidoproduto, json_extract_path_text(value,'idtipositpedidoproduto_externalid') AS idtipositpedidoproduto_externalid, cast(json_extract_path_text(value,'ordem') as bigint) AS ordem, cast(json_extract_path_text(value,'precocusto') as numeric) AS precocusto, cast(json_extract_path_text(value,'precofaturado') as numeric) AS precofaturado, cast(json_extract_path_text(value,'precooriginal') as numeric) AS precooriginal, cast(json_extract_path_text(value,'precosugerido') as numeric) AS precosugerido, cast(json_extract_path_text(value,'precovenda') as numeric) AS precovenda, cast(json_extract_path_text(value,'quantidadefaturada') as numeric) AS quantidadefaturada, cast(json_extract_path_text(value,'quantidade') as numeric) AS quantidade, cast(json_extract_path_text(value,'quantidadependente') as numeric) AS quantidadependente, cast(json_extract_path_text(value,'valortotalbruto') as numeric) AS valortotalbruto, cast(json_extract_path_text(value,'valortotalliquido') as numeric) AS valortotalliquido, cast(json_extract_path_text(value,'valordesconto') as numeric) AS valordesconto, cast(json_extract_path_text(value,'idtipoestoque') as bigint) AS idtipoestoque, json_extract_path_text(value,'idtipoestoque_externalid') AS idtipoestoque_externalid FROM json_array_elements(json_pedido_itens) LOOP -- Consulta Itens do Pedido no SFA select codigoerp into pedido_itens_external_id from pedidoproduto where codigoerp = pedido_itens_origem.externalid; if pedido_itens_external_id is not null THEN RAISE EXCEPTION 'PedidoProduto.externalid = %', pedido_itens_origem.externalid USING HINT = 'The record (PedidoProduto.externalid = '|| pedido_itens_origem.externalid ||') already exists, it was not possible to insert it.'; ELSE --LOOKUP PRODUTO IF pedido_itens_origem.idproduto IS NULL AND pedido_itens_origem.idproduto_externalid IS NOT NULL THEN pedido_itens_origem.idproduto = (SELECT C2.idproduto FROM produto C2 WHERE C2.CODIGOERP = pedido_itens_origem.idproduto_externalid); END IF; --PRODUTO NULO if pedido_itens_origem.idproduto is null then RAISE EXCEPTION 'idproduto = %', pedido_itens_origem.idproduto USING HINT = 'Field PedidoProduto.idproduto must be not null'; end if; --CODIGOERP NULO if pedido_itens_origem.externalid is null or pedido_itens_origem.externalid = '' then RAISE EXCEPTION 'externalid = %', pedido_itens_origem.externalid USING HINT = 'Field PedidoProduto.externalid must be not null'; end if; --LOOKUPS NAO OBRIGATORIOS --LOOKUP TIPOPEDIDO IF pedido_itens_origem.idtipopedido IS NULL AND pedido_itens_origem.idtipopedido_externalid IS NOT NULL THEN pedido_itens_origem.idtipopedido = (SELECT C2.idtipopedido FROM tipopedido C2 WHERE C2.CODIGOERP = pedido_itens_origem.idtipopedido_externalid); END IF; --LOOKUP TABELAPRECO IF pedido_itens_origem.idtabelapreco IS NULL AND pedido_itens_origem.idtabelapreco_externalid IS NOT NULL THEN pedido_itens_origem.idtabelapreco = (SELECT C2.idtabelapreco FROM tabelapreco C2 WHERE C2.CODIGOERP = pedido_itens_origem.idtabelapreco_externalid); END IF; --LOOKUP IDTIPOSITPEDIDOPRODUTO IF pedido_itens_origem.idtipositpedidoproduto IS NULL AND pedido_itens_origem.idtipositpedidoproduto_externalid IS NOT NULL THEN pedido_itens_origem.idtipositpedidoproduto = (SELECT C2.idtipositpedidoproduto FROM tipositpedidoproduto C2 WHERE C2.CODIGOERP = pedido_itens_origem.idtipositpedidoproduto_externalid); END IF; --LOOKUP TIPOESTOQUE IF pedido_itens_origem.idtipoestoque IS NULL AND pedido_itens_origem.idtipoestoque_externalid IS NOT NULL THEN pedido_itens_origem.idtipoestoque = (SELECT C2.idtipoestoque FROM tipoestoque C2 WHERE C2.CODIGOERP = pedido_itens_origem.idtipoestoque_externalid); END IF; -- Itens de Pedidos novos são inseridos. select nextval('seqpkpedidoproduto')into pedido_itens_id; insert into pedidoproduto (idpedidoproduto, idproduto, quantidade, quantidadefaturada, quantidadependente, precooriginal, precovenda, precofaturado, idpedido, idtipopedido, ordem, precocusto, datafaturamento, datasituacao, idtabelapreco, valortotalbruto, valortotalliquido, precosugerido, idtipositpedidoproduto, codigoerp, valordesconto, idtipoestoque) values ( pedido_itens_id, pedido_itens_origem.idproduto, pedido_itens_origem.quantidade, pedido_itens_origem.quantidadefaturada, pedido_itens_origem.quantidadependente, pedido_itens_origem.precooriginal, pedido_itens_origem.precovenda, pedido_itens_origem.precofaturado, pedido_id, pedido_itens_origem.idtipopedido, pedido_itens_origem.ordem, pedido_itens_origem.precocusto, TO_DATE(pedido_itens_origem.datafaturamento,'YYYY-MM-DD'), TO_DATE(pedido_itens_origem.datasituacao,'YYYY-MM-DD'), pedido_itens_origem.idtabelapreco, pedido_itens_origem.valortotalbruto, pedido_itens_origem.valortotalliquido, pedido_itens_origem.precosugerido, pedido_itens_origem.idtipositpedidoproduto, pedido_itens_origem.externalid, pedido_itens_origem.valordesconto, pedido_itens_origem.idtipoestoque ); end if; END LOOP; -- FIM ITENS DO PEDIDO -- FIM ITENS DO PEDIDO -- FIM ITENS DO PEDIDO -- FIM ITENS DO PEDIDO --ENTREGA DO PEDIDO --ENTREGA DO PEDIDO --ENTREGA DO PEDIDO --ENTREGA DO PEDIDO json_pedido_entrega = json_extract_path_text(json_pedido,'PedidoEntrega'); IF json_pedido_entrega is not null THEN FOR pedido_entrega_origem IN SELECT json_extract_path_text(value,'datacarregamento') AS datacarregamento, json_extract_path_text(value,'dataentrega') AS dataentrega , json_extract_path_text(value,'externalid') AS externalid, cast(json_extract_path_text(value,'idclienteredespacho') as bigint) AS idclienteredespacho, json_extract_path_text(value,'idclienteredespacho_externalid') AS idclienteredespacho_externalid, cast(json_extract_path_text(value,'idtipofrete') as bigint) AS idtipofrete, json_extract_path_text(value,'idtipofrete_externalid') AS idtipofrete_externalid, cast(json_extract_path_text(value,'idtransportadora') as bigint) AS idtransportadora, json_extract_path_text(value,'idtransportadora_externalid') AS idtransportadora_externalid, json_extract_path_text(value,'observacao') AS observacao, cast(json_extract_path_text(value,'ordem') as bigint) AS ordem, cast(json_extract_path_text(value,'quantidade') as numeric) AS quantidade, cast(json_extract_path_text(value,'valorfrete') as numeric) AS valorfrete, cast(json_extract_path_text(value,'valorseguro') as numeric) AS valorseguro FROM json_array_elements(json_pedido_entrega) LOOP -- Consulta Entrega do Pedido no SFA select codigoerp into pedido_entrega_external_id from pedidoentrega where codigoerp = pedido_entrega_origem.externalid; if pedido_entrega_external_id is not null then RAISE EXCEPTION 'PedidoEntrega.externalid = %', pedido_entrega_origem.externalid USING HINT = 'The record (PedidoEntrega.externalid = '|| pedido_entrega_origem.externalid ||') already exists, it was not possible to insert it.'; else --CODIGOERP NULO if pedido_entrega_origem.externalid is null or pedido_entrega_origem.externalid = '' then RAISE EXCEPTION 'externalid = %', externalid USING HINT = 'Field externalid must be not null'; end if; --LOOKUPS NÃO OBRIGATÓRIOS --LOOKUP CLIENTE REDESPACHO IF pedido_entrega_origem.idclienteredespacho IS NULL AND pedido_entrega_origem.idclienteredespacho_externalid IS NOT NULL THEN pedido_entrega_origem.idclienteredespacho = (SELECT C2.idparceiro FROM PARCEIRO C2 WHERE C2.CODIGOERP = pedido_entrega_origem.idclienteredespacho_externalid); END IF; --LOOKUP TRANSPORTADORA IF pedido_entrega_origem.idtransportadora IS NULL AND pedido_entrega_origem.idtransportadora_externalid IS NOT NULL THEN pedido_entrega_origem.idtransportadora = (SELECT C2.idparceiro FROM PARCEIRO C2 WHERE C2.CODIGOERP = pedido_entrega_origem.idtransportadora_externalid); END IF; --LOOKUP TIPOFRETE IF pedido_entrega_origem.idtipofrete IS NULL AND pedido_entrega_origem.idtipofrete_externalid IS NOT NULL THEN pedido_entrega_origem.idtipofrete = (SELECT C2.idtipofrete FROM TIPOFRETE C2 WHERE C2.CODIGOERP = pedido_entrega_origem.idtipofrete_externalid); END IF; -- entrega de Pedidos novos são inseridos. select nextval('seqpkpedidoentrega')into pedido_entrega_id; insert into pedidoentrega (idpedidoentrega, valorfrete, valorseguro, idpedido, idparceirotransportador, codigoerp, idtipofrete, idparceiroredespacho, idnentregafutura, idnexportadoerp, dataentrega, datacarregamento, quantidade, observacao, ordem) values( pedido_entrega_id, cast(pedido_entrega_origem.valorfrete as numeric), cast(pedido_entrega_origem.valorseguro as numeric), pedido_id, cast(pedido_entrega_origem.idtransportadora as bigint), pedido_entrega_origem.externalid, cast(pedido_entrega_origem.idtipofrete as bigint), cast(pedido_entrega_origem.idclienteredespacho as bigint), 0, 1, cast(pedido_entrega_origem.dataentrega as date), cast(pedido_entrega_origem.datacarregamento as date), cast(pedido_entrega_origem.quantidade as NUMERIC), pedido_entrega_origem.observacao, cast(pedido_entrega_origem.ordem as bigint) ); end if; END LOOP; END IF; -- FIM ENTREGA DO PEDIDO -- FIM ENTREGA DO PEDIDO -- FIM ENTREGA DO PEDIDO -- FIM ENTREGA DO PEDIDO --PARCELA DO PEDIDO --PARCELA DO PEDIDO --PARCELA DO PEDIDO --PARCELA DO PEDIDO json_pedido_parcela = json_extract_path_text(json_pedido,'PedidoParcela'); IF json_pedido_parcela is not null THEN FOR pedido_parcela_origem IN SELECT json_extract_path_text(value,'datavencimento') AS datavencimento, json_extract_path_text(value,'externalid') AS externalid, cast(json_extract_path_text(value,'idcondicaopagamento') as bigint) AS idcondicaopagamento, json_extract_path_text(value,'idcondicaopagamento_externalid') AS idcondicaopagamento_externalid, cast(json_extract_path_text(value,'idtipocobranca') as bigint) AS idtipocobranca, json_extract_path_text(value,'idtipocobranca_externalid') AS idtipocobranca_externalid, cast(json_extract_path_text(value,'valor') as numeric) AS valor, cast(json_extract_path_text(value,'ordem') as bigint) AS ordem FROM json_array_elements(json_pedido_parcela) LOOP -- Consulta parcela do Pedido no SFA select codigoerp into pedido_parcela_external_id from pedidoparcela where codigoerp = pedido_parcela_origem.externalid; if pedido_entrega_external_id is not null then RAISE EXCEPTION 'PedidoParcela.externalid = %', pedido_parcela_origem.externalid USING HINT = 'The record (PedidoParcela.externalid = '|| pedido_parcela_origem.externalid ||') already exists, it was not possible to insert it.'; else --CODIGOERP NULO if pedido_parcela_origem.externalid is null or pedido_parcela_origem.externalid = '' then RAISE EXCEPTION 'externalid = %', pedido_parcela_origem.externalid USING HINT = 'Field externalid must be not null'; end if; --LOOKUPS NÃO OBRIGATÓRIOS --LOOKUP CONDICAOPAGAMENTO IF pedido_parcela_origem.idcondicaopagamento IS NULL AND pedido_parcela_origem.idcondicaopagamento_externalid IS NOT NULL THEN pedido_parcela_origem.idcondicaopagamento = (SELECT C2.idcondicaopagamento FROM condicaopagamento C2 WHERE C2.CODIGOERP = pedido_parcela_origem.idcondicaopagamento_externalid); END IF; --LOOKUP TIPOCOBRANCA IF pedido_parcela_origem.idtipocobranca IS NULL AND pedido_parcela_origem.idtipocobranca_externalid IS NOT NULL THEN pedido_parcela_origem.idtipocobranca = (SELECT C2.idtipocobranca FROM tipocobranca C2 WHERE C2.CODIGOERP = pedido_parcela_origem.idtipocobranca_externalid); END IF; -- parcela de Pedidos novos são inseridos. select nextval('seqpkpedidoparcela')into pedido_parcela_id; insert into pedidoparcela (idpedidoparcela, idtipocobranca, idcondicaopagamento, idpedido, valor, ordem, datavencimento, codigoerp) values( pedido_parcela_id, cast(pedido_parcela_origem.idtipocobranca as bigint), cast(pedido_parcela_origem.idcondicaopagamento as bigint), pedido_id, cast(pedido_parcela_origem.valor as numeric), cast(pedido_parcela_origem.ordem as bigint), cast(pedido_parcela_origem.datavencimento as date), pedido_parcela_origem.externalid ); end if; END LOOP; END IF; -- FIM PARCELA DO PEDIDO -- FIM PARCELA DO PEDIDO -- FIM PARCELA DO PEDIDO -- FIM PARCELA DO PEDIDO end if; --FIM CABECALHO PEDIDO --FIM CABECALHO PEDIDO --FIM CABECALHO PEDIDO --FIM CABECALHO PEDIDO return query select internalid; END;