/**
  * @param Site $site
  * @param $id
  * @return mixed
  * @throws \Doctrine\ORM\NonUniqueResultException
  */
 public function findOneBySiteAndType(Site $site, $id)
 {
     $siteIds = $site->getParentSiteIds();
     array_push($siteIds, $site->getId());
     $q = $this->createQueryBuilder('o')->where('o.site IN (:site_ids)')->leftJoin('o.branch', 'b')->andWhere('o.deleted = 0')->setParameter('site_ids', $siteIds);
     $siteBranch = $site->getSettings()->getBranch();
     $siteType = $site->getSiteType();
     $siteTypeKey = '';
     if (isset($siteType)) {
         $siteTypeKey = $siteType->getKeyName();
     }
     if (isset($siteBranch) && $siteTypeKey == 'branch') {
         $q->andWhere('o.id = :id AND b.id = :branch_id');
         $q->setParameter('id', $id);
         $q->setParameter('branch_id', $siteBranch->getId());
     } else {
         $q->andWhere('o.id = :id');
         $q->setParameter('id', $id);
     }
     $result = $q->getQuery()->getOneOrNullResult();
     return $result;
 }