/home/techb158/ileadtechnology.com/SSM/app/Repositories/exam
NameSizeModeActions
ExamRepository.php78680644editdlrm
OnlineExamRepository.php272810644editdlrm
RecordRepository.php178300644editdlrm
ReportAnalysisRepository.php123070644editdlrm
ReportRepository.php399860644editdlrm
ScheduleRepository.php150910644editdlrm
Edit: /home/techb158/ileadtechnology.com/SSM/app/Repositories/exam/RecordRepository.php (17830B)
course_group = $course_group; $this->batch = $batch; $this->exam_grade = $exam_grade; $this->exam_assessment = $exam_assessment; $this->exam = $exam; $this->student_record = $student_record; $this->exam_record = $exam_record; $this->class_teacher = $class_teacher; $this->subject_teacher = $subject_teacher; $this->exam_schedule = $exam_schedule; } /** * Get exam record query * * @return Record query */ public function getQuery() { return $this->exam_record; } /** * Get exam record pre requisite. * * @return Array */ public function getPreRequisite() { $exams = $this->exam->selectAll(); $batches = $this->course_group->getBatchOption(); $batch_with_subjects = $this->batch->getAllBatchWithSubjects(); return compact('batches','batch_with_subjects','exams'); } /** * Get observation record pre requisite. * * @return Array */ public function getObservationPreRequisite() { $batches = $this->course_group->getBatchOption(); $exams = $this->exam->selectAll(); return compact('batches','exams'); } /** * Get students for record entry * * @param array $array * @return array */ public function getStudents($params = array()) { $exam_id = gv($params, 'exam_id'); $batch_id = gv($params, 'batch_id'); $subject_id = gv($params, 'subject_id'); $exam = $this->exam->findOrFail($exam_id); $batch = $this->batch->findOrFail($batch_id); $course_group_id = $exam->exam_term_id ? $exam->term->course_group_id : null; if ($course_group_id && $batch->course->course_group_id != $course_group_id) { throw ValidationException::withMessages(['message' => trans('academic.could_not_find_batch')]); } if (! in_array($subject_id, $batch->Subjects->pluck('id')->all())) { throw ValidationException::withMessages(['message' => trans('academic.could_not_find_subject')]); } $exam_record = $this->exam_record->filterBySubjectId($subject_id)->whereHas('schedule', function($q) use($exam_id, $batch_id) { $q->filterByExamId($exam_id)->filterByBatchId($batch_id); })->first(); if (! $exam_record) { throw ValidationException::withMessages(['message' => trans('exam.could_not_find_schedule')]); } if (! $exam_record->date) { throw ValidationException::withMessages(['message' => trans('exam.subject_has_no_exam')]); } $exam_record->load('schedule','schedule.grade','schedule.assessment','schedule.assessment.details'); $student_records = []; $date_of_exam = toDate($exam_record->date); $student_records = $this->student_record->filterBySession()->filterbyBatchId($batch_id)->where('date_of_entry','<=', $date_of_exam)->where(function($q) use($date_of_exam) { $q->where('date_of_exit',null)->orWhere(function($q1) use($date_of_exam) { $q1->where('date_of_exit','!=',null)->where('date_of_exit','>=',$date_of_exam); }); })->get(); $student_records->load('student','admission','batch'); $exam_assessment = $exam_record->schedule->assessment; $disable_input = true; if (\Auth::user()->can('store-exam-mark')) { $disable_input = false; } else if (\Auth::user()->can('store-class-teacher-wise-exam-mark')) { $class_teachers = $this->getClassTeachers($batch_id); $disable_input = amIClassTeacherOnDate($class_teachers, $date_of_exam) ? false : true; } else if (\Auth::user()->can('store-subject-teacher-wise-exam-mark')) { $subject_teachers = $this->getSubjectTeachers($subject_id); $disable_input = amISubjectTeacherOnDate($subject_teachers, $date_of_exam) ? false : true; } $exam_record->disable_input = $disable_input; return compact('student_records','exam_assessment','exam_record'); } /** * Get students for observation record entry * * @param array $array * @return array */ public function getStudentsForObservationRecord($params = array()) { $exam_id = gv($params, 'exam_id'); $batch_id = gv($params, 'batch_id'); $exam = $this->exam->findOrFail($exam_id); $batch = $this->batch->findOrFail($batch_id); $course_group_id = $exam->exam_term_id ? $exam->term->course_group_id : null; if ($course_group_id && $batch->course->course_group_id != $course_group_id) { throw ValidationException::withMessages(['message' => trans('academic.could_not_find_batch')]); } $exam_schedule = $this->exam_schedule->filterByExamId($exam_id)->filterByBatchId($batch_id)->first(); if (! $exam_schedule || ! $batch->exam_observation_id) { throw ValidationException::withMessages(['message' => trans('exam.could_not_find_schedule')]); } $batch->load('observation','observation.details'); $student_records = []; $date_of_exam = $exam_schedule->records->where('date','!=',null)->sortBy('date')->last()->date; if (! $date_of_exam) { throw ValidationException::withMessages(['message' => trans('exam.subject_has_no_exam')]); } $date_of_exam = toDate($date_of_exam); $student_records = $this->student_record->filterBySession()->filterbyBatchId($batch_id)->where('date_of_entry','<=', $date_of_exam)->where(function($q) use($date_of_exam) { $q->where('date_of_exit',null)->orWhere(function($q1) use($date_of_exam) { $q1->where('date_of_exit','!=',null)->where('date_of_exit','>=',$date_of_exam); }); })->get(); $student_records->load('student','admission','batch'); $exam_observation = $batch->observation; $disable_input = true; if (\Auth::user()->can('store-exam-mark')) { $disable_input = false; } else if (\Auth::user()->can('store-class-teacher-wise-exam-mark')) { $class_teachers = $this->getClassTeachers($batch_id); $disable_input = amIClassTeacherOnDate($class_teachers, $date_of_exam) ? false : true; } $exam_schedule->disable_input = $disable_input; return compact('student_records','exam_observation','exam_schedule'); } /** * Get class teachers for exam entry * @param integer $batch_id * @return ClassTeacher */ private function getClassTeachers($batch_id) { $class_teachers = $this->class_teacher->filterByBatchId($batch_id)->orderBy('date_effective','desc')->get(['employee_id','date_effective']); $employee_id = optional(\Auth::user()->Employee)->id; foreach ($class_teachers as $class_teacher) { $class_teacher->is_me = ($class_teacher->employee_id == $employee_id) ? true : false; } return $class_teachers; } /** * Get subject teachers for exam entry * @param object $subject * @return SubjectTeacher */ private function getSubjectTeachers($subject_id) { $subject_teachers = $this->subject_teacher->filterBySubjectId($subject_id)->orderBy('date_effective','desc')->get(['employee_id','date_effective']); $employee_id = optional(\Auth::user()->Employee)->id; foreach ($subject_teachers as $subject_teacher) { $subject_teacher->is_me = ($subject_teacher->employee_id == $employee_id) ? true : false; } return $subject_teachers; } /** * Store exam records * @param array $params * @return void */ public function store($params = array()) { $data = $this->getStudents($params); $student_records = gv($data, 'student_records'); $exam_assessment = gv($data, 'exam_assessment'); $exam_record = gv($data, 'exam_record'); if ($exam_record->disable_input) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } unset($exam_record->disable_input); $marks = gv($params, 'marks'); $student_record_ids = $student_records->pluck('id')->all(); foreach ($marks as $index => $mark) { $student_mark = []; $student_record_id = gv($mark, 'id'); if (! in_array($student_record_id, $student_record_ids)) { continue; } $is_absent = gbv($mark, 'is_absent'); if ($is_absent) { continue; } $ob_marks = gv($mark, 'ob_marks'); foreach ($ob_marks as $idx => $ob_mark) { $ob = gv($ob_mark, 'ob'); if (! $ob || ! is_numeric($ob)) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.numeric', ['attribute' => trans('exam.obtained_mark')])]); } if ($ob < 0) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.min.numeric', ['attribute' => trans('exam.obtained_mark'), 'min' => 0])]); } $exam_assessment_detail_id = gv($ob_mark, 'id'); if ($exam_record->getOption('assessment_details')) { $assessment_detail = searchByKey($exam_record->getOption('assessment_details'), 'id', $exam_assessment_detail_id); if (! $assessment_detail || ! gv($assessment_detail, 'is_applicable')) { throw ValidationException::withMessages(['message' => trans('general.invalid_input')]); } $max_mark = gv($assessment_detail, 'max_mark'); } else { $exam_assessment_detail = $exam_assessment->details->firstWhere('id', $exam_assessment_detail_id); if (! $exam_assessment_detail) { throw ValidationException::withMessages(['message' => trans('general.invalid_input')]); } $max_mark = $exam_assessment_detail->max_mark; } if ($ob > $max_mark) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.max.numeric', ['attribute' => trans('exam.obtained_mark'), 'max' => formatNumber($max_mark)])]); } } } $student_marks = array(); foreach ($marks as $mark) { $student_record_id = gv($mark, 'id'); if (! in_array($student_record_id, $student_record_ids)) { continue; } $is_absent = gbv($mark, 'is_absent'); $comment = gv($mark, 'comment'); if ($is_absent) { array_push($student_marks, array('id' => $student_record_id, 'is_absent' => true, 'comment' => $comment)); } else { $ob_marks = gv($mark, 'ob_marks'); $assessment_details = array(); foreach ($ob_marks as $idx => $ob_mark) { $exam_assessment_detail_id = gv($ob_mark, 'id'); $ob = formatNumber(gv($ob_mark, 'ob',0)); array_push($assessment_details, array('id' => $exam_assessment_detail_id, 'ob' => $ob, 'is_absent' => false, 'comment' => null)); } array_push($student_marks, array('id' => $student_record_id, 'is_absent' => false, 'assessment_details' => array_values($assessment_details), 'comment' => $comment)); } } $exam_record->marks = $student_marks; $exam_record->save(); return $exam_record; } /** * Store exam observation records * @param array $params * @return void */ public function storeObservation($params = array()) { $data = $this->getStudentsForObservationRecord($params); $student_records = gv($data, 'student_records'); $exam_observation = gv($data, 'exam_observation'); $exam_schedule = gv($data, 'exam_schedule'); if ($exam_schedule->disable_input) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } unset($exam_schedule->disable_input); $observation_marks = gv($params, 'observation_marks'); $student_record_ids = $student_records->pluck('id')->all(); foreach ($observation_marks as $index => $observation_mark) { $student_mark = []; $student_record_id = gv($observation_mark, 'id'); if (! in_array($student_record_id, $student_record_ids)) { continue; } $ob_marks = gv($observation_mark, 'ob_marks'); foreach ($ob_marks as $idx => $ob_mark) { $ob = gv($ob_mark, 'ob', 0); if (! is_numeric($ob)) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.numeric', ['attribute' => trans('exam.obtained_mark')])]); } if ($ob < 0) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.min.numeric', ['attribute' => trans('exam.obtained_mark'), 'min' => 0])]); } $exam_observation_detail_id = gv($ob_mark, 'id'); $exam_observation_detail = $exam_observation->details->firstWhere('id', $exam_observation_detail_id); if (! $exam_observation_detail) { throw ValidationException::withMessages(['message' => trans('general.invalid_input')]); } $max_mark = $exam_observation_detail->max_mark; if ($ob > $max_mark) { throw ValidationException::withMessages([$index.'_'.$idx.'_mark' => trans('validation.max.numeric', ['attribute' => trans('exam.obtained_mark'), 'max' => formatNumber($max_mark)])]); } } } $student_marks = array(); foreach ($observation_marks as $observation_mark) { $student_record_id = gv($observation_mark, 'id'); if (! in_array($student_record_id, $student_record_ids)) { continue; } $comment = gv($observation_mark, 'comment'); $ob_marks = gv($observation_mark, 'ob_marks'); $observation_details = array(); foreach ($ob_marks as $idx => $ob_mark) { $exam_observation_detail_id = gv($ob_mark, 'id'); $ob = formatNumber(gv($ob_mark, 'ob',0)); array_push($observation_details, array('id' => $exam_observation_detail_id, 'ob' => $ob, 'comment' => null)); } array_push($student_marks, array('id' => $student_record_id, 'observation_details' => array_values($observation_details), 'comment' => $comment)); } $exam_schedule->observation_marks = $student_marks; $exam_schedule->save(); return $exam_schedule; } /** * Delete exam record * @param array $params * @return void */ public function deleteRecord($params) { $data = $this->getStudents($params); $exam_record = gv($data, 'exam_record'); if ($exam_record->disable_input) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } unset($exam_record->disable_input); $exam_record->marks = []; $exam_record->save(); } /** * Delete exam record * @param array $params * @return void */ public function deleteObservationRecord($params) { $data = $this->getStudentsForObservationRecord($params); $exam_schedule = gv($data, 'exam_schedule'); if ($exam_schedule->disable_input) { throw ValidationException::withMessages(['message' => trans('user.permission_denied')]); } unset($exam_schedule->disable_input); $exam_schedule->observation_marks = []; $exam_schedule->save(); } }