<?php

/**
 * This is the model base class for the table "interessados".
 * DO NOT MODIFY THIS FILE! It is automatically generated by giix.
 * If any changes are necessary, you must set or override the required
 * property or method in class "Interessados".
 *
 * Columns in table "interessados" available as properties of the model,
 * followed by relations of table "interessados" available as properties of the model.
 *
 * @property integer $INT_CODIGO
 * @property string $INT_NOME
 * @property string $INT_EMPRESA
 * @property string $INT_CPF_CNPJ
 * @property string $INT_ENDERECO
 * @property string $INT_NUMERO
 * @property string $INT_COMPLEMENTO
 * @property string $INT_BAIRRO
 * @property string $INT_ESTADO
 * @property integer $INT_CIDADE
 * @property string $INT_CEP
 * @property string $INT_EMAIL
 * @property string $_TELEFONE1
 * @property string $INT_TELEFONE2
 * @property integer $INT_MOTIVOS
 * @property string $INT_OBSERVACOES
 *
 * @property Motivos $iNTIDTMOTIVO
 * @property Cidades $Cidade
 */
class Interessados extends GxActiveRecord {

    public $data_inicial;
    public $data_final;
    public $INT_OBSERVACOES;
    public $INT_DATA;
    public $CLI_VINCULAR;
    public $INT_IDREVENDA;
    public $INT_JUSTIFICATIVA;
    public $INT_SITUACAO;
    public $INT_PENDENTES;
    public $TOKEN;
    public $SINTETICO;

    const PENDENTE              = 1;
    const TRANSFORMADO          = 2;
    const VINCULADO             = 3;
    const FECHAMENTO_POSITIVO   = 4;
    const FECHAMENTO_NEGATIVO   = 5;
    const NEGOCIACAO            = 6;
    const NEGOCIACAO_POSTERGADA = 7;
    const FECHADO               = 8;
    const ATIVADO               = 9;
    const ADENDO_ATIVADO        = 10;
    const CLIENTE_REATIVADO     = 11;
    protected $situacoes        = array();

    const CLIENTE_ATIVO = "A";
    const CLIENTE_INATIVO = "I";
    const CONTADOR = "C";
    const PROSPECTO = "P";
    const AGUARDANDO = "AG";
    const OUTROS = "O";

    public $tipos = array();

    public function init() {
        $this->situacoes = array(
            self::PENDENTE              => 'Pendente',
            self::TRANSFORMADO          => 'Transformado em prospecto',
            self::VINCULADO             => 'Vinculado a prospecto/Cliente',
            self::FECHAMENTO_POSITIVO   => 'Fechamento Positivo',
            self::FECHAMENTO_NEGATIVO   => 'Fechamento Negativo',
            self::NEGOCIACAO            => 'Em Negociação',
            self::NEGOCIACAO_POSTERGADA => 'Negociação postergada',
            self::FECHADO               => 'Fechado',
            self::ATIVADO               => 'Cliente ativado',
            self::ADENDO_ATIVADO        => 'Adendo ativado',
            self::CLIENTE_REATIVADO     => 'Cliente reativado',
        );

        $this->tipos = array(
            self::CLIENTE_ATIVO   => 'Cliente Ativo',
            self::CLIENTE_INATIVO => 'Cliente Inativo',
            self::CONTADOR        => 'Contador',
            self::PROSPECTO       => 'Prospecto',
            self::AGUARDANDO      => 'Aguardando',
            self::OUTROS          => 'Outros',
        );
    }

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

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

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

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

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

    public function rules()
    {

        if (!$this->isNewRecord && (User::getFuncao() == 10 || $this->canUpdate())) {
            $req = ['INT_IDVENDEDOR, INT_TIPO', 'required'];
        } else {
            $req = ['INT_IDUSUARIO, INT_NOME, INT_EMPRESA,
                    INT_CIDADE, INT_TELEFONE1, INT_OBSERVACOES,
                    INT_TIPOPESSOA, INT_IDVENDEDOR, INT_TIPO',
                   'required'];
        }

        return array(
            $req,
            array('INT_MOTIVOS', 'verificaMotivo'),
            array('INT_CIDADE, INT_IDVENDEDOR, INT_MOTIVOS, INT_IDPROSPECTO', 'numerical', 'integerOnly' => true),
            array('INT_NOME, INT_EMPRESA, INT_ENDERECO', 'length', 'max' => 255),
            array('INT_EMPRESA', 'verificaRevenda'),
            array('INT_IDREVENDA', 'verificaDuplicidade'),
            array('INT_EMAIL', 'email'),
            array('INT_CPF_CNPJ', 'length', 'max' => 18),
            array('INT_NUMERO', 'length', 'max' => 15),
            array('INT_COMPLEMENTO', 'length', 'max' => 100),
            array('INT_BAIRRO', 'length', 'max' => 60),
            array('INT_ESTADO', 'length', 'max' => 2),
            array('INT_TIPO', 'length', 'max' => 5),
            array('INT_CEP', 'length', 'max' => 10),
            array('INT_EMAIL', 'length', 'max' => 100),
            array('INT_TELEFONE1, INT_TELEFONE2', 'length', 'max' => 14),
            array('INT_TELEFONE1, INT_TELEFONE2', 'validateFone'),
            array(
                '
                    INT_IDREVENDA, INT_CODIGO, INT_NOME, INT_EMPRESA, INT_CPF_CNPJ, INT_ENDERECO, INT_NUMERO,
                    INT_COMPLEMENTO, INT_BAIRRO, INT_ESTADO, INT_CIDADE, INT_CEP, INT_EMAIL, INT_TELEFONE1,
                    INT_TELEFONE2, INT_MOTIVOS, INT_OBSERVACOES, INT_DATA, INT_PROSPECTO_DESDE, INT_IDPROSPECTO,
                    data_inicial, data_final, INT_PENDENTES, INT_IDUSUARIO, INT_INDICACAO
                ',
                'safe',
                'on' => 'search'
            ),
            array(
                '
                    INT_UPDATES, INT_SITUACAO, INT_TIPO, INT_JUSTIFICATIVA, TOKEN, SINTETICO, INT_DEMONSTRACAO,
                    INT_TIPOPESSOA, INT_IDVENDEDOR, INT_INDICACAO, INT_OBSERVACOES
                ',
                'safe'
            ),
            array('INT_DATA', 'default', 'value' => date('d/m/Y H:i:s'), 'setOnEmpty' => false, 'on' => 'insert'),
        );
    }

    public function relations() {
        return array(
            'Cidade'        => array(self::BELONGS_TO, 'Cidades', 'INT_CIDADE', 'joinType' => 'LEFT JOIN'),
            'Indicacao'     => array(self::BELONGS_TO, 'Clientes', 'INT_INDICACAO', 'joinType' => 'LEFT JOIN'),
            'Motivo'        => array(self::BELONGS_TO, 'Motivos', 'INT_MOTIVOS', 'joinType' => 'LEFT JOIN'),
            'Movimentacoes' => array(self::HAS_MANY, 'InteressadosSituacoes', 'IST_IDINTERESSADO', 'joinType' => 'LEFT JOIN'),
            'Revenda'       => array(self::BELONGS_TO, 'Revendas', 'INT_IDREVENDA', 'joinType' => 'LEFT JOIN'),
            'Usuario'       => array(self::BELONGS_TO, 'Funcionarios', 'INT_IDUSUARIO', 'joinType' => 'LEFT JOIN'),
            'Vendedor'      => array(self::BELONGS_TO, 'Funcionarios', 'INT_IDVENDEDOR', 'joinType' => 'LEFT JOIN'),
        );
    }

    public function pivotModels() {
        return array(
        );
    }

    public function attributeLabels() {
        return array(
            'INT_CODIGO'            => 'Código',
            'INT_NOME'              => 'Contato',
            'INT_EMPRESA'           => 'Nome da Empresa',
            'INT_CPF_CNPJ'          => 'CNPJ / CPF',
            'INT_ENDERECO'          => 'Endereço',
            'INT_NUMERO'            => 'Número',
            'INT_COMPLEMENTO'       => 'Complemento',
            'INT_BAIRRO'            => 'Bairro',
            'INT_ESTADO'            => 'Estado',
            'INT_CIDADE'            => 'Cidade',
            'INT_CEP'               => 'CEP',
            'INT_EMAIL'             => 'E-mail',
            'INT_TELEFONE1'         => 'Telefone',
            'INT_TELEFONE2'         => 'Telefone 2',
            'INT_MOTIVOS'           => 'Como nos conheceu',
            'INT_OBSERVACOES'       => 'Observações',
            'Cidade'                => 'Cidade',
            'INT_DATA'              => 'Data de cadastro',
            'INT_PROSPECTO_DESDE'   => 'Prospecto cadastrado em',
            'INT_IDPROSPECTO'       => 'Prospecto',
            'data_inicial'          => 'Data de cadastro',
            'data_final'            => 'Data Final',
            'INT_IDVENDEDOR'        => 'Vendedor',
            'INT_IDUSUARIO'         => 'Cadastrado por',
            'INT_TIPOPESSOA'        => 'Tipo de pessoa',
            'CLI_VINCULAR'          => 'Cliente',
            'INT_IDREVENDA'         => 'Unidade de Negócios',
            'INT_TIPO'              => 'Situação',
            'INT_SITUACAO'          => 'Status',
            'INT_JUSTIFICATIVA'     => 'Justificativa',
            'SINTETICO'             => 'Exportar somente relatório sintético',
            'INT_DEMONSTRACAO'      => 'Realizada demonstração',
            'INT_INDICACAO'         => 'Indicado por',
        );
    }

    public function beforeSave() {
        parent::beforeSave();

        if ($this->isNewRecord) {
            $this->INT_DATA = date('Y-m-d H:i:s');
            $cidade = Cidades::model()->find('CID_IDCIDADE = '.$this->INT_CIDADE);
            if (isset($cidade->CID_DESCRICAO)) {
                $revenda = $cidade->getRevenda();
                if (isset($revenda->REV_IDREVENDA)) {
                    $this->INT_IDREVENDA = $revenda->REV_IDREVENDA;
                }
            }
        } else {
            $old = $this->findByPk($this->INT_CODIGO);
            if ($old->INT_CIDADE != $this->INT_CIDADE) {
                $cidade = Cidades::model()->find('CID_IDCIDADE = '.$this->INT_CIDADE);
                if (isset($cidade->CID_DESCRICAO)) {
                    $revenda = $cidade->getRevenda();
                    if (isset($revenda->REV_IDREVENDA)) {
                        $this->INT_IDREVENDA = $revenda->REV_IDREVENDA;
                    }
                }
            }
        }

        if (strpos($this->INT_DATA, '/') !== false) {
            $this->INT_DATA = Util::formatDataHoraMysql($this->INT_DATA);
        }
        if (strpos($this->INT_PROSPECTO_DESDE, '/') !== false) {
            $this->INT_PROSPECTO_DESDE = Util::formatDataHoraMysql($this->INT_PROSPECTO_DESDE);
        }
        return true;
    }

    public function verificaDuplicidade($attribute, $params) {
        $conditions = array();
        $data       = new DateTime();
        $data->modify("-1 week");
        $conditions[] = 'INT_DATA >= "'.$data->format('Y-m-d').' 00:00:00"';
        $conditions[] = 'INT_TIPO = "'.$this->INT_TIPO.'"';
        $conditions[] = 'INT_IDVENDEDOR = "'.$this->INT_IDVENDEDOR.'"';
        $conditions[] = 'INT_TIPOPESSOA = "'.$this->INT_TIPOPESSOA.'"';
        $conditions[] = 'INT_EMPRESA = "'.$this->INT_EMPRESA.'"';
        $conditions[] = 'INT_NOME = "'.$this->INT_NOME.'"';
        $conditions[] = 'INT_CIDADE = "'.$this->INT_CIDADE.'"';
        $conditions[] = 'INT_TELEFONE1 = "'.$this->INT_TELEFONE1.'"';

        $interessado = Interessados::model()->find(implode(' AND ', $conditions));
        if ($this->isNewRecord && isset($interessado->INT_CODIGO) && $interessado->INT_CODIGO != $this->INT_CODIGO) {
            $this->addError('INT_CODIGO', 'Há o interessado código '.$interessado->INT_CODIGO.' cadastrado com os mesmos dados informados para este novo interessado e que foi cadastrado há menos de uma semana, caso você acredite que isto se trate de um erro do sistema, favor entrar em contato com os responsáveis pelo CRM.');
        }
    }

    public function verificaRevenda($attribute, $params) {
        if (!empty($this->{ $attribute})) {
            if (empty($this->{ $attribute}) && $this->isNewRecord) {
                $this->addError($attribute, 'Não foi possível identificar a revenda responsável pela cidade selecionada no cadastro do interessado, favor entrar em contato com os responsáveis pelo CRM para verificação.');
            }
        }
    }

    public function validateFone($attribute, $params) {
        if(!empty($this->{$attribute})) {
            if(!Util::validateFone($this->{$attribute})) {
                $this->addError($attribute, $this->getAttributeLabel($attribute) . ' com formato inválido, somente permitidos (XX)XXXX-XXXX ou (XX)XXXXX-XXXX.');
            }
        }
    }

    public function verificaMotivo($attribute, $params) {
        if($this->INT_TIPO == self::PROSPECTO && empty($this->INT_MOTIVOS)) {
            $this->addError($attribute, 'Como nos conheceu é obrigatório para novos prospectos.');
        }
    }

    public function search($pageSize=false) {
        $criteria = new CDbCriteria;

        if (!empty($this->INT_SITUACAO)) {
            if(is_array($this->INT_SITUACAO)) {
                $criteria->addInCondition('INT_SITUACAO', $this->INT_SITUACAO);
            } else {
                $criteria->addCondition('INT_SITUACAO ="'.$this->INT_SITUACAO.'"');
            }
        }
        if (!empty($this->INT_PENDENTES)) {
            $criteria->addCondition('INT_IDPROSPECTO is null');
        }
        if (!empty(Util::formatDataMysql($this->data_inicial))) {
            $criteria->addCondition('date(INT_DATA) >= "'.Util::formatDataMysql($this->data_inicial).'"');
        }
        if (!empty(Util::formatDataMysql($this->data_final))) {
            $criteria->addCondition('date(INT_DATA) <= "'.Util::formatDataMysql($this->data_final).'"');
        }

        $criteria->compare('INT_CODIGO', $this->INT_CODIGO);
        $criteria->compare('INT_NOME', utf8_decode($this->INT_NOME), true);
        $criteria->compare('INT_EMPRESA', utf8_decode($this->INT_EMPRESA), true);
        $criteria->compare('INT_CPF_CNPJ', $this->INT_CPF_CNPJ, true);
        $criteria->compare('INT_ENDERECO', $this->INT_ENDERECO, true);
        $criteria->compare('INT_NUMERO', $this->INT_NUMERO, true);
        $criteria->compare('INT_COMPLEMENTO', $this->INT_COMPLEMENTO, true);
        $criteria->compare('INT_BAIRRO', $this->INT_BAIRRO, true);
        $criteria->compare('INT_ESTADO', $this->INT_ESTADO, true);
        $criteria->compare('INT_IDUSUARIO', utf8_decode($this->INT_IDUSUARIO));

        if (!empty($this->INT_IDREVENDA)) {
            $criteria->compare('INT_IDREVENDA', $this->INT_IDREVENDA);
        }

        if (!empty($this->INT_CIDADE)) {
            $criteria->compare('INT_CIDADE', $this->INT_CIDADE);
        }

        $criteria->compare('INT_TIPO', $this->INT_TIPO);
        $criteria->compare('INT_CEP', $this->INT_CEP, true);
        $criteria->compare('INT_EMAIL', $this->INT_EMAIL, true);
        $criteria->compare('INT_DEMONSTRACAO', $this->INT_DEMONSTRACAO, true);
        if (!empty($this->INT_TELEFONE1)) {
            $criteria->addCondition('INT_TELEFONE1 like "%'.Util::secureForSelect($this->INT_TELEFONE1).'%" or INT_TELEFONE2 like "%'.Util::secureForSelect($this->INT_TELEFONE1).'%"');
        }
        $criteria->compare('INT_MOTIVOS', $this->INT_MOTIVOS);
        $criteria->compare('INT_OBSERVACOES', $this->INT_OBSERVACOES, true);
        $criteria->compare('INT_DATA', $this->INT_DATA, true);

        if (!empty($this->INT_TIPOPESSOA)) {
            if (is_array($this->INT_TIPOPESSOA)) {
                $criteria->addInCondition('INT_TIPOPESSOA', $this->INT_TIPOPESSOA);
            } else {
                $criteria->addCondition("INT_TIPOPESSOA = '{$this->INT_TIPOPESSOA}'");
            }
        }

        if (User::isVendedor()) {
            $criteria->addCondition('((INT_IDVENDEDOR = "'.User::getId().'" and INT_CIDADE in ('.User::getCidades(true).')) OR INT_IDUSUARIO = "'.User::getId().'") ');
        } else {
            if (User::isRevenda()) {
                $criteria->addCondition('(INT_CIDADE in ('.User::getCidades(true).') OR INT_IDUSUARIO = "'.User::getId().'")');
            }
            $criteria->compare('INT_IDVENDEDOR', utf8_decode($this->INT_IDVENDEDOR));
        }

        $criteria->with = array(
            'Cidade'    => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => 'Cidade.CID_DESCRICAO'),
            'Vendedor' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => 'Vendedor.FUN_NOME'),
            );

        $select = array(
            't.INT_CODIGO',
            't.INT_DATA',
            't.INT_EMPRESA',
            't.INT_NOME',
            't.INT_IDVENDEDOR',
            't.INT_CIDADE',
            't.INT_TIPO',
            't.INT_SITUACAO',
            't.INT_IDPROSPECTO',
            't.INT_PROSPECTO_DESDE',
            );

        $criteria->group = 't.INT_CODIGO';
        $sort = new CSort;
        $sort->defaultOrder = 'INT_DATA DESC';
        $sort->attributes = array(
            'Cidade'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'Vendedor'=>array(
              'asc'=>'Vendedor.FUN_NOME',
              'desc'=>'Vendedor.FUN_NOME desc',
            ),
            '*'
        );

        $dataProvider = new CActiveDataProvider($this, array(
                            'criteria'  => $criteria,
                            'sort' => $sort,
                            'pagination' => array(
                                'pageSize' => $pageSize ? $pageSize : 20
                                )
                            )
                        );
        // CacheUtil::setDataProvider($this->TOKEN, $dataProvider);
        return $dataProvider;
    }

    public function isAllowed($email = true) {
        if($this->INT_IDVENDEDOR == User::getId()) {
            return true;
        }
        if (User::isRevenda() && !in_array($this->INT_CIDADE, array_keys(User::getCidades()))) {
            if ($email) {
                Util::AcessoIndevido();
            }
            return false;
        }
        return true;
    }

    public function canUpdate()
    {
        // quem cadastrou o interessado enquanto não tenha sido tratado
        if (User::getId() == $this->INT_IDUSUARIO && empty($this->INT_IDPROSPECTO) && $this->INT_TIPO != self::OUTROS) {
            return true;
        }

        // perfil vendedor e interesado não pendente
        if (User::isVendedor() && $this->INT_SITUACAO != Interessados::PENDENTE) {
            return false;
        }

        // administrator, supervisor
        if (in_array(User::getPrivilegio(), array(1, 7))) {
            return true;
        }

        // interessado já tratado
        if (!empty($this->INT_IDPROSPECTO)) {
            return false;
        }

        // sem permissão de acesso a região do interessado
        if (!$this->isAllowed(false)) {
            return false;
        }

        // vendedor responsável pelo interessado
        if ($this->INT_IDVENDEDOR == User::getId()) {
            return true;
        }

        // privilégios com acesso a tela
        if (in_array(User::getPrivilegio(), array(1, 6, 7, 8, 9, 11, 13, 17))) {
            return true;
        }

        return false;
    }

    public function canView() {
        if ($this->isAllowed(false)) {
            return true;
        } elseif ($this->INT_IDUSUARIO == User::getId()) {
            return true;
        } elseif (in_array(User::getPrivilegio(), array(1, 7))) {
            return true;
        }

        return false;
    }

    public function canDelete() {
        if (!User::isAdmin()) {
            return false;
        }

        if ($this->INT_IDPROSPECTO != 0) {
            return false;
        }

        return true;
    }

    public function canLink() {
        if ($this->INT_TIPO == self::AGUARDANDO || $this->INT_TIPOPESSOA == "A") {
            return false;
        }

        if (!$this->podeTratarInteressado()) {
            return false;
        }

        if ($this->INT_TIPO == self::OUTROS) {
            return true;
        }

        if ($this->INT_IDPROSPECTO != 0) {
            return false;
        }

        if (!$this->isAllowed(false)) {
            return false;
        }

        return true;
    }

    public function canTransform() {
        if ($this->INT_TIPO == self::AGUARDANDO || $this->INT_TIPOPESSOA == "A") {
            return false;
        }

        if (!$this->podeTratarInteressado()) {
            return false;
        }

        if ($this->INT_IDPROSPECTO != 0) {
            return false;
        }

        if (!in_array($this->INT_TIPO, [self::CONTADOR, self::PROSPECTO, self::OUTROS])) {
            return false;
        }

        if (!$this->isAllowed(false)) {
            return false;
        }

        return true;
    }

    public function canUpdateSituacao() {
        if ($this->INT_SITUACAO == Interessados::PENDENTE) {
            if ($this->isAllowed(false)) {
                return true;
            } else if ($this->INT_IDUSUARIO == User::getId()) {
                return true;
            }
        } else if (in_array(User::getPrivilegio(), array(1, 7))) {
            return true;
        }
        return false;
    }

    public function canAddActivity()
    {
        if ($this->INT_SITUACAO == Interessados::PENDENTE && empty($this->INT_IDPROSPECTO)) {
            return true;
        } elseif (in_array(User::getPrivilegio(), array(1, 7))) {
            return true;
        }
        return false;
    }

    public function getSituacoes() {
        return $this->situacoes;
    }

    public function getSituacao($situacao = false) {
        if (!$situacao) {
            $situacao = $this->INT_SITUACAO;
        }
        if(is_array($situacao)) {
            $situacoes = array();
            foreach($situacao as $codigo) {
                if (isset($this->situacoes[$codigo])) {
                    $situacoes[$codigo] = $this->situacoes[$codigo];
                }
            }
            return implode(', ', $situacoes);
        } else {
            if (isset($this->situacoes[$situacao])) {
                return $this->situacoes[$situacao];
            }
        }

        return 'Não identificado';
    }

    public function getData($format = 'd/m/Y H:i:s') {
        $data = $this->INT_DATA;
        if (strpos($data, '/') !== false) {
            $data = Util::formatDataHoraMysql($data);
        }
        $data = DateTime::createFromFormat('Y-m-d H:i:s', $data);
        if ($data) {
            return $data->format($format);
        }
        return null;
    }

    public function getTipo() {
        if (in_array($this->INT_TIPO, array_keys($this->tipos))) {
            return $this->tipos[$this->INT_TIPO];
        }
        return "(Não informado)";
    }

    public function getTipoPessoa() {
        return Util::getTipoPessoa($this->INT_TIPOPESSOA);
    }

    public function trocaSituacao($situacao, $force = false) {
        if (in_array($this->INT_SITUACAO, array(Interessados::FECHADO, Interessados::ATIVADO, Interessados::ADENDO_ATIVADO, Interessados::CLIENTE_REATIVADO)) && $force == false) {
            return false;
        }

        if ($this->INT_SITUACAO == $situacao) {
            return false;
        }

        $new = true;
        if ($this->INT_SITUACAO == Interessados::FECHAMENTO_POSITIVO) {
            if ($situacao == Interessados::FECHAMENTO_NEGATIVO) {
                $new = false;
            } else if (!in_array($situacao, array(Interessados::ATIVADO, Interessados::ADENDO_ATIVADO, Interessados::CLIENTE_REATIVADO))) {
                return false;
            }
        } else if ($this->INT_SITUACAO == Interessados::FECHAMENTO_NEGATIVO) {
            if ($situacao != Interessados::FECHAMENTO_POSITIVO) {
                return false;
            }
            $new = false;
        } else if ($this->INT_SITUACAO == Interessados::NEGOCIACAO && !in_array($situacao, array(Interessados::FECHAMENTO_POSITIVO, Interessados::FECHAMENTO_NEGATIVO))) {
            if (!in_array($situacao, array(Interessados::NEGOCIACAO_POSTERGADA))) {
                return false;
            }
            $new = false;
        } else if ($this->INT_SITUACAO == Interessados::NEGOCIACAO_POSTERGADA && !in_array($situacao, array(Interessados::FECHAMENTO_POSITIVO, Interessados::FECHAMENTO_NEGATIVO))) {
            if (!in_array($situacao, array(Interessados::NEGOCIACAO))) {
                return false;
            }
            $new = false;
        }
        $old_situacao       = $this->INT_SITUACAO;
        $this->INT_SITUACAO = $situacao;
        $this->save(false, array('INT_SITUACAO'));
        if ($new) {
            $situacaoInteressado                    = new InteressadosSituacoes();
            $situacaoInteressado->IST_IDINTERESSADO = $this->INT_CODIGO;
            $situacaoInteressado->IST_IDUSUARIO     = User::getId();
            $situacaoInteressado->IST_SITUACAO      = $situacao;
            $situacaoInteressado->IST_DATA          = date('d/m/Y H:i:s');
            $situacaoInteressado->save();
        } else {
            $situacaoInteressado = InteressadosSituacoes::model()->find('IST_IDINTERESSADO='.$this->INT_CODIGO.' AND IST_SITUACAO='.$old_situacao);
            if ($situacaoInteressado) {
                $situacaoInteressado->updateSituacao($situacao);
            }
        }
    }

    public function voltaSituacaAtivacao($situacao_atual) {
        $situacao = InteressadosSituacoes::model()->find("IST_IDINTERESSADO = $this->INT_CODIGO AND IST_SITUACAO = {$situacao_atual} order by IST_ID desc");
        if($situacao) {
            $situacao->delete();
        }
        $anterior = InteressadosSituacoes::model()->find("IST_IDINTERESSADO = $this->INT_CODIGO AND IST_SITUACAO <> {$situacao_atual} order by IST_ID desc");
        if($anterior) {
            $this->INT_SITUACAO = $anterior->IST_SITUACAO;
            $this->save(false, array('INT_SITUACAO'));
        }
    }

    public function vinculado($id_cliente) {
        $this->setClienteDeste($id_cliente);
        $this->insereAtividadesNoCliente($id_cliente);
        $this->trocaSituacao(Interessados::VINCULADO);
    }

    public function transformado($id_cliente) {
        $this->setClienteDeste($id_cliente);
        $this->insereAtividadesNoCliente($id_cliente);
        $this->trocaSituacao(Interessados::TRANSFORMADO);
    }

    public function setClienteDeste($id_cliente) {
        $this->INT_PROSPECTO_DESDE = date('d/m/Y H:i:s');
        $this->INT_IDPROSPECTO     = $id_cliente;
        $this->save(false, array('INT_PROSPECTO_DESDE', 'INT_IDPROSPECTO'));
    }

    public function foiRealizadaDemonstracao() {
        return $this->INT_DEMONSTRACAO == ClientesSituacoes::DEMONSTRACAO_REALIZADA ? 'Sim' : 'Não';
    }

    public function realizadaDemonstracao() {
        $this->INT_DEMONSTRACAO = ClientesSituacoes::DEMONSTRACAO_REALIZADA;
        $this->save(false, array('INT_DEMONSTRACAO'));
    }

    public function insereAtividadesNoCliente($id_cliente)
    {
        return Atendimentos::model()->updateAll(
            array('ATD_IDCLIENTE' => $id_cliente),
            "ATD_IDINTERESSADO = '{$this->INT_CODIGO}'"
        );
    }

    public function podeTratarInteressado()
    {
        if (in_array($this->INT_MOTIVOS, [51, 52, 53, 71]) && empty($this->INT_INDICACAO))  {
            return false;
        }
        return true;
    }
    
    public function permissaoAtividades() {
        // quem cadastrou o interessado tem acesso a tela
        if (User::getId() == $this->INT_IDUSUARIO) {
            return true;
        }

        // administrator, diretor geral, supervisor, gerente comercial geral, auxiliar administrativo geral
        if (in_array(User::getPrivilegio(), array(1, 6, 7, 8, 11))) {
            return true;
        }

        // sem permissão de acesso a região do interessado
        if (!$this->isAllowed(false)) {
            return false;
        }

        // vendedor responsável
        // Obs. privilégio 10 consultor de vendas somente pode ver seus interessados ou seja INT_IDVENDEDOR tem de ser usuário logado
        if ($this->INT_IDVENDEDOR == User::getId()) {
            return true;
        }

        // privilégios de revenda com acesso a tela: diretor revenda, gerente comercial, auxiliar administrativo, secretária
        if (in_array(User::getPrivilegio(), array(9, 13, 17, 18))) {
            return true;
        }

        // demais usuários
        return false;
    }
}
