CREATE OR REPLACE FUNCTION fnc_busca_vendas_integracao_esphera (var_data_hora_ini Text, var_data_hora_fin Text) RETURNS TABLE(id_venda int, valor_total numeric, data_hora Text, cancelamento boolean, devolucao boolean) AS $$ SELECT id_venda, valor_total, data_hora, cancelamento, devolucao FROM ( (SELECT vnd_orcamento.orcamento as id_venda, vnd_orcamento.vlr_total_liquido as valor_total, COALESCE((SELECT MAX(flx_mov_financ.data)||' '||MAX(flx_mov_financ.hora) FROM flx_mov_financ WHERE vnd_orcamento.filial_orc = flx_mov_financ.filial_pedido AND vnd_orcamento.orcamento = flx_mov_financ.pedido ), vnd_orcamento.data_passou_cx||' 00:00:00') as data_hora, false as cancelamento, false as devolucao FROM vnd_orcamento JOIN vnd_pagto_ped ON vnd_orcamento.filial_orc = vnd_pagto_ped.filial AND vnd_orcamento.orcamento = vnd_pagto_ped.nr_pedido JOIN bas_tipo_pagto ON vnd_pagto_ped.tipo_pgto = bas_tipo_pagto.codigo WHERE vnd_orcamento.situacao ='A' AND vnd_orcamento.tipo IN('P', 'E') AND vnd_orcamento.venda_sn = 'S' AND bas_tipo_pagto.soma_estatist = 'S' AND COALESCE((SELECT MAX(flx_mov_financ.data) FROM flx_mov_financ WHERE vnd_orcamento.filial_orc = flx_mov_financ.filial_pedido AND vnd_orcamento.orcamento = flx_mov_financ.pedido ), vnd_orcamento.data_passou_cx) >= (CURRENT_DATE - 30) AND COALESCE((SELECT MAX(flx_mov_financ.data)||' '||MAX(flx_mov_financ.hora) FROM flx_mov_financ WHERE vnd_orcamento.filial_orc = flx_mov_financ.filial_pedido AND vnd_orcamento.orcamento = flx_mov_financ.pedido ), vnd_orcamento.data_passou_cx||' 00:00:00') BETWEEN var_data_hora_ini AND var_data_hora_fin GROUP BY vnd_orcamento.filial_orc, vnd_orcamento.orcamento, vnd_orcamento.vlr_total_liquido ORDER BY vnd_orcamento.orcamento) UNION ALL (SELECT orcamento as id_venda, vlr_tot_devoluc as valor_total, data_emissao||' '||hora_emissao as data_hora, false as cancelamento, true as devolucao FROM gar_troca_devoluc WHERE situacao != 'C' AND data_emissao >= (CURRENT_DATE - 30) AND (data_emissao||' '||hora_emissao) BETWEEN var_data_hora_ini AND var_data_hora_fin ) UNION ALL (SELECT vnd_cancela_orcamento.orcamento as id_venda, vnd_orcamento.vlr_total_liquido as valor_total, vnd_cancela_orcamento.data_cancelamento||' '||vnd_cancela_orcamento.hora_cancelamento as data_hora, true as cancelamento, false as devolucao FROM vnd_cancela_orcamento INNER JOIN vnd_orcamento ON vnd_cancela_orcamento.filial_orc = vnd_orcamento.filial_orc AND vnd_cancela_orcamento.orcamento = vnd_orcamento.orcamento WHERE vnd_orcamento.situacao = 'C' AND vnd_orcamento.tipo != 'O' AND vnd_cancela_orcamento.data_cancelamento >= (CURRENT_DATE - 30) AND (vnd_cancela_orcamento.data_cancelamento||' '||vnd_cancela_orcamento.hora_cancelamento) BETWEEN var_data_hora_ini AND var_data_hora_fin ) )as view_vnd_integracao ORDER BY id_venda, data_hora; $$ LANGUAGE SQL;