private function createClassrooms($interval)
 {
     $classrooms = $interval->classrooms;
     $WiziqApi = new WiziqApi();
     if (App::environment() == 'local') {
         $status_ping_url = 'http://46.40.236.186:9090/DARES/public/classrooms/classrooms/status_ping';
         // $status_ping_url = 'https://el-css.edu.om/admin/public/classrooms/classrooms/status_ping';
     } else {
         $status_ping_url = 'https://google.com';
         // $status_ping_url = 'https://el-css.edu.om/admin/public/classrooms/classrooms/status_ping';
     }
     // Log::info($status_ping_url);
     foreach ($classrooms as $classroom) {
         $error = 0;
         $subject = $classroom->subject;
         $teacher = $classroom->teacher;
         $increment_date = Date::parse($interval->from_date . " " . $classroom->hour);
         while ($increment_date->format("Y-m-d H:i:s") <= $interval->to_date . " 23:59:59") {
             $exists = ClassroomSession::where('start_at', $increment_date->format("Y-m-d H:i:s"))->where('classroom_id', $classroom->id)->count();
             if ($increment_date->dayOfWeek == $classroom->day && $increment_date->isFuture() && !$exists) {
                 try {
                     $wiziqclassroom = WiziqClassroom::build($interval->title . " - " . $subject->name, new DateTime($increment_date->format("Y-m-d H:i:s")))->withPresenter($teacher->id, $teacher->name)->withAttendeeLimit(config("classrooms.attendee_limit"))->withReturnUrl('')->withDuration(60)->withExtendDuration(0)->withStatusPingUrl($status_ping_url)->withTimeZone("Asia/Muscat")->withLanguageCultureName("ar-SA")->withCreateRecording(true);
                     $response = $WiziqApi->create($wiziqclassroom);
                     $data = ['title' => $interval->title, 'wiziq_id' => $response['class_id'], 'interval_id' => $interval->id, 'classroom_id' => $classroom->id, 'subject_subject_id' => $subject->id, 'teacher_id' => $teacher->id, 'start_at' => $increment_date->format("Y-m-d H:i:s"), 'duration' => 60, 'recording_link' => $response['recording_url'], 'presenter_link' => $response['presenter_url']];
                     /** add attendees to virtual classroom */
                     if ($session = ClassroomSession::create($data)) {
                         $error = $this->createStudentsSessions($classroom->students, $session);
                     }
                     //\Log::info($response);
                 } catch (\mikemix\Wiziq\Common\Api\Exception\CallException $e) {
                     // \Log::warning($e->getMessage());
                     $error = 1;
                 } catch (\mikemix\Wiziq\Common\Http\Exception\InvalidResponseException $e) {
                     // \Log::warning($e->getMessage());
                     $error = 1;
                 } catch (\PDOException $e) {
                     $error = 1;
                 }
             }
             $increment_date->add("1 day");
         }
         if ($error == 0) {
             $interval->state = 'done';
             $interval->save();
             event(new IntervalVirtualClassroomsCreated($interval->title));
         }
     }
 }
Example #2
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     $this->comment(PHP_EOL . 'adding' . PHP_EOL);
     $WiziqApi = new WiziqApi();
     // $report = $WiziqApi->getAttendanceReport(5435948);
     // var_dump($report);
     // exit;
     $sessions = ClassroomSession::select('classroom_sessions.id', 'classroom_sessions.wiziq_id', 'classroom_sessions.title', 'classroom_sessions.classroom_id', 'classroom_sessions.subject_subject_id')->leftJoin('classroom_session_attendances as csa', 'classroom_sessions.id', '=', 'csa.classroom_session_id')->whereNull('csa.id')->with('subject')->groupBy('classroom_sessions.id')->whereCanceled(0)->whereDate('classroom_sessions.start_at', '>', date('2016-10-30'))->where('start_at', '<', date('Y-m-d H:i:s', strtotime('-60 minutes')))->get();
     $this->comment(PHP_EOL . $sessions->count() . PHP_EOL);
     foreach ($sessions as $session) {
         $all_classroom_students = ClassroomStudent::where('classroom_id', $session->classroom_id)->where('semester_id', semester()->id)->pluck('student_id')->toArray();
         // $WiziqApi = new WiziqApi;
         try {
             $report = $WiziqApi->getAttendanceReport($session->wiziq_id);
         } catch (\mikemix\Wiziq\Common\Api\Exception\CallException $e) {
             continue;
         }
         if (empty($report)) {
             continue;
         }
         ClassroomSession::where('id', $session->id)->update(['wiziq_status' => 'completed', 'wiziq_recording_status' => 'available']);
         // $session->wiziq_status = 'completed';
         // $session->wiziq_recording_status = 'available';
         // $session->save();
         $attendances = collect();
         // var_dump($report);
         // exit;
         // dd('out');
         foreach ($report as $attendee) {
             $student_id = NULL;
             $teacher_id = NULL;
             if (empty($attendee['presenter_id']) && !empty($attendee['attendee_id'])) {
                 $student_id = $attendee['attendee_id'];
                 if (!in_array($student_id, $all_classroom_students)) {
                     continue;
                 }
             } elseif (!empty($attendee['presenter_id'])) {
                 $teacher_id = $attendee['presenter_id'];
             } else {
                 continue;
             }
             $data = ['teacher_id' => $teacher_id, 'student_id' => $student_id, 'classroom_session_id' => $session->id, 'entry_time' => Date::parse($attendee['entry_time'])->format('Y-m-d H:i:s'), 'exit_time' => Date::parse($attendee['exit_time'])->format('Y-m-d H:i:s'), 'attended_minutes' => $attendee['attended_minutes']];
             $attendance = ClassroomSessionAttendance::create($data);
             if ($student_id && in_array($student_id, $all_classroom_students)) {
                 $data = ['student_id' => $student_id, 'subject_id' => $session->subject_subject_id, 'value' => $session->subject->hours == 2 ? 2.5 : 2, 'ref_key' => 'attendance', 'notes' => trans('classrooms::attendances.attended_for', ['attended_minutes' => $attendance->attended_minutes, 'session' => $session->title, 'subject' => $session->subject->name]), 'ref_value' => $attendance->id];
                 $StudentGrade = new StudentGrade();
                 $StudentGrade->fill($data)->save();
             } else {
                 // $data['teacher_id'] = $attendance->teacher_id;
                 TeacherFund::create(['teacher_id' => $teacher_id, 'amount' => config('classrooms.payment_per_session'), 'reference_key' => 'session', 'reference_id' => $session->id, 'semester_id' => semester()->id]);
             }
             $attendances->push($attendance);
         }
         $student_ids = $attendances->whereLoose('teacher_id', NULL)->pluck('student_id')->toArray();
         $students = Student::whereHas('classrooms', function ($query) use($session) {
             return $query->where('classrooms.id', $session->classroom_id);
         })->whereNotIn('id', $student_ids)->get();
         foreach ($students as $student) {
             $data = ['teacher_id' => NULL, 'student_id' => $student->id, 'classroom_session_id' => $session->id, 'entry_time' => NULL, 'exit_time' => NULL, 'attended_minutes' => 0, 'manual' => 1, 'valid' => 0];
             event(new StudentAbsentSession($student, $session, $session->subject));
             ClassroomSessionAttendance::create($data);
             // $attendances->push($attendance);
         }
     }
     $this->comment(PHP_EOL . 'added' . PHP_EOL);
 }
Example #3
0
 public function actionBulk()
 {
     $submit = request('submit');
     $ids = request('table_records', []);
     switch ($submit) {
         case 'delete':
             ClassroomSession::whereIn('id', $ids)->delete();
             break;
         case 'cancel':
             if (!empty($ids)) {
                 ClassroomSession::where('canceled', 0)->whereIn('id', $ids)->update(['notes' => request('notes'), 'canceled' => 1]);
                 $sessions = ClassroomSession::where('canceled', 0)->whereIn('id', $ids)->get();
                 dispatch(new CancelVirtualClassroomsJob($sessions));
             }
             break;
         default:
             # code...
             break;
     }
     return redirect()->route('classrooms.sessions.index');
 }