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 / 19
CRAP
0.00% covered (danger)
0.00%
0 / 274
PoGroupService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 19
2550.00
0.00% covered (danger)
0.00%
0 / 274
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 __clone
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 2
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 5
 createNewPoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 12
 updatePoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 deletePoGroupById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 addPoToPoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 checkIfPoAlreadyAddedToPo
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 13
 addBatchToPoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 addBatchListToPoGroup
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 15
 removeBatchFromPoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 removeAllBatchFromPoGroup
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 searchPoGroup
0.00% covered (danger)
0.00%
0 / 1
90.00
0.00% covered (danger)
0.00%
0 / 57
 getBatchDetailsByGroupIds
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 18
 getBatchDetailsByGroupId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 17
 getGroupDetailsById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 getPoListByGroupId
0.00% covered (danger)
0.00%
0 / 1
42.00
0.00% covered (danger)
0.00%
0 / 18
 getGroupDetailsByBatchId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 18
 getBatchesListForAddingToGroup
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 21
<?php
namespace com\linways\core\ams\professional\service\nba;
use com\linways\core\ams\professional\service\BaseService;
use com\linways\core\ams\professional\exception\ProfessionalException;
use com\linways\core\ams\professional\mapper\nba\PoGroupServiceMapper;
use com\linways\core\ams\professional\request\nba\SearchPoGroupRequest;
class PoGroupService extends BaseService
{
    // /Condition 1 - Presence of a static member variable
    private static $_instance = null;
    private $mapper = [];
    // /Condition 2 - Locked down the constructor
    private function __construct()
    {
        $this->mapper = PoGroupServiceMapper::getInstance()->getMapper();
    }
    // 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;
    }
    /**
     * Undocumented function
     *
     * @param PoGroup $poGroup
     * @return void
     */
    public function createNewPoGroup($poGroup)
    {
        $poGroup = $this->realEscapeObject($poGroup);
        $sql = "";
        $id = null;
        $sql = "INSERT INTO nba_po_group(name, description, dept_id, created_by, created_date, updated_by, updated_date) VALUES('$poGroup->name', '$poGroup->description', '$poGroup->deptId', $poGroup->createdBy, UTC_TIMESTAMP(), $poGroup->updatedBy, UTC_TIMESTAMP())";
        try {
            $id = $this->executeQuery($sql, true);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $id;
    }
    /**
     * Undocumented function
     *
     * @param PoGroup $poGroup
     * @return void
     */
    public function updatePoGroup($poGroup){
        $poGroup = $this->realEscapeObject($poGroup);
        $sql = "";
        $sql = "UPDATE nba_po_group SET name = '$poGroup->name', description= '$poGroup->description', updated_by = '$poGroup->updatedBy' WHERE id = $poGroup->id";
        try {
           $this->executeQuery($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $poGroup;
    }
    /**
     * Undocumented function
     *
     * @param integer $groupId
     * @return void
     */
    public function deletePoGroupById($groupId){
        $groupId = $this->realEscapeString($groupId);
        $sql = "";
        $sql = "DELETE FROM nba_po_group WHERE id = '$groupId'";
        try {
           $this->executeQuery($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return true;
    }
    /**
     * Undocumented function
     *
     * @param [type] $poList
     * @return void
     */
    public function addPoToPoGroup($poGroupToPoMapping){
        $poGroupToPoMapping = $this->realEscapeObject($poGroupToPoMapping);
        $sql = "";
        $id = null;
        $sql = "INSERT INTO nba_po_group_to_po_mapping(po_id, nba_po_group_id, created_by, created_date, updated_by, updated_date) VALUES($poGroupToPoMapping->poId$poGroupToPoMapping->groupId$poGroupToPoMapping->createdBy, UTC_TIMESTAMP(), $poGroupToPoMapping->updatedBy, UTC_TIMESTAMP())";
        try{
            $id = $this->executeQueryForObject($sql, true);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $id;
    }
    /**
     * Return true if the given group contains a po
     *
     * @param [PoGroupToPoMapping] $poGroup
     * @return void
     */
    public function checkIfPoAlreadyAddedToPo($poGroupToPoMapping){
        $sql = "";
        $id = null;
        $sql = "SELECT id FROM nba_po_group_to_po_mapping WHERE po_id = $poGroupToPoMapping->poId";
        try{
            $id = $this->executeQueryForObject($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        if(!empty($id)){
            return true;
        }
        return false;
    }
    /**
     * Undocumented function
     *
     * @param PoGroupToBatchMapping $batchesList
     * @return void
     */
    public function addBatchToPoGroup($batchMapping){
        $batchMapping = $this->realEscapeObject($batchMapping);
        $sql = "";
        $id = null;
        $sql = "INSERT INTO nba_po_group_to_batches_mapping(nba_po_group_id, batch_id, created_by, created_date, updated_by, updated_date) VALUES('$batchMapping->groupId', '$batchMapping->batchId', '$batchMapping->createdBy', UTC_TIMESTAMP(), '$batchMapping->updatedBy', UTC_TIMESTAMP())";
        
        try{
            $id = $this->executeQueryForObject($sql, true);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $id;
    }
    /**
     * Undocumented function
     *
     * @param [PoGroupToBatchMapping] $batchesList
     * @return void
     */
    public function addBatchListToPoGroup($batchMappingList){
        $batchMappingList = $this->realEscapeObject($batchMappingList);
        $sql = "";
        $values = [];
        $sql = "INSERT INTO nba_po_group_to_batches_mapping(nba_po_group_id, batch_id, created_by, created_date, updated_by, updated_date) VALUES ";
        $values = [];
        foreach($batchMappingList as $batchMapping){
            $values[] = "('$batchMapping->groupId', '$batchMapping->batchId', '$batchMapping->createdBy', UTC_TIMESTAMP(), '$batchMapping->updatedBy', UTC_TIMESTAMP())";
        }
        $sql .= implode(',', $values);
        
        try{
            $this->executeQuery($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
    }
    /**
     * Undocumented function
     *
     * @param [PoGroupToBatchMapping] $batchMapping
     * @return void
     */
    public function removeBatchFromPoGroup($batchMapping){
        $batchMapping = $this->realEscapeObject($batchMapping);
        $sql = "";
        $values = [];
        $sql = "DELETE FROM nba_po_group_to_batches_mapping WHERE nba_po_group_id = $batchMapping->groupId AND batch_id = $batchMapping->batchId";
        try{
            $this->executeQuery($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return true;
    }
   /**
     * Undocumented function
     *
     * @param [PoGroupToBatchMapping] $batchMapping
     * @return void
     */
    public function removeAllBatchFromPoGroup($batchMapping){
        $batchMapping = $this->realEscapeObject($batchMapping);
        $sql = "";
        $values = [];
        $sql = "DELETE FROM nba_po_group_to_batches_mapping WHERE nba_po_group_id = $batchMapping->groupId";
        try{
            $this->executeQuery($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return true;
    }
  
    
    /**
     * Undocumented function
     *
     * @param SearchPoGroupRequest $request
     * @return void
     */
    public function searchPoGroup($request){
        $request = $this->realEscapeObject($request);
        $ids = implode("','", $request->groupIds);
        $sql = "SELECT 
        npg.id AS npg_id,
        npg.name AS npg_name,
        npg.description AS npg_description,
        npgm.id AS npgm_id,
        npgm.nba_po_group_id AS npgm_nba_po_group_id,
        bat.batchID AS batchId,
        bat.batchName,
        bat.batchDesc,
        bat.semID as semId,
        po.id AS poId,
        po.poCode,
        po.poName,
        po.poDesc,
        po.order_no,
        po.isPSO
    FROM
        nba_po_group npg
            LEFT JOIN
        nba_po_group_to_po_mapping npgm ON npgm.nba_po_group_id = npg.id
            LEFT JOIN
        nba_po_group_to_batches_mapping npbm ON npbm.nba_po_group_id = npg.id
            LEFT JOIN
        batches bat ON bat.batchID = npbm.batch_id
            LEFT JOIN
        nba_program_outcome po ON po.id = npgm.po_id WHERE npg.id IS NOT NULL ";
        $groupList = [];
        if(!empty($request->createdBy)){
            $sql .= "AND npg.created_by = $request->createdBy";
        }
        if(!empty($request->groupId)){
            $sql .= "AND npg.id = $request->groupId";
        }
        if(!empty($request->groupIds)){
            $sql .= "AND npg.id in ('".$ids."')";
        }
        if(!empty($request->deptId)){
            $sql .= "AND npg.dept_id = $request->deptId";
        }
        if(!empty($request->isSeparatePso)){
            if($request->isSeparatePso == 1){
                $sql .= "AND  po.isPSO=0";
            }
            if($request->isSeparatePso == 2){
                $sql .= "AND  po.isPSO=1";
            }
        }
        $sql .= " ORDER BY npg.id, po.order_no";
        try{
            $groupList = $this->executeQueryForList($sql, $this->mapper[PoGroupServiceMapper::SEARCH_PO_GROUP]);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $groupList;
    }
    public function getBatchDetailsByGroupIds($groupIds){
        $sql = "";
        $groupIds = $this->realEscapeArray($groupIds);
        $ids = implode("','", $groupIds);
        $sql = "SELECT 
                    nbm.nba_po_group_id, nbm.batch_id as batchId, batches.batchName, batches.semID as semId
                FROM
                    nba_po_group_to_batches_mapping nbm
                        INNER JOIN
                    batches ON (batches.batchID = nbm.batch_id)
                WHERE
                    nbm.nba_po_group_id IN ('".$ids."')";
                
        try{
            $batchesByGroupIds = $this->executeQueryForList($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $batchesByGroupIds;
        
    }
    
    public function getBatchDetailsByGroupId($groupId){
        $sql = "";
        $groupId = $this->realEscapeString($groupId);
        $sql = "SELECT 
                    nbm.nba_po_group_id, nbm.batch_id as batchId, batches.batchName, batches.semID as semId
                FROM
                    nba_po_group_to_batches_mapping nbm
                        INNER JOIN
                    batches ON (batches.batchID = nbm.batch_id)
                WHERE
                    nbm.nba_po_group_id = $groupId ";
                
        try{
            $batchesByGroupIds = $this->executeQueryForList($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $batchesByGroupIds;
        
    }
    
    /**
     * Undocumented function
     *
     * @param integer $groupId
     * @return void
     */
    public function getGroupDetailsById($groupId){
        $sql = "";
        $groupDetails = null;
        $groupId = $this->realEscapeString($groupId);
        $sql = "SELECT id, name, description, dept_id as deptId FROM nba_po_group WHERE id = $groupId ";
        try{
            $groupDetails = $this->executeQueryForObject($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $groupDetails;
    }
    /**
     * Undocumented function
     *
     * @param integer $groupId
     * @return void
     */
    public function getPoListByGroupId($groupId, $includePo = true, $includePso = true){
        $sql = "";
        $poList = [];
        $groupId = $this->realEscapeString($groupId);
        $sql = "SELECT po.id, po.poName as name, po.poDesc as description, po.poCode as code, po.isPSO, po.order_no as orderNo FROM nba_program_outcome po INNER JOIN nba_po_group_to_po_mapping npm ON npm.po_id = po.id WHERE npm.nba_po_group_id = '$groupId";
        if($includePo && !$includePso){
            $sql .= " AND po.isPso = 0 ";
        }
        if(!$includePo && $includePso){
            $sql .= " AND po.isPso = 1 ";
        }
        $sql .= " ORDER BY po.order_no";
        try{
            $poList = $this->executeQueryForList($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $poList;
    }
    /**
     * Undocumented function
     *
     * @param integer $batchId
     * @return void
     */
    public function getGroupDetailsByBatchId($batchId){
        $sql = "";
        $batchId = $this->realEscapeString($batchId);
        $group = null;
        $sql = "SELECT 
                    npg.id, npg.name, npg.description, npg.dept_id
                FROM
                    nba_po_group npg
                        INNER JOIN
                    nba_po_group_to_batches_mapping nbm ON nbm.nba_po_group_id = npg.id
                WHERE
                    nbm.batch_id = '$batchId'";
        try{
            $group = $this->executeQueryForObject($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $group;
        
    }
    /**
     * Undocumented function
     *
     * @param GetBatchesListForPoGroupRequest $request
     * @return void
     */
    public function getBatchesListForAddingToGroup($request){
        $sql = "";
        $batchList = [];
        $request = $this->realEscapeObject($request);
        $sql = " SELECT batchID as id,
                        batchName as name,
                        batchDesc as description,
                        batchStartYear as startYear,
                        batchEndYear as endYear,
                        batchCreateTime as createdDate,
                        semID as currentSemId
                FROM batches WHERE  deptID = '$request->deptId' AND batchID NOT IN (SELECT DISTINCT batch_id FROM nba_po_group_to_batches_mapping WHERE nba_po_group_id <>'$request->groupId')";
                
                if(!empty($request->batchName)){
                    $sql .= " AND (batchName LIKE '%$request->batchName%' OR batchDesc LIKE '%$request->batchName%')";
                }
        try{
            $batchList = $this->executeQueryForList($sql);
        }catch(\Exception $e){
            throw new ProfessionalException($e->getCode(), $e->getMessage());
        }
        return $batchList;
    }
}