destroy manufacturer action, bulk manufacturer controller

This commit is contained in:
spencerrlongg
2025-06-12 17:11:45 -05:00
parent 13c971b171
commit 5da79cd5ca
5 changed files with 135 additions and 29 deletions
@@ -0,0 +1,62 @@
<?php
namespace App\Actions\Manufacturers;
use App\Exceptions\ModelStillHasAccessories;
use App\Exceptions\ModelStillHasAssets;
use App\Exceptions\ModelStillHasComponents;
use App\Exceptions\ModelStillHasConsumables;
use App\Exceptions\ModelStillHasLicenses;
use App\Models\Manufacturer;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class DestroyManufacturerAction
{
/**
* @throws ModelStillHasAssets
* @throws ModelStillHasComponents
* @throws ModelStillHasAccessories
* @throws ModelStillHasLicenses
* @throws ModelStillHasConsumables
*/
static function run(Manufacturer $manufacturer): bool
{
$manufacturer->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;
}
}
@@ -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')));
}
@@ -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';
@@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers;
use App\Actions\Categories\DestroyCategoryAction;
use App\Actions\Manufacturers\DestroyManufacturerAction;
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;
class BulkManufacturersController extends Controller
{
public function destroy($ids)
{
$errors = [];
foreach ($ids as $id) {
try {
DestroyManufacturerAction::run(manufacturer: $id);
} catch (ModelStillHasAccessories|ModelStillHasAssetModels|ModelStillHasAssets|ModelStillHasComponents|ModelStillHasConsumables|ModelStillHasLicenses $e) {
$errors[] = `{$id} still has {$id->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'));
}
}
}
@@ -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 {