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 / 9
CRAP
0.00% covered (danger)
0.00%
0 / 231
BatchPaperSubjectService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 9
1560.00
0.00% covered (danger)
0.00%
0 / 231
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 insertBatchPaperSubject
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 14
 updateBatchPaperSubject
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 18
 deleteBatchPaperSubject
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 18
 restoreStream
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 18
 searchStream
0.00% covered (danger)
0.00%
0 / 1
72.00
0.00% covered (danger)
0.00%
0 / 40
 getStreamDetails
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 24
 getAllSubjectsByGroupIdAndSemId
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 35
 searchBatchPaperSubject
0.00% covered (danger)
0.00%
0 / 1
132.00
0.00% covered (danger)
0.00%
0 / 62
<?php
namespace com\linways\core\ams\professional\service\academic;
use com\linways\base\util\SecurityUtils;
use com\linways\base\util\MakeSingletonTrait;
use com\linways\core\ams\professional\service\BaseService;
use com\linways\core\ams\professional\exception\ProfessionalException;
use com\linways\core\ams\professional\mapper\academic\BatchPaperSubjectServiceMapper;
use com\linways\core\ams\professional\request\academic\BatchPaperSubjectServiceRequest;
use com\linways\core\ams\professional\constant\academic\StatusConstants;
use com\linways\core\ams\professional\dto\api\BatchPaperSubject;
use com\linways\core\ams\professional\mapper\academic\StreamServiceMapper;
use com\linways\core\ams\professional\request\academic\SearchBatchPaperSubjectRequest;
use com\linways\core\ams\professional\request\academic\SearchStreamRequest;
class BatchPaperSubjectService extends BaseService
{
    use MakeSingletonTrait;
    private function __construct() {
        $this->mapper = BatchPaperSubjectServiceMapper::getInstance()->getMapper();
    }
    
    /**
     * Insert Stream
     * @param BatchPaperSubject $batchpapersubject
     * @return String $id
     */
    public function insertBatchPaperSubject(BatchPaperSubject $batchpapersubject)
    {
        $properties = !empty($batchpapersubject->properties) ? "'" . json_encode($batchpapersubject->properties) . "'" : "NULL";
        $id = SecurityUtils::getRandomString();
        $query = "INSERT INTO `batch_paper_subject`
                  (`id`,`group_id`,`paper_subject_id`,`properties`,`created_by`,`updated_by`)
                  VALUES
                  ('$id','$batchpapersubject->groupId','$batchpapersubject->paperSubjectId',$properties,'$batchpapersubject->createdBy','$batchpapersubject->updatedBy')";
        
        try {
            $this->executeQuery($query);
            return $id;
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    /**
     * Update Stream
     * @param BatchPaperSubject $batchpapersubject
     * @return String $batchpapersubject->id
     */
    public function updateBatchPaperSubject(BatchPaperSubject $batchpapersubject)
    {
        $properties = !empty($batchpapersubject->properties) ? "'".json_encode($batchpapersubject->properties)."'" : "NULL";
        
        $query = "UPDATE
                    `batch_paper_subject`
                SET
                    `group_id` = '$batchpapersubject->groupId',
                    `paper_subject_id` = '$batchpapersubject->paperSubjectId',
                    `properties` = $properties,
                    `updated_by` = '$batchpapersubject->updatedBy'
                WHERE
                    `id` = '$batchpapersubject->id'";
        try {
            $this->executeQuery($query);
            return $batchpapersubject->id;
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    /**
     * Delete Stream (Soft Delete)
     * @param String $id
     * @return NULL
     */
    public function deleteBatchPaperSubject($id)
    {
        $id = $this->realEscapeString($id);
        $updatedBy = $GLOBALS['userId'];
        if(empty($id))
            throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"BatchPaperSubject is invalid! Please enter a valid BatchPaperSubject");
        $query = "UPDATE
                    `batch_paper_subject`
                SET
                    `trashed` = UTC_TIMESTAMP(),
                    `updated_by` = '$updatedBy'
                WHERE
                    id = '$id'";
        try {
            $this->executeQuery($query);
        } catch (\Exception $e) {
            throw new ProfessionalException(ProfessionalException::ERROR_DELETING,"Error deleting BatchPaperSubject! Please try again");
        }
    }
    /**
     * Restore Stream
     * @param String $id
     * @return NULL
     */
    public function restoreStream($id)
    {
        $id = $this->realEscapeString($id);
        $updatedBy = $GLOBALS['userId'];
        if(empty($id))
            throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Stream is invalid! Please enter a valid stream");
        $query = "UPDATE
                    `stream`
                SET
                    `trashed` = NULL,
                    `updated_by` = '$updatedBy'
                WHERE
                    `id` = '$id'";
        try {
            $this->executeQuery($query);
        } catch (\Exception $e) {
            throw new ProfessionalException(ProfessionalException::ERROR_RESTORING,"Error restoring academic term! Please try again");
        }
    }
    
    /**
     * Search Academic term Details
     * @param SearchStreamRequest $request
     * @return Stream
     */
    public function searchStream(SearchStreamRequest $request)
    {
        $request = $this->realEscapeObject($request);
        $whereQuery = "";
        $limitQuery = "";
        if(!empty($request->id)) {
            $whereQuery .= " AND st.id='$request->id";
        }
        if($request->trashed === StatusConstants::ACTIVE) {
            $whereQuery .= " AND st.trashed IS NULL ";
        }
        if($request->trashed === StatusConstants::TRASHED) {
            $whereQuery .= " AND st.trashed IS NOT NULL ";
        }
        if(!empty($request->name)) {
            $whereQuery .= " AND  st.name LIKE '%$request->name%' ";
        } 
        if($request->startIndex !== "" && $request->endIndex !== "")
        {
            $limitQuery .= " LIMIT $request->startIndex,$request->endIndex";
        }
        $query = "SELECT
            st.id,
            st.name,
            st.properties,
            st.trashed,
            st.created_by,
            st.created_date,
            st.updated_by,
            st.updated_date
        FROM
            `stream` st
        WHERE
            1 = 1";
        try {
            $streams = $this->executeQueryForList($query.$whereQuery.$limitQuery, $this->mapper[StreamServiceMapper::SEARCH_STREAMS]);
        } catch (\Exception $e) {
            throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch stream details! Please try again.");
        }
        return $streams;
    } 
    /**
     * get Academic term by id
     * @param String $id
     * @return Stream
     */
    public function getStreamDetails($id)
    {
        $id = $this->realEscapeObject($id);
        if(empty($id)) 
            throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS,"Stream is invalid! Please enter a valid stream");
            $query = "SELECT
            st.id,
            st.name,
            st.properties,
            st.trashed,
            st.created_by,
            st.created_date,
            st.updated_by,
            st.updated_date
        FROM
            `stream` st
        WHERE
            `id` = '$id'";
        try {
            $stream = $this->executeQueryForObject($query,false, $this->mapper[StreamServiceMapper::SEARCH_STREAMS]);
        } catch (\Exception $e) {
            throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch stream details! Please try again");
        }
        return $stream;
    }
    public function getAllSubjectsByGroupIdAndSemId($groupId = null,$academicTermId = null)
    {
        $whereQuery = "";
        if(!empty($groupId)) {
            $whereQuery .= " AND bps.groups_id = '$groupId";
        }
        if(!empty($academicTermId)) {
            $whereQuery .= " AND sats.academic_term_id='$academicTermId'";
        }
      
        $query = "SELECT 
                    distinct aps.id as id,  
                    s.subjectDesc as name
                FROM
                    batch_paper_subject bps
                INNER JOIN
                    cm_academic_paper_subjects aps ON bps.cm_academic_paper_subjects_id = aps.id
                INNER JOIN
                        subjects s ON aps.subject_id = s.subjectID 
                INNER JOIN
                    cm_academic_paper ap ON aps.cm_academic_paper_id = ap.id
                INNER JOIN
                    cm_syllabus_academic_term_settings sats ON sats.id = ap.cm_syllabus_academic_term_settings_id AND sats.trashed IS NULL
                INNER JOIN
                    academic_term at ON at.id = sats.academic_term_id AND at.trashed IS NULL
                WHERE
                    1 = 1";
        try 
        {
            $subjectList = $this->executeQueryForList($query.$whereQuery);
        } 
        catch (\Exception $e) 
        {
            throw new ProfessionalException(ProfessionalException::ERROR_FETCHING_SUBJECTS,"Cannot fetch Subjects! Please try again");
        }
        return $subjectList;
    }
   
    /**
     * Search Batch Paper Subject Details
     * @param SearchBatchPaperSubjectRequest $request
     * @return batchpapersubject
     */
    public function searchBatchPaperSubject(SearchBatchPaperSubjectRequest $request)
    {
        $request = $this->realEscapeObject($request);
        $whereQuery = "";
        $limitQuery = "";
        if(!empty($request->id)) {
            $whereQuery .= " AND bps.id='$request->id";
        }
        if (!empty($request->groupsIds) && count($request->groupsIds) > 0) {
            $result = "'" . implode ( "', '", $request->groupsIds ) . "'";
            $whereQuery .= " AND bps.groups_id IN ($result";
        }
        if (!empty($request->academicPaperSubjectsIds) && count($request->academicPaperSubjectsIds) > 0) {
            $result = "'" . implode ( "', '", $request->academicPaperSubjectsIds ) . "'";
            $whereQuery .= " AND bps.cm_academic_paper_subjects_id IN ($result";
        }
        if($request->trashed === StatusConstants::ACTIVE) {
            $whereQuery .= " AND bps.trashed IS NULL ";
        }
        if($request->trashed === StatusConstants::TRASHED) {
            $whereQuery .= " AND bps.trashed IS NOT NULL ";
        }
        
        if($request->startIndex !== "" && $request->endIndex !== "") {
            $limitQuery .= " LIMIT $request->startIndex,$request->endIndex";
        }
        $query = "SELECT
            bps.id,
            bps.groups_id,
            bps.cm_academic_paper_subjects_id,
            bps.properties,
            bps.trashed,
            bps.created_by,
            bps.created_date,
            bps.updated_by,
            bps.updated_date,
            g.name AS `GroupName`,
            g.type AS `GroupType`,
            g.identifying_context,
            g.properties AS `GroupProperties`,
            aps.paper_id,
            aps.subject_id,
            aps.properties AS `academicPaperSubjectsProperties`,
            ap.name AS `academicPaperName`,
            ap.type AS `academicPaperType`,
            ap.academic_term_id,
            ap.properties AS `academicPaperProperties`
        FROM
            `batch_paper_subject` bps
        INNER JOIN `groups` g ON
            g.id = bps.groups_id
        INNER JOIN `cm_academic_paper_subjects` aps ON
            aps.id = bps.cm_academic_paper_subjects_id
        INNER JOIN `cm_academic_paper` ap ON
            ap.id = aps.paper_id
        WHERE
            1 = 1";
        try {
            $batchpapersubject = $this->executeQueryForList($query.$whereQuery.$limitQuery, $this->mapper[BatchPaperSubjectServiceMapper::SEARCH_BATCH_PAPER_SUBJECT]);
        } catch (\Exception $e) {
            throw new ProfessionalException(ProfessionalException::ERROR_FETCHING,"Cannot fetch batch paper subject details! Please try again.");
        }
        return $batchpapersubject;
    } 
}