> Faqs > Idea para programación en PHP

Idea para programación en PHP

Hola. Mi caso es un poco particular, y no sé por dónde empezar el desarrollo. Perdón por la extensión. Dispongo de una cuadrícula de 18 columnas por 8 filas (que pueden ser variables, pero empecemos por un caso). Las columnas representan turnos de trabajo en tiempo (18 turnos de 20 minutos cada uno, esta info no es útil para la programación). Las filas son el número de trabajadores que tenemos en la empresa. Se trata de distribuir a los trabajadores en los turnos de trabajo, pero teniendo en cuenta unos parámetros iniciales, unas condiciones previas, dependiendo del trabajador y el trabajo a realizar. 1º. No todos los trabajadores hacen el mismo número de turnos, hay algunos que hacen 12, otros 11 y otros 10 (estos números de turnos sí que pueden variar). 2º. Hay trabajadores que ejecutan un turno concreto del trabajo, es decir, un trabajador tiene asignado los turnos 1,5,6,8,9,11,18 y son invariables, pero le faltan por ejemplo 5 turnos por cubrir. Hay otros trabajadores que por ejemplo hacen el 1,8,9 sólamente, y le faltan otros turnos por cubrir. 3º. Durante los primeros 12 turnos, el trabajador NO puede realizar más de 3 turnos seguidos, como mucho 3 seguidos. Sin embargo después del turno nº 12, sólo puede trabajar 2 turnos seguidos como mucho. 4º. Los turnos fijos son 7, pero también pueden variar dependiendo del trabajador. A los más productivos se le dan los 7 turnos fijos, pero a los menos productivos se les asigna aleatoriamente alguno de esos 7 turnos. 5º. Sólamente puedo tener a la vez 5 trabajadores en el mismo turno, en el turno 1 sólo puede haber 5 trabajadores y así con todos los turnos. La pregunta es cómo plantear el caso para programar en PHP para que me distribuya de manera automática y aleatoria los trabajadores con sus turnos de trabajo (aleatoria exceptuando los puestos fijos que comento antes). Pongo un ejemplo por si no me he hecho entender: Trabajador 1: realiza 12 turnos, y tiene 7 turnos fijos (en este caso son todos los fijos - 1,5,6,8,9,11 y 18) Trabajador 2: realiza 12 turnos, y tiene 7 turnos fijos (en este caso son todos los fijos - 1,5,6,8,9,11 y 18) Trabajador 3: realiza 11 turnos, y tiene 5 turnos fijos (asignar aleatoriamente 5 turnos de los 7 posibles) Trabajador 4: realiza 11 turnos, y tiene 5 turnos fijos (asignar aleatoriamente 5 turnos de los 7 posibles) Trabajador 5: realiza 11 turnos, y tiene 4 turnos fijos (asignar aleatoriamente 4 turnos de los 7 posibles) Trabajador 6: realiza 11 turnos, y tiene 3 turnos fijos (asignar aleatoriamente 3 turnos de los 7 posibles) Trabajador 7: realiza 11 turnos, y tiene 2 turnos fijos (asignar aleatoriamente 2 turnos de los 7 posibles) Trabajador 8: realiza 11 turnos, y tiene 2 turnos fijos (asignar aleatoriamente 2 turnos de los 7 posibles) Para asignar los turnos tengo que tener en cuenta que: 1º. En un mismo turno sólo puede haber 5 trabajadores. 2º. Antes del turno 12 ningún trabajador puede trabajar más de 3 turnos seguidos, es decir, 3 máximo. 3º. Después del turno 12 ningún trabajador puede trabajar más de 2 turnos seguidos, es decir, 2 máximo. Esto es lo que tendría que hacer la programación. Mil gracias. Por la lectura si has llegado hasta aquí. Cualquier idea es bien recibida.

Respuestas

Solo necesitas javascript para que te haga la validación. Empieza por crear una grilla de las dimensiones que has dicho y luego crea solo un único trabajador. Con js crea funciones con las reglas que deseas: Si seleccionó el primer y segundo turno, no puede escoger el tercero. si selecciono, el tercero y cuarto y quiere seleccionar el primero y segundo, debe "deseleccionar" el tercero, etc. Ya una vez que hayas terminado con el primero empleado, insertas un segundo empleado y pones las mismas funciones js a sus celdas por filas, pero ahora tendrás que tomar en cuenta las columnas. Osea, más js. XD Luego inténtalo con un tercer empleado y aplicas los mismos js. Repite este paso hasta el 5 empleado. Controla las reglas para las columnas. Si funciona bien, inserta los 3 empleados restantes juntos y pruébalo. No es tan complicado como parece pero creo que necesitarás concentración y mucha paciencia porque el js te puede dar complicaciones. Ya una vez que tengas esta parte resuelta recién te preocupas por el php y lo metes en el juego y si quieres lo validas ahí si te da el tiempo y crees que es necesario. Uhmmm, en realidad, solo es trabajoso pero no complicado. Un consejo, trabálo con checkboxes y no le apliques ningún diseño ni estilo hasta que hayas terminado de programar. Trabájalo en blanco y negro. Ya después lo decoras. Saludos,

Eric Valera