<?php

namespace OfficeBrain\Bundle\SupplierComplianceBundle\Entity;
use Doctrine\ORM\EntityRepository;

/**
 * SupplierComplianceRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class SupplierComplianceRepository extends EntityRepository
{

    
    protected $projectSetting;
    protected $paginatorService;
    protected $projectSettingService;
    
    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->prepareProjectSettingData();
    }
    
    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'];
    }
    
    public function getQueryBuilder()
    {
        return $this->getEntityManager()->getRepository('OfficeBrainSupplierComplianceBundle:SupplierCompliance')->createQueryBuilder('r');
    }
    
    
    public function getAllComplianceList()
    {
        $queryBuilder = $this->getQueryBuilder();
        $queryBuilder->select('r.id,r.name,p.productId')
        ->leftJoin('r.product_supplier_compliance', 'p')
        ->where('r.deletedAt IS NULL')
        ->andWhere('r.instanceId = :instanceId')
        ->setParameter('instanceId', $this->instanceId);
        $queryBuilder->orderBy('r.orderNo', 'ASC');
        return $queryBuilder->getQuery()->getArrayResult();
    }

    public function getSupplierComplainceAdminList($keywords, $page,$recordsPerPage)
    {
        $queryBuilder = $this->getQueryBuilder();
        $queryBuilder->where('r.deletedAt IS NULL')
        ->andWhere('r.instanceId = :instanceId')
        ->setParameter('instanceId', $this->instanceId);
        if($keywords!=null){
            $queryBuilder->andWhere('r.name = :name')
            ->setParameter('name', $keywords);
        }
        $queryBuilder->orderBy('r.orderNo', 'ASC');
        return $this->paginatorService->paginate($queryBuilder, $page, $recordsPerPage);
    }

    public function getCompliaceBySupplierId($id)
    {
        $queryBuilder = $this->getQueryBuilder();
        $queryBuilder->where('r.portalId = :supplierId');
        $queryBuilder->setParameter('supplierId', $id);
        return $queryBuilder->getQuery()->getOneOrNullResult();
    }

    public function getSupplierComplainceById($id)
    {
        $queryBuilder = $this->getQueryBuilder();
        $queryBuilder->where('r.id = :id');
        $queryBuilder->setParameter('id', $id);
        return $queryBuilder->getQuery()->getOneOrNullResult();
    }
    

    public function saveData($fromData, $fileData, $object=null)
    {   
        $em=$this->getEntityManager();
        $supplierCompliance = new SupplierCompliance();
        if($object!=null){
            $supplierCompliance = $object;
        }
        $supplierCompliance->setName($fromData->getName());
        $supplierCompliance->setPortalId($fromData->getPortalId());
        $supplierCompliance->setOrderNo($fromData->getOrderNo());
        $supplierCompliance->setLicenseAgrementIntroduction($fromData->getLicenseAgrementIntroduction());
        $supplierCompliance->setLicenseAgrementFile($fileData['license_agrement_file']);
        $supplierCompliance->setGccIntroduction($fromData->getGccIntroduction());
        $supplierCompliance->setGccFile($fileData['gcc_file']);
        $supplierCompliance->setCocIntroduction($fromData->getCocIntroduction());
        $supplierCompliance->setCocFile($fileData['coc_file']);
        $supplierCompliance->setQcaIntroduction($fromData->getQcaIntroduction());
        $supplierCompliance->setQcaFile($fileData['qca_file']);
        $supplierCompliance->setFlaIntroduction($fromData->getFlaIntroduction());
        $supplierCompliance->setFlaFile($fileData['fla_file']);
        $supplierCompliance->setBackStoryIntroduction($fromData->getBackStoryIntroduction());
        $supplierCompliance->setBackStoryLink($fromData->getBackStoryLink());
        $supplierCompliance->setBackStoryFile($fileData['backStory_file']);
        $supplierCompliance->setClcIntroduction($fromData->getClcIntroduction());
        $supplierCompliance->setClcFile($fileData['clc_file']);
        $supplierCompliance->setAssembledName($fromData->getAssembledName());
        $supplierCompliance->setMadeName($fromData->getMadeName());
        $supplierCompliance->setDecoratedName($fromData->getDecoratedName());
        $supplierCompliance->setProductComplianceText($fromData->getProductComplianceText());
        $supplierCompliance->setAssembledIn($fileData['assembled_in']);
        $supplierCompliance->setMadeIn($fileData['made_in']);
        $supplierCompliance->setDecoratedIn($fileData['decorated_in']);
        $supplierCompliance->setProductCompliance($fileData['product_compliance']);
        $supplierCompliance->setCulture($this->cultureCode);
        $supplierCompliance->setInstanceId($this->instanceId);
        $supplierCompliance->setInstanceType($this->instanceType);
        $em->persist($supplierCompliance);
        $em->flush();
        return $supplierCompliance;
    }


    public function deleteCompliaceProduct($supplierCompliance){
        $em=$this->getEntityManager();
        if(count($supplierCompliance->getProductSupplierCompliance())>0){
            foreach($supplierCompliance->getProductSupplierCompliance() as $productSupplierCompliance){
                //$supplierCompliance->removeProductSupplierCompliance($productSupplierCompliance);
                $em->remove($productSupplierCompliance);
                $em->flush();
            }
        }
        $em->remove($supplierCompliance);
        $em->flush();
    }
    
}
