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; | |
| } | |
| } |