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 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 185
SubjectGroupMapService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
1482.00
0.00% covered (danger)
0.00%
0 / 185
 __construct
n/a
0 / 0
1
n/a
0 / 0
 __clone
n/a
0 / 0
1
n/a
0 / 0
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 5
 getRankReportSubjectGroupById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 addRankReportSubjectGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 18
 updateRankReportSubjectGroup
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 23
 deleteRankReportSubjectGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 searchRankReportSubjectGroup
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 14
 searchRankReportSubjectGroupMapping
0.00% covered (danger)
0.00%
0 / 1
56.00
0.00% covered (danger)
0.00%
0 / 50
 getSubjectsForRankReportSubjectGroupMapping
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 13
 addRankReportSubjectGroupMapping
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 37
 getRankReportGroupByReportId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 7
<?php
    namespace com\linways\core\ams\professional\service\examcontroller;
    use com\linways\core\ams\professional\exception\ProfessionalException;
    use com\linways\core\ams\professional\service\BaseService;
    
    class SubjectGroupMapService extends BaseService {
        // Condition 1 - Presence of a static member variable
        private static $_instance = null;
        
        // Condition 2 - Locked down the constructor
        private function __construct() {}
        // Prevent any oustide instantiation of this class
        
        // Condition 3 - Prevent any object or instance of that class to be cloned
        private function __clone() {}
        // Prevent any copy of this object
        
        // Condition 4 - Have a single globally accessible static method
        public static function getInstance() {
            if (! is_object ( self::$_instance )) {
                // or if( is_null(self::$_instance) ) or if( self::$_instance == null )
                self::$_instance = new self ();
            }
            return self::$_instance;
        }
    
    
        /**
         * Get rank_report_subject_group details by id
         * @param Integer $id
         * @throws ProfessionalException
         * @return Object $rankReportSubjectGroupDetails
         * @author Vishnu M
         */
        public function getRankReportSubjectGroupById ( $id ) {
            $id = $this->realEscapeString($id);
            $rankReportSubjectGroupDetails = null;
            try {
                $sql = "SELECT id, name FROM rank_report_subject_group WHERE id = '$id";
                $rankReportSubjectGroupDetails = $this->executeQueryForObject ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
            return $rankReportSubjectGroupDetails;
        }
        /**
         * Add rank_report_subject_group details
         * @param RankReportSubjectGroup $rankReportSubjectGroup
         * @throws ProfessionalException
         * @return Integer $id
         * @author Vishnu M
         */
        public function addRankReportSubjectGroup ( $rankReportSubjectGroup ) {
            $rankReportSubjectGroup = $this->realEscapeObject($rankReportSubjectGroup);
            $id = null;
            try {
                $sql = "INSERT INTO rank_report_subject_group ( 
                    name,
                    isLanguage, 
                    student_count, 
                    created_by ) VALUES ( 
                    '".$rankReportSubjectGroup->name."', 
                    '".$rankReportSubjectGroup->isLanguage."', 
                    '".$rankReportSubjectGroup->studentCount."', 
                    '".$rankReportSubjectGroup->createdBy."' )";
                $id = $this->executeQueryForObject ( $sql, TRUE );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
            return $id;
        }
        /**
         * Update rank_report_subject_group details
         * @param RankReportSubjectGroup $rankReportSubjectGroup
         * @throws ProfessionalException
         * @author Vishnu M
         */
        public function updateRankReportSubjectGroup ( $rankReportSubjectGroup ) {
            $rankReportSubjectGroup = $this->realEscapeObject($rankReportSubjectGroup);
            $setSql = "";
            if (empty($rankReportSubjectGroup->id)) {
                throw new ProfessionalException(ProfessionalException::INVALID_REQUEST, "Invalid subject group");
            }
            if ($rankReportSubjectGroup->name) {
                $setSql .= "name = '$rankReportSubjectGroup->name', ";
            }
            if ($rankReportSubjectGroup->isLanguage != "") {
                $setSql .= "isLanguage = '$rankReportSubjectGroup->isLanguage', ";
            }
            if ($rankReportSubjectGroup->studentCount) {
                $setSql .= "student_count = '$rankReportSubjectGroup->studentCount', ";
            }
            try {
                $sql = "UPDATE rank_report_subject_group SET 
                    $setSql
                    updated_by = '$rankReportSubjectGroup->updatedBy' WHERE id = '$rankReportSubjectGroup->id";
                $this->executeQuery ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
        }
        /**
         * Delete rank_report_subject_group details
         * @param Integer $id
         * @throws ProfessionalException
         * @author Vishnu M
         */
        public function deleteRankReportSubjectGroup ( $id ) {
            $id = $this->realEscapeString($id);
            try {
                $sql = "DELETE FROM rank_report_subject_group WHERE id = '$id";
                $this->executeQuery ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
        }
        /**
         * Search rank_report_subject_group details
         * @param RankReportSubjectGroupRequest $rankReportSubjectGroupRequest
         * @throws ProfessionalException
         * @return Array $rankReportSubjectGroupDetails
         * @author Vishnu M
         */
        public function searchRankReportSubjectGroup ( $rankReportSubjectGroupRequest ) {
            $rankReportSubjectGroupRequest = $this->realEscapeObject($rankReportSubjectGroupRequest);
            $rankReportSubjectGroupDetails = null;
            $condition = null;
            if ( $rankReportSubjectGroupRequest->name ) {
                $condition .= " AND name = '$rankReportSubjectGroupRequest->name";
            }
            try {
                $sql = "SELECT id, name, isLanguage, student_count AS studentCount FROM rank_report_subject_group WHERE id = id $condition ";
                $rankReportSubjectGroupDetails = $this->executeQueryForList ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
            return $rankReportSubjectGroupDetails;
        }
        /**
         * Search rank_report_subject_group_mapping details
         * @param RankReportSubjectGroupRequest $rankReportSubjectGroupRequest
         * @throws ProfessionalException
         * @return Object|Array $rankReportSubjectGroupDetails
         * @author Vishnu M
         */
        public function searchRankReportSubjectGroupMapping ( $rankReportSubjectGroupRequest ) {
            $rankReportSubjectGroupRequest = $this->realEscapeObject($rankReportSubjectGroupRequest);
            $rankReportSubjectGroupDetails = null;
            $condition = null;
            if ( $rankReportSubjectGroupRequest->id ) {
                $condition .= " AND rrsgm.id = '$rankReportSubjectGroupRequest->id";
            }
            if ( $rankReportSubjectGroupRequest->groupId ) {
                $condition .= " AND rrsgm.rank_report_subject_group_id = '$rankReportSubjectGroupRequest->groupId";
            }
            if ( $rankReportSubjectGroupRequest->name ) {
                $condition .= " AND rrsgm.name = '$rankReportSubjectGroupRequest->name";
            }
            if ( $rankReportSubjectGroupRequest->rankReportId ) {
                $condition .= " AND rrsgm.rank_report_id = '$rankReportSubjectGroupRequest->rankReportId";
            }
            if ( $rankReportSubjectGroupRequest->semId ) {
                $condition .= " AND rrsgm.semesters_id = '$rankReportSubjectGroupRequest->semId";
            }
            
            try {
                $sql = "SELECT DISTINCT
                    rrsgm.subjects_id AS subjectId,
                    s.subjectName,
                    s.subjectDesc,
                    rrsgm.rank_report_subject_group_id AS subjectGroupId,
                    rrsg.name AS groupName,
                    rrsg.isLanguage,
                    rrsgm.rank_report_id AS rankReportId,
                    rrsgm.semesters_id AS semId,
                    sem.semName,
                    sem.orderNo,
                    rrsgm.group_no AS groupNo,
                    rrsg.student_count AS studentCount
                FROM
                    rank_report_subject_group_mapping rrsgm
                        INNER JOIN
                    rank_report_subject_group rrsg ON (rrsgm.rank_report_subject_group_id = rrsg.id)
                        INNER JOIN
                    semesters sem ON (sem.semID = rrsgm.semesters_id)
                        INNER JOIN
                    subjects s ON (s.subjectID = rrsgm.subjects_id)
                WHERE
                    rrsgm.id > 0
                    $condition
                ORDER BY rrsg.name ASC , sem.orderNo ASC , s.subjectPriority ASC";
                $rankReportSubjectGroupDetails = $this->executeQueryForList ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
            return $rankReportSubjectGroupDetails;
        }
        /**
         * @param $rankReportId
         * @param $subjectGroupId
         * @param $hdlDeptId
         * @return Object|null
         * @throws ProfessionalException
         * @author Vishnu M
         */
        public function getSubjectsForRankReportSubjectGroupMapping ( $rankReportId, $subjectGroupId, $hdlDeptId ) {
            $rankReportId = $this->realEscapeString($rankReportId);
            $subjectGroupId = $this->realEscapeString($subjectGroupId);
            $hdlDeptId = $this->realEscapeString($hdlDeptId);
            $sql = null;
            $subjects = null;
            try {
                $sql = "SELECT DISTINCT s.subjectID as subjectId, s.subjectName, s.subjectDesc,  rrsgm.rank_report_subject_group_id AS subjectGroupId, rrsgm.semesters_id AS semId, rrsgm.group_no AS groupNo FROM rank_report rr INNER JOIN batches b ON (b.batchStartYear = rr.year AND b.courseTypeID = rr.course_type_id) INNER JOIN sbs_relation sbs ON (sbs.batchID = b.batchID) INNER JOIN subjects s ON (s.subjectID = sbs.subjectID) LEFT JOIN rank_report_subject_group_mapping rrsgm ON (rrsgm.subjects_id = s.subjectID AND rrsgm.rank_report_id = rr.id AND rrsgm.rank_report_subject_group_id = '$subjectGroupId') WHERE rr.id = '$rankReportId' AND s.hdl_deptID = '$hdlDeptId' ORDER BY s.subjectName ASC";
                $subjects = $this->executeQueryForList ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
            return $subjects;
        }
        /**
         * @param $rankReportSubjectGroupMapping
         * @throws ProfessionalException
         * @author Vishnu M
         */
        public function addRankReportSubjectGroupMapping ( $rankReportSubjectGroupMapping ) {
            $rankReportSubjectGroupMapping = $this->realEscapeObject($rankReportSubjectGroupMapping);
            $sql = null;
            $subjects = null;
            $values = [];
            try {
                if (!empty ( $rankReportSubjectGroupMapping ) && 
                    !empty ( $rankReportSubjectGroupMapping->subjectGroupMapping ) ) {
                        $deleteSubjectMapping = null;
                        foreach ( $rankReportSubjectGroupMapping->subjectGroupMapping as $subjectGroupMapping ) {
                            $subjectGroupMapping = (Object) $subjectGroupMapping;
                            $subjectId = $subjectGroupMapping->subjectId;
                            if ( $subjectGroupMapping->semId ) {
                                $values[] = "( 
                                    " . $subjectGroupMapping->subjectId . ", 
                                    " . $subjectGroupMapping->semId . ", 
                                    " . $subjectGroupMapping->groupNo . ", 
                                    " . $rankReportSubjectGroupMapping->rankReportSubjectGroupId . ", 
                                    " . $rankReportSubjectGroupMapping->rankReportId . ", 
                                    " . $rankReportSubjectGroupMapping->createdBy . 
                                )";
                            } else {
                                $deleteSubjectMapping[$subjectId] = $subjectId;
                            }
                        }
                        if ( !empty ( $deleteSubjectMapping ) ) {
                            $sqlDelete = "DELETE FROM rank_report_subject_group_mapping WHERE rank_report_id = '$rankReportSubjectGroupMapping->rankReportId' AND subjects_id IN (".implode(',', $deleteSubjectMapping).") AND rank_report_subject_group_id = '$rankReportSubjectGroupMapping->rankReportSubjectGroupId";
                            $this->executeQuery ( $sqlDelete );
                        }
                        if ( !empty ( $values ) ) {
                            $sql = "INSERT INTO rank_report_subject_group_mapping ( subjects_id, semesters_id, group_no, rank_report_subject_group_id, rank_report_id, created_by ) VALUES " . implode(',', $values) . " ON DUPLICATE KEY UPDATE semesters_id = VALUES ( semesters_id ), rank_report_subject_group_id = VALUES ( rank_report_subject_group_id ), group_no = VALUES ( group_no ), updated_by = VALUES (created_by) ";
                            $this->executeQuery ( $sql );
                        }
                }
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
        }
        
        public function getRankReportGroupByReportId ( $rankReportId ) {
            $sql = "SELECT DISTINCT rank_report_subject_group_id as groupId FROM rank_report_subject_group_mapping WHERE rank_report_id = '$rankReportId";
            try {
                return $this->executeQueryForList ( $sql );
            } catch (\Exception $e) {
                throw new ProfessionalException($e->getCode(), $e->getMessage());
            }
        }
    }
?>