<?php

namespace OfficeBrain\Bundle\TaxBundle\Entity;

/**
 * TaxMappingRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class TaxMappingRepository extends \Doctrine\ORM\EntityRepository
{
	public function getPaginatorService()
	{
		return $this->paginatorService;
	}
	
	public function setPaginatorService($paginatorService)
	{
		$this->paginatorService = $paginatorService;
	}
	
	public function getProjectSetting()
	{
		return $this->paginatorService;
	}
	
	public function setProjectSetting($projectSetting)
	{
		$this->projectSetting = $projectSetting;
		$this->em=$this->getEntityManager();
	}
	
	public function getQueryBuilder()
	{
		return $this->getEntityManager()->getRepository('OfficeBrainTaxBundle:TaxMapping')->createQueryBuilder('tmap');
	}
	
	public function getShippingTax ($countryId,$stateId,$productCat,$productId) {
		$result = array();
		$queryBuilder = $this->getQueryBuilder();
		if($stateId!= null)
		{
			$queryBuilder->ANDWhere('tmap.countryId = :countryId AND tmap.stateId = :stateId');
			$queryBuilder->setParameter('countryId', $countryId);
			$queryBuilder->setParameter('stateId', $stateId);
		}
		if($productCat!= null)
		{
			if($stateId!= null || $productId!= null)
			{
				$queryBuilder->orWhere(' tmap.categoryId = :categoryId');
				$queryBuilder->setParameter('categoryId', $productCat);
			}
			else
			{
				$queryBuilder->Where(' tmap.categoryId = :categoryId');
				$queryBuilder->setParameter('categoryId', $productCat);
			}
		}
		if($productId!= null)
		{
			if($stateId!= null || $productCat!= null)
			{
				$queryBuilder->orWhere(' tmap.productId = :productId');
				$queryBuilder->setParameter('productId', $productId);
			}
			else
			{
				$queryBuilder->Where(' tmap.productId = :productId');
				$queryBuilder->setParameter('productId', $productId);
			}
		}
		$queryBuilder->Andwhere('tmap.status = 1 ');
		$result = $queryBuilder->getQuery()->getResult();
		return $result;
	}
	
	public function checkMappingTaxMasterId($tax_id)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->where('tmap.taxId = :taxId ');
		$queryBuilder->setParameter('taxId', $tax_id);
		$result = $queryBuilder->getQuery()->getResult();
		return count($result);
	}
	
	public function getTaxMappingList($page,$recoardPerPage,$searchArray) {
		$queryBuilder = $this->getQueryBuilder();
		if (isset($searchArray) and $searchArray!='')
		{
			foreach ($searchArray as $key=>$val) {
				if ($key != '' && $val!='') {
					$param = 'taxMapping'.$key;
					$queryBuilder->andWhere('tmap.'.$key.' =:'.$param)->setParameter($param,$val);
				}
			}
		}
		$queryBuilder->orderBy('tmap.id', 'DESC');
		/*print_r($searchArray);
		echo $queryBuilder->getQuery()->getSql(); exit();*/
		return $this->paginatorService->paginate($queryBuilder, $page, $recoardPerPage);
	}
	
	/**
	 * To get tax master detail by id
	 */
	public function getTaxMappingById($taxMappingId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->where('tmap.id = :id');
		$queryBuilder->setParameter('id', $taxMappingId);
		return $queryBuilder->getQuery()->getOneOrNullResult();
	}
	
	/**
	 * To get tax master detail by id object
	 */
	public function getTaxMappinByIdObj($taxMappingId)
	{
		$queryBuilder = $this->getQueryBuilder();
		$queryBuilder->where('tmap.id = :id');
		$queryBuilder->setParameter('id', $taxMappingId);
		return $queryBuilder->getQuery()->getResult();
	}
	
	public function changeTaxMappingStatus($id)
	{
		$taxMaster = $this->getTaxMappingById($id);
		if ($taxMaster) {
			$em = $this->getEntityManager();
			if ($taxMaster->getStatus() == 1) {
				$taxMaster->setStatus(0);
			} else {
				$taxMaster->setStatus(1);
			}
			$em->persist($taxMaster);
			$em->flush();
			return true;
		}
		return false;
	}
	
	public function deleteTaxMapping($id)
	{
		$em=$this->getEntityManager();
		$taxMaster = $this->getTaxMappingById($id);
		$taxMaster->setDeletedAt(new \DateTime());
		$em->persist($taxMaster);
		$em->flush();
		return $taxMaster;
	}
	
	public function addTaxMapping($taxid,$country,$state,$category,$categoryName,$productId,$productSku)
	{
		$taxMasterObj=$this->getEntityManager()->getRepository('OfficeBrainTaxBundle:TaxMaster')->getTaxMasterById($taxid);
		if($taxMasterObj != NULL)
		{
			$taxMappingObj = new TaxMapping();
			$taxMappingObj->setTaxId($taxMasterObj);
			$taxMappingObj->setCountryId($country);
			$taxMappingObj->setStateId($state);
			$taxMappingObj->setCategoryId($category);
			$taxMappingObj->setCategoryName($categoryName);
			$taxMappingObj->setProductId($productId);
			$taxMappingObj->setProductSku($productSku);
			$taxMappingObj->setStatus('1');
			$this->getEntityManager()->persist($taxMappingObj);
			$this->getEntityManager()->flush();
			return $taxMappingObj;
		}
	}
}
