diff --git a/app/Http/Controllers/Pos/SettingsController.php b/app/Http/Controllers/Pos/SettingsController.php index 61e1ae1..d7cadc9 100644 --- a/app/Http/Controllers/Pos/SettingsController.php +++ b/app/Http/Controllers/Pos/SettingsController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Pos; use App\Http\Controllers\Controller; use App\Http\Controllers\Pos\Concerns\ScopesToAccount; +use App\Models\PosDevice; use App\Models\PosLocation; use App\Models\PosMember; use App\Models\PaymentGatewaySetting; @@ -41,9 +42,14 @@ class SettingsController extends Controller ? PosLocation::owned($owner)->orderBy('name')->get() : PosLocation::owned($owner)->whereKey($scope)->orderBy('name')->get(); + $devicesQuery = PosDevice::owned($owner)->with('location')->orderBy('name'); + $this->scopeToLocation($request, $devicesQuery); + return view('pos.settings', [ 'location' => $location, 'branches' => $branches, + 'devices' => $devicesQuery->limit(10)->get(), + 'deviceTypes' => config('pos.device_types', []), 'members' => PosMember::owned($owner)->with('location')->orderBy('created_at')->get(), 'roles' => config('pos.roles', []), 'hasMultiLocation' => $this->subscriptions->canUseMultiLocation($account), diff --git a/resources/views/partials/sidebar.blade.php b/resources/views/partials/sidebar.blade.php index a6788ee..da03065 100644 --- a/resources/views/partials/sidebar.blade.php +++ b/resources/views/partials/sidebar.blade.php @@ -14,8 +14,6 @@ 'icon' => ''], ['name' => 'Sales', 'route' => route('pos.sales.index'), 'active' => request()->routeIs('pos.sales.*'), 'icon' => ''], - ['name' => 'Devices', 'route' => route('pos.devices.index'), 'active' => request()->routeIs('pos.devices*'), - 'icon' => ''], ]; // Restaurant mode adds the floor + kitchen display, right after Register. @@ -40,9 +38,12 @@
+ @php + $settingsActive = request()->routeIs('pos.settings*', 'pos.devices.*', 'pos.branches.*', 'pos.team.*'); + @endphp - + class="group flex items-center gap-3 rounded-lg px-3 py-2 text-[13px] transition {{ $settingsActive ? 'bg-indigo-50 text-indigo-700 font-semibold' : 'text-slate-600 hover:bg-slate-50 hover:text-slate-900' }}"> + Settings diff --git a/resources/views/pos/devices/create.blade.php b/resources/views/pos/devices/create.blade.php index b5c766c..89c937a 100644 --- a/resources/views/pos/devices/create.blade.php +++ b/resources/views/pos/devices/create.blade.php @@ -1,51 +1,58 @@ -
-
- ← Devices -

Register device

-

Name the hardware and link it to a branch when needed.

+ +
+ Settings + / + Devices + / + Add
@if (session('error')) -
{{ session('error') }}
+
{{ session('error') }}
@endif -
- @csrf -
- - - @error('name')

{{ $message }}

@enderror -
-
- - -

- @error('type')

{{ $message }}

@enderror -
-
- - -

Required for customer and kitchen displays.

- @error('location_id')

{{ $message }}

@enderror -
- -
-
+ +
+ @csrf +
+ + + @error('name')

{{ $message }}

@enderror +
+
+ + +

+ @error('type')

{{ $message }}

@enderror +
+
+ + +

Required for customer and kitchen displays.

+ @error('location_id')

{{ $message }}

@enderror +
+
+ Cancel + +
+
+
+ diff --git a/resources/views/pos/devices/edit.blade.php b/resources/views/pos/devices/edit.blade.php index a55eb8f..da6424d 100644 --- a/resources/views/pos/devices/edit.blade.php +++ b/resources/views/pos/devices/edit.blade.php @@ -1,96 +1,101 @@ -
-
- ← Devices -

Edit device

-

{{ $deviceTypes[$device->type] ?? $device->type }} · {{ $device->location?->name ?? 'No branch' }}

+ +
+ Settings + / + Devices + / + {{ $device->name }}
@if (session('success')) -
{{ session('success') }}
+
{{ session('success') }}
@endif -
- @csrf - @method('PUT') -
- - -
-
- - -

-
-
- - -
-
- - -
- - @if ($device->device_token) -
-

Device token

- {{ $device->device_token }} - @if ($openUrl) - - Open device URL → - - @endif -

Last online: {{ $device->last_online_at?->diffForHumans() ?? 'Never' }}

+ + + @csrf + @method('PUT') +
+ + +
+
+ + +

+
+
+ + +
+
+ +
- @endif -
- Back - -
- + @if ($device->device_token) +
+

Device token

+ {{ $device->device_token }} + @if ($openUrl) + + Open device URL → + + @endif +

Last online: {{ $device->last_online_at?->diffForHumans() ?? 'Never' }}

+
+ @endif -
-

Device actions

- @if ($device->device_token) -
+
+ Back + +
+
+ + + +
+ @if ($device->device_token) +
+ @csrf + +
+ @endif +
@csrf -
- @endif -
- @csrf - @method('DELETE') - -
-
-
+
+ +
diff --git a/resources/views/pos/devices/index.blade.php b/resources/views/pos/devices/index.blade.php index 92784a3..3fb4ee6 100644 --- a/resources/views/pos/devices/index.blade.php +++ b/resources/views/pos/devices/index.blade.php @@ -1,15 +1,15 @@ -
-
-
-

Hardware

-

Devices

-

Register tills, customer screens, kitchen displays, and printers for each branch.

+ +
+
+ Settings + / + Devices
Add device
-
+

{{ number_format($heroStats['total']) }}

Devices

@@ -25,16 +25,13 @@
@if (session('success')) -
{{ session('success') }}
+
{{ session('success') }}
@endif @if (session('error')) -
{{ session('error') }}
+
{{ session('error') }}
@endif -
-
-

All devices

-
+
@@ -75,8 +72,8 @@
@if ($devices->hasPages()) -
{{ $devices->links() }}
+
{{ $devices->links() }}
@endif -
-
+ + diff --git a/resources/views/pos/settings.blade.php b/resources/views/pos/settings.blade.php index ee7295a..e079820 100644 --- a/resources/views/pos/settings.blade.php +++ b/resources/views/pos/settings.blade.php @@ -1,5 +1,5 @@ - +
@csrf @@ -179,6 +179,8 @@
@include('pos.settings._branches-section') + @include('pos.settings._devices-section') + @if (! empty($canManageTeam)) @include('pos.settings._team-section') @endif diff --git a/resources/views/pos/settings/_devices-section.blade.php b/resources/views/pos/settings/_devices-section.blade.php new file mode 100644 index 0000000..b6deb63 --- /dev/null +++ b/resources/views/pos/settings/_devices-section.blade.php @@ -0,0 +1,35 @@ + + @if ($devices->isNotEmpty()) +
    + @foreach ($devices as $device) +
  • +
    +

    + {{ $device->name }} + + {{ $device->isOnline() ? 'Online' : ucfirst($device->status) }} + +

    +

    + {{ $deviceTypes[$device->type] ?? $device->type }} + · {{ $device->location?->name ?? 'All branches' }} + @if ($device->last_online_at) + · last online {{ $device->last_online_at->diffForHumans() }} + @endif +

    +
    + Manage +
  • + @endforeach +
+ @else +

No devices yet. Add a register, customer display, kitchen screen, or printer.

+ @endif + +
+ Add device + @if ($devices->isNotEmpty()) + View all devices + @endif +
+
diff --git a/routes/web.php b/routes/web.php index 24797ee..e88a76b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -153,13 +153,17 @@ Route::middleware(['auth', 'platform.session'])->group(function () { Route::get('/settings', [SettingsController::class, 'index'])->name('pos.settings'); Route::put('/settings', [SettingsController::class, 'update'])->name('pos.settings.update'); - Route::get('/devices', [DeviceController::class, 'index'])->name('pos.devices.index'); - Route::get('/devices/create', [DeviceController::class, 'create'])->name('pos.devices.create'); - Route::post('/devices', [DeviceController::class, 'store'])->name('pos.devices.store'); - Route::get('/devices/{device}/edit', [DeviceController::class, 'edit'])->name('pos.devices.edit'); - Route::put('/devices/{device}', [DeviceController::class, 'update'])->name('pos.devices.update'); - Route::delete('/devices/{device}', [DeviceController::class, 'destroy'])->name('pos.devices.destroy'); - Route::post('/devices/{device}/regenerate-token', [DeviceController::class, 'regenerateToken'])->name('pos.devices.regenerate-token'); + Route::get('/settings/devices', [DeviceController::class, 'index'])->name('pos.devices.index'); + Route::get('/settings/devices/create', [DeviceController::class, 'create'])->name('pos.devices.create'); + Route::post('/settings/devices', [DeviceController::class, 'store'])->name('pos.devices.store'); + Route::get('/settings/devices/{device}/edit', [DeviceController::class, 'edit'])->name('pos.devices.edit'); + Route::put('/settings/devices/{device}', [DeviceController::class, 'update'])->name('pos.devices.update'); + Route::delete('/settings/devices/{device}', [DeviceController::class, 'destroy'])->name('pos.devices.destroy'); + Route::post('/settings/devices/{device}/regenerate-token', [DeviceController::class, 'regenerateToken'])->name('pos.devices.regenerate-token'); + // Legacy /devices URLs → settings + Route::redirect('/devices', '/settings/devices'); + Route::redirect('/devices/create', '/settings/devices/create'); + Route::get('/devices/{device}/edit', fn (string $device) => redirect("/settings/devices/{$device}/edit")); Route::get('/settings/branches', [LocationController::class, 'index'])->name('pos.branches.index'); Route::get('/settings/branches/create', [LocationController::class, 'create'])->name('pos.branches.create');