Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 15 |
CRAP | |
0.00% |
0 / 376 |
| PacketService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 15 |
4692.00 | |
0.00% |
0 / 376 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getHallListForPacket | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 29 |
|||
| saveAnswersheetPacket | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 26 |
|||
| validateSaveAnswersheetPacketRequest | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 8 |
|||
| generateAnswersheetPackets | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 24 |
|||
| insertAnswersheetPacket | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 16 |
|||
| updateAnswersheetPacket | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 18 |
|||
| deleteAnswersheetPacket | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
| restoreAnswersheetPacket | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
| searchAnswersheetPacket | |
0.00% |
0 / 1 |
156.00 | |
0.00% |
0 / 57 |
|||
| getHallListByAssessmentId | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 38 |
|||
| getAssignedPackets | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 25 |
|||
| getCourseTypeIdByExamRegistrationId | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 36 |
|||
| getThirdValuationAssignedPackets | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 34 |
|||
| getStudentAssignedPackets | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 25 |
|||
| <?php | |
| namespace com\linways\ec\core\service; | |
| use com\linways\base\util\SecurityUtils; | |
| use com\linways\base\util\MakeSingletonTrait; | |
| use com\linways\ec\core\exception\ExamControllerException; | |
| use com\linways\ec\core\exception\ECCoreException; | |
| use com\linways\ec\core\constant\StatusConstants; | |
| use com\linways\ec\core\request\SearchAnswersheetPacketRequest; | |
| use com\linways\ec\core\mapper\PacketServiceMapper; | |
| use com\linways\ec\core\dto\AnswersheetPacket; | |
| class PacketService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| private function __construct() { | |
| $this->mapper = PacketServiceMapper::getInstance()->getMapper(); | |
| } | |
| /** | |
| * Get hall list | |
| * @param $paperSubjectId | |
| * @return Array $blockReasons | |
| */ | |
| public function getHallListForPacket ($paperSubjectId) | |
| { | |
| $paperSubjectId = $this->realEscapeString($paperSubjectId); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| $query = "SELECT | |
| eh.hallID AS id, | |
| eh.hallName AS name, | |
| ehas.studentID AS studentId, | |
| esar.properties | |
| FROM | |
| ec_exam_registration_subject eers | |
| INNER JOIN exam e ON | |
| e.am_assessment_id = eers.am_assessment_id | |
| INNER JOIN exam_hall_arranged_students ehas ON | |
| ehas.examID = e.examID | |
| INNER JOIN exam_halls eh ON | |
| eh.hallID = ehas.hallID | |
| INNER JOIN ec_student_assessment_registration esar ON | |
| esar.student_id = ehas.studentID | |
| AND esar.am_assessment_id = eers.am_assessment_id | |
| WHERE | |
| eers.cm_academic_paper_subjects_id = '$paperSubjectId'"; | |
| try { | |
| $examHalls = $this->executeQueryForList($query, $this->mapper[PacketServiceMapper::EXAM_CHARTED_HALLS]); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::NO_HALLS_FOR_EXAM,"Halls not defines! Please try again."); | |
| } | |
| return $examHalls; | |
| } | |
| /** | |
| * Save answersheet packet | |
| * @param AnswersheetPacket $answersheetPacket | |
| * @return AnswersheetPacket $answersheetPacket | |
| */ | |
| public function saveAnswersheetPacket (AnswersheetPacket $answersheetPacket) | |
| { | |
| $answersheetPacket = $this->realEscapeObject($answersheetPacket); | |
| $answersheetPacket->createdBy = $GLOBALS['userId'] ?? $answersheetPacket->createdBy; | |
| $answersheetPacket->updatedBy = $GLOBALS['userId'] ?? $answersheetPacket->updatedBy; | |
| // $answersheetPacket->identifyingContext = '{ | |
| // "examRegistrationId" : "abcdefg" | |
| // }'; | |
| // $answersheetPacket->type = "EXAM_REGISTRATION"; | |
| try{ | |
| $answersheetPacket = $this->generateAnswersheetPackets($answersheetPacket); | |
| $this->validateSaveAnswersheetPacketRequest($answersheetPacket); | |
| if(!empty($answersheetPacket->id)) | |
| { | |
| $answersheetPacket->id = $this->updateAnswersheetPacket($answersheetPacket); | |
| } | |
| else | |
| { | |
| $answersheetPacket->id = $this->insertAnswersheetPacket($answersheetPacket); | |
| } | |
| }catch(\Exception $e) { | |
| if($e->getCode() !== ECCoreException::INVALID_PARAMETERS && $e->getCode() !== ECCoreException::EMPTY_PARAMETERS && $e->getCode() !== ECCoreException::DUPLICATE_ENTRY) { | |
| throw new ECCoreException(ECCoreException::ERROR_SAVING_GRADE_SCHEME, "Failed to save answersheet packet! Please try again"); | |
| } else if ($e->getCode() === ECCoreException::DUPLICATE_ENTRY) { | |
| throw new ECCoreException (ECCoreException::DUPLICATE_ENTRY, "Cannot create answersheet packet! already exists."); | |
| } else { | |
| throw new ECCoreException ($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| return $answersheetPacket; | |
| } | |
| /** | |
| * Validate Answersheet Packet Request Before Saving | |
| * @param AnswersheetPacket $answersheetPacket | |
| * @return NULL | |
| */ | |
| private function validateSaveAnswersheetPacketRequest($answersheetPacket) | |
| { | |
| if(empty($answersheetPacket->identifyingContext) || empty($answersheetPacket->type)) | |
| throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Answersheet packet is assigned to invalid context. Please retry!"); | |
| if(empty($answersheetPacket->config)) | |
| throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Answersheet packet config is empty! Please configure answersheet packet"); | |
| if(empty($answersheetPacket->packets)) | |
| throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "Answersheet packet list is empty! Please generate packets for answersheet"); | |
| } | |
| /** | |
| * Generate Answersheet Packets | |
| * @param AnswersheetPacket $answersheetPacket | |
| * @return NULL | |
| */ | |
| private function generateAnswersheetPackets($answersheetPacket) | |
| { | |
| if(!empty($answersheetPacket->config->startNo) && !empty($answersheetPacket->config->endNo)){ | |
| foreach (range($answersheetPacket->config->startNo, $answersheetPacket->config->endNo) as $packetNo) { | |
| $packet = new \stdClass(); | |
| $packet->name = $answersheetPacket->config->prefix . $packetNo; | |
| $packet->count = $answersheetPacket->config->countPerPacket; | |
| $packet->isFilled = false; | |
| $packetList[$packet->name] = $packet; | |
| } | |
| if (!empty($answersheetPacket->packets)) { | |
| $newPaketList = array_column($packetList,"name"); | |
| $oldPacketList = array_column(array_filter($answersheetPacket->packets,function($packet){ | |
| return $packet->isFilled; | |
| }),"name"); | |
| if (!empty(array_diff($oldPacketList, $newPaketList))) { | |
| throw new ECCoreException(ECCoreException::ERROR_DELETING_FILLED_PACKETS, "Answersheet packet is filled.Can not delete filled packets!"); | |
| } | |
| } | |
| $packetList = array_values($packetList); | |
| $packetDetailsObj = new \stdClass(); | |
| $packetDetailsObj->packetDetails = $packetList ; | |
| $answersheetPacket->packets = $packetDetailsObj; | |
| } | |
| return $answersheetPacket; | |
| } | |
| /** | |
| * Insert answersheet packet | |
| * @param AnswersheetPacket $answersheetPacket | |
| * @return String $id | |
| */ | |
| private function insertAnswersheetPacket(AnswersheetPacket $answersheetPacket) | |
| { | |
| $config = !empty($answersheetPacket->config) ? "'" . json_encode($answersheetPacket->config) . "'" : "JSON_OBJECT"; | |
| $packets = !empty($answersheetPacket->packets) ? "'" . json_encode($answersheetPacket->packets) . "'" : "JSON_OBJECT"; | |
| $identifyingContext = !empty($answersheetPacket->identifyingContext) ? "'" . json_encode($answersheetPacket->identifyingContext) . "'" : "JSON_OBJECT"; | |
| $id = SecurityUtils::getRandomString(); | |
| $query = "INSERT INTO ec_answersheet_packet | |
| (id,identifying_context,identifying_type,config,packet_list,created_by,updated_by) | |
| VALUES | |
| ('$id',$identifyingContext,'$answersheetPacket->type',$config,$packets,'$answersheetPacket->createdBy','$answersheetPacket->updatedBy')"; | |
| try { | |
| $this->executeQuery($query); | |
| return $id; | |
| } catch (\Exception $e) { | |
| throw new ECCoreException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Update Answersheet Packet | |
| * @param AnswersheetPacket $answersheetPacket | |
| * @return NULL | |
| */ | |
| private function updateAnswersheetPacket(AnswersheetPacket $answersheetPacket) | |
| { | |
| $config = !empty($answersheetPacket->config) ? "'" . json_encode($answersheetPacket->config) . "'" : "JSON_OBJECT"; | |
| $packets = !empty($answersheetPacket->packets) ? "'" . json_encode($answersheetPacket->packets) . "'" : "JSON_OBJECT"; | |
| $query = "UPDATE | |
| ec_answersheet_packet | |
| SET | |
| config = $config, | |
| packet_list = $packets, | |
| updated_by = '$answersheetPacket->updatedBy' | |
| WHERE | |
| id = '$answersheetPacket->id'"; | |
| try { | |
| $this->executeQuery($query); | |
| return $answersheetPacket->id; | |
| } catch (\Exception $e) { | |
| throw new ECCoreException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Delete Answersheet Packet (Soft Delete) | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function deleteAnswersheetPacket($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['userId']; | |
| if(empty($id)) { | |
| throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS, "No answersheet packet selected! Please select a answersheetPacket to delete"); | |
| } | |
| //TODO: Do validation before deleting | |
| $query = "UPDATE | |
| ec_answersheet_packet | |
| SET | |
| trashed = UTC_TIMESTAMP(), | |
| updated_by = '$updatedBy' | |
| WHERE | |
| id = '$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ECCoreException(ECCoreException::ERROR_DELETING_GRADE_SCHEME, "Error deleting answersheet packet! Please try again"); | |
| } | |
| } | |
| /** | |
| * Restore Answersheet Packet | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function restoreAnswersheetPacket($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['userId']; | |
| if(empty($id)) { | |
| throw new ECCoreException(ECCoreException::EMPTY_PARAMETERS,"No answersheet packet selected! Please select a answersheetPacket to restore"); | |
| } | |
| $query = "UPDATE | |
| ec_answersheet_packet | |
| SET | |
| trashed = NULL, | |
| updated_by = '$updatedBy' | |
| WHERE | |
| id = '$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ECCoreException(ECCoreException::ERROR_RESTORING_GRADE_SCHEME,"Error restoring answersheet packet! Please try again"); | |
| } | |
| } | |
| /** | |
| * Search Answersheet Packet Details | |
| * @param SearchAnswersheetPacketRequest $request | |
| * @return AnswersheetPacket | |
| */ | |
| public function searchAnswersheetPacket(SearchAnswersheetPacketRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| $answersheetPacketServiceMapper = PacketServiceMapper::SEARCH_ASWERSHEET_PACKETS; | |
| if($request->trashed === StatusConstants::ACTIVE) { | |
| $whereQuery .= " AND eap.trashed IS NULL "; | |
| } | |
| if($request->trashed === StatusConstants::TRASHED) { | |
| $whereQuery .= " AND eap.trashed IS NOT NULL "; | |
| } | |
| if(!empty($request->id)) { | |
| $whereQuery .= " AND eap.id='$request->id' "; | |
| } | |
| if(!empty($request->examRegistrationId)) { | |
| $whereQuery .= " AND eap.identifying_context->>'$.examRegistrationId' = '$request->examRegistrationId' "; | |
| } | |
| if(!empty($request->revaluationType)) { | |
| $whereQuery .= " AND eap.identifying_context->>'$.revaluationType' = '$request->revaluationType' "; | |
| } | |
| if(!empty($request->paperSubjectId)) { | |
| $whereQuery .= " AND eap.identifying_context->>'$.paperSubjectId' = '$request->paperSubjectId' "; | |
| } | |
| if(!empty($request->type)) { | |
| $whereQuery .= " AND eap.identifying_type = '$request->type' "; | |
| } | |
| if($request->startIndex !== "" && $request->endIndex !== "") | |
| { | |
| $limitQuery .= " LIMIT $request->startIndex, $request->endIndex"; | |
| } | |
| $query = "SELECT | |
| eap.id, | |
| eap.identifying_context, | |
| eap.identifying_type, | |
| eap.config, | |
| eap.packet_list, | |
| eap.trashed, | |
| eap.created_by, | |
| eap.created_date, | |
| eap.updated_by, | |
| eap.updated_date | |
| FROM | |
| ec_answersheet_packet eap | |
| WHERE | |
| 1 = 1 | |
| $whereQuery | |
| $limitQuery"; | |
| try { | |
| $answersheetPackets = $this->executeQueryForList($query,$this->mapper[$answersheetPacketServiceMapper]); | |
| } catch (\Exception $e) { | |
| throw new ECCoreException(ECCoreException::ERROR_FETCHING_ANSWERSHEET_PACKETS,"Cannot fetch answersheet packet details! Please try again"); | |
| } | |
| foreach ($answersheetPackets as $packet) { | |
| $packet->packets = array_values((array)$packet->packets); | |
| } | |
| return $answersheetPackets; | |
| } | |
| /** | |
| * Get hall list By assessment Id | |
| * @param $assessmentId | |
| * @return Array $blockReasons | |
| */ | |
| public function getHallListByAssessmentId ($assessmentId){ | |
| $assessmentId = stripslashes($assessmentId); | |
| $examHalls = []; | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| $query = "SELECT | |
| eeh.id AS id, | |
| eeh.name AS name, | |
| ehagas.student_id AS studentId, | |
| ehagah.id AS studentHallId, | |
| esar.properties | |
| FROM | |
| ec_hall_arrangement_group_assigned_student ehagas | |
| INNER JOIN ec_hall_arrangement_group_assigned_hall ehagah ON | |
| ehagah.id = ehagas.ec_hall_arrangement_group_assigned_hall_id AND ehagah.is_locked = '1' | |
| INNER JOIN ec_exam_hall eeh ON | |
| eeh.id = ehagah.ec_exam_hall_id | |
| INNER JOIN ec_student_assessment_registration esar ON | |
| esar.student_id = ehagas.student_id | |
| AND esar.am_assessment_id = ehagas.am_assessment_id | |
| AND esar.properties ->> '$.registrationStatus' = 'REGISTERED' | |
| WHERE | |
| ehagas.am_assessment_id IN ('$assessmentId') | |
| ORDER BY eeh.name ASC"; | |
| try { | |
| $examHallStudents = $this->executeQueryForList($query); | |
| foreach($examHallStudents as $examHallStudent){ | |
| $examHalls[$examHallStudent->id]->id = $examHallStudent->id; | |
| $examHalls[$examHallStudent->id]->name = $examHallStudent->name; | |
| $examHalls[$examHallStudent->id]->students[$examHallStudent->studentId]->id = $examHallStudent->studentId; | |
| $examHalls[$examHallStudent->id]->students[$examHallStudent->studentId]->hallId = $examHallStudent->studentHallId; | |
| $examHalls[$examHallStudent->id]->students[$examHallStudent->studentId]->properties = $examHallStudent->properties ? json_decode($examHallStudent->properties) : new \stdClass(); | |
| } | |
| $examHalls = array_values($examHalls); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::NO_HALLS_FOR_EXAM,"Halls not defines! Please try again."); | |
| } | |
| return $examHalls; | |
| } | |
| /** | |
| * Get assigned packets | |
| * @param $request | |
| * @return Array $packets | |
| */ | |
| public function getAssignedPackets ($request){ | |
| $request = $this->realEscapeObject($request); | |
| $request->assessmentId = stripslashes($request->assessmentId); | |
| if(!empty($request->assessmentId)) { | |
| $whereQuery .= " AND aa.id NOT IN ('$request->assessmentId')"; | |
| } | |
| if(!empty($request->examRegistrationId)) { | |
| $whereQuery .= " AND aa.identifying_context->>'$.examRegistrationId' = '$request->examRegistrationId'"; | |
| } | |
| $query = "SELECT DISTINCT | |
| esar.valuation_details->>'$.packetNo' as packetNo | |
| FROM | |
| ec_student_assessment_registration esar | |
| INNER JOIN studentaccount sa ON | |
| sa.studentID = esar.student_id | |
| INNER JOIN am_assessment aa ON | |
| aa.id = esar.am_assessment_id | |
| WHERE | |
| esar.trashed IS NULL AND esar.valuation_details->>'$.packetNo' IS NOT NULL"; | |
| try { | |
| $packets = $this->executeQueryForList($query.$whereQuery); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch packets! Please try again"); | |
| } | |
| return $packets; | |
| } | |
| /** | |
| * getCourseTypeIdByExamRegistrationId | |
| * @param ExamRegistrationId $examRegistrationId | |
| * @return $courseTypeId | |
| */ | |
| public function getCourseTypeIdByExamRegistrationId($examRegistrationId,$type=null) | |
| { | |
| $examRegistrationId = $this->realEscapeString($examRegistrationId); | |
| $whereQuery = ""; | |
| $joinQuery = ""; | |
| if($type == 'REVALUATION'){ | |
| $joinQuery .=" INNER JOIN ec_exam_registration eerp ON | |
| eerp.id = eerb.ec_exam_registration_id AND | |
| eerp.trashed IS NULL | |
| INNER JOIN ec_exam_registration eer ON | |
| eer.properties->>'$.parentExamRegistrationId' = eerp.id AND | |
| eer.trashed IS NULL "; | |
| $whereQuery .= " AND eer.id = '$examRegistrationId'"; | |
| } | |
| else{ | |
| $whereQuery .= " AND eerb.ec_exam_registration_id = '$examRegistrationId'"; | |
| } | |
| try{ | |
| $query = "SELECT | |
| p.course_type_id as courseTypeId | |
| FROM | |
| ec_exam_registration_batch eerb | |
| $joinQuery | |
| INNER JOIN `groups` g ON | |
| g.id = eerb.groups_id | |
| INNER JOIN program p ON | |
| p.id = g.properties->>'$.programId' | |
| WHERE | |
| 1=1 "; | |
| $courseType = $this->executeQueryForObject($query.$whereQuery); | |
| } | |
| catch (\Exception $e) | |
| { | |
| throw new ExamControllerException($e->getCode(),$e->getMessage()); | |
| } | |
| return $courseType->courseTypeId; | |
| } | |
| /** | |
| * Get assigned packets | |
| * @param $request | |
| * @return Array $packets | |
| */ | |
| public function getThirdValuationAssignedPackets ($request){ | |
| $request = $this->realEscapeObject($request); | |
| $request->assessmentId = stripslashes($request->assessmentId); | |
| if(!empty($request->assessmentId)) { | |
| $whereQuery .= " AND aa.id IN ('$request->assessmentId')"; | |
| } | |
| if(!empty($request->examRegistrationId)) { | |
| $whereQuery .= " AND aa.identifying_context->>'$.examRegistrationId' = '$request->examRegistrationId'"; | |
| } | |
| if($request->type == 'REVALUATION'){ | |
| $joinQuery .= "INNER JOIN ec_revaluation_mark erm2 ON | |
| erm2.student_id = sa.studentID AND erm2.am_assessment_id = esar.am_assessment_id AND erm2.revaluation_type = CAST(esar.identifying_context->>'$.revaluationType'AS CHAR) AND erm2.valuation_count = '2' AND erm2.properties ->> '$.hasEligibleThirdValuation' = '1'"; | |
| } | |
| else{ | |
| $joinQuery = "INNER JOIN externalexam_thirdvalstudents ets ON | |
| ets.studentID = sa.studentID AND ets.am_assessment_id = esar.am_assessment_id"; | |
| } | |
| $query = "SELECT DISTINCT | |
| esar.valuation_details->>'$.packetNo' as packetNo | |
| FROM | |
| ec_student_assessment_registration esar | |
| INNER JOIN studentaccount sa ON | |
| sa.studentID = esar.student_id | |
| INNER JOIN am_assessment aa ON | |
| aa.id = esar.am_assessment_id | |
| $joinQuery | |
| WHERE | |
| esar.trashed IS NULL AND esar.valuation_details->>'$.packetNo' IS NOT NULL"; | |
| try { | |
| $packets = $this->executeQueryForList($query.$whereQuery); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch packets! Please try again"); | |
| } | |
| return $packets; | |
| } | |
| /** | |
| * Get assigned packets | |
| * @param $request | |
| * @return Array $packets | |
| */ | |
| public function getStudentAssignedPackets ($request){ | |
| $request = $this->realEscapeObject($request); | |
| $request->assessmentId = stripslashes($request->assessmentId); | |
| if(!empty($request->assessmentId)) { | |
| $whereQuery .= " AND aa.id IN ('$request->assessmentId')"; | |
| } | |
| if(!empty($request->examRegistrationId)) { | |
| $whereQuery .= " AND aa.identifying_context->>'$.examRegistrationId' = '$request->examRegistrationId'"; | |
| } | |
| $query = "SELECT DISTINCT | |
| esar.valuation_details->>'$.packetNo' as packetNo | |
| FROM | |
| ec_student_assessment_registration esar | |
| INNER JOIN studentaccount sa ON | |
| sa.studentID = esar.student_id | |
| INNER JOIN am_assessment aa ON | |
| aa.id = esar.am_assessment_id | |
| WHERE | |
| esar.trashed IS NULL AND esar.valuation_details->>'$.packetNo' IS NOT NULL"; | |
| try { | |
| $packets = $this->executeQueryForList($query.$whereQuery); | |
| } catch (\Exception $e) { | |
| throw new ExamControllerException(ExamControllerException::ERROR_FETCHING_STUDENT_REGISTRATION,"Cannot fetch packets! Please try again"); | |
| } | |
| return $packets; | |
| } | |
| } |