- Implemented the customer portal workflow progress component with detailed service progress tracking, including current status, workflow steps, and contact information. - Developed a management workflow analytics dashboard featuring key performance indicators, charts for revenue by branch, labor utilization, and recent quality issues. - Created tests for admin-only middleware to ensure proper access control for admin routes. - Added tests for customer portal view rendering and workflow integration, ensuring the workflow service operates correctly through various stages. - Introduced a .gitignore file for the debugbar storage directory to prevent unnecessary files from being tracked.
106 lines
4.8 KiB
PHP
106 lines
4.8 KiB
PHP
<!DOCTYPE html>
|
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}" class="h-full">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
<meta name="csrf-token" content="{{ csrf_token() }}">
|
|
|
|
<title>{{ config('app.name', 'AutoRepair Pro') }} - Customer Portal</title>
|
|
|
|
<!-- Fonts -->
|
|
<link rel="preconnect" href="https://fonts.bunny.net">
|
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
|
|
|
<!-- Scripts -->
|
|
@vite(['resources/css/app.css', 'resources/js/app.js'])
|
|
@livewireStyles
|
|
</head>
|
|
<body class="font-sans antialiased h-full bg-gray-50">
|
|
<div class="min-h-full">
|
|
<!-- Header -->
|
|
<header class="bg-white shadow-sm border-b border-gray-200">
|
|
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
|
<div class="flex justify-between items-center py-6">
|
|
<div class="flex items-center">
|
|
<x-app-logo class="h-8 w-auto" />
|
|
<div class="ml-4">
|
|
<h1 class="text-2xl font-bold text-gray-900">Customer Portal</h1>
|
|
<p class="text-sm text-gray-600">Track your vehicle service progress</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex items-center space-x-4">
|
|
<div class="text-right">
|
|
<p class="text-sm font-medium text-gray-900">{{ $jobCard->customer->name ?? 'Customer' }}</p>
|
|
<p class="text-xs text-gray-600">{{ $jobCard->customer->email ?? '' }}</p>
|
|
</div>
|
|
<div class="h-8 w-8 rounded-full bg-blue-500 flex items-center justify-center text-white font-medium">
|
|
{{ substr($jobCard->customer->name ?? 'C', 0, 1) }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- Main content -->
|
|
<main class="max-w-7xl mx-auto py-8 px-4 sm:px-6 lg:px-8">
|
|
<!-- Job Card Info Bar -->
|
|
<div class="mb-8 bg-white rounded-lg shadow p-6">
|
|
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
|
<div>
|
|
<h3 class="text-sm font-medium text-gray-500">Job Card</h3>
|
|
<p class="mt-1 text-lg font-semibold text-gray-900">#{{ $jobCard->id }}</p>
|
|
</div>
|
|
<div>
|
|
<h3 class="text-sm font-medium text-gray-500">Vehicle</h3>
|
|
<p class="mt-1 text-lg font-semibold text-gray-900">
|
|
{{ $jobCard->vehicle->year ?? '' }} {{ $jobCard->vehicle->make ?? '' }} {{ $jobCard->vehicle->model ?? '' }}
|
|
</p>
|
|
<p class="text-sm text-gray-600">{{ $jobCard->vehicle->license_plate ?? '' }}</p>
|
|
</div>
|
|
<div>
|
|
<h3 class="text-sm font-medium text-gray-500">Status</h3>
|
|
<span class="inline-flex mt-1 px-2 py-1 text-xs font-medium rounded-full
|
|
@switch($jobCard->status)
|
|
@case('pending')
|
|
bg-yellow-100 text-yellow-800
|
|
@break
|
|
@case('in_progress')
|
|
bg-blue-100 text-blue-800
|
|
@break
|
|
@case('completed')
|
|
bg-green-100 text-green-800
|
|
@break
|
|
@default
|
|
bg-gray-100 text-gray-800
|
|
@endswitch
|
|
">
|
|
{{ ucfirst(str_replace('_', ' ', $jobCard->status)) }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Page Content -->
|
|
{{ $slot }}
|
|
</main>
|
|
|
|
<!-- Footer -->
|
|
<footer class="bg-white border-t border-gray-200 mt-16">
|
|
<div class="max-w-7xl mx-auto py-8 px-4 sm:px-6 lg:px-8">
|
|
<div class="text-center">
|
|
<p class="text-sm text-gray-600">
|
|
Questions about your service? Contact us at
|
|
<a href="tel:{{ app(\App\Settings\GeneralSettings::class)->shop_phone ?? '' }}" class="text-blue-600 hover:text-blue-800">
|
|
{{ app(\App\Settings\GeneralSettings::class)->shop_phone ?? 'Contact Shop' }}
|
|
</a>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
|
|
@livewireScripts
|
|
</body>
|
|
</html>
|