ViniciusConsultor / controlhoras

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

Nuevo Listado que me muestre detallado TOTAL HORAS CLIENTExSERVICIO #48

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Requerimiento:

Necesito un listado que me muestre detallado TOTAL HORAS CLIENTExSERVICIO y un 
total general.

Se adjunta planilla excel de ejemplo de listado.

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

Attachments:

GoogleCodeExporter commented 8 years ago

Original comment by juanga...@gmail.com on 19 Apr 2011 at 3:54

GoogleCodeExporter commented 8 years ago

Original comment by juanga...@gmail.com on 19 Apr 2011 at 3:54

GoogleCodeExporter commented 8 years ago
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

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
Una Hora y media resolverlo.

Original comment by juanga...@gmail.com on 21 Apr 2011 at 3:07

GoogleCodeExporter commented 8 years ago
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