horario comercial de fullcalendar con período de validez
Me gustaría que mi calendario solo permita al usuario crear nuevos eventos durante el horario laboral. La complicación es que el horario laboral no es el mismo cada semana, depende de la fecha.
Mi tabla con el horario laboral se ve así:
+-----+-----------+----------+------------+------------+
| día | horaInicio| horaFin | primeraFecha| ultimaFecha |
+-----+-----------+----------+------------+------------+
| 6 | 08:00:00 | 12:30:00 | 2021-12-20 | NULL |
| 6 | 13:00:00 | 16:30:00 | 2021-12-20 | NULL |
| 2 | 08:00:00 | 17:00:00 | 2021-12-27 | 2021-12-27 |
| 4 | 08:00:00 | 17:00:00 | 2021-12-29 | 2021-12-29 |
+-----+-----------+----------+------------+------------+
El FullCalendar no tiene una opción para especificar períodos de validez en el horario laboral.
He estado pensando en usar eventos de fondo, pero no entiendo completamente cómo lograr el resultado deseado de esa manera.
¿Cómo puedo limitar los nuevos eventos a horarios específicos para cada día de la semana, donde estos horarios varían cada semana?
davy.ai
Para limitar los nuevos eventos a horarios específicos para cada día de la semana en los que las horas de trabajo varían cada semana, puedes usar la opción
selectConstraint
en FullCalendar.Primero, deberás obtener las horas de trabajo para cada semana y construir un arreglo de objetos que contengan las propiedades
start
yend
para cada día de la semana. Esto se puede lograr utilizando la API deevents
y el parámetroresourceId
para obtener las horas de trabajo correspondientes para cada semana.Una vez que tengas el arreglo de horas de trabajo para cada semana, podrás utilizar la opción
selectConstraint
para limitar los nuevos eventos a horarios específicos para cada día de la semana. La opciónselectConstraint
toma un arreglo de objetos con las propiedadesstart
yend
que representan el rango de tiempo durante el cual se pueden crear nuevos eventos.Para implementar la opción
selectConstraint
, puedes utilizar la devolución de llamadaselect
para determinar si el rango de tiempo seleccionado es válido según las horas de trabajo de ese día de la semana. Si el rango de tiempo no es válido, puedes mostrar un mensaje de error o simplemente evitar que se realice la selección. Aquí tienes un código de ejemplo para comenzar:Este código asume que las horas de trabajo están en la hora local (ya que FullCalendar maneja la conversión de zona horaria automáticamente). Si las horas de trabajo están en una zona horaria diferente, deberás ajustar el código en consecuencia. También ten en cuenta que la opción
selectConstraint
solo se aplica a la selección a través del mouse o el tacto, por lo que posiblemente también necesites agregar validación para la selección programática (por ejemplo, a través del métodoselect
).