Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 922
FilterService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 4
54522.00
0.00% covered (danger)
0.00%
0 / 922
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 findFilterRequestAndItsFilters
0.00% covered (danger)
0.00%
0 / 1
1560.00
0.00% covered (danger)
0.00%
0 / 48
 findFilters
0.00% covered (danger)
0.00%
0 / 1
1640.00
0.00% covered (danger)
0.00%
0 / 300
 findFilterTypeAndGetData
0.00% covered (danger)
0.00%
0 / 1
23562.00
0.00% covered (danger)
0.00%
0 / 573
<?php
namespace com\linways\ec\core\service;
use com\linways\ec\core\exception\ExamControllerException;
use com\linways\base\util\MakeSingletonTrait;
use com\linways\core\ams\professional\request\academic\SearchGroupRequest;
use com\linways\ec\core\service\CommonExamService;
use com\linways\ec\core\request\SearchExamRegistrationRequest;
use com\linways\ec\core\request\SearchFilterRequest;
use com\linways\ec\core\service\ExamRegistrationService;
use com\linways\ec\core\service\ExamRevaluationService;
use com\linways\core\ams\professional\request\api\GetAllDepartmentsRequest;
use com\linways\core\ams\professional\service\DepartmentService;
use com\linways\core\ams\professional\service\academic\GroupService;
use com\linways\core\ams\professional\request\academic\SearchAcademicTermRequest;
use com\linways\core\ams\professional\service\academic\AcademicTermService;
use com\linways\core\ams\professional\service\CourseTypeService;
use com\linways\ec\core\constant\ExamRegistrationTypeConstants;
use com\linways\ec\core\service\GroupService as ECGroupService;
use com\linways\academics\core\service\BatchService;
use com\linways\ec\core\service\ExamRegistrationBatchService;
use com\linways\ec\core\request\SearchExamRegistrationBatchRequest;
use com\linways\ec\core\service\RankListReportService;
use stdClass;
class FilterService extends BaseService
{
    use MakeSingletonTrait;
    public function __construct() {
        // $this->mapper = FilterServiceMapper::getInstance()->getMapper();
    }
    public function findFilterRequestAndItsFilters($request){
        $response = new stdClass();
        switch ($request->type) {
            case 'BATCH_TERM':
            case 'PROGRAM_BATCH_SEMESTER':
            case 'PROGRAM_BATCH':
            case 'EXAM_REGISTRATION_DEPT_BATCH_SEMESTER':
            case 'EXAM_REGISTRATION_TIME':
            case 'EXAM_YEAR_REGISTRATION_CATEGORY':
            case 'EXAM_REGISTRATION':
            case 'EXAM_REGISTRATION_SUBJECTS':
            case 'EXAM_REGISTRATION_BATCH':
            case 'EXAM_REVALUATION':
            case 'BATCH_TERM_REVALUATION':
            case 'REGULAR_EXAM_REGISTRATION':
            case 'SUPPLIMENTARY_EXAM_REGISTRATION':
            case 'EXAM_REGISTRATION_WITH_REVALUATION':
            case 'EXAM_REGISTRATION_WITH_OUT_REVALUATION':
            case 'MODERATION_STATISTICAL_ANALYSIS':
            case 'REGULAR_EXAM_REGISTRATION_WITH_START_YEAR':
            case 'EXAM_REGISTRATION_FILTER':
            case 'CONTROLLER_SIDE_EXAM_REVALUATIONS':
            case 'EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE':
            case 'EXAM_REGISTRATION_WITH_MULTI_SELECTION':
            case 'EXAM_REGISTRATION_WITH_ACADEMIC_TERM':
            case 'REGULAR_EXAM_REGISTRATION_BATCH':
            case 'MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH':
            case 'EXAM_REGISTRATION_SUBJECTS_WITH_OUT_BATCH':
            case 'COURSE_TYPE_START_YEAR_BATCH_FILTER':
            case 'COURSE_TYPE_START_YEAR_SEMESTER_FILTER':
            case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
            case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
            case 'EXAM_RANK_LIST_REPORT':
            case 'REVALUATION_EXAM_REGISTRATION':
            case 'COURSE_TYPE_BATCH_FILTER':
            case 'EXAM_REGISTRATION_SEMESTER_SUBJECTS' :
            case 'EXAM_YEAR_REGISTRATION_SLOT' :
            case 'EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE' :
            case 'EXAM_TYPE_AND_EXAM_REGISTRATION' :
            case 'EXAM_RANK_LIST_REPORT_DEPARTMENT' :
            case 'REGULAR_EXAM_REGISTRATION_WITH_ACADEMIC_TERM' :
                $response->request = new SearchFilterRequest;
                $response->filters = $this->findFilters($request->type);
                break;
                
            default:
                # code...
                break;
        }
        return $response;
    }
    public function findFilters($type){
        // {"const":"BATCH:SYLLABUS_AND_EXTERNAL_SYLLABUS","label":"Syllabus","domType":"MULT-SELECT","requestProperty":"syllabusId","requestType":"ARRAY","selected":false}
        switch ($type) {
            case 'BATCH_TERM':
                return json_decode('[
                    {"const":"BATCH_TERM:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":false},
                    {"const":"BATCH_TERM:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":false},
                    {"const":"BATCH_TERM:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":false},
                    {"const":"BATCH_TERM:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":false,"required":false},
                    {"const":"BATCH_TERM:TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":false,"required":false}
                ]');
                break;
            case 'BATCH_TERM_REVALUATION':
                return json_decode('[
                    {"const":"BATCH_TERM_REVALUATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":false},
                    {"const":"BATCH_TERM_REVALUATION:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":false},
                    {"const":"BATCH_TERM_REVALUATION:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":false,"required":false},
                    {"const":"BATCH_TERM_REVALUATION:TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":false,"required":false}
                ]');
                break;
            case 'EXAM_REGISTRATION_DEPT_BATCH_SEMESTER':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_DEPT_BATCH_SEMESTER:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":false,"required":false},
                    {"const":"EXAM_REGISTRATION_DEPT_BATCH_SEMESTER:BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":false,"required":false},
                    {"const":"EXAM_REGISTRATION_DEPT_BATCH_SEMESTER:TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":false,"required":false}
                ]');
                break;
            case 'PROGRAM_BATCH_SEMESTER':
                return json_decode('[
                    {"const":"PROGRAM_BATCH_SEMESTER:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_SEMESTER:PROGRAM","label":"Program","domType":"SELECT","requestProperty":"programId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_SEMESTER:BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_SEMESTER:TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
                return json_decode('[
                    {"const":"PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE:PROGRAM","label":"Program","domType":"SELECT","requestProperty":"programId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE:BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE:CURRICULUM","label":"Curriculum","domType":"SELECT","requestProperty":"curriculumId","requestType":"STRING","selected":true,"required":false},
                    {"const":"PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE:SYLLABUS_TYPE","label":"Syllabus Type","domType":"SELECT","requestProperty":"syllabusType","requestType":"STRING","selected":true,"required":false}
                ]');
                break;
            case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                return json_decode('[
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:PROGRAM","label":"Program","domType":"SELECT","requestProperty":"programId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:CURRICULUM","label":"Curriculum","domType":"SELECT","requestProperty":"curriculumId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:SUB_CURRICULUM","label":"Sub Curriculum","domType":"SELECT","requestProperty":"syllabusId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:RANK_LIST_REPORTS","label":"Rank List Reports","domType":"SELECT","requestProperty":"rankListReportId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_RANK_LIST_REPORT':
                return json_decode('[
                    {"const":"EXAM_RANK_LIST_REPORT:RANK_LIST_REPORTS","label":"Rank List Reports","domType":"SELECT","requestProperty":"rankListReportId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_RANK_LIST_REPORT_DEPARTMENT':
                return json_decode('[
                    {"const":"EXAM_RANK_LIST_REPORT:RANK_LIST_REPORTS","label":"Rank List Reports","domType":"SELECT","requestProperty":"rankListReportId","requestType":"STRING","selected":true,"required":true},
                    {"const":"BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REGISTRATION_TIME':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_TIME:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_TIME:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_TIME:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_TIME:EXAM_TIME","label":"Exam Date","domType":"SELECT","requestProperty":"examTime","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_YEAR_REGISTRATION_CATEGORY':
                return json_decode('[
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:EXAM_YEAR","label":"Exam Year","domType":"SELECT","requestProperty":"examYear","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:EXAM_REGISTRATION_TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"MULT-SELECT","requestProperty":"groupId","requestType":"ARRAY","selected":false,"required":false},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:SUBJECT_CATEGORY","label":"Course Category","domType":"MULT-SELECT","requestProperty":"subjectCategoriesIds","requestType":"ARRAY","selected":false,"required":false},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:SUBJECT_TYPE","label":"Course Type","domType":"MULT-SELECT","requestProperty":"subjectTypeIds","requestType":"ARRAY","selected":false,"required":false},
                    {"const":"EXAM_YEAR_REGISTRATION_CATEGORY:SLOT","label":"Course Slot","domType":"MULT-SELECT","requestProperty":"subjectSlotIds","requestType":"ARRAY","selected":false,"required":false}
                ]');
                break;
            case 'EXAM_REGISTRATION':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION:EXAM_YEAR","label":"Exam Year","domType":"SELECT","requestProperty":"examYear","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'REGULAR_EXAM_REGISTRATION':
                return json_decode('[
                    {"const":"REGULAR_EXAM_REGISTRATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'SUPPLIMENTARY_EXAM_REGISTRATION':
                return json_decode('[
                    {"const":"SUPPLIMENTARY_EXAM_REGISTRATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"SUPPLIMENTARY_EXAM_REGISTRATION:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"SUPPLIMENTARY_EXAM_REGISTRATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'REVALUATION_EXAM_REGISTRATION':
                return json_decode('[
                    {"const":"REVALUATION_EXAM_REGISTRATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REVALUATION_EXAM_REGISTRATION:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"REVALUATION_EXAM_REGISTRATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REGISTRATION_SUBJECTS':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_SUBJECTS:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":false,"required":false},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION_SUBJECT","label":"Subject","domType":"SELECT","requestProperty":"academicPaperSubjectId","requestType":"STRING","selected":false,"required":false,"parentFilterType":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION_BATCH"}
                ]');
                break;
            case 'EXAM_REGISTRATION_SUBJECTS_WITH_OUT_BATCH':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_SUBJECTS:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS_WITH_OUT_BATCH:EXAM_REGISTRATION_SUBJECT","label":"Subject","domType":"SELECT","requestProperty":"subjectId","requestType":"STRING","selected":true,"required":true,"parentFilterType":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION"}
                ]');
                break;
            case 'EXAM_REGISTRATION_BATCH':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_SUBJECTS:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_SUBJECTS:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REVALUATION':
                return json_decode('[
                    {"const":"EXAM_REVALUATION:REVALUATION","label":"Revaluation","domType":"SELECT","requestProperty":"revaluationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REVALUATION:REVALUATION_TYPE","label":"Revaluation Type","domType":"SELECT","requestProperty":"revaluationType","requestType":"STRING","selected":false,"required":false}
                ]');
                break;
            case 'EXAM_REGISTRATION_WITH_REVALUATION':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REGISTRATION_WITH_OUT_REVALUATION':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                    ]');
                break;
            case 'PROGRAM_BATCH':
                return json_decode('[
                    {"const":"PROGRAM_BATCH:DEPARTMENT","label":"Department","domType":"SELECT","requestProperty":"departmentId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH:PROGRAM","label":"Program","domType":"SELECT","requestProperty":"programId","requestType":"STRING","selected":true,"required":true},
                    {"const":"PROGRAM_BATCH:BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REGISTRATION_WITH_OUT_REVALUATION':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_OUT_REVALUATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'MODERATION_STATISTICAL_ANALYSIS':
                return json_decode('[
                    {"const":"MODERATION_STATISTICAL_ANALYSIS:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"MODERATION_STATISTICAL_ANALYSIS:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"MODERATION_STATISTICAL_ANALYSIS:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"MODERATION_STATISTICAL_ANALYSIS:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true},
                    {"const":"MODERATION_STATISTICAL_ANALYSIS:MODERATION_MARKS","label":"Moderation Mark","domType":"MULT-SELECT","requestProperty":"moderationMark","requestType":"ARRAY","selected":true,"required":true}
                    ]');
                    break;
            case 'REGULAR_EXAM_REGISTRATION_WITH_START_YEAR':
                return json_decode('[
                    {"const":"REGULAR_EXAM_REGISTRATION_WITH_START_YEAR:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION_WITH_START_YEAR:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION_WITH_START_YEAR:EXAM_REG_START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":false}
                ]');
                break;
            case 'EXAM_REGISTRATION_FILTER':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_FILTER:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":false},
                    {"const":"EXAM_REGISTRATION_FILTER:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":false},
                    {"const":"EXAM_REGISTRATION_FILTER:TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":false},
                    {"const":"EXAM_REGISTRATION_FILTER:SORT_BY","label":"Sort By","domType":"MULT-SELECT","requestProperty":"sortBy","requestType":"ARRAY","selected":true,"required":false}
                ]');
                break;
            case 'CONTROLLER_SIDE_EXAM_REVALUATIONS':
                return json_decode('[
                    {"const":"CONTROLLER_SIDE_EXAM_REVALUATIONS:REVALUATION","label":"Revaluation","domType":"SELECT","requestProperty":"revaluationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"CONTROLLER_SIDE_EXAM_REVALUATIONS:REVALUATION_TYPE","label":"Revaluation Type","domType":"SELECT","requestProperty":"revaluationType","requestType":"STRING","selected":false,"required":false}
                ]');
                break;
            case 'EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                    ]');
                break;
            case 'EXAM_REGISTRATION_WITH_MULTI_SELECTION':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_MULTI_SELECTION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true, "order": 2},
                    {"const":"EXAM_REGISTRATION_WITH_MULTI_SELECTION:EXAM_REGISTRATION","label":"Exam Registration","domType":"MULT-SELECT","requestProperty":"examRegistrationId","requestType":"ARRAY","selected":true,"required":true, "order": 3},
                    {"const":"EXAM_REGISTRATION_WITH_MULTI_SELECTION:EXAM_DATE","label":"Exam Date","domType":"DATE","requestProperty":"examDate","requestType":"STRING","selected":true,"required":false, "order": 4},
                    {"const":"EXAM_REGISTRATION_WITH_MULTI_SELECTION:SESSION","label":"Session","domType":"SELECT","requestProperty":"session","requestType":"ARRAY","selected":true,"required":false, "order": 5}
                ]');
                break;
            case 'EXAM_REGISTRATION_WITH_ACADEMIC_TERM':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_WITH_ACADEMIC_TERM:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_ACADEMIC_TERM:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_ACADEMIC_TERM:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_ACADEMIC_TERM:EXAM_REGISTRATION_TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":true}
                    ]');
                break;
            case 'REGULAR_EXAM_REGISTRATION_WITH_ACADEMIC_TERM' :
                return json_decode('[
                    {"const":"REGULAR_EXAM_REGISTRATION_WITH_ACADEMIC_TERM:REGULAR_EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_REGISTRATION_WITH_ACADEMIC_TERM:EXAM_REGISTRATION_TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":true}
                    ]');
                break;
            case 'REGULAR_EXAM_REGISTRATION_BATCH':
                return json_decode('[
                    {"const":"REGULAR_EXAM_REGISTRATION_BATCH:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION_BATCH:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"REGULAR_EXAM_REGISTRATION_BATCH:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH':
                return json_decode('[
                    {"const":"MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"SELECT","requestProperty":"groupId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'COURSE_TYPE_START_YEAR_BATCH_FILTER':
                return json_decode('[
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:TERM","label":"Term","domType":"SELECT","requestProperty":"termId","requestType":"STRING","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:COURSE_TYPE_START_YEAR_BATCH","label":"Batch","domType":"MULT-SELECT","requestProperty":"groupId","requestType":"ARRAY","selected":true,"required":true}
                ]');
                break;
            case 'COURSE_TYPE_START_YEAR_SEMESTER_FILTER':
                return json_decode('[
                    {"const":"COURSE_TYPE_START_YEAR_SEMESTER_FILTER:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_SEMESTER_FILTER:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_SEMESTER_FILTER:TERM","label":"Term","domType":"SELECT","requestProperty":"termId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'COURSE_TYPE_BATCH_FILTER':
                return json_decode('[
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:START_YEAR","label":"Batch Start Year","domType":"YEAR","requestProperty":"startYear","requestType":"INT","selected":true,"required":true},
                    {"const":"COURSE_TYPE_START_YEAR_BATCH_FILTER:COURSE_TYPE_START_YEAR_BATCH","label":"Batch","domType":"MULT-SELECT","requestProperty":"groupId","requestType":"ARRAY","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_REGISTRATION_SEMESTER_SUBJECTS':
                return json_decode('[
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:COURSE_TYPE","label":"Course Type","domType":"SELECT","requestProperty":"courseTypeId","requestType":"STRING","selected":true,"required":true, "order": 1},
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true, "order": 2},
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true, "order": 3},
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:EXAM_REGISTRATION_TERM","label":"Term","domType":"SELECT","requestProperty":"currentTermId","requestType":"STRING","selected":true,"required":false, "order": 4},
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:EXAM_REGISTRATION_BATCH","label":"Batch","domType":"MULT-SELECT","requestProperty":"groupId","requestType":"ARRAY","selected":true,"required":false, "order": 5},
                    {"const":"EXAM_REGISTRATION_SEMESTER_SUBJECTS:EXAM_REGISTRATION_SUBJECT","label":"Subject","domType":"SELECT","requestProperty":"academicPaperSubjectId","requestType":"STRING","selected":true,"required":false, "order": 6}
                ]');
                break;
            case 'EXAM_YEAR_REGISTRATION_SLOT':
                return json_decode('[
                    {"const":"EXAM_YEAR_REGISTRATION_SLOT:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_SLOT:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_SLOT:SLOT","label":"Slot","domType":"SELECT","requestProperty":"slotId","requestType":"INT","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE':
                return json_decode('[
                    {"const":"EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE:EXAMINER","label":"Examiner","domType":"SELECT","requestProperty":"examinerType","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            case 'EXAM_TYPE_AND_EXAM_REGISTRATION':
                return json_decode('[
                    {"const":"EXAM_TYPE_AND_EXAM_REGISTRATION:EXAM_TYPE","label":"Exam Type","domType":"SELECT","requestProperty":"examType","requestType":"STRING","selected":true,"required":true},
                    {"const":"EXAM_TYPE_AND_EXAM_REGISTRATION:EXAM_REGISTRATION","label":"Exam Registration","domType":"SELECT","requestProperty":"examRegistrationId","requestType":"STRING","selected":true,"required":true}
                ]');
                break;
            default:
                # code...
                break;
        }
    }
    /**
     * Search user
     * @param Type 
     * @param  $sortBy
     * @param SortOrder $sortOrder
     * @throws TrainingException
     * @author Nandu
     * @return User $user
     */
    public function findFilterTypeAndGetData($filterRequest){
        try
        {
            $selector = explode(':',$filterRequest->selector->const);
            switch ($selector[0]) {
                case 'BATCH_TERM':
                case 'EXAM_REGISTRATION_TIME':
                case 'EXAM_YEAR_REGISTRATION_CATEGORY':
                case 'EXAM_REGISTRATION':
                case 'BATCH_TERM_REVALUATION':
                case 'EXAM_REGISTRATION_SUBJECTS':
                case 'REGULAR_EXAM_REGISTRATION':
                case 'SUPPLIMENTARY_EXAM_REGISTRATION':
                case 'EXAM_REGISTRATION_WITH_REVALUATION':
                case 'EXAM_REGISTRATION_WITH_OUT_REVALUATION':
                case 'MODERATION_STATISTICAL_ANALYSIS':
                case 'REGULAR_EXAM_REGISTRATION_WITH_START_YEAR':
                case 'EXAM_REGISTRATION_FILTER':
                case 'EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE':
                case 'EXAM_REGISTRATION_WITH_MULTI_SELECTION':
                case 'EXAM_REGISTRATION_WITH_ACADEMIC_TERM':
                case 'REGULAR_EXAM_REGISTRATION_BATCH':
                case 'MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH':
                case 'EXAM_REGISTRATION_SUBJECTS_WITH_OUT_BATCH':
                case 'COURSE_TYPE_START_YEAR_BATCH_FILTER':
                case 'COURSE_TYPE_START_YEAR_SEMESTER_FILTER':
                case 'REVALUATION_EXAM_REGISTRATION':
                case 'EXAM_REGISTRATION_SEMESTER_SUBJECTS':
                case 'EXAM_YEAR_REGISTRATION_SLOT':
                case 'EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE':
                case 'EXAM_TYPE_AND_EXAM_REGISTRATION':
                case 'REGULAR_EXAM_REGISTRATION_WITH_ACADEMIC_TERM':
                    switch ($selector[1]) {
                        case 'START_YEAR':
                            $getYears = GroupService::getInstance()->getAllBatchAcademicYears();
                            array_walk($getYears, function($year,$key) {
                                $year->id = $year->year;
                                $year->name = $year->year;
                            });
                            $response = $getYears;
                            break;
                        case 'DEPARTMENT':
                            $getAllDepartmentRequest = new GetAllDepartmentsRequest();
                            $response = DepartmentService::getInstance()->getAllDepartmentForApi($getAllDepartmentRequest);
                            // $response = CommonExamService::getInstance()->returnUniqueArrayProperty(array_map(function($obj) { return $obj->department; },$batchList), 'id');
                            break;
                        case 'TERM':
                            $getAcademicTermRequest = new SearchAcademicTermRequest();
                            // $getAcademicTermRequest->type = "SEMESTER";
                            $response = AcademicTermService::getInstance()->searchAcademicTerm($getAcademicTermRequest);
                            break;
                        case 'EXAM_TYPE':
                            switch ($selector[0]) {
                                case 'EXAM_REGISTRATION_WITH_REVALUATION':
                                case 'EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE':
                                    $examTypes = [];
                                    $examTypeObj = new \stdClass();
                                    $examTypeObj->id = ExamRegistrationTypeConstants::REGULAR;
                                    $examTypeObj->name = 'Regular';
                                    $examTypes[0] = $examTypeObj;
                                    $examTypeObj = new \stdClass();
                                    $examTypeObj->id = ExamRegistrationTypeConstants::SUPPLEMENTARY;
                                    $examTypeObj->name = 'Supplementary';
                                    $examTypes[1] = $examTypeObj;
                                    $examTypeObj = new \stdClass();
                                    $examTypeObj->id = ExamRegistrationTypeConstants::REVALUATION;
                                    $examTypeObj->name = 'Revaluation';
                                    $examTypes[2] = $examTypeObj;
                                    $response = $examTypes;
                                    break;
                                default :
                                    $examTypes = [];
                                    $examTypeObj = new \stdClass();
                                    $examTypeObj->id = ExamRegistrationTypeConstants::REGULAR;
                                    $examTypeObj->name = 'Regular';
                                    $examTypes[0] = $examTypeObj;
                                    $examTypeObj = new \stdClass();
                                    $examTypeObj->id = ExamRegistrationTypeConstants::SUPPLEMENTARY;
                                    $examTypeObj->name = 'Supplementary';
                                    $examTypes[1] = $examTypeObj;
                                    $response = $examTypes;
                                    break;
                            }
                            break;
                        case 'SORT_BY':
                            switch ($selector[0]) {
                                case 'EXAM_REGISTRATION_FILTER':
                                    $sortBy = [];
                                    $sortByObj = new \stdClass();
                                    $sortByObj->id = 'PUBLISHED';
                                    $sortByObj->name = 'Published';
                                    $sortBy[0] = $sortByObj;
                                    $sortByObj = new \stdClass();
                                    $sortByObj->id = 'NOT_PUBLISHED';
                                    $sortByObj->name = 'Not Published';
                                    $sortBy[1] = $sortByObj;
                                    $response = $sortBy;
                                    break;
                                default :
                                    $sortBy = [];
                                    $sortByObj = new \stdClass();
                                    $sortByObj->id = 'PUBLISHED';
                                    $sortByObj->name = 'Published';
                                    $sortBy[0] = $sortByObj;
                                    $sortByObj = new \stdClass();
                                    $sortByObj->id = 'NOT_PUBLISHED';
                                    $sortByObj->name = 'Not Published';
                                    $sortBy[1] = $sortByObj;
                                    $response = $sortBy;
                                    break;
                            }
                            break;
                        case 'COURSE_TYPE':
                            $response = CourseTypeService::getInstance()->getCourseTypesForAPI();
                            break;
                        case 'EXAM_YEAR':
                            $response = CommonExamService::getInstance()->getCustumYears();
                            break;
                        case 'SUBJECT_CATEGORY':
                            $response = CommonExamService::getInstance()->searchSubjectCategories();
                            break;
                        case 'SUBJECT_TYPE':
                            $response = CommonExamService::getInstance()->searchSubjectTypes();
                            break;
                        case 'SLOT':
                            $response = CommonExamService::getInstance()->getAllSubjectSlots();
                            break;
                        case 'EXAMINER':
                            $examinerTypes = [];
                            $examinerTypeObj = new \stdClass();
                            $examinerTypeObj->id = "INTERNAL";
                            $examinerTypeObj->name = 'Internal Examiner';
                            $examinerTypes[0] = $examinerTypeObj;
                            $examinerTypeObj = new \stdClass();
                            $examinerTypeObj->id = "EXTERNAL";
                            $examinerTypeObj->name = 'External Examiner';
                            $examinerTypes[1] = $examinerTypeObj;
                            $response = $examinerTypes;
                            break;
                        case 'REGULAR_EXAM_REGISTRATION':
                            $searchRequest = new \stdClass;
                            $searchRequest->type = ExamRegistrationTypeConstants::REGULAR;
                            $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                            break;
                        case 'EXAM_REGISTRATION':
                            switch ($selector[0]) {
                                case 'EXAM_REGISTRATION_TIME':
                                case 'EXAM_REGISTRATION_SUBJECTS':
                                case 'MODERATION_STATISTICAL_ANALYSIS':
                                case 'EXAM_REGISTRATION_SEMESTER_SUBJECTS':
                                    if(!empty($filterRequest->request->examType) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'EXAM_YEAR_REGISTRATION_CATEGORY':
                                case 'EXAM_REGISTRATION':
                                    if(!empty($filterRequest->request->examType) && !empty($filterRequest->request->courseTypeId) && !empty($filterRequest->request->examYear)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->examYear = $filterRequest->request->examYear;
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'REGULAR_EXAM_REGISTRATION':
                                    if(!empty($filterRequest->request->startYear) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->batchStartYear = $filterRequest->request->startYear;
                                        $searchRequest->type = ExamRegistrationTypeConstants::REGULAR;;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'REGULAR_EXAM_REGISTRATION_WITH_START_YEAR':
                                    if(!empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->type = ExamRegistrationTypeConstants::REGULAR;;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'REGULAR_EXAM_REGISTRATION_BATCH':
                                    if(!empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->type = ExamRegistrationTypeConstants::REGULAR;;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'SUPPLIMENTARY_EXAM_REGISTRATION':
                                    if(!empty($filterRequest->request->startYear) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->batchStartYear = $filterRequest->request->startYear;
                                        $searchRequest->type = ExamRegistrationTypeConstants::SUPPLEMENTARY;;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'REVALUATION_EXAM_REGISTRATION':
                                    if(!empty($filterRequest->request->startYear) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->batchStartYear = $filterRequest->request->startYear;
                                        $searchRequest->type = ExamRegistrationTypeConstants::REVALUATION;;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'EXAM_REGISTRATION_WITH_MULTI_SELECTION':
                                    if(!empty($filterRequest->request->examType)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $searchRequest->examDate = $filterRequest->request->examDate;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'EXAM_REGISTRATION_WITH_REVALUATION':
                                case 'EXAM_REGISTRATION_WITH_OUT_REVALUATION':
                                case 'EXAM_REGISTRATION_WITH_ACADEMIC_TERM':
                                    if(!empty($filterRequest->request->examType) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                                case 'EXAM_REGISTRATION_WITH_REVALUATION_STAFF_SIDE':
                                    if(!empty($filterRequest->request->examType) && !empty($filterRequest->request->courseTypeId)){
                                        $searchRequest = new SearchExamRegistrationRequest;
                                        $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                        if($filterRequest->request->examType == 'REVALUATION'){
                                            $searchRequest->isStaffSideRevaluationOnly = true;
                                        }
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $revaluationRecods = ExamRegistrationService::getInstance()->searchAllExamRegistration($searchRequest);
                                        $examRevaluations = $revaluationRecods->records ;
                                        foreach($examRevaluations as $examRevaluation){
                                            $registration = new \stdClass;
                                            $registration->id = $examRevaluation->id;
                                            $registration->name = $examRevaluation->name;
                                            $response[] = $registration;
                                        }
                                    }
                                    break;
                                case 'MINOR_HONOR_EXAM_REGISTRATION_WITH_BATCH':
                                    $searchRequest = new \stdClass;
                                    $searchRequest->isMinorOrHonorExamRegistration = true;
                                    $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    
                                    break;
                                case 'EXAM_YEAR_REGISTRATION_SLOT' : 
                                case 'EXAM_YEAR_REGISTRATION_WITH_EXAMINER_TYPE' :
                                case 'EXAM_TYPE_AND_EXAM_REGISTRATION' :
                                    if(!empty($filterRequest->request->examType)){
                                        $searchRequest = new \stdClass;
                                        $searchRequest->type = $filterRequest->request->examType;
                                        $response = ExamRegistrationService::getInstance()->searchExamRegistrationByOtherDetails($searchRequest);
                                    }
                                    break;
                            }
                            break;
                        case 'EXAM_TIME':
                            if(!empty($filterRequest->request->examRegistrationId)){
                                $searchRequest = new \stdClass;
                                $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                $response =  ExamRegistrationService::getInstance()->getAllAssessmentDatesByExamRegistration($searchRequest); 
                            }
                            break;
                        case 'EXAM_REGISTRATION_BATCH':
                            switch ($selector[0]) {
                                case 'EXAM_REGISTRATION_SEMESTER_SUBJECTS':
                                    if(!empty($filterRequest->request->examRegistrationId)){
                                        $searchRequest = new SearchExamRegistrationBatchRequest();
                                        $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                        $searchRequest->academicTermId = $filterRequest->request->currentTermId;
                                        $examRegistrationBatches = ExamRegistrationBatchService::getInstance()->searchExamRegistrationBatch($searchRequest);
                                        foreach($examRegistrationBatches as $examRegistrationBatch){
                                            $batch = new \stdClass;
                                            $batch->id = $examRegistrationBatch->groupId;
                                            $batch->name = $examRegistrationBatch->groupName;
                                            $response[] = $batch;
                                        }
                                    }
                                    break;
                                default:
                                    if(!empty($filterRequest->request->examRegistrationId)){
                                        $searchRequest = new SearchExamRegistrationBatchRequest();
                                        $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                        $examRegistrationBatches = ExamRegistrationBatchService::getInstance()->searchExamRegistrationBatch($searchRequest);
                                        foreach($examRegistrationBatches as $examRegistrationBatch){
                                            $batch = new \stdClass;
                                            $batch->id = $examRegistrationBatch->groupId;
                                            $batch->name = $examRegistrationBatch->groupName;
                                            $response[] = $batch;
                                        }
                                    }
                                break;
                            }
                            break;
                        case 'EXAM_REGISTRATION_SUBJECT':
                            switch ($selector[0]) {
                                case 'EXAM_REGISTRATION_SUBJECTS_WITH_OUT_BATCH':
                                    if(!empty($filterRequest->request->examRegistrationId) ){
                                        $searchRequest = new \stdClass();
                                        $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                        $subjects = ExamRegistrationBatchService::getInstance()->getAssignedSubjectByBatchOrExamReg($searchRequest);
                                        $subjectResponse = [];
                                        foreach($subjects as $subject){
                                            $subjectObj = new \stdClass();
                                            $subjectObj->name = $subject->name ." (".$subject->code.")";
                                            $subjectObj->id = $subject->subjectId;
                                            $subjectResponse[$subject->code] = $subjectObj;
                                        }
                                        $response = array_values($subjectResponse);
                                    }
                                    break;
                                default:
                                if(!empty($filterRequest->request->examRegistrationId) && !empty($filterRequest->request->groupId)){
                                    $searchRequest = new \stdClass();
                                    $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                    $searchRequest->groupId = $filterRequest->request->groupId;
                                    $response = ExamRegistrationBatchService::getInstance()->getAssignedSubjectByBatchOrExamReg($searchRequest);
                                }
                                break;
                            }
                            break;
                        case 'MODERATION_MARKS':
                            for ($i=0; $i <= 10; $i++){
                                $mark = new \stdClass;
                                $mark->id = $i;
                                $mark->name = $i;
                                $response[] = $mark;
                            }
                            break;
                        case 'EXAM_REG_START_YEAR':
                            if(!empty($filterRequest->request->examRegistrationId) && !empty($filterRequest->request->courseTypeId)){
                                $searchRequest = new \stdClass();
                                $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                $searchRequest->courseTypeId = $filterRequest->request->courseTypeId;
                                $response = ExamRegistrationService::getInstance()->getExamRegistrationStartYears($searchRequest);
                            }
                            break;
                        case 'EXAM_REGISTRATION_TERM':
                            if(!empty($filterRequest->request->examRegistrationId)){
                                $searchRequest = new \stdClass();
                                $searchRequest->examRegistrationId = $filterRequest->request->examRegistrationId;
                                $response =  ExamRegistrationService::getInstance()->getAcademicTermsByExamRegistration($searchRequest);    
                            }
                            break;
                        case 'SESSION':
                            $examTypes = [];
                            $examTypeObj = new \stdClass();
                            $examTypeObj->id = "FN";
                            $examTypeObj->name = "FN";
                            $examTypes[0] = $examTypeObj;
                            $examTypeObj = new \stdClass();
                            $examTypeObj->id = "AN";
                            $examTypeObj->name = "AN";
                            $examTypes[1] = $examTypeObj;
                            $response = $examTypes;
                            break;
                        case 'COURSE_TYPE_START_YEAR_BATCH':
                            if(!empty($filterRequest->request->courseTypeId) && !empty($filterRequest->request->startYear)){
                                $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                $results = BatchService::getInstance()->searchBatches($request);
                                $batchList = $results->records;
                                $batchList = array_map(function($obj) {  
                                    $batch = new stdClass;
                                    $batch->id = $obj->id;
                                    $batch->name = $obj->name; 
                                    $filterRequest->request->id = $filterRequest->request->groupId;return $batch;
                                },$batchList);
                                $response = CommonExamService::getInstance()->returnUniqueProperty($batchList, 'id');
                            }
                            break;
                        default:
                            $response = [];
                            break;
                    }
                    break;
                case 'EXAM_REGISTRATION_DEPT_BATCH_SEMESTER':
                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchExamRegistrationRequest());
                    $request->id = $filterRequest->examRegistrationId;
                    $results = ExamRegistrationService::getInstance()->searchExamRegistrationForFilter($request);
                    $batchList = $results->records;
                    switch ($selector[1]) {
                        case 'DEPARTMENT':
                            $response = CommonExamService::getInstance()->returnUniqueArrayProperty(array_map(function($obj) { return $obj->department; },$batchList), 'id');
                            break;
                        case 'TERM':
                            $response = CommonExamService::getInstance()->returnUniqueArrayProperty(array_map(function($obj) { return $obj->term; },$batchList), 'id');
                            break;
                        case 'BATCH':
                            $response = CommonExamService::getInstance()->returnUniqueArrayProperty(array_map(function($obj) { return $obj->batch; },$batchList), 'id');
                            break;
                        default:
                            $response = [];
                            break;
                    }
                    break;
                case 'PROGRAM_BATCH_SEMESTER':
                case 'PROGRAM_BATCH':
                case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
                case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                case 'EXAM_RANK_LIST_REPORT':
                case 'EXAM_RANK_LIST_REPORT_DEPARTMENT' :
                    switch ($selector[1]) {
                        case 'DEPARTMENT':
                            $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                            $results = BatchService::getInstance()->searchBatches($request);
                            $batchList = $results->records;
                            $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->department; },$batchList), 'id');
                            break;
                        case 'TERM':
                            $getAcademicTermRequest = new SearchAcademicTermRequest();
                            // $getAcademicTermRequest->type = "SEMESTER";
                            $response = AcademicTermService::getInstance()->searchAcademicTerm($getAcademicTermRequest);
                            // $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->term; },$batchList), 'id');
                            break;
                        case 'SYLLABUS_TYPE':
                            $response = CommonExamService::getInstance()->getSyllabusType();
                            break;
                        case 'RANK_LIST_REPORTS':
                            $searchRequest = new stdClass;
                            $response = RankListReportService::getInstance()->getAllRankListReports($searchRequest);
                            break;
                        case 'BATCH':
                            switch ($selector[0]) {
                                case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
                                case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                                    if(!empty($filterRequest->request->departmentId) && !empty($filterRequest->request->programId)){
                                        $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                        $results = BatchService::getInstance()->searchBatches($request);
                                        $batchList = $results->records;
                                        $batchList = array_map(function($obj) {  
                                            $batch = new stdClass;
                                            $batch->id = $obj->id;
                                            $batch->name = $obj->name; 
                                            return $batch;
                                        },$batchList);
                                        $response = CommonExamService::getInstance()->returnUniqueProperty($batchList, 'id');
                                    }
                                    else{
                                        $response = [];
                                    }
                                    break;
                                default:
                                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                    $results = BatchService::getInstance()->searchBatches($request);
                                    $batchList = $results->records;
                                    $batchList = array_map(function($obj) {  
                                        $batch = new stdClass;
                                        $batch->id = $obj->id;
                                        $batch->name = $obj->name; 
                                        return $batch;
                                    },$batchList);
                                    $response = CommonExamService::getInstance()->returnUniqueProperty($batchList, 'id');
                                break;
                            }
                            break;
                        case 'PROGRAM':
                            switch ($selector[0]) {
                                case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
                                case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                                    if(!empty($filterRequest->request->departmentId)){
                                        $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                        $results = BatchService::getInstance()->searchBatches($request);
                                        $batchList = $results->records;
                                        $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->program; },$batchList), 'id');
                                    }
                                    else{
                                        $response = [];
                                    }
                                    break;
                                default:
                                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                    $results = BatchService::getInstance()->searchBatches($request);
                                    $batchList = $results->records;
                                    $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->program; },$batchList), 'id');
                                break;
                            }
                            break;
                        case 'SUB_CURRICULUM':
                            switch ($selector[0]) {
                                case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                                    if(!empty($filterRequest->request->groupId) && !empty($filterRequest->request->curriculumId)){
                                        $filterRequest->request->id = $filterRequest->request->groupId;
                                        $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                        $results = BatchService::getInstance()->searchBatches($request);
                                        $batchList = $results->records;
                                        $syllabus = array_merge(array_map(function($obj) { return $obj->syllabus; },$batchList),array_map(function($obj) { return $obj->externalSyllabus; },$batchList));
                                        $response = [];
                                        foreach ($syllabus as $key => $value) {
                                            $response = array_merge(empty($value)?[]:$value,$response);
                                        }
                                        $response = CommonExamService::getInstance()->returnUniqueProperty($response, 'id');
                                        // $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->syllabus; },$batchList), 'id');
                                    }
                                    else{
                                        $response = [];
                                    }
                                break;
                                default:
                                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                    $results = BatchService::getInstance()->searchBatches($request);
                                    $batchList = $results->records;
                                    $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->syllabus; },$batchList), 'id');
                                break;
                            }
                            break;
                        case 'CURRICULUM':
                            switch ($selector[0]) {
                                case 'PROGRAM_BATCH_CURRICULUM_SYLLABUS_TYPE':
                                case 'BATCH_CURRICULUM_SYLLABUS_RANK_LIST_REPORT':
                                    if(!empty($filterRequest->request->groupId)){
                                        $filterRequest->request->id = $filterRequest->request->groupId;
                                        $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                        $results = BatchService::getInstance()->searchBatches($request);
                                        $batchList = $results->records;
                                        $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->curriculum; },$batchList), 'id');
                                    }
                                    else{
                                        $response = [];
                                    }
                                break;
                                default:
                                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                                    $results = BatchService::getInstance()->searchBatches($request);
                                    $batchList = $results->records;
                                    $response = CommonExamService::getInstance()->returnUniqueProperty(array_map(function($obj) { return $obj->curriculum; },$batchList), 'id');
                                break;
                            }
                            break;
                        default:
                            $response = [];
                            break;
                    }
                    break;
                case 'EXAM_REVALUATION':
                case 'CONTROLLER_SIDE_EXAM_REVALUATIONS':
                    $request = CommonExamService::getInstance()->setObject((object) $filterRequest->request,new SearchGroupRequest());
                    switch ($selector[1]) {
                        case 'REVALUATION':
                            $searchRequest = new SearchExamRegistrationRequest();
                            $searchRequest->type = "REVALUATION";
                            if($selector[0] == 'CONTROLLER_SIDE_EXAM_REVALUATIONS'){
                                $searchRequest->isControllerSideRevaluationOnly = true;
                            }
                            $revaluationRecods = ExamRegistrationService::getInstance()->searchAllExamRegistration($searchRequest);
                            $examRevaluations = $revaluationRecods->records ;
                            foreach($examRevaluations as $examRevaluation){
                                $registration = new \stdClass;
                                $registration->id = $examRevaluation->id;
                                $registration->name = $examRevaluation->name;
                                $response[] = $registration;
                            }
                            break;
                        case 'REVALUATION_TYPE':
                            if($filterRequest->request->revaluationId){
                                $searchRequest = new \stdClass;
                                $searchRequest->id = $filterRequest->request->revaluationId;
                                $searchRequest->examType = "REVALUATION";
                                $examRevaluationDetails = ExamRegistrationService::getInstance()->getCurrentExamRevaluationDetails($searchRequest);
                                $searchRequest->feeTypeIds = implode(',',$examRevaluationDetails->properties->revaluationFeeTypeIds);
                                $feesTypes = CommonExamService::getInstance()->getAllFeesTypes($searchRequest);
                                foreach($feesTypes as $feetype){
                                    $type = new \stdClass;
                                    $type->id = $feetype->id;
                                    $type->name = $feetype->name;
                                    $response[] = $type;
                                }
                            }
                            break;
                        default:
                            $response = [];
                            break;
                    }
                    break;
                default:
                    
                    break;
            }
        }
        catch(\Exception $e)
        {
            throw new ExamControllerException($e->getCode(), $e->getMessage());
        }
        $returnData = [];
        foreach ($response as $item) {
            $returnData [] = $item;
        }
        return $returnData;
    }
}