diff --git a/app/Http/Controllers/AssetMaintenancesController.php b/app/Http/Controllers/AssetMaintenancesController.php index 184014b76e..0e46118af7 100644 --- a/app/Http/Controllers/AssetMaintenancesController.php +++ b/app/Http/Controllers/AssetMaintenancesController.php @@ -19,19 +19,6 @@ use \Illuminate\Http\RedirectResponse; */ class AssetMaintenancesController extends Controller { - /** - * Checks for permissions for this action. - * - * @todo This should be replaced with middleware and/or policies - * @author Vincent Sposato - * @version v1.0 - * @since [v1.8] - */ - private static function getInsufficientPermissionsRedirect(): RedirectResponse - { - return redirect()->route('maintenances.index') - ->with('error', trans('general.insufficient_permissions')); - } /** * Returns a view that invokes the ajax tables which actually contains @@ -88,10 +75,8 @@ class AssetMaintenancesController extends Controller $assets = Asset::whereIn('id', $request->input('selected_assets'))->get(); + // Loop through the selected assets foreach ($assets as $asset) { - if ((! Company::isCurrentUserHasAccess($asset)) && ($asset != null)) { - return static::getInsufficientPermissionsRedirect(); - } $assetMaintenance = new AssetMaintenance(); $assetMaintenance->supplier_id = $request->input('supplier_id'); @@ -133,26 +118,19 @@ class AssetMaintenancesController extends Controller * * @see AssetMaintenancesController::postEdit() method that stores the data * @author Vincent Sposato - * @param int $assetMaintenanceId * @version v1.0 * @since [v1.8] */ public function edit(AssetMaintenance $maintenance) : View | RedirectResponse { $this->authorize('update', Asset::class); - if ((!$maintenance->asset) || ($maintenance->asset->deleted_at!='')) { - return redirect()->route('maintenances.index')->with('error', 'asset does not exist'); - } elseif (! Company::isCurrentUserHasAccess($maintenance->asset)) { - return static::getInsufficientPermissionsRedirect(); - } - - // Prepare Improvement Type List - $assetMaintenanceType = ['' => trans('general.select')] + AssetMaintenance::getImprovementOptions(); + $this->authorize('update', $maintenance->asset); return view('asset_maintenances/edit') - ->with('selectedAsset', null) - ->with('assetMaintenanceType', $assetMaintenanceType) - ->with('item', $maintenance); + ->with('selected_assets', $maintenance->asset->pluck('id')->toArray()) + ->with('asset_ids', request()->input('asset_ids', [])) + ->with('assetMaintenanceType', AssetMaintenance::getImprovementOptions()) + ->with('item', $maintenance); } /** @@ -168,33 +146,21 @@ class AssetMaintenancesController extends Controller public function update(Request $request, AssetMaintenance $maintenance) : View | RedirectResponse { $this->authorize('update', Asset::class); - - if ((!$maintenance->asset) || ($maintenance->asset->deleted_at!='')) { - return redirect()->route('maintenances.index')->with('error', 'asset does not exist'); - } elseif (! Company::isCurrentUserHasAccess($maintenance->asset)) { - return static::getInsufficientPermissionsRedirect(); - } + $this->authorize('update', $maintenance->asset); $maintenance->supplier_id = $request->input('supplier_id'); - $maintenance->is_warranty = $request->input('is_warranty'); + $maintenance->is_warranty = $request->input('is_warranty', 0); $maintenance->cost = $request->input('cost'); $maintenance->notes = $request->input('notes'); - - $asset = Asset::find(request('asset_id')); - - if (! Company::isCurrentUserHasAccess($asset)) { - return static::getInsufficientPermissionsRedirect(); - } - - // Save the asset maintenance data - $maintenance->asset_id = $request->input('asset_id'); $maintenance->asset_maintenance_type = $request->input('asset_maintenance_type'); $maintenance->title = $request->input('title'); $maintenance->start_date = $request->input('start_date'); $maintenance->completion_date = $request->input('completion_date'); - if (($maintenance->completion_date == null) - ) { + + // Todo - put this in a getter/setter? + if (($maintenance->completion_date == null)) + { if (($maintenance->asset_maintenance_time !== 0) || (! is_null($maintenance->asset_maintenance_time)) ) { @@ -211,10 +177,7 @@ class AssetMaintenancesController extends Controller $maintenance->asset_maintenance_time = (int) $completionDate->diffInDays($startDate, true); } - // Was the asset maintenance created? if ($maintenance->save()) { - - // Redirect to the new asset maintenance page return redirect()->route('maintenances.index') ->with('success', trans('admin/asset_maintenances/message.edit.success')); } @@ -230,21 +193,12 @@ class AssetMaintenancesController extends Controller * @version v1.0 * @since [v1.8] */ - public function destroy($assetMaintenanceId) : RedirectResponse + public function destroy(AssetMaintenance $maintenance) : RedirectResponse { $this->authorize('update', Asset::class); - // Check if the asset maintenance exists - if (is_null($assetMaintenance = AssetMaintenance::find($assetMaintenanceId))) { - // Redirect to the asset maintenance management page - return redirect()->route('maintenances.index') - ->with('error', trans('admin/asset_maintenances/message.not_found')); - } elseif (! Company::isCurrentUserHasAccess($assetMaintenance->asset)) { - return static::getInsufficientPermissionsRedirect(); - } - + $this->authorize('update', $maintenance->asset); // Delete the asset maintenance - $assetMaintenance->delete(); - + $maintenance->delete(); // Redirect to the asset_maintenance management page return redirect()->route('maintenances.index') ->with('success', trans('admin/asset_maintenances/message.delete.success')); @@ -260,11 +214,6 @@ class AssetMaintenancesController extends Controller */ public function show(AssetMaintenance $maintenance) : View | RedirectResponse { - $this->authorize('view', Asset::class); - if (! Company::isCurrentUserHasAccess($maintenance->asset)) { - return static::getInsufficientPermissionsRedirect(); - } - return view('asset_maintenances/view')->with('assetMaintenance', $maintenance); } } diff --git a/app/Models/AssetMaintenance.php b/app/Models/AssetMaintenance.php index d08e04a76c..1c07496225 100644 --- a/app/Models/AssetMaintenance.php +++ b/app/Models/AssetMaintenance.php @@ -31,7 +31,7 @@ class AssetMaintenance extends Model implements ICompanyableChild 'title' => 'required|max:100', 'is_warranty' => 'boolean', 'start_date' => 'required|date_format:Y-m-d', - 'completion_date' => 'date_format:Y-m-d|nullable', + 'completion_date' => 'date_format:Y-m-d|nullable|after_or_equal:start_date', 'notes' => 'string|nullable', 'cost' => 'numeric|nullable', ]; @@ -166,6 +166,7 @@ class AssetMaintenance extends Model implements ICompanyableChild return $this->belongsTo(\App\Models\Asset::class, 'asset_id') ->withTrashed(); } + /** * Get the admin who created the maintenance diff --git a/app/Providers/BreadcrumbsServiceProvider.php b/app/Providers/BreadcrumbsServiceProvider.php index 52f9346b06..eda242fbe5 100644 --- a/app/Providers/BreadcrumbsServiceProvider.php +++ b/app/Providers/BreadcrumbsServiceProvider.php @@ -414,13 +414,13 @@ class BreadcrumbsServiceProvider extends ServiceProvider ); Breadcrumbs::for('maintenances.show', fn (Trail $trail, AssetMaintenance $maintenance) => - $trail->parent('maintenances.index', route('locations.index')) + $trail->parent('maintenances.index', route('maintenances.index')) ->push($maintenance->title, route('maintenances.show', $maintenance)) ); - Breadcrumbs::for('manufacturers.edit', fn (Trail $trail, Manufacturer $manufacturer) => - $trail->parent('manufacturers.index', route('manufacturers.index')) - ->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $manufacturer->name]), route('manufacturers.edit', $manufacturer)) + Breadcrumbs::for('maintenances.edit', fn (Trail $trail, AssetMaintenance $maintenance) => + $trail->parent('maintenances.index', route('maintenances.index')) + ->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $maintenance->title]), route('maintenances.edit', $maintenance)) ); diff --git a/resources/views/asset_maintenances/edit.blade.php b/resources/views/asset_maintenances/edit.blade.php index c284e57e5a..6ff7d7001b 100644 --- a/resources/views/asset_maintenances/edit.blade.php +++ b/resources/views/asset_maintenances/edit.blade.php @@ -32,13 +32,14 @@ {{ csrf_field() }}
-
-

- @if ($item) - {{ $item->name }} - @endif -

-
+ + @if ($item->id) +
+

+ {{ $item->title }} +

+
+ @endif
@@ -53,17 +54,63 @@
+ + @if (!$item->id) - @include ('partials.forms.edit.asset-select', [ - 'translated_name' => trans('general.assets'), - 'fieldname' => 'selected_assets[]', - 'multiple' => true, - 'required' => true, - 'select_id' => 'assigned_assets_select', - 'asset_selector_div_id' => 'assets_to_checkout_div', - 'asset_ids' => old('selected_assets') - ]) + @include ('partials.forms.edit.asset-select', [ + 'translated_name' => trans('general.assets'), + 'fieldname' => 'selected_assets[]', + 'multiple' => true, + 'required' => true, + 'select_id' => 'assigned_assets_select', + 'asset_selector_div_id' => 'assets_for_maintenance_div', + 'asset_ids' => $item->id ? $item->asset()->pluck('id')->toArray() : old('selected_assets'), + 'asset_id' => $item->id ? $item->asset()->pluck('id')->toArray() : null + ]) + @else + + @if ($item->asset->company) +
+ + +
+

+ {{ $item->asset->company->name }} +

+
+
+ @endif + +
+ + +
+

+ {{ $item->asset ? $item->asset->present()->fullName : '' }} +

+
+
+ + @if ($item->asset->location) +
+ + +
+

+ {{ $item->asset->location->name }} +

+
+
+ @endif + + @endif @include ('partials.forms.edit.maintenance_type') @@ -72,9 +119,11 @@
- + -
+
-
+
diff --git a/resources/views/asset_maintenances/view.blade.php b/resources/views/asset_maintenances/view.blade.php index 91165b3834..231e2bde16 100644 --- a/resources/views/asset_maintenances/view.blade.php +++ b/resources/views/asset_maintenances/view.blade.php @@ -49,6 +49,31 @@ use Carbon\Carbon;
+ @if ($assetMaintenance->asset->model) +
+
+ {{ trans('general.asset_model') }} +
+ +
+ @endif + + @if ($assetMaintenance->asset->company) +
+
+ {{ trans('general.company') }} +
+ +
+ @endif @if ($assetMaintenance->supplier) diff --git a/resources/views/partials/forms/edit/asset-select.blade.php b/resources/views/partials/forms/edit/asset-select.blade.php index b793bfbed5..9b7caa85f1 100644 --- a/resources/views/partials/forms/edit/asset-select.blade.php +++ b/resources/views/partials/forms/edit/asset-select.blade.php @@ -10,7 +10,7 @@ name="{{ $fieldname }}" style="width: 100%" id="{{ (isset($select_id)) ? $select_id : 'assigned_asset_select' }}" - {{ (isset($multiple)) ? ' multiple' : '' }} + {{ ((isset($multiple)) && ($multiple === true)) ? ' multiple' : '' }} {!! (!empty($asset_status_type)) ? ' data-asset-status-type="' . $asset_status_type . '"' : '' !!} {!! (!empty($company_id)) ? ' data-company-id="' .$company_id.'"' : '' !!} {{ ((isset($required) && ($required =='true'))) ? ' required' : '' }} diff --git a/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php b/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php index 0e0f5b81c3..a622a5dec7 100644 --- a/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php +++ b/tests/Feature/AssetMaintenances/Ui/EditAssetMaintenanceTest.php @@ -20,27 +20,26 @@ class EditAssetMaintenanceTest extends TestCase public function testCanUpdateAssetMaintenance() { $actor = User::factory()->superuser()->create(); - - $assetMaintenance = AssetMaintenance::factory()->create(); - $asset = Asset::factory()->create(); + $assetMaintenance = AssetMaintenance::factory()->create(['asset_id' => $asset]); $supplier = Supplier::factory()->create(); $this->actingAs($actor) ->followingRedirects() - ->put(route('maintenances.update', $assetMaintenance->id), [ + ->put(route('maintenances.update', $assetMaintenance), [ 'title' => 'Test Maintenance', 'asset_id' => $asset->id, 'supplier_id' => $supplier->id, 'asset_maintenance_type' => 'Maintenance', 'start_date' => '2021-01-01', 'completion_date' => '2021-01-10', - 'is_warranty' => '1', - 'cost' => '100.00', + 'is_warranty' => 1, + 'cost' => '100.99', 'notes' => 'A note', ]) ->assertOk(); + $this->assertDatabaseHas('asset_maintenances', [ 'asset_id' => $asset->id, 'supplier_id' => $supplier->id, @@ -51,7 +50,7 @@ class EditAssetMaintenanceTest extends TestCase 'completion_date' => '2021-01-10', 'asset_maintenance_time' => '9', 'notes' => 'A note', - 'cost' => '100.00', + 'cost' => '100.99', ]); }