Re: [pgsql-es-ayuda] Adicionar sábados y domingos del mes en una planilla de asistencia

From: "Miguel Beltran R(dot)" <yourpadre(at)gmail(dot)com>
To: Linder Poclaba Lazaro <linderlpl(at)gmail(dot)com>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: [pgsql-es-ayuda] Adicionar sábados y domingos del mes en una planilla de asistencia
Date: 2016-04-07 15:01:33
Message-ID: CAEc04cp71UwE6AQjr=RCg3=p=4cZW+kuqbzCbDKrXN_dRQkZ6Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Te contesto entre lineas

2016-03-31 14:27 GMT-06:00 Linder Poclaba Lazaro <linderlpl(at)gmail(dot)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

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Kernel 2016-04-11 08:11:32 Drop function (plpsql)
Previous Message mauricio pullabuestan 2016-04-07 13:04:13 Re: Error en una funcion....