﻿

CREATE OR REPLACE VIEW estadisticas_asigna_vw AS 
 SELECT row_number() OVER (ORDER BY a.asigna_id) AS i, a.asigna_id, ( SELECT ((((auth_user.first_name::text || ' '::text) || auth_user.last_name::text) || ' ('::text) || auth_user.username::text) || ')'::text
           FROM auth_user
          WHERE auth_user.id = a.asigna_id) AS asigna, ( SELECT ((d.nombre::text || ' ('::text) || d.clave::text) || ')'::text
           FROM atencion_ciudadana_dependencia d
      JOIN atencion_ciudadana_dependencia_usuarios e ON d.id = e.dependencia_id
     WHERE e.user_id = a.asigna_id) AS dependencia, count(a.asigna_id) AS total, (count(a.asigna_id)::numeric * 100.0 / (( SELECT count(asigna_id) AS count
           FROM estadisticas_solicitud_vw
          WHERE dependencia_id = a.dependencia_id and año_registro = a.año_registro))::numeric)::numeric(5,2) AS porcentaje, a.dependencia_id
, año_registro
   FROM estadisticas_solicitud_vw a
  WHERE a.dependencia_id IS NOT NULL
  GROUP BY a.asigna_id, a.dependencia_id, año_registro
  ORDER BY count(a.asigna_id) DESC;

select * from estadisticas_asigna_vw where dependencia_id = 60 and año_registro = 2013;



drop view estadisticas_sexo_vw;

create view estadisticas_sexo_vw
as 
SELECT 
case when sexo = 'F' then '0' else '1' end id,
sexo clave, 
case when sexo = 'F' then 'Femenino' when sexo = 'M' then 'Masculino' end Sexo
,count(sexo) as total 
,cast((count(sexo) * 100.0 / ( select count(b.sexo) from estadisticas_solicitud_vw b where dependencia_id = a.dependencia_id
and a."año_registro" = b."año_registro"


 ) ) as decimal(5,2) )as porcentaje
, dependencia_id, "año_registro"
FROM 
  public.estadisticas_solicitud_vw a
where dependencia_id is not null and "año_registro" is not null
group by sexo, dependencia_id, "año_registro";

;
select * from estadisticas_sexo_vw a where dependencia_id = 22 and año_registro = 2014;





drop view estadisticas_fecha_registro_vw;

create view estadisticas_fecha_registro_vw
as
select meses.id, mes, d.id dependencia_id,
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and
	mes_registro = meses.id and año_registro = 2013 ) as "2013", 
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and 
	mes_registro = meses.id and año_registro = 2014 ) as "2014", 
	
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and 
	mes_registro = meses.id and año_registro = 2015 ) as "2015", 
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and 
	mes_registro = meses.id and año_registro = 2016 ) as "2016", 
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and 
	mes_registro = meses.id and año_registro = 2017 ) as "2017", 
	(
	select count(mes_registro) 
	from estadisticas_solicitud_vw as a
	group by mes_registro,año_registro , a.dependencia_id
	having a.dependencia_id = d.id and 
	mes_registro = meses.id and año_registro = 2018 ) as "2018"

from 
(

SELECT 1 AS id, 'Enero' AS mes
UNION ALL
SELECT 2, 'Febrero'
UNION ALL
SELECT 3, 'Marzo'
UNION ALL
SELECT 4, 'Abril'
UNION ALL
SELECT 5, 'Mayo'
UNION ALL
SELECT 6, 'Junio'
UNION ALL
SELECT 7, 'Julio'
UNION ALL
SELECT 8, 'Agosto'
UNION ALL
SELECT 9, 'Septiembre'
UNION ALL
SELECT 10, 'Octubre'
UNION ALL
SELECT 11, 'Noviembre'
UNION ALL
SELECT 12, 'Diciembre') as meses,
atencion_ciudadana_dependencia D 
;



select * from estadisticas_fecha_registro_vw where dependencia_id = 22







drop view estadisticas_estatus_vw;

create view estadisticas_estatus_vw
as 
select 
case estatus_id 
when 2 then 1 
when 3 then 2 
when 1 then 3
else estatus_id
end as prioridad,

estatus_id, 
	(select nombre ||' ('|| clave || ')' from atencion_ciudadana_estatus where id = estatus_id ) Estatus, 
	(select clave from atencion_ciudadana_estatus where id = estatus_id ) Clave, 
	count(estatus_id) as total 
, dependencia_id

,cast((count(estatus_id) * 100.0 / ( select count(estatus_id) from estadisticas_solicitud_vw where dependencia_id = a.dependencia_id and año_registro = a.año_registro) ) as decimal(5,2) )as porcentaje
, año_registro
from estadisticas_solicitud_vw a
where dependencia_id is not null
group by estatus_id , dependencia_id, año_registro
order by 1
;


select * from estadisticas_estatus_vw
where dependencia_id in (60)
and año_registro in (2013)
order by total desc;






--select * from atencion_ciudadana_lugar where padre_id = 51
drop view estadisticas_localidad_vw;

create view estadisticas_localidad_vw
as
	select 
		localidad_id,
		(
		select
			nombre 
		from atencion_ciudadana_lugar b 
		where id = a.localidad_id
		) as localidad,
		count(localidad_id) as total,
		cast(
			(count(localidad_id) * 100.0 / 
				( 
				select count(localidad_id)
				from estadisticas_solicitud_vw
				where dependencia_id = a.dependencia_id
					and año_registro = a.año_registro
				)
			) as decimal(5,2) 
		) as porcentaje,
		dependencia_id,
		año_registro
	from public.estadisticas_solicitud_vw a
	group by localidad_id, dependencia_id, año_registro
		having count(localidad_id) <>0
	order by localidad_id;

select * from estadisticas_localidad_vw 
where 
dependencia_id = 60 
and año_registro = 2013;

 



;



drop view estadisticas_solicitud_vw;

create view estadisticas_solicitud_vw
as
SELECT a.id as folio, a.solicitante_id , ( SELECT atencion_ciudadana_persona.nombre
           FROM atencion_ciudadana_persona
          WHERE atencion_ciudadana_persona.id = a.solicitante_id) AS solicitante, (((a.nombre::text || ' '::text) || a.apellido_paterno::text) || ' '::text) || a.apellido_materno::text AS beneficiario, a.sexo, a.fecha_nacimiento, a.curp, a.localidad_id, ( SELECT (((( SELECT atencion_ciudadana_lugar.nombre
                   FROM atencion_ciudadana_lugar
                  WHERE atencion_ciudadana_lugar.id = b.padre_id))::text) || ' - '::text) || b.nombre::text
           FROM atencion_ciudadana_lugar b
          WHERE b.id = a.localidad_id) AS localidad, a.direccion, a.codigo_postal, a.identificacion, a.correo_electronico, a.telefono, a.celular, a.solicitud, a.dependencia_id, ( SELECT atencion_ciudadana_dependencia.nombre
           FROM atencion_ciudadana_dependencia
          WHERE atencion_ciudadana_dependencia.id = a.dependencia_id) AS dependencia, a.foto, a.estatus_id, ( SELECT ((atencion_ciudadana_estatus.nombre::text || ' ('::text) || atencion_ciudadana_estatus.clave::text) || ')'::text
           FROM atencion_ciudadana_estatus
          WHERE atencion_ciudadana_estatus.id = a.estatus_id) AS estatus, a.asigna_id, ( SELECT (auth_user.first_name::text || ' '::text) || auth_user.last_name::text
           FROM auth_user
          WHERE auth_user.id = a.asigna_id) AS asigna, a.fecha_registro::date AS fecha_registro, a.fecha_ultimo_cambio::date AS fecha_ultimo_cambio, a.nota, 
        CASE a.bandera
            WHEN true THEN 'Si'::text
            ELSE ''::text
        END AS urgente, 
	date_part('year'::text, a.fecha_registro) AS "año_registro",
	date_part('month'::text, a.fecha_registro) AS "mes_registro"
   FROM atencion_ciudadana_solicitud a
  ORDER BY a.fecha_registro::date DESC, a.estatus_id;


select * from estadisticas_solicitud_vw;









/*


drop view estadisticas_dependencia_vw;

create view estadisticas_dependencia_vw
as
select row_number() OVER (ORDER BY dependencia_id) AS i, 
dependencia_id as id, 
	
	(select nombre
from atencion_ciudadana_dependencia D 

where D.id = a.dependencia_id) as dependencia, 
	count(dependencia_id) as total
	,cast((count(dependencia_id) * 100.0 / ( select count(dependencia_id) from atencion_ciudadana_solicitud) ) as decimal(5,2) )as porcentaje

	from atencion_ciudadana_solicitud a 
	where dependencia_id is not null
	group by dependencia_id
having count(dependencia_id) > 10
	order by 5 desc
;

select * from estadisticas_dependencia_vw;






 / *




select * from estadisticas_estatus_vw --where dependencia_id = 22;



* /














select dependencia_id, count(dependencia_id) from atencion_ciudadana_solicitud group by dependencia_id;
select bandera, count(bandera) from atencion_ciudadana_solicitud group by bandera;
select asigna_id, count(asigna_id) from atencion_ciudadana_solicitud group by asigna_id;



select 
	'estatus' as tabla, 
	estatus_id as id, 
	(select nombre ||' ('|| clave || ')' from atencion_ciudadana_estatus where id = estatus_id ) concepto, 
	count(estatus_id) as total 
from atencion_ciudadana_solicitud 
group by estatus_id
union
select 'sexo', 
	case sexo when 'M' then 1 when 'F' then 0 end,
	sexo,
	count(sexo) from atencion_ciudadana_solicitud group by sexo
union
select 'localidad', 
	localidad_id, 
	(select (select nombre from atencion_ciudadana_lugar where id = b.padre_id)|| ' - '  || nombre from atencion_ciudadana_lugar b where id = a.localidad_id) localidad,
	count(localidad_id) from atencion_ciudadana_solicitud a group by localidad_id

union 
select 'fecha' tabla,
	row_number() over() as id,
	to_char(fecha_registro::date, 'dd/mm/yyyy') concepto, 
	count(fecha_registro) total 
	from atencion_ciudadana_solicitud group by fecha_registro::date
	


order by 1,4
*/