fix(ui): buttons that led nowhere, across the financial screens
Swept every link and form action in the financial modules against the real
route patterns. The asset problem was not a one-off.
**Screens you could reach but not use.** Three edit screens existed, worked, and
had nothing linking to them: vendor invoices, return-to-vendor, and the legacy
pricing configs. Buttons added on both the list and the detail page, gated on
the same status the controller already enforces — draft only, since neither
document should change once verified or submitted.
**Links pointing at routes that do not exist.**
- Asset custody was entirely unusable: both the transfer button and the
transfer form posted to /inventory/assets/{id}/transfer, but the route is
/inventory/assets/custody/{id}/transfer. Nobody could ever hand over an
asset.
- Pricing configs was broken at both ends — the list linked to
/pricing/{id}/edit and the form posted to /pricing/{id}, while the routes
are under /pricing/configs. The edit screen was unreachable and unsavable.
- Quote comparison posted to /select-winner, which was never built; the
endpoint is /procurement/quotes/evaluate.
- The quotes list "عرض" pointed at a detail page that does not exist. It now
opens the response screen, which is what a quote is actually for.
- "تظلم" on a fine was an <a>, so it issued a GET against a POST-only route.
It is a form now, with a confirmation, since it records something.
**Buttons for things that were never built.** BOM edit had no route and no
controller method — a guaranteed 404 in two places. Removed rather than faked;
creating and viewing a BOM both work, and editing one is a feature nobody has
written yet. Settlements had exactly one action and it opened a detail page that
does not exist either; replaced with اعتماد, the action that does exist and the
only thing a draft settlement is waiting on.
Not changed, having checked: vouchers and budgets flagged in the sweep were
artifacts of my own parser — PHP unescapes '\\d+' in single quotes, and the
budgets links emit a query string from inside the PHP tag. Both resolve fine.
Verified: 1503 routes resolve, 255 controllers instantiate, 243 services load,
zero orphaned edit screens remain, and every screen touched renders.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>
Showing
Please register or sign in to comment