ViniciusConsultor / controlhoras

Automatically exported from code.google.com/p/controlhoras
1 stars 0 forks source link

Nuevo Listado Total Funcionario Detallado Por Mes #50

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Requerimiento:

Pedido de Camilo:
Necesito un listado que me muestre Total Funcionario Detallado Por Mes, te 
ADJUNTO UN EJEMPLO como debería ser.

Original issue reported on code.google.com by juanga...@gmail.com on 19 Apr 2011 at 6:35

Attachments:

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
Esta consulta resuelve los datos requeridos.
Es media compleja porque tiene varios IF Anidados y CASE dentro de IF. Es 
similar a la del  issue 48 , pero con un IF mas de si el FechaCorrespondiente 
es feriado o no.

SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso, 
emp.FechaBaja,
-- Hs Comunes
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /* FERIADOS */ 0, /* NO FERIADOS */ IF 
(cargo.CobraHsExtras=1, CASE WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN TIMEDIFF(hge.HoraSalida,hge.HoraEntrada) WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, 
TIMEDIFF(hge.HoraSalida,hge.HoraEntrada)))))) AS CHAR) AS SENCILLAS_X1
, 
-- Hs Extras (2X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ 0, /* NO FERIADOS */ IF 
(cargo.CobraHsExtras=1,CASE WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN 0 ELSE 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) END, 0))))) AS CHAR) AS EXTRAS_X2
,
-- Feriado Hs Comunes (2X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ IF (cargo.CobraHsExtras=1, 
CASE WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN TIMEDIFF(hge.HoraSalida,hge.HoraEntrada) WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, 
TIMEDIFF(hge.HoraSalida,hge.HoraEntrada)), /* NO FERIADOS */ 0)))) AS CHAR) AS 
FERIADO_TRABAJADO_X2
,
-- Feriado Hs Extras (2.5X)
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(IF(MAKEDATE(2000,DAYOFYEAR(hge.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*FERIADOS*/ IF 
(cargo.CobraHsExtras=1,CASE WHEN 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) <0 THEN 0 ELSE 
TIMEDIFF(TIMEDIFF(hge.HoraSalida,hge.HoraEntrada),MAKETIME(cargo.CantidadHsComun
es,0,0)) END, 0),/* NO FERIADOS */ 0)))) AS CHAR) AS FERIADO_TRABAJADO_EXTRAS_X3
FROM horasgeneradasescalafon hge, Empleados emp, TiposCargos cargo 
WHERE hge.FechaCorrespondiente between 'FECHADESDE' AND 'FECHAHASTA' AND 
emp.NroEmpleado = hge.NroEmpleado AND emp.IdCargo = cargo.IdCargo AND 
hge.NroEmpleado not in (9998,9999) 
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso, 
emp.FechaBaja

Original comment by juanga...@gmail.com on 22 Apr 2011 at 3:34

GoogleCodeExporter commented 8 years ago
Tiempo: 1 hora y media.

Original comment by juanga...@gmail.com on 22 Apr 2011 at 3:56

GoogleCodeExporter commented 8 years ago
Se corrige listado:

SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso, 
emp.FechaBaja,
/* NO FERIADOS */
/*HS COMUNES*/ 
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) not in (SELECT fecha FROM feriados), IF (cargo.CobraHsExtras=1, 
/*EXTRAS*/CASE WHEN 
TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN 
HorasTmp.Horas WHEN 
TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN 
MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) 
AS SENCILLAS_X1
, /*HS EXTRAS (X2)*/
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) not in (SELECT fecha FROM feriados), IF(cargo.CobraHsExtras=1,CASE WHEN 
TIMEDIFF
(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) 
ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) 
END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS EXTRAS_X2
,
/* FERIADOS */
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados), /*HS COMUNES FERIADOS (X2)*/ 
 IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS FERIADO_TRABAJADO_X2,
/*HS EXTRAS FERIADOS (X2_5)*/
sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondi
ente)) in (SELECT fecha FROM feriados),IF (cargo.CobraHsExtras=1,CASE WHEN 
TIMEDIFF
(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) 
ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) 
END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS FERIADO_TRABAJADO_EXTRAS_X2_5
FROM 
(SELECT hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente, 
sec_to_time(SUM(time_to_sec(TIMEDIFF(hgeaux.HoraSalida,hgeaux.HoraEntrada)))) 
as Horas from horasgeneradasescalafon hgeaux WHERE hgeaux.FechaCorrespondiente 
between 'FECHADESDE' and 'FECHAHASTA' 
AND hgeaux.NroEmpleado not in (9998,9999)
AND hgeaux.Descanso=0
group by hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente) AS HorasTmp, 
Empleados emp, TiposCargos cargo
WHERE
emp.NroEmpleado=HorasTmp.NroEmpleado
and emp.IdCargo=cargo.IdCargo and cargo.TipoFacturacion='JORNALERO'
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido

Original comment by juanga...@gmail.com on 27 Jun 2011 at 12:37

GoogleCodeExporter commented 8 years ago
Se corrige nuevamente, queda con la misma logica resuelta que el listado que se 
envia al estudio contable.

SELECT emp.NroEmpleado, emp.Nombre, emp.Apellido, emp.FechaIngreso, 
emp.FechaBaja,
 /* NO FERIADOS */ /*HS COMUNES*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) not in (SELECT fecha FROM feriados), IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS CHAR) AS SENCILLAS_X1, /*HS EXTRAS (X2)*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) not in (SELECT fecha FROM feriados), IF(cargo.CobraHsExtras=1,CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS CHAR) AS EXTRAS_X2, /* FERIADOS */ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) in (SELECT fecha FROM feriados), /*HS COMUNES FERIADOS (X2)*/ IF (cargo.CobraHsExtras=1, /*EXTRAS*/CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) <0 THEN HorasTmp.Horas WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) >= 0 THEN MAKETIME(cargo.CantidadHsComunes,0,0) END, HorasTmp.Horas),MAKETIME(0,0,0))))) AS CHAR) AS FERIADO_TRABAJADO_X2, /*HS EXTRAS FERIADOS (X2_5)*/ CAST(sec_to_time(SUM(time_to_sec(IF(MAKEDATE(2000,DAYOFYEAR(HorasTmp.FechaCorrespondiente)) in (SELECT fecha FROM feriados),IF (cargo.CobraHsExtras=1,CASE WHEN TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) < 0 THEN MAKETIME(0,0,0) ELSE TIMEDIFF(HorasTmp.Horas,MAKETIME(cargo.CantidadHsComunes,0,0)) END,MAKETIME(0,0,0)),MAKETIME(0,0,0))))) AS CHAR) AS FERIADO_TRABAJADO_EXTRAS_X2_5
FROM 
(SELECT hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente, 
sec_to_time(SUM(time_to_sec(TIMEDIFF(hgeaux.HoraSalida,hgeaux.HoraEntrada)))) 
as Horas from horasgeneradasescalafon hgeaux WHERE hgeaux.FechaCorrespondiente 
between 'FECHADESDE' and 'FECHAHASTA' 
AND hgeaux.NroEmpleado not in (9998,9999)
AND hgeaux.Descanso=0
group by hgeaux.NroEmpleado,hgeaux.FechaCorrespondiente) AS HorasTmp, 
Empleados emp, TiposCargos cargo
WHERE
emp.NroEmpleado=HorasTmp.NroEmpleado
and emp.IdCargo=cargo.IdCargo and cargo.TipoFacturacion='JORNALERO'
GROUP BY emp.NroEmpleado, emp.Nombre, emp.Apellido

Original comment by juanga...@gmail.com on 27 Jun 2011 at 3:17