] * @param int $assetId * @param string $backto * @since [v1.0] */ public function create($assetId, $backto = null) : View | RedirectResponse { // Check if the asset exists if (is_null($asset = Asset::find($assetId))) { // Redirect to the asset management page with error return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist')); } $this->authorize('checkin', $asset); // This asset is already checked in, redirect if (is_null($asset->assignedTo)) { return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in')); } if (!$asset->model) { return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix')); } return view('hardware/checkin', compact('asset'))->with('statusLabel_list', Helper::statusLabelList())->with('backto', $backto)->with('table_name', 'Assets'); } /** * Validate and process the form data to check an asset back into inventory. * * @author [A. Gianotto] [] * @param AssetCheckinRequest $request * @param int $assetId * @param null $backto * @since [v1.0] */ public function store(AssetCheckinRequest $request, $assetId = null, $backto = null) : RedirectResponse { // Check if the asset exists if (is_null($asset = Asset::find($assetId))) { // Redirect to the asset management page with error return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.does_not_exist')); } if (is_null($target = $asset->assignedTo)) { return redirect()->route('hardware.index')->with('error', trans('admin/hardware/message.checkin.already_checked_in')); } if (!$asset->model) { return redirect()->route('hardware.show', $asset->id)->with('error', trans('admin/hardware/general.model_invalid_fix')); } $this->authorize('checkin', $asset); if ($asset->assignedType() == Asset::USER) { $user = $asset->assignedTo; } $asset->expected_checkin = null; $asset->last_checkin = now(); $asset->assignedTo()->disassociate($asset); $asset->accepted = null; $asset->name = $request->get('name'); if ($request->filled('status_id')) { $asset->status_id = e($request->get('status_id')); } $this->migrateLegacyLocations($asset); $asset->location_id = $asset->rtd_location_id; if ($request->filled('location_id')) { Log::debug('NEW Location ID: '.$request->get('location_id')); $asset->location_id = $request->get('location_id'); if ($request->get('update_default_location') == 0){ $asset->rtd_location_id = $request->get('location_id'); } } $originalValues = $asset->getRawOriginal(); $checkin_at = date('Y-m-d H:i:s'); if (($request->filled('checkin_at')) && ($request->get('checkin_at') != date('Y-m-d'))) { $originalValues['action_date'] = $checkin_at; $checkin_at = $request->get('checkin_at'); } $asset->licenseseats->each(function (LicenseSeat $seat) { $seat->update(['assigned_to' => null]); }); // Get all pending Acceptances for this asset and delete them $acceptances = CheckoutAcceptance::pending()->whereHasMorph('checkoutable', [Asset::class], function (Builder $query) use ($asset) { $query->where('id', $asset->id); })->get(); $acceptances->map(function($acceptance) { $acceptance->delete(); }); 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 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()); } }