From bb3f7f2dc381d3ac352a72f797ff9fcf9100b375 Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 22 Mar 2025 11:23:52 +0000 Subject: [PATCH 1/5] Tools: Simple recent users page --- app/Http/Controllers/Tools/ToolController.php | 37 ++++++++++- resources/views/tools/tool/show.blade.php | 1 + resources/views/tools/tool/usage.blade.php | 63 +++++++++++++++++++ routes/web.php | 2 + 4 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 resources/views/tools/tool/usage.blade.php diff --git a/app/Http/Controllers/Tools/ToolController.php b/app/Http/Controllers/Tools/ToolController.php index a734f8dc..c0d7fb16 100644 --- a/app/Http/Controllers/Tools/ToolController.php +++ b/app/Http/Controllers/Tools/ToolController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Tools; use App\Http\Controllers\Controller; +use Carbon\Carbon; use HMS\Entities\Tools\Tool; use HMS\Entities\User; use HMS\Factories\Tools\UsageFactory; @@ -94,7 +95,7 @@ public function __construct( $this->middleware('feature:tools'); $this->middleware('can:tools.view')->only(['index', 'show']); $this->middleware('can:tools.create')->only(['create', 'store']); - $this->middleware('can:tools.edit')->only(['edit', 'update']); + $this->middleware('can:tools.edit')->only(['edit', 'update', 'showUsage']); $this->middleware('can:tools.destroy')->only(['destroy']); $this->middleware('can:tools.addFreeTime')->only(['addFreeTime']); } @@ -174,6 +175,40 @@ public function show(Tool $tool) return view('tools.tool.show')->with('tool', $tool); } + /** + * Show usage for a specific tool. + * + * @param Request $request + * @param Tool $tool + * + * @return \Illuminate\Http\Response + */ + public function showUsage(Request $request, Tool $tool) + { + $validatedData = $request->validate([ + 'startDate' => 'required_with:endDate|date_format:Y-m-d', + 'endDate' => 'required_with:startDate|date_format:Y-m-d', + ]); + + if (array_key_exists('startDate', $validatedData)) { + $startDate = new Carbon($validatedData['startDate']); + $startDate->startOfDay(); + $endDate = new Carbon($validatedData['endDate']); + $endDate->endOfDay(); + } else { + $startDate = Carbon::now()->subDays(7); + $endDate = Carbon::now()->endOfDay(); + } + + $usage = $this->usageRepository->findByToolBetween($tool, $startDate, $endDate); + + return view('tools.tool.usage') + ->with('tool', $tool) + ->with('usage', $usage) + ->with('startDate', $startDate) + ->with('endDate', $endDate); + } + /** * Display the specified resource. * diff --git a/resources/views/tools/tool/show.blade.php b/resources/views/tools/tool/show.blade.php index be73c965..ff918cdc 100644 --- a/resources/views/tools/tool/show.blade.php +++ b/resources/views/tools/tool/show.blade.php @@ -71,6 +71,7 @@ @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.maintainer.grant'])

View Maintainers + Show Recent Usage @endcan @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.inductor.grant' , 'tools.' . $tool->getPermissionName() . '.induct']) View Inductors diff --git a/resources/views/tools/tool/usage.blade.php b/resources/views/tools/tool/usage.blade.php new file mode 100644 index 00000000..36fe7dee --- /dev/null +++ b/resources/views/tools/tool/usage.blade.php @@ -0,0 +1,63 @@ +@extends('layouts.app') + +@section('pageTitle', $tool->getDisplayName().' Settings') + +@section('content') +

+

Usage: {{ $tool->getName() }}

+ @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.inductor.grant']) + @forelse ($usage as $use) + @if ($loop->first) +
+ + + + + + + + + + @endif + + + + + + @if( $loop->last) + +
MemberStart TimeEnd Time
{{ $use->getUser()->getFullname() }}{{ $use->getStart() }} {{ $use->getStart()->addSeconds($use->getDuration()) }}
+
+ @endif + @empty +

+ No usage for this period. +

+ @endforelse + @endcan + +

Change usage period

+
+
+ + + @error('startDate') +

+ {{ $errors->first('startDate') }} +

+ @enderror +
+
+ + + @error('endDate') +

+ {{ $errors->first('endDate') }} +

+ @enderror +
+ + +
+
+@endsection diff --git a/routes/web.php b/routes/web.php index a0212476..2b63a0e8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -320,6 +320,8 @@ // Tools Route::get('tools/{tool}/users/{grantType}', [ToolController::class, 'showUsersForGrant']) ->name('tools.users-for-grant'); + Route::get('tools/{tool}/usage', [ToolController::class, 'showUsage']) + ->name('tools.usage'); Route::patch('tools/{tool}/grant', [ToolController::class, 'grant'])->name('tools.grant'); Route::delete('tools/{tool}/revoke/{grantType}/users/{user}', [ToolController::class, 'revoke']) ->name('tools.revoke.users'); From 8c13ad0483c6aab1b08cfad41cc5f7b4bde367ab Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 22 Mar 2025 11:28:03 +0000 Subject: [PATCH 2/5] Tools: Cleanup indentation on maintainer / report links --- resources/views/tools/tool/show.blade.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/views/tools/tool/show.blade.php b/resources/views/tools/tool/show.blade.php index ff918cdc..a87cfc2e 100644 --- a/resources/views/tools/tool/show.blade.php +++ b/resources/views/tools/tool/show.blade.php @@ -68,16 +68,16 @@
@endcan - @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.maintainer.grant'])

- View Maintainers + @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.maintainer.grant']) + View Maintainers Show Recent Usage @endcan @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.inductor.grant' , 'tools.' . $tool->getPermissionName() . '.induct']) - View Inductors + View Inductors @endcan @can('tools.user.grant') - View Users + View Users @endcan

From 3d30bf7e5f93fa59df7b4113f30043110bbb6aad Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 22 Mar 2025 11:28:21 +0000 Subject: [PATCH 3/5] Snackspace: Payment report, actin -> action --- .../views/snackspace/purchasePayment/payment_report.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/snackspace/purchasePayment/payment_report.blade.php b/resources/views/snackspace/purchasePayment/payment_report.blade.php index e1fd781b..747be6cc 100644 --- a/resources/views/snackspace/purchasePayment/payment_report.blade.php +++ b/resources/views/snackspace/purchasePayment/payment_report.blade.php @@ -50,7 +50,7 @@

Change report period

-
+
From c8be11753d6257012d9b4fad564d2c1355f930d4 Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 22 Mar 2025 11:29:31 +0000 Subject: [PATCH 4/5] Tools: Correct closing tag for isHidden table row --- resources/views/tools/tool/show.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/tools/tool/show.blade.php b/resources/views/tools/tool/show.blade.php index a87cfc2e..b8f0b941 100644 --- a/resources/views/tools/tool/show.blade.php +++ b/resources/views/tools/tool/show.blade.php @@ -47,7 +47,7 @@ Hidden {{ $tool->isHidden() ? "Yes" : "No" }} - +
From efc55adab80c0ddbdc76590292f3937ab2d62572 Mon Sep 17 00:00:00 2001 From: Aaron Jackson Date: Sat, 22 Mar 2025 12:02:28 +0000 Subject: [PATCH 5/5] Tools: Cleanup permissions of recent users page It should be available only to maintainers and those that can edit all tools. --- app/Http/Controllers/Tools/ToolController.php | 10 +++++++++- resources/views/tools/tool/show.blade.php | 2 ++ resources/views/tools/tool/usage.blade.php | 2 -- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Tools/ToolController.php b/app/Http/Controllers/Tools/ToolController.php index c0d7fb16..60610c5b 100644 --- a/app/Http/Controllers/Tools/ToolController.php +++ b/app/Http/Controllers/Tools/ToolController.php @@ -95,7 +95,7 @@ public function __construct( $this->middleware('feature:tools'); $this->middleware('can:tools.view')->only(['index', 'show']); $this->middleware('can:tools.create')->only(['create', 'store']); - $this->middleware('can:tools.edit')->only(['edit', 'update', 'showUsage']); + $this->middleware('can:tools.edit')->only(['edit', 'update']); $this->middleware('can:tools.destroy')->only(['destroy']); $this->middleware('can:tools.addFreeTime')->only(['addFreeTime']); } @@ -177,6 +177,7 @@ public function show(Tool $tool) /** * Show usage for a specific tool. + * Visible to those who can edit all tools, and the specific tool maintainer. * * @param Request $request * @param Tool $tool @@ -185,6 +186,13 @@ public function show(Tool $tool) */ public function showUsage(Request $request, Tool $tool) { + if (Gate::none([ + 'tools.edit', + 'tools.' . $tool->getPermissionName() . '.maintain', + ])) { + throw new AuthorizationException('This action is unauthorized.'); + } + $validatedData = $request->validate([ 'startDate' => 'required_with:endDate|date_format:Y-m-d', 'endDate' => 'required_with:startDate|date_format:Y-m-d', diff --git a/resources/views/tools/tool/show.blade.php b/resources/views/tools/tool/show.blade.php index b8f0b941..29a7020d 100644 --- a/resources/views/tools/tool/show.blade.php +++ b/resources/views/tools/tool/show.blade.php @@ -71,6 +71,8 @@

@canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.maintainer.grant']) View Maintainers + @endcan + @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.edit']) Show Recent Usage @endcan @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.inductor.grant' , 'tools.' . $tool->getPermissionName() . '.induct']) diff --git a/resources/views/tools/tool/usage.blade.php b/resources/views/tools/tool/usage.blade.php index 36fe7dee..972c2d3b 100644 --- a/resources/views/tools/tool/usage.blade.php +++ b/resources/views/tools/tool/usage.blade.php @@ -5,7 +5,6 @@ @section('content')

Usage: {{ $tool->getName() }}

- @canany(['tools.' . $tool->getPermissionName() . '.maintain', 'tools.inductor.grant']) @forelse ($usage as $use) @if ($loop->first)
@@ -34,7 +33,6 @@ No usage for this period.

@endforelse - @endcan

Change usage period