/**
  * Get all classrooms for all the courses of a department to show
  * @param Request $request
  * @param $code
  * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  */
 public function getClassrooms(Request $request, $code)
 {
     if ($request->ajax()) {
         $classrooms = Classroom::join('courses', 'classrooms.course_code', '=', 'courses.code')->join('rooms', 'classrooms.room_id', '=', 'rooms.id')->select('classrooms.course_code', 'courses.name as Name', 'rooms.name as Room', 'classrooms.from', 'classrooms.to', 'classrooms.day')->where('classrooms.department_code', '=', $code)->get();
         foreach ($classrooms as $classroom) {
             $classroom->from = date('h:i A', strtotime($classroom->from));
             $classroom->to = date('h:i A', strtotime($classroom->to));
         }
         $classrooms = $classrooms->groupBy('course_code');
         // get details for each course
         $notAllocatedClassroom = Course::select('courses.code', 'courses.name')->where('courses.department_code', '=', $code)->whereNotIn('courses.code', function ($query) {
             $query->select('classrooms.course_code')->from('classrooms');
         })->orderBy('courses.code')->get();
         return response([$classrooms, $notAllocatedClassroom]);
     }
 }
 /**
  * Using this method for two different AJAX request. One for enroll course & one for save result
  *
  * Display the specified resource.
  *
  * @param Request $request
  * @param $id
  * @return \Illuminate\Contracts\Routing\ResponseFactory|\Symfony\Component\HttpFoundation\Response
  */
 public function show(Request $request, $id)
 {
     if ($request->ajax()) {
         $studentInfo = Student::join('departments', 'students.department_code', '=', 'departments.code')->select('students.name', 'students.email', 'students.department_code', 'departments.name as department')->where('students.registration_no', '=', $id)->first();
         if ($request->has('grade')) {
             /**
              * Select courses of a student which is not being graded
              * @var TYPE_NAME $courses
              */
             $courses = Course::join('course_student', 'courses.code', '=', 'course_student.course_code')->select('courses.code', 'courses.name')->where('course_student.student_registration_no', $id)->where(function ($query) {
                 $query->whereNull('course_student.grade')->orWhere('course_student.grade', '');
             })->get();
         } elseif ($request->has('result')) {
             $student = Student::find($id);
             /** Check whether user can see the result
              * @var TYPE_NAME $this */
             $this->authorize('viewResult', $student);
             $courses = Course::join('course_student', 'courses.code', '=', 'course_student.course_code')->select('courses.code', 'courses.name', 'course_student.grade')->where('course_student.student_registration_no', $id)->get();
         } else {
             $courses = Course::select('courses.code', 'courses.name')->where('courses.department_code', '=', $studentInfo->department_code)->whereNotIn('courses.code', function ($query) use($id) {
                 $query->select('course_student.course_code')->from('course_student')->where('course_student.student_registration_no', '=', $id);
             })->get();
         }
         return response([$studentInfo, $courses]);
     }
 }