<?php

namespace OfficeBrain\Bundle\QuoteBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * QuoteItemLineRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class QuoteItemLineRepository extends EntityRepository
{
	protected $projectSetting;
	protected $instanceId;
	protected $instanceType;
	protected $cultureId;
	protected $cultureCode;
	protected $paginatorService;
	protected $projectSettingService;
	protected $userType;
	protected $userId;
	protected $userManager;
    protected $erpId;
	
	public function getPaginatorService()
	{
		return $this->paginatorService;
	}
	
	public function setPaginatorService($paginatorService)
	{
		$this->paginatorService = $paginatorService;
	}
	
	public function setUserManager($userManager)
	{
		$this->userManager = $userManager;
	}
	
	public function setCoreManager($coreManager){
		$this->coreManager = $coreManager;
	}
	
	public function getProjectSetting()
	{
		return $this->paginatorService;
	}
	
	public function setProjectSetting($projectSetting)
	{
		$this->projectSetting = $projectSetting;
		$this->prepareProjectSettingData();
	}
	
	public function setProjectUserData($userData)
	{
		$this->userObj = $userData;
	}
	
     function setErpId($erpId)
    {
        $this->erpId= $erpId;
    }
    
	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: 4248
	 * OB eCommerce Product - Quotelist
	 * Function created for define a common querybuilder object
	 * @param integer $userId
	 * @return number
	 */
	public function getQueryBuilder()
	{
		return $this->getEntityManager()->getRepository('OfficeBrainQuoteBundle:QuoteItemLine')->createQueryBuilder('qit');
	}
	
	public function getAllAddedProductInQuote($quoteId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('qit.id, qit.productId, qit.isComplete')
		->where('qit.quoteMasterId  = :quote_id')
		->setParameter('quote_id', $quoteId);
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function getProductIdInItemLine($itemLineId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('qit.id,qit.productId')
		->where('qit.id  =:item_line_id')
		->setParameter('item_line_id', $itemLineId);
		return $queryBuilder->getQuery()->getOneOrNullResult();
	}
	
	public function getItemLineById($itemLineId)
	{
		//echo $itemLineId;die;
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->select('qit','qpc')
		->leftjoin('qit.quoteProductCharges','qpc');
		$queryBuilder ->where('qit.id  =:item_line_id')
		->setParameter('item_line_id', $itemLineId);
		return $queryBuilder->getQuery()->getOneOrNullResult();
	}
	
	public function updateQuoteItemLine($itemLineObj, $productNote){
		$itemLineObj->setProductNote($productNote);
		$itemLineObj->setIsComplete(1);
		$em = $this->getEntityManager();
		$em->persist($itemLineObj);
		$em->flush();
	}
	
	public function updateQuoteExraColor($itemLineObj, $extraColor){
		$itemLineObj->setExtraColor($extraColor);
		$em = $this->getEntityManager();
		$em->persist($itemLineObj);
		$em->flush();
	}
	
	public function updateQuoteSummaryItemLine($itemLineObj, $productConfiguration){
		$itemLineObj->setProductDetailConfiguration($productConfiguration);
		$em = $this->getEntityManager();
		$em->persist($itemLineObj);
		$em->flush();
	}
	
	public function removeItemLineProduct($itemLineId)
	{
		$obj = $this->getItemLineById($itemLineId);
		$this->_em->remove($obj);
		$this->_em->flush();
		return 'SUCCESS';
	}
	public function setMethod($obj, $fieldName, $value) {
		$obj->setfieldMethod($fieldName, $value);
		$this->_em->persist($obj);
		$this->_em->flush();
	}
	
	public function setNegotiationStatus($itemLineAry= "",$negotiationComment="", $quoteId="")
	{
		$itemLineAryKeys = array();
		$itemLineIds 	 = array();
		$itemLineAryKeys = array_keys($itemLineAry);
		$statusArray	 = array();
		$quoteStatus = '';
		$quoteObj = '';
		$count=0;
		for($i=0; $i<count($itemLineAryKeys);$i++)
		{
			if($itemLineAry[$itemLineAryKeys[$i]]['accept'] == 1)
			{
				$itemLineIds[explode(':',$itemLineAryKeys[$i])[1]] = 'approved';
				$statusArray[$i] = 'approved';
				$itemLineObj = $this->getItemLineById(explode(':',$itemLineAryKeys[$i])[1]);
				$this->updateNegotiationStatus($itemLineObj,$statusArray[$i]);
				$quoteObj = $itemLineObj->getQuoteMasterId();
				$count=$count+1;
			}
			if($itemLineAry[$itemLineAryKeys[$i]]['reject'] == 1)
			{
				$itemLineIds[explode(':',$itemLineAryKeys[$i])[1]] = 'rejected';
				$statusArray[$i] = 'rejected';
				$itemLineObj = $this->getItemLineById(explode(':',$itemLineAryKeys[$i])[1]);
				$this->updateNegotiationStatus($itemLineObj,$statusArray[$i]);
				$quoteObj = $itemLineObj->getQuoteMasterId();
				$count=$count+1;
			}
			if($itemLineAry[$itemLineAryKeys[$i]]['change'] == 1)
			{
				$itemLineIds[explode(':',$itemLineAryKeys[$i])[1]] = 'change';
				$statusArray[$i] = 'change';
				$itemLineObj = $this->getItemLineById(explode(':',$itemLineAryKeys[$i])[1]);
				$this->updateNegotiationStatus($itemLineObj,$statusArray[$i]);
				$quoteObj = $itemLineObj->getQuoteMasterId();
				$count=$count+1;
			}
		}
		if(count($itemLineAryKeys)==$count){
			if(in_array('change',$statusArray))
			{
				$quoteStatus = 'change';
			}
			elseif(!in_array('change',$statusArray) && in_array('approved',$statusArray))
			{
				$quoteStatus = 'approved';
			}
			else{
				$quoteStatus = 'rejected';
			}
		}
		
		if($quoteStatus==""){
			return 'STATUS_ERROR';
		}
		// 4488 set optional
		/* if($negotiationComment==""){
			return 'COMMENT_ERROR';
		} */
		$this->updateNegotiationComment($quoteObj,$quoteStatus, $negotiationComment); 
		return 'SUCCESS';
	}
	
	public function updateNegotiationStatus($itemLineObj,$status)
	{
		$itemLineObj->setNegotationStatus($status);
		$em = $this->getEntityManager();
		$em->persist($itemLineObj);
		$em->flush();
	}
	
	public function updateNegotiationComment( $quoteMasterObj , $quoteStatus, $negotiationComment){
		$quoteMasterObj->setQuoteStatus($quoteStatus);
		$quoteMasterObj->setNegotationComment($negotiationComment);
		$quoteMasterObj->setSecretKey(NULL);
		$em = $this->getEntityManager();
		$em->persist($quoteMasterObj);
		$em->flush();
	}
	
}
