Programación de recursos

Tengo que hacer esta tarea de programación que requiere mucho tiempo (humano), tengo:

  • un conjunto de profesores
  • Un conjunto de sesiones en una semana.

Y necesito organizar esto:

  • Algunas semanas no enseñamos (vacaciones)
  • A lo largo de un año los profesores tienen que impartir la misma cantidad de sesiones
  • Algunos profesores tienen restricciones adicionales, como "No puedo dar clases los lunes" o "Solo puedo dar clases los lunes y martes"...

No sé exactamente qué debo buscar, encontré herramientas de programación de trabajos para HPC como SLURM, pero no quiero modificarlas tanto. Desde entonces, he estado escribiendo pequeños scripts de Python no tan buenos para hacer eso. No tengo presupuesto y preferiría que se ejecute en Linux (o basado en web). Obviamente, el calendario de Google no es suficiente, y también he estado probando otras herramientas como ProofHub, pero no puede realizar la asignación de recursos. Creo que no es tan difícil (básicamente pones a los profesores en una cola y les asignas una política de turnos rotativos, eso es lo que he estado haciendo desde entonces). Quiero algo ligero si es posible.

Es posible que el calendario de Google no sea la solución por sí mismo, pero puede ampliar su funcionalidad a través de la API del Calendario de Google en múltiples lenguajes de programación, incluidos Python y PHP. Cada maestro puede tener un calendario de Google, y el maestro puede manejar algunas de las complejidades simplemente marcando un intervalo de tiempo como "Ocupado". No importa por qué, sólo importa que no puedan enseñar. Ídem para las vacaciones. Es posible que deba escribir algún código para equilibrar la carga y/o restricciones de enseñanza más complejas.
¿Son los técnicos totalmente intercambiables en su habilidad para enseñar?
En este caso si. Sé que básicamente es un problema de programación, solo me preguntaba si algún software existente puede hacer esto.

Respuestas (1)

Eche un vistazo a Drupal (gratis y de código abierto), que se ejecuta en (por ejemplo) una pila LAMP. También ofrece varias "distribuciones" y "módulos contribuidos" relacionados con cosas de "calendario".

  • un conjunto de profesores

Estos serían los "usuarios" definidos en Drupal (mientras que se pueden usar múltiples "roles" para todos los tipos de "permisos").

  • Un conjunto de sesiones en una semana.

Cada una de esas sesiones podría implementarse como nodos de un tipo de contenido personalizado , con todo tipo de campos correspondientes a los datos (atributos) de cada sesión. Bastante seguro de que una fecha/hora "desde" y "hasta" sería uno de esos campos, normalmente manejado por el módulo Fecha . Y con el módulo Calendario para mostrar una visualización de todas esas sesiones en formato de calendario.

  • Algunas semanas no enseñamos (vacaciones)

No hay problema, existen varias técnicas para evitar que se programen sesiones en esas semanas. Eso es lo que típicamente se reduce a "reservas" y/o "reservas" de un recurso (= ¿sus maestros y/o sus aulas?).

  • A lo largo de un año los profesores tienen que impartir la misma cantidad de sesiones

Tiene sentido, de eso se trata "repetir fechas"...

  • Algunos profesores tienen restricciones adicionales, como "No puedo dar clases los lunes" o "Solo puedo dar clases los lunes y martes"...

Ahora que es donde realmente se pone interesante. Eso suena como implementar alguna lógica de negocios. Hay algunos enfoques posibles, pero mi favorito es el enfoque en el que el administrador del sitio no tiene que ser un experto en PHP. Pero en su lugar, solo tiene que saber cómo usar la interfaz de usuario de administración del módulo " Reglas ". Para que funcione, tendrías que pensar en una forma de que tus profesores "ingresen sus restricciones" en su perfil de alguna manera. Hay múltiples formas de implementar tales cosas (Drupal es como "Lego"...). Una posible solución (¿simplista?) podría ser usar el módulo de banderas para que cada profesor pueda "marcar" los días que están disponibles o no disponibles

Para hacer que lo anterior funcione, se requiere experiencia en "construcción de sitios Drupal", NO un "desarrollador Drupal" (más costoso) que escriba todo tipo de código personalizado (que a la larga será difícil y costoso de mantener también).


Siga leyendo para obtener más detalles (es decir, esta es la marca TL; DR ...).


Módulo de calendario

El módulo Calendario (contribuido) se percibe comúnmente como "el" módulo (complemento) para todo lo relacionado con los requisitos del calendario. Aquí hay algunos detalles al respecto (de su página de proyecto):

Este módulo mostrará cualquier campo de fecha de Vistas en formatos de calendario, incluidos los campos de fecha CCK, las fechas de creación o actualización del nodo, etc. Cambie entre las vistas de año, mes y día. Se proporciona navegación hacia atrás y hacia adelante para todas las vistas. Gran parte de la funcionalidad del calendario proviene del módulo Fecha, por lo que cada vez que actualice el módulo Calendario, debe asegurarse de actualizar también a la última versión del módulo Fecha al mismo tiempo.

Y una serigrafía al respecto:

ingrese la descripción de la imagen aquí

Realización de reservas (o reservas)

Se trata de crear, editar, etc., todo tipo de cosas que deberían ser parte de dicho calendario, lo cual también es posible (espera un poco para obtener una versión actualizada de esta respuesta).

Implementación de la lógica de negocios

Se trata de agregar todo tipo de " Reglas ", por ejemplo, para alguien que no está disponible ningún lunes, lo cual también es posible (espere un poco para obtener una versión actualizada de esta respuesta).

PD: Espera, aún hay más... un sitio SO dedicado a Drupal, ubicado en Drupal Answers .

No, no, no, definitivamente, no quiero usar un complemento pequeño de un CMS muy grande para hacer ese trabajo.
PERDÓN por mi respuesta. Pero creo que el comentario que agregó ahora debería incluirse en su pregunta. Es por eso que solo sugerí una edición apropiada... (gracias por haber aceptado ya una versión refinada). Buena suerte para encontrar una mejor respuesta.
Entonces, ¿cómo se ajusta su solución a los requisitos? Como señaló correctamente Emilien, Drupal es un CMS en primer lugar (y conocido como tal). "ofrece varias cosas relacionadas" es un poco vago. Eche un vistazo a nuestra guía de calidad de respuesta para ver qué debe contener una respuesta (probablemente lo sepa, no es nuevo aquí y ya ganó algo de reputación, así que estoy seguro de que puede hacerlo mejor :)
@Izzy: ME ALEGRO de que hayas preguntado, seguro que puedo (y lo haré) mejorar mi respuesta como sugeriste. Pero debido al primer comentario de OPer, me preguntaba si mejorarlo tendría sentido (o si preferiría simplemente ELIMINAR mi respuesta). Deme "algo" de tiempo antes de juzgar mi respuesta con cosas como "votos" (abajo, baja calidad, etc.). De lo contrario, simplemente eliminaré la respuesta yo mismo ...
Claro, Pierre, estoy 100% contigo en este punto: dudo que mejorar la respuesta ayude al OP. Pero tenga en cuenta que no somos un "servicio personal" sino un "recurso de preguntas y respuestas"; así que si bien no se ajustaría a los deseos de Emilien, bien podría hacerlo para otra persona que ya esté ejecutando Drupal por otras razones. Para esa persona puede parecer una buena idea simplemente instalar un complemento, ya que incluso se integraría con otros recursos de esa manera. Por supuesto, si cree que no vale la pena el esfuerzo, puedo entenderlo, y eliminar la respuesta sería una alternativa entonces. Tu elección ;)
AHA, tú y yo parecemos estar en la misma página. Para la mayoría (¿o todas?) de mis respuestas que escribo, siempre trato de pensar como "¿cómo puedo hacer que mi respuesta tenga sentido dentro de un año, para que alguien más (no OPer) aún pueda percibirla como valiosa?". Entonces, con su último comentario, estoy seguro de que NO lo eliminaré. En cambio, haré un esfuerzo adicional para que sea similar a algunas (???) de mis respuestas bien percibidas en Drupal.SE
@Izzy: ¿mi respuesta está evolucionando en la dirección que cumple con sus comentarios anteriores?
Solo tenga cuidado de concentrarse en la pregunta; de lo contrario, podría parecer más bien "colocación de productos" o publicidad de ese complemento;) Insertaría un párrafo / lista de viñetas al principio (quizás después del primer párrafo) señalando cómo su recomendación resuelve el problema. Entonces, los ejemplos deberían centrarse en eso (por ejemplo, un título sobre la sincronización no cumple con los requisitos; prefiero nombrarlo en una subcláusula en el calendario). Aparte de eso: Sí, definitivamente :)
Gracias por sus comentarios, intentaré "cambiar de dirección" un poco hacia sus sugerencias. Pero para eso necesitaré tiempo de AbitMORE (que puede ser mañana más o menos). Te haré "ping" con otro comentario "mejor así" cuando termine. Por cierto, las preguntas sobre Drupal.SE como "qué módulo de Drupal recomiendas para hacer X" SIEMPRE se cierran allí (todos los días hay algunos). ¿Encajarían tales preguntas (específicas de Drupal) en este sitio? Si no: ¿algún otro sitio? ¿O valdría la pena intentarlo como un nuevo sitio de 51?