From b1d62cc4784ed69ddadb87cc8ecdc407dba3be24 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Wed, 16 Oct 2024 17:23:22 -0500 Subject: [PATCH 01/15] initial untested --- _ide_helper_actions.php | 44 +++ .../CreateCheckoutRequest.php | 75 ++++ app/Http/Controllers/ViewAssetsController.php | 59 +-- composer.json | 4 +- composer.lock | 346 +++++++++++++++++- 5 files changed, 470 insertions(+), 58 deletions(-) create mode 100644 _ide_helper_actions.php create mode 100644 app/Actions/CheckoutRequests/CreateCheckoutRequest.php diff --git a/_ide_helper_actions.php b/_ide_helper_actions.php new file mode 100644 index 000000000..a42049395 --- /dev/null +++ b/_ide_helper_actions.php @@ -0,0 +1,44 @@ +user(); + + // Check if the asset exists and is requestable + if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { + return redirect()->route('requestable-assets') + ->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')); + } + if (!Company::isCurrentUserHasAccess($asset)) { + return redirect()->route('requestable-assets') + ->with('error', trans('general.insufficient_permissions')); + } + + $data['item'] = $asset; + $data['target'] = auth()->user(); + $data['item_quantity'] = 1; + $settings = Setting::getSettings(); + + $logaction = new Actionlog(); + $logaction->item_id = $data['asset_id'] = $asset->id; + $logaction->item_type = $data['item_type'] = Asset::class; + $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); + + if ($user->location_id) { + $logaction->location_id = $user->location_id; + } + $logaction->target_id = $data['user_id'] = auth()->id(); + $logaction->target_type = User::class; + + // If it's already requested, cancel the request. + if ($asset->isRequestedBy(auth()->user())) { + $asset->cancelRequest(); + $asset->decrement('requests_counter', 1); + + $logaction->logaction('request canceled'); + try { + $settings->notify(new RequestAssetCancelation($data)); + } catch (\Exception $e) { + Log::warning($e); + } + return redirect()->route('requestable-assets') + ->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); + } + + $logaction->logaction('requested'); + $asset->request(); + $asset->increment('requests_counter', 1); + try { + $settings->notify(new RequestAssetNotification($data)); + } catch (\Exception $e) { + Log::warning($e); + } + + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + } +} diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 12c300e5b..d9c1f0fac 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -2,10 +2,10 @@ namespace App\Http\Controllers; +use App\Actions\CheckoutRequests\CreateCheckoutRequest; use App\Models\Actionlog; use App\Models\Asset; use App\Models\AssetModel; -use App\Models\Company; use App\Models\Setting; use App\Models\User; use App\Notifications\RequestAssetCancelation; @@ -13,7 +13,6 @@ use App\Notifications\RequestAssetNotification; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use \Illuminate\Contracts\View\View; -use Log; /** * This controller handles all actions related to the ability for users @@ -144,61 +143,9 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset($assetId = null) : RedirectResponse + public function getRequestAsset($assetId = null): void { - $user = auth()->user(); - - // Check if the asset exists and is requestable - if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { - return redirect()->route('requestable-assets') - ->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')); - } - if (! Company::isCurrentUserHasAccess($asset)) { - return redirect()->route('requestable-assets') - ->with('error', trans('general.insufficient_permissions')); - } - - $data['item'] = $asset; - $data['target'] = auth()->user(); - $data['item_quantity'] = 1; - $settings = Setting::getSettings(); - - $logaction = new Actionlog(); - $logaction->item_id = $data['asset_id'] = $asset->id; - $logaction->item_type = $data['item_type'] = Asset::class; - $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); - - if ($user->location_id) { - $logaction->location_id = $user->location_id; - } - $logaction->target_id = $data['user_id'] = auth()->id(); - $logaction->target_type = User::class; - - // If it's already requested, cancel the request. - if ($asset->isRequestedBy(auth()->user())) { - $asset->cancelRequest(); - $asset->decrement('requests_counter', 1); - - $logaction->logaction('request canceled'); - try { - $settings->notify(new RequestAssetCancelation($data)); - } catch (\Exception $e) { - Log::warning($e); - } - return redirect()->route('requestable-assets') - ->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); - } - - $logaction->logaction('requested'); - $asset->request(); - $asset->increment('requests_counter', 1); - try { - $settings->notify(new RequestAssetNotification($data)); - } catch (\Exception $e) { - Log::warning($e); - } - - return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + CreateCheckoutRequest::run($assetId); } public function getRequestedAssets() : View diff --git a/composer.json b/composer.json index 6d8931257..c96b11e1b 100644 --- a/composer.json +++ b/composer.json @@ -50,6 +50,7 @@ "league/csv": "^9.7", "league/flysystem-aws-s3-v3": "^3.0", "livewire/livewire": "^3.5", + "lorisleiva/laravel-actions": "^2.8", "neitanod/forceutf8": "^2.0", "nesbot/carbon": "^2.32", "nunomaduro/collision": "^7.0", @@ -84,7 +85,8 @@ "squizlabs/php_codesniffer": "^3.5", "symfony/css-selector": "^4.4", "symfony/dom-crawler": "^4.4", - "vimeo/psalm": "^5.13" + "vimeo/psalm": "^5.13", + "wulfheart/laravel-actions-ide-helper": "^0.8.0" }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index 3f79921b2..09504209f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "3819ab4ef72eb77fabe494c0e746b83b", + "content-hash": "9bbdc0f3c60b21a77208b4c65c2f5bdb", "packages": [ { "name": "alek13/slack", @@ -4535,6 +4535,154 @@ ], "time": "2024-10-01T12:40:06+00:00" }, + { + "name": "lorisleiva/laravel-actions", + "version": "v2.8.4", + "source": { + "type": "git", + "url": "https://github.com/lorisleiva/laravel-actions.git", + "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/5a168bfdd3b75dd6ff259019d4aeef784bbd5403", + "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "lorisleiva/lody": "^0.5", + "php": "^8.1" + }, + "require-dev": { + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^1.23|^2.34", + "phpunit/phpunit": "^9.6|^10.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Lorisleiva\\Actions\\ActionServiceProvider" + ], + "aliases": { + "Action": "Lorisleiva\\Actions\\Facades\\Actions" + } + } + }, + "autoload": { + "psr-4": { + "Lorisleiva\\Actions\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loris Leiva", + "email": "loris.leiva@gmail.com", + "homepage": "https://lorisleiva.com", + "role": "Developer" + } + ], + "description": "Laravel components that take care of one specific task", + "homepage": "https://github.com/lorisleiva/laravel-actions", + "keywords": [ + "action", + "command", + "component", + "controller", + "job", + "laravel", + "listener", + "object" + ], + "support": { + "issues": "https://github.com/lorisleiva/laravel-actions/issues", + "source": "https://github.com/lorisleiva/laravel-actions/tree/v2.8.4" + }, + "funding": [ + { + "url": "https://github.com/sponsors/lorisleiva", + "type": "github" + } + ], + "time": "2024-09-10T09:57:29+00:00" + }, + { + "name": "lorisleiva/lody", + "version": "v0.5.0", + "source": { + "type": "git", + "url": "https://github.com/lorisleiva/lody.git", + "reference": "c2f51b070e99f3a240d66cf68ef1f232036917fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lorisleiva/lody/zipball/c2f51b070e99f3a240d66cf68ef1f232036917fe", + "reference": "c2f51b070e99f3a240d66cf68ef1f232036917fe", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^9.0|^10.0|^11.0", + "php": "^8.0" + }, + "require-dev": { + "orchestra/testbench": "^9.0", + "pestphp/pest": "^1.20|^2.34", + "phpunit/phpunit": "^9.5.10|^10.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Lorisleiva\\Lody\\LodyServiceProvider" + ], + "aliases": { + "Lody": "Lorisleiva\\Lody\\Lody" + } + } + }, + "autoload": { + "psr-4": { + "Lorisleiva\\Lody\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Loris Leiva", + "email": "loris.leiva@gmail.com", + "homepage": "https://lorisleiva.com", + "role": "Developer" + } + ], + "description": "Load files and classes as lazy collections in Laravel.", + "homepage": "https://github.com/lorisleiva/lody", + "keywords": [ + "classes", + "collection", + "files", + "laravel", + "load" + ], + "support": { + "issues": "https://github.com/lorisleiva/lody/issues", + "source": "https://github.com/lorisleiva/lody/tree/v0.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/lorisleiva", + "type": "github" + } + ], + "time": "2024-03-13T12:08:59+00:00" + }, { "name": "masterminds/html5", "version": "2.9.0", @@ -13775,6 +13923,73 @@ }, "time": "2024-03-27T12:14:49+00:00" }, + { + "name": "phpdocumentor/reflection", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/Reflection.git", + "reference": "61e2f1fe7683e9647b9ed8d9e53d08699385267d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/61e2f1fe7683e9647b9ed8d9e53d08699385267d", + "reference": "61e2f1fe7683e9647b9ed8d9e53d08699385267d", + "shasum": "" + }, + "require": { + "nikic/php-parser": "~4.18 || ^5.0", + "php": "8.1.*|8.2.*|8.3.*", + "phpdocumentor/reflection-common": "^2.1", + "phpdocumentor/reflection-docblock": "^5", + "phpdocumentor/type-resolver": "^1.2", + "symfony/polyfill-php80": "^1.28", + "webmozart/assert": "^1.7" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "doctrine/coding-standard": "^12.0", + "mikey179/vfsstream": "~1.2", + "mockery/mockery": "~1.6.0", + "phpspec/prophecy-phpunit": "^2.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^10.0", + "psalm/phar": "^5.24", + "rector/rector": "^1.0.0", + "squizlabs/php_codesniffer": "^3.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-5.x": "5.3.x-dev", + "dev-6.x": "6.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\": "src/phpDocumentor" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Reflection library to do Static Analysis for PHP Projects", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpDocumentor/Reflection/issues", + "source": "https://github.com/phpDocumentor/Reflection/tree/6.0.0" + }, + "time": "2024-05-23T19:28:12+00:00" + }, { "name": "phpmyadmin/sql-parser", "version": "5.10.0", @@ -14872,6 +15087,60 @@ ], "time": "2024-06-11T12:45:25+00:00" }, + { + "name": "riimu/kit-pathjoin", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/Riimu/Kit-PathJoin.git", + "reference": "8ad2656c79527dba9f7f20e1229dcd38abfe8cee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Riimu/Kit-PathJoin/zipball/8ad2656c79527dba9f7f20e1229dcd38abfe8cee", + "reference": "8ad2656c79527dba9f7f20e1229dcd38abfe8cee", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.3", + "phpunit/phpunit": "^5.7 || ^6.2", + "squizlabs/php_codesniffer": "^3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Riimu\\Kit\\PathJoin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Riikka Kalliomäki", + "email": "riikka.kalliomaki@gmail.com", + "homepage": "http://riimu.net" + } + ], + "description": "Cross-platform library for normalizing and joining file system paths", + "homepage": "http://kit.riimu.net", + "keywords": [ + "file", + "join", + "normalize", + "path", + "system" + ], + "support": { + "issues": "https://github.com/Riimu/Kit-PathJoin/issues", + "source": "https://github.com/Riimu/Kit-PathJoin/tree/master" + }, + "time": "2017-07-09T14:41:04+00:00" + }, { "name": "sebastian/cli-parser", "version": "2.0.1", @@ -16640,6 +16909,81 @@ "source": "https://github.com/vimeo/psalm" }, "time": "2024-09-08T18:53:08+00:00" + }, + { + "name": "wulfheart/laravel-actions-ide-helper", + "version": "v0.8.0", + "source": { + "type": "git", + "url": "https://github.com/Wulfheart/laravel-actions-ide-helper.git", + "reference": "48e9d7c89804fcd459a73cc22adee533e7a88deb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Wulfheart/laravel-actions-ide-helper/zipball/48e9d7c89804fcd459a73cc22adee533e7a88deb", + "reference": "48e9d7c89804fcd459a73cc22adee533e7a88deb", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0|^11.0", + "lorisleiva/laravel-actions": "^2.3", + "lorisleiva/lody": "^0.5.0", + "php": "^8.1|^8.2", + "phpdocumentor/reflection": "^5.1|^6.0", + "riimu/kit-pathjoin": "^1.2", + "spatie/laravel-package-tools": "^1.14" + }, + "require-dev": { + "brianium/paratest": "^6.8|^7.4", + "nunomaduro/collision": "^6.1|^8.0", + "orchestra/testbench": "^8.0|^9.0", + "pestphp/pest": "^1.22|^2.34", + "phpunit/phpunit": "^9.5.10|^10.5", + "spatie/invade": "^1.1|^2.0", + "spatie/laravel-ray": "^1.32", + "spatie/pest-plugin-snapshots": "^1.1|^2.1", + "vimeo/psalm": "^5.6" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Wulfheart\\LaravelActionsIdeHelper\\LaravelActionsIdeHelperServiceProvider" + ], + "aliases": { + "LaravelActionsIdeHelper": "Wulfheart\\LaravelActionsIdeHelper\\LaravelActionsIdeHelperFacade" + } + } + }, + "autoload": { + "psr-4": { + "Wulfheart\\LaravelActionsIdeHelper\\": "src", + "Wulfheart\\LaravelActionsIdeHelper\\Database\\Factories\\": "database/factories" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Wulf", + "email": "dev@alexfwulf.de", + "role": "Developer" + } + ], + "description": "Generate a new IDE Helper file for Laravel Actions.", + "homepage": "https://github.com/wulfheart/laravel-actions-ide-helper", + "keywords": [ + "laravel", + "laravel-actions-ide-helper", + "wulfheart" + ], + "support": { + "issues": "https://github.com/Wulfheart/laravel-actions-ide-helper/issues", + "source": "https://github.com/Wulfheart/laravel-actions-ide-helper/tree/v0.8.0" + }, + "time": "2024-08-30T14:32:22+00:00" } ], "aliases": [], From a524c0b418de29f2393aa49a9dc82f7de00ce2e7 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Wed, 16 Oct 2024 18:48:15 -0500 Subject: [PATCH 02/15] more work --- _ide_helper_actions.php | 44 ------------------- .../CreateCheckoutRequest.php | 41 +++++++++++++---- app/Http/Controllers/ViewAssetsController.php | 6 ++- 3 files changed, 37 insertions(+), 54 deletions(-) delete mode 100644 _ide_helper_actions.php diff --git a/_ide_helper_actions.php b/_ide_helper_actions.php deleted file mode 100644 index a42049395..000000000 --- a/_ide_helper_actions.php +++ /dev/null @@ -1,44 +0,0 @@ -user(); // Check if the asset exists and is requestable if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { - return redirect()->route('requestable-assets') - ->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')); + $this->status = 'doesNotExist'; + return false; } if (!Company::isCurrentUserHasAccess($asset)) { - return redirect()->route('requestable-assets') - ->with('error', trans('general.insufficient_permissions')); + $this->status = 'accessDenied'; + return false; } $data['item'] = $asset; @@ -57,8 +61,8 @@ class CreateCheckoutRequest } catch (\Exception $e) { Log::warning($e); } - return redirect()->route('requestable-assets') - ->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); + $this->status = 'cancelled'; + return true; } $logaction->logaction('requested'); @@ -67,9 +71,28 @@ class CreateCheckoutRequest try { $settings->notify(new RequestAssetNotification($data)); } catch (\Exception $e) { - Log::warning($e); + \Log::warning($e); } - return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + return true; + } + + public function jsonResponse(): JsonResponse + { + return match ($this->status) { + 'doesNotExist' => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), + 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), + default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), + }; + } + + public function htmlResponse(): RedirectResponse + { + return match ($this->status) { + 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), + 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), + 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), + default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), + }; } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index d9c1f0fac..722974713 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -145,7 +145,11 @@ class ViewAssetsController extends Controller */ public function getRequestAsset($assetId = null): void { - CreateCheckoutRequest::run($assetId); + $request = CreateCheckoutRequest::run($assetId); + + if (!$request) { + \Log::debug('problem'); + } } public function getRequestedAssets() : View From b2ff34260a0d33bc4daea43554cb5d992a1cfc38 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Thu, 17 Oct 2024 00:02:15 -0500 Subject: [PATCH 03/15] hm, lots of thinking to do --- .../CreateCheckoutRequest.php | 19 ++++++++++++++++--- app/Http/Controllers/ViewAssetsController.php | 6 +----- routes/web.php | 1 + 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index a8c6d4136..5cfcecc78 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -13,15 +13,19 @@ use App\Notifications\RequestAssetNotification; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Lorisleiva\Actions\Concerns\AsAction; +use Lorisleiva\Actions\Concerns\AsController; +use Lorisleiva\Actions\Concerns\WithAttributes; class CreateCheckoutRequest { use AsAction; + use WithAttributes; - public string $status; + public string $status = ''; public function handle($assetId) { + dump($assetId); $user = auth()->user(); // Check if the asset exists and is requestable @@ -59,7 +63,7 @@ class CreateCheckoutRequest try { $settings->notify(new RequestAssetCancelation($data)); } catch (\Exception $e) { - Log::warning($e); + \Log::warning($e); } $this->status = 'cancelled'; return true; @@ -73,12 +77,19 @@ class CreateCheckoutRequest } catch (\Exception $e) { \Log::warning($e); } + dump('handle end'); + } - return true; + public function asController($assetId) + { + dump('asController'); + $asset = $this->handle($assetId); + //return $asset; } public function jsonResponse(): JsonResponse { + dump('json'); return match ($this->status) { 'doesNotExist' => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), @@ -88,7 +99,9 @@ class CreateCheckoutRequest public function htmlResponse(): RedirectResponse { + dump('redirects'); return match ($this->status) { + dump('redirects'), 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 722974713..d9c1f0fac 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -145,11 +145,7 @@ class ViewAssetsController extends Controller */ public function getRequestAsset($assetId = null): void { - $request = CreateCheckoutRequest::run($assetId); - - if (!$request) { - \Log::debug('problem'); - } + CreateCheckoutRequest::run($assetId); } public function getRequestedAssets() : View diff --git a/routes/web.php b/routes/web.php index 60b74476c..76df83e11 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,5 +1,6 @@ Date: Thu, 17 Oct 2024 12:45:49 -0500 Subject: [PATCH 04/15] this works --- .../CreateCheckoutRequest.php | 51 +++++++++---------- app/Http/Controllers/Api/CheckoutRequest.php | 23 +++++++++ app/Http/Controllers/ViewAssetsController.php | 12 ++++- 3 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 app/Http/Controllers/Api/CheckoutRequest.php diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index 5cfcecc78..e0caafa27 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -30,12 +30,10 @@ class CreateCheckoutRequest // Check if the asset exists and is requestable if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { - $this->status = 'doesNotExist'; - return false; + return $this->status = 'doesNotExist'; } if (!Company::isCurrentUserHasAccess($asset)) { - $this->status = 'accessDenied'; - return false; + return $this->status = 'accessDenied'; } $data['item'] = $asset; @@ -65,8 +63,7 @@ class CreateCheckoutRequest } catch (\Exception $e) { \Log::warning($e); } - $this->status = 'cancelled'; - return true; + return $this->status = 'cancelled'; } $logaction->logaction('requested'); @@ -78,6 +75,8 @@ class CreateCheckoutRequest \Log::warning($e); } dump('handle end'); + + return $this->status = 'success'; } public function asController($assetId) @@ -87,25 +86,25 @@ class CreateCheckoutRequest //return $asset; } - public function jsonResponse(): JsonResponse - { - dump('json'); - return match ($this->status) { - 'doesNotExist' => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), - 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), - default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), - }; - } + //public function jsonResponse(): JsonResponse + //{ + // dump('json'); + // return match ($this->status) { + // 'doesNotExist' => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), + // 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), + // default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), + // }; + //} - public function htmlResponse(): RedirectResponse - { - dump('redirects'); - return match ($this->status) { - dump('redirects'), - 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), - 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), - 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), - default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), - }; - } + //public function htmlResponse(): RedirectResponse + //{ + // dump('redirects'); + // return match ($this->status) { + // dump('redirects'), + // 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), + // 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), + // 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), + // default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), + // }; + //} } diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php new file mode 100644 index 000000000..bbf7cd358 --- /dev/null +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -0,0 +1,23 @@ + response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), + 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), + default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), + }; + } +} diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index d9c1f0fac..6772a5762 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -143,9 +143,17 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset($assetId = null): void + public function getRequestAsset($assetId = null): RedirectResponse { - CreateCheckoutRequest::run($assetId); + $status = CreateCheckoutRequest::run($assetId); + + return match ($status) { + 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), + 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), + 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), + 'success' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), + default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), + }; } public function getRequestedAssets() : View From 95a32864cf7c10866d65207156b3c919e5727a2f Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Thu, 17 Oct 2024 18:11:18 -0500 Subject: [PATCH 05/15] =?UTF-8?q?hm,=20lots=20to=20think=20about=20?= =?UTF-8?q?=F0=9F=A4=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Actions/BaseAction.php | 19 +++++ .../CreateCheckoutRequestNew.php | 75 +++++++++++++++++++ app/Http/Controllers/ViewAssetsController.php | 6 +- 3 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 app/Actions/BaseAction.php create mode 100644 app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php diff --git a/app/Actions/BaseAction.php b/app/Actions/BaseAction.php new file mode 100644 index 000000000..bb48b336d --- /dev/null +++ b/app/Actions/BaseAction.php @@ -0,0 +1,19 @@ +$method(...$args); + } + + //abstract static function run($parameters = null) + //{ + // return call_user_func($this->run(...$parameters)); + //} + +} diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php b/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php new file mode 100644 index 000000000..6b5a7565c --- /dev/null +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php @@ -0,0 +1,75 @@ +user(); + + // Check if the asset exists and is requestable + if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { + return $status = 'doesNotExist'; + } + if (!Company::isCurrentUserHasAccess($asset)) { + return $status = 'accessDenied'; + } + + $data['item'] = $asset; + $data['target'] = auth()->user(); + $data['item_quantity'] = 1; + $settings = Setting::getSettings(); + + $logaction = new Actionlog(); + $logaction->item_id = $data['asset_id'] = $asset->id; + $logaction->item_type = $data['item_type'] = Asset::class; + $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); + + if ($user->location_id) { + $logaction->location_id = $user->location_id; + } + $logaction->target_id = $data['user_id'] = auth()->id(); + $logaction->target_type = User::class; + + // If it's already requested, cancel the request. + if ($asset->isRequestedBy(auth()->user())) { + $asset->cancelRequest(); + $asset->decrement('requests_counter', 1); + + $logaction->logaction('request canceled'); + try { + $settings->notify(new RequestAssetCancelation($data)); + } catch (\Exception $e) { + \Log::warning($e); + } + return $status = 'cancelled'; + } + + $logaction->logaction('requested'); + $asset->request(); + $asset->increment('requests_counter', 1); + try { + $settings->notify(new RequestAssetNotification($data)); + } catch (\Exception $e) { + \Log::warning($e); + } + dump('handle end'); + + return $status = 'success'; + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 6772a5762..67c3ee1c8 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers; use App\Actions\CheckoutRequests\CreateCheckoutRequest; +use App\Actions\CheckoutRequests\CreateCheckoutRequestNew; use App\Models\Actionlog; use App\Models\Asset; use App\Models\AssetModel; @@ -143,9 +144,10 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset($assetId = null): RedirectResponse + public function getRequestAsset(CreateCheckoutRequestNew $checkoutRequestNew, $assetId = null): RedirectResponse { - $status = CreateCheckoutRequest::run($assetId); + $status = CreateCheckoutRequestNew::run($assetId); + //$status = $checkoutRequestNew->run($assetId); return match ($status) { 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), From e40849c910bb89aa4a7fa2137ee651f610248bb1 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Mon, 21 Oct 2024 17:31:26 -0500 Subject: [PATCH 06/15] this stuff works --- app/Actions/BaseAction.php | 19 - .../CreateCheckoutRequest.php | 67 +--- .../CreateCheckoutRequestNew.php | 75 ---- app/Exceptions/AssetNotRequestable.php | 27 ++ app/Exceptions/UserDoestExistException.php | 10 + app/Http/Controllers/Api/CheckoutRequest.php | 9 +- app/Http/Controllers/ViewAssetsController.php | 43 ++- app/Models/Asset.php | 2 +- composer.json | 4 +- composer.lock | 346 +----------------- routes/web.php | 2 +- 11 files changed, 90 insertions(+), 514 deletions(-) delete mode 100644 app/Actions/BaseAction.php delete mode 100644 app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php create mode 100644 app/Exceptions/AssetNotRequestable.php create mode 100644 app/Exceptions/UserDoestExistException.php diff --git a/app/Actions/BaseAction.php b/app/Actions/BaseAction.php deleted file mode 100644 index bb48b336d..000000000 --- a/app/Actions/BaseAction.php +++ /dev/null @@ -1,19 +0,0 @@ -$method(...$args); - } - - //abstract static function run($parameters = null) - //{ - // return call_user_func($this->run(...$parameters)); - //} - -} diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index e0caafa27..f0a36d46a 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -2,7 +2,7 @@ namespace App\Actions\CheckoutRequests; -use App\Helpers\Helper; +use App\Exceptions\AssetNotRequestable; use App\Models\Actionlog; use App\Models\Asset; use App\Models\Company; @@ -10,34 +10,27 @@ use App\Models\Setting; use App\Models\User; use App\Notifications\RequestAssetCancelation; use App\Notifications\RequestAssetNotification; -use Illuminate\Http\JsonResponse; -use Illuminate\Http\RedirectResponse; -use Lorisleiva\Actions\Concerns\AsAction; -use Lorisleiva\Actions\Concerns\AsController; -use Lorisleiva\Actions\Concerns\WithAttributes; +use Illuminate\Auth\Access\AuthorizationException; +use Illuminate\Database\Eloquent\ModelNotFoundException; class CreateCheckoutRequest { - use AsAction; - use WithAttributes; - - public string $status = ''; - - public function handle($assetId) + /** + * @throws AssetNotRequestable + * @throws AuthorizationException + */ + public static function run(Asset $asset, User $user): string { - dump($assetId); - $user = auth()->user(); - - // Check if the asset exists and is requestable - if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { - return $this->status = 'doesNotExist'; + // Check if asset is requestable + if (is_null(Asset::RequestableAssets()->find($asset->id))) { + throw new AssetNotRequestable($asset); } if (!Company::isCurrentUserHasAccess($asset)) { - return $this->status = 'accessDenied'; + throw new AuthorizationException(); } $data['item'] = $asset; - $data['target'] = auth()->user(); + $data['target'] = $user; $data['item_quantity'] = 1; $settings = Setting::getSettings(); @@ -63,7 +56,7 @@ class CreateCheckoutRequest } catch (\Exception $e) { \Log::warning($e); } - return $this->status = 'cancelled'; + return $status = 'cancelled'; } $logaction->logaction('requested'); @@ -74,37 +67,9 @@ class CreateCheckoutRequest } catch (\Exception $e) { \Log::warning($e); } - dump('handle end'); - return $this->status = 'success'; + return $asset; } - public function asController($assetId) - { - dump('asController'); - $asset = $this->handle($assetId); - //return $asset; - } - //public function jsonResponse(): JsonResponse - //{ - // dump('json'); - // return match ($this->status) { - // 'doesNotExist' => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), - // 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), - // default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), - // }; - //} - - //public function htmlResponse(): RedirectResponse - //{ - // dump('redirects'); - // return match ($this->status) { - // dump('redirects'), - // 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), - // 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), - // 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), - // default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), - // }; - //} -} +} \ No newline at end of file diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php b/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php deleted file mode 100644 index 6b5a7565c..000000000 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequestNew.php +++ /dev/null @@ -1,75 +0,0 @@ -user(); - - // Check if the asset exists and is requestable - if (is_null($asset = Asset::RequestableAssets()->find($assetId))) { - return $status = 'doesNotExist'; - } - if (!Company::isCurrentUserHasAccess($asset)) { - return $status = 'accessDenied'; - } - - $data['item'] = $asset; - $data['target'] = auth()->user(); - $data['item_quantity'] = 1; - $settings = Setting::getSettings(); - - $logaction = new Actionlog(); - $logaction->item_id = $data['asset_id'] = $asset->id; - $logaction->item_type = $data['item_type'] = Asset::class; - $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); - - if ($user->location_id) { - $logaction->location_id = $user->location_id; - } - $logaction->target_id = $data['user_id'] = auth()->id(); - $logaction->target_type = User::class; - - // If it's already requested, cancel the request. - if ($asset->isRequestedBy(auth()->user())) { - $asset->cancelRequest(); - $asset->decrement('requests_counter', 1); - - $logaction->logaction('request canceled'); - try { - $settings->notify(new RequestAssetCancelation($data)); - } catch (\Exception $e) { - \Log::warning($e); - } - return $status = 'cancelled'; - } - - $logaction->logaction('requested'); - $asset->request(); - $asset->increment('requests_counter', 1); - try { - $settings->notify(new RequestAssetNotification($data)); - } catch (\Exception $e) { - \Log::warning($e); - } - dump('handle end'); - - return $status = 'success'; - } - - -} \ No newline at end of file diff --git a/app/Exceptions/AssetNotRequestable.php b/app/Exceptions/AssetNotRequestable.php new file mode 100644 index 000000000..8c3daa7cf --- /dev/null +++ b/app/Exceptions/AssetNotRequestable.php @@ -0,0 +1,27 @@ +errorMessage = $errorMessage; + + parent::__construct($errorMessage); + } + + public function __toString() + { + return is_null($this->errorMessage) ? 'This asset is not requestable.' : $this->errorMessage; + } + + public function getTranslatedMessage() + { + return trans($this->errorMessage); + } +} diff --git a/app/Exceptions/UserDoestExistException.php b/app/Exceptions/UserDoestExistException.php new file mode 100644 index 000000000..e14069dca --- /dev/null +++ b/app/Exceptions/UserDoestExistException.php @@ -0,0 +1,10 @@ + response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist_or_not_requestable'))), - 'accessDenied' => response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))), - default => response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.request_successfully_created'))), - }; + CreateCheckoutRequest::run($assetId); } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 67c3ee1c8..8c8b1e993 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -3,7 +3,7 @@ namespace App\Http\Controllers; use App\Actions\CheckoutRequests\CreateCheckoutRequest; -use App\Actions\CheckoutRequests\CreateCheckoutRequestNew; +use App\Exceptions\AssetNotRequestable; use App\Models\Actionlog; use App\Models\Asset; use App\Models\AssetModel; @@ -11,9 +11,11 @@ use App\Models\Setting; use App\Models\User; use App\Notifications\RequestAssetCancelation; use App\Notifications\RequestAssetNotification; +use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use \Illuminate\Contracts\View\View; +use Illuminate\Support\Facades\Log; /** * This controller handles all actions related to the ability for users @@ -144,20 +146,39 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset(CreateCheckoutRequestNew $checkoutRequestNew, $assetId = null): RedirectResponse + public function getRequestAsset(Asset $asset): RedirectResponse { - $status = CreateCheckoutRequestNew::run($assetId); - //$status = $checkoutRequestNew->run($assetId); + try { + CreateCheckoutRequest::run($asset, auth()->user()); + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + } catch (AssetNotRequestable $e) { + return redirect()->back()->with('error', 'poop'); + } catch (AuthorizationException $e) { + return redirect()->back()->with('error', trans('admin/hardware/message.requests.error')); + } catch (\Exception $e) { + report($e); + return redirect()->back()->with('error', 'generic error message'); + } - return match ($status) { - 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), - 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), - 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), - 'success' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), - default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), - }; + + //$status = CreateCheckoutRequest::run($asset, auth()->user()); + // + //return match ($status) { + // 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), + // 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), + // 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), + // default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), + //}; } + //public function destroy(Asset $asset): RedirectResponse + //{ + // try { + // CancelCheckoutRequest($asset, auth()->user()); + // } + //} + + public function getRequestedAssets() : View { return view('account/requested'); diff --git a/app/Models/Asset.php b/app/Models/Asset.php index ce8b870eb..5bf49186f 100644 --- a/app/Models/Asset.php +++ b/app/Models/Asset.php @@ -1433,7 +1433,7 @@ class Asset extends Depreciable * @return \Illuminate\Database\Query\Builder Modified query builder */ - public function scopeRequestableAssets($query) + public function scopeRequestableAssets($query): Builder { $table = $query->getModel()->getTable(); diff --git a/composer.json b/composer.json index c96b11e1b..6d8931257 100644 --- a/composer.json +++ b/composer.json @@ -50,7 +50,6 @@ "league/csv": "^9.7", "league/flysystem-aws-s3-v3": "^3.0", "livewire/livewire": "^3.5", - "lorisleiva/laravel-actions": "^2.8", "neitanod/forceutf8": "^2.0", "nesbot/carbon": "^2.32", "nunomaduro/collision": "^7.0", @@ -85,8 +84,7 @@ "squizlabs/php_codesniffer": "^3.5", "symfony/css-selector": "^4.4", "symfony/dom-crawler": "^4.4", - "vimeo/psalm": "^5.13", - "wulfheart/laravel-actions-ide-helper": "^0.8.0" + "vimeo/psalm": "^5.13" }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index 09504209f..3f79921b2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9bbdc0f3c60b21a77208b4c65c2f5bdb", + "content-hash": "3819ab4ef72eb77fabe494c0e746b83b", "packages": [ { "name": "alek13/slack", @@ -4535,154 +4535,6 @@ ], "time": "2024-10-01T12:40:06+00:00" }, - { - "name": "lorisleiva/laravel-actions", - "version": "v2.8.4", - "source": { - "type": "git", - "url": "https://github.com/lorisleiva/laravel-actions.git", - "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lorisleiva/laravel-actions/zipball/5a168bfdd3b75dd6ff259019d4aeef784bbd5403", - "reference": "5a168bfdd3b75dd6ff259019d4aeef784bbd5403", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0", - "lorisleiva/lody": "^0.5", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^1.23|^2.34", - "phpunit/phpunit": "^9.6|^10.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Lorisleiva\\Actions\\ActionServiceProvider" - ], - "aliases": { - "Action": "Lorisleiva\\Actions\\Facades\\Actions" - } - } - }, - "autoload": { - "psr-4": { - "Lorisleiva\\Actions\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Loris Leiva", - "email": "loris.leiva@gmail.com", - "homepage": "https://lorisleiva.com", - "role": "Developer" - } - ], - "description": "Laravel components that take care of one specific task", - "homepage": "https://github.com/lorisleiva/laravel-actions", - "keywords": [ - "action", - "command", - "component", - "controller", - "job", - "laravel", - "listener", - "object" - ], - "support": { - "issues": "https://github.com/lorisleiva/laravel-actions/issues", - "source": "https://github.com/lorisleiva/laravel-actions/tree/v2.8.4" - }, - "funding": [ - { - "url": "https://github.com/sponsors/lorisleiva", - "type": "github" - } - ], - "time": "2024-09-10T09:57:29+00:00" - }, - { - "name": "lorisleiva/lody", - "version": "v0.5.0", - "source": { - "type": "git", - "url": "https://github.com/lorisleiva/lody.git", - "reference": "c2f51b070e99f3a240d66cf68ef1f232036917fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/lorisleiva/lody/zipball/c2f51b070e99f3a240d66cf68ef1f232036917fe", - "reference": "c2f51b070e99f3a240d66cf68ef1f232036917fe", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^9.0|^10.0|^11.0", - "php": "^8.0" - }, - "require-dev": { - "orchestra/testbench": "^9.0", - "pestphp/pest": "^1.20|^2.34", - "phpunit/phpunit": "^9.5.10|^10.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Lorisleiva\\Lody\\LodyServiceProvider" - ], - "aliases": { - "Lody": "Lorisleiva\\Lody\\Lody" - } - } - }, - "autoload": { - "psr-4": { - "Lorisleiva\\Lody\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Loris Leiva", - "email": "loris.leiva@gmail.com", - "homepage": "https://lorisleiva.com", - "role": "Developer" - } - ], - "description": "Load files and classes as lazy collections in Laravel.", - "homepage": "https://github.com/lorisleiva/lody", - "keywords": [ - "classes", - "collection", - "files", - "laravel", - "load" - ], - "support": { - "issues": "https://github.com/lorisleiva/lody/issues", - "source": "https://github.com/lorisleiva/lody/tree/v0.5.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/lorisleiva", - "type": "github" - } - ], - "time": "2024-03-13T12:08:59+00:00" - }, { "name": "masterminds/html5", "version": "2.9.0", @@ -13923,73 +13775,6 @@ }, "time": "2024-03-27T12:14:49+00:00" }, - { - "name": "phpdocumentor/reflection", - "version": "6.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/Reflection.git", - "reference": "61e2f1fe7683e9647b9ed8d9e53d08699385267d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/Reflection/zipball/61e2f1fe7683e9647b9ed8d9e53d08699385267d", - "reference": "61e2f1fe7683e9647b9ed8d9e53d08699385267d", - "shasum": "" - }, - "require": { - "nikic/php-parser": "~4.18 || ^5.0", - "php": "8.1.*|8.2.*|8.3.*", - "phpdocumentor/reflection-common": "^2.1", - "phpdocumentor/reflection-docblock": "^5", - "phpdocumentor/type-resolver": "^1.2", - "symfony/polyfill-php80": "^1.28", - "webmozart/assert": "^1.7" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^1.0", - "doctrine/coding-standard": "^12.0", - "mikey179/vfsstream": "~1.2", - "mockery/mockery": "~1.6.0", - "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^10.0", - "psalm/phar": "^5.24", - "rector/rector": "^1.0.0", - "squizlabs/php_codesniffer": "^3.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-5.x": "5.3.x-dev", - "dev-6.x": "6.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\": "src/phpDocumentor" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Reflection library to do Static Analysis for PHP Projects", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/Reflection/issues", - "source": "https://github.com/phpDocumentor/Reflection/tree/6.0.0" - }, - "time": "2024-05-23T19:28:12+00:00" - }, { "name": "phpmyadmin/sql-parser", "version": "5.10.0", @@ -15087,60 +14872,6 @@ ], "time": "2024-06-11T12:45:25+00:00" }, - { - "name": "riimu/kit-pathjoin", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/Riimu/Kit-PathJoin.git", - "reference": "8ad2656c79527dba9f7f20e1229dcd38abfe8cee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Riimu/Kit-PathJoin/zipball/8ad2656c79527dba9f7f20e1229dcd38abfe8cee", - "reference": "8ad2656c79527dba9f7f20e1229dcd38abfe8cee", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.3", - "phpunit/phpunit": "^5.7 || ^6.2", - "squizlabs/php_codesniffer": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Riimu\\Kit\\PathJoin\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Riikka Kalliomäki", - "email": "riikka.kalliomaki@gmail.com", - "homepage": "http://riimu.net" - } - ], - "description": "Cross-platform library for normalizing and joining file system paths", - "homepage": "http://kit.riimu.net", - "keywords": [ - "file", - "join", - "normalize", - "path", - "system" - ], - "support": { - "issues": "https://github.com/Riimu/Kit-PathJoin/issues", - "source": "https://github.com/Riimu/Kit-PathJoin/tree/master" - }, - "time": "2017-07-09T14:41:04+00:00" - }, { "name": "sebastian/cli-parser", "version": "2.0.1", @@ -16909,81 +16640,6 @@ "source": "https://github.com/vimeo/psalm" }, "time": "2024-09-08T18:53:08+00:00" - }, - { - "name": "wulfheart/laravel-actions-ide-helper", - "version": "v0.8.0", - "source": { - "type": "git", - "url": "https://github.com/Wulfheart/laravel-actions-ide-helper.git", - "reference": "48e9d7c89804fcd459a73cc22adee533e7a88deb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Wulfheart/laravel-actions-ide-helper/zipball/48e9d7c89804fcd459a73cc22adee533e7a88deb", - "reference": "48e9d7c89804fcd459a73cc22adee533e7a88deb", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0|^11.0", - "lorisleiva/laravel-actions": "^2.3", - "lorisleiva/lody": "^0.5.0", - "php": "^8.1|^8.2", - "phpdocumentor/reflection": "^5.1|^6.0", - "riimu/kit-pathjoin": "^1.2", - "spatie/laravel-package-tools": "^1.14" - }, - "require-dev": { - "brianium/paratest": "^6.8|^7.4", - "nunomaduro/collision": "^6.1|^8.0", - "orchestra/testbench": "^8.0|^9.0", - "pestphp/pest": "^1.22|^2.34", - "phpunit/phpunit": "^9.5.10|^10.5", - "spatie/invade": "^1.1|^2.0", - "spatie/laravel-ray": "^1.32", - "spatie/pest-plugin-snapshots": "^1.1|^2.1", - "vimeo/psalm": "^5.6" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Wulfheart\\LaravelActionsIdeHelper\\LaravelActionsIdeHelperServiceProvider" - ], - "aliases": { - "LaravelActionsIdeHelper": "Wulfheart\\LaravelActionsIdeHelper\\LaravelActionsIdeHelperFacade" - } - } - }, - "autoload": { - "psr-4": { - "Wulfheart\\LaravelActionsIdeHelper\\": "src", - "Wulfheart\\LaravelActionsIdeHelper\\Database\\Factories\\": "database/factories" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander Wulf", - "email": "dev@alexfwulf.de", - "role": "Developer" - } - ], - "description": "Generate a new IDE Helper file for Laravel Actions.", - "homepage": "https://github.com/wulfheart/laravel-actions-ide-helper", - "keywords": [ - "laravel", - "laravel-actions-ide-helper", - "wulfheart" - ], - "support": { - "issues": "https://github.com/Wulfheart/laravel-actions-ide-helper/issues", - "source": "https://github.com/Wulfheart/laravel-actions-ide-helper/tree/v0.8.0" - }, - "time": "2024-08-30T14:32:22+00:00" } ], "aliases": [], diff --git a/routes/web.php b/routes/web.php index 76df83e11..137ed83b4 100644 --- a/routes/web.php +++ b/routes/web.php @@ -304,7 +304,7 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () { [ViewAssetsController::class, 'getRequestableIndex'] )->name('requestable-assets'); Route::post( - 'request-asset/{assetId}', + 'request-asset/{asset}', [ViewAssetsController::class, 'getRequestAsset'] )->name('account/request-asset'); From b59bf495e148af73eef047b7de84f3b2ba3e9db2 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 15:09:35 -0500 Subject: [PATCH 07/15] stuff --- .../CheckoutRequests/CreateCheckoutRequest.php | 12 +++++++++--- app/Http/Controllers/Api/CheckoutRequest.php | 17 +++++++++++++++-- app/Http/Controllers/ViewAssetsController.php | 16 +++------------- routes/api.php | 2 ++ routes/web.php | 2 +- .../Feature/Checkouts/Api/AssetCheckoutTest.php | 9 +++++++++ 6 files changed, 39 insertions(+), 19 deletions(-) diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index f0a36d46a..c9fd4c938 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -3,6 +3,7 @@ namespace App\Actions\CheckoutRequests; use App\Exceptions\AssetNotRequestable; +use App\Exceptions\ThereIsNoUser; use App\Models\Actionlog; use App\Models\Asset; use App\Models\Company; @@ -11,7 +12,6 @@ use App\Models\User; use App\Notifications\RequestAssetCancelation; use App\Notifications\RequestAssetNotification; use Illuminate\Auth\Access\AuthorizationException; -use Illuminate\Database\Eloquent\ModelNotFoundException; class CreateCheckoutRequest { @@ -21,7 +21,7 @@ class CreateCheckoutRequest */ public static function run(Asset $asset, User $user): string { - // Check if asset is requestable + //throw new \Exception(); if (is_null(Asset::RequestableAssets()->find($asset->id))) { throw new AssetNotRequestable($asset); } @@ -46,6 +46,7 @@ class CreateCheckoutRequest $logaction->target_type = User::class; // If it's already requested, cancel the request. + // this is going into another action class if ($asset->isRequestedBy(auth()->user())) { $asset->cancelRequest(); $asset->decrement('requests_counter', 1); @@ -68,7 +69,12 @@ class CreateCheckoutRequest \Log::warning($e); } - return $asset; + return true; // or $asset, or whatever + } + + public function doSomethingElse() + { + } diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php index f7a6023cd..b1c976cf2 100644 --- a/app/Http/Controllers/Api/CheckoutRequest.php +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -3,14 +3,27 @@ namespace App\Http\Controllers\Api; use App\Actions\CheckoutRequests\CreateCheckoutRequest; +use App\Exceptions\AssetNotRequestable; use App\Helpers\Helper; use App\Http\Controllers\Controller; +use App\Models\Asset; +use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Http\JsonResponse; class CheckoutRequest extends Controller { - public function store($assetId): JsonResponse + public function store(CheckoutRequestRequest $request, Asset $asset): JsonResponse { - CreateCheckoutRequest::run($assetId); + try { + CreateCheckoutRequest::run($asset, $request->validated()['user_id']); + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.success'))); + } catch (AssetNotRequestable $e) { + return response()->json(Helper::formatStandardApiResponse('error', 'Asset is not requestable')); + } catch (AuthorizationException $e) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))); + } catch (\Exception $e) { + report($e); + return response()->json(Helper::formatStandardApiResponse('error', null, 'Something terrible has gone wrong and we\'re not sure if we can help - may god have mercy on your soul. Contact your admin :)')); + } } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 8c8b1e993..605bbb8b9 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -146,29 +146,19 @@ class ViewAssetsController extends Controller * Process a specific requested asset * @param null $assetId */ - public function getRequestAsset(Asset $asset): RedirectResponse + public function store(Asset $asset): RedirectResponse { try { CreateCheckoutRequest::run($asset, auth()->user()); return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); } catch (AssetNotRequestable $e) { - return redirect()->back()->with('error', 'poop'); + return redirect()->back()->with('error', 'Asset is not requestable'); } catch (AuthorizationException $e) { return redirect()->back()->with('error', trans('admin/hardware/message.requests.error')); } catch (\Exception $e) { report($e); - return redirect()->back()->with('error', 'generic error message'); + return redirect()->back()->with('error', 'Something terrible has gone wrong and we\'re not sure if we can help - may god have mercy on your soul. Contact your admin :)'); } - - - //$status = CreateCheckoutRequest::run($asset, auth()->user()); - // - //return match ($status) { - // 'doesNotExist' => redirect()->route('requestable-assets')->with('error', trans('admin/hardware/message.does_not_exist_or_not_requestable')), - // 'accessDenied' => redirect()->route('requestable-assets')->with('error', trans('general.insufficient_permissions')), - // 'cancelled' => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')), - // default => redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')), - //}; } //public function destroy(Asset $asset): RedirectResponse diff --git a/routes/api.php b/routes/api.php index 0581a0468..129e4d6ea 100644 --- a/routes/api.php +++ b/routes/api.php @@ -40,6 +40,8 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi ] )->name('api.assets.requested'); + Route::post('request/{asset}', [Api\CheckoutRequest::class, 'store'])->name('api.assets.requests.store'); + Route::get('requestable/hardware', [ Api\AssetsController::class, diff --git a/routes/web.php b/routes/web.php index 137ed83b4..f719231c5 100644 --- a/routes/web.php +++ b/routes/web.php @@ -305,7 +305,7 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () { )->name('requestable-assets'); Route::post( 'request-asset/{asset}', - [ViewAssetsController::class, 'getRequestAsset'] + [ViewAssetsController::class, 'store'] )->name('account/request-asset'); Route::post( diff --git a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php index ded388964..0763478a9 100644 --- a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php +++ b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php @@ -21,6 +21,15 @@ class AssetCheckoutTest extends TestCase Event::fake([CheckoutableCheckedOut::class]); } + public function testCheckoutRequest() + { + $asset = Asset::factory()->create(); + + $this->actingAsForApi(User::factory()->create()) + ->post(route('api.assets.requests.store', $asset->id)) + ->assertOk(); + } + public function testCheckingOutAssetRequiresCorrectPermission() { $this->actingAsForApi(User::factory()->create()) From 8a99cc1391ef7c98a9bdf22060cd5709e67350cc Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 17:25:58 -0500 Subject: [PATCH 08/15] test working --- app/Http/Controllers/Api/CheckoutRequest.php | 4 ++-- database/factories/AssetFactory.php | 16 ++++++++++++++-- .../Feature/Checkouts/Api/AssetCheckoutTest.php | 15 ++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php index b1c976cf2..cf179fb81 100644 --- a/app/Http/Controllers/Api/CheckoutRequest.php +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -12,10 +12,10 @@ use Illuminate\Http\JsonResponse; class CheckoutRequest extends Controller { - public function store(CheckoutRequestRequest $request, Asset $asset): JsonResponse + public function store(Asset $asset): JsonResponse { try { - CreateCheckoutRequest::run($asset, $request->validated()['user_id']); + CreateCheckoutRequest::run($asset, auth()->user()); return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.success'))); } catch (AssetNotRequestable $e) { return response()->json(Helper::formatStandardApiResponse('error', 'Asset is not requestable')); diff --git a/database/factories/AssetFactory.php b/database/factories/AssetFactory.php index 4d6d20651..1923b1515 100644 --- a/database/factories/AssetFactory.php +++ b/database/factories/AssetFactory.php @@ -347,12 +347,24 @@ class AssetFactory extends Factory public function requestable() { - return $this->state(['requestable' => true]); + $id = Statuslabel::factory()->create([ + 'archived' => false, + 'deployable' => true, + 'pending' => true, + ])->id; + //return $this->state(['requestable' => true]); + return $this->state(['status_id' => $id]); } public function nonrequestable() { - return $this->state(['requestable' => false]); + $id = Statuslabel::factory()->create([ + 'archived' => true, + 'deployable' => false, + 'pending' => false, + ])->id; + //return $this->state(['requestable' => false]); + return $this->state(['status_id' => $id]); } public function noPurchaseOrEolDate() diff --git a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php index 0763478a9..efbe74523 100644 --- a/tests/Feature/Checkouts/Api/AssetCheckoutTest.php +++ b/tests/Feature/Checkouts/Api/AssetCheckoutTest.php @@ -2,6 +2,8 @@ namespace Tests\Feature\Checkouts\Api; +use Illuminate\Support\Facades\Mail; +use Notification; use PHPUnit\Framework\Attributes\DataProvider; use App\Events\CheckoutableCheckedOut; use App\Models\Asset; @@ -23,11 +25,18 @@ class AssetCheckoutTest extends TestCase public function testCheckoutRequest() { - $asset = Asset::factory()->create(); + Notification::fake(); + $requestable = Asset::factory()->requestable()->create(); + $nonRequestable = Asset::factory()->nonrequestable()->create(); $this->actingAsForApi(User::factory()->create()) - ->post(route('api.assets.requests.store', $asset->id)) - ->assertOk(); + ->post(route('api.assets.requests.store', $requestable->id)) + ->assertStatusMessageIs('success'); + + $this->actingAsForApi(User::factory()->create()) + ->post(route('api.assets.requests.store', $nonRequestable->id)) + ->assertStatusMessageIs('error'); + } public function testCheckingOutAssetRequiresCorrectPermission() From 48c812d34564c08b5e177545714efd25ddb433c3 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 20:48:27 -0500 Subject: [PATCH 09/15] bunch of cleanup, split cancel out --- .../CancelCheckoutRequest.php | 43 +++++++++++++++++++ .../CreateCheckoutRequest.php | 36 ++++------------ app/Http/Controllers/ViewAssetsController.php | 2 +- database/factories/AssetFactory.php | 6 +-- routes/web.php | 20 +++------ 5 files changed, 62 insertions(+), 45 deletions(-) create mode 100644 app/Actions/CheckoutRequests/CancelCheckoutRequest.php diff --git a/app/Actions/CheckoutRequests/CancelCheckoutRequest.php b/app/Actions/CheckoutRequests/CancelCheckoutRequest.php new file mode 100644 index 000000000..235728be1 --- /dev/null +++ b/app/Actions/CheckoutRequests/CancelCheckoutRequest.php @@ -0,0 +1,43 @@ +cancelRequest(); + + $asset->decrement('requests_counter', 1); + + $data['item'] = $asset; + $data['target'] = $user; + $data['item_quantity'] = 1; + $settings = Setting::getSettings(); + + $logaction = Actionlog::create([ + 'item_id' => $data['asset_id'] = $asset->id, + 'item_type' => $data['item_type'] = Asset::class, + 'created_at' => $data['requested_date'] = date('Y-m-d H:i:s'), + 'target_id' => $data['user_id'] = auth()->id(), + 'target_type' => User::class, + 'location_id' => $user->location_id ?? null, + ]); + $logaction->logaction('request canceled'); + + try { + $settings->notify(new RequestAssetCancelation($data)); + } catch (\Exception $e) { + \Log::warning($e); + } + + return true; + } + +} \ No newline at end of file diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index c9fd4c938..825c1ddeb 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -21,7 +21,6 @@ class CreateCheckoutRequest */ public static function run(Asset $asset, User $user): string { - //throw new \Exception(); if (is_null(Asset::RequestableAssets()->find($asset->id))) { throw new AssetNotRequestable($asset); } @@ -34,33 +33,16 @@ class CreateCheckoutRequest $data['item_quantity'] = 1; $settings = Setting::getSettings(); - $logaction = new Actionlog(); - $logaction->item_id = $data['asset_id'] = $asset->id; - $logaction->item_type = $data['item_type'] = Asset::class; - $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); - - if ($user->location_id) { - $logaction->location_id = $user->location_id; - } - $logaction->target_id = $data['user_id'] = auth()->id(); - $logaction->target_type = User::class; - - // If it's already requested, cancel the request. - // this is going into another action class - if ($asset->isRequestedBy(auth()->user())) { - $asset->cancelRequest(); - $asset->decrement('requests_counter', 1); - - $logaction->logaction('request canceled'); - try { - $settings->notify(new RequestAssetCancelation($data)); - } catch (\Exception $e) { - \Log::warning($e); - } - return $status = 'cancelled'; - } - + $logaction = Actionlog::create([ + 'target_id' => $data['asset_id'] = $asset->id, + 'item_type' => $data['item_type'] = Asset::class, + 'created_at' => $data['requested_date'] = date('Y-m-d H:i:s'), + 'user_id' => $data['user_id'] = auth()->id(), + 'target_type' => User::class, + 'location_id' => $user->location_id ?? null, + ]); $logaction->logaction('requested'); + $asset->request(); $asset->increment('requests_counter', 1); try { diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 605bbb8b9..1f4a54b4d 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -83,7 +83,7 @@ class ViewAssetsController extends Controller return view('account/requestable-assets', compact('assets', 'models')); } - public function getRequestItem(Request $request, $itemType, $itemId = null, $cancel_by_admin = false, $requestingUser = null) : RedirectResponse + public function getRequestItem(Request $request, $itemType, $itemId = null, $cancel_by_admin = false, $requestingUser = null): RedirectResponse { $item = null; $fullItemType = 'App\\Models\\'.studly_case($itemType); diff --git a/database/factories/AssetFactory.php b/database/factories/AssetFactory.php index 1923b1515..00105205c 100644 --- a/database/factories/AssetFactory.php +++ b/database/factories/AssetFactory.php @@ -352,8 +352,7 @@ class AssetFactory extends Factory 'deployable' => true, 'pending' => true, ])->id; - //return $this->state(['requestable' => true]); - return $this->state(['status_id' => $id]); + return $this->state(['status_id' => $id, 'requestable' => true]); } public function nonrequestable() @@ -363,8 +362,7 @@ class AssetFactory extends Factory 'deployable' => false, 'pending' => false, ])->id; - //return $this->state(['requestable' => false]); - return $this->state(['status_id' => $id]); + return $this->state(['status_id' => $id, 'requestable' => false]); } public function noPurchaseOrEolDate() diff --git a/routes/web.php b/routes/web.php index f719231c5..51451e5b8 100644 --- a/routes/web.php +++ b/routes/web.php @@ -294,24 +294,18 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () { Route::get('api', [ProfileController::class, 'api'])->name('user.api'); // View Assets - Route::get('view-assets', [ViewAssetsController::class, 'getIndex'])->name('view-assets'); + Route::get('view-assets', [ViewAssetsController::class, 'index'])->name('view-assets'); Route::get('requested', [ViewAssetsController::class, 'getRequestedAssets'])->name('account.requested'); // Profile - Route::get( - 'requestable-assets', - [ViewAssetsController::class, 'getRequestableIndex'] - )->name('requestable-assets'); - Route::post( - 'request-asset/{asset}', - [ViewAssetsController::class, 'store'] - )->name('account/request-asset'); + Route::get('requestable-assets', [ViewAssetsController::class, 'getRequestableIndex'])->name('requestable-assets'); - Route::post( - 'request/{itemType}/{itemId}/{cancel_by_admin?}/{requestingUser?}', - [ViewAssetsController::class, 'getRequestItem'] - )->name('account/request-item'); + Route::post('request-asset/{asset}', [ViewAssetsController::class, 'store']) + ->name('account/request-asset'); + + Route::post('request/{itemType}/{itemId}/{cancel_by_admin?}/{requestingUser?}', [ViewAssetsController::class, 'getRequestItem']) + ->name('account/request-item'); // Account Dashboard Route::get('/', [ViewAssetsController::class, 'getIndex'])->name('account'); From 3ee008e871049b9405fc051a26ac987d4fff3734 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 20:54:20 -0500 Subject: [PATCH 10/15] revert --- .../CheckoutRequests/CancelCheckoutRequest.php | 15 +++++++-------- .../CheckoutRequests/CreateCheckoutRequest.php | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/app/Actions/CheckoutRequests/CancelCheckoutRequest.php b/app/Actions/CheckoutRequests/CancelCheckoutRequest.php index 235728be1..ccad6b2e6 100644 --- a/app/Actions/CheckoutRequests/CancelCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CancelCheckoutRequest.php @@ -21,14 +21,13 @@ class CancelCheckoutRequest $data['item_quantity'] = 1; $settings = Setting::getSettings(); - $logaction = Actionlog::create([ - 'item_id' => $data['asset_id'] = $asset->id, - 'item_type' => $data['item_type'] = Asset::class, - 'created_at' => $data['requested_date'] = date('Y-m-d H:i:s'), - 'target_id' => $data['user_id'] = auth()->id(), - 'target_type' => User::class, - 'location_id' => $user->location_id ?? null, - ]); + $logaction = new Actionlog(); + $logaction->item_id = $data['asset_id'] = $asset->id; + $logaction->item_type = $data['item_type'] = Asset::class; + $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); + $logaction->target_id = $data['user_id'] = auth()->id(); + $logaction->target_type = User::class; + $logaction->location_id = $user->location_id ?? null; $logaction->logaction('request canceled'); try { diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index 825c1ddeb..c90ca4f23 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -33,14 +33,13 @@ class CreateCheckoutRequest $data['item_quantity'] = 1; $settings = Setting::getSettings(); - $logaction = Actionlog::create([ - 'target_id' => $data['asset_id'] = $asset->id, - 'item_type' => $data['item_type'] = Asset::class, - 'created_at' => $data['requested_date'] = date('Y-m-d H:i:s'), - 'user_id' => $data['user_id'] = auth()->id(), - 'target_type' => User::class, - 'location_id' => $user->location_id ?? null, - ]); + $logaction = new Actionlog(); + $logaction->item_id = $data['asset_id'] = $asset->id; + $logaction->item_type = $data['item_type'] = Asset::class; + $logaction->created_at = $data['requested_date'] = date('Y-m-d H:i:s'); + $logaction->target_id = $data['user_id'] = auth()->id(); + $logaction->target_type = User::class; + $logaction->location_id = $user->location_id ?? null; $logaction->logaction('requested'); $asset->request(); From 79e6eafafa7d0295827f8b88b96d3903396664ba Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 22:33:29 -0500 Subject: [PATCH 11/15] cancelled scaffolded out --- app/Http/Controllers/Api/CheckoutRequest.php | 7 +++++++ app/Http/Controllers/ViewAssetsController.php | 12 ++++++------ routes/api.php | 1 + routes/web.php | 5 ++++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php index cf179fb81..3b3145137 100644 --- a/app/Http/Controllers/Api/CheckoutRequest.php +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Api; +use App\Actions\CheckoutRequests\CancelCheckoutRequest; use App\Actions\CheckoutRequests\CreateCheckoutRequest; use App\Exceptions\AssetNotRequestable; use App\Helpers\Helper; @@ -26,4 +27,10 @@ class CheckoutRequest extends Controller return response()->json(Helper::formatStandardApiResponse('error', null, 'Something terrible has gone wrong and we\'re not sure if we can help - may god have mercy on your soul. Contact your admin :)')); } } + + public function destroy(Asset $asset): JsonResponse + { + CancelCheckoutRequest::run($asset, auth()->user()); + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.canceled'))); + } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 1f4a54b4d..3f723559f 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use App\Actions\CheckoutRequests\CancelCheckoutRequest; use App\Actions\CheckoutRequests\CreateCheckoutRequest; use App\Exceptions\AssetNotRequestable; use App\Models\Actionlog; @@ -161,12 +162,11 @@ class ViewAssetsController extends Controller } } - //public function destroy(Asset $asset): RedirectResponse - //{ - // try { - // CancelCheckoutRequest($asset, auth()->user()); - // } - //} + public function destroy(Asset $asset): RedirectResponse + { + CancelCheckoutRequest::run($asset, auth()->user()); + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + } public function getRequestedAssets() : View diff --git a/routes/api.php b/routes/api.php index 129e4d6ea..64c55e51d 100644 --- a/routes/api.php +++ b/routes/api.php @@ -41,6 +41,7 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi )->name('api.assets.requested'); Route::post('request/{asset}', [Api\CheckoutRequest::class, 'store'])->name('api.assets.requests.store'); + Route::post('request/{asset}/cancel', [Api\CheckoutRequest::class, 'destroy'])->name('api.assets.requests.destroy'); Route::get('requestable/hardware', [ diff --git a/routes/web.php b/routes/web.php index 51451e5b8..728c9c51e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -302,7 +302,10 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () { Route::get('requestable-assets', [ViewAssetsController::class, 'getRequestableIndex'])->name('requestable-assets'); Route::post('request-asset/{asset}', [ViewAssetsController::class, 'store']) - ->name('account/request-asset'); + ->name('account.request-asset'); + + Route::post('request-asset/{asset}/cancel', [ViewAssetsController::class, 'destroy']) + ->name('account.request-asset.cancel'); Route::post('request/{itemType}/{itemId}/{cancel_by_admin?}/{requestingUser?}', [ViewAssetsController::class, 'getRequestItem']) ->name('account/request-item'); From b0d7eb216868a8f9e73cf64ceeeb270957aaec07 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 22 Oct 2024 22:44:28 -0500 Subject: [PATCH 12/15] cancel action finished --- app/Http/Controllers/ViewAssetsController.php | 2 +- resources/views/partials/bootstrap-table.blade.php | 2 +- routes/web.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 3f723559f..83a216831 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -165,7 +165,7 @@ class ViewAssetsController extends Controller public function destroy(Asset $asset): RedirectResponse { CancelCheckoutRequest::run($asset, auth()->user()); - return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); } diff --git a/resources/views/partials/bootstrap-table.blade.php b/resources/views/partials/bootstrap-table.blade.php index f24552d75..5a1b8f5c2 100644 --- a/resources/views/partials/bootstrap-table.blade.php +++ b/resources/views/partials/bootstrap-table.blade.php @@ -480,7 +480,7 @@ if (value.assigned_to_self == true){ return ''; } else if (value.available_actions.cancel == true) { - return '
@csrf
'; + return '
@csrf
'; } else if (value.available_actions.request == true) { return '
@csrf
'; } diff --git a/routes/web.php b/routes/web.php index 728c9c51e..6e32ac013 100644 --- a/routes/web.php +++ b/routes/web.php @@ -294,7 +294,7 @@ Route::group(['prefix' => 'account', 'middleware' => ['auth']], function () { Route::get('api', [ProfileController::class, 'api'])->name('user.api'); // View Assets - Route::get('view-assets', [ViewAssetsController::class, 'index'])->name('view-assets'); + Route::get('view-assets', [ViewAssetsController::class, 'getIndex'])->name('view-assets'); Route::get('requested', [ViewAssetsController::class, 'getRequestedAssets'])->name('account.requested'); From fdb6970f36456c3b85ad3e7dcdeb824a8c935280 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Wed, 23 Oct 2024 01:41:27 -0500 Subject: [PATCH 13/15] this is pretty much done --- .../CheckoutRequests/CreateCheckoutRequest.php | 12 +++--------- app/Http/Controllers/Api/CheckoutRequest.php | 9 +++++++-- app/Http/Controllers/ViewAssetsController.php | 9 +++++++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php index c90ca4f23..9d1ba332f 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequest.php @@ -12,6 +12,7 @@ use App\Models\User; use App\Notifications\RequestAssetCancelation; use App\Notifications\RequestAssetNotification; use Illuminate\Auth\Access\AuthorizationException; +use Log; class CreateCheckoutRequest { @@ -47,16 +48,9 @@ class CreateCheckoutRequest try { $settings->notify(new RequestAssetNotification($data)); } catch (\Exception $e) { - \Log::warning($e); + Log::warning($e); } - return true; // or $asset, or whatever + return true; } - - public function doSomethingElse() - { - - } - - } \ No newline at end of file diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php index 3b3145137..1ee9c4c02 100644 --- a/app/Http/Controllers/Api/CheckoutRequest.php +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -30,7 +30,12 @@ class CheckoutRequest extends Controller public function destroy(Asset $asset): JsonResponse { - CancelCheckoutRequest::run($asset, auth()->user()); - return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.canceled'))); + try { + CancelCheckoutRequest::run($asset, auth()->user()); + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.canceled'))); + } catch (\Exception $e) { + report($e); + return response()->json(Helper::formatStandardApiResponse('error', null, $e->getMessage())); + } } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 83a216831..56d1f8b39 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -164,8 +164,13 @@ class ViewAssetsController extends Controller public function destroy(Asset $asset): RedirectResponse { - CancelCheckoutRequest::run($asset, auth()->user()); - return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); + try { + CancelCheckoutRequest::run($asset, auth()->user()); + return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); + } catch (\Exception $e) { + report($e); + return redirect()->back()->with('error', 'something bad happened'); + } } From c76cccbb68dc55300127204653e269f8f460e606 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Wed, 23 Oct 2024 12:56:36 -0500 Subject: [PATCH 14/15] rm extraneous methods in exception --- app/Exceptions/AssetNotRequestable.php | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/app/Exceptions/AssetNotRequestable.php b/app/Exceptions/AssetNotRequestable.php index 8c3daa7cf..4067dda38 100644 --- a/app/Exceptions/AssetNotRequestable.php +++ b/app/Exceptions/AssetNotRequestable.php @@ -6,22 +6,4 @@ use Exception; class AssetNotRequestable extends Exception { - private $errorMessage = 'Asset not requestable'; - - public function __construct($errorMessage = null) - { - $this->errorMessage = $errorMessage; - - parent::__construct($errorMessage); - } - - public function __toString() - { - return is_null($this->errorMessage) ? 'This asset is not requestable.' : $this->errorMessage; - } - - public function getTranslatedMessage() - { - return trans($this->errorMessage); - } } From 513c78a09f36817d8454304d03b7750928499d09 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Tue, 3 Dec 2024 17:51:12 -0600 Subject: [PATCH 15/15] Refactor CheckoutRequest actions for consistency Renamed CheckoutRequest action classes to include "Action" in their names for consistency and clarity. Enhanced error handling in controllers to standardize error responses with translations. Updated usage of the renamed action classes throughout the code to ensure proper integration. --- ...st.php => CancelCheckoutRequestAction.php} | 8 +++++++- ...st.php => CreateCheckoutRequestAction.php} | 4 +--- app/Http/Controllers/Api/CheckoutRequest.php | 19 +++++++++++-------- app/Http/Controllers/ViewAssetsController.php | 18 +++++++++--------- routes/web.php | 1 - 5 files changed, 28 insertions(+), 22 deletions(-) rename app/Actions/CheckoutRequests/{CancelCheckoutRequest.php => CancelCheckoutRequestAction.php} (83%) rename app/Actions/CheckoutRequests/{CreateCheckoutRequest.php => CreateCheckoutRequestAction.php} (93%) diff --git a/app/Actions/CheckoutRequests/CancelCheckoutRequest.php b/app/Actions/CheckoutRequests/CancelCheckoutRequestAction.php similarity index 83% rename from app/Actions/CheckoutRequests/CancelCheckoutRequest.php rename to app/Actions/CheckoutRequests/CancelCheckoutRequestAction.php index ccad6b2e6..2d6dd68a0 100644 --- a/app/Actions/CheckoutRequests/CancelCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CancelCheckoutRequestAction.php @@ -4,14 +4,20 @@ namespace App\Actions\CheckoutRequests; use App\Models\Actionlog; use App\Models\Asset; +use App\Models\Company; use App\Models\Setting; use App\Models\User; use App\Notifications\RequestAssetCancelation; +use Illuminate\Auth\Access\AuthorizationException; -class CancelCheckoutRequest +class CancelCheckoutRequestAction { public static function run(Asset $asset, User $user) { + if (!Company::isCurrentUserHasAccess($asset)) { + throw new AuthorizationException(); + } + $asset->cancelRequest(); $asset->decrement('requests_counter', 1); diff --git a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php b/app/Actions/CheckoutRequests/CreateCheckoutRequestAction.php similarity index 93% rename from app/Actions/CheckoutRequests/CreateCheckoutRequest.php rename to app/Actions/CheckoutRequests/CreateCheckoutRequestAction.php index 9d1ba332f..6870cfba2 100644 --- a/app/Actions/CheckoutRequests/CreateCheckoutRequest.php +++ b/app/Actions/CheckoutRequests/CreateCheckoutRequestAction.php @@ -3,18 +3,16 @@ namespace App\Actions\CheckoutRequests; use App\Exceptions\AssetNotRequestable; -use App\Exceptions\ThereIsNoUser; use App\Models\Actionlog; use App\Models\Asset; use App\Models\Company; use App\Models\Setting; use App\Models\User; -use App\Notifications\RequestAssetCancelation; use App\Notifications\RequestAssetNotification; use Illuminate\Auth\Access\AuthorizationException; use Log; -class CreateCheckoutRequest +class CreateCheckoutRequestAction { /** * @throws AssetNotRequestable diff --git a/app/Http/Controllers/Api/CheckoutRequest.php b/app/Http/Controllers/Api/CheckoutRequest.php index 1ee9c4c02..9b66531ae 100644 --- a/app/Http/Controllers/Api/CheckoutRequest.php +++ b/app/Http/Controllers/Api/CheckoutRequest.php @@ -2,40 +2,43 @@ namespace App\Http\Controllers\Api; -use App\Actions\CheckoutRequests\CancelCheckoutRequest; -use App\Actions\CheckoutRequests\CreateCheckoutRequest; +use App\Actions\CheckoutRequests\CancelCheckoutRequestAction; +use App\Actions\CheckoutRequests\CreateCheckoutRequestAction; use App\Exceptions\AssetNotRequestable; use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Models\Asset; use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Http\JsonResponse; +use Exception; class CheckoutRequest extends Controller { public function store(Asset $asset): JsonResponse { try { - CreateCheckoutRequest::run($asset, auth()->user()); + CreateCheckoutRequestAction::run($asset, auth()->user()); return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.success'))); } catch (AssetNotRequestable $e) { return response()->json(Helper::formatStandardApiResponse('error', 'Asset is not requestable')); } catch (AuthorizationException $e) { return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))); - } catch (\Exception $e) { + } catch (Exception $e) { report($e); - return response()->json(Helper::formatStandardApiResponse('error', null, 'Something terrible has gone wrong and we\'re not sure if we can help - may god have mercy on your soul. Contact your admin :)')); + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.something_went_wrong'))); } } public function destroy(Asset $asset): JsonResponse { try { - CancelCheckoutRequest::run($asset, auth()->user()); + CancelCheckoutRequestAction::run($asset, auth()->user()); return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/hardware/message.requests.canceled'))); - } catch (\Exception $e) { + } catch (AuthorizationException $e) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.insufficient_permissions'))); + } catch (Exception $e) { report($e); - return response()->json(Helper::formatStandardApiResponse('error', null, $e->getMessage())); + return response()->json(Helper::formatStandardApiResponse('error', null, trans('general.something_went_wrong'))); } } } diff --git a/app/Http/Controllers/ViewAssetsController.php b/app/Http/Controllers/ViewAssetsController.php index 56d1f8b39..bbff6ba4f 100755 --- a/app/Http/Controllers/ViewAssetsController.php +++ b/app/Http/Controllers/ViewAssetsController.php @@ -2,8 +2,8 @@ namespace App\Http\Controllers; -use App\Actions\CheckoutRequests\CancelCheckoutRequest; -use App\Actions\CheckoutRequests\CreateCheckoutRequest; +use App\Actions\CheckoutRequests\CancelCheckoutRequestAction; +use App\Actions\CheckoutRequests\CreateCheckoutRequestAction; use App\Exceptions\AssetNotRequestable; use App\Models\Actionlog; use App\Models\Asset; @@ -16,7 +16,7 @@ use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Http\Request; use Illuminate\Http\RedirectResponse; use \Illuminate\Contracts\View\View; -use Illuminate\Support\Facades\Log; +use Exception; /** * This controller handles all actions related to the ability for users @@ -150,26 +150,26 @@ class ViewAssetsController extends Controller public function store(Asset $asset): RedirectResponse { try { - CreateCheckoutRequest::run($asset, auth()->user()); + CreateCheckoutRequestAction::run($asset, auth()->user()); return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.success')); } catch (AssetNotRequestable $e) { return redirect()->back()->with('error', 'Asset is not requestable'); } catch (AuthorizationException $e) { return redirect()->back()->with('error', trans('admin/hardware/message.requests.error')); - } catch (\Exception $e) { + } catch (Exception $e) { report($e); - return redirect()->back()->with('error', 'Something terrible has gone wrong and we\'re not sure if we can help - may god have mercy on your soul. Contact your admin :)'); + return redirect()->back()->with('error', trans('general.something_went_wrong')); } } public function destroy(Asset $asset): RedirectResponse { try { - CancelCheckoutRequest::run($asset, auth()->user()); + CancelCheckoutRequestAction::run($asset, auth()->user()); return redirect()->route('requestable-assets')->with('success')->with('success', trans('admin/hardware/message.requests.canceled')); - } catch (\Exception $e) { + } catch (Exception $e) { report($e); - return redirect()->back()->with('error', 'something bad happened'); + return redirect()->back()->with('error', trans('general.something_went_wrong')); } } diff --git a/routes/web.php b/routes/web.php index 5482de9ca..473ac9a2b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,5 @@