Uso de Recurso
Tipos de processo e Fase onde o recurso aparece
SELECT
distinct tp.descricao||' ('||tp.id||')' as tipo,
e.descricao||' ('||e.estado||')' as fase
FROM
tipo_processo tp INNER JOIN
tipo_processo_campo tpc ON tp.id=tpc.tipo_processo INNER JOIN
estado_campo ec USING(tipo_processo,id_campo) INNER JOIN
recurso r ON ec.recurso=r.id INNER JOIN
estado e USING(tipo_processo,estado)
WHERE
r.recurso = 'XXXX' -- r.id_lua = 'XXX'
ORDER BY 1,2;
Identifica recursos de análise mal usados
Recursos de análise só fazem sentido de serem usados nos metadados, pois essa característica (ser de análise) é usada para caracterizar as pendências.
-- Recursos de análise não usados nos metadados (não precisariam ser de análise)
SELECT
r.id, r.recurso
FROM
recurso r
WHERE
r.analise = true
AND
NOT EXISTS (
SELECT
true
FROM
estado_campo ec INNER JOIN
tipo_processo tp ON ec.tipo_processo = tp.id
WHERE
tp.circulacao not like 'DESATIVADO%'
AND
ec.recurso = r.id
);
Uso de recursos de análise diferentes na mesma fase
NÃO É UMA BOA PRÁTICA.
-- Recursos de análise não usados nos metadados (não precisariam ser de análise)
SELECT
DISTINCT tp.id, e.estado, r1.id, r2.id,
tp.descricao AS tipo,
e.descricao AS estado,
r1.recurso AS "recurso 1",
r2.recurso AS "recurso 2"
FROM
tipo_processo tp INNER JOIN
estado e ON tp.id = e.tipo_processo INNER JOIN
estado_campo ec1 USING (tipo_processo,estado) INNER JOIN
recurso r1 ON ec1.recurso = r1.id INNER JOIN
estado_campo ec2 USING (tipo_processo, estado) INNER JOIN
recurso r2 ON ec2.recurso = r2.id
WHERE
r1.analise = true
AND
r2.analise = true
AND
r1.id > r2.id
ORDER BY tp.id, e.estado, r1.id, r2.id;
Totaliza Documentos Acadêmicos emitidos por ano, agrupados em simples e com aprovação
SELECT
extract (year from ultima_alteracao) as ano,
count(dp.valor like '%,%' or (select true from atestados where id = dp.valor::integer and tipo_atestado = 1)) as "simples",
count(case when dp.valor not like '%,%' and (select true from atestados where id = dp.valor::integer and tipo_atestado = 2) then true else null end) as "autorizados",
count(*) as total
FROM
processo p INNER JOIN
detalhe_processo dp ON p.id = dp.id_processo AND dp.id_campo = 10
WHERE
p.tipo_processo = 14
AND
p.status IN (1,4,5)
AND
p.estado IN (6,10)
GROUP BY extract(year from ultima_alteracao)
ORDER BY 1;
Permissões para Avaliação Quinquenal
Visibilidade de diretores (que tem permissão para encaminhar para a CSCD).
SELECT
u.id,
u.nome,
(SELECT descricao FROM tipo_usuario WHERE id = u.tipo),
un.sigla,
un.id_unidade,
(SELECT
CASE
WHEN id_nivel = 1 THEN '== Total =='
WHEN id_nivel = 2 THEN '== Centro =='
WHEN id_nivel = 5 THEN (SELECT un.nome FROM unidade un WHERE un.id_unidade = per.id_unidade)
ELSE id_nivel::text END
FROM
permissao p2
WHERE
p2.id_usuario = u.id AND p2.id_recurso = 164)
FROM
usuario u INNER JOIN
permissao per ON u.id = per.id_usuario INNER JOIN
unidade un USING(id_unidade)
WHERE
per.id_recurso = 157
ORDER BY sigla;
Visibilidade de decanos (que tem permissão para encaminhar para a CCCD).
SELECT
u.id,
u.nome,
(SELECT descricao FROM tipo_usuario WHERE id = u.tipo),
(SELECT
CASE
WHEN id_nivel = 1 THEN '== Total =='
WHEN id_nivel = 2 THEN '== Centro =='
ELSE id_nivel::text END
FROM
permissao p2
WHERE
p2.id_usuario = u.id AND p2.id_recurso = 164)
FROM
usuario u INNER JOIN
permissao per ON u.id = per.id_usuario
WHERE
per.id_recurso = 159
ORDER BY u.nome;
Visibilidade de cada professor que está sendo avaliado
SELECT
u.id,
u.nome,
un.nome,
(SELECT CASE
WHEN per.id_nivel = 1 THEN 'Total'
WHEN per.id_nivel = 2 THEN 'Centro'
WHEN per.id_nivel = 5 THEN 'Dpto'
WHEN per.id_nivel = 6 THEN 'Próprio'
ELSE per.id_nivel::text END
FROM permissao per
WHERE per.id_usuario = u.id AND per.id_recurso = 158 order by id_nivel limit 1) as CDCD,
(SELECT CASE
WHEN per.id_nivel = 1 THEN 'Total'
WHEN per.id_nivel = 2 THEN 'Centro'
WHEN per.id_nivel = 5 THEN 'Dpto'
WHEN per.id_nivel = 6 THEN 'Próprio'
ELSE per.id_nivel::text END
FROM permissao per
WHERE per.id_usuario = u.id AND per.id_recurso = 164 order by id_nivel limit 1) as CSCD,
(SELECT CASE
WHEN per.id_nivel = 1 THEN 'Total'
WHEN per.id_nivel = 2 THEN 'Centro'
WHEN per.id_nivel = 5 THEN 'Dpto'
WHEN per.id_nivel = 6 THEN 'Próprio'
ELSE per.id_nivel::text END
FROM permissao per
WHERE per.id_usuario = u.id AND per.id_recurso = 165 order by id_nivel limit 1) as CCCD
FROM
usuario u INNER JOIN
usuario_unidade uun ON u.id = uun.id_usuario INNER JOIN
unidade un USING (id_unidade) INNER JOIN
processo p ON u.id = p.id_usuario
WHERE
p.tipo_processo = 71
ORDER BY u.nome;