From 5da79cd5caa67a230d998b7ed338b0da59c61187 Mon Sep 17 00:00:00 2001 From: spencerrlongg Date: Thu, 12 Jun 2025 17:11:45 -0500 Subject: [PATCH] destroy manufacturer action, bulk manufacturer controller --- .../DestroyManufacturerAction.php | 62 +++++++++++++++++++ .../Api/ManufacturersController.php | 23 ++++--- .../Controllers/BulkCategoriesController.php | 12 ++-- .../BulkManufacturersController.php | 37 +++++++++++ .../Controllers/ManufacturersController.php | 30 ++++----- 5 files changed, 135 insertions(+), 29 deletions(-) create mode 100644 app/Actions/Manufacturers/DestroyManufacturerAction.php create mode 100644 app/Http/Controllers/BulkManufacturersController.php diff --git a/app/Actions/Manufacturers/DestroyManufacturerAction.php b/app/Actions/Manufacturers/DestroyManufacturerAction.php new file mode 100644 index 0000000000..edf5cd040d --- /dev/null +++ b/app/Actions/Manufacturers/DestroyManufacturerAction.php @@ -0,0 +1,62 @@ +loadCount([ + 'assets as assets_count', + 'accessories as accessories_count', + 'consumables as consumables_count', + 'components as components_count', + 'licenses as licenses_count', + ]); + + if ($manufacturer->assets_count > 0) { + throw new ModelStillHasAssets($manufacturer); + } + if ($manufacturer->accessories_count > 0) { + throw new ModelStillHasAccessories($manufacturer); + } + if ($manufacturer->consumables_count > 0) { + throw new ModelStillHasConsumables($manufacturer); + } + if ($manufacturer->components_count > 0) { + throw new ModelStillHasComponents($manufacturer); + } + if ($manufacturer->licenses_count > 0) { + throw new ModelStillHasLicenses($manufacturer); + } + + if ($manufacturer->image) { + try { + Storage::disk('public')->delete('manufacturers/'.$manufacturer->image); + } catch (\Exception $e) { + Log::info($e); + } + } + + $manufacturer->delete(); + + return true; + } + +} \ No newline at end of file diff --git a/app/Http/Controllers/Api/ManufacturersController.php b/app/Http/Controllers/Api/ManufacturersController.php index 652fad1cfc..d443be9861 100644 --- a/app/Http/Controllers/Api/ManufacturersController.php +++ b/app/Http/Controllers/Api/ManufacturersController.php @@ -2,6 +2,12 @@ namespace App\Http\Controllers\Api; +use App\Actions\Manufacturers\DestroyManufacturerAction; +use App\Exceptions\ModelStillHasAccessories; +use App\Exceptions\ModelStillHasAssets; +use App\Exceptions\ModelStillHasComponents; +use App\Exceptions\ModelStillHasConsumables; +use App\Exceptions\ModelStillHasLicenses; use App\Helpers\Helper; use App\Http\Controllers\Controller; use App\Http\Transformers\ManufacturersTransformer; @@ -184,18 +190,19 @@ class ManufacturersController extends Controller * @since [v4.0] * @param int $id */ - public function destroy($id) : JsonResponse + public function destroy(Manufacturer $manufacturer): JsonResponse { - $this->authorize('delete', Manufacturer::class); - $manufacturer = Manufacturer::findOrFail($id); $this->authorize('delete', $manufacturer); - - if ($manufacturer->isDeletable()) { - $manufacturer->delete(); - return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/manufacturers/message.delete.success'))); + try { + DestroyManufacturerAction::run($manufacturer); + } catch (ModelStillHasAccessories|ModelStillHasAssets|ModelStillHasComponents|ModelStillHasConsumables|ModelStillHasLicenses $e) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/manufacturers/message.assoc_users'))); + } catch (\Exception $e) { + return response()->json(Helper::formatStandardApiResponse('error', null, 'something went wrong')); } - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/manufacturers/message.assoc_users'))); + return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/manufacturers/message.delete.success'))); + } diff --git a/app/Http/Controllers/BulkCategoriesController.php b/app/Http/Controllers/BulkCategoriesController.php index 65b451c7b6..691ca14b9c 100644 --- a/app/Http/Controllers/BulkCategoriesController.php +++ b/app/Http/Controllers/BulkCategoriesController.php @@ -3,8 +3,12 @@ namespace App\Http\Controllers; use App\Actions\Categories\DestroyCategoryAction; +use App\Exceptions\ModelStillHasAccessories; use App\Exceptions\ModelStillHasAssetMaintenances; +use App\Exceptions\ModelStillHasAssetModels; use App\Exceptions\ModelStillHasAssets; +use App\Exceptions\ModelStillHasComponents; +use App\Exceptions\ModelStillHasConsumables; use App\Exceptions\ModelStillHasLicenses; use Illuminate\Http\Request; @@ -16,12 +20,8 @@ class BulkCategoriesController extends Controller foreach ($ids as $id) { try { DestroyCategoryAction::run(category: $id); - } catch (ModelStillHasAssets $e) { - $errors[] = `{$id} still has assets`; - } catch (ModelStillHasAssetMaintenances $e) { - $errors[] = `{$id} still has asset maintenances`; - } catch (ModelStillHasLicenses $e) { - $errors[] = `{$id} still has licenses`; + } catch (ModelStillHasAccessories|ModelStillHasAssetModels|ModelStillHasAssets|ModelStillHasComponents|ModelStillHasConsumables|ModelStillHasLicenses $e) { + $errors[] = `{$id} still has {$id->thing}`; } catch (\Exception $e) { report($e); $errors[] = 'Something went wrong'; diff --git a/app/Http/Controllers/BulkManufacturersController.php b/app/Http/Controllers/BulkManufacturersController.php new file mode 100644 index 0000000000..c1fa5528b2 --- /dev/null +++ b/app/Http/Controllers/BulkManufacturersController.php @@ -0,0 +1,37 @@ +thing}`; + } catch (\Exception $e) { + report($e); + $errors[] = 'Something went wrong'; + } + } + if (count($errors) > 0) { + return redirect()->route('manufacturers.index')->with('error', implode(', ', $errors)); + } else { + return redirect()->route('manufacturers.index')->with('success', trans('admin/suppliers/message.delete.success')); + } + } +} diff --git a/app/Http/Controllers/ManufacturersController.php b/app/Http/Controllers/ManufacturersController.php index cdc5fc1bb8..2aeb31c068 100755 --- a/app/Http/Controllers/ManufacturersController.php +++ b/app/Http/Controllers/ManufacturersController.php @@ -2,6 +2,13 @@ namespace App\Http\Controllers; +use App\Actions\Manufacturers\DestroyManufacturerAction; +use App\Exceptions\ModelStillHasAccessories; +use App\Exceptions\ModelStillHasAssets; +use App\Exceptions\ModelStillHasComponents; +use App\Exceptions\ModelStillHasConsumables; +use App\Exceptions\ModelStillHasLicenses; +use App\Helpers\Helper; use App\Http\Requests\ImageUploadRequest; use App\Models\Actionlog; use App\Models\Manufacturer; @@ -157,26 +164,19 @@ class ManufacturersController extends Controller * @param int $manufacturerId * @since [v1.0] */ - public function destroy($manufacturerId) : RedirectResponse + public function destroy(Manufacturer $manufacturer): RedirectResponse { - $this->authorize('delete', Manufacturer::class); - if (is_null($manufacturer = Manufacturer::withTrashed()->withCount('models as models_count')->find($manufacturerId))) { - return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.not_found')); - } - - if (! $manufacturer->isDeletable()) { + $this->authorize('delete', $manufacturer); + try { + DestroyManufacturerAction::run($manufacturer); + } catch (ModelStillHasAccessories|ModelStillHasAssets|ModelStillHasComponents|ModelStillHasConsumables|ModelStillHasLicenses $e) { return redirect()->route('manufacturers.index')->with('error', trans('admin/manufacturers/message.assoc_users')); - } - - if ($manufacturer->image) { - try { - Storage::disk('public')->delete('manufacturers/'.$manufacturer->image); - } catch (\Exception $e) { - Log::info($e); - } + } catch (\Exception $e) { + return redirect()->route('manufacturers.index')->with('error', 'something went wrong'); } // Soft delete the manufacturer if active, permanent delete if is already deleted + // do we really want to do that?... if ($manufacturer->deleted_at === null) { $manufacturer->delete(); } else {