summary: Multi-select bulk operations on a report's events — re-tag, set category, consolidate, or delete in one click.

Built for the case where a rep has dozens or hundreds of small events that all need the same fix (tag a project, set a category, delete noise, consolidate into a single clean entry). Manager-of-this-employee or admin only.

Where

/team/employees/<emp_id>Events table → checkbox column on the left of each row. A sticky bar appears at the bottom of the page once any row is selected.

Bulk actions in the bar

  • → Assign project dropdown (validates the employee is assigned to the project before saving)
  • → Set category (from the company taxonomy)
  • → Set work type (billable, internal, etc.)
  • Consolidate into one — sums the selected events' minutes, deletes the N rows, inserts one new event with the total. Takes the first row's app/window/category as defaults; takes the earliest occurred_at as the timestamp. Sets minutes_raw to the total too so the normalize cron leaves it alone.
  • Delete — permanent, with confirm dialog

What it does NOT include

  • Bulk minutes edit — intentionally absent. Bulk minutes is meaningless because each event represents a different captured interval; setting them all to "5 min" or "60 min" double-counts. If you want one clean entry of N minutes representing what was really 75 small events, use Consolidate into one instead.

Auth + safety

  • Manager-of-this-employee OR admin only (owner can't bulk-edit their own — they have to do per-event edits via My Events)
  • If any selected event is in an approved/locked week, the WHOLE batch aborts with an error — reopen the timesheet first
  • Every change records classification_source = 'manager_correction' or 'admin_correction'
  • audit_log captures action + event ids + count

See something wrong or outdated in this article? Report it →