File: D:/HostingSpaces/SBogers10/ehbo.today/app/KommaApp/Presence/PresenceManagementController.php
<?php
namespace App\KommaApp\Presence;
use App\Http\Controllers\Controller;
use App\KommaApp\Competences\Kms\CompetenceService;
use App\KommaApp\Competences\Models\Competence;
use App\KommaApp\Courses\Models\Course;
use App\KommaApp\Users\Models\User;
use App\KommaApp\Users\Roles;
use Carbon\Carbon;
use Illuminate\Http\JsonResponse;
/**
* Class PresenceManagementController
*
*
*
* @package App\KommaApp\Presence
*/
class PresenceManagementController extends Controller
{
public const MUST_BE_SUBSCRIBED_TO_CHECK_IN = false;
/**
* Marks a user as present for a certain training
*
* Used by api calls
*
* @return JsonResponse
*/
public function checkIn()
{
/** @var CompetenceService $competenceService */
$competenceService = \App::make(CompetenceService::class);
$courseId = \Input::get('courseId');
$userCode = \Input::get('userCode');
$user = User::where('certificate_number', '=', $userCode)->first();
if($user) {
/** @var Course $course */
$course = $user->courses()->withPivot(['user_status'])->find($courseId);
if (!$course) {
if(self::MUST_BE_SUBSCRIBED_TO_CHECK_IN == true) {
return new JsonResponse([
'Deze cursist heeft zich niet ingeschreven voor deze training'
], 400);
} else {
$course = Course::find($courseId);
$user->courses()->save($course, ['user_status' => Course::UserStatusPresent]);
}
}
else if($course->pivot->user_status == Course::UserStatusPresent) return new JsonResponse('De cursist is al aangemeld.', 400);
$user->courses()->updateExistingPivot($course->id, ['user_status' => Course::UserStatusPresent, 'updated_at' => Carbon::now()]);
//Give the user the competences
$course->competences()->get()->each(function(Competence $competence) use ($competenceService, $user) {
$competenceService->userAcquiredCompetence($user, $competence);
});
return new JsonResponse([
'user' => $user
], 200);
} else {
return new JsonResponse('Het certificaatnummer is ongeldig', 400);
}
}
/**
* Returns a json response
*
* Used by api calls
*
* @param Course $course
* @param string $state
* @return JsonResponse
*/
public function getUsersByState(string $state, Course $course)
{
switch ($state)
{
case 'present':
$users = $course->users()->wherePivot('user_status', Course::UserStatusPresent)->orderBy('course_user.updated_at', 'desc')->get();
break;
case 'subscribed':
$users = $course->users()->wherePivot('user_status', Course::UserStatusSubscribed)->orderBy('course_user.updated_at', 'desc')->get(); //->sortBy('updated_at');
break;
default:
$users = null;
}
return new JsonResponse([
'users' => $users
], 200);
}
/**
* Shows the form in which users can check themselves in for a certain training
* @param Course $course the course to show the form for
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function showCheckInForm(Course $course)
{
$role = \Auth::user()->mostPrivilegedRole();
if(!$role || !$role->value == Roles::CheckInScreenMember) abort(403); //User is not allowed to check in users
return view('site.presence.check-in', [
'course' => $course
]);
}
}