feat: quote detail modal, SteelERP favicon, and notification navigation

- Pipeline page: clicking a supplier quote card opens a modal with full
  line-item breakdown, lead time, payment terms, notes, awarded status,
  and a Compare All Quotes button
- Eager-load supplierQuotes.supplier and supplierQuotes.items in pipeline
  controller to avoid N+1 on the modal data
- Browser tab now shows SteelERP first (SteelERP — Page Name)
- Added SVG favicon matching the sidebar blue-square logo
- Notification clicks now navigate to the relevant page via a dedicated
  /notifications/{id}/go route that marks only that notification as read

Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
This commit is contained in:
ghassanandClaude Sonnet 4.6 committed 2026-06-01 17:39:04 +03:00
1 parent 30b2fb3958
commit 9c4c752800
6 files changed
+244 -15

No files matched your search

+8 -1
View File
@@ -49,11 +49,18 @@ Route::middleware(['auth', 'verified'])->group(function () {
'items' => auth()->user()->unreadNotifications()->latest()->take(10)->get()->map(fn($n) => [
'id' => $n->id,
'message' => $n->data['message'] ?? '',
'url' => $n->data['url'] ?? null,
'go_url' => route('notifications.go', $n->id),
'ago' => $n->created_at->diffForHumans(),
]),
]))->name('notifications.unread');
Route::get('/notifications/{id}/go', function (string $id) {
$n = auth()->user()->notifications()->findOrFail($id);
$n->markAsRead();
$dest = $n->data['url'] ?? route('dashboard');
return redirect($dest);
})->name('notifications.go');
Route::post('/notifications/read-all', fn() => response()->json(
tap(auth()->user()->unreadNotifications()->update(['read_at' => now()]))
))->name('notifications.read-all');