<?php

namespace OfficeBrain\Bundle\AccessManagementBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * @author OfficeBrain 4273 <info@officebrain.com>
 *
 */

/**
 * ProjectAccessMasterRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ProjectAccessMasterRepository extends EntityRepository
{
    public function getAllProjectAccessMasterObject()
    {
        $objPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objPAMs;
    }
    
    public function getAllProjectAccessMasterArray()
    {
        $arrPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getArrayResult();
        return $arrPAMs;
    }
    
    public function getProjectAccessMasterDataByIds($arrIds)
    {
        $objPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->andWhere('PAM.id IN (:ids)')
                ->setParameter('ids', $arrIds)
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objPAMs;
    }
    
    public function getProjectAccessMasterDataById($Id)
    {
        $objPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->andWhere('PAM.id=:id')
                ->setParameter('id', $Id)
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getOneOrNullResult();
        return $objPAMs;
    }
    
    public function getSubDomianProjectAccessMasterData($instanceId=0)
    {
        $objPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceAccessMapping', 'IAM', 'WITH', 'IAM.access=PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceMaster', 'IM', 'WITH', 'IM=IAM.instance')
                ->andWhere('IM.id=:id')
                ->setParameter('id', $instanceId)
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objPAMs;
    }
    
    
    public function getSubDomianProjectAccessMasterDataByUser($objUser=null)
    {
        $objPAMs = $this->createQueryBuilder('PAM');
        $objPAMs = $objPAMs->select('PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceUserAccessMapping', 'IUAM', 'WITH', 'IUAM.instanceAccess=PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceMaster', 'IM', 'WITH', 'IM=IUAM.instance')
                ->andWhere($objPAMs->expr()->eq('IUAM.user', ':objUser'))
                ->setParameter('objUser', $objUser)
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objPAMs;
    }
    
    public function getSubDomianProjectAccessMasterDataByIds($instanceId=0, $arrIds)
    {
        $objPAMs = $this->createQueryBuilder('PAM')
                ->select('PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceAccessMapping', 'IAM', 'WITH', 'IAM.access=PAM')
                ->innerJoin('OfficeBrainAccessManagementBundle:InstanceMaster', 'IM', 'WITH', 'IM=IAM.instance')
                ->andWhere('IM.id=:id')
                ->setParameter('id', $instanceId)
                ->andWhere('PAM.id IN (:ids)')
                ->setParameter('ids', $arrIds)
                ->addOrderBy('PAM.parent', 'ASC')
                ->getQuery()// -> getSQL();
                ->getResult();
        return $objPAMs;
    }
    
    public function getMaxIdfromAccessMaster()
    {
        $maxPAMId = $this->createQueryBuilder('PAM')
                ->select('MAX(PAM.id)')
                ->getQuery()// -> getSQL();
                ->getSingleScalarResult();
        return $maxPAMId;
    }
}
