Two new views:
/shift_event_comparisons?ids[]=shift_event_id&ids[]=shift_event_id
/shift_occurrence_comparisons/:shift_id
A grid showing times as the Y-axis and numbers as the X-axis. The grid is mostly white with a smattering of green and red cells.
A detailed look at the shifts with most details blurred out and a few command to copy at the bottom.
The comparisons shows a grid of events for a shift and their occurrences so you can find overlaps. Clicking on multiple events and clicking Compare will take you to a page that shows more detail about each event including logs, notes, and details recurrence information. It also includes commands you can run in a rails console to remove these duplicates.
The workflow is:
- Find duplicates on the comparisons page
- Select the first group of events on the page
- Compare in the detail view
- Use the commands provided to add exdates, move task logs, or otherwise delete duplicate events so that only one occurrence remains
These are only allowed to be seen/used by Becks and Edward (or users with their IDs).
This also introduces a couple of tools to make some of the more advanced comparisons easier.
TaskLog#console_view will get the detail needed to remove duplicate task logs that may have been created:
TaskLog.where(shift_event_id: [...])
.order(:task_id, :food_taxonomy_id, :weight)
.map(&:console_view)
Absence.near shows absences in a 2-month window around a central point to help figure out what volunteer should be on a shift.
Absence.find_by(user_id: ...).near(Time.new(2025, 10, 1))
Two new views:
* `/shift_event_comparisons?ids[]=shift_event_id&ids[]=shift_event_id`
* `/shift_occurrence_comparisons/:shift_id`


The comparisons shows a grid of events for a shift and their occurrences so you can find overlaps. Clicking on multiple events and clicking `Compare` will take you to a page that shows more detail about each event including logs, notes, and details recurrence information. It also includes commands you can run in a rails console to remove these duplicates.
The workflow is:
* Find duplicates on the comparisons page
* Select the first group of events on the page
* Compare in the detail view
* Use the commands provided to add exdates, move task logs, or otherwise delete duplicate events so that only one occurrence remains
These are only allowed to be seen/used by Becks and Edward (or users with their IDs).
This also introduces a couple of tools to make some of the more advanced comparisons easier.
* `TaskLog#console_view` will get the detail needed to remove duplicate task logs that may have been created:
```rb
TaskLog.where(shift_event_id: [...])
.order(:task_id, :food_taxonomy_id, :weight)
.map(&:console_view)
```
* `Absence.near` shows absences in a 2-month window around a central point to help figure out what volunteer should be on a shift.
```rb
Absence.find_by(user_id: ...).near(Time.new(2025, 10, 1))
```