Merge pull request #11027 from snipe/features/add_bulk_edit_to_other_asset_views

Fixed #11026 - add bulk edit to other asset views
This commit is contained in:
snipe 2022-05-06 14:21:10 -07:00 committed by GitHub
commit e353780b1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 101 additions and 62 deletions

View file

@ -11,6 +11,7 @@ use App\Models\Setting;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
class BulkAssetsController extends Controller class BulkAssetsController extends Controller
{ {
@ -30,9 +31,17 @@ class BulkAssetsController extends Controller
$this->authorize('update', Asset::class); $this->authorize('update', Asset::class);
if (! $request->filled('ids')) { if (! $request->filled('ids')) {
return redirect()->back()->with('error', 'No assets selected'); return redirect()->back()->with('error', trans('admin/hardware/message.update.no_assets_selected'));
} }
// Figure out where we need to send the user after the update is complete, and store that in the session
$bulk_back_url = request()->headers->get('referer');
session(['bulk_back_url' => $bulk_back_url]);
\Log::debug('Back to url: '.$bulk_back_url);
$asset_ids = array_values(array_unique($request->input('ids'))); $asset_ids = array_values(array_unique($request->input('ids')));
@ -73,10 +82,15 @@ class BulkAssetsController extends Controller
{ {
$this->authorize('update', Asset::class); $this->authorize('update', Asset::class);
\Log::debug($request->input('ids')); // Get the back url from the session and then destroy the session
$bulk_back_url = route('hardware');
if ($request->session()->has('bulk_back_url')) {
$bulk_back_url = $request->session()->pull('bulk_back_url');
}
if (! $request->filled('ids') || count($request->input('ids')) <= 0) { if (! $request->filled('ids') || count($request->input('ids')) <= 0) {
return redirect()->route('hardware.index')->with('warning', trans('No assets selected, so nothing was updated.')); return redirect($bulk_back_url)->with('error', trans('admin/hardware/message.update.no_assets_selected'));
} }
$assets = array_keys($request->input('ids')); $assets = array_keys($request->input('ids'));
@ -147,11 +161,13 @@ class BulkAssetsController extends Controller
->update($this->update_array); ->update($this->update_array);
} // endforeach } // endforeach
return redirect()->route('hardware.index')->with('success', trans('admin/hardware/message.update.success')); return redirect($bulk_back_url)->with('success', trans('admin/hardware/message.update.success'));
// no values given, nothing to update
} }
return redirect()->route('hardware.index')->with('warning', trans('admin/hardware/message.update.nothing_updated')); // no values given, nothing to update
return redirect($bulk_back_url)->with('warning', trans('admin/hardware/message.update.nothing_updated'));
} }
/** /**
@ -188,6 +204,11 @@ class BulkAssetsController extends Controller
{ {
$this->authorize('delete', Asset::class); $this->authorize('delete', Asset::class);
$bulk_back_url = route('hardware');
if ($request->session()->has('bulk_back_url')) {
$bulk_back_url = $request->session()->pull('bulk_back_url');
}
if ($request->filled('ids')) { if ($request->filled('ids')) {
$assets = Asset::find($request->get('ids')); $assets = Asset::find($request->get('ids'));
foreach ($assets as $asset) { foreach ($assets as $asset) {
@ -199,11 +220,11 @@ class BulkAssetsController extends Controller
->update($update_array); ->update($update_array);
} // endforeach } // endforeach
return redirect()->to('hardware')->with('success', trans('admin/hardware/message.delete.success')); return redirect($bulk_back_url)->with('success', trans('admin/hardware/message.delete.success'));
// no values given, nothing to update // no values given, nothing to update
} }
return redirect()->to('hardware')->with('info', trans('admin/hardware/message.delete.nothing_updated')); return redirect($bulk_back_url)->with('error', trans('admin/hardware/message.delete.nothing_updated'));
} }
/** /**
@ -224,6 +245,9 @@ class BulkAssetsController extends Controller
*/ */
public function storeCheckout(Request $request) public function storeCheckout(Request $request)
{ {
$this->authorize('checkout', Asset::class);
try { try {
$admin = Auth::user(); $admin = Auth::user();

View file

@ -17,6 +17,10 @@ class AssetAuditPresenter extends Presenter
public static function dataTableLayout() public static function dataTableLayout()
{ {
$layout = [ $layout = [
[
'field' => 'checkbox',
'checkbox' => true,
],
[ [
'field' => 'id', 'field' => 'id',
'searchable' => false, 'searchable' => false,

View file

@ -17,6 +17,7 @@ return [
'error' => 'Asset was not updated, please try again', 'error' => 'Asset was not updated, please try again',
'success' => 'Asset updated successfully.', 'success' => 'Asset updated successfully.',
'nothing_updated' => 'No fields were selected, so nothing was updated.', 'nothing_updated' => 'No fields were selected, so nothing was updated.',
'no_assets_selected' => 'No assets were selected, so nothing was updated.',
], ],
'restore' => [ 'restore' => [

View file

@ -17,6 +17,7 @@ return [
'error' => 'Asset was not updated, please try again', 'error' => 'Asset was not updated, please try again',
'success' => 'Asset updated successfully.', 'success' => 'Asset updated successfully.',
'nothing_updated' => 'No fields were selected, so nothing was updated.', 'nothing_updated' => 'No fields were selected, so nothing was updated.',
'no_assets_selected' => 'No assets were selected, so nothing was updated.',
], ],
'restore' => [ 'restore' => [

View file

@ -28,6 +28,9 @@
<div class="col-md-12"> <div class="col-md-12">
<div class="box box-default"> <div class="box box-default">
<div class="box-body"> <div class="box-body">
@if ($category->category_type=='asset')
@include('partials.asset-bulk-actions')
@endif
<table <table

View file

@ -23,11 +23,9 @@
<div class="col-md-12"> <div class="col-md-12">
<div class="box"> <div class="box">
<div class="box-body"> <div class="box-body">
{{ Form::open([
'method' => 'POST', @include('partials.asset-bulk-actions')
'route' => ['hardware/bulkedit'],
'class' => 'form-inline',
'id' => 'bulkForm']) }}
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">

View file

@ -143,7 +143,7 @@
<input type="radio" class="minimal" name="requestable" value="0"> {{ trans('general.no')}} <input type="radio" class="minimal" name="requestable" value="0"> {{ trans('general.no')}}
</label> </label>
<label class="radio"> <label class="radio">
<input type="radio" class="minimal" name="requestable" value=""> {{ trans('general.do_not_change')}} <input type="radio" class="minimal" name="requestable" value="" checked> {{ trans('general.do_not_change')}}
</label> </label>
</div> </div>
</div> </div>

View file

@ -65,24 +65,7 @@
<div id="toolbar"> @include('partials.asset-bulk-actions')
{{ Form::open([
'method' => 'POST',
'route' => ['hardware/bulkedit'],
'class' => 'form-inline',
'id' => 'bulkForm']) }}
<label for="bulk_actions"><span class="sr-only">{{ trans('button.bulk_actions') }}</span></label>
<select name="bulk_actions" class="form-control select2" aria-label="bulk_actions">
<option value="edit">{{ trans('button.edit') }}</option>
<option value="delete">{{ trans('button.delete') }}</option>
<option value="labels">{{ trans_choice('button.generate_labels', 2) }}</option>
</select>
<button class="btn btn-primary" id="bulkEdit" disabled>{{ trans('button.go') }}</button>
{{ Form::close() }}
</div>
@endif @endif

View file

@ -23,6 +23,7 @@
</div> </div>
</div> </div>
<div class="box-body"> <div class="box-body">
<div class="table table-responsive"> <div class="table table-responsive">
<table <table
@ -56,6 +57,10 @@
</div> </div>
</div> </div>
<div class="box-body"> <div class="box-body">
@include('partials.asset-bulk-actions')
<div class="table table-responsive"> <div class="table table-responsive">
<table <table

View file

@ -45,6 +45,8 @@
<div class="tab-content"> <div class="tab-content">
<div class="tab-pane fade in active" id="assets"> <div class="tab-pane fade in active" id="assets">
@include('partials.asset-bulk-actions')
<div class="table table-responsive">
<table <table
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}" data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
data-cookie-id-table="assetsListingTable" data-cookie-id-table="assetsListingTable"
@ -65,6 +67,7 @@
"ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"] "ignoreColumn": ["actions","image","change","checkbox","checkincheckout","icon"]
}'> }'>
</table> </table>
</div>
</div> <!-- /.tab-pane assets --> </div> <!-- /.tab-pane assets -->

View file

@ -42,21 +42,11 @@
</div><!-- /.box-header --> </div><!-- /.box-header -->
@endif @endif
<div class="box-body"> <div class="box-body">
<div class="row">
<div class="col-md-12"> @include('partials.asset-bulk-actions')
{{ Form::open([
'method' => 'POST',
'route' => ['hardware/bulkedit'],
'class' => 'form-inline',
'id' => 'bulkForm']) }}
<div id="toolbar">
<select name="bulk_actions" class="form-control select2">
<option value="edit">{{ trans('button.edit') }}</option>
<option value="delete">{{ trans('button.delete') }}</option>
<option value="labels">{{ trans_choice('button.generate_labels', 2) }}</option>
</select>
<button class="btn btn-primary" id="bulkEdit" disabled>{{ trans('button.go') }}</button>
</div>
<table <table
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}" data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
@ -79,8 +69,7 @@
}'> }'>
</table> </table>
{{ Form::close() }} {{ Form::close() }}
</div>
</div>
</div> <!-- /.box-body--> </div> <!-- /.box-body-->
</div> <!-- /.box-default--> </div> <!-- /.box-default-->
</div> <!-- /.col-md-9--> </div> <!-- /.col-md-9-->

View file

@ -0,0 +1,22 @@
<div id="toolbar">
{{ Form::open([
'method' => 'POST',
'route' => ['hardware/bulkedit'],
'class' => 'form-inline',
'id' => 'bulkForm']) }}
<label for="bulk_actions">
<span class="sr-only">
{{ trans('button.bulk_actions') }}
</span>
</label>
<select name="bulk_actions" class="form-control select2" aria-label="bulk_actions">
<option value="edit">{{ trans('button.edit') }}</option>
<option value="delete">{{ trans('button.delete') }}</option>
<option value="labels">{{ trans_choice('button.generate_labels', 2) }}</option>
</select>
<button class="btn btn-primary" id="bulkEdit" disabled>{{ trans('button.go') }}</button>
{{ Form::close() }}
</div>

View file

@ -61,7 +61,8 @@
<li> <li>
<a href="#consumables" data-toggle="tab"> <a href="#consumables" data-toggle="tab">
<span class="hidden-lg hidden-md"> <span class="hidden-lg hidden-md">
<i class="fas fa-tint fa-2x"></i></span> <i class="fas fa-tint fa-2x"></i>
</span>
<span class="hidden-xs hidden-sm">{{ trans('general.consumables') }} <span class="hidden-xs hidden-sm">{{ trans('general.consumables') }}
{!! ($user->consumables->count() > 0 ) ? '<badge class="badge badge-secondary">'.$user->consumables->count().'</badge>' : '' !!} {!! ($user->consumables->count() > 0 ) ? '<badge class="badge badge-secondary">'.$user->consumables->count().'</badge>' : '' !!}
</span> </span>
@ -71,7 +72,8 @@
<li> <li>
<a href="#files" data-toggle="tab"> <a href="#files" data-toggle="tab">
<span class="hidden-lg hidden-md"> <span class="hidden-lg hidden-md">
<i class="far fa-file fa-2x"></i></span> <i class="far fa-file fa-2x"></i>
</span>
<span class="hidden-xs hidden-sm">{{ trans('general.file_uploads') }} <span class="hidden-xs hidden-sm">{{ trans('general.file_uploads') }}
{!! ($user->uploads->count() > 0 ) ? '<badge class="badge badge-secondary">'.$user->uploads->count().'</badge>' : '' !!} {!! ($user->uploads->count() > 0 ) ? '<badge class="badge badge-secondary">'.$user->uploads->count().'</badge>' : '' !!}
</span> </span>
@ -81,7 +83,8 @@
<li> <li>
<a href="#history" data-toggle="tab"> <a href="#history" data-toggle="tab">
<span class="hidden-lg hidden-md"> <span class="hidden-lg hidden-md">
<i class="fas fa-history fa-2x"></i></span> <i class="fas fa-history fa-2x"></i>
</span>
<span class="hidden-xs hidden-sm">{{ trans('general.history') }}</span> <span class="hidden-xs hidden-sm">{{ trans('general.history') }}</span>
</a> </a>
</li> </li>
@ -345,7 +348,7 @@
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
{{ trans('admin/users/table.employee_num') }}< {{ trans('admin/users/table.employee_num') }}
</div> </div>
<div class="col-md-9"> <div class="col-md-9">
{{ $user->employee_num }} {{ $user->employee_num }}
@ -563,10 +566,13 @@
</div> <!--/.row--> </div> <!--/.row-->
</div><!-- /.tab-pane --> </div><!-- /.tab-pane -->
<div class="tab-pane" id="asset"> <div class="tab-pane" id="asset">
<!-- checked out assets table --> <!-- checked out assets table -->
<div class="table-responsive table-striped">
@include('partials.asset-bulk-actions')
<div class="table table-responsive">
<table <table
data-click-to-select="true" data-click-to-select="true"
data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}" data-columns="{{ \App\Presenters\AssetPresenter::dataTableLayout() }}"
@ -793,6 +799,7 @@
<div class="tab-pane" id="history"> <div class="tab-pane" id="history">
<div class="table-responsive"> <div class="table-responsive">
<table <table
data-click-to-select="true" data-click-to-select="true"
data-cookie-id-table="usersHistoryTable" data-cookie-id-table="usersHistoryTable"
@ -804,7 +811,6 @@
data-show-export="true" data-show-export="true"
data-show-refresh="true" data-show-refresh="true"
data-sort-order="desc" data-sort-order="desc"
data-toolbar="#toolbar"
id="usersHistoryTable" id="usersHistoryTable"
class="table table-striped snipe-table" class="table table-striped snipe-table"
data-url="{{ route('api.activity.index', ['target_id' => $user->id, 'target_type' => 'user']) }}" data-url="{{ route('api.activity.index', ['target_id' => $user->id, 'target_type' => 'user']) }}"