<?php

namespace OfficeBrain\Bundle\ProductBundle\Entity;

/**
 * ProductPriceRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class ProductPriceRepository extends \Doctrine\ORM\EntityRepository{
	/**
	 * @author 5190
	 *
	 * To add pricing PM
	 *
	 * @param unknown $countryId
	 * @param unknown $productId
	 * @param unknown $currency
	 * @param unknown $priceData
	 * @param unknown $priceType
	 *
	 * @return \OfficeBrain\Bundle\ProductBundle\Entity\ProductPrice
	 */
	/* public function addPrice($countryObj,$product_data,$currency,$prices,$priceType,$priceUnit,$imprintMethodMasterId = null)
	{
		if($priceType== "call_for_price"){
			if(!isset($prices[0]))
				return true;
				foreach($prices[0] as $key=>$priceData) {
					 
					$priceObj = new ProductPrice();
					 
					if($key == 'start'){
						$priceObj->setFromQty($priceData);
						$priceObj->setType('decorative');
					}else{
						$priceObj->setFromQty($priceData);
						$priceObj->setType('blank');
					}
					$priceObj->setToQty(0);
					$priceObj->setRate(0);
					$priceObj->setCode(0);
					$priceObj->setProductId($product_data);
					$priceObj->setCountry($countryObj);
					$priceObj->setPricingType($priceType);
					$priceObj->setCurrencyId($currency);
					$priceObj->setPriceUnit($priceUnit);
					$this->_em->persist($priceObj);
					$this->_em->flush();
				}
				return true;
		}
		foreach($prices as $key=>$priceData) {
			if (!ctype_digit ((string)$key)) continue;
			if ((isset($priceData['start']) && trim($priceData['start']) == '' && (isset($priceData['price']) && trim($priceData['price']) == ''))) continue;
			//Check wheather decorative price available or not
			if(!empty($priceData['code']) && !empty($priceData['price'])){
				$priceObj = new ProductPrice();
				$priceObj->setFromQty($priceData['start']);
				$priceObj->setToQty((isset($priceData['end']))?$priceData['end']:'0');
				$priceObj->setRate((isset($priceData['price']))?$priceData['price']:'0');
				$priceObj->setCode((isset($priceData['code']))?$priceData['code']:'0');
				$priceObj->setProductId($product_data);
				$priceObj->setCountry($countryObj);
				$priceObj->setPricingType($priceType);
				$priceObj->setType('decorative');
				$priceObj->setPriceUnit($priceUnit);
				$priceObj->setCurrencyId($currency);
				//$priceObj->setProductAvailableImprintMethodMaster($imprintMethodMasterId);
				$this->_em->persist($priceObj);
			}
			if (isset($priceData['blank_price']) && trim($priceData['blank_price']) == '') continue;
			//Check wheather Blank price available or not
			if(isset($priceData['blank_code']) && isset($priceData['blank_price'])){
				$priceObj = new ProductPrice();
				$priceObj->setFromQty($priceData['start']);
				$priceObj->setToQty((isset($priceData['end']))?$priceData['end']:'0');
				$priceObj->setRate((isset($priceData['blank_price']))?$priceData['blank_price']:'0');
				$priceObj->setCode((isset($priceData['blank_code']))?$priceData['blank_code']:'0');
				$priceObj->setProductId($product_data);
				$priceObj->setCountry($countryObj);
				$priceObj->setPricingType($priceType);
				$priceObj->setType('blank');
				$priceObj->setPriceUnit($priceUnit);
				$priceObj->setCurrencyId($currency);
				$this->_em->persist($priceObj);
			}
		}
		$this->_em->flush();
		return true;
	} */
	public function addPrice($countryId,$productId,$currency,$prices,$priceType,$priceUnit,$imprintMethodMasterId = null)
	{
		if($priceType== "call_for_price"){
			if(!isset($prices[0]))
				return true;
				foreach($prices[0] as $key=>$priceData) {
					 
					$priceObj = new ProductPrice();
					 
					if($key == 'start'){
						$priceObj->setFromQty($priceData);
						$priceObj->setType('decorative');
					}else{
						$priceObj->setFromQty($priceData);
						$priceObj->setType('blank');
					}
					$priceObj->setToQty(0);
					$priceObj->setRate(0);
					$priceObj->setCode(0);
					$priceObj->setProductId($productId);
					$priceObj->setCountry($countryId);
					$priceObj->setPricingType($priceType);
					$priceObj->setCurrencyId($currency);
					$priceObj->setPriceUnit($priceUnit);
					$this->_em->persist($priceObj);
					$this->_em->flush();
				}
				return true;
		}
		foreach($prices as $key=>$priceData) {
			if (!ctype_digit ((string)$key)) continue;
			if ((isset($priceData['start']) && trim($priceData['start']) == '' && trim($priceData['price']) == '')) continue;
			//Check wheather decorative price available or not
			if(!empty($priceData['code']) && !empty($priceData['price'])){
				$priceObj = new ProductPrice();
				$priceObj->setFromQty($priceData['start']);
				$priceObj->setToQty((isset($priceData['end']))?$priceData['end']:'0');
				$priceObj->setRate((isset($priceData['price']))?$priceData['price']:'0');
				$priceObj->setCode((isset($priceData['code']))?$priceData['code']:'0');
				$priceObj->setProductId($productId);
				$priceObj->setCountry($countryId);
				$priceObj->setPricingType($priceType);
				$priceObj->setType('decorative');
				$priceObj->setPriceUnit($priceUnit);
				$priceObj->setCurrencyId($currency);
				//$priceObj->setProductAvailableImprintMethodMaster($imprintMethodMasterId);
				$this->_em->persist($priceObj);
			}
			if (isset($priceData['blank_price']) && trim($priceData['blank_price']) == '') continue;
			//Check wheather Blank price available or not
			if(isset($priceData['blank_code']) && isset($priceData['blank_price'])){
				$priceObj = new ProductPrice();
				$priceObj->setFromQty($priceData['start']);
				$priceObj->setToQty((isset($priceData['end']))?$priceData['end']:'0');
				$priceObj->setRate((isset($priceData['blank_price']))?$priceData['blank_price']:'0');
				$priceObj->setCode((isset($priceData['blank_code']))?$priceData['blank_code']:'0');
				$priceObj->setProductId($productId);
				$priceObj->setCountry($countryId);
				$priceObj->setPricingType($priceType);
				$priceObj->setType('blank');
				$priceObj->setPriceUnit($priceUnit);
				$priceObj->setCurrencyId($currency);
				$this->_em->persist($priceObj);
			}
		}
		$this->_em->flush();
		return true;
	}
	
	/**
	 * @author 5190
	 *
	 * Remove pricing PM
	 *
	 * @param unknown $countryId
	 * @param unknown $productId
	 * @param unknown $currency
	 * @param unknown $priceType
	 *
	 * @return \OfficeBrain\Bundle\ProductBundle\Entity\ProductPrice
	 */
	public function removePrice($productId,$priceType,$countryObj = null,$imprintMethodMasterId = null,$type = null)
	{
		$where = array("productId"=>$productId,"pricingType"=>$priceType);
		 
		if(!empty($countryObj)){
			$where["country"] = $countryObj;
		}
		if($imprintMethodMasterId != null){
			$where["product_available_imprint_method_master"] = $imprintMethodMasterId;
		}
		if(!empty($type)){
			$where["type"] = $type;
		}
		$pricingData = $this->findBy($where);
		if(!empty($pricingData)){
			foreach($pricingData as $obj){
				$this->_em->remove($obj);
			}
			$this->_em->flush();
			return true;
		}
	}
	
	/**
	 * @author 5190	
	 * @param unknown $productObj
	 * @param unknown $countryObj
	 * @return multitype:
	 */
	public function getProductWisePrice($productId, $countryId='',$imprintMethodMasterId = null,$type = null) {
		/* $countryId = $countryObj;
		$productId = $productObj;
	
		if(is_object($countryObj)){
			$countryId = $countryObj->getId();
		}
	
		if(is_object($productObj)){
			$productId = $productObj->getId();
		} */
	
		$query = $this->createQueryBuilder('pp')
		->where('pp.productId = :productId')
		->andWhere('pp.pricingType != :pricingType')
		->setParameter('productId',$productId)
		// TODO Update condition for each additional pricing type
		->setParameter('pricingType','sample');
	
		if($countryId!="" && $countryId>0){
			$query->andWhere('pp.country = :country')
			->setParameter('country', $countryId);
		}
		if($type != null){
			$query->andWhere('pp.type = :type')
			->setParameter('type', $type);
		}
		if($imprintMethodMasterId != null){
			$query->andWhere('pp.product_available_imprint_method_master = :imprint_method_master_id')
			->setParameter('imprint_method_master_id', $imprintMethodMasterId);
		}
	
		$query->orderBy("pp.fromQty,pp.toQty,pp.type","ASC");
	
		return $query->getQuery()->getResult();
	}
}
