CREATE OR REPLACE VIEW public.financeirobi as select x.comprovante, x.numero, x.datalancamento, x.entrada, x.saida, x.finalizacao, x.tipo, x.natureza from ( select rp.recepcao_id as comprovante, rp.protocolo as numero, f.data_lancamento as datalancamento, case when f.valor > 0::numeric then f.valor else 0::numeric end as entrada, case when f.valor < 0::numeric then f.valor * '-1'::integer::numeric else 0::numeric end as saida, 0 as finalizacao, ( case when f.tipofinanceiro = 0::numeric then 'DEPOSITO' when f.tipofinanceiro = 1::numeric then 'RESTITUICAO' when f.tipofinanceiro = 2::numeric then 'TRANSFERENCIA' when f.tipofinanceiro = 3::numeric then 'ENTRADA' when f.tipofinanceiro = 4::numeric then 'SAIDA' when f.tipofinanceiro = 5::numeric then 'ANALISE' when f.tipofinanceiro = 6::numeric then 'RETIRADA' when f.tipofinanceiro = 7::numeric then 'DEPOSITO_EXTRA' when f.tipofinanceiro = 8::numeric then 'DESCONTO' when f.tipofinanceiro = 9::numeric then 'SALDO_INICIAL' when f.tipofinanceiro = 10::numeric then 'RESTITUICAO_EXTRA' when f.tipofinanceiro = 11::numeric then 'ESTORNO' when f.tipofinanceiro = 12::numeric then 'LIVRORECEITADESPESA' when f.tipofinanceiro = 13::numeric then 'PAGAMENTO' when f.tipofinanceiro = 14::numeric then 'DEVOLUCAO_PAGAMENTO' end )::text as tipo, nf.nome as natureza from financeiro f join controle_protocolo cp on cp.recepcao_id = f.comprovante and cp.protocolo = f.numero join recepcao_pedido_protocolo rp on rp.id = cp.protocolo_valendo_id join natureza_formal_titulo nf on nf.id = rp.naturezaformaltitulo_id where f.data_lancamento >= to_timestamp('04/09/2017 00:00:00'::text, 'DD/MM/YYYY HH24:MI:SS'::text) union select distinct r.id as recepcao, cp.protocolo as numero, case when rpp.status = 1 then rpp.data_cancelamento::timestamp without time zone else rpp.data_pronto end as datapronto, 0 as entrada, 0 as saida, calculasaldoemolumentoprotocolo(r.id, cp.protocolo, sum(rs.valor + rs.valor_iss + rs.valor_funrejus25 + rs.valor_fadep) over (partition by rpp.matricula, rs.recepcao_id, rs.protocolonumerocertidao)) as finalizacao, 'PROTOCOLO_EMOLUMENTO'::text as tipo, n.nome as natureza from controle_protocolo cp left join recepcao_pedido_protocolo rpp on rpp.id = cp.protocolo_valendo_id left join analise_custas ac on ac.id = rpp.analisecustas_id left join recepcao_servico rs on case when rs.analisecustas_id is null then '-1'::integer::bigint else rs.analisecustas_id end = case when rpp.analisecustas_id is null then '-1'::integer::bigint else rpp.analisecustas_id end and rs.protocolonumerocertidao = rpp.protocolo left join recepcao r on r.id = rpp.recepcao_id left join servico s on s.id = rs.servico_id left join natureza_formal_titulo n on n.id = rpp.naturezaformaltitulo_id where rpp.data_pronto >= to_timestamp('04/09/2017 00:00:00'::text, 'DD/MM/YYYY HH24:MI:SS'::text) and rpp.status = 2 or rpp.data_cancelamento >= to_timestamp('04/09/2017 00:00:00'::text, 'DD/MM/YYYY HH24:MI:SS'::text) and rpp.status = 1 union select rc.recepcao_id as comprovante, rc.numero, f.data_lancamento as datalancamento, case when f.valor > 0::numeric then f.valor else 0::numeric end as entrada, case when f.valor < 0::numeric then f.valor * '-1'::integer::numeric else 0::numeric end as saida, 0 as finalizacao, ( case when f.tipofinanceiro = 0::numeric then 'DEPOSITO' when f.tipofinanceiro = 1::numeric then 'RESTITUICAO' when f.tipofinanceiro = 2::numeric then 'TRANSFERENCIA' when f.tipofinanceiro = 3::numeric then 'ENTRADA' when f.tipofinanceiro = 4::numeric then 'SAIDA' when f.tipofinanceiro = 5::numeric then 'ANALISE' when f.tipofinanceiro = 6::numeric then 'RETIRADA' when f.tipofinanceiro = 7::numeric then 'DEPOSITO_EXTRA' when f.tipofinanceiro = 8::numeric then 'DESCONTO' when f.tipofinanceiro = 9::numeric then 'SALDO_INICIAL' when f.tipofinanceiro = 10::numeric then 'RESTITUICAO_EXTRA' when f.tipofinanceiro = 11::numeric then 'ESTORNO' when f.tipofinanceiro = 12::numeric then 'LIVRORECEITADESPESA' when f.tipofinanceiro = 13::numeric then 'PAGAMENTO' when f.tipofinanceiro = 14::numeric then 'DEVOLUCAO_PAGAMENTO' end )::text as tipo, 'Certidao'::character varying as natureza from financeiro f join controle_certidao cc on cc.recepcao_id = f.comprovante and cc.numero = f.numero join recepcao_pedido_certidao rc on rc.id = cc.certidao_valendo_id where f.data_lancamento >= to_timestamp('04/09/2017 00:00:00'::text, 'DD/MM/YYYY HH24:MI:SS'::text) union select distinct r.id as recepcao, cc.numero, rpc.data_pronta as datapronto, 0 as entrada, 0 as saida, calculasaldoemolumentocertidao(r.id, cc.numero, sum(rs.valor + rs.valor_iss + rs.valor_funrejus25 + rs.valor_fadep) over (partition by rs.recepcao_id, rs.protocolonumerocertidao)) as finalizacao, 'CERTIDAO_EMOLUMENTO'::text as tipo, 'CERTIDAO'::text as natureza from controle_certidao cc left join recepcao_pedido_certidao rpc on rpc.id = cc.certidao_valendo_id left join analise_custas ac on ac.id = rpc.analisecustas_id left join recepcao_servico rs on case when rs.analisecustas_id is null then '-1'::integer::bigint else rs.analisecustas_id end = case when rpc.analisecustas_id is null then '-1'::integer::bigint else rpc.analisecustas_id end and rs.protocolonumerocertidao = rpc.numero and rs.sequencia_certidao = rpc.sequencia left join recepcao r on r.id = rpc.recepcao_id left join servico s on s.id = rs.servico_id where rpc.data_pronta >= to_timestamp('04/09/2017 00:00:00'::text, 'DD/MM/YYYY HH24:MI:SS'::text) and rpc.status = 2) x order by x.datalancamento;