] * @since [v1.0] * @param int $seatId * @param string $backTo * @return \Illuminate\Contracts\View\View * @throws \Illuminate\Auth\Access\AuthorizationException */ public function create($seatId = null, $backTo = null) { // Check if the asset exists if (is_null($licenseSeat = LicenseSeat::find($seatId)) || is_null($license = License::find($licenseSeat->license_id))) { // Redirect to the asset management page with error return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found')); } $this->authorize('checkout', $license); return view('licenses/checkin', compact('licenseSeat'))->with('backto', $backTo); } /** * Validates and stores the license checkin action. * * @author [A. Gianotto] [] * @see LicenseCheckinController::create() method that provides the form view * @since [v1.0] * @param int $seatId * @param string $backTo * @return \Illuminate\Http\RedirectResponse * @throws \Illuminate\Auth\Access\AuthorizationException */ public function store(Request $request, $seatId = null, $backTo = null) { // Check if the asset exists if (is_null($licenseSeat = LicenseSeat::find($seatId))) { // Redirect to the asset management page with error return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found')); } $license = License::find($licenseSeat->license_id); // LicenseSeat is not assigned, it can't be checked in if (is_null($licenseSeat->assigned_to) && is_null($licenseSeat->asset_id)) { return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkin.error')); } $this->authorize('checkout', $license); if (! $license->reassignable) { // Not allowed to checkin Session::flash('error', 'License not reassignable.'); return redirect()->back()->withInput(); } // Declare the rules for the form validation $rules = [ 'note' => 'string|nullable', ]; // Create a new validator instance from our validation rules $validator = Validator::make($request->all(), $rules); // If validation fails, we'll exit the operation now. if ($validator->fails()) { // Ooops.. something went wrong return redirect()->back()->withInput()->withErrors($validator); } if($licenseSeat->assigned_to != null){ $return_to = User::find($licenseSeat->assigned_to); } else { $return_to = Asset::find($licenseSeat->asset_id); } // Update the asset data $licenseSeat->assigned_to = null; $licenseSeat->asset_id = null; // Was the asset updated? if ($licenseSeat->save()) { event(new CheckoutableCheckedIn($licenseSeat, $return_to, Auth::user(), $request->input('note'))); 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')); } // Redirect to the license page with error return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkin.error')); } /** * Bulk checkin all license seats * * @author [A. Gianotto] [] * @see LicenseCheckinController::create() method that provides the form view * @since [v6.1.1] * @return \Illuminate\Http\RedirectResponse * @throws \Illuminate\Auth\Access\AuthorizationException */ public function bulkCheckin(Request $request, $licenseId) { $license = License::findOrFail($licenseId); $this->authorize('checkin', $license); $licenseSeats = LicenseSeat::where('license_id', '=', $licenseId) ->whereNotNull('assigned_to') ->with('user') ->get(); foreach ($licenseSeats as $seat) { $seat->assigned_to = null; if ($seat->save()) { $seat->logCheckin($seat->user, 'Checked in via bulk checkin on license page'); } } return redirect()->back()->with('success', 'All licenses checked in successfully!'); } }