Merge pull request #8258 from ballertv/features/consumable-api

This looks great, thank you!
This commit is contained in:
snipe 2020-07-31 12:18:49 -07:00 committed by GitHub
commit 9a39cf721e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 69 additions and 8 deletions

View file

@ -6,6 +6,7 @@ use Illuminate\Http\Request;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Company; use App\Models\Company;
use App\Models\Consumable; use App\Models\Consumable;
use App\Models\User;
use App\Http\Transformers\ConsumablesTransformer; use App\Http\Transformers\ConsumablesTransformer;
use App\Helpers\Helper; use App\Helpers\Helper;
@ -157,7 +158,7 @@ class ConsumablesController extends Controller
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/consumables/message.delete.success'))); return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/consumables/message.delete.success')));
} }
/** /**
* Returns a JSON response containing details on the users associated with this consumable. * Returns a JSON response containing details on the users associated with this consumable.
* *
* @author [A. Gianotto] [<snipe@snipe.net>] * @author [A. Gianotto] [<snipe@snipe.net>]
@ -196,4 +197,55 @@ class ConsumablesController extends Controller
$data = array('total' => $consumableCount, 'rows' => $rows); $data = array('total' => $consumableCount, 'rows' => $rows);
return $data; return $data;
} }
/**
* Checkout a consumable
*
* @author [A. Gutierrez] [<andres@baller.tv>]
* @param int $id
* @since [v4.9.5]
* @return JsonResponse
*/
public function checkout(Request $request, $id)
{
// Check if the consumable exists
if (is_null($consumable = Consumable::find($id))) {
return response()->json(Helper::formatStandardApiResponse('error', null, trans('admin/consumables/message.does_not_exist')));
}
$this->authorize('checkout', $consumable);
if ($consumable->qty > 0) {
// Check if the user exists
$assigned_to = $request->input('assigned_to');
if (is_null($user = User::find($assigned_to))) {
// Return error message
return response()->json(Helper::formatStandardApiResponse('error', null, 'No user found'));
}
// Update the consumable data
$consumable->assigned_to = e($assigned_to);
$consumable->users()->attach($consumable->id, [
'consumable_id' => $consumable->id,
'user_id' => $user->id,
'assigned_to' => $assigned_to
]);
// Log checkout event
$logaction = $consumable->logCheckout(e($request->input('note')), $user);
$data['log_id'] = $logaction->id;
$data['eula'] = $consumable->getEula();
$data['first_name'] = $user->first_name;
$data['item_name'] = $consumable->name;
$data['checkout_date'] = $logaction->created_at;
$data['note'] = $logaction->note;
$data['require_acceptance'] = $consumable->requireAcceptance();
return response()->json(Helper::formatStandardApiResponse('success', null, trans('admin/consumables/message.checkout.success')));
}
return response()->json(Helper::formatStandardApiResponse('error', null, 'No consumables remaining'));
}
} }

View file

@ -189,7 +189,6 @@ Route::group(['prefix' => 'v1','namespace' => 'Api', 'middleware' => 'api'], fun
/*--- Consumables API ---*/ /*--- Consumables API ---*/
Route::resource('consumables', 'ConsumablesController', Route::resource('consumables', 'ConsumablesController',
[ [
'names' => 'names' =>
@ -204,12 +203,22 @@ Route::group(['prefix' => 'v1','namespace' => 'Api', 'middleware' => 'api'], fun
'parameters' => ['consumable' => 'consumable_id'] 'parameters' => ['consumable' => 'consumable_id']
] ]
); // Consumables resource ); // Consumables resource
Route::get('consumables/view/{id}/users',
[ Route::group(['prefix' => 'consumables'], function () {
'as' => 'api.consumables.showUsers', Route::get('view/{id}/users',
'uses' => 'ConsumablesController@getDataView' [
] 'as' => 'api.consumables.showUsers',
); 'uses' => 'ConsumablesController@getDataView'
]
);
Route::post('{consumable}/checkout',
[
'as' => 'api.consumables.checkout',
'uses' => 'ConsumablesController@checkout'
]
);
});
/*--- Depreciations API ---*/ /*--- Depreciations API ---*/