] * @see ComponentCheckinController::store() method that stores the data. * @since [v4.1.4] * @param $component_asset_id * @return \Illuminate\Contracts\View\View * @throws \Illuminate\Auth\Access\AuthorizationException */ public function create($component_asset_id) { // This could probably be done more cleanly but I am very tired. - @snipe if ($component_assets = DB::table('components_assets')->find($component_asset_id)) { if (is_null($component = Component::find($component_assets->component_id))) { return redirect()->route('components.index')->with('error', trans('admin/components/messages.not_found')); } if (is_null($asset = Asset::find($component_assets->asset_id))) { return redirect()->route('components.index')->with('error', trans('admin/components/message.not_found')); } $this->authorize('checkin', $component); return view('components/checkin', compact('component_assets','component','asset')); } return redirect()->route('components.index')->with('error', trans('admin/components/messages.not_found')); } /** * Validate and store checkin data. * * @author [A. Gianotto] [] * @see ComponentCheckinController::create() method that returns the form. * @since [v4.1.4] * @param Request $request * @param $component_asset_id * @return \Illuminate\Http\RedirectResponse * @throws \Illuminate\Auth\Access\AuthorizationException */ public function store(Request $request, $component_asset_id) { if ($component_assets = DB::table('components_assets')->find($component_asset_id)) { if (is_null($component = Component::find($component_assets->component_id))) { return redirect()->route('components.index')->with('error', trans('admin/components/message.not_found')); } $this->authorize('checkin', $component); $max_to_checkin = $component_assets->assigned_qty; $validator = Validator::make($request->all(), [ "checkin_qty" => "required|numeric|between:1,$max_to_checkin" ]); if ($validator->fails()) { return redirect()->back() ->withErrors($validator) ->withInput(); } // Validation passed, so let's figure out what we have to do here. $qty_remaining_in_checkout = ($component_assets->assigned_qty - (int)$request->input('checkin_qty')); // We have to modify the record to reflect the new qty that's // actually checked out. $component_assets->assigned_qty = $qty_remaining_in_checkout; DB::table('components_assets')->where('id', $component_asset_id)->update(['assigned_qty' => $qty_remaining_in_checkout]); $log = new Actionlog(); $log->user_id = auth()->id(); $log->action_type = 'checkin from'; $log->target_type = Asset::class; $log->target_id = $component_assets->asset_id; $log->item_id = $component_assets->component_id; $log->item_type = Component::class; $log->note = $request->input('note'); $log->save(); // If the checked-in qty is exactly the same as the assigned_qty, // we can simply delete the associated components_assets record if ($qty_remaining_in_checkout == 0) { DB::table('components_assets')->where('id', '=', $component_asset_id)->delete(); } event(new ComponentCheckedIn($component, $component_assets, $request->input('checkin_qty'), $request->input('note'))); return redirect()->route('components.index')->with('success', trans('admin/components/message.checkout.success')); } return redirect()->route('components.index')->with('error', trans('admin/components/message.not_found')); } }