Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
CRAP | |
0.00% |
0 / 187 |
| DegreeService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 12 |
1260.00 | |
0.00% |
0 / 187 |
| __construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| saveDegree | |
0.00% |
0 / 1 |
56.00 | |
0.00% |
0 / 25 |
|||
| validateSaveDegreeRequest | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
| insertDegree | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 13 |
|||
| updateDegree | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 16 |
|||
| deleteDegree | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 17 |
|||
| restoreDegree | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 17 |
|||
| searchDegree | |
0.00% |
0 / 1 |
90.00 | |
0.00% |
0 / 44 |
|||
| getDegreeDetails | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 25 |
|||
| deleteDegreePermanently | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 14 |
|||
| validateBeforeDelete | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 7 |
|||
| haveId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 3 |
|||
| <?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\exception\ProfessionalException; | |
| use com\linways\core\ams\professional\mapper\academic\DegreeServiceMapper; | |
| use com\linways\core\ams\professional\request\academic\SearchDegreeRequest; | |
| use com\linways\core\ams\professional\constant\academic\StatusConstants; | |
| use com\linways\core\ams\professional\dto\api\Degree; | |
| use com\linways\core\ams\professional\request\academic\SearchProgramRequest; | |
| use com\linways\core\ams\professional\service\CourseTypeService; | |
| use stdClass; | |
| class DegreeService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| public function __construct() { | |
| $this->mapper = DegreeServiceMapper::getInstance()->getMapper(); | |
| } | |
| /** | |
| * Save degree | |
| * @param Degree $degree | |
| * @return String $id | |
| */ | |
| public function saveDegree (Degree $degree) | |
| { | |
| $degree = $this->realEscapeObject($degree); | |
| $degree->createdBy = $GLOBALS['userId'] ?? $degree->createdBy; | |
| $degree->updatedBy = $GLOBALS['userId'] ?? $degree->updatedBy; | |
| try{ | |
| $this->validateSaveDegreeRequest($degree); | |
| if(!empty($degree->id)) | |
| { | |
| $degree->id = $this->updateDegree($degree); | |
| } | |
| else | |
| { | |
| $degree->id = $this->insertDegree($degree); | |
| } | |
| }catch(\Exception $e) { | |
| if($e->getCode() !== ProfessionalException::INVALID_PARAMETER && $e->getCode() !== ProfessionalException::EMPTY_PARAMETERS && $e->getCode() !== ProfessionalException::DUPLICATE_ENTRY) { | |
| throw new ProfessionalException($e->getCode(),"Failed to save Degree! Please try again"); | |
| } else if ($e->getCode() === ProfessionalException::DUPLICATE_ENTRY) { | |
| throw new ProfessionalException (ProfessionalException::DUPLICATE_ENTRY,"Cannot create degree.$degree->name already exists!"); | |
| } else { | |
| throw new ProfessionalException ($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| return $degree->id; | |
| } | |
| /** | |
| * Validate Degree Request Before Saving | |
| * @param Degree $degree | |
| * @return NULL | |
| */ | |
| private function validateSaveDegreeRequest(Degree $degree) | |
| { | |
| if(empty($degree->name)) | |
| throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Degree name is empty! Please enter a name for degree"); | |
| } | |
| /** | |
| * Insert Degree | |
| * @param Degree $degree | |
| * @return String $id | |
| */ | |
| private function insertDegree(Degree $degree) | |
| { | |
| /**TODO: After implimenting properties to degree table */ | |
| // $properties = !empty($degree->properties) ? "'" . json_encode($degree->properties) . "'" : "NULL"; | |
| $id = SecurityUtils::getRandomString(); | |
| $query = "INSERT INTO `degree` | |
| (`id`,`name`,`description`,`created_by`,`updated_by`) | |
| VALUES | |
| ('$id','$degree->name','$degree->description','$degree->createdBy','$degree->updatedBy')"; | |
| try { | |
| $this->executeQuery($query); | |
| return $id; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Update Degree | |
| * @param Degree $degree | |
| * @return NULL | |
| */ | |
| private function updateDegree(Degree $degree) | |
| { | |
| // $properties = !empty($degree->properties) ? "'".json_encode($degree->properties)."'" : "NULL"; | |
| $query = "UPDATE | |
| `degree` | |
| SET | |
| `name` = '$degree->name', | |
| `description` = '$degree->description', | |
| `updated_by` = '$degree->updatedBy' | |
| WHERE | |
| `id` = '$degree->id'"; | |
| try { | |
| $this->executeQuery($query); | |
| return $degree->id; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(),$e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Delete Degree (Soft Delete) | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function deleteDegree($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['adminId']; | |
| $this->haveId($id); | |
| $query = "UPDATE | |
| `degree` | |
| SET | |
| `trashed` = UTC_TIMESTAMP(), | |
| `updated_by` = '$updatedBy' | |
| WHERE | |
| `id` = '$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException(ProfessionalException::ERROR_DELETING,"Error deleting degree! Please try again"); | |
| } | |
| } | |
| /** | |
| * Restore Degree | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function restoreDegree($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $updatedBy = $GLOBALS['userId']; | |
| $this->haveId($id); | |
| $query = "UPDATE | |
| `degree` | |
| SET | |
| `trashed` = NULL, | |
| `updated_by` = '$updatedBy' | |
| WHERE | |
| `id` = '$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException(ProfessionalException::ERROR_RESTORING,"Error restoring academic term! Please try again"); | |
| } | |
| } | |
| /** | |
| * Search Academic term Details | |
| * @param SearchDegreeRequest $request | |
| * @return Degree | |
| */ | |
| public function searchDegree(SearchDegreeRequest $request) | |
| { | |
| $request = $this->realEscapeObject($request); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| if(!empty($request->id)) { | |
| $whereQuery .= " AND d.id='$request->id' "; | |
| } | |
| if($request->trashed === StatusConstants::ACTIVE) { | |
| $whereQuery .= " AND d.trashed IS NULL "; | |
| } | |
| if($request->trashed === StatusConstants::TRASHED) { | |
| $whereQuery .= " AND d.trashed IS NOT NULL "; | |
| } | |
| if(!empty($request->name)) { | |
| $whereQuery .= " AND d.name LIKE '%$request->name%' "; | |
| } | |
| if(!empty($request->description)) { | |
| $whereQuery .= " AND d.description LIKE '%$request->description%' "; | |
| } | |
| if($request->startIndex !== "" && $request->endIndex !== "") | |
| { | |
| $limitQuery .= " LIMIT $request->startIndex,$request->endIndex"; | |
| } | |
| $orderBy = " ORDER BY d.created_date DESC "; | |
| $query = "SELECT | |
| d.id, | |
| d.name, | |
| d.description, | |
| d.trashed, | |
| d.created_by, | |
| d.created_date, | |
| d.updated_by, | |
| d.updated_date | |
| FROM | |
| degree d | |
| WHERE | |
| 1 = 1"; | |
| try { | |
| $degrees = $this->executeQueryForList($query.$whereQuery.$orderBy.$limitQuery, $this->mapper[DegreeServiceMapper::SEARCH_DEGREES]); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch degree details! Please try again."); | |
| } | |
| return $degrees; | |
| } | |
| /** | |
| * get Academic term by id | |
| * @param String $id | |
| * @return Degree | |
| */ | |
| public function getDegreeDetails($id) | |
| { | |
| $id = $this->realEscapeObject($id); | |
| $whereQuery = ""; | |
| $limitQuery = ""; | |
| $this->haveId($id); | |
| $query = "SELECT | |
| d.id, | |
| d.name, | |
| d.description, | |
| d.trashed, | |
| d.created_by, | |
| d.created_date, | |
| d.updated_by, | |
| d.updated_date | |
| FROM | |
| `degree` d | |
| WHERE | |
| d.id = '$id'"; | |
| try { | |
| $degree = $this->executeQueryForObject($query,$isReturnKey = false,$this->mapper[DegreeServiceMapper::SEARCH_DEGREES]); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch degree details! Please try again"); | |
| } | |
| return $degree; | |
| } | |
| /** | |
| * Delete Degree (Soft Delete) | |
| * @param String $id | |
| * @return NULL | |
| */ | |
| public function deleteDegreePermanently($id) | |
| { | |
| $id = $this->realEscapeString($id); | |
| $this->haveId($id); | |
| $this->validateBeforeDelete($id); | |
| $request = new stdClass; | |
| $request->degreeId = $id; | |
| CourseTypeService::getInstance()->deleteCoursePattern($request); | |
| $query = "DELETE FROM degree WHERE id = '$id'"; | |
| try { | |
| $this->executeQuery($query); | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException(ProfessionalException::ERROR_DELETING,"Error deleting degree! Please try again"); | |
| } | |
| } | |
| /** | |
| * validate degree before deleting | |
| * @param CourseTypeId | |
| * @throw AcademicException | |
| */ | |
| public function validateBeforeDelete($id){ | |
| $request = new SearchProgramRequest(); | |
| $request->degreeIds [] = $id; | |
| $programs = ProgramService::getInstance()->searchProgram($request); | |
| if(count($programs)){ | |
| throw new ProfessionalException(ProfessionalException::HAVE_RELATIONS,"Cannot delete course type! Please try again."); | |
| } | |
| } | |
| public function haveId($id){ | |
| if(empty($id)) | |
| throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Degree is invalid! Please enter a valid degree"); | |
| } | |
| } |