Closed GoogleCodeExporter closed 8 years ago
Original comment by juanga...@gmail.com
on 19 Apr 2011 at 3:54
Original comment by juanga...@gmail.com
on 19 Apr 2011 at 3:54
Se toman como las HorasComunes y las HorasExtras del listado como la suma de hs
comunes y hs extras de los funcionarios que cubrieron el servicio en el rango
de fechas dado.
La consulta SQL que resuelve esto es un poco larga porque se suma determinado
valor si el funcionario tiene un cargo que cobra HsExtras o si no cobra Hs
Extras, por esto hay un IF cobraHsExtras y dentro del IF un case cuando
Diferencia Hs es < a CantidadHsComunes del Cargo y cuando es mayor.
SELECT cli.NumeroCliente,cli.Nombre,ser.NumeroServicio,ser.Nombre,
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(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 CantidadHorasComunes,
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(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 CantidadHorasExtras FROM
horasgeneradasescalafon hge, Clientes cli, Servicios ser, Empleados emp,
TiposCargos cargo WHERE hge.NumeroCliente=cli.NumeroCliente AND
hge.NumeroServicio=ser.NumeroServicio AND cli.NumeroCliente = ser.NumeroCliente
AND 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 cli.Nombre, ser.Nombre
El total General no se puede mostrar como resultado de la misma consulta, por
lo que no se puede agregar en el listado.
Original comment by juanga...@gmail.com
on 21 Apr 2011 at 3:00
[deleted comment]
Una Hora y media resolverlo.
Original comment by juanga...@gmail.com
on 21 Apr 2011 at 3:07
insert a BD:
insert into consultasclientes values (0,"TOTAL HS CLIENTExSERVICIO","Devuelve
la sumatoria de HsComunes y HsExtras por CLIENTE/SERVICIO de todos los
funcionarios que cubrieron el servicio en un rango de fechas dado. Las Hs
Extras se resuelven de acuerdo al Cargo que tiene los Funcionarios que
cubrieron.","SELECT cli.NombreFantasia as CLIENTE,ser.Nombre as SERVICIO,
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(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 HORASCOMUNES,
CAST(SEC_TO_TIME(SUM(TIME_TO_SEC(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 HORASEXTRAS FROM horasgeneradasescalafon hge,
Clientes cli, Servicios ser, Empleados emp, TiposCargos cargo WHERE
hge.NumeroCliente=cli.NumeroCliente AND hge.NumeroServicio=ser.NumeroServicio
AND cli.NumeroCliente = ser.NumeroCliente AND 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
cli.Nombre, ser.Nombre",1);
Original comment by juanga...@gmail.com
on 21 Apr 2011 at 3:52
Original issue reported on code.google.com by
juanga...@gmail.com
on 19 Apr 2011 at 3:47Attachments: