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