diff --git a/app/Http/Controllers/Api/ComponentsController.php b/app/Http/Controllers/Api/ComponentsController.php index 473fbf1482..bf281d6b2b 100644 --- a/app/Http/Controllers/Api/ComponentsController.php +++ b/app/Http/Controllers/Api/ComponentsController.php @@ -12,6 +12,7 @@ use App\Http\Requests\ImageUploadRequest; use App\Events\CheckoutableCheckedIn; use App\Events\ComponentCheckedIn; use App\Models\Asset; +use Illuminate\Support\Facades\Validator; class ComponentsController extends Controller { @@ -225,20 +226,30 @@ class ComponentsController extends Controller public function checkout(Request $request, $componentId) { // Check if the component exists - if (is_null($component = Component::find($componentId))) { + if (!$component = Component::find($componentId)) { return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/components/message.does_not_exist'))); } $this->authorize('checkout', $component); + $validator = Validator::make($request->all(), [ + 'asset_id' => 'required|exists:assets,id', + 'assigned_qty' => "required|numeric|min:1|digits_between:1,".$component->numRemaining(), + ]); + + if ($validator->fails()) { + return response()->json(Helper::formatStandardApiResponse('error', $validator->errors())); + + } + + // Make sure there is at least one available to checkout + if ($component->numRemaining() <= $request->get('assigned_qty')) { + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/components/message.checkout.unavailable', ['remaining' => $component->numRemaining(), 'requested' => $request->get('assigned_qty')]))); + } if ($component->numRemaining() >= $request->get('assigned_qty')) { - if (!$asset = Asset::find($request->input('assigned_to'))) { - return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/hardware/message.does_not_exist'))); - } - - // Update the accessory data + $asset = Asset::find($request->input('assigned_to')); $component->assigned_to = $request->input('assigned_to'); $component->assets()->attach($component->id, [ @@ -255,7 +266,7 @@ class ComponentsController extends Controller return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/components/message.checkout.success'))); } - return response()->json(Helper::formatStandardApiResponse('error', null, 'Not enough components remaining: '.$component->numRemaining().' remaining, '.$request->get('assigned_qty').' requested.')); + return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/components/message.checkout.unavailable', ['remaining' => $component->numRemaining(), 'requested' => $request->get('assigned_qty')]))); } /** diff --git a/app/Http/Controllers/Components/ComponentCheckoutController.php b/app/Http/Controllers/Components/ComponentCheckoutController.php index b2be07c661..c3d391c1fd 100644 --- a/app/Http/Controllers/Components/ComponentCheckoutController.php +++ b/app/Http/Controllers/Components/ComponentCheckoutController.php @@ -33,6 +33,11 @@ class ComponentCheckoutController extends Controller } $this->authorize('checkout', $component); + // Make sure there is at least one available to checkout + if ($component->numRemaining() <= 0){ + return redirect()->route('components.index')->with('error', trans('admin/components/message.checkout.unavailable')); + } + return view('components/checkout', compact('component')); } @@ -50,7 +55,7 @@ class ComponentCheckoutController extends Controller public function store(Request $request, $componentId) { // Check if the component exists - if (is_null($component = Component::find($componentId))) { + if (!$component = Component::find($componentId)) { // Redirect to the component management page with error return redirect()->route('components.index')->with('error', trans('admin/components/message.not_found')); } @@ -58,9 +63,15 @@ class ComponentCheckoutController extends Controller $this->authorize('checkout', $component); $max_to_checkout = $component->numRemaining(); + + // Make sure there is at least one available to checkout + if ($max_to_checkout <= $request->get('assigned_qty')) { + return redirect()->back()->withInput()->with('error', trans('admin/components/message.checkout.unavailable', ['remaining' => $max_to_checkout, 'requested' => $request->get('assigned_qty')])); + } + $validator = Validator::make($request->all(), [ - 'asset_id' => 'required', - 'assigned_qty' => "required|numeric|between:1,$max_to_checkout", + 'asset_id' => 'required|exists:assets,id', + 'assigned_qty' => "required|numeric|min:1|digits_between:1,$max_to_checkout", ]); if ($validator->fails()) { @@ -69,24 +80,17 @@ class ComponentCheckoutController extends Controller ->withInput(); } - $admin_user = Auth::user(); - $asset_id = e($request->input('asset_id')); - // Check if the user exists - if (is_null($asset = Asset::find($asset_id))) { - // Redirect to the component management page with error - return redirect()->route('components.index')->with('error', trans('admin/components/message.asset_does_not_exist')); - } + $asset = Asset::find($request->input('asset_id')); // Update the component data - $component->asset_id = $asset_id; - + $component->asset_id = $request->input('asset_id'); $component->assets()->attach($component->id, [ 'component_id' => $component->id, - 'user_id' => $admin_user->id, + 'user_id' => Auth::user(), 'created_at' => date('Y-m-d H:i:s'), 'assigned_qty' => $request->input('assigned_qty'), - 'asset_id' => $asset_id, + 'asset_id' => $request->input('asset_id'), 'note' => $request->input('note'), ]); diff --git a/resources/lang/en/admin/components/message.php b/resources/lang/en/admin/components/message.php index 1d13970f23..0a7dd8d954 100644 --- a/resources/lang/en/admin/components/message.php +++ b/resources/lang/en/admin/components/message.php @@ -23,7 +23,8 @@ return array( 'checkout' => array( 'error' => 'Component was not checked out, please try again', 'success' => 'Component checked out successfully.', - 'user_does_not_exist' => 'That user is invalid. Please try again.' + 'user_does_not_exist' => 'That user is invalid. Please try again.', + 'unavailable' => 'Not enough components remaining: :remaining remaining, :requested requested ', ), 'checkin' => array( diff --git a/resources/views/components/checkout.blade.php b/resources/views/components/checkout.blade.php index e27670658c..a104a81e1d 100644 --- a/resources/views/components/checkout.blade.php +++ b/resources/views/components/checkout.blade.php @@ -10,7 +10,7 @@ @section('content')
-
+
{{ csrf_field() }} @@ -25,30 +25,26 @@ @endif
- @if ($component->name) - -
- -
-

{{ $component->name }}

-
-
- @endif - @include ('partials.forms.edit.asset-select', ['translated_name' => trans('general.select_asset'), 'fieldname' => 'asset_id'])
- -
- - {!! $errors->first('assigned_qty', '
') !!} + +
+
+ @if ($errors->first('assigned_qty')) +
+ {!! $errors->first('assigned_qty', '') !!} +
+ @endif
+ -
+