Conversation
Reporting links (#920, #921) - Networks have a reporting dashboard address (new networks.reporting_url column), set by administrators on the network edit page and linked from the network actions menu. - Groups link to the group reporting dashboard, filtered to the group, from the group actions menu and the stats section. The address comes from GROUP_REPORTING_URL, with {group} replaced by the group id; members of the group and those who look after it see the link. Group page stats (#922) - Items worked on and most repaired items sit alongside group achievements and environmental impact; the device breakdown section is gone, along with the queries that fed it. - "Most repaired devices" is now "Most repaired items". Fixometer headline stats (#923) - Powered/unpowered figures say they are items fixed. - "years volunteered" is now "years of time volunteered". - Adds the number of events held. Fixometer repair records (#924) - One list of powered and unpowered items, with a powered/unpowered filter. - Sorting uses the column clicked; the API maps table columns to database columns and ignores anything else. - The status filter works (the API accepts the status names the client sends). - The "to" date includes events on that day; deleted events are left out. - Expanding a record shows its details instead of empty fields. - The date column is the event date, and records keep their own dates rather than those of the joined tables. Repair data download (#925) - Everyone can download the repair records from the Fixometer page. - The export checks visibility in the query and loads events and groups with the devices, in chunks, rather than querying each event and group in turn. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Contributor
|
@edwh That's great, thanks - but can we move the discussion about each of the items to the related sub-issue? |
Split the device list filters out of getDevices(), make the record details toggle a button so it works from the keyboard, and tidy the new tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This was referenced Sep 30, 2026
Collaborator
Author
|
@ngm Done - each sub-issue now has a comment with what this PR does for it, its screenshots, and the points to discuss: #920, #921, #922, #923, #924, #925. The PR description now just points to them. There's also a preview of this PR on production data at https://restarters-pr-926.fly.dev (it's being deployed now), which is the place to try the repair records list and time the full download (#925). |
Preview: https://restarters-pr-926.fly.dev✅ Ready - restore and migrations succeeded.
|
This was
linked to
issues
Oct 1, 2026
GROUP_REPORTING_URL becomes GROUP_REPORTING_URL_EN and _FR, because
Metabase can only show a dashboard in another language as a separate
dashboard. A group gets the one for its network's default language,
falling back to English. The address can include {group_name} as well
as {group}.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…#923) - Events held leaves out cancelled events and those of unapproved groups. - New total items seen figure, left of powered items fixed, which fills the gap in the desktop grid. - 'See more analysis in our further reports.' after the estimates note, linking to FIXOMETER_REPORTING_URL. No sentence when it isn't set. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- Filters in the order Powered or unpowered, Category, Item, Brand, Model, Assessment, Repair status. Brand and model stay for unpowered items, since they can be recorded for them too. - Powered or unpowered is a select like the others, defaulting to Both. - The Item filter asks 'What is it?', as on data capture. - No info icons in the filters or on an expanded record - they explain what to enter, which doesn't apply here. They stay on data capture. - Status before Group; the event date links to that event's items. - White background again; the how-to-use-the-table text is gone. - The To date defaults to today, so records from mis-dated future events don't head the list. Today isn't written into the URL. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Leaves out both 'None of the above' categories. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
?stats_layout= picks one: - compact (default): all before the events, achievements over impact beside items worked on over most repaired, without the note on what the impact leaves out. - after: all after the events. - split: achievements and impact before the events, items after - the original layout. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts: # resources/js/components/FixometerRecordsTable.vue
export:repair-data writes what anyone can see to public/exports/repair-data.csv, which nginx serves directly (and now gzips). It runs hourly but rebuilds at most once a day, and only when repairs, events or groups have changed. Hourly means a new machine, which starts without the file, has it within the hour; until then the Fixometer button falls back to the live export. The CSV writing moves from ExportController into RepairDataExport so the command and the per-event/group exports share it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ard (#921) Repair Together's network language is fr-BE, which would otherwise fall back to the English dashboard. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
nginx's mime types don't know .csv, so the file went out as application/octet-stream and uncompressed. Checked on the #926 preview: a GET now comes back as text/csv with gzip. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
edwh
added a commit
that referenced
this pull request
Oct 1, 2026
|
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Implements the code changes for #919 (sub-issues #920–#925). The Metabase reports and dashboards live outside this repo. Each sub-issue has a write-up with screenshots.
What changes
Reporting links — #920, #921
networks.reporting_url, new migration). Only administrators can set it, on the network edit page. When it's set, the network page links to it in two places: Network actions → View reports, and a "See more in your network's reports" link under the impact figures.GROUP_REPORTING_URL_ENandGROUP_REPORTING_URL_FR.fr-BEuses its base language. Anything else falls back to English.{group}and{group_name}in the address are filled in.Group page stats — #922
?stats_layout=compact(the default),afterorsplitpicks one. The other two, and the option, go once one is chosen.Fixometer headline stats — #923
FIXOMETER_REPORTING_URL. It doesn't appear when that isn't set.homepage_data_v3, so the new figures appear straight after deploy.Fixometer repair records — #924
?category_powered=/?category_unpowered=links still work.Repair data download — #925
export:repair-databuilds the full file atpublic/exports/repair-data.csv, holding what anyone can see. The web server sends it directly, as compressed CSV, without going through PHP.App\Services\RepairDataExport, which the per-event and per-group exports share. The query appliesUser::userCanSeeEvent()'s visibility rules and works in chunks.Screenshots
Fixometer (#923, #924)

Group page, compact layout (#921, #922). The other layouts are on #922.

Network impact with the reports link (#920)

Tests
For the code review
/api/deviceswithoutpoweredreturns both powered and unpowered records. Before, it returned unpowered only. The Vue client is the only known caller.GROUP_REPORTING_URL_EN(and later_FR) andFIXOMETER_REPORTING_URLset for those links to appear.GROUP_REPORTING_URLis no longer read. It isn't set in production (checked the Fly secrets).