Adicionar sábados y domingos del mes en una planilla de asistencia

From: Linder Poclaba Lazaro <linderlpl(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Adicionar sábados y domingos del mes en una planilla de asistencia
Date: 2016-03-31 20:27:48
Message-ID: CANv3jyaOHjrWQrveJp9FJHaxACg_=C5y3gtqVk8+bs+2nX12qA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2016-03-31 21:28:05 Re: consulta reinicia el motor de pgsql 9.5.1
Previous Message jaime soler 2016-03-31 12:27:50 Re: consulta sobre mensaje en el log