CambiodeVersionKolla: 150_ws_resultados_de_encuesta_detalle.sql

File 150_ws_resultados_de_encuesta_detalle.sql, 7.3 KB (added by jguerra, 8 years ago)

Funcion ws_resultados_de_encuesta_detalle

Line 
1
2
3CREATE OR REPLACE FUNCTION ws_resultados_de_encuesta_detalle(hab integer, form_hab character varying, elem character varying, preg integer)
4  RETURNS SETOF record AS
5$BODY$
6DECLARE 
7tabla record;
8cond_preg character varying;
9BEGIN
10
11IF preg is not null THEN cond_preg := ' encuesta.pregunta = ' || preg; ELSE cond_preg := ' true '; END IF;
12
13RETURN QUERY
14select 
15        sed.encuesta_definicion, --0
16        sb.bloque, --1
17        sp.pregunta as pregunta_id, --2
18        sp.nombre as pregunta_texto, --3
19        scp.componente, --4
20        CASE WHEN (scp.tipo = 'A') THEN 'S' ELSE 'N' END AS es_libre, --5
21        CASE WHEN (scp.numero = 4) OR (scp.numero = 5) THEN 'S'ELSE 'N' END AS es_multiple,--6
22        sed.obligatoria, --7
23        sb.orden as bloque_orden, --8
24        sed.orden as pregunta_orden_bloque, --9
25        sb.orden || '_' || sed.orden as orden_en_encuesta, --10
26       
27        CASE
28                WHEN (scp.tipo = 'A') THEN null
29                WHEN (scp.tipo = 'E' AND scp.componente = 'localidad' AND srd2.respuesta_valor <> '') THEN srd2.respuesta_valor::integer
30                WHEN (scp.tipo = 'C') THEN sr.respuesta
31        END AS respuesta_id, --11       
32        spr.orden::character varying as repuesta_orden,--12
33        CASE
34                WHEN (scp.tipo = 'A') THEN srd2.respuesta_valor
35                WHEN (scp.tipo = 'E' and scp.componente = 'localidad' AND srd2.respuesta_valor <> '') THEN (SELECT nombre FROM mug_localidades WHERE localidad = srd2.respuesta_valor::integer )
36                WHEN (scp.tipo = 'C') THEN sr.valor_tabulado
37        END AS respuesta_valor, --13
38        CASE
39                WHEN (scp.tipo = 'A' OR scp.tipo = 'E' ) THEN count(srd2.respuesta_valor)
40                ELSE count(srd.respuesta_codigo)
41        END AS elegida_cantidad --14
42       
43FROM sge_habilitacion sh 
44        INNER JOIN sge_formulario_habilitado sfh ON (sh.habilitacion = sfh.habilitacion)
45        LEFT JOIN sge_concepto sc on (sc.concepto = sfh.concepto)
46        INNER JOIN sge_formulario_habilitado_detalle sfhd ON (sfhd.formulario_habilitado = sfh.formulario_habilitado)
47        INNER JOIN sge_encuesta_atributo sea ON (sea.encuesta = sfhd.encuesta)
48        LEFT JOIN sge_elemento se ON (se.elemento = sfhd.elemento)
49        INNER JOIN sge_encuesta_definicion sed ON (sea.encuesta = sed.encuesta)
50        INNER JOIN sge_bloque sb ON (sed.bloque = sb.bloque)
51        INNER JOIN sge_pregunta sp ON (sp.pregunta = sed.pregunta  and (sp.tabla_asociada = '' OR sp.tabla_asociada is NULL) )
52        INNER JOIN sge_componente_pregunta scp ON (scp.numero = sp.componente_numero)
53        left JOIN sge_pregunta_respuesta spr on (spr.pregunta = sp.pregunta )
54        left JOIN sge_respuesta sr on (sr.respuesta = spr.respuesta) 
55        LEFT JOIN sge_respondido_formulario srf ON (srf.formulario_habilitado = sfh.formulario_habilitado)
56        LEFT JOIN sge_respondido_encuesta sre ON (sre.respondido_formulario = srf.respondido_formulario AND sre.formulario_habilitado_detalle = sfhd.formulario_habilitado_detalle)
57        LEFT JOIN sge_respondido_detalle srd ON (srd.respondido_encuesta = sre.respondido_encuesta
58                                and srd.encuesta_definicion = sed.encuesta_definicion and srd.respuesta_codigo = sr.respuesta)
59        LEFT JOIN sge_respondido_detalle srd2 ON (srd2.respondido_encuesta = sre.respondido_encuesta
60                                        and srd2.encuesta_definicion = sed.encuesta_definicion )
61WHERE 
62        sh.habilitacion = hab AND 
63        sfh.formulario_habilitado_externo = form_hab AND 
64        se.elemento_externo = elem
65        AND CASE WHEN preg is not null THEN sp.pregunta = preg ELSE true end
66
67GROUP BY sed.encuesta_definicion,sb.bloque, sp.pregunta, scp.componente, scp.tipo, scp.numero, sed.obligatoria, sed.orden, sr.respuesta,spr.orden, srd.respuesta_valor,srd2.respuesta_valor,sr.valor_tabulado;
68
69FOR tabla IN 
70        SELECT DISTINCT sp.tabla_asociada, sp.tabla_asociada_codigo, sp.tabla_asociada_descripcion, sp.tabla_asociada_orden_campo, sp.tabla_asociada_orden_tipo
71        FROM sge_formulario_habilitado sfh
72                INNER JOIN sge_formulario_habilitado_detalle sfhd ON (sfh.formulario_habilitado = sfhd.formulario_habilitado)
73                INNER JOIN sge_encuesta_definicion sed ON (sfhd.encuesta = sed.encuesta)
74                INNER JOIN sge_pregunta sp ON (sed.pregunta = sp.pregunta)
75        WHERE sfh.habilitacion = hab AND sfh.formulario_habilitado_externo = form_hab AND sp.tabla_asociada != ''
76LOOP
77        RETURN QUERY EXECUTE 'select
78                                encuesta.encuesta_definicion, --0
79                                encuesta.bloque, --1
80                                encuesta.pregunta as pregunta_id, --2
81                                encuesta.pregunta_nombre as pregunta_texto, --3
82                                encuesta.componente, --4
83                                CASE WHEN (encuesta.tipo = ''A'') THEN ''S'' ELSE ''N'' END AS es_libre, --5
84                                CASE WHEN (encuesta.numero = 4) OR (encuesta.numero = 5) THEN ''S'' ELSE ''N'' END AS es_multiple,--6
85                                encuesta.obligatoria, --7
86                                encuesta.bloque_orden, --8
87                                encuesta.sed_orden as pregunta_orden_bloque, --9
88                                encuesta.bloque_orden || ''_'' || encuesta.preg_orden as orden_en_encuesta, --10
89                                encuesta.rta_codigo AS respuesta_id, --11
90                                encuesta.rta_orden as repuesta_orden,--12
91                                encuesta.rta_descripcion::character varying AS respuesta_valor--, --13
92                                ,count(srd.respuesta_codigo) AS elegida_cantidad --14
93                        FROM
94                                (
95                                        SELECT
96                                                sed.encuesta_definicion,
97                                                sb.bloque,
98                                                sp.pregunta,
99                                                scp.componente,
100                                                scp.tipo,
101                                                scp.numero,
102                                                ta.' || tabla.tabla_asociada_codigo || ' ,
103                                                sea.encuesta,
104                                                sed.orden as sed_orden,
105                                                sed.obligatoria,
106                                                sb.orden as bloque_orden,
107                                                sed.orden as preg_orden,
108                                                sp.tabla_asociada,
109                                                sp.nombre as pregunta_nombre,
110                                                ta.' || tabla.tabla_asociada_codigo || '  as rta_codigo,
111                                                ta.' || CASE when (tabla.tabla_asociada_orden_campo = 'codigo') THEN tabla.tabla_asociada_codigo ELSE tabla.tabla_asociada_descripcion END || ' as rta_orden,
112                                                ta.' || tabla.tabla_asociada_descripcion || ' as rta_descripcion
113                                        FROM sge_encuesta_atributo sea  INNER JOIN sge_encuesta_definicion sed ON (sea.encuesta = sed.encuesta)
114                                                                        INNER JOIN sge_bloque sb ON (sed.bloque = sb.bloque)
115                                                                        INNER JOIN sge_pregunta sp ON (sp.pregunta = sed.pregunta AND (sp.tabla_asociada != '''' OR sp.tabla_asociada is not NULL) )
116                                                                        INNER JOIN sge_componente_pregunta scp ON (scp.numero = sp.componente_numero),
117                                                                        ' || tabla.tabla_asociada || ' ta
118                                ) as encuesta
119                                INNER JOIN sge_formulario_habilitado_detalle sfhd ON (encuesta.encuesta = sfhd.encuesta)
120                                INNER JOIN sge_formulario_habilitado sfh ON (sfh.formulario_habilitado = sfhd.formulario_habilitado)
121                                INNER JOIN sge_habilitacion sh ON (sh.habilitacion = sfh.habilitacion)
122                                LEFT JOIN sge_elemento se on (se.elemento = sfhd.elemento)
123                                LEFT JOIN sge_respondido_formulario srf ON (srf.formulario_habilitado = sfh.formulario_habilitado)
124                                LEFT JOIN sge_respondido_encuesta sre ON (sre.respondido_formulario = srf.respondido_formulario AND sre.formulario_habilitado_detalle = sfhd.formulario_habilitado_detalle)
125                                left join sge_respondido_detalle srd on (srd.respondido_encuesta = sre.respondido_encuesta and srd.encuesta_definicion = encuesta.encuesta_definicion and srd.respuesta_codigo = encuesta.rta_codigo)                           
126                        where sh.habilitacion = ' || hab || ' and
127                                encuesta.tabla_asociada = ''' || tabla.tabla_asociada || ''' and
128                                sfh.formulario_habilitado_externo = ''' || form_hab || '''  and
129                                se.elemento_externo = ''' || elem || ''' and '|| cond_preg ||'
130                               
131                        GROUP BY encuesta.encuesta_definicion, encuesta.bloque, encuesta.pregunta, encuesta.pregunta_nombre, encuesta.componente, encuesta.tipo, encuesta.numero, encuesta.obligatoria,
132                                encuesta.bloque_orden,encuesta.sed_orden,encuesta.preg_orden,encuesta.rta_codigo,encuesta.rta_orden, encuesta.rta_descripcion;
133                        ' ;
134END LOOP;
135
136RETURN;
137END;
138$BODY$
139  LANGUAGE plpgsql VOLATILE
140  COST 100
141  ROWS 1000;
142