CREATE OR REPLACE FUNCTION respuestas_formulario_externo(
	hab integer,
	form character varying,
	cod_ext character varying,
	sist integer)
    RETURNS SETOF record 
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    ROWS 1000
    
AS $BODY$
DECLARE
tabla record;

BEGIN

RETURN QUERY
SELECT
	sfh.habilitacion, --1
	sfh.formulario_habilitado, --2
	sfh.nombre as formulario_nombre, --3
	srf.respondido_formulario, --4
	srf.ingreso, --5
	srf.fecha, --6
	CASE
	  WHEN srf.terminado IS NULL THEN sru.terminado
	  WHEN sru.terminado IS NULL THEN srf.terminado
	  ELSE srf.terminado
	END AS terminado, --7
	CASE
	  WHEN srf.fecha_terminado IS NULL THEN sru.fecha::date
	  WHEN sru.fecha IS NULL THEN srf.fecha_terminado
	  ELSE srf.fecha_terminado
	END AS fecha_terminado, --8
	sre.respondido_encuesta, --9
	srd.respondido_detalle, --10
	srd.moderada,--11
	CASE
	  WHEN (scp.componente ILIKE 'text%' OR scp.componente = 'fecha_calculo_anios' OR scp.componente = 'deslizador_discreto') THEN NULL
	  WHEN scp.componente IN ('radio', 'combo', 'list', 'check', 'combo_dinamico')
		THEN srd.respuesta_codigo
	  WHEN (TRIM(srd.respuesta_valor) <> '' AND scp.componente = 'localidad') THEN srd.respuesta_valor::integer
	END AS respuesta_codigo, --12	
	CASE
	  WHEN (scp.componente ILIKE 'text%' OR scp.componente = 'fecha_calculo_anios' OR scp.componente = 'deslizador_discreto') THEN srd.respuesta_valor
	  WHEN (scp.componente IN ('radio', 'combo', 'list', 'check') AND (sp.tabla_asociada IS NULL OR sp.tabla_asociada = ''))
		THEN (SELECT sr.valor_tabulado FROM sge_respuesta AS sr WHERE srd.respuesta_codigo = sr.respuesta)
	  WHEN scp.componente IN ('radio', 'combo', 'list', 'check') AND sp.tabla_asociada <> '' 
	  	THEN get_tabla_asociada_valor(sp.tabla_asociada, sp.tabla_asociada_descripcion, sp.tabla_asociada_codigo, srd.respuesta_codigo::varchar)
	  WHEN scp.componente IN ('localidad', 'localidad_y_cp') 
	  	THEN (SELECT ml.nombre FROM mug_localidades AS ml WHERE srd.respuesta_valor::integer = ml.localidad)
	END AS respuesta_valor,--13	
	sed.encuesta_definicion, --14
	sed.encuesta, --15
	sfhd.orden as orden_encuesta, --16
	sb.orden as orden_bloque, --17
	sb.bloque, --18
	sb.nombre as bloque_nombre,--19
	sed.orden as orden_pregunta, --20
	sp.pregunta, --21
	sp.nombre as pregunta_nombre, --22
	scp.componente, --23
	sp.tabla_asociada, --24
	sfh.concepto, --25
	sea.nombre as encuesta_nombre, --26
	sfhd.elemento, --27
	selem.descripcion as elemento_nombre, --28
	sru.respondido_encuestado, --29
	sru.encuestado, --30 encuestado
	''::character varying(60), --31 usuario del encuestado
	''::character varying(60) AS respondido_por_usuario, --32 usuario que respondio
	sru.ignorado, --33
	sconc.descripcion as concepto_nombre, --34
        sconc.concepto_externo as concepto_externo, --35
        selem.elemento_externo as elemento_externo, --36
        sp.tabla_asociada_codigo as pregunta_tabla_codigo, --37
        sp.tabla_asociada_descripcion as pregunta_tabla_descripcion, --38
        scp.numero, --39
        NULL::integer as respondido_por_encuestado, --40
        (sfhd.encuesta ||
            '_' ||
            CASE WHEN sfhd.tipo_elemento IS NOT NULL THEN sfhd.tipo_elemento || '_' ELSE '' END ||
            sfhd.orden ||
            '_' ||
            sed.encuesta_definicion ||
            CASE WHEN (scp.componente = 'list' OR scp.componente = 'check') THEN '_' || srd.respuesta_codigo ELSE '' END
        )::character varying AS codigo_columna --41
FROM    sge_respondido_formulario srf
        JOIN sge_respondido_encuesta sre ON srf.respondido_formulario = sre.respondido_formulario
        JOIN sge_respondido_detalle srd ON sre.respondido_encuesta = srd.respondido_encuesta
        JOIN sge_encuesta_definicion sed ON srd.encuesta_definicion = sed.encuesta_definicion
        JOIN sge_encuesta_atributo sea ON sed.encuesta = sea.encuesta
        JOIN sge_bloque sb ON sed.bloque = sb.bloque
        JOIN sge_pregunta sp ON sed.pregunta = sp.pregunta
        JOIN sge_formulario_habilitado sfh ON srf.formulario_habilitado = sfh.formulario_habilitado
        JOIN sge_formulario_habilitado_detalle sfhd ON sre.formulario_habilitado_detalle = sfhd.formulario_habilitado_detalle
        JOIN sge_componente_pregunta scp ON scp.numero = sp.componente_numero
        JOIN sge_respondido_encuestado sru ON sru.respondido_formulario = srf.respondido_formulario AND sru.codigo_externo = cod_ext AND sru.sistema = sist
        LEFT JOIN sge_elemento selem ON selem.elemento = sfhd.elemento
        LEFT JOIN sge_concepto sconc ON sconc.concepto = sfh.concepto
WHERE       sfh.habilitacion = hab
        AND sfh.formulario_habilitado_externo = form;

RETURN;
END;
$BODY$;
