Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions app/Http/Controllers/Api/AssetsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -1225,6 +1225,7 @@ public function audit(Request $request, Asset $asset): JsonResponse
*/
public function requestable(Request $request): JsonResponse | array
{

$this->authorize('viewRequestable', Asset::class);

$allowed_columns = [
Expand Down Expand Up @@ -1257,9 +1258,6 @@ public function requestable(Request $request): JsonResponse | array
'requests'
);




if ($request->filled('search')) {
$assets->TextSearch($request->input('search'));
}
Expand Down
1 change: 1 addition & 0 deletions app/Http/Controllers/SettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,7 @@ public function postSettings(Request $request) : RedirectResponse
}
}

$setting->request_unassigned_deployable = $request->input('request_unassigned_deployable', '0');
$setting->unique_serial = $request->input('unique_serial', '0');
$setting->shortcuts_enabled = $request->input('shortcuts_enabled', '0');
$setting->show_images_in_email = $request->input('show_images_in_email', '0');
Expand Down
25 changes: 24 additions & 1 deletion app/Http/Controllers/ViewAssetsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,30 @@ public function getIndex(Request $request) : View | RedirectResponse
public function getRequestableIndex() : View
{
$assets = Asset::with('model', 'defaultLoc', 'location', 'assignedTo', 'requests')->Hardware()->RequestableAssets();
$models = AssetModel::with('category', 'requests', 'assets')->RequestableModels()->get();
$onlyUnassignedDeployable = Setting::getSettings()->request_unassigned_deployable;
$models = AssetModel::with([
'category',
'requests',
'assets' => function ($q) use ($onlyUnassignedDeployable) {
if ($onlyUnassignedDeployable) {
// Unassigned + deployable (not archived)
$q->whereNull('assets.assigned_to')
->whereHas('assetstatus', function ($s) {
$s->where('deployable', 1);
});
} else {
// Requestable + (deployable OR pending) but never archived
$q->where('requestable', 1)
->whereHas('assetstatus', function ($s) {
$s->where('archived', 0)
->where(function ($s) {
$s->where('deployable', 1)
->orWhere('pending', 1);
});
});
}
},
])->RequestableModels()->get();

return view('account/requestable-assets', compact('assets', 'models'));
}
Expand Down
21 changes: 16 additions & 5 deletions app/Models/Asset.php
Original file line number Diff line number Diff line change
Expand Up @@ -1655,18 +1655,29 @@ public function scopeDeployed($query)
public function scopeRequestableAssets($query): Builder
{
$table = $query->getModel()->getTable();

return Company::scopeCompanyables($query->where($table.'.requestable', '=', 1))
->whereHas(
'assetstatus', function ($query) {
$query = Company::scopeCompanyables($query->where($table . '.requestable', '=', 1));
$onlyUnassignedDeployable = Setting::getSettings()->request_unassigned_deployable;

if ($onlyUnassignedDeployable) {
// Unassigned + Deployable ONLY
$query
->whereNull($table . '.assigned_to')
->whereHas('assetstatus', function ($q) {
$q->where('deployable', 1)
->where('archived', 0);
});
} else {
$query->whereHas('assetstatus', function ($query) {
$query->where(
function ($query) {
$query->where('deployable', '=', 1)
->where('archived', '=', 0); // you definitely can't request something that's archived
}
)->orWhere('pending', '=', 1); // we've decided that even though an asset may be 'pending', you can still request it
}
);
);
}
return $query;
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('settings', function (Blueprint $table) {
$table->boolean('request_unassigned_deployable')->after('unique_serial')->default(false);
});
}

/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('settings', function (Blueprint $table) {
$table->dropColumn('request_unassigned_deployable');
});
}
};
2 changes: 2 additions & 0 deletions resources/lang/en-US/admin/settings/general.php
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,8 @@
'default_avatar_help' => 'This image will be displayed as a profile if a user does not have a profile photo.',
'restore_default_avatar' => 'Restore <a href=":default_avatar" data-toggle="lightbox" data-type="image">original system default avatar</a>',
'restore_default_avatar_help' => '',
'request_unassigned_deployable_help_text' => 'Only assets with a status type of deployable and that are unassigned will be shown under requestable assets.',
'request_unassigned_deployable' => 'Request Unassigned Deployable Assets Only',
'due_checkin_days' => 'Due For Checkin Warning',
'due_checkin_days_help' => 'How many days before the expected checkin of an asset should it be listed in the "Due for checkin" page?',
'no_groups' => 'No groups have been created yet. Visit <code>Admin Settings > Permission Groups</code> to add one.',
Expand Down
2 changes: 1 addition & 1 deletion resources/views/account/requestable-assets.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ class="table table-striped snipe-table"
@endcan
</td>

<td>{{$requestableModel->assets->where('requestable', '1')->count()}}</td>
<td>{{'requestable '.$requestableModel->assets->where('requestable', '1')->count()}} {{'Unrequestable '.$requestableModel->assets->where('requestable', '0')->count()}}</td>

<td>
<form action="{{ route('account/request-item', ['itemType' => 'asset_model', 'itemId' => $requestableModel->id])}}" method="POST" accept-charset="utf-8">
Expand Down
15 changes: 15 additions & 0 deletions resources/views/settings/general.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,21 @@
</div>
</div>

<!-- Request only Unassigned Deployable Assets -->
<div class="form-group">
<div class="col-md-8 col-md-offset-3">
<label class="form-control">
<input type="checkbox" name="request_unassigned_deployable" value="1" @checked(old('request_unassigned_deployable', $setting->request_unassigned_deployable)) />
{{ trans('admin/settings/general.request_unassigned_deployable') }}
{!! $errors->first('request_unassigned_deployable', '<span class="alert-msg" aria-hidden="true">:message</span>') !!}
</label>

<p class="help-block">
{{ trans('admin/settings/general.request_unassigned_deployable_help_text') }}
</p>
</div>
</div>

<!-- Manager View -->
<div class="form-group {{ $errors->has('manager_view_enabled') ? 'error' : '' }}">
<div class="col-md-3">
Expand Down
Loading