Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 13 |
CRAP | |
0.00% |
0 / 287 |
StudentSpecializationService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 13 |
4160.00 | |
0.00% |
0 / 287 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
saveSpecialization | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 32 |
|||
validateSaveSpecialization | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 3 |
|||
insertSpecialization | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 11 |
|||
updateSpecialization | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 13 |
|||
deleteSpecialization | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 23 |
|||
getAllSpecialization | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 21 |
|||
getAllSpecializationStudents | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 37 |
|||
getStudentspecialization | |
0.00% |
0 / 1 |
210.00 | |
0.00% |
0 / 44 |
|||
saveStudentSpecialization | |
0.00% |
0 / 1 |
132.00 | |
0.00% |
0 / 20 |
|||
insertStudentSpecialization | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 20 |
|||
deleteStudentSpecialization | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 18 |
|||
getStudentBatchSpecializationByRequest | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 42 |
<?php | |
namespace com\linways\ec\core\service; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\base\util\SecurityUtils; | |
use com\linways\ec\core\constant\StatusConstants; | |
use com\linways\ec\core\exception\ExamControllerException; | |
use com\linways\ec\core\dto\StudentSpecialization; | |
use com\linways\ec\core\logging\Events; | |
use com\linways\ec\core\logging\entities\Staff; | |
use com\linways\core\ams\professional\logging\AMSLogger; | |
use com\linways\ec\core\service\CommonExamService; | |
class StudentSpecializationService extends BaseService | |
{ | |
use MakeSingletonTrait; | |
private function __construct() | |
{ | |
$this->logger = AMSLogger::getLogger('exam-controller-log'); | |
} | |
/** | |
* Save Student specialization | |
* @param StudentSpecialization $specialization | |
* @return $id | |
*/ | |
public function saveSpecialization(StudentSpecialization $specialization){ | |
$specialization = $this->realEscapeObject($specialization); | |
$staffId = $GLOBALS['userId']; | |
try { | |
$this->validateSaveSpecialization($specialization); | |
if (!empty($specialization->id)) { | |
$specialization->id = $this->updateSpecialization($specialization); | |
} else { | |
$specialization->id = $this->insertSpecialization($specialization); | |
} | |
$this->logger->info(Events::EC_SAVE_STUDENT_SPECIALIZATION, [ | |
"staff" => new Staff(["id" => $staffId]), | |
"request" => $specialization, | |
"status" => StatusConstants::SUCCESS | |
]); | |
} catch (\Exception $e) { | |
$this->logger->error(Events::EC_SAVE_STUDENT_SPECIALIZATION, [ | |
"staff" => new Staff(["id" => $staffId]), | |
"request" => $specialization, | |
"errorCode" => $e->getCode(), | |
"errorMessage" => $e->getMessage(), | |
"status" => StatusConstants::FAILED | |
]); | |
if ($e->getCode() !== ExamControllerException::INVALID_PARAMETERS && $e->getCode() !== ExamControllerException::EMPTY_PARAMETERS && $e->getCode() !== "DUPLICATE_ENTRY") { | |
throw new ExamControllerException($e->getCode(), "Failed to save specialization! Please try again"); | |
} else if ($e->getCode() === ExamControllerException::DUPLICATE_ENTRY) { | |
throw new ExamControllerException(ExamControllerException::DUPLICATE_ENTRY, "Cannot create specialization.This specialization already created"); | |
} else { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
} | |
return $specialization->id; | |
} | |
/** | |
* Validate Specialization Before Saving | |
* @param StudentSpecialization $specialization | |
* @return NULL | |
*/ | |
private function validateSaveSpecialization(StudentSpecialization $specialization){ | |
if (empty($specialization->name)) | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS, " specialization name is empty! Please fill name "); | |
} | |
/** | |
* Insert Specialization | |
* @param StudentSpecialization $specialization | |
* @return $id | |
*/ | |
private function insertSpecialization(StudentSpecialization $specialization){ | |
$query = "INSERT INTO specialisation_master | |
(specialisationName) | |
VALUES | |
('$specialization->name')"; | |
try { | |
$specialization->id = $this->executeQuery($query,true)->id; | |
return $specialization->id; | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Update Specialization | |
* @param StudentSpecialization $specialization | |
* @return $specialization->id | |
*/ | |
private function updateSpecialization(StudentSpecialization $specialization){ | |
$query = "UPDATE | |
specialisation_master | |
SET | |
specialisationName = '$specialization->name' | |
WHERE | |
id = '$specialization->id'"; | |
try { | |
$this->executeQuery($query); | |
return $specialization->id; | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Delete specialization | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteSpecialization($id){ | |
$id = $this->realEscapeString($id); | |
$staffId = $GLOBALS['userId']; | |
$specialization = new \stdClass(); | |
$specialization->id = $id; | |
$currentSpecializationDetails = reset($this->getAllSpecialization($specialization)); | |
if(empty($currentSpecializationDetails)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS,"Can't delete ! specialization missing."); | |
} | |
$query = "DELETE FROM | |
specialisation_master | |
WHERE | |
id = '$id'"; | |
try { | |
$this->executeQuery($query); | |
// LOGGING | |
$this->logger->info(Events::EC_DELETE_STUDENT_SPECIALIZATION,[ | |
"staff" => new Staff(["id" => $staffId]), | |
"request" => $currentSpecializationDetails, | |
"status" => StatusConstants::SUCCESS | |
]); | |
}catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::HAVE_RELATION,"Can't delete ! students already assigned !"); | |
} | |
} | |
/** | |
* get Specialization | |
* @param $searchRequest | |
* @return $specializations | |
*/ | |
public function getAllSpecialization($searchRequest){ | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try { | |
$whereQuery = ""; | |
if (!empty($searchRequest->id)) { | |
$specializationIdStr = is_array($searchRequest->id) ? "'" . implode("','", $searchRequest->id) . "'" : "'" . $searchRequest->id . "'"; | |
$whereQuery .= " AND sm.id IN ( $specializationIdStr )"; | |
} | |
$query = "SELECT | |
DISTINCT | |
sm.id as id, | |
sm.specialisationName as name | |
FROM | |
specialisation_master sm | |
WHERE | |
1 = 1 "; | |
$specializations = $this->executeQueryForList($query . $whereQuery); | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
return $specializations; | |
} | |
/** | |
* get All Students for specialization | |
* @param $searchRequest | |
* @return $students | |
*/ | |
public function getAllSpecializationStudents($searchRequest){ | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try { | |
$students = []; | |
if (empty($searchRequest->groupId) || empty($searchRequest->programId) || empty($searchRequest->academicTermId)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS, " Empty parameter. Please choose batch, program and semester"); | |
} | |
$reguestForBatchStudents = new \stdClass(); | |
$reguestForBatchStudents->groupId = $searchRequest->groupId; | |
$reguestForBatchStudents->programId = $searchRequest->programId; | |
$students = CommonExamService::getInstance()->getStudentsDetailsByBatchProgram($reguestForBatchStudents); | |
if(empty($students)){ | |
throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No students found in this batch"); | |
} | |
$reguestForSpecialization = new \stdClass(); | |
$specializations = $this->getAllSpecialization($reguestForSpecialization); | |
if(empty($specializations)){ | |
throw new ExamControllerException(ExamControllerException::NO_DETAILS_FOUND,"No specialization found."); | |
} | |
foreach($students as $student){ | |
$student->isSelected = false; | |
$student->academicTermId = $searchRequest->academicTermId; | |
$reguestForStudentSpecialization = new \stdClass(); | |
$reguestForStudentSpecialization->studentId = $student->id; | |
$reguestForStudentSpecialization->groupId = $student->groupId; | |
$reguestForStudentSpecialization->programId = $student->programId; | |
$reguestForStudentSpecialization->academicTermId = $searchRequest->academicTermId; | |
$specialization = $this->getStudentspecialization($reguestForStudentSpecialization); | |
$student->specializationId = $specialization->id; | |
$student->specializationName = $specialization->name; | |
$student->specializationMapId = $specialization->specializationMapId; | |
$student->isAlreadyAssigned = $student->specializationId ? true : false; | |
} | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
return $students; | |
} | |
/** | |
* get Student Specialization | |
* @param $searchRequest | |
* @return $specializations | |
*/ | |
public function getStudentspecialization($searchRequest){ | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try { | |
$whereQuery = ""; | |
if (!empty($searchRequest->specialisationId)) { | |
$specializationIdStr = is_array($searchRequest->specialisationId) ? "'" . implode("','", $searchRequest->specialisationId) . "'" : "'" . $searchRequest->specialisationId . "'"; | |
$whereQuery .= " AND essm.specialisation_id IN ( $specializationIdStr )"; | |
} | |
if (!empty($searchRequest->studentId)) { | |
$studentIdStr = is_array($searchRequest->studentId) ? "'" . implode("','", $searchRequest->studentId) . "'" : "'" . $searchRequest->studentId . "'"; | |
$whereQuery .= " AND essm.student_id IN ( $studentIdStr )"; | |
} | |
if (!empty($searchRequest->groupId)) { | |
$groupIdStr = is_array($searchRequest->groupId) ? "'" . implode("','", $searchRequest->groupId) . "'" : "'" . $searchRequest->groupId . "'"; | |
$whereQuery .= " AND essm.groups_id IN ( $groupIdStr )"; | |
} | |
if (!empty($searchRequest->programId)) { | |
$programIdStr = is_array($searchRequest->programId) ? "'" . implode("','", $searchRequest->programId) . "'" : "'" . $searchRequest->programId . "'"; | |
$whereQuery .= " AND essm.program_id IN ( $programIdStr )"; | |
} | |
if (!empty($searchRequest->academicTermId)) { | |
$academicTermIdStr = is_array($searchRequest->academicTermId) ? "'" . implode("','", $searchRequest->academicTermId) . "'" : "'" . $searchRequest->academicTermId . "'"; | |
$whereQuery .= " AND essm.academic_term_id IN ( $academicTermIdStr )"; | |
} | |
if (!empty($searchRequest->id)) { | |
$specializationMapIdStr = is_array($searchRequest->id) ? "'" . implode("','", $searchRequest->id) . "'" : "'" . $searchRequest->id . "'"; | |
$whereQuery .= " AND essm.id IN ( $specializationMapIdStr )"; | |
} | |
$query = "SELECT | |
DISTINCT | |
essm.id as specializationMapId, | |
essm.specialisation_id as id, | |
sm.specialisationName as name | |
FROM | |
ec_student_specialization_maping essm | |
LEFT JOIN specialisation_master sm ON | |
sm.id = essm.specialisation_id | |
WHERE | |
1 = 1 "; | |
$specializations = $this->executeQueryForObject($query . $whereQuery); | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
return $specializations; | |
} | |
/** | |
* Save Student specialization Maping | |
* @param $saveStudentSpecialization | |
* @return $id | |
*/ | |
public function saveStudentSpecialization($saveStudentSpecialization){ | |
$saveStudentSpecialization = $this->realEscapeObject($saveStudentSpecialization); | |
$staffId = $GLOBALS['userId']; | |
$saveStudentSpecialization->createdBy = $staffId; | |
$saveStudentSpecialization->updatedBy = $staffId; | |
try { | |
if (empty($saveStudentSpecialization->groupId) || empty($saveStudentSpecialization->programId) || empty($saveStudentSpecialization->academicTermId) || empty($saveStudentSpecialization->studentId) || empty($saveStudentSpecialization->specializationId)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS, " Empty parameter! error saving"); | |
} | |
$saveStudentSpecialization->id = $this->insertStudentSpecialization($saveStudentSpecialization); | |
} catch (\Exception $e) { | |
if ($e->getCode() !== ExamControllerException::INVALID_PARAMETERS && $e->getCode() !== ExamControllerException::EMPTY_PARAMETERS && $e->getCode() !== "DUPLICATE_ENTRY") { | |
throw new ExamControllerException($e->getCode(), "Failed to save student specialization! Please try again"); | |
} else if ($e->getCode() === ExamControllerException::DUPLICATE_ENTRY) { | |
throw new ExamControllerException(ExamControllerException::DUPLICATE_ENTRY, "Cannot create specialization.This specialization already created"); | |
} else { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
} | |
return $saveStudentSpecialization->id; | |
} | |
/** | |
* Insert Student Specialization maping | |
* @param $saveStudentSpecialization | |
* @return $id | |
*/ | |
private function insertStudentSpecialization($saveStudentSpecialization){ | |
$query = "INSERT INTO | |
ec_student_specialization_maping | |
(student_id, | |
specialisation_id, | |
groups_id, | |
academic_term_id, | |
program_id, | |
created_by, | |
created_date) | |
VALUES ('$saveStudentSpecialization->studentId','$saveStudentSpecialization->specializationId', | |
'$saveStudentSpecialization->groupId','$saveStudentSpecialization->academicTermId', | |
'$saveStudentSpecialization->programId','$saveStudentSpecialization->createdBy',now()) | |
ON DUPLICATE KEY UPDATE specialisation_id = VALUES(specialisation_id),updated_by = VALUES(created_by)"; | |
try { | |
$saveStudentSpecialization->id = $this->executeQuery($query,true)->id; | |
return $saveStudentSpecialization->id; | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Delete student specialization maping | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteStudentSpecialization($id){ | |
$id = $this->realEscapeString($id); | |
$staffId = $GLOBALS['userId']; | |
$specialization = new \stdClass(); | |
$specialization->id = $id; | |
$currentSpecializationDetails = $this->getStudentspecialization($specialization); | |
if(empty($currentSpecializationDetails)){ | |
throw new ExamControllerException(ExamControllerException::EMPTY_PARAMETERS,"Can't delete ! specialization missing."); | |
} | |
$query = "DELETE FROM | |
ec_student_specialization_maping | |
WHERE | |
id = '$id'"; | |
try { | |
$this->executeQuery($query); | |
}catch (\Exception $e) { | |
throw new ExamControllerException(ExamControllerException::HAVE_RELATION,"Can't delete ! students already assigned !"); | |
} | |
} | |
/** | |
* get Student Specialization of a batch | |
* @param $searchRequest | |
* @return $specializations | |
*/ | |
public function getStudentBatchSpecializationByRequest($searchRequest){ | |
$searchRequest = $this->realEscapeObject($searchRequest); | |
try { | |
$whereQuery = ""; | |
if (!empty($searchRequest->groupId)) { | |
$groupIdStr = is_array($searchRequest->groupId) ? "'" . implode("','", $searchRequest->groupId) . "'" : "'" . $searchRequest->groupId . "'"; | |
$whereQuery .= " AND g.id IN ( $groupIdStr )"; | |
} | |
$groupBy = ' GROUP BY spa.id, sm.id'; | |
$orderBy = " ORDER BY spa.properties ->> '$.registerNumber' ASC"; | |
$query = "SELECT | |
s.studentID as id, | |
g.id AS groupId, | |
g.name AS groupName, | |
g.properties ->>'$.programId' AS programId, | |
spa.student_id AS studentId, | |
spa.properties->>'$.rollNumber' AS studentRollNo, | |
IF(IFNULL(spa.properties ->> '$.registerNumber', 'null') = 'null','',spa.properties ->> '$.registerNumber') AS studentRegisterNo, | |
s.studentName AS studentName, | |
s.studentPhone, | |
sm.specialisationName AS specialisation | |
FROM | |
studentaccount s | |
INNER JOIN student_program_account spa | |
ON spa.student_id = s.studentID | |
INNER JOIN student_program_batch_log spbl | |
ON spbl.program_student_id = spa.id AND spbl.properties->>'$.academicStatus' IN ('ACTIVE','COMPLETED') | |
INNER JOIN `groups` g | |
ON g.id = spbl.batch_group_id | |
INNER JOIN group_members gm ON | |
gm.groups_id = g.id AND | |
gm.members->>'$.studentId' = spa.id | |
LEFT JOIN ec_student_specialization_maping essm ON | |
essm.student_id = s.studentID | |
LEFT JOIN specialisation_master sm ON | |
sm.id = essm.specialisation_id | |
WHERE 1=1 AND spa.academic_status IN ('ACTIVE', 'COMPLETED')"; | |
$specializations = $this->executeQueryForList($query . $whereQuery. $groupBy. $orderBy); | |
} catch (\Exception $e) { | |
throw new ExamControllerException($e->getCode(), $e->getMessage()); | |
} | |
return $specializations; | |
} | |
} |