diff --git a/app/Http/Controllers/Api/SuppliersController.php b/app/Http/Controllers/Api/SuppliersController.php index ab0db67909..6784ee82c1 100644 --- a/app/Http/Controllers/Api/SuppliersController.php +++ b/app/Http/Controllers/Api/SuppliersController.php @@ -194,7 +194,7 @@ class SuppliersController extends Controller public function destroy($id) : JsonResponse { $this->authorize('delete', Supplier::class); - $supplier = Supplier::with('asset_maintenances', 'assets', 'licenses')->withCount('asset_maintenances as asset_maintenances_count', 'assets as assets_count', 'licenses as licenses_count')->findOrFail($id); + $supplier = Supplier::with('maintenances', 'assets', 'licenses')->withCount('maintenances as maintenances_count', 'assets as assets_count', 'licenses as licenses_count')->findOrFail($id); $this->authorize('delete', $supplier); @@ -202,8 +202,8 @@ class SuppliersController extends Controller return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/suppliers/message.delete.assoc_assets', ['asset_count' => (int) $supplier->assets_count]))); } - if ($supplier->asset_maintenances_count > 0) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/suppliers/message.delete.assoc_maintenances', ['asset_maintenances_count' => $supplier->asset_maintenances_count]))); + if ($supplier->maintenances_count > 0) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/suppliers/message.delete.assoc_maintenances', ['maintenances_count' => $supplier->maintenances_count]))); } if ($supplier->licenses_count > 0) { diff --git a/app/Http/Controllers/SuppliersController.php b/app/Http/Controllers/SuppliersController.php index 2f1cd637ca..2a3c73bebe 100755 --- a/app/Http/Controllers/SuppliersController.php +++ b/app/Http/Controllers/SuppliersController.php @@ -121,7 +121,7 @@ class SuppliersController extends Controller public function destroy($supplierId) : RedirectResponse { $this->authorize('delete', Supplier::class); - if (is_null($supplier = Supplier::with('asset_maintenances', 'assets', 'licenses')->withCount('asset_maintenances as asset_maintenances_count', 'assets as assets_count', 'licenses as licenses_count')->find($supplierId))) { + if (is_null($supplier = Supplier::with('maintenances', 'assets', 'licenses')->withCount('maintenances as maintenances_count', 'assets as assets_count', 'licenses as licenses_count')->find($supplierId))) { return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.not_found')); } @@ -129,8 +129,8 @@ class SuppliersController extends Controller return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.delete.assoc_assets', ['asset_count' => (int) $supplier->assets_count])); } - if ($supplier->asset_maintenances_count > 0) { - return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.delete.assoc_maintenances', ['asset_maintenances_count' => $supplier->asset_maintenances_count])); + if ($supplier->maintenances_count > 0) { + return redirect()->route('suppliers.index')->with('error', trans('admin/suppliers/message.delete.assoc_maintenances', ['maintenances_count' => $supplier->maintenances_count])); } if ($supplier->licenses_count > 0) { diff --git a/app/Models/Maintenance.php b/app/Models/Maintenance.php index fe96b4f340..dadc205a57 100644 --- a/app/Models/Maintenance.php +++ b/app/Models/Maintenance.php @@ -31,7 +31,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild 'asset_id' => 'required|integer', 'supplier_id' => 'nullable|integer', 'asset_maintenance_type' => 'required', - 'title' => 'required|max:100', + 'name' => 'required|max:100', 'is_warranty' => 'boolean', 'start_date' => 'required|date_format:Y-m-d', 'completion_date' => 'date_format:Y-m-d|nullable|after_or_equal:start_date', @@ -46,7 +46,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild * @var array */ protected $fillable = [ - 'title', + 'name', 'asset_id', 'supplier_id', 'asset_maintenance_type', @@ -67,7 +67,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ protected $searchableAttributes = [ - 'title', + 'name', 'notes', 'asset_maintenance_type', 'cost', @@ -103,14 +103,14 @@ class Maintenance extends SnipeModel implements ICompanyableChild public static function getImprovementOptions() { return [ - trans('admin/$maintenances/general.maintenance') => trans('admin/$maintenances/general.maintenance'), - trans('admin/$maintenances/general.repair') => trans('admin/$maintenances/general.repair'), - trans('admin/$maintenances/general.upgrade') => trans('admin/$maintenances/general.upgrade'), - trans('admin/$maintenances/general.pat_test') => trans('admin/$maintenances/general.pat_test'), - trans('admin/$maintenances/general.calibration') => trans('admin/$maintenances/general.calibration'), - trans('admin/$maintenances/general.software_support') => trans('admin/$maintenances/general.software_support'), - trans('admin/$maintenances/general.hardware_support') => trans('admin/$maintenances/general.hardware_support'), - trans('admin/$maintenances/general.configuration_change') => trans('admin/$maintenances/general.configuration_change'), + trans('admin/maintenances/general.maintenance') => trans('admin/maintenances/general.maintenance'), + trans('admin/maintenances/general.repair') => trans('admin/maintenances/general.repair'), + trans('admin/maintenances/general.upgrade') => trans('admin/maintenances/general.upgrade'), + trans('admin/maintenances/general.pat_test') => trans('admin/maintenances/general.pat_test'), + trans('admin/maintenances/general.calibration') => trans('admin/maintenances/general.calibration'), + trans('admin/maintenances/general.software_support') => trans('admin/maintenances/general.software_support'), + trans('admin/maintenances/general.hardware_support') => trans('admin/maintenances/general.hardware_support'), + trans('admin/maintenances/general.configuration_change') => trans('admin/maintenances/general.configuration_change'), ]; } @@ -192,7 +192,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild public function getDisplayNameAttribute() { - return $this->title; + return $this->name; } /** @@ -211,7 +211,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderBySupplier($query, $order) { - return $query->leftJoin('suppliers as suppliers_maintenances', '$maintenances.supplier_id', '=', 'suppliers_maintenances.id') + return $query->leftJoin('suppliers as suppliers_maintenances', 'maintenances.supplier_id', '=', 'suppliers_maintenances.id') ->orderBy('suppliers_maintenances.name', $order); } @@ -227,7 +227,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderByTag($query, $order) { - return $query->leftJoin('assets', '$maintenances.asset_id', '=', 'assets.id') + return $query->leftJoin('assets', 'maintenances.asset_id', '=', 'assets.id') ->orderBy('assets.asset_tag', $order); } @@ -241,7 +241,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderByAssetName($query, $order) { - return $query->leftJoin('assets', '$maintenances.asset_id', '=', 'assets.id') + return $query->leftJoin('assets', 'maintenances.asset_id', '=', 'assets.id') ->orderBy('assets.name', $order); } @@ -255,7 +255,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderByAssetSerial($query, $order) { - return $query->leftJoin('assets', '$maintenances.asset_id', '=', 'assets.id') + return $query->leftJoin('assets', 'maintenances.asset_id', '=', 'assets.id') ->orderBy('assets.serial', $order); } @@ -269,7 +269,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderStatusName($query, $order) { - return $query->join('assets as maintained_asset', '$maintenances.asset_id', '=', 'maintained_asset.id') + return $query->join('assets as maintained_asset', 'maintenances.asset_id', '=', 'maintained_asset.id') ->leftjoin('status_labels as maintained_asset_status', 'maintained_asset_status.id', '=', 'maintained_asset.status_id') ->orderBy('maintained_asset_status.name', $order); } @@ -284,7 +284,7 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderLocationName($query, $order) { - return $query->join('assets as maintained_asset', '$maintenances.asset_id', '=', 'maintained_asset.id') + return $query->join('assets as maintained_asset', 'maintenances.asset_id', '=', 'maintained_asset.id') ->leftjoin('locations as maintained_asset_location', 'maintained_asset_location.id', '=', 'maintained_asset.location_id') ->orderBy('maintained_asset_location.name', $order); } @@ -294,6 +294,6 @@ class Maintenance extends SnipeModel implements ICompanyableChild */ public function scopeOrderByCreatedBy($query, $order) { - return $query->leftJoin('users as admin_sort', '$maintenances.created_by', '=', 'admin_sort.id')->select('$maintenances.*')->orderBy('admin_sort.first_name', $order)->orderBy('admin_sort.last_name', $order); + return $query->leftJoin('users as admin_sort', 'maintenances.created_by', '=', 'admin_sort.id')->select('maintenances.*')->orderBy('admin_sort.first_name', $order)->orderBy('admin_sort.last_name', $order); } } diff --git a/app/Presenters/MaintenancesPresenter.php b/app/Presenters/MaintenancesPresenter.php index 71ab1fa458..41ff927f67 100644 --- a/app/Presenters/MaintenancesPresenter.php +++ b/app/Presenters/MaintenancesPresenter.php @@ -51,7 +51,7 @@ class MaintenancesPresenter extends Presenter 'field' => 'asset_name', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/table.asset_name'), + 'title' => trans('admin/maintenances/table.asset_name'), 'formatter' => 'assetNameLinkFormatter', ], [ 'field' => 'asset_tag', @@ -98,35 +98,35 @@ class MaintenancesPresenter extends Presenter 'field' => 'asset_maintenance_type', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/form.asset_maintenance_type'), + 'title' => trans('admin/maintenances/form.asset_maintenance_type'), ], [ 'field' => 'start_date', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/form.start_date'), + 'title' => trans('admin/maintenances/form.start_date'), 'formatter' => 'dateDisplayFormatter', ], [ 'field' => 'completion_date', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/form.completion_date'), + 'title' => trans('admin/maintenances/form.completion_date'), 'formatter' => 'dateDisplayFormatter', ], [ 'field' => 'notes', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/form.notes'), + 'title' => trans('admin/maintenances/form.notes'), ], [ 'field' => 'is_warranty', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/table.is_warranty'), + 'title' => trans('admin/maintenances/table.is_warranty'), 'formatter' => 'trueFalseFormatter' ], [ 'field' => 'cost', 'searchable' => true, 'sortable' => true, - 'title' => trans('admin/$maintenances/form.cost'), + 'title' => trans('admin/maintenances/form.cost'), 'class' => 'text-right', ], [ 'field' => 'created_by', diff --git a/app/Providers/BreadcrumbsServiceProvider.php b/app/Providers/BreadcrumbsServiceProvider.php index f1b47280dd..b452e5c18f 100644 --- a/app/Providers/BreadcrumbsServiceProvider.php +++ b/app/Providers/BreadcrumbsServiceProvider.php @@ -415,12 +415,12 @@ class BreadcrumbsServiceProvider extends ServiceProvider Breadcrumbs::for('maintenances.show', fn (Trail $trail, Maintenance $maintenance) => $trail->parent('maintenances.index', route('maintenances.index')) - ->push($maintenance->title, route('maintenances.show', $maintenance)) + ->push($maintenance->name, route('maintenances.show', $maintenance)) ); Breadcrumbs::for('maintenances.edit', fn (Trail $trail, Maintenance $maintenance) => $trail->parent('maintenances.index', route('maintenances.index')) - ->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $maintenance->title]), route('maintenances.edit', $maintenance)) + ->push(trans('general.breadcrumb_button_actions.edit_item', ['name' => $maintenance->name]), route('maintenances.edit', $maintenance)) ); diff --git a/app/Providers/SettingsServiceProvider.php b/app/Providers/SettingsServiceProvider.php index a40366f81a..45e62ac4f9 100644 --- a/app/Providers/SettingsServiceProvider.php +++ b/app/Providers/SettingsServiceProvider.php @@ -65,7 +65,7 @@ class SettingsServiceProvider extends ServiceProvider return 'assets/'; }); - app()->singleton('$maintenances_path', function () { + app()->singleton('maintenances_path', function () { return 'maintenances/'; }); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 5e26a9a257..6816df5804 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -53,7 +53,7 @@ class DatabaseSeeder extends Seeder Model::reguard(); DB::table('imports')->truncate(); - DB::table('asset_maintenances')->truncate(); + DB::table('maintenances')->truncate(); DB::table('requested_assets')->truncate(); } } diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php index 8d696c1fc4..550c4b1fbf 100755 --- a/resources/views/hardware/view.blade.php +++ b/resources/views/hardware/view.blade.php @@ -143,7 +143,7 @@ @@ -1327,16 +1327,16 @@
-
+
diff --git a/resources/views/layouts/default.blade.php b/resources/views/layouts/default.blade.php index a35ab748fd..cc2a2b7b58 100644 --- a/resources/views/layouts/default.blade.php +++ b/resources/views/layouts/default.blade.php @@ -820,7 +820,7 @@ dir="{{ Helper::determineLanguageDirection() }}"> {{ trans('general.license_report') }} -
  • is('reports/asset_maintenances') ? ' class="active"' : '') !!}}> +
  • is('reports/maintenances') ? ' class="active"' : '') !!}}> {{ trans('general.asset_maintenance_report') }} diff --git a/resources/views/maintenances/edit.blade.php b/resources/views/maintenances/edit.blade.php index 56c22fe2d1..38d290b4dc 100644 --- a/resources/views/maintenances/edit.blade.php +++ b/resources/views/maintenances/edit.blade.php @@ -43,16 +43,7 @@
    - -
    - -
    - - {!! $errors->first('title', '') !!} -
    -
    + @include ('partials.forms.edit.name', ['translated_name' => trans('general.name'), 'required' => 'true']) @if (!$item->id) diff --git a/tests/Feature/Maintenances/Api/CreateMaintenanceTest.php b/tests/Feature/Maintenances/Api/CreateMaintenanceTest.php index 11fb93d0db..ecd08e01cc 100644 --- a/tests/Feature/Maintenances/Api/CreateMaintenanceTest.php +++ b/tests/Feature/Maintenances/Api/CreateMaintenanceTest.php @@ -48,12 +48,12 @@ class CreateMaintenanceTest extends TestCase ->assertStatus(200); // Since we rename the file in the ImageUploadRequest, we have to fetch the record from the database - $maintenance = Maintenance::where('title', 'Test Maintenance')->first(); + $maintenance = Maintenance::where('name', 'Test Maintenance')->first(); // Assert file was stored... Storage::disk('public')->assertExists(app('maintenances_path').$maintenance->image); - $this->assertDatabaseHas('asset_maintenances', [ + $this->assertDatabaseHas('maintenances', [ 'asset_id' => $asset->id, 'supplier_id' => $supplier->id, 'asset_maintenance_type' => 'Maintenance', diff --git a/tests/Feature/Maintenances/Api/EditMaintenanceTest.php b/tests/Feature/Maintenances/Api/EditMaintenanceTest.php index d4ba8c3e0f..6edb47ba27 100644 --- a/tests/Feature/Maintenances/Api/EditMaintenanceTest.php +++ b/tests/Feature/Maintenances/Api/EditMaintenanceTest.php @@ -48,7 +48,7 @@ class EditMaintenanceTest extends TestCase Storage::disk('public')->assertExists(app('maintenances_path').$maintenance->image); - $this->assertDatabaseHas('asset_maintenances', [ + $this->assertDatabaseHas('maintenances', [ 'supplier_id' => $supplier->id, 'asset_maintenance_type' => 'Maintenance', 'name' => 'Test Maintenance', diff --git a/tests/Feature/Maintenances/Ui/CreateMaintenanceTest.php b/tests/Feature/Maintenances/Ui/CreateMaintenanceTest.php index 52ff3d34e6..ba35199a9e 100644 --- a/tests/Feature/Maintenances/Ui/CreateMaintenanceTest.php +++ b/tests/Feature/Maintenances/Ui/CreateMaintenanceTest.php @@ -12,6 +12,13 @@ use Tests\TestCase; class CreateMaintenanceTest extends TestCase { + public function testPageRequiresPermission() + { + $this->actingAs(User::factory()->create()) + ->get(route('maintenances.create')) + ->assertForbidden(); + } + public function testPageRenders() { $this->actingAs(User::factory()->superuser()->create()) @@ -24,12 +31,10 @@ class CreateMaintenanceTest extends TestCase { Storage::fake('public'); $actor = User::factory()->superuser()->create(); - $asset = Asset::factory()->create(); $supplier = Supplier::factory()->create(); $this->actingAs($actor) - ->followingRedirects() ->post(route('maintenances.store'), [ 'name' => 'Test Maintenance', 'selected_assets' => [$asset->id], @@ -42,7 +47,8 @@ class CreateMaintenanceTest extends TestCase 'image' => UploadedFile::fake()->image('test_image.png'), 'notes' => 'A note', ]) - ->assertOk(); + ->assertSessionHasNoErrors() + ->assertRedirect(route('maintenances.index')); // Since we rename the file in the ImageUploadRequest, we have to fetch the record from the database $maintenance = Maintenance::where('name', 'Test Maintenance')->first(); @@ -51,7 +57,7 @@ class CreateMaintenanceTest extends TestCase Storage::disk('public')->assertExists(app('maintenances_path').$maintenance->image); - $this->assertDatabaseHas('asset_maintenances', [ + $this->assertDatabaseHas('maintenances', [ 'asset_id' => $asset->id, 'supplier_id' => $supplier->id, 'asset_maintenance_type' => 'Maintenance', diff --git a/tests/Feature/Maintenances/Ui/EditMaintenanceTest.php b/tests/Feature/Maintenances/Ui/EditMaintenanceTest.php index e5ebec889f..d2959fd781 100644 --- a/tests/Feature/Maintenances/Ui/EditMaintenanceTest.php +++ b/tests/Feature/Maintenances/Ui/EditMaintenanceTest.php @@ -40,7 +40,8 @@ class EditMaintenanceTest extends TestCase 'cost' => '100.99', 'notes' => 'A note', ]) - ->assertOk(); + ->assertSessionHasNoErrors() + ->assertRedirect(route('maintenances.index')); // Since we rename the file in the ImageUploadRequest, we have to fetch the record from the database $maintenance = Maintenance::where('name', 'Test Maintenance')->first(); @@ -48,7 +49,7 @@ class EditMaintenanceTest extends TestCase // Assert file was stored... Storage::disk('public')->assertExists(app('maintenances_path').$maintenance->image); - $this->assertDatabaseHas('asset_maintenances', [ + $this->assertDatabaseHas('maintenances', [ 'asset_id' => $asset->id, 'supplier_id' => $supplier->id, 'asset_maintenance_type' => 'Maintenance',