diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php
index 475f93e273..8fecff7e12 100755
--- a/app/Http/Controllers/Assets/AssetsController.php
+++ b/app/Http/Controllers/Assets/AssetsController.php
@@ -576,26 +576,20 @@ class AssetsController extends Controller
* @since [v1.0]
* @return \Illuminate\Contracts\View\View
*/
- public function getClone($assetId = null)
+ public function getClone(Asset $asset)
{
- // Check if the asset exists
- if (is_null($asset_to_clone = Asset::find($assetId))) {
- // Redirect to the asset management page
- return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist'));
- }
-
- $this->authorize('create', $asset_to_clone);
-
- $asset = clone $asset_to_clone;
- $asset->id = null;
- $asset->asset_tag = '';
- $asset->serial = '';
- $asset->assigned_to = '';
+ $this->authorize('create', $asset);
+ $cloned = clone $asset;
+ $cloned->id = null;
+ $cloned->asset_tag = '';
+ $cloned->serial = '';
+ $cloned->assigned_to = '';
+ $cloned->deleted_at = '';
return view('hardware/edit')
->with('statuslabel_list', Helper::statusLabelList())
->with('statuslabel_types', Helper::statusTypeList())
- ->with('item', $asset);
+ ->with('item', $cloned);
}
/**
diff --git a/resources/views/hardware/view.blade.php b/resources/views/hardware/view.blade.php
index 674233f5a6..6e2b2175fb 100755
--- a/resources/views/hardware/view.blade.php
+++ b/resources/views/hardware/view.blade.php
@@ -36,7 +36,7 @@
@endif
-
+
@@ -197,16 +197,25 @@
@endif
@endif
-
- @can('update', $asset)
- @if ($asset->deleted_at=='')
+ @if ($asset->deleted_at=='')
+ @can('update', $asset)
- @endif
- @endcan
+ @endcan
+
+ @can('audit', \App\Models\Asset::class)
+
+ @endcan
+ @endif
@can('create', $asset)
@@ -216,16 +225,6 @@
@endcan
- @can('audit', \App\Models\Asset::class)
-
- @endcan
-
@can('delete', $asset)
@if ($asset->deleted_at=='')
diff --git a/routes/web/hardware.php b/routes/web/hardware.php
index 7833f0fdaa..ee888aa1db 100644
--- a/routes/web/hardware.php
+++ b/routes/web/hardware.php
@@ -78,17 +78,14 @@ Route::group(
[AssetsController::class, 'getAssetBySerial']
)->where('any', '.*')->name('findbyserial/hardware');
- Route::get('{assetId}/clone',
+ Route::get('{asset}/clone',
[AssetsController::class, 'getClone']
- )->name('clone/hardware');
+ )->name('clone/hardware')->withTrashed();
Route::get('{assetId}/label',
[AssetsController::class, 'getLabel']
)->name('label/hardware');
-
- Route::post('{assetId}/clone',
- [AssetsController::class, 'postCreate']
- );
+
Route::get('{assetId}/checkout',
[AssetCheckoutController::class, 'create']
diff --git a/tests/Feature/Assets/Ui/CloneAssetTest.php b/tests/Feature/Assets/Ui/CloneAssetTest.php
new file mode 100644
index 0000000000..18e1ccc5e5
--- /dev/null
+++ b/tests/Feature/Assets/Ui/CloneAssetTest.php
@@ -0,0 +1,37 @@
+create();
+ $this->actingAs(User::factory()->create())
+ ->get(route('clone/hardware', $asset))
+ ->assertForbidden();
+ }
+
+ public function testPageCanBeAccessed(): void
+ {
+ $asset = Asset::factory()->create();
+ $response = $this->actingAs(User::factory()->createAssets()->create())
+ ->get(route('clone/hardware', $asset));
+ $response->assertStatus(200);
+ }
+
+ public function testAssetCanBeCloned()
+ {
+ $asset_to_clone = Asset::factory()->create(['name'=>'Asset to clone']);
+ $this->actingAs(User::factory()->createAssets()->create())
+ ->get(route('clone/hardware', $asset_to_clone))
+ ->assertOk()
+ ->assertSee([
+ 'Asset to clone'
+ ], false);
+ }
+}