Sistema de Entrada/salida de Usuarios

Hola amig@s programadores y fiel lector de la página (aha si) jaja, en está ocasión elabore la semana pasada un proyecto para unas amigas que andan haciendo quien sabe que cosas en el IET, y me pidieron un programa en el cual se pudiera dar de alta un empleado, se pudiese registrar su hora de entrada y salida, claro la hora de entrada con 30 minutos de tolerancia y si no el empleado llega tarde marcarle un retardo y llegando a los 3 retardos no puede registrarse el usuario hasta que no pase a recursos humanos, la verdad no tenia ni la más mínima idea de como realizar este proyecto, pero con un poco de alcohol, una lampara que me distraiga y buena música todo es posible (y un poco de coca claro); no creo que la solución que ofrezco sea la mejor pero quizá y a alguien le ayude en algún proyecto escolar o darse alguna idea en algún programa similar para tener una idea de como resolver cierto problema, y sirve también que yo mejoro con sus comentarios 🙂

PD: Sólo comentare las partes del código que me parecen un poco complicado de entender o que sólo yo me entiendo jaja, lo demás lo investigan o hacen pruebas vale?

Iniciamos en la página principal
[html]
<script type="text/javascript">
var pagina="admin.php"
var paginaAux="empleado.php"
function show_prompt()
{
var name=prompt("Introduce tu nombre","Instituto Electoral de Tlaxcala");
if (name!=null && name!="" && name=="h4hxg5hxg5Ce8Dh7++")
{
location.href=pagina
}
else location.href=paginaAux
}
</script>
<body onLoad="show_prompt()">
[/html]
en este código estamos indicando que si aciertan a la contraseña «h4hxg5hxg5Ce8Dh7++» irán a la sección de administrador en caso contrario a la sección para los empleados y esto se abre en un cuadro de dialogo desde javascript el cual lo mandamos a llamar dentro del con la instrucción [javascript]onLoad="show_prompt()"[/javascript];
Ahora en la página de Empleado mostramos un reloj hecho en JavaScript pero lo interesante acá es:
[html]
<form name="size">
<input type="text" size="11" name="Clock" readonly="readonly" style="border: 3px solid #D0A9F5; padding: 2px 5px 2px 5px;">
</form>
[/html]
la instrucción readonly=»readonly» la cual deshabilita el cuadro de entrada del formulario (input) y si todo va bien seleccionemos la opción que seleccionemos nos enviara al archivo checar; en el cual si presionamos el boton1 nos envía al proceso para registrar la entrada y salida;
[php]
date_default_timezone_set(‘America/Mexico_City’);
/*con esta instrucción establecemos la zona horaria de la Ciudad de México si no activamos esto tendremos la hora de nuestro servidor y muchas ocasiones varia muchísimo de nuestra zona horaria.*/
echo date(‘H:i:s’);
[/php]
[php]
if($reg[‘Retardos’]<3){/*si los retardos son menores a 3*/
$ban=false;
if($reg[‘Temporal’]==0){ /*indica entrada */
$ban=true;
}else if($reg[‘Temporal’]==1){ /*indica salida */
$ban=false;
}

if($entrada<=$reg[‘Entrada’] && $ban==true){
/*si la hora de entrada aún esta permitida (osea 30 minutos de tolerancia) y si es la entrada "ban"*/
mysql_query("update empleado set Temporal=’1′ where Id=$reg[Id] " ,$conexion) or die("Problemas en el select: ".mysql_error());
/*actualizamos la tabla empleado en el campo Temporal (este nos indica si es entrada o salida) donde el id sea igual al id obtenido*/
}
else if($entrada>=$reg[‘Entrada’] && $ban==true){
/*si es la entrada "ban", pero la hora de entrada excede el limite permitido*/
$addRet=$reg[‘Retardos’]+1; /*sumamos un retardo*/
mysql_query("update empleado set Retardos=$addRet, Temporal=’1′ where Id=$reg[Id] " ,$conexion) or die("Problemas en el select: ".mysql_error());
/*actualizamos la tabla empleado en los campos Retardos y Temporal*/
}
else if($ban==false){
/*ultimo caso es la salida*/
mysql_query("update empleado set Temporal=’0′ where Id=$reg[Id] " ,$conexion) or die("Problemas en el select: ".mysql_error());
}
[/php]
y si los retardos ya son mayores a 3 no permite el registro de la entrada y marca un mensaje que hay que pasar a Recursos Humanos.
y si oprimen la opción de consultar sólo mostramos su nombre y apellidos con el número de retardos.
Y en la sección de administrador tenemos dos opciones, la primera la cual es para regresar los retardos a 0, lo curioso acá es que el formulario y el proceso están dentro del mismo programa y para hacer que esto funcione sólo hay que incluir lo siguiente:
[html]
<form action="<?php echo $_SERVER[‘PHP_SELF’]; ?>" method="POST"enctype="multipart/form-data" name="form1" >
[/html]
lo que va dentro del action es lo importante no pidan explicación porque no tengo la mínima idea, pero funciona y nos sirve cuando no queremos realizar tantas páginas y andar enviando de una a otra y mostramos los resultados dentro de la misma página de la consulta.
Y la parte complicada o que más me agrado a mi (malditas drogas) es la de registrar al usuario y bueno comprendan mi emoción es de las primeras ocasiones que realizo esto jaja.
La fecha de nacimiento;
[html]
<p>Fecha de Nacimiento: &nbsp; &nbsp;
Año:
<select name="ano" style="border: 3px solid #D0A9F5; padding: 2px 5px 2px 5px;">[/html]
[php]
<?php
for($a=2010;$a>1899;$a–){
/*colocamos en el option del select los años */
echo ‘<option value="’.$a.’" >’.$a.'</option>’;
}
?>[/php]
[html]</select>[/html]
y con este pequeño código nos olvidamos de poner uno por uno de los años que sería un relajo total y muy cansado, con esto optimizamos el código del formulario (bendito php) y ahora cuando lo registramos al empleado en el archivo Registrado es donde:
[php]
$hora=$_POST["hEntrada"];
$min=$_POST["mEntrada"];

$auxMin=$min+30;/*agregamos 30 minutos de tolerancia*/
if($auxMin>=60 && $hora<=23){
/*si los minutos suman mas de 60 no puede ser asi que incrementamos una hora y restamos al numero total de minutos 60 y obtenemos los minutos pero en una nueva hora*/
$hora=$hora+1;
$min=$auxMin-60;
}
else if($auxMin>=60 && $hora>=24){
$hora=00;
$min=$auxMin-60;
}
else{
$hora=$hora;
$min=$auxMin;
}
[/php]
y ahora generaremos un código único de empleado (que no sea el id ya que sería demasiado fácil saberlo).
[php]
$codi="";
$codi=$codi.$numero; /*id*/
$codi=$codi.strtoupper($ap{0});/*primera letra del apellido paterno*/
$codi=$codi.strtoupper($am{0});/*primera letra delapellido materno*/
$codi=$codi.strtoupper($nombre{0});/*primera letra del nombre*/
$codi=$codi.$aa{2};/*3er digito del año*/
$codi=$codi.$aa{3};/*4to digito del año de nacimiento*/
$codi=$codi.$mm{0};/*primer digito del mes*/
$codi=$codi.$mm{1};/*segundo digito del mes*/
$codi=$codi.$dd{0};/*primer digito del día*/
$codi=$codi.$dd{1};/*segundo digito del día*/
[/php]

Y con esto ya tenemos nuestros Sistema de Registro de Empleado, registrar su hora de entrada y salida y tomarle en cuenta retardos

(si que no sea flojo y que se levante pronto).
iet1 (1)

Espero les sea de gran ayuda este proyecto y les sirva de algo si quiera de mal ejemplo o cosas que no hay que hacer borracho jaja y que posiblemente algún código les sea de utilidad.

PD02: por cierto la base de datos se llama iet, y la tabla empleado