Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.92 KB | None | 0 0
  1. SELECT
  2.                 p.id AS pessoa_id,
  3.            
  4.                 CASE
  5.                     WHEN pf.nome IS NOT NULL THEN UPPER(pf.nome)
  6.                     WHEN pj.razao_social IS NOT NULL THEN UPPER(pj.razao_social)
  7.                 ELSE 'interessado' END AS nome,
  8.                 CASE
  9.                     WHEN pf.registro_nacional IS NOT NULL THEN pf.registro_nacional
  10.                     WHEN pj.registro_nacional IS NOT NULL THEN pj.registro_nacional
  11.                 ELSE 'ND' END AS registro_nacional,
  12.                 CASE
  13.                     WHEN pf.id IS NOT NULL THEN 'profissional'
  14.                     WHEN pj.id IS NOT NULL THEN 'empresa'
  15.                 END AS tipo_pessoa,
  16.                
  17.                 LOWER(p.email) AS email,
  18.                    
  19.                 e.*
  20.            
  21.             FROM tb_pessoa AS p
  22.             INNER JOIN tb_enderecos AS e ON e.id = p.enderecocorrespondencia
  23.             LEFT JOIN tb_profissional AS pf ON pf.pessoa_id = p.id
  24.             LEFT JOIN tb_empresa AS pj ON pj.pessoa_id = p.id
  25.                     AND (pj.valor_capital IS NOT NULL OR pj.valor_capital::INT <> 0 OR LOWER(pj.categoria) IN ('c', 's'))
  26.             WHERE
  27.                 -- somente profissionais ou empresas
  28.                 (EXISTS (SELECT pessoa_id FROM tb_profissional WHERE pessoa_id = p.id)
  29.                
  30.                 --or exists (select pessoa_id from tb_empresa where pessoa_id = p.id
  31.                 --  and valor_capital::float > 0 or lower(pj.categoria) in ('c', 's'))
  32.                 --  and categoria is not null
  33.                 )
  34.                
  35.                 -- nao quitou o exercicio atual
  36.                 AND EXTRACT(YEAR FROM CURRENT_DATE) != (
  37.                     SELECT MAX(exercicio) FROM (
  38.                         SELECT MAX(a.exercicio) AS exercicio FROM tb_anuidade a
  39.                         WHERE a.pessoa_id = p.id
  40.                         AND a.parcela = 1
  41.                         AND a.qtdparcelas = 1
  42.                         UNION
  43.                         SELECT MAX(b.exercicio) AS exercicio FROM tb_anuidade b
  44.                         WHERE b.pessoa_id = p.id
  45.                         AND b.qtdparcelas = (SELECT MAX(c.parcela) FROM tb_anuidade c
  46.                         WHERE c.pessoa_id = b.pessoa_id AND c.qtdparcelas = b.qtdparcelas
  47.                         AND c.exercicio = b.exercicio)) AS ultimo_exercicio
  48.                 )
  49.                
  50.                 -- passou 3 meses desde o ultimo pagamento de anuidade
  51.                 AND (SELECT MAX(pg.data_pagamento) FROM tb_boleto AS b
  52.                 INNER JOIN tb_convenio AS c ON c.id = b.convenio_id
  53.                         AND c.descricao ilike '%anuidade%'
  54.                 INNER JOIN tb_pagamento AS pg ON pg.boleto_id = b.id
  55.                 WHERE b.pessoa_id = p.id) + INTERVAL '3 months' < CURRENT_DATE
  56.                    
  57.                 -- nao possui guias de anuidade em prazo de pagamento
  58.                 AND NOT EXISTS (SELECT b.pessoa_id FROM tb_boleto AS b
  59.                 INNER JOIN tb_convenio AS c ON c.id = b.convenio_id
  60.                 AND c.descricao ilike '%anuidade%'
  61.                 WHERE b.pessoa_id = p.id
  62.                 AND b.disponivel_pessoa = TRUE
  63.                 AND b.vencimento >= CURRENT_DATE
  64.                 AND NOT EXISTS (SELECT boleto_id FROM tb_pagamento WHERE boleto_id = b.id))
  65.                  
  66.                 -- somente registrados permanentes ativos
  67.                 AND (EXISTS (SELECT pr.id
  68.                     FROM tb_profissional AS pro
  69.                     INNER JOIN tb_profissional_registro pr ON pr.profissional_id = pro.pessoa_id
  70.                     INNER JOIN tb_tiporegistro AS tr ON tr.id = pr.tiporegistro_id AND tr.codigo IN ('PP', 'PE', 'TE')
  71.                     INNER JOIN tb_profissional_registro_situacaoregistro AS prs ON prs.registro_id = pr.id
  72.                     INNER JOIN tb_situacaoregistro AS sr ON sr.id = prs.situacaoregistro_id
  73.                             AND sr.id = (SELECT id FROM tb_situacaoregistro WHERE descricao ilike 'ativo')
  74.                     WHERE
  75.                     pro.pessoa_id = p.id
  76.                     ORDER BY prs.data_inicial ASC
  77.                     LIMIT 1)
  78.                
  79.                 OR EXISTS
  80.                
  81.                 (SELECT pr.id
  82.                     FROM tb_empresa AS emp
  83.                     INNER JOIN (SELECT id AS registro_id, empresa_id FROM tb_empresa_registro) pr1 ON pr1.empresa_id = emp.pessoa_id
  84.                     INNER JOIN tb_empresa_registro pr ON pr.id = pr1.registro_id
  85.                     INNER JOIN tb_tiporegistro AS tr ON tr.id = pr.tiporegistro_id
  86.                             AND tr.codigo IN ('DD', 'EM')
  87.                     INNER JOIN tb_situacaoregistro AS sr ON sr.id = pr.situacaoregistro_id
  88.                             AND sr.id = (SELECT id FROM tb_situacaoregistro WHERE descricao ilike 'ativo')
  89.                     WHERE
  90.                     emp.pessoa_id = p.id
  91.                     ORDER BY pr.data_ini_registro ASC
  92.                     LIMIT 1)
  93.                 )
  94.                
  95.                 -- tem email
  96.                 AND p.email IS NOT NULL
  97.                    
  98.                 -- somente pessoas que possuem endereco no estado
  99.                 AND UPPER(e.uf) = (SELECT UPPER(enderecouf) FROM tb_filial WHERE enderecouf IS NOT NULL LIMIT 1)
  100.                    
  101.                 -- tem que possuir um endereco valido
  102.                 AND e.logradouro IS NOT NULL
  103.  
  104.                 --devendo desde 2011
  105.                 AND (
  106.                     SELECT MAX(exercicio) FROM (
  107.                     SELECT MAX(a.exercicio) AS exercicio FROM tb_anuidade a
  108.                     WHERE a.pessoa_id = p.id
  109.                     AND a.parcela = 1
  110.                     AND a.qtdparcelas = 1
  111.  
  112.                     UNION
  113.  
  114.                     SELECT MAX(b.exercicio) AS exercicio FROM tb_anuidade b
  115.                     WHERE b.pessoa_id = p.id
  116.                     AND b.qtdparcelas = (SELECT MAX(c.parcela) FROM tb_anuidade c
  117.                     WHERE c.pessoa_id = b.pessoa_id AND c.qtdparcelas = b.qtdparcelas
  118.                     AND c.exercicio = b.exercicio)) AS ultimo_exercicio
  119.                 ) BETWEEN 2010 AND 2013
  120.                
  121.                 --order by tipo_pessoa asc, nome asc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement