Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
CRAP | |
0.00% |
0 / 215 |
GradeSchemeService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 9 |
1332.00 | |
0.00% |
0 / 215 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
saveGradeScheme | |
0.00% |
0 / 1 |
72.00 | |
0.00% |
0 / 28 |
|||
validateSaveGradeSchemeRequest | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
insertGradeScheme | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 19 |
|||
updateGradeScheme | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 22 |
|||
deleteGradeScheme | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 24 |
|||
restoreGradeScheme | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 24 |
|||
searchGradeScheme | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 56 |
|||
getGradeSchemeDetails | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 35 |
<?php | |
namespace com\linways\core\ams\professional\service\academic; | |
use com\linways\base\util\SecurityUtils; | |
use com\linways\base\util\MakeSingletonTrait; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\mapper\academic\GradeSchemeServiceMapper; | |
use com\linways\core\ams\professional\request\academic\SearchGradeSchemeRequest; | |
use com\linways\core\ams\professional\constant\academic\StatusConstants; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\dto\api\GradeScheme; | |
use com\linways\core\ams\professional\logging\AMSLogger; | |
use com\linways\core\ams\professional\logging\entities\GradeSchemeEntity; | |
class GradeSchemeService extends BaseService | |
{ | |
use MakeSingletonTrait; | |
private function __construct() { | |
$this->mapper = GradeSchemeServiceMapper::getInstance()->getMapper(); | |
$this->logger = AMSLogger::getLogger(); | |
} | |
/** | |
* Save gradeScheme | |
* @param GradeScheme $gradeScheme | |
* @return GradeScheme $gradeScheme | |
*/ | |
public function saveGradeScheme (GradeScheme $gradeScheme) | |
{ | |
$gradeScheme = $this->realEscapeObject($gradeScheme); | |
$gradeScheme->createdBy = $GLOBALS['userId'] ?? $gradeScheme->createdBy; | |
$gradeScheme->updatedBy = $GLOBALS['userId'] ?? $gradeScheme->updatedBy; | |
try{ | |
$this->validateSaveGradeSchemeRequest($gradeScheme); | |
if(!empty($gradeScheme->id)) | |
{ | |
$gradeScheme->id = $this->updateGradeScheme($gradeScheme); | |
} | |
else | |
{ | |
$gradeScheme->id = $this->insertGradeScheme($gradeScheme); | |
} | |
if(!empty($gradeScheme->grades)){ | |
GradeService::getInstance()->saveGrades($gradeScheme->grades); | |
} | |
}catch(\Exception $e) { | |
if($e->getCode() !== ProfessionalException::INVALID_PARAMETERS && $e->getCode() !== ProfessionalException::EMPTY_PARAMETERS && $e->getCode() !== ProfessionalException::DUPLICATE_ENTRY) { | |
throw new ProfessionalException($e->getCode(), "Failed to save grade scheme! Please try again"); | |
} else if ($e->getCode() === ProfessionalException::DUPLICATE_ENTRY) { | |
throw new ProfessionalException (ProfessionalException::DUPLICATE_ENTRY, "Cannot create grade scheme.".$gradeScheme->name." already exists!"); | |
} else { | |
throw new ProfessionalException ($e->getCode(), $e->getMessage()); | |
} | |
} | |
return $gradeScheme; | |
} | |
/** | |
* Validate GradeScheme Request Before Saving | |
* @param GradeScheme $gradeScheme | |
* @return NULL | |
*/ | |
private function validateSaveGradeSchemeRequest($gradeScheme) | |
{ | |
if(empty($gradeScheme->name)) | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS, "Grade scheme name is empty! Please enter a name for grade scheme"); | |
} | |
/** | |
* Insert gradeScheme | |
* @param GradeScheme $gradeScheme | |
* @return String $id | |
*/ | |
private function insertGradeScheme(GradeScheme $gradeScheme) | |
{ | |
$properties = !empty($gradeScheme->properties) ? "'" . json_encode($gradeScheme->properties) . "'" : "JSON_OBJECT"; | |
$id = SecurityUtils::getRandomString(); | |
$query = "INSERT INTO `grade_scheme` | |
(`id`,`name`,`properties`,`created_by`,`updated_by`) | |
VALUES | |
('$id','$gradeScheme->name','$gradeScheme->type',$properties,'$gradeScheme->createdBy','$gradeScheme->updatedBy')"; | |
try { | |
$this->executeQuery($query); | |
$this->logger->info(Events::GRADE_SCHEME_CREATION,[ | |
"grade_scheme" => new GradeSchemeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
return $id; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Update GradeScheme | |
* @param GradeScheme $gradeScheme | |
* @return NULL | |
*/ | |
private function updateGradeScheme(GradeScheme $gradeScheme) | |
{ | |
$properties = !empty($gradeScheme->properties) ? "'" . json_encode($gradeScheme->properties) . "'" : "JSON_OBJECT"; | |
$query = "UPDATE | |
`grade_scheme` | |
SET | |
`name` = '$gradeScheme->name', | |
`properties` = $properties, | |
`updated_by` = '$gradeScheme->updatedBy' | |
WHERE | |
`id` = '$gradeScheme->id'"; | |
try { | |
$this->executeQuery($query); | |
$this->logger->info(Events::GRADE_SCHEME_UPDATING,[ | |
"grade_scheme" => new GradeSchemeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
return $gradeScheme->id; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Delete GradeScheme (Soft Delete) | |
* @param String $id | |
* @return NULL | |
*/ | |
public function deleteGradeScheme($id) | |
{ | |
$id = $this->realEscapeString($id); | |
$updatedBy = $GLOBALS['userId']; | |
if(empty($id)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS, "No grade scheme selected! Please select a gradeScheme to delete"); | |
} | |
//TODO: Do validation before deleting | |
$query = "UPDATE | |
`grade_scheme` | |
SET | |
`trashed` = UTC_TIMESTAMP(), | |
`updated_by` = '$updatedBy' | |
WHERE | |
`id` = '$id'"; | |
try { | |
$this->executeQuery($query); | |
$this->logger->info(Events::GRADE_SCHEME_DELETION,[ | |
"grade_scheme" => new GradeSchemeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), "Error deleting grade scheme! Please try again"); | |
} | |
} | |
/** | |
* Restore GradeScheme | |
* @param String $id | |
* @return NULL | |
*/ | |
public function restoreGradeScheme($id) | |
{ | |
$id = $this->realEscapeString($id); | |
$updatedBy = $GLOBALS['userId']; | |
if(empty($id)) { | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"No grade scheme selected! Please select a gradeScheme to restore"); | |
} | |
$query = "UPDATE | |
`grade_scheme` | |
SET | |
`trashed` = NULL, | |
`updated_by` = '$updatedBy' | |
WHERE | |
`id` = '$id'"; | |
try { | |
$this->executeQuery($query); | |
$this->logger->info(Events::GRADE_SCHEME_RESTORED,[ | |
"grade_scheme" => new GradeSchemeEntity(["id" => $id]), | |
"status" => StatusConstants::SUCCESS, | |
"updated_by" => $updatedBy, | |
]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Error restoring grade scheme! Please try again"); | |
} | |
} | |
/** | |
* Search GradeScheme Details | |
* @param SearchGradeSchemeRequest $request | |
* @return GradeScheme | |
*/ | |
public function searchGradeScheme(SearchGradeSchemeRequest $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$whereQuery = ""; | |
$limitQuery = ""; | |
$columnQuery = ""; | |
$joinQuery = ""; | |
$gradeSchemeServiceMapper = GradeSchemeServiceMapper::SEARCH_GRADE_SCHEME; | |
if($request->trashed === StatusConstants::ACTIVE) { | |
$whereQuery .= " AND gs.trashed IS NULL "; | |
} | |
if($request->trashed === StatusConstants::TRASHED) { | |
$whereQuery .= " AND gs.trashed IS NOT NULL "; | |
} | |
if(!empty($request->id)) { | |
$whereQuery .= " AND gs.id='$request->id' "; | |
} | |
if(!empty($request->name)) { | |
$whereQuery .= " AND gs.name LIKE '%$request->name%' "; | |
} | |
if($request->includeGrade) { | |
$gradeSchemeServiceMapper = GradeSchemeServiceMapper::SEARCH_GRADE_SCHEME_WITH_GRADE; | |
$joinQuery = " INNER JOIN `grade` g ON g.grade_scheme_id = gs.id "; | |
$columnQuery = " , g.id AS `gradeId`,g.range_from ,g.range_to, g.name AS `gradeName`, g.properties AS `gradeProperties`, NULL AS `gradeTrashed` "; | |
} | |
if($request->startIndex !== "" && $request->endIndex !== "") | |
{ | |
$limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
} | |
$query = "SELECT | |
gs.id, | |
gs.name, | |
gs.properties, | |
gs.trashed, | |
gs.subject_grade_schema, | |
gs.semester_grade_schema, | |
gs.cgpa_grade_schema, | |
gs.syllabus_grade_schema, | |
gs.created_by, | |
gs.created_date, | |
gs.updated_by, | |
gs.updated_date | |
$columnQuery | |
FROM | |
grade_scheme gs | |
$joinQuery | |
WHERE | |
1 = 1 | |
$whereQuery | |
$limitQuery"; | |
try { | |
$gradeSchemes = $this->executeQueryForList($query,$this->mapper[$gradeSchemeServiceMapper]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Cannot fetch grade scheme details! Please try again"); | |
} | |
return $gradeSchemes; | |
} | |
/** | |
* get Grade Scheme by id | |
* @param String $id | |
* @param Boolean $request | |
* @return GradeScheme | |
*/ | |
public function getGradeSchemeDetails($id, $includeGrade = false) | |
{ | |
$id = $this->realEscapeString($id); | |
$request = $this->realEscapeObject($request); | |
$columnQuery = ""; | |
$joinQuery = ""; | |
$gradeSchemeServiceMapper = GradeSchemeServiceMapper::SEARCH_GRADE_SCHEME; | |
if(empty($id)) | |
throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Grade scheme is invalid! Please enter a valid program"); | |
if($includeGrade) { | |
$gradeSchemeServiceMapper = GradeSchemeServiceMapper::SEARCH_GRADE_SCHEME_WITH_GRADE; | |
$joinQuery = " INNER JOIN `grade` g ON g.grade_scheme_id = gs.id "; | |
$columnQuery = " , g.id AS `gradeId`,g.range_from ,g.range_to, g.name AS `gradeName`, g.properties AS `gradeProperties`, NULL AS `gradeTrashed` "; | |
} | |
$query = "SELECT | |
gs.id, | |
gs.name, | |
gs.properties, | |
gs.trashed, | |
gs.created_by, | |
gs.created_date, | |
gs.updated_by, | |
gs.updated_date | |
$columnQuery | |
FROM | |
`grade_scheme` gs | |
$joinQuery | |
WHERE | |
`id` = $id"; | |
try { | |
$gradeScheme = $this->executeQueryForObject($query, $this->mapper[$gradeSchemeServiceMapper]); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(),"Cannot fetch grade scheme details! Please try again"); | |
} | |
return $gradeScheme; | |
} | |
} |