HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
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
        ]);
    }

}