SPR-790 Time slots

https://spordle.atlassian.net/browse/SPR-790

Existing behaviour

Play currently has a way to enter time slots but integration with the scheduler is currently minimal.

It’s possible to either import time slots from a CSV or use a form to create time slots manually. The form has basic recurrence rules to allow you to repeat the same slot daily/weekly/monthly.

These timeslots show up in the calendar distinctly as timeslots, but there’s no special behaviour associated with them. You can drag and drop a matchup onto a time slot, but if the length of the game is shorter/longer than the timeslot, the matchup does not adjust to fit.

Requirements

  • The form should allow a scheduler to enter a large chunk of time to be evenly split the slots and specify a length of time for gaps in between

    • For example, an association will be allotted 9AM - 6PM by the city on a given day (or every Saturday). They will want to enter this as 9AM - 6PM but they also need to keep in mind to give 15m between each game for an ice clean.

    • We’re assuming all games will be the same length of time, so the scheduler can enter the game length and gap length. If they want to mix varying games they should submit multiple forms if they want to do 1h30m games from 9AM - 12PM and then 2h games from 12PM - 6PM.

  • The scheduler needs to be able easily to reallocate time slots for other uses in bulk

    • They’ll end up with left over time that they want to repurpose for practices or other categories, so they should be able to bulk edit the restrictions

  • Need to be able to easily identify unused time slots

    • Currently there’s no link between a game and slot, but we can identify this by checking for overlaps

  • Allocating a game to an ice slot should automatically fit to the time slot when scheduling in the calendar

    • If the time slot is defined as 2h but the game is 1h45 or 2h15, the game becomes 2h

  • The game form should enforce snapping to time slots as well

    • The form should use the availability context to be able to automatically snap the end time

    • The API should check for an overlapping time slot and validate the start/end times to match

Implementation

  • Add split/break durations to time slots API/form

  • Add filters and bulk editor to time slots card

  • Add filter for unused time slots

  • Time slot snapping on calendar

  • Add time slots to availability API

  • Add time slot validation to game API