<?php
/**
 * Controller is the customized base controller class.
 * All controller classes for this application should extend from this base class.
 */
 
class Controller extends CController
{
	/**
	 * @var string the default layout for the controller view. Defaults to '//layouts/column1',
	 * meaning using a single column layout. See 'protected/views/layouts/column1.php'.
	 */
	public $layout='//layouts/column1';
	/**
	 * @var array context menu items. This property will be assigned to {@link CMenu::items}.
	 */
	public $menu=array();
	/**
	 * @var array the breadcrumbs of the current page. The value of this property will
	 * be assigned to {@link CBreadcrumbs::links}. Please refer to {@link CBreadcrumbs::links}
	 * for more details on how to specify this property.
	 */
	public $breadcrumbs=array();

	public $funcionario;
	public $user;
	public $estados;
	public $cidades;
	public $cidades_estados;
	public $revendas;
	public $projetos;
	public $regioes;
	public $funcionarios_revendas;

	public function beforeAction($action) {
		if (Yii::app()->user->isGuest || !Yii::app()->user->id)  {
			$this->layout = '//layouts/guest';
			return true;
		}
		$uid = md5(Yii::app()->user->id);

		$bloqueio = new FuncionariosBloqueio();

        $bloqueio->FUQ_FUNCIONARIO = Yii::app()->user->id;
		if($bloqueio = $bloqueio->verificaBloqueio()) {
			$this->render('/site/bloqueado', array('bloqueio' => $bloqueio));
			Yii::app()->end();
		}

		if(empty($this->funcionario))
			$this->funcionario = Funcionarios::model()->findByPk(Yii::app()->user->id);
		
		if(!$this->user) {
			$user = Yii::app()->cache->get($uid . 'user');
			if(!$user) {
				$user = (object) $this->funcionario->attributes;
				Yii::app()->cache->set($uid . 'user', $user, CacheUtil::TTL, new CDbCacheDependency("SELECT MAX(LAST_UPDATE) FROM funcionarios where FUN_IDFUNCIONARIO = {$this->funcionario->FUN_IDFUNCIONARIO}"));
				$this->user = $user;
			}
		}

		if(empty($this->revendas)) {
			$revendas = Yii::app()->cache->get($uid . 'revendas');
			if(!$revendas) {
				$revendas = array();
				if (in_array($this->funcionario->FUN_PRM_PRIVILEGIO, array(4, 9, 10, 13, 14, 17))) {
		            foreach ($this->funcionario->FuncionariosRevendas as $revenda) {
			            $revendas[$revenda->Revenda->REV_IDREVENDA] =  $revenda->Revenda->REV_FANTASIA;
		            }
				} else {
					$revendas_user = Revendas::model()->findAll('REV_SITUACAO = "A"');
					foreach ($revendas_user as $revenda_user) {
		                $revendas[$revenda_user->REV_IDREVENDA] = $revenda_user->REV_FANTASIA;
	            	}
				}
	            if(empty($revendas)) {
	            	$revendas = array(0 => 'Nenhuma Unidade de negócios para mostrar');
	            }
	            natcasesort($revendas);
	            Yii::app()->cache->set($uid .'revendas', $revendas, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('revendas'));
			}
			$this->revendas = $revendas;
		}

		if(empty($this->regioes)) {
			$regioes = Yii::app()->cache->get($uid . 'regioes');
			if(!$regioes) {
				$regioes = array();
				if(in_array($this->funcionario->FUN_PRM_PRIVILEGIO, array(10, 13))) {
					foreach ($this->funcionario->FuncionariosRegioes as $regiao) {
		                $regioes[$regiao->Regiao->REG_IDREGIAO] = $regiao->Regiao->REG_DESCRICAO;
	            	}
				} else if (in_array($this->funcionario->FUN_PRM_PRIVILEGIO, array(4, 9, 14, 17))) {
					$regioes_cidades = Regioescidades::model()->findAll('RCD_IDREVENDA in (' .implode(',', array_keys($this->revendas)). ')');
					foreach ($regioes_cidades as $regiao_cidade) {
		                $regioes[$regiao_cidade->Regiao->REG_IDREGIAO] = $regiao_cidade->Regiao->REG_DESCRICAO;
	            	}
				} else {
					$regioes_user = Regioes::model()->findAll();
					foreach ($regioes_user as $regiao_user) {
		                $regioes[$regiao_user->REG_IDREGIAO] = $regiao_user->REG_DESCRICAO;
	            	}
				}
            	natcasesort($regioes);
				Yii::app()->cache->set($uid .'regioes', $regioes, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('regioes'));
			}
			$this->regioes = $regioes;
		}
		
		if(empty($this->estados) || empty($this->cidades) || empty($this->cidades_estados)) {
			$estados = Yii::app()->cache->get($uid . 'estados');
			$cidades = Yii::app()->cache->get($uid . 'cidades');
			$cidades_estados = Yii::app()->cache->get($uid . 'cidades_estados');
			if(!$estados || !$cidades || !$cidades_estados) {
				$estados = $cidades = $cidades_estados = array();
				if(!empty($this->regioes) && $this->regioes != array('0' => 'Nenhuma região para mostrar')) {
					$ids = implode(',', array_keys($this->regioes));
					if($ids) {
						$regioes_cidades = Regioescidades::model()->findAll('RCD_IDREGIAO IN (' . $ids . ')');
						foreach ($regioes_cidades as $cidade) {
			                $cidades[$cidade->Cidade->CID_IDCIDADE] = $cidade->Cidade->CID_DESCRICAO;
			                $cidades_estados[$cidade->Cidade->CID_IDCIDADE] = $cidade->Cidade->CidadeEstado;
			                if(!in_array($cidade->Cidade->CID_UF, $estados)) {
			                	$estados[$cidade->Cidade->CID_UF] = $cidade->Cidade->CID_UF;
			                }
		            	}
		            	natcasesort($estados);
		            	natcasesort($cidades);
		            	natcasesort($cidades_estados);
					} else {
						$estados = array(0 => 'Nenhum estado para mostrar');
						$cidades = array(0 => 'Nenhuma cidade para mostrar');
						$cidades_estados = array(0 => 'Nenhuma cidade para mostrar');
					}
				} else {
					$estados = array(0 => 'Nenhum estado para mostrar');
					$cidades = array(0 => 'Nenhuma cidade para mostrar');
					$cidades_estados = array(0 => 'Nenhuma cidade para mostrar');
				}
            	Yii::app()->cache->set($uid .'estados', $estados, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('regioes'));
				Yii::app()->cache->set($uid .'cidades', $cidades, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('regioes'));
				Yii::app()->cache->set($uid .'cidades_estados', $cidades_estados, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('regioes'));
			}
			$this->estados = $estados;
			$this->cidades = $cidades;
			$this->cidades_estados = $cidades_estados;
		}

		if(empty($this->projetos)) {
			$projetos = Yii::app()->cache->get($uid . 'projetos');
			if(!$projetos) {
				$projetos = array();
				foreach ($this->funcionario->FuncionariosProjetos as $projeto) {
	                $projetos[$projeto->Projeto->PRO_IDPROJETO] =  $projeto->Projeto->PRO_PROJETO;
            	}
            	natcasesort($projetos);
				Yii::app()->cache->set($uid .'projetos', $projetos, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('projetos'));
			}
			$this->projetos = $projetos;
		}

		if(empty($this->funcionarios_revendas)) {
			$funcionarios_revendas = Yii::app()->cache->get($uid . 'funcionarios_revendas');
			if(!$funcionarios_revendas) {
				$funcionarios_revendas = array();
				if(!empty($this->revendas) && $this->revendas != array('0' => 'Nenhuma Unidade de Negócios para mostrar')) {
					$ids = implode(',', array_keys($this->revendas));
					if($ids) {
						$func = FuncionariosRevendas::model()->findAll("FRV_IDREVENDA IN (" . $ids . ")");
						foreach ($func as $funcionario_revenda) {
				            $funcionarios_revendas[$funcionario_revenda->Funcionario->FUN_IDFUNCIONARIO] = $funcionario_revenda->Funcionario->FUN_NOME;
		            	}
		            	natcasesort($funcionarios_revendas);
					} else {
						$funcionarios_revendas = array(0 => 'Nenhum funcionário para mostrar');
					}
				} else {
					$funcionarios_revendas = array(0 => 'Nenhum funcionário para mostrar');
				}
				Yii::app()->cache->set($uid .'funcionarios_revendas', $funcionarios_revendas, CacheUtil::TTL, CacheUtil::getLastUpdateDependency('funcionarios'));
			}
			$this->funcionarios_revendas = $funcionarios_revendas;
		}
		return true;
	}

	public function beforeRender($view) {
		$cs=Yii::app()->clientScript;
		$cs->coreScriptPosition = CClientScript::POS_END;
        $cs->scriptMap=array(
            'jquery.js' => false,
            'jquery.min.js' => false,
            'jquery-ui.js' => false,
            'jquery-ui.min.js' => false,
            'jquery-ui.css' => false,
            'jquery-ui.min.css' => false,
            'jquery-ui-i18n.js' => false,
            'jquery-ui-i18n.min.js' => false,
        );
		
        return parent::beforerender($view);
	}
}