] * @see ConsumableCheckoutController::store() method that stores the data. * @since [v1.0] * @param int $id */ public function create($id) : View | RedirectResponse { if ($consumable = Consumable::find($id)) { $this->authorize('checkout', $consumable); // Make sure the category is valid if ($consumable->category) { // Make sure there is at least one available to checkout if ($consumable->numRemaining() <= 0){ return redirect()->route('consumables.index') ->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => 1, 'remaining' => $consumable->numRemaining()])); } // Return the checkout view return view('consumables/checkout', compact('consumable')); } // Invalid category return redirect()->route('consumables.edit', ['consumable' => $consumable->id]) ->with('error', trans('general.invalid_item_category_single', ['type' => trans('general.consumable')])); } // Not found return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.does_not_exist')); } /** * Saves the checkout information * * @author [A. Gianotto] [] * @see ConsumableCheckoutController::create() method that returns the form. * @since [v1.0] * @param int $consumableId * @return \Illuminate\Http\RedirectResponse * @throws \Illuminate\Auth\Access\AuthorizationException */ public function store(Request $request, $consumableId) { if (is_null($consumable = Consumable::with('users')->find($consumableId))) { return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.not_found')); } $this->authorize('checkout', $consumable); // If the quantity is not present in the request or is not a positive integer, set it to 1 $quantity = $request->input('checkout_qty'); if (!isset($quantity) || !ctype_digit((string)$quantity) || $quantity <= 0) { $quantity = 1; } // Make sure there is at least one available to checkout if ($consumable->numRemaining() <= 0 || $quantity > $consumable->numRemaining()) { return redirect()->route('consumables.index')->with('error', trans('admin/consumables/message.checkout.unavailable', ['requested' => $quantity, 'remaining' => $consumable->numRemaining() ])); } $admin_user = auth()->user(); $assigned_to = e($request->input('assigned_to')); // Check if the user exists if (is_null($user = User::find($assigned_to))) { // Redirect to the consumable management page with error return redirect()->route('consumables.checkout.show', $consumable)->with('error', trans('admin/consumables/message.checkout.user_does_not_exist'))->withInput(); } // Update the consumable data $consumable->assigned_to = e($request->input('assigned_to')); for ($i = 0; $i < $quantity; $i++){ $consumable->users()->attach($consumable->id, [ 'consumable_id' => $consumable->id, 'created_by' => $admin_user->id, 'assigned_to' => e($request->input('assigned_to')), 'note' => $request->input('note'), ]); } $consumable->checkout_qty = $quantity; event(new CheckoutableCheckedOut($consumable, $user, auth()->user(), $request->input('note'))); $request->request->add(['checkout_to_type' => 'user']); $request->request->add(['assigned_user' => $user->id]); session()->put(['redirect_option' => $request->get('redirect_option'), 'checkout_to_type' => $request->get('checkout_to_type')]); // Redirect to the new consumable page return redirect()->to(Helper::getRedirectOption($request, $consumable->id, 'Consumables'))->with('success', trans('admin/consumables/message.checkout.success')); } }