This idea is distinct from DTC-I-691 (Configurable CSV export profiles). That idea covers column layout and payroll-platform-specific column mapping. This idea is only about row sort and grouping — how the rows are ordered within whichever columns you have. The two are complementary and additive, not competing. A customer can want sort/grouping without column-layout customization, and vice versa.
The ask
Add sort and grouping presets to the time entries CSV export — at minimum a "by resource" sort (group all of one person's hours together) and a "by project" sort (group all hours by project, then resource within project). User picks the preset from a dropdown before exporting.
The problem this solves
Today's CSV export sorts by date only. Customers using the export for payroll review or client billing need rows grouped by person or by project to make the file usable. Today they re-sort manually in Excel or Google Sheets after every export — a recurring tax on every payroll cycle and every billing cycle.
Use cases
-
Payroll review: admin wants all of Bob's hours together so they can verify totals before submitting to payroll.
-
Client billing: admin wants project-grouped sort so they can copy hours into an invoice for that project.
-
Job costing review: PM wants project-grouped with resource breakdown for end-of-week cost rollup.
Considerations
- Backend already supports sort via SortHelper on the underlying GetTimeEntries endpoint. The export UI just needs to expose preset options.
- Recommend starting with 2-3 named presets (Per Person, Per Job, Date) before opening up arbitrary multi-column sorting.
- Independent of column layout work — this can ship on its own timeline regardless of what happens with DTC-I-691.
Why this is distinct from DTC-I-691 (restating for clarity)
-
This idea: row order — which rows go above which other rows in the file
-
DTC-I-691: column layout — which columns appear, in what order, with what header names, in what format
You could implement either one without the other and customers would still get value.