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
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:
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
simplemente genial!! amigo por favor.. me podrias colaborar con el codigo completo de este ejercicio, lo necesito para mi empresa… te agradezco infinitamente..
Hola amigo gracias por tu comentario y el código está comprimido en un *.zip en el enlace de la parte de abajo del articulo que dice: Instituto Electoral de Tlaxcala.
Pero te lo pego acá para que lo cheques es:
http://puraslineas.com/blog/wp-content/uploads/2011/01/iet1.zip
Saludos cordiales y espero te sirva, cualquier duda dejas tu comentario.
bueno si sirve pero esta muy sencilla y no guarda las horas de entradas y salida
Good site! I truly love how it is simple on my eyes and the data are well written. I am wondering how I might be notified whenever a new post has been made. I’ve subscribed to your RSS which must do the trick! Have a nice day!
quisiera saber cuale fueron la tablas que utilizastes con su respectivos campos gracias
Hola en el artículo en la posdata 2 se especifica:
«PD02: por cierto la base de datos se llama iet, y la tabla empleado» al descargar el archivo «iet.zip» hay que crear una base que se llame iet, e importamos la base de datos que va comprimida en un zip llamada «empleado.iet.zip» y ya automáticamente cargará los campos.
Saludos y cualquier cosa estoy para ayudarte. 🙂
Buen dia! muchas gracias por explicarnos el codigo 😀
yo estoy trabajando en un sistema de control de entras y salidas asta ahora ya tengo la parte de registrar a los usuarios pero me falta la parte donde el usuario llega y se registra y que en automático ponga la entrada y a la ora de volver a registrarse tenga su salida.. no tendras un codigo como ese
Pues el código que publique en este articulo hace lo que pides, quizá sólo seria cosa de modificarlo en base a tu base de datos, saludos y gracias por el comentario.
Y como le podria hacer para guardar las entradas y las salidas con la hora y el empleado en un tabla aparte??
u.u
En el archivo «checar.php» de la línea 12 a la 19 hace la conexión, ahi deberías cambiar quizá la base de Datos, y el nombre de la tabla la cual debería de tener los campos «entrada» y «salida» tipo Date, de la línea 42 a 48 se registra la entrada sin problemas y sin retardos, hab´ria que actualizar la línea del update, tenemos algo así:
update empleado set Temporal=’1′ where Id=$reg[Id]
Lo correcto debería de quedar:
update empleado set Temporal=’1′, entrada=$entrada where Id=$reg[Id]
La varibale entrada la obtenemos de la línea 31.
De las líneas 49 a 56 pasa algo similar solo que ahi se registra un retardo más, y quedaría:
update empleado set Retardos=$addRet, entrada=$entrada, Temporal=’1′ where Id=$reg[Id]
Y de las líneas 57 a 61 indica la salida ahi quedaría similar solo que ahora hacemos el update sobre el campo «salida»
update empleado set Temporal=’0′, salida=$entrada where Id=$reg[Id]
Espero te sea util toda está información.
Saludos 🙂
Gracias por la ayuda y tomarte tu tiempo en explicar !
Hola buen día me podrían ayudar en esa parte, por que ya me atore un poco
Muchas Gracias me sirvió mucho Graciaas
hola muy buen codigo, pero podrias explicar la parte donde el sistema reconoce cuando es una checada de entrada y cuando es una checada de salida.. gracias saludos
Hola Antonio, en la sección de código:
«$ban=false;
if($reg[‘Temporal’]==0){ /*indica entrada */
$ban=true;
}else if($reg[‘Temporal’]==1){ /*indica salida */
$ban=false;
}
»
Simplemente en el campo temporal indicamos que es, si una entrada o una salida y actualizamos la variable ban, para los demás procesos poder trabajar con ella.
Saludos cordiales 🙂
pero me parece que esa instrucción funciona solo si se cumple la condición del if de retardos?
yo podría utilizarla independiente sin que me contara los retardos?
que solo marque hr de entrada y hr de salida no importando a que hr chequen? ya que si la separo de su if no me funciona.
gracias por tu tiempo y disculpa mi ignorancia. 🙂
Hola no te preocupes, del sistema en el archivo «checar.php» las líneas 33, 62, 63 a 67 son parte del if de retaros, deberías de eliminar esa parte y además de que obviamente de las líneas 49 a 56 deberás de quitar la parte de retardos ya que es el método de los retardos, y en el elseif de la 57 a la 61 es el encargado de la salida y ocupando la variable «ban» que se declaro en la línea 35 juntos a sus ifs correspondientes.
Espero te sea util es´ta información., saludos 🙂
Gracias GianBros. Ya quedo perfecto, en mi tesis de titulacion pondre tu nombre en los agradecimientos jajajaja espero nos sigas ayudando a los que vamos empezando. saludos 🙂
Que tal estoy interesada en probar tu sistema pero el link no funciona lo podrias volver a subir.
Disculpa Sasa, ya se encuentra nuevamente activo el link, gracias por notificar 🙂
muchas gracias super el codiogo me sirve para mi proyecto mil gracias