<?php

namespace OfficeBrain\Bundle\QuoteBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * PreAddToQuoteRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PreAddToQuoteRepository extends 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: 4203
	 * OB eCommerce Product - PreQuote
	 * Function created for define a common querybuilder object
	 * @param integer $userId
	 * @return number
	 */
	public function getQueryBuilder()
	{
		return $this->getEntityManager()->getRepository('OfficeBrainQuoteBundle:PreAddToQuote')->createQueryBuilder('q');
	}
	
	public function getTotalCountUserWise($currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(q.id)');
		$queryBuilder->where('q.userId = :userId AND q.instanceId = :instanceId AND q.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%');
		return $queryBuilder->getQuery()->getSingleScalarResult();
	}
	
	public function isQuoteExists($productId, $cultureProductId,$currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('count(q.id)');
		$queryBuilder->where('q.userId = :userId AND q.productId = :productId AND q.productCultureId = :productCultureId AND q.instanceId = :instanceId AND q.instanceType = :instanceType AND q.productCountryDetail LIKE :productCountryDetail');
		$queryBuilder->setParameter('userId', $this->userId)
		->setParameter('productId', $productId)
		->setParameter('productCultureId', $cultureProductId)
		->setParameter('instanceType', $this->instanceType)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceId', $this->instanceId);
		$isQuoteExists = $queryBuilder->getQuery()->getSingleScalarResult();
	
		if ($isQuoteExists) {
			return true;
		} else {
			return null;
		}
	}

	public function getMaxNoOfProduct($maxNo,$currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('q.id', 'q.productId', 'q.productCultureId', 'q.userId as userId','q.productCountryDetail');
		$queryBuilder->where('q.userId = :userId AND q.instanceId = :instanceId AND q.instanceType = :instanceType AND q.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setMaxResults($maxNo);
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function getQuickQuote($currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('q.id', 'q.productId','q.productCultureId', 'q.userId');
		$queryBuilder->where('q.userId = :userId AND q.instanceId = :instanceId AND q.instanceType = :instanceType AND q.productCountryDetail Like :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function addToQuote($productId, $cultureProductId,$productSlug ,$productCountryDetail)
	{
		$quote = new PreAddToQuote();
		$quote->setInstanceId($this->instanceId);
		$quote->setInstanceType($this->instanceType);
		$quote->setUserId($this->userId);
		$quote->setUserType($this->userType);
		$quote->setProductId($productId);
		$quote->setProductCultureId($cultureProductId);
		$quote->setProductSlug($productSlug);
		$quote->setProductCountryDetail($productCountryDetail);
		$em = $this->getEntityManager();
		$em->persist($quote);
		$em->flush();
	
		return $quote;
	}
	
	public function deleteQuickQuote($productId, $cultureProductId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainQuoteBundle:PreAddToQuote', 'q');
		$queryBuilder->where('q.productId = :productId AND q.productCultureId = :cultureProductId AND q.userId = :userId AND q.instanceId = :instanceId AND q.instanceType = :instanceType')
		->setParameter('productId', $productId)
		->setParameter('cultureProductId', $cultureProductId)
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
	
	public function deleteAllQuickQuote($currentCulCode)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->delete('OfficeBrainQuoteBundle:PreAddToQuote', 'q');
		$queryBuilder->where('q.userId = :userId AND q.instanceId = :instanceId AND q.instanceType = :instanceType AND q.productCountryDetail LIKE :productCountryDetail')
		->setParameter('userId', $this->userId)
		->setParameter('instanceId', $this->instanceId)
		->setParameter('productCountryDetail', '%'.$currentCulCode.'%')
		->setParameter('instanceType', $this->instanceType);
		return $queryBuilder->getQuery()->execute();
	}
}
