CREATE OR REPLACE FUNCTION public.sp_listar_solicitud_paginado(
    p_fecha_ingreso character varying,
    p_pagina character varying,
    p_limit character varying,
    p_ref refcursor)
  RETURNS refcursor AS
$BODY$

Declare
--v_id numeric;
--v_numinf character varying;
v_scad varchar;
v_campos varchar;
v_tabla varchar;
v_where varchar;
v_count varchar;
v_col_count varchar;
--v_perfil varchar;

Begin

	p_pagina=(p_pagina::Integer-1)*p_limit::Integer;
	
	v_campos='t2.id id_solicitud_detalle,t1.empresa_id,t2.vehiculo_id,t3.ruc,t3.razon_social,t1.fecha,t4.placa,t4.ejes,
	t2.fecha_programada,t2.estado,t5.denominacion origen,t6.denominacion especie,
(case 
when coalesce((select estacionamiento_id 
from estacionamiento_empresas t1_
where t1_.empresa_id=t1.empresa_id and t1_.estado=''1'' limit 1),0) = 288 Then ''Preferente'' 
when coalesce((select estacionamiento_id 
from estacionamiento_empresas t1_
where t1_.empresa_id=t1.empresa_id and t1_.estado=''1'' limit 1),0) > 0 Then ''Exclusivo'' 
else ''Temporal''
end) espacio ';

	v_tabla='from solicitudes t1
inner join solicitud_vehiculos t2 on t1.id=t2.solicitud_id
inner join empresas t3 on t1.empresa_id=t3.id
inner join vehiculos t4 on t2.vehiculo_id=t4.id and t4.estado=''1''
inner join tabla_maestras t5 on t1.origen_id=t5.codigo::int And tipo=''ORIGEN SOLICITUD''
left join especies t6 on t1.especie_id=t6.id
';
	
	--v_where = ' Where t2.estado<>''0'' ';
	v_where = ' Where t2.estado=''1'' ';
	/*	
	If p_fecha_ingreso<>'' Then
	 v_where:=v_where||'And to_char(t7.fecha_ingreso,''dd-mm-yyyy'') = '''||p_fecha_ingreso||''' ';
	End If;
	*/
	EXECUTE ('SELECT count(1) '||v_tabla||v_where) INTO v_count;
	v_col_count:=' ,'||v_count||' as TotalRows ';

	If v_count::Integer > p_limit::Integer then
		v_scad:='SELECT '||v_campos||v_col_count||v_tabla||v_where||' Order By t2.fecha_programada Desc LIMIT '||p_limit||' OFFSET '||p_pagina||';'; 
	else
		v_scad:='SELECT '||v_campos||v_col_count||v_tabla||v_where||' Order By t2.fecha_programada Desc;'; 
	End If;
	
	--Raise Notice '%',v_scad;
	Open p_ref For Execute(v_scad);
	Return p_ref;
End

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

