<?php

namespace OfficeBrain\Bundle\CoreBundle\Entity;

use Doctrine\ORM\EntityRepository;

/**
 * CurrencyConversionRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class CurrencyConversionRepository extends EntityRepository
{
	public function getQueryBudler()
    {
        return $this->getEntityManager()->getRepository('OfficeBrainCoreBundle:CurrencyConversion')->createQueryBuilder('cc');
    }
	
	public function setProjectSetting($projetSetting)
    {
        $this->projectSetting = $projetSetting;
        $this->prepareProjectSettingData();
    }
    
    public function getProjectSetting()
    {
        return $this->projetSetting;
    }
    
    public function prepareProjectSettingData()
    {
        $this->instanceId = $this->projectSetting['instance_id'];
        $this->instanceType = $this->projectSetting['instance_type'];
        $this->userId = $this->projectSetting['user_id'];
        $this->cultureId = $this->projectSetting['culture_id'];
        $this->cultureCode = $this->projectSetting['culture_code'];
        $this->createdUid = $this->userId;
        $this->upatedUid =$this->userId;
    }
	
	
	/**
     * to persist object data
     * @param array of data
     *
     * @return \OfficeBrain\Bundle\CoreBundle\Entity\CurrencyConvesion
     */
	public function addCurrencyConversion($data)
	{
		$currencyConvesion = new CurrencyConversion ();
		
        $currencyConvesion->setEnable($data['enable']);
        $currencyConvesion->setToCurrency($data['toCurrency']);
        $currencyConvesion->setFromCurrency($data['fromCurrency']);
		$currencyConvesion->setConversionRate($data['conversionRate']);
		
        $currencyConvesion->setCreatedUid($this->createdUid);
        $currencyConvesion->setUpatedUid($this->upatedUid);
        $currencyConvesion->setInstanceId($this->instanceId);
        $currencyConvesion->setInstanceType($this->instanceType);

        $em = $this->getEntityManager();
        $em->persist($currencyConvesion);
        $em->flush();

        return $currencyConvesion;
	}
	
	
	/**
	 * to edit currency conversion for particular id
	 */
	
	public function editCurrencyConversion($data)
	{
		$currency = $this->getCurrencyConversionDetailById($data['id']);
		$currency->setConversionRate($data['conversionRate']);
		//$currency->setUpdatedAt(new DateTime);

		$this->getEntityManager()->persist($currency);
		$this->getEntityManager()->flush();
	
		return $currency;
	}
	
	
	/**
     * to get currency conversion list
     * @param null
     * @return \OfficeBrain\Bundle\CoreBundleBundle\Entity\CurrencyConvesion
     */
     
	public function getCurrencyConversionList()
	{
		$queryBuilder = $this->getQueryBudler();
        $queryBuilder->select('cc.id', 'cc.toCurrency', 'cc.fromCurrency', 'cc.conversionRate', 'cc.enable');
        $queryBuilder->where('cc.instanceId = :instanceId')
                     ->setParameter('instanceId', $this->instanceId)
					 ->orderBy('cc.id','desc');

        return $queryBuilder->getQuery()->getResult();
	}
	
	
	/**
     * to get currency conversion detail by id
     * @param null
     * @return \OfficeBrain\Bundle\CoreBundleBundle\Entity\CurrencyConvesion
     */
     
	public function getCurrencyConversionDetailById($ccid)
	{
		$queryBuilder = $this->getQueryBudler();

        $queryBuilder->select('cc');
        $queryBuilder->where('cc.instanceId = :instanceId')
					  ->andWhere('cc.id = :ccid')
                     ->setParameter('instanceId', $this->instanceId)
					  ->setParameter('ccid', $ccid);
        return $queryBuilder->getQuery()->getSingleResult();
	}
	
	
	/**
	 * to delete currency conversion of particular id
	 */
	
	public function deleteCurrencyConversionList($ccId)
	{
		$queryBuilder=$this->getQueryBudler();
        $queryBuilder->delete('OfficeBrainCoreBundle:CurrencyConversion', 'cc');
		 $queryBuilder->where('cc.id = :ccid AND cc.instanceId = :instanceId')
			         ->setParameter('ccid', $ccId)
			         ->setParameter('instanceId', $this->instanceId);
		return $queryBuilder->getQuery()->execute();
	}
	
	/**
	 * to change currency conversion status for particular id
	 */
	
	public function updateStatusCurrencyConversion($data)
	{
		$currency = $this->getCurrencyConversionDetailById($data['id']);
		$currency->setEnable($data['status']);

		$this->getEntityManager()->persist($currency);
		$this->getEntityManager()->flush();
	
		return $currency;
	}
}