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