public function approve($order_id) { $order = OrderChangeDepartment::findOrFail($order_id); $student_id = $order->student_id; $depid = $order->to; $current_dep = $order->from; $StudentHistory = StudentHistory::where('student_id', $student_id)->where('academycycle_semester_id', semester()->id)->update(['academystructure_department_id' => $depid]); $student = Student::with('subjects')->where('id', $student_id)->first(); $student->academystructure_department_id = $depid; $student->save(); $department = Department::findOrFail($current_dep); $current_subject_ids = json_decode($department->subject_ids, TRUE); $current_payed_subject_ids = StudentSubject::select('subject_id')->where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->where('payed', 1)->get(); $cuttent_invoice_amount = 0; if ($current_payed_subject_ids->count() > 0) { $cuttent_invoice_amount = Subject::select(DB::raw('sum(hour*amount) as total_amount'))->whereIn('id', $current_payed_subject_ids)->first(); } $new_department = Department::findOrFail($depid); $new_subject_ids = json_decode($new_department->subject_ids, TRUE); //if($current_dep == 8 or $current_dep == 13 or $current_dep =14 ){ //update department subjects StudentSubject::where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->whereIn('subject_id', $current_subject_ids)->update(['state' => 'drop']); foreach ($new_subject_ids as $new_subject_id) { $new_student_subject = new StudentSubject(); $new_student_subject->subject_id = $new_subject_id; $new_student_subject->student_id = $student_id; $new_student_subject->semester_id = semester()->id; $new_student_subject->academystructure_department_id = $depid; $new_student_subject->state = 'study'; $new_student_subject->save(); } if ($current_payed_subject_ids->count() > 0) { $new_payed_subject_ids = StudentSubject::select('subject_id')->where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->get(); $new_invoice_amount = Subject::select(DB::raw('sum(hour*amount) as total_amount'))->whereIn('id', $new_payed_subject_ids)->first(); if ($new_invoice_amount < $cuttent_invoice_amount) { StudentSubject::where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->update(['payed' => 1]); $invoiceData = ['ref_key' => 'Order_Change_AC_Departments', 'ref_value' => $order_id, 'student_id' => $student_id, 'amount' => $cuttent_invoice_amount->total_amount - $new_invoice_amount->total_amount, 'type' => 'credit', 'semester_id' => semester()->id, 'note' => 'فرق تغيير التخصص']; FinancialInvoice::create($invoiceData); } if ($new_invoice_amount > $cuttent_invoice_amount) { StudentSubject::where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->update(['payed' => 1]); } if ($new_invoice_amount > $cuttent_invoice_amount) { StudentSubject::where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->where('subject_id', '!=', 35)->update(['payed' => 1]); } } //updtae remain subjects (not in dep id) to be in same depid StudentSubject::where('semester_id', semester()->id)->where('student_id', $student_id)->where('state', 'study')->update(['academystructure_department_id' => $depid]); $order->state = 1; $order->save(); $msg = 'تم تغيير التخصص '; return redirect()->route('orders.change.department.index')->with('success', $msg); // }else{ // } }
/** * Execute the job. * * @return void */ public function handle() { $student = Student::find($this->student_id); $currentSemester = semester(); if ($student) { $history = StudentHistory::where('academycycle_semester_id', $currentSemester->id)->where('student_id', $student->id)->first(); if ($history) { $history->update(['state' => 'fired', 'study_state' => 'stop']); } StudentSubject::where('semester_id', $currentSemester->id)->where('student_id', $student->id)->update(['state' => 'fail']); $student->update(['state' => 'fired', 'study_state' => 'stop']); } }
/** * Handle the event. * * @param UserAuthenticated $event * @return void */ public function handle(DelayOrderAccepted $event) { $delay_order = $event->order; //add student history $student = student::findOrFail($delay_order->student_id); StudentHistory::where('academycycle_semester_id', $delay_order->semester_id)->where('student_id', $delay_order->student_id)->update(['state' => 'delayed']); /* StudentHistory::insert([ 'academycycle_semester_id' => $delay_order->semester_id, 'student_id' => $delay_order->student_id, 'state' => 'delayed', 'study_state' => 'stop', 'academystructure_department_id' => $student->academystructure_department_id ]); */ }
/** * Execute the job. * * @return void */ public function handle() { $student = Student::find($this->student_id); if ($student) { $failed_subjects = []; $success_subjects = []; $semester = semester(); $subjects = StudentSubject::selectRaw("subsub.id as subject_id,SUM(stugr.value) AS subject_points,student_subjects.state as subject_state,subsub.name AS subject_name, subsub.hour AS subject_hours")->join('subject_subjects AS subsub', function ($join) { $join->on('subsub.id', '=', 'student_subjects.subject_id'); })->where('student_subjects.student_id', $student->id)->leftJoin('student_grades AS stugr', function ($join) use($student, $semester) { $join->on('stugr.subject_id', '=', 'subsub.id')->where('stugr.semester_id', '=', $semester->id)->where('stugr.student_id', '=', $student->id); })->whereIn('state', ['study', 'success', 'fail'])->where('student_subjects.semester_id', '=', $semester->id)->where('student_subjects.student_id', $student->id)->groupBy('subsub.id')->get(); $subjects->each(function ($subject) use(&$failed_subjects, $success_subjects) { $subject->details = grade_details($subject->subject_points, $subject->subject_hours); if ((double) $subject->subject_points < 50) { $failed_subjects[] = $subject->subject_id; } else { $success_subjects[] = $subject->subject_id; } }); $semester->load('year'); $currentYear = $semester->year; $nextYear = AcademycycleYear::where('start_at', '>', $currentYear->start_at)->first(); $repeatSemester = Semester::where('order', $semester->order)->where('academycycle_year_id', $nextYear->id)->first(); $currentHistory = StudentHistory::where('student_id', $student->id)->where('academycycle_semester_id', $semester->id)->first(); $repeatSubjects = []; foreach ($failed_subjects as $subject_id) { $repeatSubjects[$subject_id] = ['semester_id' => $repeatSemester->id, 'academystructure_department_id' => $currentHistory->academystructure_department_id, 'state' => 'study']; } $student->subjects()->attach($repeatSubjects); StudentSubject::where('semester_id', $semester->id)->where('student_id', $student->id)->whereIn('subject_id', $success_subjects)->update(['state' => 'success']); StudentSubject::where('semester_id', $semester->id)->where('student_id', $student->id)->whereIn('subject_id', $failed_subjects)->update(['state' => 'fail']); $currentHistory->study_state = 'repeat'; $currentHistory->save(); $repeatHistory = $currentHistory->replicate(); $repeatHistory->study_state = 'active'; $repeatHistory->academycycle_semester_id = $repeatSemester->id; $repeatHistory->save(); $student->study_state = 'repeat'; $student->save(); } }
/** * Run the database seeds. * * @return void */ public function run() { Model::unguard(); echo 'start'; DB::statement('SET FOREIGN_KEY_CHECKS=0;'); if (Student::count()) { // return; } Student::where('id', '!=', 10000)->delete(); // DB::table('students')->where('id', '!=',10000)->delete(); // StudentHistory::truncate(); // StudentClassroomHistory::truncate(); // StudentClassroomSession::truncate(); StudentHistory::where('student_id', '!=', 10000)->delete(); $demo_students = [1268, 1276, 1284, 45, 2772, 2803, 2827]; $active_semester = 9; $summer_semesters = [5, 8]; $quran_subjects = [8, 6, 21, 28, 39, 52]; $student_status = ['-3', '-4', '-5', '-6']; $student_study_states = [1 => 'active', 2 => 'success', 3 => 'fail', 4 => 'stop', 5 => 'repeat', 6 => 'success']; $student_states = [1 => 'active', 2 => 'delayed', 3 => 'withdrawn', 4 => 'fired', 5 => 'discontinuous', 6 => 'graduate']; // $all_registrations = DB::connection('old')->table('registration') // ->select('reg_specialist', 'reg_nationalid') // ->orderBy('reg_id', 'DESC') // ->get(); $all_user_subjects = DB::connection('old')->table('user_subject')->select('us_userid', 'us_subid', 'us_semid', 'us_state', 'us_result', 'us_status')->get(); $new_departments = $new_department = Department::select('ad.id', 'ad.parent_id', 'ay.id AS ay_id', 'as.code')->join('academystructure_terms as at', 'at.id', '=', 'ad.term_id')->join('academystructure_years as ay', function ($j) { $j->on('at.year_id', '=', 'ay.id'); // ->where('ay.id', '=',$academy['academy_year']); })->join('academystructure_specialties as as', function ($j) { $j->on('as.id', '=', 'ad.spec_id'); // ->where('as.code', '=', $dep_sepcialty_code); })->from('academystructure_departments as ad')->get()->toArray(); $all_old_academies = $academy = DB::connection('old')->table('sub_academy')->select('academy.*', 'sub_academy.sub_acad_subid')->join('academy', 'sub_acad_academyid', '=', 'academy_id')->get(); $all_old_academies = array_map(function ($a) { return (array) $a; }, $all_old_academies); $students = DB::connection('old')->table('users')->select('users.*', 'r.reg_id')->where('user_groupid', 3)->where('user_edu_state', '>=', 1)->where('user_study_state', '>=', 1)->where('user_code', '!=', 'student')->leftJoin('registration as r', 'r.reg_nationalid', '=', 'users.user_nationalid')->groupBy('users.user_id')->get(); $new_students = []; $new_histories = []; echo 'will loop' . "\n"; foreach ($students as $student) { $gender = substr($student->user_code, 5, 1) == '1' ? 'm' : 'f'; $new_student = []; $new_student['id'] = $student->user_id; $new_student['name'] = $student->user_fullname; $new_student['email'] = $student->user_email; $new_student['mobile'] = $student->user_phone; $new_student['national_id'] = $student->user_nationalid; $new_student['gender'] = $gender; $new_student['state'] = 'active'; $new_student['study_state'] = 'first'; $new_student['academystructure_department_id'] = NULL; $new_student['registration_id'] = $student->reg_id ? $student->reg_id : NULL; $new_student['username'] = $student->user_code; $new_student['password'] = bcrypt($student->user_phone); // $new_student['created_at'] = new DateTime; // $new_student['updated_at'] = new DateTime; $success = false; $semesters = array_unique(array_pluck(array_filter($all_user_subjects, function ($user_subject) use($student) { return $user_subject->us_userid == $student->user_id; }), 'us_semid')); asort($semesters); $i = 0; foreach ($semesters as $semester) { // exit(var_dump($semesters)); $history = ['student_id' => $student->user_id, 'state' => 'active', 'study_state' => 'stop', 'academycycle_semester_id' => $semester]; $subjects = array_filter($all_user_subjects, function ($user_subject) use($semester, $student) { return $user_subject->us_semid == $semester && $user_subject->us_userid == $student->user_id; }); $subjects = array_map(function ($item) { return (array) $item; }, $subjects); $subjects = array_map(function ($item) { return array_only($item, ['us_userid', 'us_state', 'us_result', 'us_status', 'us_subid']); }, $subjects); if (empty($subjects)) { continue; } $one_subject = []; foreach ($subjects as $subject) { if (isset($one_subject['us_subid']) and $subject['us_subid'] > $one_subject['us_subid']) { $one_subject = $subject; } elseif (empty($one_subject)) { $one_subject = $subject; } } // exit(var_dump($one_subject)); // $one_subject = end($subjects); $academy_where = ['sub_acad_subid' => $one_subject['us_subid']]; // if($student->user_yearid==3 && $semester>5) { // if($i>4 && $semester>5) { switch ($student->user_department) { case 1: $academy_department = 'اصول الفقة'; break; case 2: $academy_department = 'الدرسات الاسلامية'; break; case 3: $academy_department = 'عام'; break; } $academy_where['academy_department'] = $academy_department; // } if ($semester == $active_semester) { $academy = array_filter($all_old_academies, function ($a) use($student) { return $student->user_academyid == $a['academy_id']; }); } else { $academy = array_filter($all_old_academies, function ($a) use($one_subject, $academy_where) { return empty($academy_where['academy_department']) or $a['academy_department'] == $academy_where['academy_department']; }); } // var_dump($academy_department); $academy = current($academy); if (empty($academy)) { continue; } // $dep_sepcialty_code = 'G'; // new specialty code switch ($student->user_department) { case 1: $dep_sepcialty_code = 'O'; break; case 2: $dep_sepcialty_code = 'I'; break; case 3: $dep_sepcialty_code = 'G'; break; } // var_dump($dep_sepcialty_code). "\n"; // if($student->user_de) // // $dep_sepcialty_code = 'G'; // if($academy['academy_department']=='اصول الفقة') { // $dep_sepcialty_code = 'O'; // } elseif($academy['academy_department']=='الدرسات الاسلامية') { // $dep_sepcialty_code = 'I'; // } // if($academy['academy_id']<=4) { // $student_nationalid = $student->user_nationalid; // $registration = array_filter($all_registrations, function($reg) use ($student_nationalid){ // return $reg->reg_nationalid == $student_nationalid; // }); // $registration = (array)array_shift($registration); // if(!empty($registration)) { // switch ($registration['reg_specialist']) { // case 'islam': // $dep_sepcialty_code = 'I'; // break; // case 'feqh': // $dep_sepcialty_code = 'O'; // break; // default: // $dep_sepcialty_code = 'G'; // break; // } // } // } $new_departments_filtered = array_filter($new_departments, function ($d) use($academy, $dep_sepcialty_code) { return $d['ay_id'] == $academy['academy_year'] && $d['code'] == $dep_sepcialty_code; }); if ($academy['academy_term'] == 2) { $new_department = array_pop($new_departments_filtered); } else { $new_department = array_shift($new_departments_filtered); } $history['academystructure_department_id'] = $new_department['id']; if (in_array($one_subject['us_result'], $student_status)) { switch ($one_subject['us_result']) { case "-3": $history['state'] = 'withdrawn'; break; case "-4": $history['state'] = 'discontinuous'; break; case "-5": $history['state'] = 'fired'; break; case "-6": $history['state'] = 'delayed'; break; } } $success_total = count(array_filter($subjects, function ($user_subject) { return $user_subject['us_state'] == 'sucess'; })); $failed_total = count(array_filter($subjects, function ($user_subject) { return $user_subject['us_state'] == 'fail'; })); if (!in_array($semester, array_merge($summer_semesters, [$active_semester]))) { if ($failed_total >= 4) { $history['study_state'] = 'fail'; } else { $history['study_state'] = 'success'; } } elseif (in_array($semester, $summer_semesters) && $failed_total > 0) { $history['study_state'] = 'fail'; } elseif (in_array($semester, $summer_semesters) && $failed_total == 0) { $history['study_state'] = 'success'; } elseif ($semester == $active_semester) { $history['study_state'] = 'active'; } if ($one_subject['us_status'] == '-1') { $history['study_state'] = 'repeat'; } if ($one_subject['us_result'] == '-6') { $history['study_state'] = 'stop'; } if ($i == count($semesters) - 1) { $history['study_state'] = $student_study_states[$student->user_study_state]; $history['state'] = $student_states[$student->user_edu_state]; } // var_dump($history); $new_histories[] = $history; $i++; // end foreach $semesters as $semester } if (empty($semesters)) { $new_department = array_filter($new_departments, function ($d) { return $d['id'] == 3; }); if (!empty($new_department)) { $new_student['academystructure_department_id'] = current($new_department)['id']; } } else { if (isset($new_department['id'])) { $new_student['academystructure_department_id'] = $new_department['id']; } } $new_student['study_state'] = $student_study_states[$student->user_edu_state]; $new_student['state'] = $student_states[$student->user_study_state]; $new_students[] = $new_student; } // var_dump($new_histories); foreach (array_chunk($new_students, 1000) as $chunk) { DB::table('students')->insert($chunk); } foreach (array_chunk($new_histories, 1000) as $chunk) { DB::table('student_histories')->insert($chunk); } }
/** * Handle the event. * * @param RegistrationStepChanged $event * @return void */ public function handle(RegistrationStepChanged $event) { $registration = $event->registration; $semester = semester(); $finish = $semester ? $semester->finish_at : date('Y-m-d'); if ($semester->order != 'first') { $semester = Semester::where('order', 'first')->where('start_at', '>', $finish)->orderBy('start_at', 'ASC')->first(); } if (empty($semester)) { return false; } $registration->load('step', 'student', 'contactcountry', 'files'); if ($registration->step->enroll == 1 && !$registration->student) { $equation_subjects_ids = RegistrationEquationSubject::whereNotNull('subject_id')->where('status', 'accepted')->whereHas('equation', function ($w) use($registration) { $w->where('registration_id', $registration->id); })->pluck('subject_id')->toArray(); $subject_ids = []; $i = 0; $department = 0; while (count(array_diff($subject_ids, $equation_subjects_ids)) == 0) { $department = Department::where('spec_id', $registration->academystructure_specialty_id)->where(function ($w) use($department) { $w->orWhere('parent_id', !empty($department->id) ? $department->id : 0); $w->orWhereNull('parent_id'); })->first(); $subject_ids = json_decode($department->subject_ids, TRUE); $i++; if ($i == 20) { break; } } if (empty($subject_ids)) { return false; } $subjects = Subject::whereIn('id', $subject_ids)->get(); $mobile = ($registration->contactcountry ? $registration->contactcountry->calling_code : "968") . $registration->contact_mobile; $data = ['username' => $registration->username, 'username_prefix' => $registration->enroll_code, 'password' => bcrypt($registration->contact_mobile), 'name' => $registration->fullname, 'email' => $registration->contact_email, 'mobile' => $mobile, 'state' => 'active', 'study_state' => 'active', 'national_id' => $registration->national_id, 'gender' => $registration->gender, 'registration_id' => $registration->id, 'academystructure_department_id' => $department->id, 'registration_type_id' => $registration->registration_type_id]; if ($registration->files) { $photo = $registration->files->first(function ($key, $value) { return $key == 'photo'; }); if ($photo) { // $data['photo'] = asset($photo->file->url()); } } Eloquent::unguard(); $student = Student::create($data); $invoiceItem = FinancialInvoiceItem::where('slug', 'study_fee')->first(); $study_fee = $registration->study_fee > 0 ? $registration->study_fee : $invoiceItem->amount; $total_amount = $subjects->sum(function ($s) use($equation_subjects_ids, $study_fee) { $amount = 0; if (!in_array($s->id, $equation_subjects_ids)) { $amount = !$s->is_quran ? $s->hour * (int) $study_fee : $s->hour * ((int) $study_fee / 2); } return $amount; }); if ($student) { if ($registration->debit && $invoiceItem) { $invoiceData = ['ref_key' => 'registrations', 'ref_value' => $registration->id, 'student_id' => $student->id, 'amount' => $registration->debit, 'type' => 'credit', 'item_id' => $invoiceItem->id, 'pay_type' => 'epay', 'bank_code' => $registration->reason_code, 'transaction_wid' => $registration->transaction_uuid, 'note' => 'ايصال دفع مصاريف التسجيل.']; FinancialInvoice::create($invoiceData); // create debit invoice $invoiceData = ['ref_key' => 'registrations', 'ref_value' => $registration->id, 'student_id' => $student->id, 'amount' => $total_amount, 'type' => 'debit', 'item_id' => $invoiceItem->id, 'pay_type' => 'epay', 'note' => 'فاتةورة التسجيل.']; FinancialInvoice::create($invoiceData); } foreach ($subjects as $subject) { $subject_state = in_array($subject->id, $equation_subjects_ids) ? 'equal' : 'study'; $subject_payed = in_array($subject->id, $equation_subjects_ids) ? 0 : 1; if (!$registration->debit && $registration->step->make_payment) { $subject_payed = 0; } $data = ['student_id' => $student->id, 'subject_id' => $subject->id, 'semester_id' => $semester->id, 'academystructure_department_id' => $department->id, 'state' => $subject_state, 'note' => '', 'payed' => $subject_payed]; $studentSubject = StudentSubject::create($data); } $historyData = ['student_id' => $student->id, 'state' => 'active', 'study_state' => 'active', 'academycycle_semester_id' => $semester->id, 'academystructure_department_id' => $department->id]; StudentHistory::create($historyData); $this->createStudentEmail($student, $registration->contact_mobile); try { if (!empty($photo)) { $student->photo = $photo; $student->save(); } } catch (\Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException $e) { } } //\Log::info('turn to student '.$response); } }
/** * Execute the job. * * @return void */ public function handle() { $student = Student::find($this->student_id); $currentSemester = semester(); $summerSemester = Semester::where('id', '>', $currentSemester->id)->where('order', 'summer')->orderBy('id', 'ASC')->first(); // Log::info($student->id, $currentSemester->id, $summerSemester->id); if ($student && $currentSemester && $summerSemester) { $nextSemester = Semester::where('id', '>', $currentSemester->id)->where('order', '!=', 'summer')->orderBy('id', 'ASC')->first(); if (!$nextSemester) { return false; } $current_department_id = $student->academystructure_department_id; if ($currentSemester->order != 'summer') { $nextDepartment = Department::where('parent_id', $student->academystructure_department_id)->first(); if ($nextDepartment) { $student->state = 'active'; $student->study_state = 'success'; $student->academystructure_department_id = $nextDepartment->id; } } $history = StudentHistory::where('student_id', $student->id)->orderBy('id', 'desc')->where('academycycle_semester_id', $currentSemester->id)->first(); if ($history) { $history->study_state = 'success'; $history->save(); } if ($student->save()) { // get current semester subjects and make them fail or success for current semester $subjects = StudentSubject::selectRaw("subsub.id as subject_id,SUM(stugr.value) AS subject_points,student_subjects.state as subject_state,subsub.name AS subject_name, subsub.hour AS subject_hours")->join('subject_subjects AS subsub', function ($join) { $join->on('subsub.id', '=', 'student_subjects.subject_id'); })->where('student_subjects.student_id', $student->id)->leftJoin('student_grades AS stugr', function ($join) use($currentSemester, $student) { $join->on('stugr.subject_id', '=', 'subsub.id')->where('stugr.semester_id', '=', $currentSemester->id)->where('stugr.student_id', '=', $student->id); })->whereIn('state', ['study'])->where('student_subjects.semester_id', '=', $currentSemester->id)->where('student_subjects.student_id', $student->id)->groupBy('subsub.id')->get(); $failed_subjects_ids = []; $passed_subjects_ids = []; foreach ($subjects as $subject) { if ($subject->subject_points < 50) { $failed_subjects_ids[] = $subject->subject_id; } elseif ($subject->subject_points >= 50) { $passed_subjects_ids[] = $subject->subject_id; } } StudentSubject::where('student_id', $student->id)->whereIn('subject_id', $failed_subjects_ids)->update(['state' => 'fail']); StudentSubject::where('student_id', $student->id)->whereIn('subject_id', $passed_subjects_ids)->update(['state' => 'success']); // end success and fail if ($currentSemester->order != 'summer' && $nextDepartment) { $next_subject_ids = json_decode($nextDepartment->subject_ids, TRUE); $equal_subject_ids = EqualSubject::whereHas('order', function ($w) use($student) { $w->where('student_id', $student->id); })->pluck('equal_subject_id')->toArray(); $next_subject_study_ids = array_diff($next_subject_ids, $equal_subject_ids); $next_subject_equal_ids = array_intersect($next_subject_ids, $equal_subject_ids); $student->subjects()->attach($next_subject_study_ids, ['semester_id' => $nextSemester->id, 'academystructure_department_id' => $nextDepartment->id, 'state' => 'study']); $student->subjects()->attach($next_subject_equal_ids, ['semester_id' => $nextSemester->id, 'academystructure_department_id' => $nextDepartment->id, 'state' => 'equal']); $data = ['state' => 'active', 'study_state' => 'active', 'academycycle_semester_id' => $nextSemester->id, 'academystructure_department_id' => $nextDepartment->id]; $student->histories()->create($data); // create invoice for student if ($next_subject_equal_ids) { $item = FinancialInvoiceItem::where('slug', 'study_fee')->first(); $subjects_count = Subject::whereIn('id', $next_subject_equal_ids)->where('is_quran', 0)->count(); $data = ['student_id' => $student->id, 'type' => 'debit', 'item_id' => $item->id, 'pay_type' => NULL, 'semester_id' => $nextSemester->id, 'amount' => $subjects_count * $item->amount]; FinancialInvoice::create($data); } } // move any failed subjects if less than 3 to summer semester $all_failed_subjects = StudentSubject::groupBy('subject_id')->where('state', 'fail')->pluck('subject_id')->toArray(); $all_passed_subjects = StudentSubject::groupBy('subject_id')->where('state', 'success')->pluck('subject_id')->toArray(); $failed_subjects = array_diff($all_failed_subjects, $all_passed_subjects); if (COUNT($failed_subjects) <= 3) { $summerSemester = Semester::where('id', '>', $currentSemester->id)->where('order', 'summer')->orderBy('id', 'ASC')->first(); $student->subjects()->attach($failed_subjects, ['semester_id' => $summerSemester->id, 'academystructure_department_id' => $current_department_id, 'state' => 'study']); $data = ['state' => 'active', 'study_state' => 'active', 'academycycle_semester_id' => $summerSemester->id, 'academystructure_department_id' => $current_department_id]; $student->histories()->create($data); } } } }