Primero voy a describir las tablas.
Tabla "Excel" (Tabla donde se cargan los datos del reloj)
- Id
- cedula
- nombre
- hora (del formato dicho anteriormente)
- Forma_Ingreso (Huella Digital o Manual)
- entrada ( I o O Int - Out en otras palabras)
- fecha
De esta table cree 2 vistas para separar las entradas y las salidas
v_entrada
v_salida
Luego de esto cree otra vista que seria un intersect de las dos para sacar los registros que tienen salida y entrada y no solo entrada o solo salida.
Ejemplo si hay un registro de entrada del día 05-08-2014 pero no hay salida para este día no se toma en cuenta.
Aquí surge mi primer problema ya que un empleado puede entrar a las 18:00:00 del día 05-08-2014 y salir a las 00:00:00 del día 06-08-2014.
luego para calcular la diferencia de tiempo entre entrada y salida hago lo siguiente
Código PHP:
Ver original
function RegistrarHorarios(){ $datos=Seleccionar("v_todo","*","fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY cedula"); $cedula; $id; $horastrab; $texto = ""; $cedula = $row['cedula']; $datos2=Seleccionar("empleados","*","Cedula=".$cedula.""); $id= $row2['IdEmpleado']; } if($id==''){ }else{ $datos3=Seleccionar("empleadosector a1, sector a2","*","a1.IdEmpleado=".$id." AND a1.IdSector=a2.IdSector"); $horastrab = $row2['Horas']; break; } $datos5=Seleccionar("v_todo","fecha, SEC_TO_TIME(SUM(TIME_TO_SEC(TotalHoras))) AS Total","cedula=".$cedula." AND fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY fecha"); $horastrabajadas = $row3['Total']; //return "Cedula ". $cedula ." id ". $id ."Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas; $diferenciatiempo = Seleccionar("","TIMEDIFF('".$horastrabajadas."','".$horastrab."') AS Horas",""); $horasdetrab2 = $row2['Horas']; $horasccte = Seleccionar("ccte","DiferenciaTiempo","Id_Empleado=".$id); $horaccte = $ccte['DiferenciaTiempo']; //$texto = $texto." Cedula ". $cedula ." id ". $id ." Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas."DIFERENCIA ".$horasdetrab2." CCTE ".$horaccte; $actualizoccte=Modificar("ccte","DiferenciaTiempo=ADDTIME('".$horaccte."','".$horasdetrab2."')","Id_Empleado=".$id); break 3; } } } }else{ $datos4=Seleccionar("empleadosector_rot a1, sector_rot a2","*","a1.IdEmpleado=".$id." AND a1.IdSector_Rot=a2.IdSector_Rot"); $horastrab = $row2['Horas']; break; } $datos5=Seleccionar("v_todo","fecha, SEC_TO_TIME(SUM(TIME_TO_SEC(TotalHoras))) AS Total","cedula=".$cedula." AND fecha BETWEEN '".$_POST['fecha1']."' AND '".$_POST['fecha2']."' GROUP BY fecha"); $horastrabajadas = $row3['Total']; //return "Cedula ". $cedula ." id ". $id ."Horas de trab ".$horasdetrab." horas trabajadas ".$horastrabajadas; $diferenciatiempo = Seleccionar("","TIMEDIFF('".$horastrabajadas."','".$horastrab."') AS Horas",""); $horasdetrab2 = $row2['Horas']; $horasccte = Seleccionar("ccte","DiferenciaTiempo","Id_Empleado=".$id); $horaccte = $ccte['DiferenciaTiempo']; //$texto = $texto." Cedula ". $cedula ." id ". $id ." Horas de trab ".$horastrab." horas trabajadas ".$horastrabajadas."DIFERENCIA ".$horasdetrab2." CCTE ".$horaccte; $actualizoccte=Modificar("ccte","DiferenciaTiempo=ADDTIME('".$horaccte."','".$horasdetrab2."')","Id_Empleado=".$id); break 3; } } } } } } return "Horas Registradas"; }
El tema es que me calcula las horas pero si tengo 4 registros 2 I y 2 O siendo de el siguiente modo.
1) I
2) O
3) I
4) O
Me calcula el tiempo de 1 con el 2 y del 3 con el 4 (esto esta bien) y luego del 1 con el 4 y el 3 con el 2 en otras palabras todas las combinaciones, alguien me puede ayudar con estos dos problemas?
Gracias.