<?php

namespace OfficeBrain\Bundle\ProductBundle\Entity;

use Doctrine\ORM\EntityRepository;
/**
 * ProductOrderRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ProductOrderRepository extends \Doctrine\ORM\EntityRepository
{
	public function set($product_order)
	{
		$this->commit($product_order);
		
		return $product_order;
	}
	
	/**
	 * Commit entity.
	 */
	private function commit($entity)
	{
		$this->_em->persist($entity);
		$this->_em->flush();
	}
	
	public function getOrderNumByProductId($productId){
		$queryBuilder = $this->getEntityManager()->createQueryBuilder();
		
		$query = $queryBuilder->select('po.productOrd')
		->from('OfficeBrainProductBundle:ProductOrder','po')
		->where('po.productId = :product_id')
		->setParameter('product_id',$productId);
		
		$data = $query->getQuery()->getArrayResult();
		return $data;
	}
	public function getAndInsertMaxOrderNumber($productObject){
		$queryBuilder = $this->getEntityManager()->createQueryBuilder();
		
		$query = $queryBuilder->select('MAX(po.productOrd) AS max_product_order')
		->from('OfficeBrainProductBundle:ProductOrder','po');
		
		$data = $query->getQuery()->getOneOrNullResult();
		
		return $data;
	}
	
	public function getProductOrderDataVal(){
		$queryBuilder = $this->getEntityManager()->createQueryBuilder();
		
		$query = $queryBuilder->select('po.productOrd','po.productId')
		->from('OfficeBrainProductBundle:ProductOrder','po')
		->orderBy('po.productOrd', 'ASC');
		//echo $query->getQuery()->getSQL(); die;
		$data = $query->getQuery()->getArrayResult();
		
		return $data;
	}
	
	public function getProductIdsBetweenOrders($newOrder,$oldOrder){
		$queryBuilder = $this->getEntityManager()->createQueryBuilder();
		$query = $queryBuilder->select('po.productId','po.productOrd')
		->from('OfficeBrainProductBundle:ProductOrder','po');
		if($newOrder < $oldOrder){
			$query->where('po.productOrd BETWEEN :newOrder AND :oldOrder')
			->setParameter(':newOrder', $newOrder)
			->setParameter(':oldOrder', $oldOrder);
		}else{
			$query->where('po.productOrd BETWEEN :oldOrder AND :newOrder')
			->setParameter(':newOrder', $newOrder)
			->setParameter(':oldOrder', $oldOrder);
		}
		
		
		$data = $query->getQuery()->getArrayResult();
		
		return $data;
		
	}
	
	public function updateProductsAsNewOrder($rearrangeProducts){
		
		foreach ($rearrangeProducts as $rp){

			$qb = $this->createQueryBuilder('po');
			$qb->update()
			->set('po.productOrd', $rp['productOrd'])
			->where('po.productId = :poProductId')
			->setParameter('poProductId', $rp['productId'])
			->getQuery()
			->execute();

		}
		
		return;
		
	}
}
