Foros del Web » Programando para Internet » PHP »

Trabajar con horarios

Estas en el tema de Trabajar con horarios en el foro de PHP en Foros del Web. En primer lugar hola y gracias por tu tiempo. Describo un poco la situación: Imagina un negocio, dicho negocio tiene un número variable de trabajadores. ...
  #1 (permalink)  
Antiguo 16/03/2009, 21:39
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Trabajar con horarios

En primer lugar hola y gracias por tu tiempo.

Describo un poco la situación:
Imagina un negocio, dicho negocio tiene un número variable de trabajadores. El horario del negocio se establece en función de intersección de horarios de cada empleado.

He pensado dos formas de solucionar esta situación:
1) Almacenando los intervalos de horario de cada empleado en un campo "horario" de la tabla "empleados" (BD mysql) como si fuera un array encadenado, tal que así:
Código:
horario_array (Lunes_array(intervarlo1_array(09:30,14:00),intervarlo2_array(17:30,16:00)) Martes, Miercoles, Jueves, Viernes, Sabado, Domingo)
Soy consciente de que la sintaxis quizás no es correcta (muy posiblemente), mi interés es que se entienda, así que explico un poco la intención: Cada uno de los parámetros del array horario es un día de la semana, cada uno de ellos a su vez contiene otro array cuyos parámetros son los intervalos del horario de ese trabajador ese día de la semana y a su vez estos "intervalos" son arrays de dos parámetros (hora de inicio y de fin del intervalo). Así que si por ejemplo accedemos a Lunes[0] nos devolvería el array de intervalos de ese día, si accedemos a Lunes([0],[0]) nos devolvería el primer intervalo del Lunes y de forma análoga si accediéramos a: Lunes([0],[0],[0]) nos devolvería a que hora se inicia el primer intervalo del lunes.

2) Creando una tabla en la BD cuyas columnas fueran los días de la semana y cuyas filas fueran los intervalos de tiempo del día, como unidad de tiempo tendríamos 5 minutos (así que en este eje tendríamos 288 "filas") de forma que marcando un valor 1 en la intersección de 09:05-09:10 con Lunes, otro con 09:10-09:15 en el mismo día, etc.. se entendería que la duración del intervalo en el que esa persona trabaja son las celdas de la tabla donde hay un 1 y resumiendo sería de 09:05 a 09:15.

Mi duda es la siguiente... obviamente luego hay que trabajar con todos estos valores y no se que solución es la más eficiente... primero pensé que la 1), porque solo sería añadir un campo más a la tabla de empleados, pero luego vi que quizás el algoritmo para leer ese array y hacer "cálculos", véase comprobar si una hora:minutos dados entran dentro del horario de esa persona, por ejemplo... podría ser bastante confuso de desarrollar. Así que pensé en la opción 2), el problema que tiene es que habría una tabla por cada empleado y claro, teniendo en cuenta que no hablo de un solo negocio, este podría representar un montón de tablas.

Estoy abierto a nuevas ideas, consejos o sugerencias.

PD: Como no se cual es el lugar adecuado para este post, dada la naturaleza ambigua de la duda, lo posteo también en la sección de mysql.
  #2 (permalink)  
Antiguo 17/03/2009, 05:42
 
Fecha de Ingreso: agosto-2008
Mensajes: 218
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Trabajar con horarios

Con arrays te vas a liar bastante más y te llevará mucho más trabajo.
Con base de datos es más ordenado pero necesitarías definir cada plantilla (288*nºdías) para cada empleado.

Yo creo que lo mejor sería un fichero de texto, sólo tendrías que indicar con unos y ceros los intervalos (288*nªdías en total) y leyendo el fichero y con algún script podrías leer los datos fácilmente (y más rápido). En la base de datos indicar qué fichero tiene que leer para cada empleado. Sólo tendrías una fila por empleado y un fichero de texto (que además te ocuparía bastante menos espacio en memoria) y dedicar en la programación web a mostrar los resultados obtenidos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:44.