<?php

namespace OfficeBrain\Bundle\PrioritizeSupplierBundle\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;

/**
 * PrioritizeSupplierRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class PrioritizeSupplierRepository extends \Doctrine\ORM\EntityRepository
{
	protected $projectSetting;
	protected $projectUserSetting;
	protected $instanceId;
	protected $instanceType;
	protected $cultureId;
	protected $cultureCode;
	protected $userType;
	protected $projectSettingService;
	
	
	/**
	 * @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 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 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'];
	}
	public function findAllSupplierPrioritize($locale,$user,$page='',$recordPage)
	{
		
		$query=$this->getEntityManager()->getRepository("OfficeBrainUserBundle:User")->createQueryBuilder('u');
		$query->select('u.id','u.firstName','u.lastName','u.companyName','COALESCE(bs.supplierOrder,99999) as suporder','bs.supplierOrder','u.obCustomerId');
		$query->leftJoin('OfficeBrainPrioritizeSupplierBundle:PrioritizeSupplier', 'bs','WITH','bs.supplier=u.id AND bs.user = :user');
		$query->setParameter("user", $user);
		$query->where('u.userType = :type');
		$query->setParameter('type', 'supplier');
		$query->andWhere($query->expr()->isNotNull("u.obCustomerId"));		//join query ob_customer_id with user and prio.supplier user
		$query->andWhere("u.obCustomerId !=''");		//join query ob_customer_id with user and prio.supplier user
		$query->andWhere("u.status = 'active'");
		$query->orderBy('bs.supplierOrder', 'ASC');
		$query->addOrderBy('suporder', 'ASC');
		$query->addOrderBy('u.firstName','ASC');
		return $query->getQuery()->getResult();
		 
	}
	public function findSupplierPrioritizeById($supplierId)
	{ 
		//return $this->getEntityManager()->getRepository('OfficeBrainPrioritizeSupplierBundle:PrioritizeSupplier')->findBy(array('supplier'=>$supplierId));
		$query = $this->createQueryBuilder("u")
				->select()
				->where('u.supplier = :id')
				->setParameter('id', $supplierId);
// 		echo "<pre>";print_r($query->getQuery()->getResult());exit;
// 		return $query->getQuery()->getArrayResult();
return $query->getQuery()->getResult();
		 
	}
	public function setValues($id, $order, $userId)
	{
		$supplierData = $this->getEntityManager()->getRepository('OfficeBrainPrioritizeSupplierBundle:PrioritizeSupplier')->findOneBy(array('supplier' => $this->_em->getReference('OfficeBrainUserBundle:User',$id), 'user' => $this->_em->getReference('OfficeBrainUserBundle:User',$userId)));
		if(!$supplierData)
			$supplierData= new PrioritizeSupplier();
		$supplierData->setUser($this->_em->getReference('OfficeBrainUserBundle:User',$userId));
		$supplierData->setSupplier($this->_em->getReference('OfficeBrainUserBundle:User',$id));
		$supplierData->setSupplierOrder($order);
		$supplierData->setInstanceType($this->instanceType);
		$supplierData->setInstanceId($this->instanceId);
		$this->_em->persist($supplierData);
		$this->_em->flush();
			
	}
	
	/**
	 * @author Employee Id: 4571
	 *
	 * Description : Remove priority
	 *
	 * @param null
	 *
	 * @return result
	 *
	 * @throws null
	 *
	 **/
	public function remove($userId)
	{
		//$quryBuilder = $this->getEntityManager()->getRepository('OfficeBrainPrioritizeSupplierBundle:PrioritizeSupplier')->createQueryBuilder('ps')->delete();
		//return $quryBuilder->getQuery()->execute();
		
		 
			$isDeleted = $this->createQueryBuilder("prior")
			->delete()
			->where('prior.user =:id AND prior.instanceId = :instanceId AND prior.instanceType = :instanceType')
			->setParameter("id", $userId)
			->setParameter('instanceId', $this->instanceId)
			->setParameter('instanceType', $this->instanceType)
			->getQuery()->execute();
		
			return $isDeleted;
				
		
	}
	
}
