Buenas tardes lista, intento armar una planillas de asistencia mensual de
personas teniendo una tabla de marcaciones del personal hice una función en
plpgsql para obtener la asistencia, pero no he podido añadir los días
sábados y domingos en la planilla la funcion es la siguiente:

CREATE OR REPLACE FUNCTION controlasistencia.asistenciamesfuncionario(vmes
integer, vgestion integer, vidbiometrico integer)
  RETURNS SETOF record AS
$BODY$
DECLARE
  fila RECORD; marcaciones RECORD; diatexto text; dia integer; fechasabado
date; fechadomingo date;
  hora time;finde boolean;
BEGIN
  FOR marcaciones in
    select * from crosstab('SELECT
biofechahora::date,nivel,to_char(biofechahora, ''HH12:MI:SS'')::time FROM
controlasistencia.biometrico where mes='||vmes||' and anio='||vgestion||'
and codigobiometrico='||vidbiometrico,
'select 1 union select 2 union select 3 union select 4 union
select 5 union select 6 union select 7 union
select 8 union select 9 union select 10 union select 11 union
select 12 order by 1') as (fecha date,d1 time,d2 time,d3 time,d4 time,d5
time,
d6 time,d7 time,d8 time,d9 time,d10 time,d11 time,d12 time)
  LOOP
        SELECT date_part('dow',marcaciones.fecha) into dia;
        SELECT CASE WHEN date_part('dow',marcaciones.fecha) = 0 THEN
'Domingo'
WHEN date_part('dow',marcaciones.fecha) = 1 THEN 'Lunes'
WHEN date_part('dow',marcaciones.fecha) = 2 THEN 'Martes'
WHEN date_part('dow',marcaciones.fecha) = 3 THEN 'Miercoles'
WHEN date_part('dow',marcaciones.fecha) = 4 THEN 'Jueves'
WHEN date_part('dow',marcaciones.fecha) = 5 THEN 'Viernes'
WHEN date_part('dow',marcaciones.fecha) = 6 THEN 'Sabado' END INTO diatexto;
IF dia=5 THEN
  select marcaciones.fecha + 1 into fechasabado;
  select marcaciones.fecha + 2 into fechadomingo;
  select
diatexto,marcaciones.fecha,marcaciones.d1,marcaciones.d2,marcaciones.d3,marcaciones.d4,
marcaciones.d5,marcaciones.d6,marcaciones.d7,marcaciones.d8,marcaciones.d9,marcaciones.d10,
marcaciones.d11,marcaciones.d12 UNION ALL
select
'Sábado'::text,fechasabado,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora
UNION ALL
select
'Domingo'::text,fechadomingo,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora,hora
INTO fila;
  raise notice '% fila',fila;
ELSE
  SELECT
diatexto,marcaciones.fecha,marcaciones.d1,marcaciones.d2,marcaciones.d3,marcaciones.d4,
marcaciones.d5,marcaciones.d6,marcaciones.d7,marcaciones.d8,marcaciones.d9,marcaciones.d10,
marcaciones.d11,marcaciones.d12 INTO fila;
END IF;
return next fila;
  END LOOP;
RETURN;
END;$BODY$
  LANGUAGE plpgsql VOLATILE

En la función identifico el día viernes para poder unir con union all los
dias sábados y domingos pero al hacer correr no me funciona

Lo que la función obtiene es esto:

"Lunes";"2016-02-01";"08:26:00";"12:31:00";"02:35:00";"06:34:00";"";""
"Martes";"2016-02-02";"08:35:00";"12:32:00";"02:33:00";"07:03:00";"";""
"Miercoles";"2016-02-03";"08:32:00";"12:32:00";"02:33:00";"06:40:00";"";""
"Jueves";"2016-02-04";"08:38:00";"12:32:00";"02:32:00";"06:45:00";"";""
"Viernes";"2016-02-05";"08:00:00";"11:32:00";"12:24:00";"05:27:00";"";""
"Miercoles";"2016-02-10";"08:42:00";"01:18:00";"01:52:00";"07:09:00";"";""
"Jueves";"2016-02-11";"08:37:00";"12:35:00";"02:34:00";"06:39:00";"";""
"Viernes";"2016-02-12";"08:32:00";"12:42:00";"02:33:00";"03:47:00";"05:08:00";"06:49:00"
"Lunes";"2016-02-15";"08:34:00";"12:33:00";"02:33:00";"06:49:00";"";""
"Martes";"2016-02-16";"08:40:00";"08:40:00";"12:35:00";"02:34:00";"06:35:00";""
"Miercoles";"2016-02-17";"08:38:00";"01:00:00";"02:24:00";"06:37:00";"";""
"Jueves";"2016-02-18";"08:32:00";"12:31:00";"02:34:00";"06:33:00";"";""
"Viernes";"2016-02-19";"08:34:00";"12:33:00";"02:34:00";"06:37:00";"";""
"Lunes";"2016-02-22";"08:36:00";"12:31:00";"02:32:00";"06:43:00";"";""
"Martes";"2016-02-23";"08:35:00";"11:31:00";"02:32:00";"06:50:00";"";""
"Miercoles";"2016-02-24";"08:33:00";"12:32:00";"02:33:00";"06:55:00";"";""
"Jueves";"2016-02-25";"08:34:00";"12:34:00";"02:32:00";"06:32:00";"";""
"Viernes";"2016-02-26";"08:38:00";"12:31:00";"02:34:00";"06:36:00";"";""
"Lunes";"2016-02-29";"08:39:00";"12:31:00";"02:35:00";"06:34:00";"";""

Desde ya gracias por su tiempo y cualquier consejo es bien recibido.

Responder a