Issue #3613258: Extract shared per-user dashboard sort logic from QuotaManager/RollupManager into a trait
QuotaManager::getDashboardData() and RollupManager::getMonthAggregates() duplicated the same joins, quota-percentage expression, and sort/ORDER BY logic. Extracted the shared logic into a new DashboardSortTrait used by both classes; each class keeps its own table-specific aggregation.
Closes #3613258