<?php

class CacheUtil {

	const TTL = 3600 * 12;

	public static function getPrioridadesList() {
		$prioridadesList = Yii::app()->cache->get('prioridadesList');
	    if(!$prioridadesList) {
		    $prioridadesList = GxHtml::listDataEx(Prioridades::model()->findAllAttributes(null, true));
	        Yii::app()->cache->set(
	        	'prioridadesList',
	        	$prioridadesList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("prioridades")
	        	);
	    }
	    return $prioridadesList;
	}

	public static function getDocumentosFiscaisList() {
		$documentosFiscaisList = Yii::app()->cache->get('documentosFiscaisList');
	    if(!$documentosFiscaisList) {
		    $documentosFiscaisList = array('nenhum'=>'Nenhum documento cadastrado') + GxHtml::listDataEx(DocumentosFiscais::model()->findAll("DFS_SITUACAO = 'A' order by DFS_DESCRICAO"), 'DFS_IDDOCUMENTO', 'DFS_DESCRICAO');
	        Yii::app()->cache->set(
	        	'documentosFiscaisList',
	        	$documentosFiscaisList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("documentos_fiscais")
	        	);
	    }
	    return $documentosFiscaisList;
	}

	public static function getProdutosList() {
		$produtosList = Yii::app()->cache->get('produtosList');
	    if(!$produtosList) {
		    $produtosList = GxHtml::listDataEx(Modulos::model()->findAll("MOD_SITUACAO = 'A' and MOD_TIPO = 2 and MOD_COMPLEMENTO = 'N' order by MOD_DESCRICAO"), 'MOD_IDMODULO', 'MOD_DESCRICAO');
	        Yii::app()->cache->set(
	        	'produtosList',
	        	$produtosList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("modulos")
	        	);
	    }
	    return $produtosList;
	}

	public static function getModulosComplementaresList() {
		$modulosComplementaresList = Yii::app()->cache->get('modulosComplementaresList');
	    if(!$modulosComplementaresList) {
		    $modulosComplementaresList = GxHtml::listDataEx(Modulos::model()->findAll("MOD_SITUACAO = 'A' and MOD_TIPO = 2 and MOD_COMPLEMENTO = 'S' order by MOD_DESCRICAO"), 'MOD_IDMODULO', 'MOD_DESCRICAO');
	        Yii::app()->cache->set(
	        	'modulosComplementaresList',
	        	$modulosComplementaresList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("modulos")
	        	);
	    }
	    return $modulosComplementaresList;
	}

	public static function getRamosAtividadeList() {
		$ramosAtividadeList = Yii::app()->cache->get('ramosAtividadeList');
	    if(!$ramosAtividadeList) {
		    $ramosAtividadeList = GxHtml::listDataEx(RamosAtividades::model()->findAll('RAM_SITUACAO="A" order by RAM_DESCRICAO', array('order' => 'RAM_DESCRICAO')), 'RAM_IDRAMO', 'RAM_DESCRICAO');
	        Yii::app()->cache->set(
	        	'ramosAtividadeList',
	        	$ramosAtividadeList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("ramos_atividades")
	        	);
	    }
	    return $ramosAtividadeList;
	}

	public static function getMotivosFnList() {
		$motivosFnList = Yii::app()->cache->get('motivosFnList');
	    if(!$motivosFnList) {
		    $motivosFnList = ClientesSituacoes::model()->getMotivosFN();
	        Yii::app()->cache->set(
	        	'motivosFnList',
	        	$motivosFnList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("motivos")
	        	);
	    }
	    return $motivosFnList;
	}

	public static function getServicosAdendosList() {
		$servicosAdentosList = Yii::app()->cache->get('servicosAdentosList');
	    if(!$servicosAdentosList) {
		    $servicosAdentosList = GxHtml::listDataEx(Servicos::model()->findAll('SER_TIPODOCUMENTO='.Contratos::ADENDO.' order by SER_DESCRICAO'));
	        Yii::app()->cache->set(
	        	'servicosAdentosList',
	        	$servicosAdentosList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("servicos")
	        	);
	    }
	    return $servicosAdentosList;
	}

	public static function getStatusDocumentosList() {
		$statusDocumentosList = Yii::app()->cache->get('statusDocumentosList');
	    if(!$statusDocumentosList) {
		    $statusDocumentosList = CHtml::listData(Motivos::model()->findAll('MOT_TIPO = 6 AND MOT_IDMOTIVO not in (15, 20) AND MOT_SITUACAO ="A" ORDER BY MOT_DESCRICAO'), 'MOT_IDMOTIVO', 'MOT_DESCRICAO');
	        Yii::app()->cache->set(
	        	'statusDocumentosList',
	        	$statusDocumentosList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("motivos")
	        	);
	    }
	    return $statusDocumentosList;
	}

	public static function getComoNosConheceuList() {
		$comoNosConheceuList = Yii::app()->cache->get('comoNosConheceuList');
	    if(!$comoNosConheceuList) {
		    $comoNosConheceuList = GxHtml::listDataEx(Motivos::model()->findAll('MOT_TIPO=2 AND MOT_SITUACAO="A" and MOT_IDMOTIVO in (71,52,51,53,72,67,61,79,57) ORDER BY MOT_DESCRICAO'));
	        Yii::app()->cache->set(
		        'comoNosConheceuList',
		        $comoNosConheceuList,
		        CacheUtil::TTL,
		    	self::getLastUpdateDependency("motivos")
	        	);
	    }
	    return $comoNosConheceuList;
	}

	public static function getProjetosList() {
		$projetosList = Yii::app()->cache->get(md5(Yii::app()->user->id) . 'projetos');
	    if (!$projetosList) {
            $projetosList = GxHtml::listDataEx(Projetos::model()->findAll('PRO_STATUS = 1 ORDER BY PRO_PROJETO'));
	        Yii::app()->cache->set(
	        	md5(Yii::app()->user->id) . 'projetos',
	        	$projetosList,
		        CacheUtil::TTL,
		    	self::getLastUpdateDependency("projetos")
	        	);
	    }
	    return $projetosList;
	}

	public static function getVersoesList() {
		$versoesList = Yii::app()->cache->get('versoes_solicitacoes');
	    if (!$versoesList) {
		    $versoesList = Versoes::model()->getVersoesProjetos();
	        Yii::app()->cache->set(
	        	'versoes_solicitacoes',
	        	$versoesList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("versoes")
	        	);
	    }
	    return $versoesList;
	}

	public static function getMotivosList() {
		$motivosList = Yii::app()->cache->get('motivos_solicitacoes_a');
	    if (!$motivosList) {
		    $motivosList = CHtml::listData(MotivosProjetos::model()->with('Motivo')->findAll(array('condition' => 'MPS_IDPROJETO not in(20) AND Motivo.MOT_SITUACAO = "A"', 'order' => 'Motivo.MOT_DESCRICAO')),'Motivo.MOT_IDMOTIVO', 'Motivo.MOT_DESCRICAO');
	        Yii::app()->cache->set(
	        	'motivos_solicitacoes_a',
	        	$motivosList,
		    	CacheUtil::TTL,
		    	self::getLastUpdateDependency("motivos")
	        	);
	    }
	    return $motivosList;
	}

	public static function getLastUpdateDependency($table) {
		return new CDbCacheDependency("SELECT MAX(LAST_UPDATE) FROM {$table}");
	}

	public static function setDataProvider($token, $dataProvider, $timeout = 3600)
	{
		$dataProvider = clone $dataProvider;
        $criteria = clone $dataProvider->getCriteria();
        $sort=$dataProvider->getSort();
        $sort->applyOrder($criteria);
        $provider = new CActiveDataProvider($dataProvider->model, array(
        		'criteria' => $criteria,
        		'pagination' => false
        		)
        	);
        Yii::app()->cache->set($token, $provider, $timeout);
	}

}