<?php

namespace OfficeBrain\Bundle\EcatalogueBundle\Entity;

use Doctrine\ORM\EntityRepository;
// use Symfony\Component\Validator\Constraints\Null;
use Symfony\Component\Form\FormError;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\MessageSelector;
use Symfony\Component\Translation\Loader\YamlFileLoader;
use Doctrine\ORM\Query\Expr;

/**
 * EcatalogueRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class EcatalogueRepository extends EntityRepository
{
	protected $projectSetting;
	protected $projectUserSetting;
	protected $instanceId;
	protected $instanceType;
	protected $cultureId;
	protected $cultureCode;
	protected $userType;
	protected $projectSettingService;
	protected $subshopInstanceId;
	protected $loginUser;
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - getPaginatorService
	 * Function created to get Paginator Service
	 */
	public function getPaginatorService()
	{
		return $this->paginatorService;
	}
	
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - setPaginatorService
	 * Function created to set Paginator Service
	 */
	public function setPaginatorService($paginatorService)
	{
		$this->paginatorService = $paginatorService;
	}
	
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - getProjectSetting
	 * Function created to get Project Setting
	 */
	public function getProjectSetting() {
		return $this->projectSetting;
	}
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - setProjectSetting
	 * Function created to set Project Setting
	 */
	public function setProjectSetting($projectSetting) {
		$this->projectSetting = $projectSetting;
		$this->prepareProjectSettingData();
	}
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - getProjectUserSetting
	 * Function created to set Project user Setting
	 */
	
	public function getProjectUserSetting() {
		return $this->projectUserSetting;
	}
	/**
	 * @author Employee Id: 4488
	 * OB eCommerce Product - setProjectUserSetting
	 * Function created to set Project User Setting
	 */
	public function setProjectUserSetting($projectUserSetting) {
		$this->projectUserSetting = $projectUserSetting;
		$this->prepareProjectUserSettingData();
		
	}
	public function getInstanceId() {
		return $this->instanceId;
	}
	public function setInstanceId($instanceId) {
		$this->instanceId = $instanceId;
		return $this;
	}
	
	public function getSubshopInstanceId()
	{
		return $this->subshopInstanceId;	
	}
	public function setSubshopInstanceId($subshopInstanceId)
	{
		$this->subshopInstanceId=$subshopInstanceId;
		return $this;
	}
	
	
	public function getInstanceType() {
		return $this->instanceType;
	}
	public function setInstanceType($instanceType) {
		$this->instanceType = $instanceType;
		return $this;
	}
	public function getCultureId() {
		return $this->cultureId;
	}
	public function setCultureId($cultureId) {
		$this->cultureId = $cultureId;
		return $this;
	}
	public function getCultureCode() {
		return $this->cultureCode;
	}
	public function setCultureCode($cultureCode) {
		$this->cultureCode = $cultureCode;
		return $this;
	}
	public function getUserType() {
		return $this->userType;
	}
	public function setUserType($userType) {
		$this->userType = $userType;
		return $this;
	}
	public function getProjectSettingService() {
		return $this->projectSettingService;
	}
	public function setProjectSettingService($projectSettingService) {
		$this->projectSettingService = $projectSettingService;
		return $this;
	}
	/**
	 * 
	 */
	public function getAllSupplier()
	{
			$query=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->createQueryBuilder('u');
			$query->select('u.id','u.firstName','u.lastName');
			$query->where("u.userType='supplier'");
			$query->andWhere("u.status='active'");
			if($this->getSubshopInstanceId())
			{
				$query->andWhere("u.instanceId=:instanceId")->setParameter('instanceId', $this->getSubshopInstanceId());
			}elseif (isset($this->instanceId)) {
				$query->andWhere("u.instanceId=:instanceId")->setParameter('instanceId', $this->instanceId);
			}
			$query->andWhere("u.locked is NULL");
			$query->andWhere("u.expired is NULL");
			$query->andWhere("u.deletedAt is NULL");
			
			$query->andWhere("u.parent =:userId")
			->orWhere("u.createdUid =:userId")
			->setParameter('userId', $this->userId);
			
			return $query->getQuery()->getArrayResult();
	}
	public function prepareProjectUserSettingData()
	{
		$this->user = $this->projectUserSetting['user_data'];
		if(!empty($this->user))
		{
			$this->userType = $this->user->getUserType();
			$this->parentId = null;
			if(is_object($this->user->getParent())){
				$this->parentId = $this->user->getParent()->getId();
			}
		}
	}
	public function prepareProjectSettingData()
	{
		$this->userId = $this->projectSetting['user_id'];
		$this->createdUid = $this->upatedUid = $this->userId;
		$this->instanceId = $this->projectSetting['instance_id'];
		$this->instanceType = $this->projectSetting['instance_type'];
		$this->cultureId = $this->projectSetting['culture_id'];
		$this->cultureCode = $this->projectSetting['culture_code'];
		$this->loginUser= $this->userId>0?'register':'guest';
		$this->site_owner_id = $this->projectSetting['site_owner_id'];
		
	}
	public function saveEcatalogue($ecatalogueData)
	{
		$suppId = $ecatalogueData->getSupplier();
		$categoryData=$ecatalogueData->getCategory()?implode(',',$ecatalogueData->getCategory()):'';
		$ecatalogueData->setCategory($categoryData);
		$ecatalogueData->setUserType($this->userType);
		$ecatalogueData->setInstanceType($this->instanceType);
		$ecatalogueData->setInstanceId($this->instanceId);
		$ecatalogueData->setUser($this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->find($this->userId)); // need to set Object
		$ecatalogueData->setSupplier($this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->find($suppId));
		
		$ecatalogueLanguage=$ecatalogueData->getEcatalogueLanguage();
		foreach ($ecatalogueLanguage as $language) {
			$language->setEcatalogueId($ecatalogueData);
			if (($language->getCatalogueUrl() !='') && (strpos($language->getCatalogueUrl(),'http://')=== false ) && (strpos($language->getCatalogueUrl(),'https://')=== false ))
				$language->setCatalogueUrl('http://'.$language->getCatalogueUrl());
			else
				$language->setCatalogueUrl($language->getCatalogueUrl());
			if($language->getCatalogueImage())
				$language->setCatalogueImage($language->getCatalogueImage()->getClientOriginalName());
			if($language->getCatalogueFile())
				$language->setCatalogueFile($language->getCatalogueFile()->getClientOriginalName());
			
		}
// 		$this->checkCatalogueFile($ecatalogueLanguage,$ecatalogueData);
		
		
		$this->getEntityManager()->persist($ecatalogueData);
		$this->getEntityManager()->flush();
		return $ecatalogueData;
	}
	
	public function getEcatalogueRecordSet($userId,$countFlagForStatus,$countryId,$languageId,$adminUser,$page='',$recordPerPage='',$option='',$keywords='',$categoryOption='')
	{	
		
		$query_status_update=$this->createQueryBuilder('ecatlog');
		$query_status_update->update();
		$query_status_update->set('ecatlog.status',0);
		$query_status_update->where('ecatlog.endDate < :now'); // new
		$query_status_update->setParameter("now", new \DateTime(date('Y-m-d 00:00:00')));
		$query_status_update->getQuery()->execute();

		$count = $this->createQueryBuilder('ecatlog')->select('COUNT(ecatlog)')->getQuery()->getSingleScalarResult();
		$userObj = $this->projectUserSetting['user_data'];
		$query=$this->createQueryBuilder('ecatlog');
 		$query->select('ecatlog.id','ecatlog.countryId','ecatlog.category','ecatlog.status','elang.ecatalogueTitle','elang.catalogueUrl','elang.catalogueFile','elang.catalogueImage','ecatlog.endDate');
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		$query->where("ecatlog.instanceType = :insType");
		$query->setParameter('insType', $this->instanceType);
		$query->andWhere("ecatlog.instanceId = :instanceTypeId");
		$query->setParameter('instanceTypeId', $this->instanceId);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		if(!$adminUser){
			$query->andwhere('ecatlog.user = :userID')
			->setParameter('userID', $this->userId);
		}
		if($option!='')
		{
			$query->andWhere('ecatlog.supplier = :suppId');
			$query->setParameter('suppId', $option);
		}
		if($keywords!='')
		{
			$query->andWhere('elang.ecatalogueTitle LIKE :keyword');
			$query->setParameter('keyword', '%'.trim($keywords).'%');
		}
		if($categoryOption !='')
		{
			$query->andWhere('ecatlog.category LIKE :categoryKeyword');
			$query->setParameter('categoryKeyword', '%'.trim($categoryOption).'%');
		}
// 		$query->groupBy('elang.ecatalogueTitle');
		$query->orderBy('ecatlog.id','DESC');
		if($countFlagForStatus == '1'){
			return $query->getQuery()->getScalarResult();
		}
		$query->getQuery()->setHint('knp_paginator.count', $count);
		return $this->paginatorService->paginate($query, $page, $recordPerPage);
		
	}
	public function getEcatalogueRecordSetCount($userId,$countFlagForStatus,$countryId,$languageId,$adminUser,$page='',$recordPerPage='',$option='',$keywords='',$categoryOption='')
	{
		$count = $this->createQueryBuilder('ecatlog')->select('COUNT(ecatlog)')->getQuery()->getSingleScalarResult();
	
		$userObj = $this->projectUserSetting['user_data'];
		$query=$this->createQueryBuilder('ecatlog');
		$query->select('ecatlog.id','ecatlog.countryId','ecatlog.category','ecatlog.status','elang.ecatalogueTitle','elang.catalogueUrl','elang.catalogueFile','elang.catalogueImage', 'ecatlog.endDate');
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		$query->where("ecatlog.instanceType = :supplier");
		$query->setParameter('supplier', $this->instanceType);
		$query->andWhere("ecatlog.instanceId = :instanceTypeId");
		$query->setParameter('instanceTypeId', $this->instanceId);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		if(!$adminUser){
			$query->andwhere('ecatlog.user = :userID')
			->setParameter('userID', $this->userId);
		}
                if($option!='')
		{
			$query->andWhere('ecatlog.supplier = :suppId');
			$query->setParameter('suppId', $option);
		}
		if($keywords!='')
		{
			$query->andWhere('elang.ecatalogueTitle LIKE :keyword');
			$query->setParameter('keyword', '%'.trim($keywords).'%');
		}
		if($categoryOption !='')
		{
			$query->andWhere('ecatlog.category LIKE :categoryKeyword');
			$query->setParameter('categoryKeyword', '%'.trim($categoryOption).'%');
		}
		$query->groupBy('elang.ecatalogueTitle');
		if($countFlagForStatus == '1'){
			return $query->getQuery()->getScalarResult();
		}
		
	}
	
	// 4571 -- new 
	public function getAllEcatalogue($languageId, $countryId, $adminUser)
	{
		$query =$this->getEntityManager()->getRepository('OfficeBrainEcatalogueBundle:Ecatalogue')->createQueryBuilder('ecatlog');
		  
		$query->leftJoin('ecatlog.ecatalogueLanguage', 'elang');
		$query->leftJoin('ecatlog.prioritizeCatalogue', 'priorecat');
		$query->where("ecatlog.instanceType = :supplier");
		$query->setParameter('supplier', $this->instanceType);
		$query->andWhere("ecatlog.instanceId = :instanceTypeId");
		$query->setParameter('instanceTypeId', $this->instanceId);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status  =  1 ');
		
		
		if ($countryId > 0) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId > 0) { 
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
	
		$query->orderBy('priorecat.catalogueOrder', 'ASC');
		 
	    $data =  $query->getQuery()->getResult();
	   /*  echo get_class($data[0]->getSupplier()); die;
	    echo "<pre>";
	    print_r($data[0]); die;
	    //echo $data[0]->getSupplier()->getFirstName(); die;
	    echo get_class($data[0]); die;
	    echo is_object($data[0]); die; */
	     
	    return $data; 
	}
	
	public function getEcatalogueSearchRecordSet($userId,$countFlagForStatus,$countryId,$option,$keywords,$adminUser,$categoryOption,$page, $recordsPerPage)
	{
		$count = $this->createQueryBuilder('ecatlog')->select('COUNT(ecatlog)')->getQuery()->getSingleScalarResult();
		$query=$this->createQueryBuilder('ecatlog');
		$query->select('ecatlog.id','ecatlog.countryId','ecatlog.category','ecatlog.status','elang.ecatalogueTitle','elang.catalogueUrl','elang.catalogueFile','elang.catalogueImage','ecatlog.endDate');
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		 if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if($option!='')
		{
			$query->andWhere('ecatlog.supplier = :suppId');
			$query->setParameter('suppId', $option);
		}
		if($keywords!='')
		{
			$query->andWhere('elang.ecatalogueTitle LIKE :keyword');
			$query->setParameter('keyword', '%'.trim($keywords).'%');
		}
		if(!$adminUser){
			$query->andwhere('ecatlog.user = :userID')
			->setParameter('userID', $this->userId);
		}
		if($categoryOption !='')
		{
			$query->andWhere('ecatlog.category LIKE :categoryKeyword');
			$query->setParameter('categoryKeyword', '%'.trim($categoryOption).'%');
		}
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->groupBy('ecatlog.id');
		$query->orderBy('elang.ecatalogueTitle');
		
		if($countFlagForStatus == '1')
			return $query->getQuery()->getScalarResult();
		else
		{
			$query->getQuery()->setHint('knp_paginator.count', $count);
			return $this->paginatorService->paginate($query, $page, $recordsPerPage);
		}
	}
	
	public function getEcatalogueDetailsById($ecatalogueId)
	{
		$query = $this->createQueryBuilder('ecatlog');
		$query->select(['ecatlog', 'ecatlogLang','supplier.firstName','supplier.lastName']);
		$query->leftJoin('ecatlog.ecatalogueLanguage', 'ecatlogLang');
		$query->leftJoin('ecatlog.supplier', 'supplier');
		if ($ecatalogueId) {
			$query->where('ecatlog.id = :ecatId');
			$query->setParameter('ecatId', $ecatalogueId);
		}
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$result = $query->getQuery()->getArrayResult();
		return $result;
	}
	
	public function getEcatalogueEditDetailsById($ecatalogueId)
	{
		$query = $this->createQueryBuilder('ecatlog');
		$query->select(['ecatlog', 'ecatlogLang']);
		$query->leftJoin('ecatlog.ecatalogueLanguage', 'ecatlogLang');
		if ($ecatalogueId) {
			$query->where('ecatlog.id = :ecatId');
			$query->setParameter('ecatId', $ecatalogueId);
		}
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$result = $query->getQuery()->getArrayResult();
		return $result;
	}
	
	public function deleteEcatalogue($ecatalogueId)
	{
		$queryBuilder = $this->createQueryBuilder('ecatalog')
		->delete()
		->where('ecatalog.id = :ecatlogId')
		->setParameter('ecatlogId', $ecatalogueId);
		return $queryBuilder->getQuery()->execute();
	}
	
	public function copyData($ecatalogClone)
	{
		$this->_em->detach($ecatalogClone);
		$this->_em->persist($ecatalogClone);
		$this->_em->flush();
		return true;
	}
	
	public  function getEcatalogueObject($id)
	{
		$query=$this->createQueryBuilder('ecatlog');
		$query->select(['ecatlog','elang']);
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		$query->where('ecatlog.id = :ecatId');
		$query->setParameter('ecatId', $id);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		return  $query->getQuery()->getScalarResult();
	}
	
	public function set($ecatalogue)
	{
		$this->_em->persist($ecatalogue);
		return $ecatalogue;
	}
	public function FindById($ecatlogueId)
	{
		$query = $this->createQueryBuilder('ecatlog')->select('ecatlog');
		$query->where('ecatlog.id = :ecatId');
		$query->setParameter('ecatId', $ecatlogueId);
		return $query->getQuery()->getScalarResult()[0];
	}
	
	public function updateStatus($ecatalogueObj)
	{
		if ($ecatalogueObj) {
			$this->_em->persist($ecatalogueObj);
			$this->_em->flush();
			return array('status'=>'SUCCESS','data'=>$ecatalogueObj);
		}
		return array('status'=>'FAIL');
	}
	
	public function editEcatalogue($ecatalogueData,$ecatalogueLanguageData)
	{
		$suppId = $ecatalogueData->getSupplier();
		$ecatalogueData->setSupplier($this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->find($suppId));
		$ecatalogueData->setUser($this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->find($this->userId)); // need to set Object
		$categoryData=implode(',',$ecatalogueData->getCategory());
		$ecatalogueData->setCategory($categoryData);
		$ecatalogueData->setUserType($this->instanceType);
		$ecatalogueData->setInstanceType($this->instanceType);
		$ecatalogueData->setInstanceId($this->instanceId);
		$ecatalogueLanguage=$ecatalogueData->getEcatalogueLanguage();
// 		$th	is->checkCatalogueFile($ecatalogueLanguage,$ecatalogueData,$ecatalogueLanguageData);
		foreach ($ecatalogueLanguage as $key=>$value) {
				$ecatalogueLanguage[$key]->setEcatalogueId($ecatalogueData);
				if($ecatalogueLanguage[$key]->getCatalogueImage())
					$ecatalogueLanguage[$key]->setCatalogueImage($ecatalogueLanguage[$key]->getCatalogueImage()->getClientOriginalName());
				else
				{
					$ecatalogueLanguage[$key]->setCatalogueImage($ecatalogueLanguageData[$key]['catalogueImage']);
				}
				if($ecatalogueLanguage[$key]->getCatalogueFile())
					$ecatalogueLanguage[$key]->setCatalogueFile($ecatalogueLanguage[$key]->getCatalogueFile()->getClientOriginalName());
				else
					$ecatalogueLanguage[$key]->setCatalogueFile($ecatalogueLanguageData[$key]['catalogueFile']);
		}	
		$this->_em->persist($ecatalogueData);
        $this->_em->flush();
        return $ecatalogueData;
		
	} 
	
	public function getActiveEcatalogueRecordSet($userId,$countryId,$languageId)
	{
		
		$userType = '';
		$userArray=array();
		$instanceArray=array($this->instanceId);
		if($this->instanceType == "sub_shop" || $this->instanceType =="distributor")
		{
			$user=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->findOneBy(array('id'=>$this->site_owner_id));
			$userType =  $user->getUserType();
			$instanceArray=array($this->instanceId,$user->getParent()->getInstanceId());
		}
		$query=$this->createQueryBuilder('ecatlog');
		if(($this->instanceType == "sub_shop" || $this->instanceType == "distributor") && ($userType =="distributor" || $userType =="admin"))
		{
			$query->select(['ecatlog','elang','priorecat']);
		}
		else
		{
			$query->select(['ecatlog','elang']);
		}
		$query->leftJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		if ($countryId > 0) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId > 0) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		/* if($user)
		{
			$userArray=array($user->getParent()->getId(),$this->site_owner_id);
		} */
		
		if($this->instanceType == "distributor")
		{
			$this->site_owner_id=$user->getParent()->getId();
		}
		if(($this->instanceType == "sub_shop" || $this->instanceType == "distributor") && ($userType =="distributor" || $userType =="admin"))
		{
			$query->leftJoin("OfficeBrainEcatalogueBundle:PrioritizeCatalogue", 'priorecat','With','ecatlog.id=priorecat.catalogue and priorecat.user=:priUserId');
			$query->setParameter("priUserId", $this->site_owner_id);
		}
		
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status  =  1 ');
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00')));
		$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		/* if($this->instanceType == "distributor" or $this->instanceType == "sub_shop")
		{
			$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		} */  
		
		if(($this->instanceType == "sub_shop" || $this->instanceType == "distributor") && ($userType =="distributor" || $userType =="admin"))
		{
			$query->orderBy('priorecat.catalogueOrder', 'ASC');
		}
		else
		{
			$query->orderBy("elang.ecatalogueTitle","ASC");
		}
		
		$data = $query->getQuery()->getScalarResult();
		return $data;
				
	}
	public function getUserSubShop($userId='')
	{
		$userSubShopObj=$this->getEntityManager()->getRepository("OfficeBrainSubShopBundle:SubShop")->findOneBy(array('siteOwner'=>$userId));
		return $userSubShopObj;
	}
	public function getActiveLatestFiveEcatalogueRecordSet($countryId,$languageId)
	{			
		$query=$this->createQueryBuilder('ecatlog');
		$query->select(['ecatlog','elang','priorecat']);
		$query->leftJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		$query->leftJoin("OfficeBrainEcatalogueBundle:PrioritizeCatalogue", 'priorecat','With','ecatlog.id=priorecat.catalogue');
		$query->where("ecatlog.instanceType = :supplier");
		$query->setParameter('supplier', $this->instanceType);
		$query->andWhere("ecatlog.instanceId = :instanceTypeId");
		$query->setParameter('instanceTypeId', $this->instanceId);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status  =  1 ');
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00'))); // new	
		if ($countryId > 0) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId > 0) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		$query->orderBy('priorecat.catalogueOrder', 'ASC');
		$query->setMaxResults(5);
		$data = $query->getQuery()->getScalarResult();
		return $data;
	
	}
	public function getCategoryEcatalogueRecordSet($userId,$ecatalogueCategoryId,$languageId,$countryId)
	{
		$query=$this->createQueryBuilder('ecatlog');
		$instanceArray=array($this->instanceId);
		if($this->instanceType == "sub_shop" || $this->instanceType =="distributor")
		{
			$user=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->findOneBy(array('id'=>$this->site_owner_id));
			$instanceArray=array($this->instanceId,$user->getParent()->getInstanceId());
		}
		$query->select(['ecatlog','elang']);
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		if($ecatalogueCategoryId!='')
		{
			$query->andWhere('ecatlog.category LIKE :keyword');
			$query->setParameter('keyword', '%'.trim($ecatalogueCategoryId).'%');
			
		}
		if ($languageId) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00'))); // new
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status =:statusId');
		$query->setParameter('statusId', '1');
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00'))); // new
		
		$query->groupBy('ecatlog.id');
		$data=$query->getQuery()->getScalarResult();
		return $data;
	}
	public function getSupplierEcatalogueRecordSet($userId,$ecatalogueSupplierId,$languageId,$countryId)
	{
		$instanceArray=array($this->instanceId);
		if($this->instanceType == "sub_shop" || $this->instanceType =="distributor")
		{
			$user=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->findOneBy(array('id'=>$this->site_owner_id));
			$instanceArray=array($this->instanceId,$user->getParent()->getInstanceId());
		}
		$query=$this->createQueryBuilder('ecatlog');
		$query->select(['ecatlog','elang']);
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		if($ecatalogueSupplierId!='')
		{
			$query->where($query->expr()->in('ecatlog.supplier', $ecatalogueSupplierId));
		}
		if ($languageId) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00'))); // new
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status =:statusId');
		$query->setParameter('statusId', '1');
		$query->andWhere('ecatlog.endDate >= :now'); // new
		$query->setParameter("now", new \DateTime(date('Y-m-d 00:00:00'))); // new
		
		$query->groupBy('ecatlog.id');
		$data=$query->getQuery()->getScalarResult();
		return $data;
	}
	
	/**
	 * @author Employee Id: 5053
	 * OB eCommerce Product - getProjectUserSetting
	 * Function created to Count Ecatalogue for User type
	 */
	public function getEcatalogueCount($userType)
	{
		$queryBuilder = $this->createQueryBuilder('ecatlog');
		$queryBuilder->select('count(ecatlog.id)');
		$queryBuilder->where('ecatlog.status = :status AND ecatlog.instanceId = :instanceId AND ecatlog.userType =:userType')
					->andWhere("ecatlog.deletedAt is NULL")
					->setParameter('status','active')
					->setParameter('instanceId',$this->instanceId)
					->setParameter('userType',$userType);
	
		return $queryBuilder->getQuery()->getSingleScalarResult();
	}
	/**
	 * @author Employee Id: 4488
	 *
	 * Description : Find user
	 *
	 * @param 1 : int $id
	 *
	 * @return record set
	 *
	 * @throws : null
	 *
	 **/
	public function findAdminUser()
	{
		$query=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->createQueryBuilder('u');
		$query->select('u');
		$query->where("u.status='active'");
	
		if (isset($this->instanceId)) {
			$query->andWhere("u.instanceId=:instanceId")->setParameter('instanceId', $this->instanceId);
		}
	
		$query->andWhere("u.locked is NULL");
		$query->andWhere("u.expired is NULL");
		$query->andWhere("u.deletedAt is NULL");
		$query->andWhere('u.parent is NULL');
		$query->andWhere("u.id=:id")->setParameter('id', $this->userId);
	
		return $query->getQuery()->getScalarResult();
	
	}
	public function getMappingEcatalogueCategory($countryId,$languageId)
	{
		$instanceArray=array($this->instanceId);
		if($this->instanceType == "sub_shop" || $this->instanceType =="distributor")
		{
			$user=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->findOneBy(array('id'=>$this->site_owner_id));
			$instanceArray=array($this->instanceId,$user->getParent()->getInstanceId());
		}
		$query = $this->createQueryBuilder('ecatlog');
		$query->select('ecatlog.category');
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		if ($languageId) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status =:statusId');
		$query->setParameter('statusId', '1');
		$query->groupBy('ecatlog.id');
		$data=$query->getQuery()->getScalarResult();
		return $data;
	}
	public function getMappingEcatalogueSupplier($countryId,$languageId)
	{	
		$instanceArray=array($this->instanceId);
		if($this->instanceType == "sub_shop" || $this->instanceType =="distributor")
		{
			$user=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->findOneBy(array('id'=>$this->site_owner_id));
			$instanceArray=array($this->instanceId,$user->getParent()->getInstanceId());
		}
		$query=$this->createQueryBuilder('ecatlog');
		$query->select('u.id','u.firstName','u.lastName','c.companyName');
		$query->innerJoin("OfficeBrainUserBundle:User", 'u','With','u.id=ecatlog.supplier and u.status=:statuscheck and u.userType=:suppliertype ');
		$query->setParameter("statuscheck", "active");
		$query->setParameter("suppliertype", "supplier");
		$query->innerJoin("OfficeBrainCompanyBundle:Company", 'c','With','u.userCompany=c.id');
		$query->andWhere("u.locked is NULL");
		$query->andWhere("u.expired is NULL");
		$query->andWhere("u.deletedAt is NULL");
		$query->andWhere("ecatlog.status=1");
		$query->andWhere($query->expr()->in('ecatlog.instanceId', $instanceArray));
		$query->groupBy('ecatlog.supplier');
    	$query->orderBy('c.companyName', 'ASC');
    	return $query->getQuery()->getArrayResult();
	
	}
	
	/**
	 * @author Employee Id: 4571
	 *
	 * Description : Fetching id wise ecatalog details
	 *
	 * @param $id
	 *
	 * @return result
	 *
	 * @throws null
	 *
	 **/
	public function findByPid($id)
	{
		return $this->createQueryBuilder('ecat')
		->select()
		->where('ecat.id = :id')
		->setParameter('id', $id)
		->andWhere('ecat.status=1')
		->getQuery()->getArrayResult();
		
	} 
	
	/**
	 * @author Employee Id: 4571
	 *
	 * Description : Fetching id wise ecatalog details
	 *
	 * @param $id
	 *
	 * @return result
	 *
	 * @throws null
	 *
	 **/
	public function getCustomEcatalogueRecordSet($userId, $countryId, $languageId, $adminUser)
	{
			
		$query =$this->getEntityManager()->getRepository('OfficeBrainEcatalogueBundle:Ecatalogue')->createQueryBuilder('ecatlog');
		
		$query->leftJoin('ecatlog.ecatalogueLanguage', 'elang');
		$query->leftJoin('ecatlog.prioritizeCatalogue', 'priorecat');
		$query->where("ecatlog.instanceType = :supplier");
		$query->setParameter('supplier', $this->instanceType);
		$query->andWhere("ecatlog.instanceId = :instanceTypeId");
		$query->setParameter('instanceTypeId', $this->instanceId);
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->andWhere('ecatlog.status  =  1 ');
		
		
		if ($countryId > 0) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if ($languageId > 0) {
			$query->andwhere('elang.languageId = :lId');
			$query->setParameter('lId', $languageId);
		}
		
		$query->orderBy('priorecat.catalogueOrder', 'ASC');
			
		$data =  $query->getQuery()->getResult();
		
		return $data;
	
	}
	public function getStatusCountListRepository($userId,$countFlagForStatus,$countryId,$option,$keywords,$adminUser,$categoryOption,$page, $recordsPerPage,$status)
	{
		
		$count = $this->createQueryBuilder('ecatlog')->select('COUNT(ecatlog)')->getQuery()->getSingleScalarResult();
		$query=$this->createQueryBuilder('ecatlog');
		$query->select('ecatlog.id','ecatlog.countryId','ecatlog.category','ecatlog.status','elang.ecatalogueTitle','elang.catalogueUrl','elang.catalogueFile','elang.catalogueImage','ecatlog.endDate');
		$query->innerJoin("OfficeBrainEcatalogueBundle:EcatalogueLanguage", 'elang','With','ecatlog.id=elang.ecatalogueId');
		if ($countryId) {
			$query->andwhere('ecatlog.countryId = :cId');
			$query->setParameter('cId', $countryId);
		}
		if($option!='')
		{
			$query->andWhere('ecatlog.supplier = :suppId');
			$query->setParameter('suppId', $option);
		}
		if($keywords!='')
		{
			$query->andWhere('elang.ecatalogueTitle LIKE :keyword');
			$query->setParameter('keyword', '%'.trim($keywords).'%');
		}
		if(!$adminUser){
			$query->andwhere('ecatlog.user = :userID')
			->setParameter('userID', $this->userId);
		}
		if($categoryOption !='')
		{
			$query->andWhere('ecatlog.category LIKE :categoryKeyword');
			$query->setParameter('categoryKeyword', '%'.trim($categoryOption).'%');
		}
		if($status!='')
		{
			$query->andwhere('ecatlog.status = :statusflag')
			->setParameter('statusflag', $status);
		}
		$query->andWhere('ecatlog.deletedAt IS NULL');
		$query->groupBy('ecatlog.id');
		$query->orderBy('elang.ecatalogueTitle');
		if($countFlagForStatus == '1')
			return $query->getQuery()->getScalarResult();
		else
		{
			$query->getQuery()->setHint('knp_paginator.count', $count);
			return $this->paginatorService->paginate($query, $page, $recordsPerPage);
		}
	} 
	
	
}
