Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 140 |
CurriculumManageService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
1190.00 | |
0.00% |
0 / 140 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 3 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
getPossibleSchemaDetails | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 8 |
|||
getSchemaDetails | |
0.00% |
0 / 1 |
812.00 | |
0.00% |
0 / 122 |
<?php | |
namespace com\linways\core\ams\professional\service; | |
use com\linways\core\ams\professional\constant\GradeSchemaTypes; | |
use com\linways\core\ams\professional\dto\GradeSchemaBasedOnType; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\mapper\CurriculumManageServiceMapper; | |
/** | |
* | |
* @Date 25/02/21 | |
*/ | |
class CurriculumManageService extends BaseService | |
{ | |
private $mapper = []; | |
private $logger = null; | |
/** | |
* Presence of a static member variable | |
* | |
* @var null | |
*/ | |
private static $_instance = null; | |
/** | |
* Locked down the constructor or Prevent any outside instantiation of this class | |
* | |
* PermissionService constructor. | |
*/ | |
private function __construct() | |
{ | |
$this->mapper = CurriculumManageServiceMapper::getInstance()->getMapper(); | |
} | |
/** | |
* Prevent any object or instance of that class to be cloned | |
*/ | |
private function __clone() | |
{ | |
} | |
/** | |
* Have a single globally accessible static method | |
* | |
* @return CurriculumManageService|null | |
*/ | |
public static function getInstance() | |
{ | |
if (!is_object(self::$_instance)) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
/** | |
* returns theme configurations | |
* | |
* @throws ProfessionalException | |
*/ | |
public function getPossibleSchemaDetails(GradeSchemaBasedOnType $request) | |
{ | |
try { | |
$gradSchema = $this->getSchemaDetails($request); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $gradSchema; | |
} | |
public function getSchemaDetails(GradeSchemaBasedOnType $request) | |
{ | |
$request = $this->realEscapeObject($request); | |
$requestedGradeSchema = $request->type; | |
switch ($request->type) { | |
case GradeSchemaTypes::ACADEMIC_PAPER_SUBJECT: | |
$joinGradeSchemeColumn = " caps.properties->>'$.gradeSchemeId' "; | |
$columnNames = " caps.id"; | |
break; | |
case GradeSchemaTypes::SYLLABUS_ACADEMIC_TERM: | |
$joinGradeSchemeColumn = " vm.properties->>'$.semesterGradeSchema' "; | |
$columnNames = " csats.academic_term_id"; | |
break; | |
case GradeSchemaTypes::SYLLABUS: | |
$joinGradeSchemeColumn = " vm.properties->>'$.syllabusGradeSchema' "; | |
$columnNames = " cs.id"; | |
break; | |
case GradeSchemaTypes::CURRICULUM: | |
$joinGradeSchemeColumn = " vm.properties->>'$.cgpaGradeSchema' "; | |
$columnNames = " cc.id"; | |
break; | |
} | |
$type = $request->type; | |
$gradeSchemes = null; | |
$gradeSchemesList =[]; | |
$requestIdList = $request->ids; | |
try { | |
do { | |
if(count(array_filter($requestIdList))>0&&count(array_filter($request->ids))==0){ | |
return $gradeSchemesList; | |
} | |
if(count(array_filter($request->termIds)) ==0 && count(array_filter($request->groupIds)) ==0 &&count(array_filter($request->ids)) ==0){ | |
return $gradeSchemesList; | |
} | |
switch ($type) { | |
case GradeSchemaTypes::ACADEMIC_PAPER_SUBJECT: | |
break; | |
case GradeSchemaTypes::SYLLABUS_ACADEMIC_TERM: | |
$joinGradeSchema = "INNER JOIN valuation_method vm ON vm.identifying_context->>'$.syllabusAcademicTermSettingsId' = csats.id AND vm.type = '$type'"; | |
break; | |
case GradeSchemaTypes::SYLLABUS: | |
$joinGradeSchema = "INNER JOIN valuation_method vm ON vm.identifying_context->>'$.syllabusId' = ccsr.cm_syllabus_id AND vm.type = '$type'"; | |
break; | |
case GradeSchemaTypes::CURRICULUM: | |
$joinGradeSchema = "INNER JOIN valuation_method vm ON vm.identifying_context->>'$.curriculumId' = cc.id AND vm.type = '$type'"; | |
$type = NULL; | |
break; | |
default: | |
return $gradeSchemesList; | |
break; | |
} | |
if($requestedGradeSchema==GradeSchemaTypes::ACADEMIC_PAPER_SUBJECT&&$type!=GradeSchemaTypes::ACADEMIC_PAPER_SUBJECT){ | |
$joinGradeSchemeColumn = " vm.properties->>'$.subjectGradeSchemaId' "; | |
} | |
$sql = "SELECT DISTINCT | |
gr.id AS gradeId, | |
gr.name AS gradeName, | |
gr.range_from, | |
gr.range_to, | |
gr.properties->>'$.class' AS class, | |
gr.properties->>'$.failStatus' AS failStatus, | |
gr.properties->>'$.gradePoint' AS gradePoint, | |
gr.properties->>'$.relativeScoreEquation' AS equation, | |
gr.properties->>'$.relativeMark' AS relativeMarkPercentage, | |
gr.properties, | |
gs.type, | |
gs.type as schemeType, | |
gs.id as schemeId, | |
gs.name as schemeName, | |
$columnNames AS requestId from cm_curriculum cc | |
INNER JOIN cm_curriculum_syllabus_relation ccsr ON ccsr.cm_curriculum_id = cc.id | |
INNER JOIN cm_syllabus cs ON cs.id = ccsr.cm_syllabus_id | |
INNER JOIN cm_syllabus_academic_term_settings csats ON csats.cm_syllabus_id = cs.id | |
INNER JOIN cm_academic_paper cap ON cap.cm_syllabus_academic_term_settings_id = csats.id | |
INNER JOIN cm_academic_paper_subjects caps ON caps.cm_academic_paper_id = cap.id | |
LEFT JOIN `groups` bg ON cc.id = CAST(bg.properties->>'$.curriculumId' AS CHAR) AND bg.`type`='BATCH' | |
$joinGradeSchema | |
INNER JOIN grade_scheme gs ON gs.id = $joinGradeSchemeColumn | |
INNER JOIN grade gr ON | |
gr.grade_scheme_id = gs.id | |
WHERE 1=1 | |
"; | |
if (count(array_filter($request->termIds)) > 0) { | |
$sql .= " AND csats.academic_term_id in ('" . implode("','", $request->termIds) . "')"; | |
} | |
if (count(array_filter($request->groupIds)) > 0) { | |
$sql .= " AND bg.id in ('" . implode("','", $request->groupIds) . "')"; | |
} | |
if (count(array_filter($request->ids)) > 0) { | |
$sql .= " AND $columnNames in ('" . implode("','", $request->ids) . "')"; | |
} | |
if ($request->orderBy == "ASC") { | |
$sql .= " ORDER BY gr.range_to ASC"; | |
} else { | |
$sql .= " ORDER BY gr.range_to DESC"; | |
} | |
$gradeSchemes = (array) $this->executeQueryForList($sql, $this->mapper[CurriculumManageServiceMapper::GET_GRADE_BY_GROUP]); | |
if (count(array_filter($request->ids)) > 0&&count($gradeSchemes)>0) { | |
// need to remove those ids from list since no need for fetch from higher tree | |
$idList = array_column((array)$gradeSchemes,'id'); | |
$request->ids = array_diff($request->ids,$idList); | |
} | |
$idList = array_flip(array_column((array) $gradeSchemesList, 'id')); | |
$diff = array_filter($gradeSchemes, function ($scheme) use ($idList) { | |
return !isset($idList[$scheme->id]); | |
}); | |
$gradeSchemesList = array_merge($gradeSchemesList,$diff); | |
switch ($type) { | |
case GradeSchemaTypes::ACADEMIC_PAPER_SUBJECT: | |
$type = GradeSchemaTypes::SYLLABUS_ACADEMIC_TERM; | |
break; | |
case GradeSchemaTypes::SYLLABUS_ACADEMIC_TERM: | |
$type = GradeSchemaTypes::SYLLABUS; | |
break; | |
case GradeSchemaTypes::SYLLABUS: | |
$type = GradeSchemaTypes::CURRICULUM; | |
case GradeSchemaTypes::CURRICULUM: | |
break; | |
} | |
} while (!empty($type)); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $gradeSchemesList; | |
} | |
} |