diff --git a/app/Http/Controllers/Assets/BulkAssetsController.php b/app/Http/Controllers/Assets/BulkAssetsController.php
index 1ce08e65e9af..c27cfe3e0c69 100644
--- a/app/Http/Controllers/Assets/BulkAssetsController.php
+++ b/app/Http/Controllers/Assets/BulkAssetsController.php
@@ -52,6 +52,10 @@ public function edit(Request $request) : View | RedirectResponse
}
$asset_ids = $request->input('ids');
+ if ($request->input('bulk_actions') === 'checkout') {
+ $request->session()->flashInput(['selected_assets' => $asset_ids]);
+ return redirect()->route('hardware.bulkcheckout.show');
+ }
// 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');
@@ -571,31 +575,34 @@ public function storeCheckout(AssetCheckoutRequest $request) : RedirectResponse
}
$errors = [];
- DB::transaction(function () use ($target, $admin, $checkout_at, $expected_checkin, $errors, $asset_ids, $request) {
+ DB::transaction(function () use ($target, $admin, $checkout_at, $expected_checkin, &$errors, $asset_ids, $request) { //NOTE: $errors is passsed by reference!
foreach ($asset_ids as $asset_id) {
$asset = Asset::findOrFail($asset_id);
$this->authorize('checkout', $asset);
- $error = $asset->checkOut($target, $admin, $checkout_at, $expected_checkin, e($request->get('note')), $asset->name, null);
+ $checkout_success = $asset->checkOut($target, $admin, $checkout_at, $expected_checkin, e($request->get('note')), $asset->name, null);
+ //TODO - I think this logic is duplicated in the checkOut method?
if ($target->location_id != '') {
$asset->location_id = $target->location_id;
- $asset->unsetEventDispatcher();
- $asset->save();
+ // TODO - I don't know why this is being saved without events
+ $asset::withoutEvents(function () use ($asset) {
+ $asset->save();
+ });
}
- if ($error) {
- array_merge_recursive($errors, $asset->getErrors()->toArray());
+ if (!$checkout_success) {
+ $errors = array_merge_recursive($errors, $asset->getErrors()->toArray());
}
}
});
if (! $errors) {
// Redirect to the new asset page
- return redirect()->to('hardware')->with('success', trans('admin/hardware/message.checkout.success'));
+ return redirect()->to('hardware')->with('success', trans_choice('admin/hardware/message.multi-checkout.success', $asset_ids));
}
// Redirect to the asset management page with error
- return redirect()->route('hardware.bulkcheckout.show')->with('error', trans('admin/hardware/message.checkout.error'))->withErrors($errors);
+ return redirect()->route('hardware.bulkcheckout.show')->withInput()->with('error', trans_choice('admin/hardware/message.multi-checkout.error', $asset_ids))->withErrors($errors);
} catch (ModelNotFoundException $e) {
return redirect()->route('hardware.bulkcheckout.show')->with('error', $e->getErrors());
}
diff --git a/resources/lang/en-US/admin/hardware/message.php b/resources/lang/en-US/admin/hardware/message.php
index 041d32f56c90..27877e02f9fc 100644
--- a/resources/lang/en-US/admin/hardware/message.php
+++ b/resources/lang/en-US/admin/hardware/message.php
@@ -79,6 +79,11 @@
'no_assets_selected' => 'You must select at least one asset from the list',
],
+ 'multi-checkout' => [
+ 'error' => 'Asset was not checked out, please try again|Assets were not checked out, please try again',
+ 'success' => 'Asset checked out successfully.|Assets checked out successfully.',
+ ],
+
'checkin' => [
'error' => 'Asset was not checked in, please try again',
'success' => 'Asset checked in successfully.',
diff --git a/resources/views/hardware/bulk-checkout.blade.php b/resources/views/hardware/bulk-checkout.blade.php
index 405e5e47cd26..39e2cdf10cbf 100644
--- a/resources/views/hardware/bulk-checkout.blade.php
+++ b/resources/views/hardware/bulk-checkout.blade.php
@@ -115,5 +115,12 @@
@section('moar_scripts')
@include('partials/assets-assigned')
+
@stop
diff --git a/resources/views/partials/asset-bulk-actions.blade.php b/resources/views/partials/asset-bulk-actions.blade.php
index b597ad647f78..992fb52bba10 100644
--- a/resources/views/partials/asset-bulk-actions.blade.php
+++ b/resources/views/partials/asset-bulk-actions.blade.php
@@ -16,17 +16,20 @@