Te contesto entre lineas

2016-03-31 14:27 GMT-06:00 Linder Poclaba Lazaro <linder...@gmail.com>:

> 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;
>

este tipo de lineas "WHEN date_part('dow',marcaciones.fecha) = 6" deberia
ser "when dia=6" usando tu lógica


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;
>

aqui tienes un raise notice, ¿en el log de postgres te aparece?


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
>

Por curiosidad ¿Para que quieres sabados y domingos si no tienes el campo
marcaciones?



> 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.
>
>


-- 
________________________________________
Lo bueno de vivir un dia mas
es saber que nos queda un dia menos de vida

Reply via email to