Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2014
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.56 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