Buenas, hace un tiempo me dieron una solución para calcular la diferencia de tiempo entre 2 fechas de formato (dd-mm-yyyy hh-mm-ss) que me sirvió pero tengo un problema.
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 originalfunction 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.