diff --git a/app/Helpers/Helper.php b/app/Helpers/Helper.php
index d77f41b01f..fcb439f819 100644
--- a/app/Helpers/Helper.php
+++ b/app/Helpers/Helper.php
@@ -1484,35 +1484,57 @@ class Helper
}
- static public function getRedirectOption($request, $id, $table, $asset_id = null)
+ static public function getRedirectOption($request, $id, $table, $item_id = null)
{
$redirect_option = Session::get('redirect_option');
$checkout_to_type = Session::get('checkout_to_type');
- //return to index
- if ($redirect_option == '0') {
+ // return to index
+ if ($redirect_option == 'index') {
switch ($table) {
case "Assets":
- return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.checkout.success'));
+ return route('hardware.index');
+ case "Users":
+ return route('users.index');
+ case "Licenses":
+ return route('licenses.index');
+ case "Accessories":
+ return route('accessories.index');
+ case "Components":
+ return route('components.index');
+ case "Consumables":
+ return route('consumables.index');
}
}
- //return to thing being assigned
- if ($redirect_option == '1') {
+
+ // return to thing being assigned
+ if ($redirect_option == 'item') {
switch ($table) {
case "Assets":
- return redirect()->route('hardware.show', $id ? $id : $asset_id)->with('success', trans('admin/hardware/message.checkout.success'));
+ return route('hardware.show', $id ?? $item_id);
+ case "Users":
+ return route('users.show', $id ?? $item_id);
+ case "Licenses":
+ return route('licenses.show', $id ?? $item_id);
+ case "Accessories":
+ return route('accessories.show', $id ?? $item_id);
+ case "Components":
+ return route('components.show', $id ?? $item_id);
+ case "Consumables":
+ return route('consumables.show', $id ?? $item_id);
}
}
- //return to thing being assigned to
- if ($redirect_option == '2') {
+
+ // return to assignment target
+ if ($redirect_option == 'target') {
switch ($checkout_to_type) {
case 'user':
- return redirect()->route('users.show', $request->assigned_user)->with('success', trans('admin/hardware/message.checkout.success'));
+ return route('users.show', ['user' => $request->assigned_user]);
case 'location':
- return redirect()->route('locations.show', $request->assigned_location)->with('success', trans('admin/hardware/message.checkout.success'));
+ return route('locations.show', ['location' => $request->assigned_location]);
case 'asset':
- return redirect()->route('hardware.show', $request->assigned_asset)->with('success', trans('admin/hardware/message.checkout.success'));
+ return route('hardware.show', ['hardware' => $request->assigned_asset]);
}
}
return redirect()->back()->with('error', trans('admin/hardware/message.checkout.error'));
diff --git a/app/Http/Controllers/Accessories/AccessoriesController.php b/app/Http/Controllers/Accessories/AccessoriesController.php
index bb2e74899b..722638ad8f 100755
--- a/app/Http/Controllers/Accessories/AccessoriesController.php
+++ b/app/Http/Controllers/Accessories/AccessoriesController.php
@@ -79,10 +79,11 @@ class AccessoriesController extends Controller
$accessory = $request->handleImages($accessory);
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
// Was the accessory created?
if ($accessory->save()) {
// Redirect to the new accessory page
- return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.create.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.create.success'));
}
return redirect()->back()->withInput()->withErrors($accessory->getErrors());
@@ -176,9 +177,10 @@ class AccessoriesController extends Controller
$accessory = $request->handleImages($accessory);
- // Was the accessory updated?
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($accessory->save()) {
- return redirect()->route('accessories.index')->with('success', trans('admin/accessories/message.update.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.update.success'));
}
} else {
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.does_not_exist'));
diff --git a/app/Http/Controllers/Accessories/AccessoryCheckinController.php b/app/Http/Controllers/Accessories/AccessoryCheckinController.php
index eff635d24a..7a228e50ad 100644
--- a/app/Http/Controllers/Accessories/AccessoryCheckinController.php
+++ b/app/Http/Controllers/Accessories/AccessoryCheckinController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Accessories;
use App\Events\CheckoutableCheckedIn;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\Accessory;
use App\Models\User;
@@ -63,7 +64,9 @@ class AccessoryCheckinController extends Controller
event(new CheckoutableCheckedIn($accessory, User::find($return_to), auth()->user(), $request->input('note'), $checkin_at));
- return redirect()->route('accessories.show', $accessory->id)->with('success', trans('admin/accessories/message.checkin.success'));
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
+ return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))->with('success', trans('admin/accessories/message.checkin.success'));
}
// Redirect to the accessory management page with error
return redirect()->route('accessories.index')->with('error', trans('admin/accessories/message.checkin.error'));
diff --git a/app/Http/Controllers/Accessories/AccessoryCheckoutController.php b/app/Http/Controllers/Accessories/AccessoryCheckoutController.php
index 19c8c6c7c5..5b10e99bce 100644
--- a/app/Http/Controllers/Accessories/AccessoryCheckoutController.php
+++ b/app/Http/Controllers/Accessories/AccessoryCheckoutController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Accessories;
use App\Events\CheckoutableCheckedOut;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\AccessoryCheckoutRequest;
use App\Models\Accessory;
@@ -78,8 +79,15 @@ class AccessoryCheckoutController extends Controller
}
event(new CheckoutableCheckedOut($accessory, $user, auth()->user(), $request->input('note')));
+ // Set this as user since we only allow checkout to user for this item type
+ $request->request->add(['checkout_to_type' => 'user']);
+ $request->request->add(['assigned_user' => $user->id]);
+
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
+
+
// Redirect to the new accessory page
- return redirect()->route('accessories.index')
+ return redirect()->to(Helper::getRedirectOption($request, $accessory->id, 'Accessories'))
->with('success', trans('admin/accessories/message.checkout.success'));
}
}
diff --git a/app/Http/Controllers/Assets/AssetCheckinController.php b/app/Http/Controllers/Assets/AssetCheckinController.php
index 4794fa0411..f84a468a60 100644
--- a/app/Http/Controllers/Assets/AssetCheckinController.php
+++ b/app/Http/Controllers/Assets/AssetCheckinController.php
@@ -11,7 +11,6 @@ use App\Models\Asset;
use App\Models\CheckoutAcceptance;
use App\Models\LicenseSeat;
use Illuminate\Database\Eloquent\Builder;
-use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Log;
use \Illuminate\Contracts\View\View;
use \Illuminate\Http\RedirectResponse;
@@ -83,7 +82,6 @@ class AssetCheckinController extends Controller
}
$asset->expected_checkin = null;
- //$asset->last_checkout = null;
$asset->last_checkin = now();
$asset->assignedTo()->disassociate($asset);
$asset->accepted = null;
@@ -128,12 +126,12 @@ class AssetCheckinController extends Controller
$acceptance->delete();
});
- Session::put('redirect_option', $request->get('redirect_option'));
- // Was the asset updated?
+ session()->put('redirect_option', $request->get('redirect_option'));
+
if ($asset->save()) {
event(new CheckoutableCheckedIn($asset, $target, auth()->user(), $request->input('note'), $checkin_at, $originalValues));
- return Helper::getRedirectOption($asset, $assetId, 'Assets');
+ return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))->with('success', trans('admin/hardware/message.checkin.success'));
}
// Redirect to the asset management page with error
return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.error').$asset->getErrors());
diff --git a/app/Http/Controllers/Assets/AssetCheckoutController.php b/app/Http/Controllers/Assets/AssetCheckoutController.php
index 355f9387bb..05b766916b 100644
--- a/app/Http/Controllers/Assets/AssetCheckoutController.php
+++ b/app/Http/Controllers/Assets/AssetCheckoutController.php
@@ -109,10 +109,11 @@ class AssetCheckoutController extends Controller
}
}
- Session::put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
if ($asset->checkOut($target, $admin, $checkout_at, $expected_checkin, $request->get('note'), $request->get('name'))) {
- return Helper::getRedirectOption($request, $assetId, 'Assets');
+ return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
+ ->with('success', trans('admin/hardware/message.checkout.success'));
}
// Redirect to the asset management page with error
return redirect()->to("hardware/$assetId/checkout")->with('error', trans('admin/hardware/message.checkout.error').$asset->getErrors());
diff --git a/app/Http/Controllers/Assets/AssetsController.php b/app/Http/Controllers/Assets/AssetsController.php
index 8fecff7e12..0852a46240 100755
--- a/app/Http/Controllers/Assets/AssetsController.php
+++ b/app/Http/Controllers/Assets/AssetsController.php
@@ -204,8 +204,12 @@ class AssetsController extends Controller
}
}
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
+
+
if ($success) {
- return redirect()->route('hardware.index')
+
+ return redirect()->to(Helper::getRedirectOption($request, $asset->id, 'Assets'))
->with('success-unescaped', trans('admin/hardware/message.create.success_linked', ['link' => route('hardware.show', ['hardware' => $asset->id]), 'id', 'tag' => e($asset->asset_tag)]));
@@ -289,6 +293,7 @@ class AssetsController extends Controller
*/
public function update(ImageUploadRequest $request, $assetId = null) : RedirectResponse
{
+
// Check if the asset exists
if (! $asset = Asset::find($assetId)) {
// Redirect to the asset management page with error
@@ -331,7 +336,7 @@ class AssetsController extends Controller
$status = Statuslabel::find($asset->status_id);
- if($status->archived){
+ if ($status && $status->archived) {
$asset->assigned_to = null;
}
@@ -350,14 +355,26 @@ class AssetsController extends Controller
}
// Update the asset data
- $asset_tag = $request->input('asset_tags');
+
$serial = $request->input('serials');
+ $asset->serial = $request->input('serials');
+
+ if (is_array($request->input('serials'))) {
+ $asset->serial = $serial[1];
+ }
+
$asset->name = $request->input('name');
- $asset->serial = $serial[1];
$asset->company_id = Company::getIdForCurrentUser($request->input('company_id'));
$asset->model_id = $request->input('model_id');
$asset->order_number = $request->input('order_number');
- $asset->asset_tag = $asset_tag[1];
+
+ $asset_tags = $request->input('asset_tags');
+ $asset->asset_tag = $request->input('asset_tags');
+
+ if (is_array($request->input('asset_tags'))) {
+ $asset->asset_tag = $asset_tags[1];
+ }
+
$asset->notes = $request->input('notes');
$asset = $request->handleImages($asset);
@@ -369,6 +386,7 @@ class AssetsController extends Controller
$model = AssetModel::find($request->get('model_id'));
if (($model) && ($model->fieldset)) {
foreach ($model->fieldset->fields as $field) {
+
if ($field->field_encrypted == '1') {
if (Gate::allows('admin')) {
if (is_array($request->input($field->db_column))) {
@@ -387,9 +405,10 @@ class AssetsController extends Controller
}
}
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
if ($asset->save()) {
- return redirect()->route('hardware.show', $assetId)
+ return redirect()->to(Helper::getRedirectOption($request, $assetId, 'Assets'))
->with('success', trans('admin/hardware/message.update.success'));
}
diff --git a/app/Http/Controllers/Components/ComponentCheckinController.php b/app/Http/Controllers/Components/ComponentCheckinController.php
index b59237a5d0..379882c3c5 100644
--- a/app/Http/Controllers/Components/ComponentCheckinController.php
+++ b/app/Http/Controllers/Components/ComponentCheckinController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Components;
use App\Events\CheckoutableCheckedIn;
use App\Events\ComponentCheckedIn;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\Asset;
use App\Models\Component;
@@ -96,12 +97,10 @@ class ComponentCheckinController extends Controller
$asset = Asset::find($component_assets->asset_id);
event(new CheckoutableCheckedIn($component, $asset, auth()->user(), $request->input('note'), Carbon::now()));
- if ($backto == 'asset'){
- return redirect()->route('hardware.show', $asset->id)->with('success',
- trans('admin/components/message.checkin.success'));
- }
- return redirect()->route('components.index')->with('success',
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
+ return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success',
trans('admin/components/message.checkin.success'));
}
diff --git a/app/Http/Controllers/Components/ComponentCheckoutController.php b/app/Http/Controllers/Components/ComponentCheckoutController.php
index fc319b47de..5547b71702 100644
--- a/app/Http/Controllers/Components/ComponentCheckoutController.php
+++ b/app/Http/Controllers/Components/ComponentCheckoutController.php
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Components;
use App\Events\CheckoutableCheckedOut;
use App\Events\ComponentCheckedOut;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\Asset;
use App\Models\Component;
@@ -93,14 +94,14 @@ class ComponentCheckoutController extends Controller
->withInput();
}
- // Check if the user exists
+ // Check if the asset exists
$asset = Asset::find($request->input('asset_id'));
// Update the component data
$component->asset_id = $request->input('asset_id');
$component->assets()->attach($component->id, [
'component_id' => $component->id,
- 'user_id' => auth()->user(),
+ 'user_id' => auth()->user()->id,
'created_at' => date('Y-m-d H:i:s'),
'assigned_qty' => $request->input('assigned_qty'),
'asset_id' => $request->input('asset_id'),
@@ -109,6 +110,11 @@ class ComponentCheckoutController extends Controller
event(new CheckoutableCheckedOut($component, $asset, auth()->user(), $request->input('note')));
- return redirect()->route('components.index')->with('success', trans('admin/components/message.checkout.success'));
+ $request->request->add(['checkout_to_type' => 'asset']);
+ $request->request->add(['assigned_asset' => $asset->id]);
+
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
+
+ return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.checkout.success'));
}
}
diff --git a/app/Http/Controllers/Components/ComponentsController.php b/app/Http/Controllers/Components/ComponentsController.php
index 33ebde6456..57cd0a2b45 100644
--- a/app/Http/Controllers/Components/ComponentsController.php
+++ b/app/Http/Controllers/Components/ComponentsController.php
@@ -86,8 +86,10 @@ class ComponentsController extends Controller
$component = $request->handleImages($component);
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($component->save()) {
- return redirect()->route('components.index')->with('success', trans('admin/components/message.create.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.create.success'));
}
return redirect()->back()->withInput()->withErrors($component->getErrors());
@@ -160,8 +162,10 @@ class ComponentsController extends Controller
$component = $request->handleImages($component);
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($component->save()) {
- return redirect()->route('components.index')->with('success', trans('admin/components/message.update.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $component->id, 'Components'))->with('success', trans('admin/components/message.update.success'));
}
return redirect()->back()->withInput()->withErrors($component->getErrors());
diff --git a/app/Http/Controllers/Consumables/ConsumableCheckoutController.php b/app/Http/Controllers/Consumables/ConsumableCheckoutController.php
index fd690fede8..1bdb16af92 100644
--- a/app/Http/Controllers/Consumables/ConsumableCheckoutController.php
+++ b/app/Http/Controllers/Consumables/ConsumableCheckoutController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Consumables;
use App\Events\CheckoutableCheckedOut;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\Consumable;
use App\Models\User;
@@ -33,7 +34,7 @@ class ConsumableCheckoutController extends Controller
// Make sure there is at least one available to checkout
if ($consumable->numRemaining() <= 0){
return redirect()->route('consumables.index')
- ->with('error', trans('admin/consumables/message.checkout.unavailable'));
+ ->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => 1, 'remaining' => $consumable->numRemaining()]));
}
// Return the checkout view
@@ -76,7 +77,7 @@ class ConsumableCheckoutController extends Controller
// Make sure there is at least one available to checkout
if ($consumable->numRemaining() <= 0 || $quantity > $consumable->numRemaining()) {
- return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable'));
+ return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => $quantity, 'remaining' => $consumable->numRemaining() ]));
}
$admin_user = auth()->user();
@@ -101,7 +102,13 @@ class ConsumableCheckoutController extends Controller
}
event(new CheckoutableCheckedOut($consumable, $user, auth()->user(), $request->input('note')));
+ $request->request->add(['checkout_to_type' => 'user']);
+ $request->request->add(['assigned_user' => $user->id]);
+
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]);
+
+
// Redirect to the new consumable page
- return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.checkout.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.checkout.success'));
}
}
diff --git a/app/Http/Controllers/Consumables/ConsumablesController.php b/app/Http/Controllers/Consumables/ConsumablesController.php
index 883d5849ee..42c0766fe0 100644
--- a/app/Http/Controllers/Consumables/ConsumablesController.php
+++ b/app/Http/Controllers/Consumables/ConsumablesController.php
@@ -87,8 +87,10 @@ class ConsumablesController extends Controller
$consumable = $request->handleImages($consumable);
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($consumable->save()) {
- return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.create.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.create.success'));
}
return redirect()->back()->withInput()->withErrors($consumable->getErrors());
@@ -160,8 +162,10 @@ class ConsumablesController extends Controller
$consumable = $request->handleImages($consumable);
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($consumable->save()) {
- return redirect()->route('consumables.index')->with('success', trans('admin/consumables/message.update.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.update.success'));
}
return redirect()->back()->withInput()->withErrors($consumable->getErrors());
diff --git a/app/Http/Controllers/Licenses/LicenseCheckinController.php b/app/Http/Controllers/Licenses/LicenseCheckinController.php
index e863aa860e..dd83d0154c 100644
--- a/app/Http/Controllers/Licenses/LicenseCheckinController.php
+++ b/app/Http/Controllers/Licenses/LicenseCheckinController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Licenses;
use App\Events\CheckoutableCheckedIn;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Models\License;
use App\Models\LicenseSeat;
@@ -100,15 +101,15 @@ class LicenseCheckinController extends Controller
$licenseSeat->asset_id = null;
$licenseSeat->notes = $request->input('notes');
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
+
// Was the asset updated?
if ($licenseSeat->save()) {
event(new CheckoutableCheckedIn($licenseSeat, $return_to, auth()->user(), $request->input('notes')));
- if ($backTo == 'user') {
- return redirect()->route('users.show', $return_to->id)->with('success', trans('admin/licenses/message.checkin.success'));
- }
- return redirect()->route('licenses.show', $licenseSeat->license_id)->with('success', trans('admin/licenses/message.checkin.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.checkin.success'));
}
// Redirect to the license page with error
diff --git a/app/Http/Controllers/Licenses/LicenseCheckoutController.php b/app/Http/Controllers/Licenses/LicenseCheckoutController.php
index 2fb0434f62..c08980fc06 100644
--- a/app/Http/Controllers/Licenses/LicenseCheckoutController.php
+++ b/app/Http/Controllers/Licenses/LicenseCheckoutController.php
@@ -3,6 +3,7 @@
namespace App\Http\Controllers\Licenses;
use App\Events\CheckoutableCheckedOut;
+use App\Helpers\Helper;
use App\Http\Controllers\Controller;
use App\Http\Requests\LicenseCheckoutRequest;
use App\Models\Accessory;
@@ -81,10 +82,27 @@ class LicenseCheckoutController extends Controller
$checkoutMethod = 'checkoutTo'.ucwords(request('checkout_to_type'));
- if ($this->$checkoutMethod($licenseSeat)) {
- return redirect()->route('licenses.index')->with('success', trans('admin/licenses/message.checkout.success'));
+
+ if ($request->filled('asset_id')) {
+
+ $checkoutTarget = $this->checkoutToAsset($licenseSeat);
+ $request->request->add(['assigned_asset' => $checkoutTarget->id]);
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => 'asset']);
+
+ } elseif ($request->filled('assigned_to')) {
+ $checkoutTarget = $this->checkoutToUser($licenseSeat);
+ $request->request->add(['assigned_user' => $checkoutTarget->id]);
+ session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => 'user']);
}
+
+
+ if ($checkoutTarget) {
+ return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.checkout.success'));
+ }
+
+
+
return redirect()->route('licenses.index')->with('error', trans('Something went wrong handling this checkout.'));
}
@@ -120,8 +138,7 @@ class LicenseCheckoutController extends Controller
}
if ($licenseSeat->save()) {
event(new CheckoutableCheckedOut($licenseSeat, $target, auth()->user(), request('notes')));
-
- return true;
+ return $target;
}
return false;
@@ -137,8 +154,7 @@ class LicenseCheckoutController extends Controller
if ($licenseSeat->save()) {
event(new CheckoutableCheckedOut($licenseSeat, $target, auth()->user(), request('notes')));
-
- return true;
+ return $target;
}
return false;
diff --git a/app/Http/Controllers/Licenses/LicensesController.php b/app/Http/Controllers/Licenses/LicensesController.php
index 01de4b4d46..7a51344dd0 100755
--- a/app/Http/Controllers/Licenses/LicensesController.php
+++ b/app/Http/Controllers/Licenses/LicensesController.php
@@ -102,8 +102,10 @@ class LicensesController extends Controller
$license->user_id = Auth::id();
$license->min_amt = $request->input('min_amt');
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($license->save()) {
- return redirect()->route('licenses.index')->with('success', trans('admin/licenses/message.create.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.create.success'));
}
return redirect()->back()->withInput()->withErrors($license->getErrors());
@@ -180,8 +182,10 @@ class LicensesController extends Controller
$license->category_id = $request->input('category_id');
$license->min_amt = $request->input('min_amt');
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($license->save()) {
- return redirect()->route('licenses.show', ['license' => $licenseId])->with('success', trans('admin/licenses/message.update.success'));
+ return redirect()->to(Helper::getRedirectOption($request, $license->id, 'Licenses'))->with('success', trans('admin/licenses/message.update.success'));
}
// If we can't adjust the number of seats, the error is flashed to the session by the event handler in License.php
return redirect()->back()->withInput()->withErrors($license->getErrors());
diff --git a/app/Http/Controllers/Users/UsersController.php b/app/Http/Controllers/Users/UsersController.php
index 7cff29fe59..1e203e71d5 100755
--- a/app/Http/Controllers/Users/UsersController.php
+++ b/app/Http/Controllers/Users/UsersController.php
@@ -133,6 +133,8 @@ class UsersController extends Controller
// we have to invoke the
app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar');
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
+
if ($user->save()) {
if ($request->filled('groups')) {
$user->groups()->sync($request->input('groups'));
@@ -152,7 +154,7 @@ class UsersController extends Controller
$user->notify(new WelcomeNotification($data));
}
- return redirect()->route('users.index')->with('success', trans('admin/users/message.success.create'));
+ return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users'))->with('success', trans('admin/users/message.success.create'));
}
return redirect()->back()->withInput()->withErrors($user->getErrors());
@@ -309,10 +311,11 @@ class UsersController extends Controller
// Handle uploaded avatar
app(ImageUploadRequest::class)->handleImages($user, 600, 'avatar', 'avatars', 'avatar');
+ session()->put(['redirect_option' => $request->get('redirect_option')]);
if ($user->save()) {
// Redirect to the user page
- return redirect()->route('users.index')
+ return redirect()->to(Helper::getRedirectOption($request, $user->id, 'Users'))
->with('success', trans('admin/users/message.success.update'));
}
diff --git a/database/factories/ComponentFactory.php b/database/factories/ComponentFactory.php
index caac70078f..2557f29c77 100644
--- a/database/factories/ComponentFactory.php
+++ b/database/factories/ComponentFactory.php
@@ -2,10 +2,15 @@
namespace Database\Factories;
+use App\Models\Accessory;
+use App\Models\Asset;
use App\Models\Category;
use App\Models\Company;
use App\Models\Component;
+use App\Models\Consumable;
use App\Models\Location;
+use App\Models\User;
+use Carbon\Carbon;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\Supplier;
@@ -97,5 +102,16 @@ class ComponentFactory extends Factory
});
}
+ public function checkedOutToAsset(Asset $asset = null)
+ {
+ return $this->afterCreating(function (Component $component) use ($asset) {
+ $component->assets()->attach($component->id, [
+ 'component_id' => $component->id,
+ 'created_at' => Carbon::now(),
+ 'user_id' => 1,
+ 'asset_id' => $asset->id ?? Asset::factory()->create()->id,
+ ]);
+ });
+ }
}
diff --git a/resources/views/accessories/checkin.blade.php b/resources/views/accessories/checkin.blade.php
index 7d1ef13262..cceb8b895b 100755
--- a/resources/views/accessories/checkin.blade.php
+++ b/resources/views/accessories/checkin.blade.php
@@ -71,11 +71,15 @@
-
+
diff --git a/resources/views/accessories/checkout.blade.php b/resources/views/accessories/checkout.blade.php
index 71035a87c1..6c96e1bfa3 100755
--- a/resources/views/accessories/checkout.blade.php
+++ b/resources/views/accessories/checkout.blade.php
@@ -114,10 +114,16 @@
-
+
diff --git a/resources/views/accessories/edit.blade.php b/resources/views/accessories/edit.blade.php
index 068fddc266..8e0503400f 100644
--- a/resources/views/accessories/edit.blade.php
+++ b/resources/views/accessories/edit.blade.php
@@ -4,6 +4,11 @@
'helpPosition' => 'right',
'helpText' => trans('help.accessories'),
'formAction' => (isset($item->id)) ? route('accessories.update', ['accessory' => $item->id]) : route('accessories.store'),
+ 'index_route' => 'accessories.index',
+ 'options' => [
+ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'accessories']),
+ 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.accessory')]),
+ ]
])
{{-- Page content --}}
diff --git a/resources/views/blade/redirect_submit_options.blade.php b/resources/views/blade/redirect_submit_options.blade.php
new file mode 100644
index 0000000000..a6b0c7fc88
--- /dev/null
+++ b/resources/views/blade/redirect_submit_options.blade.php
@@ -0,0 +1,38 @@
+
+@props([
+ 'index_route',
+ 'button_label',
+ 'disabled_select' => false,
+ 'options' => [],
+])
+
+
+
\ No newline at end of file
diff --git a/resources/views/components/checkin.blade.php b/resources/views/components/checkin.blade.php
index e195685d2a..d838744ffb 100644
--- a/resources/views/components/checkin.blade.php
+++ b/resources/views/components/checkin.blade.php
@@ -56,10 +56,14 @@
{!! $errors->first('note', ' :message') !!}
-
+
diff --git a/resources/views/components/checkout.blade.php b/resources/views/components/checkout.blade.php
index f6befa2736..39890a1938 100644
--- a/resources/views/components/checkout.blade.php
+++ b/resources/views/components/checkout.blade.php
@@ -54,10 +54,16 @@
-
+
diff --git a/resources/views/components/edit.blade.php b/resources/views/components/edit.blade.php
index 5279f03990..ce77b5130d 100644
--- a/resources/views/components/edit.blade.php
+++ b/resources/views/components/edit.blade.php
@@ -4,6 +4,11 @@
'helpPosition' => 'right',
'helpText' => trans('help.components'),
'formAction' => (isset($item->id)) ? route('components.update', ['component' => $item->id]) : route('components.store'),
+ 'index_route' => 'components.index',
+ 'options' => [
+ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'components']),
+ 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.component')]),
+ ]
])
diff --git a/resources/views/consumables/checkout.blade.php b/resources/views/consumables/checkout.blade.php
index 29b68b6ce7..bb3023290f 100644
--- a/resources/views/consumables/checkout.blade.php
+++ b/resources/views/consumables/checkout.blade.php
@@ -106,10 +106,14 @@
-
+
diff --git a/resources/views/consumables/edit.blade.php b/resources/views/consumables/edit.blade.php
index f32e74b196..300a7114d9 100644
--- a/resources/views/consumables/edit.blade.php
+++ b/resources/views/consumables/edit.blade.php
@@ -4,6 +4,11 @@
'helpPosition' => 'right',
'helpText' => trans('help.consumables'),
'formAction' => (isset($item->id)) ? route('consumables.update', ['consumable' => $item->id]) : route('consumables.store'),
+ 'index_route' => 'consumables.index',
+ 'options' => [
+ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'consumables']),
+ 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.consumable')]),
+ ]
])
{{-- Page content --}}
@section('inputFields')
diff --git a/resources/views/hardware/checkin.blade.php b/resources/views/hardware/checkin.blade.php
index 7b52cf8614..1efd394277 100755
--- a/resources/views/hardware/checkin.blade.php
+++ b/resources/views/hardware/checkin.blade.php
@@ -2,132 +2,144 @@
{{-- Page title --}}
@section('title')
- {{ trans('admin/hardware/general.checkin') }}
- @parent
+ {{ trans('admin/hardware/general.checkin') }}
+ @parent
@stop
{{-- Page content --}}
@section('content')
-
+ .input-group {
+ padding-left: 0px !important;
+ }
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
- @if ($backto == 'user')
-
- @include ('partials.forms.redirect_submit_options',
- [
- 'route' => 'hardware.index',
- 'table_name' => $table_name,
- 'type'=> ($asset->model ? $asset->model->name : trans('general.asset_model')),
- 'checkin' => true
- ])
-
+
+
-
+
+
-
-
@stop
\ No newline at end of file
diff --git a/resources/views/hardware/checkout.blade.php b/resources/views/hardware/checkout.blade.php
index 4a1cdf5749..f91e060368 100755
--- a/resources/views/hardware/checkout.blade.php
+++ b/resources/views/hardware/checkout.blade.php
@@ -25,7 +25,7 @@
{{ trans('admin/hardware/form.tag') }} {{ $asset->asset_tag }}
- {{csrf_field()}}
+ {{csrf_field()}}
@if ($asset->company && $asset->company->name)
@@ -86,26 +87,30 @@
- @include ('partials.forms.checkout-selector', ['user_select' => 'true','asset_select' => 'true', 'location_select' => 'true'])
+ @include ('partials.forms.checkout-selector', ['user_select' => 'true','asset_select' => 'true', 'location_select' => 'true'])
- @include ('partials.forms.edit.user-select', ['translated_name' => trans('general.user'), 'fieldname' => 'assigned_user', 'required'=>'true'])
+ @include ('partials.forms.edit.user-select', ['translated_name' => trans('general.user'), 'fieldname' => 'assigned_user', 'required'=>'true'])
-
- @include ('partials.forms.edit.asset-select', ['translated_name' => trans('general.asset'), 'fieldname' => 'assigned_asset', 'unselect' => 'true', 'style' => 'display:none;', 'required'=>'true'])
+
+ @include ('partials.forms.edit.asset-select', ['translated_name' => trans('general.asset'), 'fieldname' => 'assigned_asset', 'unselect' => 'true', 'style' => 'display:none;', 'required'=>'true'])
- @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'assigned_location', 'style' => 'display:none;', 'required'=>'true'])
+ @include ('partials.forms.edit.location-select', ['translated_name' => trans('general.location'), 'fieldname' => 'assigned_location', 'style' => 'display:none;', 'required'=>'true'])
-
+
diff --git a/resources/views/hardware/edit.blade.php b/resources/views/hardware/edit.blade.php
index 2a125a1c3f..f31326cc4d 100755
--- a/resources/views/hardware/edit.blade.php
+++ b/resources/views/hardware/edit.blade.php
@@ -6,6 +6,11 @@
'helpText' => trans('help.assets'),
'helpPosition' => 'right',
'formAction' => ($item->id) ? route('hardware.update', ['hardware' => $item->id]) : route('hardware.store'),
+ 'index_route' => 'hardware.index',
+ 'options' => [
+ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'assets']),
+ 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.asset')]),
+ ]
])
@@ -130,8 +135,6 @@
-
-
diff --git a/resources/views/licenses/checkin.blade.php b/resources/views/licenses/checkin.blade.php
index 8eeea6f9c4..5ef9159549 100755
--- a/resources/views/licenses/checkin.blade.php
+++ b/resources/views/licenses/checkin.blade.php
@@ -56,10 +56,14 @@
{!! $errors->first('notes', ' :message') !!}
-
+
diff --git a/resources/views/licenses/checkout.blade.php b/resources/views/licenses/checkout.blade.php
index e85c677420..bfd4773099 100755
--- a/resources/views/licenses/checkout.blade.php
+++ b/resources/views/licenses/checkout.blade.php
@@ -105,10 +105,15 @@
@endif
-
+
diff --git a/resources/views/licenses/edit.blade.php b/resources/views/licenses/edit.blade.php
index 450e4357a4..b8429a2123 100755
--- a/resources/views/licenses/edit.blade.php
+++ b/resources/views/licenses/edit.blade.php
@@ -3,6 +3,11 @@
'updateText' => trans('admin/licenses/form.update'),
'topSubmit' => true,
'formAction' => ($item->id) ? route('licenses.update', ['license' => $item->id]) : route('licenses.store'),
+ 'index_route' => 'licenses.index',
+ 'options' => [
+ 'index' => trans('admin/hardware/form.redirect_to_all', ['type' => 'licenses']),
+ 'item' => trans('admin/hardware/form.redirect_to_type', ['type' => trans('general.license')]),
+ ]
])
{{-- Page content --}}
diff --git a/resources/views/partials/forms/redirect_submit_options.blade.php b/resources/views/partials/forms/redirect_submit_options.blade.php
deleted file mode 100644
index c960dbb860..0000000000
--- a/resources/views/partials/forms/redirect_submit_options.blade.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php
index 814c2f28eb..200acb5527 100755
--- a/resources/views/users/edit.blade.php
+++ b/resources/views/users/edit.blade.php
@@ -596,9 +596,14 @@
-
+
diff --git a/tests/Feature/Assets/Ui/EditAssetTest.php b/tests/Feature/Assets/Ui/EditAssetTest.php
index 9e58be2685..2c19e768b4 100644
--- a/tests/Feature/Assets/Ui/EditAssetTest.php
+++ b/tests/Feature/Assets/Ui/EditAssetTest.php
@@ -3,17 +3,65 @@
namespace Feature\Assets\Ui;
use App\Models\Asset;
+use App\Models\AssetModel;
+use App\Models\StatusLabel;
use App\Models\User;
use Tests\TestCase;
class EditAssetTest extends TestCase
{
+
+ public function testPermissionRequiredToViewLicense()
+ {
+ $asset = Asset::factory()->create();
+ $this->actingAs(User::factory()->create())
+ ->get(route('hardware.edit', $asset))
+ ->assertForbidden();
+ }
+
public function testPageCanBeAccessed(): void
{
$asset = Asset::factory()->create();
$user = User::factory()->editAssets()->create();
$response = $this->actingAs($user)->get(route('hardware.edit', $asset->id));
-
$response->assertStatus(200);
}
+
+ public function testAssetEditPostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $asset = Asset::factory()->assignedToUser()->create();
+
+ $this->actingAs(User::factory()->viewAssets()->editAssets()->create())
+ ->from(route('hardware.edit', $asset))
+ ->put(route('hardware.update', $asset),
+ [
+ 'redirect_option' => 'index',
+ 'name' => 'New name',
+ 'asset_tags' => 'New Asset Tag',
+ 'status_id' => StatusLabel::factory()->create()->id,
+ 'model_id' => AssetModel::factory()->create()->id,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.index'));
+ $this->assertDatabaseHas('assets', ['asset_tag' => 'New Asset Tag']);
+ }
+ public function testAssetEditPostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $asset = Asset::factory()->create();
+
+ $this->actingAs(User::factory()->viewAssets()->editAssets()->create())
+ ->from(route('hardware.edit', $asset))
+ ->put(route('hardware.update', $asset), [
+ 'redirect_option' => 'item',
+ 'name' => 'New name',
+ 'asset_tags' => 'New Asset Tag',
+ 'status_id' => StatusLabel::factory()->create()->id,
+ 'model_id' => AssetModel::factory()->create()->id,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
+
+ $this->assertDatabaseHas('assets', ['asset_tag' => 'New Asset Tag']);
+ }
+
}
diff --git a/tests/Feature/Checkins/Ui/AssetCheckinTest.php b/tests/Feature/Checkins/Ui/AssetCheckinTest.php
index cebd5010f1..f412d4439e 100644
--- a/tests/Feature/Checkins/Ui/AssetCheckinTest.php
+++ b/tests/Feature/Checkins/Ui/AssetCheckinTest.php
@@ -196,4 +196,31 @@ class AssetCheckinTest extends TestCase
->assertSessionHas('error')
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
}
+
+ public function testAssetCheckinPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $asset = Asset::factory()->assignedToUser()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.index'))
+ ->post(route('hardware.checkin.store', $asset), [
+ 'redirect_option' => 'index',
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.index'));
+ }
+
+ public function testAssetCheckinPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $asset = Asset::factory()->assignedToUser()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.index'))
+ ->post(route('hardware.checkin.store', $asset), [
+ 'redirect_option' => 'item',
+ ])
+ ->assertStatus(302)
+ ->assertSessionHasNoErrors()
+ ->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
+ }
}
diff --git a/tests/Feature/Checkins/Ui/ComponentCheckinTest.php b/tests/Feature/Checkins/Ui/ComponentCheckinTest.php
new file mode 100644
index 0000000000..1213d65252
--- /dev/null
+++ b/tests/Feature/Checkins/Ui/ComponentCheckinTest.php
@@ -0,0 +1,51 @@
+actingAs(User::factory()->create())
+ ->post(route('components.checkin.store', [
+ 'componentID' => Component::factory()->checkedOutToAsset()->create()->id,
+ ]))
+ ->assertForbidden();
+ }
+
+
+ public function testComponentCheckinPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $component = Component::factory()->checkedOutToAsset()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('components.checkin.store', $component), [
+ 'redirect_option' => 'index',
+ 'checkin_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('components.index'));
+ }
+
+ public function testComponentCheckinPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $component = Component::factory()->checkedOutToAsset()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('components.checkin.store', $component), [
+ 'redirect_option' => 'item',
+ 'checkin_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertSessionHasNoErrors()
+ ->assertRedirect(route('components.show', ['component' => $component->id]));
+ }
+
+
+}
diff --git a/tests/Feature/Checkins/Ui/LicenseCheckinTest.php b/tests/Feature/Checkins/Ui/LicenseCheckinTest.php
new file mode 100644
index 0000000000..e087cb442d
--- /dev/null
+++ b/tests/Feature/Checkins/Ui/LicenseCheckinTest.php
@@ -0,0 +1,21 @@
+actingAs(User::factory()->create())
+ ->post(route('licenses.checkin.save', [
+ 'licenseId' => LicenseSeat::factory()->assignedToUser()->create()->id,
+ ]))
+ ->assertForbidden();
+ }
+
+
+}
diff --git a/tests/Feature/Checkouts/Ui/AccessoryCheckoutTest.php b/tests/Feature/Checkouts/Ui/AccessoryCheckoutTest.php
index e0af379db0..c06c780768 100644
--- a/tests/Feature/Checkouts/Ui/AccessoryCheckoutTest.php
+++ b/tests/Feature/Checkouts/Ui/AccessoryCheckoutTest.php
@@ -140,4 +140,51 @@ class AccessoryCheckoutTest extends TestCase
'Log entry either does not exist or there are more than expected'
);
}
+
+ public function testAccessoryCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $accessory = Accessory::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('accessories.index'))
+ ->post(route('accessories.checkout.store', $accessory), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'index',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('accessories.index'));
+ }
+
+ public function testAccessoryCheckoutPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $accessory = Accessory::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('accessories.index'))
+ ->post(route('accessories.checkout.store' , $accessory), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'item',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertSessionHasNoErrors()
+ ->assertRedirect(route('accessories.show', ['accessory' => $accessory->id]));
+ }
+
+ public function testAccessoryCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
+ {
+ $user = User::factory()->create();
+ $accessory = Accessory::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('accessories.index'))
+ ->post(route('accessories.checkout.store' , $accessory), [
+ 'assigned_to' => $user->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('users.show', ['user' => $user]));
+ }
}
diff --git a/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php b/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php
index eed0908c1d..165c6a4194 100644
--- a/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php
+++ b/tests/Feature/Checkouts/Ui/AssetCheckoutTest.php
@@ -3,6 +3,7 @@
namespace Tests\Feature\Checkouts\Ui;
use App\Events\CheckoutableCheckedOut;
+use App\Models\Accessory;
use App\Models\Asset;
use App\Models\Company;
use App\Models\LicenseSeat;
@@ -251,20 +252,85 @@ class AssetCheckoutTest extends TestCase
->assertRedirect(route('hardware.show',['hardware' => $asset->id]));
}
- public function testAssetCheckoutPagePostIsRedirectedIfModelIsInvalid()
+ public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
{
$asset = Asset::factory()->create();
- $asset->model_id = 0;
- $asset->forceSave();
- $user = User::factory()->create();
-
+
$this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.checkout.create', $asset))
->post(route('hardware.checkout.store', $asset), [
'checkout_to_type' => 'user',
- 'assigned_user' => $user->id,
+ 'assigned_user' => User::factory()->create()->id,
+ 'redirect_option' => 'index',
])
->assertStatus(302)
- ->assertSessionHas('error')
+ ->assertRedirect(route('hardware.index'));
+ }
+
+ public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $asset = Asset::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.checkout.create', $asset))
+ ->post(route('hardware.checkout.store' , $asset), [
+ 'checkout_to_type' => 'user',
+ 'assigned_user' => User::factory()->create()->id,
+ 'redirect_option' => 'item',
+ ])
+ ->assertStatus(302)
+ ->assertSessionHasNoErrors()
->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
}
+
+ public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsUserTarget()
+ {
+ $user = User::factory()->create();
+ $asset = Asset::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.checkout.create', $asset))
+ ->post(route('hardware.checkout.store' , $asset), [
+ 'checkout_to_type' => 'user',
+ 'assigned_user' => $user->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('users.show', ['user' => $user]));
+ }
+
+ public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsAssetTarget()
+ {
+ $target = Asset::factory()->create();
+ $asset = Asset::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.checkout.create', $asset))
+ ->post(route('hardware.checkout.store' , $asset), [
+ 'checkout_to_type' => 'asset',
+ 'assigned_asset' => $target->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.show', ['hardware' => $target]));
+ }
+
+ public function testAssetCheckoutPagePostIsRedirectedIfRedirectSelectionIsLocationTarget()
+ {
+ $target = Location::factory()->create();
+ $asset = Asset::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('hardware.checkout.create', $asset))
+ ->post(route('hardware.checkout.store' , $asset), [
+ 'checkout_to_type' => 'location',
+ 'assigned_location' => $target->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('locations.show', ['location' => $target]));
+ }
}
diff --git a/tests/Feature/Checkouts/Ui/ComponentsCheckoutTest.php b/tests/Feature/Checkouts/Ui/ComponentsCheckoutTest.php
new file mode 100644
index 0000000000..9948de7ed2
--- /dev/null
+++ b/tests/Feature/Checkouts/Ui/ComponentsCheckoutTest.php
@@ -0,0 +1,68 @@
+actingAs(User::factory()->create())
+ ->post(route('components.checkout.store', [
+ 'componentID' => Component::factory()->checkedOutToAsset()->create()->id,
+ ]))
+ ->assertForbidden();
+ }
+
+ public function testComponentCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $component = Component::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('components.checkout.store', $component), [
+ 'asset_id' => Asset::factory()->create()->id,
+ 'redirect_option' => 'index',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('components.index'));
+ }
+
+ public function testComponentCheckoutPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $component = Component::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('components.checkout.store' , $component), [
+ 'asset_id' => Asset::factory()->create()->id,
+ 'redirect_option' => 'item',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('components.show', ['component' => $component->id]));
+ }
+
+ public function testComponentCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
+ {
+ $asset = Asset::factory()->create();
+ $component = Component::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('components.checkout.store' , $component), [
+ 'asset_id' => $asset->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.show', ['hardware' => $asset]));
+ }
+
+
+}
diff --git a/tests/Feature/Checkouts/Ui/ConsumableCheckoutTest.php b/tests/Feature/Checkouts/Ui/ConsumableCheckoutTest.php
index b595640493..90132fcedf 100644
--- a/tests/Feature/Checkouts/Ui/ConsumableCheckoutTest.php
+++ b/tests/Feature/Checkouts/Ui/ConsumableCheckoutTest.php
@@ -3,6 +3,8 @@
namespace Tests\Feature\Checkouts\Ui;
use App\Models\Actionlog;
+use App\Models\Asset;
+use App\Models\Component;
use App\Models\Consumable;
use App\Models\User;
use App\Notifications\CheckoutConsumableNotification;
@@ -90,4 +92,51 @@ class ConsumableCheckoutTest extends TestCase
'Log entry either does not exist or there are more than expected'
);
}
+
+ public function testConsumableCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $consumable = Consumable::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('consumables.index'))
+ ->post(route('consumables.checkout.store', $consumable), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'index',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('consumables.index'));
+ }
+
+ public function testConsumableCheckoutPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $consumable = Consumable::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('consumables.index'))
+ ->post(route('consumables.checkout.store' , $consumable), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'item',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('consumables.show', ['consumable' => $consumable->id]));
+ }
+
+ public function testConsumableCheckoutPagePostIsRedirectedIfRedirectSelectionIsTarget()
+ {
+ $user = User::factory()->create();
+ $consumable = Consumable::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('components.index'))
+ ->post(route('consumables.checkout.store' , $consumable), [
+ 'assigned_to' => $user->id,
+ 'redirect_option' => 'target',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('users.show', ['user' => $user]));
+ }
+
}
diff --git a/tests/Feature/Checkouts/Ui/LicenseCheckoutTest.php b/tests/Feature/Checkouts/Ui/LicenseCheckoutTest.php
index 8e5cd83061..9511c3ae33 100644
--- a/tests/Feature/Checkouts/Ui/LicenseCheckoutTest.php
+++ b/tests/Feature/Checkouts/Ui/LicenseCheckoutTest.php
@@ -56,4 +56,62 @@ class LicenseCheckoutTest extends TestCase
'note' => 'oh hi there',
]);
}
+
+ public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsIndex()
+ {
+ $license = License::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('licenses.checkout', ['licenseId' => $license->id]))
+ ->post(route('licenses.checkout', ['licenseId' => $license->id]), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'index',
+ 'assigned_qty' => 1,
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('licenses.index'));
+ }
+
+ public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsItem()
+ {
+ $license = License::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('licenses.checkout', ['licenseId' => $license->id]))
+ ->post(route('licenses.checkout' , ['licenseId' => $license->id]), [
+ 'assigned_to' => User::factory()->create()->id,
+ 'redirect_option' => 'item',
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('licenses.show', ['license' => $license->id]));
+ }
+
+ public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsUserTarget()
+ {
+ $user = User::factory()->create();
+ $license = License::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('licenses.checkout', ['licenseId' => $license->id]))
+ ->post(route('licenses.checkout' , $license), [
+ 'assigned_to' => $user->id,
+ 'redirect_option' => 'target',
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('users.show', ['user' => $user->id]));
+ }
+ public function testLicenseCheckoutPagePostIsRedirectedIfRedirectSelectionIsAssetTarget()
+ {
+ $asset = Asset::factory()->create();
+ $license = License::factory()->create();
+
+ $this->actingAs(User::factory()->admin()->create())
+ ->from(route('licenses.checkout', ['licenseId' => $license->id]))
+ ->post(route('licenses.checkout' , $license), [
+ 'asset_id' => $asset->id,
+ 'redirect_option' => 'target',
+ ])
+ ->assertStatus(302)
+ ->assertRedirect(route('hardware.show', ['hardware' => $asset->id]));
+ }
}
diff --git a/tests/Unit/Helpers/HelperTest.php b/tests/Unit/Helpers/HelperTest.php
index 3ef114b798..2fb1c58e26 100644
--- a/tests/Unit/Helpers/HelperTest.php
+++ b/tests/Unit/Helpers/HelperTest.php
@@ -31,46 +31,135 @@ class HelperTest extends TestCase
public function testGetRedirectOptionMethod()
{
$test_data = [
- 'Option 2: redirect for user assigned to ' => [
+ 'Option target: redirect for user assigned to ' => [
'request' =>(object) ['assigned_user' => 22],
'id' => 1,
'checkout_to_type' => 'user',
- 'redirect_option' => 2,
+ 'redirect_option' => 'target',
'table' => 'Assets',
'route' => route('users.show', 22),
],
- 'Option 2: redirect location assigned to ' => [
+ 'Option target: redirect location assigned to ' => [
'request' =>(object) ['assigned_location' => 10],
'id' => 2,
'checkout_to_type' => 'location',
- 'redirect_option' => 2,
+ 'redirect_option' => 'target',
'table' => 'Locations',
'route' => route('locations.show', 10),
],
- 'Option 2: redirect back to asset assigned to ' => [
+ 'Option target: redirect back to asset assigned to ' => [
'request' =>(object) ['assigned_asset' => 101],
'id' => 3,
'checkout_to_type' => 'asset',
- 'redirect_option' => 2,
+ 'redirect_option' => 'target',
'table' => 'Assets',
'route' => route('hardware.show', 101),
],
- 'Option 1: redirect back to asset ' => [
+ 'Option item: redirect back to asset ' => [
'request' =>(object) ['assigned_asset' => null],
'id' => 999,
'checkout_to_type' => null,
- 'redirect_option' => 1,
+ 'redirect_option' => 'item',
'table' => 'Assets',
'route' => route('hardware.show', 999),
],
- 'Option 0: redirect back to index ' => [
+ 'Option index: redirect back to asset index ' => [
'request' =>(object) ['assigned_asset' => null],
'id' => null,
'checkout_to_type' => null,
- 'redirect_option' => 0,
+ 'redirect_option' => 'index',
'table' => 'Assets',
'route' => route('hardware.index'),
],
+
+ 'Option item: redirect back to user ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => 999,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'item',
+ 'table' => 'Users',
+ 'route' => route('users.show', 999),
+ ],
+
+ 'Option index: redirect back to user index ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => null,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'index',
+ 'table' => 'Users',
+ 'route' => route('users.index'),
+ ],
+
+ 'Option item: redirect back to license ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => 999,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'item',
+ 'table' => 'Licenses',
+ 'route' => route('licenses.show', 999),
+ ],
+
+ 'Option index: redirect back to license index ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => null,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'index',
+ 'table' => 'Licenses',
+ 'route' => route('licenses.index'),
+ ],
+
+ 'Option item: redirect back to accessory list ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => 999,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'item',
+ 'table' => 'Accessories',
+ 'route' => route('accessories.show', 999),
+ ],
+
+ 'Option index: redirect back to accessory index ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => null,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'index',
+ 'table' => 'Accessories',
+ 'route' => route('accessories.index'),
+ ],
+ 'Option item: redirect back to consumable ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => 999,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'item',
+ 'table' => 'Consumables',
+ 'route' => route('consumables.show', 999),
+ ],
+
+ 'Option index: redirect back to consumables index ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => null,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'index',
+ 'table' => 'Consumables',
+ 'route' => route('consumables.index'),
+ ],
+
+ 'Option item: redirect back to component ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => 999,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'item',
+ 'table' => 'Components',
+ 'route' => route('components.show', 999),
+ ],
+
+ 'Option index: redirect back to component index ' => [
+ 'request' =>(object) ['assigned_asset' => null],
+ 'id' => null,
+ 'checkout_to_type' => null,
+ 'redirect_option' => 'index',
+ 'table' => 'Components',
+ 'route' => route('components.index'),
+ ],
];
foreach ($test_data as $scenario => $data ) {
@@ -78,7 +167,7 @@ class HelperTest extends TestCase
Session::put('redirect_option', $data['redirect_option']);
Session::put('checkout_to_type', $data['checkout_to_type']);
- $redirect = Helper::getRedirectOption($data['request'],$data['id'], $data['table']);
+ $redirect = redirect()->to(Helper::getRedirectOption($data['request'],$data['id'], $data['table']));
$this->assertInstanceOf(RedirectResponse::class, $redirect);
$this->assertEquals($data['route'], $redirect->getTargetUrl(), $scenario.'failed.');