Я бы посоветовал дать возможность хранить «перерыв» как конкретные даты с временными диапазонами или как шаблон. Я работал над несколькими системами планирования, которые имели очень сложные способы работы с правилами профсоюзов и доступности сотрудников, и вот как мы справились с этим.
Либо сотрудник говорит, что я хочу, чтобы день X от y до z был легко проверен, либо они могли определить шаблоны, которые они хотели или не хотели (например, я не хочу работать по пятницам), а затем при планировании вы могли проверьте, не нарушает ли их применение к определенной смене установленное правило (выходной) или не соответствует определенному шаблону.
Также, как я должен хранить эти данные каждого сотрудника?
Иметь таблицу для хранения конкретных исключений сотрудника. Я хочу, чтобы день X от y до z выключился. У вас есть сотрудник, дата и промежуток времени. Довольно просто.
Что касается шаблонов, вам нужно придумать схему какого-то типа. И есть типы или что-то.
Таким образом, у вас может быть такой тип, как «шаблон недельного выключения», который будет хранить полные выходные недели, которые могут быть сохранены в виде простой строки, представляющей выходные дни: 1000001. Если предположить, что первый бит - воскресенье, это будет означать выходные по выходным. Затем вы можете сохранить шаблон в виде строки или чего-то еще, а затем на основе определенного типа вы будете знать, как обращаться со строкой.
Это может быть очень сложная или простая проблема, она зависит только от того, сколько настроек вам нужно учесть. Надеюсь, это даст вам достаточно идей, чтобы начать работу.
Автоматическая генерация расписания НАМНОГО сложнее в зависимости от исключений / правил, которые необходимо поддерживать.