<?php

namespace OfficeBrain\Bundle\RequestQuoteBundle\Entity;

/**
 * PreAddToRequestQuoteRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PreAddToRequestQuoteRepository extends \Doctrine\ORM\EntityRepository
{
	protected $projectSetting;
	protected $instanceId;
	protected $instanceType;
	protected $cultureId;
	protected $cultureCode;
	
	public function setProjectSetting($projectSetting)
	{
		$this->projectSetting = $projectSetting;
		$this->prepareProjectSettingData();
	}
	
	public function prepareProjectSettingData()
	{
		$this->userId = $this->projectSetting['user_id'];
		$this->userType = $this->projectSetting['user_type'];
		$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'];
	}
	
	/**
	 * @author Employee Id: 410175
	 * OB eCommerce Product - PreRequestQuote
	 * Function created for define a common querybuilder object
	 * @param integer $userId
	 * @return number
	 */
	public function getQueryBuilder()
	{
		return $this->getEntityManager()->getRepository('OfficeBrainRequestQuoteBundle:PreAddToRequestQuote')->createQueryBuilder('rq');
	}
	
	public function getTotalCountUserWise()
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(rq.id)');
		$queryBuilder->where('rq.userId = :userId AND rq.instanceId = :instanceId')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId);
		return $queryBuilder->getQuery()->getSingleScalarResult();
	}
	
	public function isRequestQuoteExists($productId, $cultureProductId)
	{		
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(rq.id)');
		$queryBuilder->where('rq.userId = :userId AND rq.productId = :productId AND rq.productCultureId = :productCultureId AND rq.instanceId = :instanceId');
		$queryBuilder->setParameter('userId', $this->userId)
		->setParameter('productId', $productId)
		->setParameter('productCultureId', $cultureProductId)
		->setParameter('instanceId', $this->instanceId);
	
		$isRequestQuoteExists = $queryBuilder->getQuery()->getSingleScalarResult();
	
		if ($isRequestQuoteExists)
		{
			return true;
		}
		else
		{
			return null;
		}
	}
	
	public function deleteAllRequestQuote()
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainRequestQuoteBundle:PreAddToRequestQuote', 'rq');
		$queryBuilder->where('rq.userId = :userId AND rq.instanceId = :instanceId AND rq.instanceType = :instanceType')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
	
	public function addToRequestQuote($productId, $cultureProductId,$productSlug,$productDetailConfiguration="")
	{
		$requestQuote = new PreAddToRequestQuote();
		$requestQuote->setInstanceId($this->instanceId);
		$requestQuote->setInstanceType($this->instanceType);
		$requestQuote->setUserId($this->userId);
		$requestQuote->setUserType($this->userType);
		$requestQuote->setProductId($productId);
		$requestQuote->setProductCultureId($cultureProductId);
		$requestQuote->setProductSlug($productSlug);
		$requestQuote->setProductDetailConfiguration($productDetailConfiguration);
		$em = $this->getEntityManager();
		$em->persist($requestQuote);
		$em->flush();
	
		return $requestQuote;
	}

	public function getRequestQuote()
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('rq.id', 'rq.productId','rq.productCultureId', 'rq.userId', 'rq.productDetailConfiguration');
		$queryBuilder->where('rq.userId = :userId AND rq.instanceId = :instanceId AND rq.instanceType = :instanceType')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType)
		->orderBy('rq.id', 'DESC');
	
		return $queryBuilder->getQuery()->getArrayResult();
	}

	public function deleteRequestQuote($productId, $cultureProductId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainRequestQuoteBundle:PreAddToRequestQuote', 'rq');
		$queryBuilder->where('rq.productId = :productId AND rq.productCultureId = :cultureProductId AND rq.userId = :userId AND rq.instanceId = :instanceId AND rq.instanceType = :instanceType')
		->setParameter('productId', $productId)
		->setParameter('cultureProductId', $cultureProductId)
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
}