<?php

class CampanhasMarketing extends GxActiveRecord
{

	public $base;
    public $dest;
    private $arquivo;
    public $MKT_TMPBANNER;
    public $MKT_DATA_LANCAMENTO_FINAL;
    public $MKT_DATA_ENVIO_FINAL;

	public $filtros = ['Revenda', 'Regiao', 'Estado', 'Cidade', 'Produto', 'ModuloComplementar', 'DocumentoFiscal', 'RamoAtividade', 'Status', 'TipoPessoa', 'NivelInteresse', 'ComoConheceu'];

    public function init()
    {
        $this->base  = Yii::app()->baseUrl.'/arquivos/';
        $this->dest  = realpath(Yii::app()->getBasePath().DS.'..'.DS.'arquivos'.DS).DS;
    }

	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}

	public function tableName()
	{
		return 'campanhas_marketing';
	}

	public static function label($n = 1) {
        return Yii::t('app', 'Campanha|Campanhas', $n);
    }

	public static function representingColumn() {
        return 'MKT_TITULO';
    }

    public function behaviors()
    {
        return array('datetimeI18NBehavior' => array('class' => 'ext.DateTimeI18NBehavior'));
    }

	public function rules()
	{
		return array(
			array('MKT_TITULO, MKT_DATA_ENVIO, MKT_DATA_LANCAMENTO, MKT_TEXTO, MKT_RESPONSAVEL, MKT_AUTOR,Revenda', 'required'),
			array('MKT_BANNER,MKT_TMPBANNER,Revenda,Regiao,Cidade,Produto,ModuloComplementar,DocumentoFiscal,RamoAtividade,Status,TipoPessoa,NivelInteresse,ComoConheceu,Estado,MKT_DATA_LANCAMENTO_FINAL,MKT_DATA_ENVIO_FINAL', 'safe'),
			array('MKT_BANNER', 'upload'),
		);
	}

	public function relations()
	{
		return array(
			'Autor'   				=> array(self::BELONGS_TO, 	'Funcionarios', 				'MKT_RESPONSAVEL'),
			'Responsavel'   		=> array(self::BELONGS_TO, 	'Funcionarios', 				'MKT_AUTOR'),
			'Clientes'				=> array(self::HAS_MANY, 	'CampanhasMarketingClientes', 	'CMC_IDCAMPANHA'),
			'Revenda'   			=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Revenda.CMF_MODEL="Revenda"'),
			'Regiao'   				=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Regiao.CMF_MODEL="Regiao"'),
			'Cidade'   				=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Cidade.CMF_MODEL="Cidade"'),
			'Produto'   			=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Produto.CMF_MODEL="Produto"'),
			'ModuloComplementar'   	=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'ModuloComplementar.CMF_MODEL="ModuloComplementar"'),
			'DocumentoFiscal'   	=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'DocumentoFiscal.CMF_MODEL="DocumentoFiscal"'),
			'RamoAtividade'   		=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'RamoAtividade.CMF_MODEL="RamoAtividade"'),
			'ComoConheceu'   		=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'ComoConheceu.CMF_MODEL="ComoConheceu"'),
			'Estado'   				=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Estado.CMF_MODEL="Estado"'),
			'TipoPessoa'   			=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'TipoPessoa.CMF_MODEL="TipoPessoa"'),
			'Status'   				=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'Status.CMF_MODEL="Status"'),
			'NivelInteresse'   		=> array(self::HAS_MANY, 	'CampanhasMarketingFiltros', 	'CMF_IDCAMPANHA', 'condition'=>'NivelInteresse.CMF_MODEL="NivelInteresse"'),
		);
	}

	public function attributeLabels()
	{
		return array(
			'MKT_ID' 				=> 'Código',
			'MKT_DATA_LANCAMENTO' 	=> 'Data de lançamento',
			'MKT_DATA_ENVIO' 		=> 'Data de envio',
			'MKT_TITULO' 			=> 'Título',
			'MKT_TEXTO' 			=> 'Texto enviado',
			'MKT_BANNER' 			=> 'Banner',
			'MKT_RESPONSAVEL' 		=> 'Responsável pelo envio',
			'Responsavel' 			=> 'Responsável pelo envio',
			'MKT_AUTOR' 			=> 'Autor',
			'MKT_COUNT_CLIENTES' 	=> 'Total de Clientes',
			'Autor' 				=> 'Autor',
			'Revenda'				=> 'Unidades de negócios',
			'Regiao'				=> 'Regiões',
			'Cidade'				=> 'Cidades',
			'Produto'				=> 'Produtos',
			'ModuloComplementar'	=> 'Módulos complementares',
			'DocumentoFiscal'		=> 'Documentos Fiscais',
			'RamoAtividade'			=> 'Ramos de atividade',
			'ComoConheceu'			=> 'Como conheceu',
			'Estado'				=> 'Estados',
			'TipoPessoa'			=> 'Tipos de Pessoa',
			'Status'				=> 'Status',
			'NivelInteresse'		=> 'Níveis de interesse'
		);
	}

	public function upload($attribute, $params)
	{
		if (isset($_FILES['CampanhasMarketing']) && is_array($_FILES['CampanhasMarketing'])) {
			$this->arquivo                 = new Arquivos;
			$this->arquivo->dest           = $this->dest;
			$this->arquivo->limitExtension = array('jpg', 'jpeg', 'png', 'gif');
			$file                          = array();
			foreach ($_FILES['CampanhasMarketing'] as $key => $value) {
				$file[$key] = $value['MKT_BANNER'];
			}
			$this->arquivo->ARQ_ARQUIVO = $file;
			if ($file['error'] == 4) {
				if (!empty($this->MKT_TMPBANNER)) {
					$this->MKT_BANNER = $this->MKT_TMPBANNER;
					return true;
				}
				if (!$this->isNewRecord) {
					$rev            = $this->findByPk($this->MKT_ID);
					$this->MKT_BANNER = $rev->MKT_BANNER;
				}
				return true;
			}
			if (!$this->arquivo->upload()) {
				$this->addError($attribute, $this->arquivo->getError('ARQ_ARQUIVO'));
			} else {
				$this->MKT_BANNER    = $this->arquivo->ARQ_ARQUIVO;
				$this->MKT_TMPBANNER = $this->arquivo->ARQ_ARQUIVO;
			}
		}
		return true;
	}

	public function getLogoUrl()
	{
		return $this->base.$this->MKT_BANNER;
	}

	public function getLogo($width = false, $height = false)
	{
		$opt   = array();
		$opt[] = 'src="'.$this->getLogoUrl().'"';
		$opt[] = 'class="img-responsive"';
		$style = 'style="';
		if ($width) {
			$style .= 'width:'.$width.'px;';
		}

		if ($height) {
			$style .= 'height:'.$height.'px;';
		}

		$style .= '"';
		$opt[] = $style;
		return "<a href='{$this->getLogoUrl()}' target='_blank' class='img arquivo thumbnail col-lg-3 col-md-4 col-xs-6 thumb' title='Banner da campanha' data-gallery><img ".implode(' ', $opt)."/><span class='desc'>Banner da campanha...</span></a>";
	}
	public function getTmpLogo($width = false, $height = false)
	{
		$opt   = array();
		$opt[] = 'src="'.$this->base.$this->MKT_TMPBANNER.'"';
		$opt[] = 'class="logo_revenda"';
		$style = 'style="';
		if ($width) {
			$style .= 'width:'.$width.'px;';
		}

		if ($height) {
			$style .= 'height:'.$height.'px;';
		}

		$style .= '"';
		$opt[] = $style;
		return '<img '.implode(' ', $opt).' />';
	}

	public function search()
	{
       $criteria = new CDbCriteria;
      	$criteria->with = array(
            'Responsavel' 	=> array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => 'Responsavel.FUN_NOME'),
       		'Revenda' 		=> array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false)
        );

		if (User::isRevenda()) {
            $criteria->addInCondition('Revenda.CMF_FOREIGN_KEY', array_keys(User::getrevendas()));
		}

       	$usuario = User::getId();
       	$funcionarios = implode(',', array_keys(User::getFuncionariosComercialAdministrativo()));
       	$criteria->addCondition("MKT_AUTOR = {$usuario} or MKT_RESPONSAVEL = {$usuario} or MKT_RESPONSAVEL in ({$funcionarios})");


       if (!empty($this->MKT_TEXTO)) {
       		$text = Util::secureForSelect($this->MKT_TEXTO) ;
       		$textUtf =  Util::secureForSelect($this->MKT_TEXTO, true);

       		$criteria->addCondition("
	       		MKT_TEXTO like '%{$text}%' or
	       		MKT_TEXTO like '%{$textUtf}%' or
	       		MKT_TITULO like '%{$text}%' or
	       		MKT_TITULO like '%{$textUtf}%'
       		");
       	}

		if (!empty($this->Cidade)) {

			$criteriaFindRevenda = new CDbCriteria;
			$criteriaFindRevenda->addInCondition("RCD_IDCIDADE", $this->Cidade);
			$data = Regioescidades::model()->findAll($criteriaFindRevenda);
			$data = CHtml::listData($data, 'RCD_IDREVENDA', 'RCD_IDREVENDA');
            $criteria->addInCondition('Revenda.CMF_FOREIGN_KEY', $data);

		} else if (!empty($this->Regiao)) {

            $criteriaFindRevenda = new CDbCriteria;
			$criteriaFindRevenda->addInCondition("REG_IDREGIAO", $this->Regiao);
			$data = Regioes::model()->findAll($criteriaFindRevenda);
			$data =  CHtml::listData($data, 'REG_IDREVENDA', 'REG_IDREVENDA');
            $criteria->addInCondition('Revenda.CMF_FOREIGN_KEY', $data);

		} else if (!empty($this->Estado)) {

			$criteriaFindRevenda = new CDbCriteria;
			foreach($this->Estado as $estado) {
				$criteriaFindRevenda->compare("Cidade.CID_UF", $estado);
			}
       		$criteriaFindRevenda->with['Cidade'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$data = Regioescidades::model()->findAll($criteriaFindRevenda);
			$data = CHtml::listData($data, 'RCD_IDREVENDA', 'RCD_IDREVENDA');
            $criteria->addInCondition('Revenda.CMF_FOREIGN_KEY', $data);

		} else if (!empty($this->Revenda)) {
            $criteria->addInCondition('Revenda.CMF_FOREIGN_KEY', $this->Revenda);
		}

		if (!empty($this->Produto)) {
       		$criteria->with['Produto'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('Produto.CMF_FOREIGN_KEY', $this->Produto);
		}
		if (!empty($this->ModuloComplementar)) {
       		$criteria->with['ModuloComplementar'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('ModuloComplementar.CMF_FOREIGN_KEY', $this->ModuloComplementar);
		}
		if (!empty($this->DocumentoFiscal)) {
       		$criteria->with['DocumentoFiscal'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('DocumentoFiscal.CMF_FOREIGN_KEY', $this->DocumentoFiscal);
		}
		if (!empty($this->RamoAtividade)) {
       		$criteria->with['RamoAtividade'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('RamoAtividade.CMF_FOREIGN_KEY', $this->RamoAtividade);
		}
		if (!empty($this->ComoConheceu)) {
       		$criteria->with['ComoConheceu'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('ComoConheceu.CMF_FOREIGN_KEY', $this->ComoConheceu);
		}
		if (!empty($this->TipoPessoa)) {
       		$criteria->with['TipoPessoa'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('TipoPessoa.CMF_FOREIGN_KEY', $this->TipoPessoa);
		}
		if (!empty($this->Status)) {
       		$criteria->with['Status'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('Status.CMF_FOREIGN_KEY', $this->Status);
		}
		if (!empty($this->NivelInteresse)) {
       		$criteria->with['NivelInteresse'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('NivelInteresse.CMF_FOREIGN_KEY', $this->NivelInteresse);
		}
		$this->MKT_DATA_LANCAMENTO = Util::formatDataMysql($this->MKT_DATA_LANCAMENTO);
        if (!empty($this->MKT_DATA_LANCAMENTO)) {
            $criteria->addCondition("date(MKT_DATA_LANCAMENTO) >= '{$this->MKT_DATA_LANCAMENTO}'");
        }
		$this->MKT_DATA_LANCAMENTO_FINAL = Util::formatDataMysql($this->MKT_DATA_LANCAMENTO_FINAL);
        if (!empty($this->MKT_DATA_LANCAMENTO_FINAL)) {
            $criteria->addCondition("date(MKT_DATA_LANCAMENTO) <= '{$this->MKT_DATA_LANCAMENTO_FINAL}'");
        }
		$this->MKT_DATA_ENVIO = Util::formatDataMysql($this->MKT_DATA_ENVIO);
        if (!empty($this->MKT_DATA_ENVIO)) {
            $criteria->addCondition("MKT_DATA_ENVIO >= '{$this->MKT_DATA_ENVIO}'");
        }
		$this->MKT_DATA_ENVIO_FINAL = Util::formatDataMysql($this->MKT_DATA_ENVIO_FINAL);
        if (!empty($this->MKT_DATA_ENVIO_FINAL)) {
            $criteria->addCondition("MKT_DATA_ENVIO <= '{$this->MKT_DATA_ENVIO_FINAL}'");
        }
        if (!empty($this->MKT_AUTOR)) {
	        if(is_array($this->MKT_AUTOR)) {
	            $criteria->addInCondition('MKT_AUTOR', $this->MKT_AUTOR);
	        } else {
	            $criteria->compare('MKT_AUTOR', $this->MKT_AUTOR);
	        }
        }
        if (!empty($this->MKT_RESPONSAVEL)) {
	        if(is_array($this->MKT_RESPONSAVEL)) {
	            $criteria->addInCondition('MKT_RESPONSAVEL', $this->MKT_RESPONSAVEL);
	        } else {
	            $criteria->compare('MKT_RESPONSAVEL', $this->MKT_RESPONSAVEL);
	        }
        }

        $criteria->group = 't.MKT_ID';

        $sort = new CSort;
        $sort->defaultOrder = 'MKT_DATA_ENVIO DESC, MKT_TITULO ASC';
        $sort->attributes = array(
            'Responsavel'=>array(
              'asc'=>'Responsavel.FUN_NOME',
              'desc'=>'Responsavel.FUN_NOME desc'
            ),
            '*'
        );

        $dataProvider = new CActiveDataProvider($this, array(
                'criteria'  => $criteria,
                'sort' => $sort,
                'pagination' => array(
                    'pageSize' => 20
                    )
                )
            );
        return $dataProvider;
	}

	public function findClientes($count = false)
	{
		$criteria = new CDbCriteria;
		if (!empty($this->Revenda)) {
            $Regioescidades = Regioescidades::model()->findAll('RCD_IDREVENDA in ("' . implode('","',$this->Revenda) . '")');
            $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
            $criteria->addInCondition('CLI_CIDADE', $data_cidades);
		}
		if (!empty($this->Estado)) {
			$criteria->with['Cidade'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
			$criteria->addInCondition('Cidade.CID_UF', $this->Estado);
		}
		if (!empty($this->Regiao)) {
			$Regioescidades = Regioescidades::model()->findAll('RCD_IDREGIAO in ("' . implode('","',$this->Regiao) . '")');
            $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
            $criteria->addInCondition('CLI_CIDADE', $data_cidades);
		}
		if (!empty($this->Cidade)) {
			$criteria->addInCondition('CLI_CIDADE', $this->Cidade);
		}
		if (!empty($this->Produto)) {
			$criteria->addInCondition('CLI_PRODUTO', $this->Produto);
		}
		if (!empty($this->ModuloComplementar)) {
			$modulos = implode(',', $this->ModuloComplementar);

			$criteria->addCondition("(
				CLI_MODULO1 IN ({$modulos}) or
				CLI_MODULO2 IN ({$modulos}) or
				CLI_MODULO3 IN ({$modulos}) or
				CLI_MODULO4 IN ({$modulos}) or
				CLI_MODULO5 IN ({$modulos})
			)");
		}
		if (!empty($this->DocumentoFiscal)) {
			$documentos_fiscais = $this->DocumentoFiscal;
            $criteria->with['DocumentosFiscais'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
            if(in_array('nenhum', $documentos_fiscais)) {
                if(count($documentos_fiscais) == 1) {
                    $criteria->addCondition('(select count(*) from clientes_documentos_fiscais where CDF_IDCLIENTE = t.CLI_IDCLIENTE)= 0');
                } else {
                    unset($documentos_fiscais[array_search('nenhum', $documentos_fiscais)]);
                    $criteria->addCondition('(select count(*) from clientes_documentos_fiscais where CDF_IDCLIENTE = t.CLI_IDCLIENTE)= 0 or DocumentosFiscais.CDF_IDDOCUMENTO in (' . implode(',', $documentos_fiscais).')');
                }
            } else {
                $criteria->addInCondition('DocumentosFiscais.CDF_IDDOCUMENTO', $this->DocumentoFiscal);
            }
		}
		if (!empty($this->RamoAtividade)) {
			$criteria->addInCondition('CLI_IDRAMO', $this->RamoAtividade);
		}
		if (!empty($this->ComoConheceu)) {
			$criteria->addInCondition('CLI_IDMOTIVO', $this->ComoConheceu);
		}
		if (!empty($this->TipoPessoa)) {
			$criteria->addInCondition('CLI_TIPOPESSOA', $this->TipoPessoa);
		}
		if (!empty($this->Status)) {
			$criteria->addInCondition('CLI_SITUACAO', $this->Status);
		}
		if (!empty($this->NivelInteresse)) {
			$criteria->addInCondition('CLI_NIVELINTERESSE', $this->NivelInteresse);
		}
		if (User::isRevenda()) {
            $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
        }
        $criteria->addCondition('CLI_EMAIL IS NOT NULl AND LENGTH(CLI_EMAIL) > 0');
        $criteria->select = 'CLI_IDCLIENTE';
        if ($count) {
        	return Clientes::model()->count($criteria);
        } else {
        	return Clientes::model()->findAll($criteria);
        }
	}

	public function loadFiltrosForUpdate() {
		foreach ($this->filtros as $filtro) {
			$this->{$filtro} = CHtml::listData($this->{$filtro}, 'CMF_FOREIGN_KEY', 'CMF_FOREIGN_KEY');
		}
	}

	public function getClientesRegistrados()
	{
		$criteria = new CDbCriteria;
		$criteria->compare('CMC_IDCAMPANHA', $this->MKT_ID);
		$sort = new CSort;
		$dataProvider = new CActiveDataProvider(new CampanhasMarketingClientes, array(
                'criteria'   => $criteria,
                'sort'       => $sort,
                'pagination' => array(
                	'pageSize' => 20
                	)
            	)
        	);
    	return $dataProvider;
	}

	public function isAllowed($email = true, $blockAction = true)
	{
		$usuario = User::getId();

		if ($usuario == $this->MKT_AUTOR) {
			return true;
		}

		if ($usuario == $this->MKT_RESPONSAVEL) {
			return true;
		}

		if (in_array($this->MKT_RESPONSAVEL, array_keys(User::getFuncionariosComercialAdministrativo()))) {
			return true;
		}

		if (in_array(User::getPrivilegio(), [1,7,11,20])) {
			return true;
		}

		if($email) {
            Util::AcessoIndevido();
        }
        if($blockAction) {
    		User::blockAction('Sem permissão de acesso para esta campanha!');
        }
		return fase;
	}
}