<?php

/**
 * This is the model base class for the table "clientes".
 * 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 "Clientes".
 *
 * Columns in table "clientes" available as properties of the model,
 * followed by relations of table "clientes" available as properties of the model.
 *
 * @property integer $CLI_IDCLIENTE
 * @property integer $CLI_IDREVENDA
 * @property integer $CLI_IDVENDEDOR
 * @property string $CLI_NOME
 * @property string $CLI_FANTASIA
 * @property string $CLI_ENDERECO
 * @property string $CLI_NUMERO
 * @property string $CLI_CNPJCPF
 * @property string $CLI_INSCR_EST
 * @property string $CLI_INSCR_MUN
 * @property string $CLI_RG
 * @property string $CLI_FONE1
 * @property string $CLI_FONE2
 * @property string $CLI_FONE3
 * @property string $CLI_FAX
 * @property string $CLI_EMAIL
 * @property string $CLI_HOMEPAGE
 * @property string $CLI_CEP
 * @property integer $CLI_CIDADE
 * @property string $CLI_BAIRRO
 * @property string $CLI_SITUACAO
 * @property string $CLI_DTCADASTRO
 * @property string $CLI_NIVELINTERESSE
 * @property integer $CLI_IDMOTIVO
 * @property string $CLI_DT_PROXIMA_VISITA_COMERCIAL
 * @property integer $CLI_IDFORNECEDOR
 * @property integer $CLI_IDCONTADOR
 * @property integer $CLI_IDRAMO
 * @property string $CLI_COMPLEMENTO
 * @property string $CLI_PONTOREFERENCIA
 * @property integer $CLI_IDREGIAO
 * @property string $CLI_OBS
 * @property string $CLI_SENHA
 * @property integer $CLI_ACESSOS
 * @property string $CLI_DTULTSENHA
 * @property string $CLI_DTULTLOGIN
 * @property integer $CLI_IDEMPRESA
 * @property string $CLI_TIPOPESSOA
 * @property string $CLI_DTRESCISAO
 * @property integer $CLI_IDRESCISAO
 * @property string $CLI_SCHEMASATUALIZADOS
 * @property Regioes $Regiao
 * @property Revendas $RevendaResponsavel
 * @property Funcionarios $VendedorResponsavel
 * @property Cidades $Cidade
 * @property Motivos $ComoConheceu
 * @property Fornecedores $Fornecedor
 * @property Usuarios $Contador
 * @property RamosAtividades $RamoAtividade
 * @property date $CLI_DT_ULTIMA_ATIVIDADE
 */
class Clientes extends GxActiveRecord {

    /**
     * Utilizado para avaliação da implantação
     * 1 = Implantação não iniciada (acompanhamento)
     * 2 = Implantação iniciada (pendente primeira avaliação)
     * 3 = Em implantação (já feita primeira avaliação - acompanhamento)
     * 4 = Implantação finalizada (pendente segunda avaliação)
     * 5 = Implantação finalizada (já feita segunda avaliação)
     **/
    const IMPLANTACAO_NAO_INICIADA = 1;
    const IMPLANTACAO_INICIADA_PENDENTE_PRIMEIRA_AVALIACAO = 2;
    const IMPLANTACAO_INICIADA_FEITA_PRIMEIRA_AVALIACAO = 3;
    const IMPLANTACAO_FINALIZADA_PENDENTE_SEGUNDA_AVALIACAO = 4;
    const IMPLANTACAO_FINALIZADA_FEITA_SEGUNDA_AVALIACAO = 5;

    public $CLI_DTCADASTRO_FINAL;
    public $ATD_LIMIT;
    public $CLI_DTEDICAO_FINAL;
    public $CLI_RELATORIO;
    public $ATD_DTCADASTRO;
    public $ATD_IDFUNCIONARIO;
    public $busca_suporte;
    public $busca;
    public $vinculados;
    public $CLI_UF;
    public $CLI_PENDENCIAS;
    public $CLI_MODULOS_COMPLEMENTARES;
    public $CLI_DOCUMENTOS_FISCAIS;
    public $CLI_DTATIVACAO_FINAL;
    public $CLI_DT_POSVENDAS;
    public $CLI_DT_POSVENDAS_FINAL;
    public $CLI_DT_AVALIACAO_IMPLANTACAO;
    public $CLI_DT_AVALIACAO_IMPLANTACAO2;
    public $CLI_DT_AVALIACAO_IMPLANTACAO_FINAL;
    public $CLI_DT_AVALIACAO_IMPLANTACAO_FINAL2;
    public $CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO;
    public $CLI_DT_PROXIMO_POSVENDAS_FINAL;
    public $CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO_FINAL;
    public $CLI_DT_PROXIMO_POSVENDAS_FINAL_EMPTY;
    public $CLI_NOTA_SATISFACAO;
    public $CLI_DTRESCISAO_FINAL;
    public $CLI_VLRMENSAL_FINAL;
    public $CLI_VLRMENSAL;
    public $SEARCH_GROUP;
    public $CLI_EXCETO;
    public $CLI_EXCETO_FINAL;
    public $CLI_EXCETO_SETOR;
    public $CLI_DT_ULTIMA_VISITA_COMERCIAL;
    public $CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL;
    public $CLI_DT_PROXIMA_VISITA_COMERCIAL;
    public $CLI_DT_ULTIMA_VISITA_SUPORTE;
    public $CLI_DT_ULTIMA_ATIVIDADE_SUPORTE;
    public $CLI_DT_PROXIMA_VISITA_SUPORTE;
    public $CLI_DT_ULTIMA_ATIVIDADE;
    public $CLI_DT_ULTIMA_ATIVIDADE_FINAL;
    public $CLI_DT_ULTIMA_ATIVIDADE_SETOR;
    public $CLI_DT_PROXIMA_VISITA;
    public $CLI_DT_PROXIMA_VISITA_FINAL;
    public $CLI_DT_PROXIMA_VISITA_SETOR;
    public $CLI_DT_ULTIMA_VISITA;
    public $CLI_DT_ULTIMA_VISITA_FINAL;
    public $CLI_DT_ULTIMA_VISITA_SETOR;
    public $CLE_EMAIL;
    public $CLI_SIMPLES;
    public $COT_ALTERAR_VENCIMENTO;
    public $CLI_WHATSAPP_FIELDS;
    public $CLI_WHATSAPP_CHECKBOX2 = "false";
    public $CLI_WHATSAPP_CHECKBOX3 = "false";
    public $SINTETICO;
    public $TOKEN;
    public $situacao_revisao;
    public $CLI_SEM_CONTRATO;

    const STATUS_DOCUMENTOS_REVISAO_PENDENTE = 0;
    const STATUS_DOCUMENTOS_REVISAO_REVISADO = 1;
    const STATUS_DOCUMENTOS_REVISAO_CLIENTE_RECENTE = 2;

    public static $tipo_registro_revisao = array(
        Clientes::STATUS_DOCUMENTOS_REVISAO_PENDENTE => "Pendente de Revisão",
        Clientes::STATUS_DOCUMENTOS_REVISAO_REVISADO => "Revisado",
        Clientes::STATUS_DOCUMENTOS_REVISAO_CLIENTE_RECENTE  => "Cliente Recente"
        );


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

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

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

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

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

    public function rules()
    {
        $rules =  array(
            array('CLI_EMAIL, CLI_EMAIL_AREA_CLIENTES', 'possuiEmail'),
            array('CLI_SITUACAO, CLI_IDVENDEDOR, CLI_TIPOPESSOA, CLI_NIVELINTERESSE, CLI_NOME, CLI_BAIRRO, CLI_FONE1, CLI_IDMOTIVO, CLI_IDFORNECEDOR, CLI_IDRAMO, CLI_WHATSAPP_CHECKBOX2, CLI_WHATSAPP_CHECKBOX3', 'required'),
            array('CLI_IDREVENDA, CLI_IDVENDEDOR, CLI_CIDADE, CLI_IDMOTIVO, CLI_IDFORNECEDOR, CLI_IDCONTADOR, CLI_IDRAMO, CLI_IDREGIAO, CLI_ACESSOS, CLI_IDEMPRESA, CLI_IDRESCISAO, CLI_IDVERSAO, CLI_IMPLANTACAO', 'numerical', 'integerOnly' => true),
            array('CLI_NOME, CLI_FANTASIA, CLI_ENDERECO, CLI_EMAIL, CLI_EMAIL_AREA_CLIENTES, CLI_HOMEPAGE, CLI_PONTOREFERENCIA, CLI_DTEDICAO, CLI_CONTATO', 'length', 'max' => 255),
            array('CLI_CNPJCPF', 'length', 'max' => 19),
            array('CLI_INSCR_EST, CLI_RG, CLI_FONE1, CLI_FONE2, CLI_FONE3, CLI_FAX, CLI_NUMERO', 'length', 'max' => 15),
            array('CLI_INSCR_MUN, CLI_RELATORIO, ATD_DTCADASTRO', 'length', 'max' => 20),
            array('CLI_CEP', 'length', 'max' => 10),
            array('CLI_CNPJCPF', 'verificaDuplicidade'),
            array('CLI_EMAIL', 'email'),
            array('CLI_EMAIL_AREA_CLIENTES', 'email'),
            array('CLI_BAIRRO, CLI_COMPLEMENTO', 'length', 'max' => 100),
            array('CLI_SITUACAO', 'length', 'max' => 5),
            array('CLI_NIVELINTERESSE, CLI_TIPOPESSOA, CLI_SCHEMASATUALIZADOS', 'length', 'max' => 1),
            array(
                '
                    CLI_OBS, CLI_DTULTSENHA, CLI_DTULTLOGIN, CLI_DTRESCISAO, CLI_DTRESCISAO_FINAL, ATD_DTCADASTRO,
                    CLI_PRODUTO, CLI_MODULO1, CLI_MODULO2, CLI_MODULO3, CLI_MODULO4, CLI_MODULO5, CLI_QTDUSUARIOS,
                    CLI_VLRMENSAL, CLI_VALORIMPLANTACAO, CLI_MESREAJUSTE, CLI_CHAVEACESSO, CLI_DTCONTRATO,
                    CLI_DIAVENCIMENTO, CLI_IMPLANTACAO, CLI_POSSUIEMAIL, CLI_DTATIVACAO, CLI_DTCONTRATO,
                    CLI_DT_POSVENDAS, CLI_DT_PROXIMO_POSVENDAS, CLI_NOTA_SATISFACAO_SISTEMA,
                    CLI_NOTA_SATISFACAO_ATENDIMENTO, CLI_DT_AVALIACAO_IMPLANTACAO, CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO,
                    CLI_NOTA_SATISFACAO_IMPLANTACAO, CLI_DT_AVALIACAO_IMPLANTACAO_FINAL, CLI_DT_POSVENDAS_FINAL,
                    CLI_MODULOS_COMPLEMENTARES, CLI_VLRMENSAL_FINAL,SEARCH_GROUP, CLI_DTATIVACAO_FINAL,
                    CLI_NOTA_SATISFACAO, CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO_FINAL, CLI_DT_PROXIMO_POSVENDAS_FINAL,
                    CLI_DT_ULTIMA_VISITA_COMERCIAL, CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL, CLI_DT_PROXIMA_VISITA_COMERCIAL,
                    CLI_DT_ULTIMA_VISITA_SUPORTE, CLI_DT_ULTIMA_ATIVIDADE_SUPORTE, CLI_DT_PROXIMA_VISITA_SUPORTE,
                    CLI_DT_ULTIMA_ATIVIDADE, CLI_DT_ULTIMA_ATIVIDADE_FINAL, CLI_DT_ULTIMA_VISITA,
                    CLI_DT_ULTIMA_VISITA_FINAL, CLI_DT_PROXIMA_VISITA, CLI_DT_PROXIMA_VISITA_FINAL,
                    CLI_DT_AVALIACAO_IMPLANTACAO2, CLI_DT_AVALIACAO_IMPLANTACAO_FINAL2, CLI_IDCONTADOR, CLI_SENHA,
                    SINTETICO, TOKEN, CLI_UF, CLI_DEMONSTRACAO, CLI_IDMOTIVO_FN, CLI_INDICACAO, CLE_EMAIL,
                    CLI_WHATSAPP_FIELDS,situacao_revisao,CLI_SEM_CONTRATO,CLI_STATUS_REVISAO,CLI_SERVIDOR_REPLICACAO
                ',
                'safe'
            ),
            array('CLI_IDREVENDA, CLI_IDVENDEDOR, CLI_NOME, CLI_FANTASIA, CLI_ENDERECO, CLI_NUMERO, CLI_CNPJCPF, CLI_INSCR_EST, CLI_SIMPLES, CLI_INSCR_MUN, CLI_RG, CLI_FONE1, CLI_FONE2, CLI_FONE3, CLI_FAX, CLI_EMAIL, CLI_HOMEPAGE, CLI_CEP, CLI_CIDADE, CLI_BAIRRO, CLI_SITUACAO, CLI_NIVELINTERESSE, CLI_IDMOTIVO, CLI_DT_PROXIMA_VISITA_COMERCIAL, CLI_IDFORNECEDOR, CLI_IDCONTADOR, CLI_IDRAMO, CLI_COMPLEMENTO, CLI_PONTOREFERENCIA, CLI_IDREGIAO, CLI_OBS, CLI_SENHA, CLI_ACESSOS, CLI_DTULTSENHA, CLI_DTULTLOGIN, CLI_IDEMPRESA, CLI_TIPOPESSOA, CLI_DTRESCISAO, CLI_IDRESCISAO, CLI_SCHEMASATUALIZADOS, CLI_IMPLANTACAO', 'default', 'setOnEmpty' => true, 'value' => null),
            array('CLI_IDCLIENTE, CLI_IDREVENDA, CLI_IDVENDEDOR, CLI_NOME, CLI_FANTASIA, CLI_ENDERECO, CLI_NUMERO, CLI_CNPJCPF, CLI_INSCR_EST, CLI_SIMPLES, CLI_INSCR_MUN, CLI_RG, CLI_FONE1, CLI_FONE2, CLI_FONE3, CLI_FAX, CLI_EMAIL, CLI_EMAIL_AREA_CLIENTES, CLI_HOMEPAGE, CLI_CEP, CLI_CIDADE, CLI_BAIRRO, CLI_SITUACAO, CLI_NIVELINTERESSE, CLI_IDMOTIVO, CLI_DT_PROXIMA_VISITA_COMERCIAL, CLI_IDFORNECEDOR, CLI_IDCONTADOR, CLI_IDRAMO, CLI_COMPLEMENTO, CLI_PONTOREFERENCIA, CLI_IDREGIAO, CLI_OBS, CLI_SENHA, CLI_ACESSOS, CLI_DTULTSENHA, CLI_DTULTLOGIN, CLI_IDEMPRESA, CLI_TIPOPESSOA, CLI_DTRESCISAO, CLI_IDRESCISAO, CLI_SCHEMASATUALIZADOS, CLI_DTCADASTRO_FINAL, CLI_DTEDICAO_FINAL, CLI_DT_PROXIMA_VISITA_FINAL, CLI_DTRESCISAO, cLIIDRECISAO, CLI_RELATORIO, ATD_DTCADASTRO, CLI_EXCETO, CLI_EXCETO_FINAL, CLI_DT_ULTIMA_ATIVIDADE_SETOR, CLI_DT_PROXIMA_VISITA_SETOR, CLI_DT_ULTIMA_VISITA_SETOR, CLI_EXCETO_SETOR, busca, busca_suporte, CLI_PRODUTO, CLI_MODULO1, CLI_MODULO2, CLI_MODULO3, CLI_MODULO4, CLI_MODULO5, CLI_QTDUSUARIOS, CLI_VLRMENSAL, CLI_MESREAJUSTE, CLI_CHAVEACESSO, CLI_DTCONTRATO, CLI_DIAVENCIMENTO, CLI_IDVERSAO, CLI_IMPLANTACAO, CLI_MODULOS_COMPLEMENTARES, CLI_DOCUMENTOS_FISCAIS', 'safe', 'on' => 'search,searchRelatorioSemVisitas'),
            array('CLI_DTCADASTRO, CLI_DTCADASTRO_FINAL, CLI_DTEDICAO, CLI_DT_PROXIMA_VISITA_FINAL, CLI_DTEDICAO_FINAL', 'default', 'setOnEmpty' => true, 'value' => null),
            array('CLI_DTCADASTRO', 'default', 'value' => date('d/m/Y'), 'setOnEmpty' => false, 'on' => 'insert'),
            array('CLI_DTEDICAO', 'default', 'value' => date('d/m/Y'), 'setOnEmpty' => false, 'on' => 'insert'),
            array('CLI_DTEDICAO', 'default', 'value' => date('d/m/Y'), 'setOnEmpty' => false, 'on' => 'update'),
            array('CLI_FONE1, CLI_FONE2, CLI_FONE3', 'validateFone'),
            array('CLI_INDICACAO', 'validateIndicacao', 'on' => 'insert'),
            array('CLI_CIDADE', 'required', 'on' => 'insert'),
            array('CLI_CIDADE', 'required', 'on' => 'update'),
            );
        if (!empty($this->CLI_IDRAMO)) {
            $rules[] = array('CLI_TIPOPESSOA', 'VerificaContador', 'CLI_IDRAMO' => !empty($this->CLI_IDRAMO), 'on' => 'insert');
        }

//        if (!empty($this->CLI_IDCONTADOR)) {
//            $rules[] = array('CLI_IDCONTADOR', 'VerificaContador1', 'CLI_IDCONTADOR' => $this->CLI_IDCONTADOR);
//        }

        return $rules;
    }

    public function relations()
    {
        return array(
            'Arquivos'                  => array(self::HAS_MANY, 'Arquivos', 'ARQ_FOREIGNKEY', 'condition'=>'Arquivos.ARQ_MODEL="Clientes"'),
            'Atendimentos'              => array(self::HAS_MANY, 'Atendimentos', 'ATD_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'Cidade'                    => array(self::BELONGS_TO, 'Cidades', 'CLI_CIDADE', 'joinType' => 'LEFT JOIN'),
            'ClientesVinculados'        => array(self::HAS_MANY, 'ClientesVinculados', 'VIN_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'ClientesEmailsAdicionais'  => array(self::HAS_MANY, 'ClientesEmailsAdicionais', 'CLE_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'ComoConheceu'              => array(self::BELONGS_TO, 'Motivos', 'CLI_IDMOTIVO', 'joinType' => 'LEFT JOIN'),
            'Contador'                  => array(self::BELONGS_TO, 'Clientes', 'CLI_IDCONTADOR', 'joinType' => 'LEFT JOIN'),
            'Contratos'                 => array(self::HAS_MANY, 'Contratos', 'COT_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'DocumentosFiscais'         => array(self::HAS_MANY, 'ClientesDocumentosFiscais', 'CDF_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'DispositivosMoveis'        => array(self::HAS_MANY, 'ClientesDispositivosMoveis', 'CDM_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'Fornecedor'                => array(self::BELONGS_TO, 'Fornecedores', 'CLI_IDFORNECEDOR', 'joinType' => 'LEFT JOIN'),
            'HorasContratadas'          => array(self::HAS_MANY, 'HorasContratadas', 'HOC_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'Indicacao'                 => array(self::BELONGS_TO, 'Clientes', 'CLI_INDICACAO', 'joinType' => 'LEFT JOIN'),
            'ModuloComplementar1'       => array(self::BELONGS_TO, 'Modulos', 'CLI_MODULO1', 'joinType' => 'LEFT JOIN'),
            'ModuloComplementar2'       => array(self::BELONGS_TO, 'Modulos', 'CLI_MODULO2', 'joinType' => 'LEFT JOIN'),
            'ModuloComplementar3'       => array(self::BELONGS_TO, 'Modulos', 'CLI_MODULO3', 'joinType' => 'LEFT JOIN'),
            'ModuloComplementar4'       => array(self::BELONGS_TO, 'Modulos', 'CLI_MODULO4', 'joinType' => 'LEFT JOIN'),
            'ModuloComplementar5'       => array(self::BELONGS_TO, 'Modulos', 'CLI_MODULO5', 'joinType' => 'LEFT JOIN'),
            'ModuloMobile'              => array(self::BELONGS_TO, 'Modulos', 'CLI_IDMODULO_MOBILE', 'joinType' => 'LEFT JOIN'),
            'MotivoFechamentoNegativo'  => array(self::BELONGS_TO, 'Motivos', 'CLI_IDMOTIVO_FN'),
            'MotivoRescisao'            => array(self::BELONGS_TO, 'Motivos', 'CLI_IDRESCISAO', 'joinType' => 'LEFT JOIN'),
            'ProdutoContratado'         => array(self::BELONGS_TO, 'Modulos', 'CLI_PRODUTO', 'joinType' => 'LEFT JOIN'),
            'RamoAtividade'             => array(self::BELONGS_TO, 'RamosAtividades', 'CLI_IDRAMO', 'joinType' => 'LEFT JOIN'),
            'Regiao'                    => array(self::BELONGS_TO, 'Regioes', 'CLI_IDREGIAO', 'joinType' => 'LEFT JOIN'),
            'TrocasStatus'              => array(self::BELONGS_TO, 'SituacoesClientes', 'CST_IDCLIENTE', 'joinType' => 'LEFT JOIN'),
            'UltimoAtendimento'         => array(self::HAS_ONE, 'Atendimentos', 'ATD_IDCLIENTE', 'joinType' => 'LEFT JOIN', 'order'=>'UltimoAtendimento.ATD_DTCADASTRO DESC, UltimoAtendimento.ATD_HORAINICIO DESC, UltimoAtendimento.ATD_DTLANCAMENTO DESC'),
            'VendedorResponsavel'       => array(self::BELONGS_TO, 'Funcionarios', 'CLI_IDVENDEDOR', 'joinType' => 'LEFT JOIN'),
            'Versao'                    => array(self::BELONGS_TO, 'Versoes', 'CLI_IDVERSAO', 'joinType' => 'LEFT JOIN'),
            'RegioesCidades'            => array(self::HAS_ONE, 'Regioescidades', array('CID_IDCIDADE' => 'RCD_IDCIDADE'), 'through'=>'Cidade'),
            'RevendaResponsavel'        => array(self::HAS_ONE, 'Revendas', array('RCD_IDREVENDA' => 'REV_IDREVENDA'), 'through'=>'RegioesCidades'),
            );
    }

    public function getFieldRelation($field)
    {
        $relations = $this->relations();
        foreach ($relations as $key => $relation) {
            if ($field == $relation[2]) {
                return $key;
            }
        }

        return false;
    }

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

    public function attributeLabels()
    {
        return array(
            'CLI_IDCLIENTE'                         => 'Código',
            'CLI_IDREVENDA'                         => 'Unidade de Negócios',
            'CLI_IDVENDEDOR'                        => 'Vendedor',
            'CLI_NOME'                              => 'Razão Social',
            'CLI_FANTASIA'                          => 'Nome Fantasia',
            'CLI_ENDERECO'                          => 'Endereço',
            'CLI_NUMERO'                            => 'Número',
            'CLI_CNPJCPF'                           => 'CNPJ / CPF',
            'CLI_INSCR_EST'                         => 'Inscrição Estadual',
            'CLI_SIMPLES'                           => 'Optante Simples Nacional',
            'CLI_INSCR_MUN'                         => 'Inscrição Municipal',
            'CLI_RG'                                => 'RG',
            'CLI_FONE1'                             => 'Telefone',
            'CLI_FONE2'                             => 'Telefone 2',
            'CLI_FONE3'                             => 'Telefone 3',
            'CLI_FAX'                               => 'Fax',
            'CLI_POSSUIEMAIL'                       => 'Possui e-mail?',
            'CLI_EMAIL'                             => 'E-mail para envio de boletos e notas fiscais',
            'CLI_EMAIL_AREA_CLIENTES'               => 'E-mail Área do Cliente',
            'CLI_HOMEPAGE'                          => 'Website',
            'CLI_CEP'                               => 'CEP',
            'CLI_CIDADE'                            => 'Cidade',
            'CLI_BAIRRO'                            => 'Bairro',
            'CLI_SITUACAO'                          => 'Status',
            'CLI_DTCADASTRO'                        => 'Data de Cadastro',
            'CLI_DTCADASTRO_FINAL'                  => 'Data final de cadastro',
            'CLI_DTEDICAO'                          => 'Última Atividade',
            'CLI_DTEDICAO_FINAL'                    => 'Última atualização final',
            'CLI_DT_PROXIMA_VISITA_FINAL'           => 'Data final da última visita',
            'CLI_NIVELINTERESSE'                    => 'Nivel de Interesse',
            'CLI_IDMOTIVO'                          => 'Como nos Conheceu',
            'CLI_DT_PROXIMA_VISITA_COMERCIAL'       => 'Próxima Visita',
            'CLI_IDFORNECEDOR'                      => 'Fornecedor do Sistema',
            'CLI_IDCONTADOR'                        => 'Contador',
            'CLI_IDRAMO'                            => 'Ramo de Atividade',
            'CLI_COMPLEMENTO'                       => 'Complemento',
            'CLI_PONTOREFERENCIA'                   => 'Ponto de Referência',
            'CLI_IDREGIAO'                          => 'Região',
            'CLI_OBS'                               => 'Observações',
            'CLI_SENHA'                             => 'Senha',
            'CLI_ACESSOS'                           => 'Acessos',
            'CLI_DTULTSENHA'                        => 'Data última senha',
            'CLI_DTULTLOGIN'                        => 'Data último login',
            'CLI_IDEMPRESA'                         => 'Empresa',
            'CLI_TIPOPESSOA'                        => 'Tipo de Pessoa',
            'CLI_IDRESCISAO'                        => 'Código Rescisão',
            'CLI_SCHEMASATUALIZADOS'                => 'Schemas Atualizados',
            'Regiao'                                => 'Região',
            'RevendaResponsavel'                    => 'Unidade de Negócios',
            'VendedorResponsavel'                   => 'Vendedor',
            'Cidade'                                => 'Cidade',
            'ComoConheceu'                          => 'Como nos Conheceu',
            'Fornecedor'                            => 'Fornecedor de Sistema',
            'Contador'                              => 'Contador',
            'RamoAtividade'                         => 'Ramo de Atividade',
            'cIDATENDIMENTO'                        => 'Data de Ediçao',
            'CLI_CONTATO'                           => 'Contato',
            'CLI_DTRESCISAO'                        => 'Data de Rescisão',
            'CLI_IDRESCISAO'                        => 'Motivo de Rescisão',
            'ATD_DTCADASTRO'                        => 'Última Atividade',
            'ClientesVinculados'                    => 'Clientes Vinculados',
            'CLE_EMAIL'                             => 'E-mail Adicional',
            'CLI_PRODUTO'                           => 'Produto',
            'CLI_MODULO1'                           => 'Módulo Adicional',
            'CLI_MODULO2'                           => 'Módulo Adicional',
            'CLI_MODULO3'                           => 'Módulo Adicional',
            'CLI_MODULO4'                           => 'Módulo Adicional',
            'CLI_MODULO5'                           => 'Módulo Adicional',
            'CLI_QTDUSUARIOS'                       => 'Número de Usuários',
            'CLI_VLRMENSAL'                         => 'Valor Mensal',
            'CLI_MESREAJUSTE'                       => 'Mês de Reajuste',
            'CLI_CHAVEACESSO'                       => 'Chave de Acesso',
            'CLI_DTCONTRATO'                        => 'Cliente Desde',
            'CLI_DTATIVACAO'                        => 'Data de ativação',
            'CLI_DIAVENCIMENTO'                     => 'Dia Vencimento',
            'CLI_DTCHAVEGERADA'                     => 'Data Geração Chave de Acesso',
            'CLI_EXCETO'                            => 'Sem atividades',
            'CLI_PENDENCIAS'                        => 'Financeiro',
            'CLI_IDVERSAO'                          => 'Versão',
            'CLI_IMPLANTACAO'                       => 'Implantação',
            'CLI_HORASIMPLANTACAO'                  => 'Horas Implantação',
            'CLI_MODULOS_COMPLEMENTARES'            => 'Módulos Complementares',
            'CLI_DOCUMENTOS_FISCAIS'                => 'Documentos Fiscais',
            'CLI_DT_POSVENDAS'                      => 'Último Pós-vendas',
            'CLI_DT_POSVENDAS_FINAL'                => 'Data Pós-vendas final',
            'CLI_DT_PROXIMO_POSVENDAS'              => 'Próximo Pós-vendas',
            'CLI_DT_AVALIACAO_IMPLANTACAO'          => 'Primeira Avaliação Implantação',
            'CLI_DT_AVALIACAO_IMPLANTACAO2'         => 'Segunda Avaliação Implantação',
            'CLI_DT_AVALIACAO_IMPLANTACAO_FINAL'    => 'Data Avaliação Implantação final',
            'CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO'  => 'Próxima avaliação',
            'CLI_NOTA_SATISFACAO'                   => 'Nível de satisfação',
            'CLI_NOTA_SATISFACAO_SISTEMA'           => 'Satisfação Sistema',
            'CLI_NOTA_SATISFACAO_ATENDIMENTO'       => 'Satisfação Atendimento',
            'CLI_NOTA_SATISFACAO_IMPLANTACAO'       => 'Primeira Avaliação Implantação',
            'CLI_NOTA_SATISFACAO_IMPLANTACAO2'      => 'Segunda Avaliação Implantação',
            'SEARCH_GROUP'                          => 'Agrupar por',
            'CLI_DT_ULTIMA_VISITA_SUPORTE'          => 'Última visita suporte',
            'CLI_DT_ULTIMA_VISITA_COMERCIAL'        => 'Última visita comercial',
            'CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL'     => 'Última atividade',
            'CLI_DT_ULTIMA_ATIVIDADE_SUPORTE'       => 'Última atividade',
            'CLI_DT_ULTIMA_ATIVIDADE'               => 'Última atividade',
            'CLI_DT_ULTIMA_ATIVIDADE_FINAL'         => 'Última atividade final',
            'CLI_DT_PROXIMA_VISITA'                 => 'Próxima visita',
            'CLI_DT_PROXIMA_VISITA_FINAL'           => 'Próxima visita final',
            'CLI_DT_ULTIMA_VISITA'                  => 'Última visita ',
            'CLI_DT_ULTIMA_VISITA_FINAL'            => 'Última visita',
            'SINTETICO'                             => 'Exportar somente relatório sintético',
            'CLI_UF'                                => 'Estado',
            'CLI_DEMONSTRACAO'                      => 'Realizada demonstração',
            'CLI_IDMOTIVO_FN'                       => 'Mot. Fechamento Negativo',
            'CLI_INDICACAO'                         => 'Indicado por',
            'CLI_STATUS_REVISAO'                    => 'Status da Revisão',
            'CLI_SERVIDOR_REPLICACAO'               => 'Endereço do servidor de replicação',
            );
    }

    public function beforeSave()
    {
        parent::beforeSave();
        if ($this->isNewRecord) {
            $this->CLI_DTCADASTRO = date('Y-m-d');
        } else {
            $this->CLI_DTEDICAO = date('Y-m-d');
        }
        $this->CLI_FONE1 = Util::mask($this->CLI_FONE1, Mask::TELEFONE);
        $this->CLI_FONE2 = Util::mask($this->CLI_FONE2, Mask::TELEFONE);
        $this->CLI_FONE3 = Util::mask($this->CLI_FONE3, Mask::TELEFONE);
        $this->CLI_FAX   = Util::mask($this->CLI_FAX, Mask::TELEFONE);
        return true;
    }

    public function beforeValidate()
    {
        if(!empty($this->CLI_CNPJCPF)) {
            $this->CLI_CNPJCPF = Util::unmask($this->CLI_CNPJCPF);
        }
        return parent::beforeValidate();
    }

    public function afterDelete()
    {
        parent::afterDelete();
        if (!empty($this->Arquivos)) {
            foreach ($this->Arquivos as $arquivo)
            $arquivo->delete();
        }

        return true;
    }

    public function loadWhatsappFields()
    {
        $whatsappFields = array();
        if (!empty($this->CLI_WHATSAPP_FIELDS) && !is_array($this->CLI_WHATSAPP_FIELDS)) {
            $whatsappFields = CJSON::decode($this->CLI_WHATSAPP_FIELDS);
        }
        return $whatsappFields;
    }

    public function verificaDuplicidade($attribute, $params)
    {
        if (!empty($this->{$attribute})) {
            $conditions = array("CLI_CNPJCPF = '{$this->{$attribute}}'");
            if(!empty($this->CLI_IDCLIENTE)) {
                $conditions[] = "CLI_IDCLIENTE<>'$this->CLI_IDCLIENTE'";
            }
            $conditions = implode(' AND ', $conditions);
            $count = $this->count($conditions);
            if ($count > 0) {
                $id = $this->find($conditions)->CLI_IDCLIENTE;
                $this->addError($attribute, "Já existe o cliente código {$id} utilizando o {$this->getAttributeLabel($attribute)} informado!");
            }
        }
    }

    public function validateFone($attribute, $params)
    {
        $whatsappFields = $this->loadWhatsappFields();
        if(!empty(Util::unmask($this->{$attribute}))) {
            if (!in_array($attribute, $whatsappFields)) {
                if(!Util::validateFone($this->{$attribute})) {
                    $this->addError($attribute, $this->getAttributeLabel($attribute) . ' com formato inválido, somente permitidos (XX)XXXX-XXXX ou (XX)XXXXX-XXXX.');
                    return false;
                }
            } else {
                if(!Util::validateCelular($this->{$attribute})) {
                    $this->addError($attribute, $this->getAttributeLabel($attribute) . ' com formato inválido, para números de Whatsapp somente são permitidos números de celular.');
                    return false;
                }
            }
        } elseif ($attribute != "CLI_FONE1" && in_array($attribute, $whatsappFields)) {
            $this->addError($attribute, "Campo {$this->getAttributeLabel($attribute)} é obrigatório quando a opção Whatsapp está selecionada!");
            return false;
        }
        return true;
    }

    public function validateIndicacao($attribute, $params)
    {
        if (in_array($this->CLI_IDMOTIVO, [51, 52, 53, 71])) {
            if (empty($this->CLI_INDICACAO)) {
                $this->addError($attribute, 'Campo obrigatório para indicações!');
                return false;
            }
        }

        return true;
    }


    public function possuiEmail($attribute, $params) {
        if((int)$this->CLI_POSSUIEMAIL == 1 && empty($this->{$attribute}))
            $this->addError($attribute, "{$this->getAttributeLabel($attribute)} é obrigatório.");
    }

    public function VerificaContador($attribute, $params)
    {
        if ($this->CLI_IDRAMO == '230' and $this->CLI_TIPOPESSOA != 'C') {
            $this->addError($attribute, 'Tipo de pessoa necessita ser Contador.');
        }
    }

//    public function VerificaContador1($attribute, $params)
//    {
//        if ($this->CLI_TIPOPESSOA != 'C' and empty($this->CLI_IDCONTADOR)) {
//            $this->addError($attribute, 'Contador é um campo obrigatório.');
//        }
//    }

    public function isAtivo()
    {
        return $this->CLI_SITUACAO == 'A';
    }

    public function isMatrizFilial()
    {
        return $this->isMatriz() || $this->isFilial();
    }

    public function isMatriz()
    {
        if($this->getRevendaResponsavel2()) {
            return $this->getRevendaResponsavel2()->isMatriz();
        }
        $count = Regioescidades::model()->with('Revenda')->count('REV_TIPO = '.Revendas::MATRIZ.' AND RCD_IDCIDADE = ' . $this->CLI_CIDADE);
        return $count != 0;
    }

    public function isFilial()
    {
        if($this->getRevendaResponsavel2()) {
            return $this->getRevendaResponsavel2()->isFilial();
        }
        $count = Regioescidades::model()->with('Revenda')->count('REV_TIPO in('.Revendas::MATRIZ.', '.Revendas::MATRIZ.') AND RCD_IDCIDADE = ' . $this->CLI_CIDADE);
        return $count != 0;
    }

    public function podeCadastrarDocumento($COT_SITUACAO)
    {
        if(!$this->CLI_IDCLIENTE)
            return;

        switch ($COT_SITUACAO) {
            case Contratos::CONTRATO:
            return $this->podeCadastrarContrato();
            break;

            case Contratos::ADENDO:
            return $this->podeCadastrarAdendo();
            break;

            case Contratos::PEDIDO_CUSTOMIZACAO:
            return $this->podeCadastrarPedidoCustomizacao();
            break;

            case Contratos::PEDIDO_REATIVACAO:
            return $this->podeCadastrarPedidoReativacao();
            break;

            case Contratos::PEDIDO_IMPLANTACAO:
            return $this->podeCadastrarPedidoImplantacao();
            break;

            case Contratos::ORCAMENTO:
            return true;
            break;
        }
        return;
    }

    public function podeCadastrarContrato($transferencia = false)
    {
        if(!$this->CLI_IDCLIENTE)
            return;

        if(!$transferencia) {
            if($this->CLI_SITUACAO == "A" || $this->CLI_SITUACAO == "I")
                return false;
        }

        if (!$this->cadastroCompleto())
            return false;

        $status = '5, 9, 12, 13, 16, 17, 18, 24, 25';
        if($transferencia) {
            //$status .= ',2';
        }
        $contratos = Contratos::model()->count('
            COT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND
            COT_SITUACAO = "'.Contratos::CONTRATO.'" AND
            COT_STATUS NOT IN ('.$status.')');
        if($contratos > 0)
            return false;

        if(!$transferencia) {
            // AUTORIZADO
            // não permitir cadastrar contrato quando na tela do cliente
            // houver termo de transferencia em aberto
            $solicitacoesTransferencia = ClientesTransferencias::model()->count('
                CLT_IDCLIENTE_AUTORIZADO = ' . $this->CLI_IDCLIENTE . ' AND
                CLT_STATUS IN ("A", "AV", "V", "P", "E")
            ');
            if($solicitacoesTransferencia > 0)
                return false;
        }

        return true;
    }

    public function podeCadastrarAdendo()
    {
        if(!$this->CLI_IDCLIENTE)
            return;
        if (!$this->cadastroCompleto())
            return false;
        $ContratosAtivos = Contratos::model()->count('COT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' and COT_STATUS IN(2, 19)');
        // clientes inativos (e sem contratos ou adendos ativos não permitir adendo)
        // clientes winsul (feita transferencia permitir adendo)
        $transferenciaWinsulWindel = ClientesTransferencias::model()->count('
            CLT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND
            CLT_TIPO in("'.ClientesTransferencias::TIPO_SISTEMA.'", "'.ClientesTransferencias::TIPO_SISTEMA_BANCO.'") AND
            CLT_STATUS IN ("A", "AV", "V", "P", "E") AND 
            (CLT_IDCLIENTE_AUTORIZADO = ' . $this->CLI_IDCLIENTE . ' || CLT_CNPJCPF = "' . $this->CLI_CNPJCPF . '")
        ');
        if((!$this->isAtivo() && $ContratosAtivos == 0) || ($this->CLI_IDEMPRESA == 2 && $transferenciaWinsulWindel == 0))
            return false;

        $adendosPendentes = Contratos::model()->count('COT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' and COT_SITUACAO = "'.Contratos::ADENDO.'" and COT_STATUS NOT IN(2, 5, 9, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25)');
        if ($adendosPendentes != 0)
            return false;

        // não permitir cadastrar adendo na tela do cliente AUTORIZADOR quando
        // houver termo de transferencia de SISTEMA ou de SISTEMA E BANCO DE DADOS em aberto
        $solicitacoesTransferencia = ClientesTransferencias::model()->count('
            CLT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND
            CLT_TIPO in("'.ClientesTransferencias::TIPO_SISTEMA.'", "'.ClientesTransferencias::TIPO_SISTEMA_BANCO.'") AND
            CLT_STATUS IN ("A", "AV", "V", "P", "E") AND 
            CLT_IDCLIENTE_AUTORIZADO <> ' . $this->CLI_IDCLIENTE . ' 
            AND CLT_CNPJCPF <> "' . $this->CLI_CNPJCPF . '"
        ');
        if($solicitacoesTransferencia > 0)
            return false;

        return true;
    }

    public function podeCadastrarPedidoCustomizacao()
    {
        return false;
        if(!$this->CLI_IDCLIENTE)
            return;

        if (!$this->cadastroCompleto())
            return false;

        return $this->isAtivo();
    }

    public function podeCadastrarPedidoReativacao()
    {
        if(!$this->CLI_IDCLIENTE)
            return;
        $pedidosdeReativacaoPendentes = Contratos::model()->count('
            COT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' and 
            COT_SITUACAO = "'.Contratos::PEDIDO_REATIVACAO.'" 
            AND COT_STATUS NOT IN(5, 9, 12, 13, 16, 17, 18, 19, 23, 24, 25)'
        );
        if($pedidosdeReativacaoPendentes != 0)
            return false;

        $ContratosAtivos = Contratos::model()->count('COT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' and COT_STATUS IN(2, 19)');
        if($this->isAtivo() || $ContratosAtivos > 0)
            return false;
        if($this->CLI_SITUACAO != "I")
            return false;

        return true;
    }

     public function podeCadastrarPedidoImplantacao($transferencia = false)
    {
        if(User::getId() == 452) {
            return true;
        }
        if(!$this->isMatrizFilial())
            return false;
        if(!$this->CLI_IDCLIENTE)
            return;
        if ($this->CLI_SITUACAO == "I")
            return false;
        if (!$this->cadastroCompleto())
            return false;

        $idCliente = $this->CLI_IDCLIENTE;
        $locais = "2, 5, 9, 12, 13, 14, 16, 17, 18, 19, 23, 24, 25";
        if($transferencia) {
            $locais = "5, 9, 12, 13, 16, 17, 18, 24, 25";
        }
        $pedidosPendentes = Contratos::model()->count("
            COT_IDCLIENTE = {$idCliente} and
            COT_SITUACAO ='".Contratos::PEDIDO_IMPLANTACAO."' and
            COT_STATUS NOT IN({$locais})
        ");
        if($pedidosPendentes != 0)
            return false;

        if(!$transferencia) {
            // não permitir cadastrar pedido na tela do cliente AUTORIZADOR quando
            // houver termo de transferencia DE SISTEMA ou SISTEMA e BANCO DE DADOS em aberto
            $solicitacoesTransferencia = ClientesTransferencias::model()->count('
                CLT_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND
                CLT_TIPO in("'.ClientesTransferencias::TIPO_SISTEMA.'", "'.ClientesTransferencias::TIPO_SISTEMA_BANCO.'") AND
                CLT_STATUS IN ("A", "AV", "V", "P", "E") and
                CLT_IDCLIENTE <> CLT_IDCLIENTE_AUTORIZADO
            ');
            if($solicitacoesTransferencia > 0)
                return false;

            // não permitir cadastrar pedido na tela do cliente AUTORIZADO quando
            // houver termo de transferencia em aberto
            $solicitacoesTransferencia = ClientesTransferencias::model()->count('
                CLT_IDCLIENTE_AUTORIZADO = ' . $this->CLI_IDCLIENTE . ' AND
                CLT_STATUS IN ("A", "AV", "V", "E") AND
                CLT_IDCLIENTE <> CLT_IDCLIENTE_AUTORIZADO
            ');
            if($solicitacoesTransferencia > 0)
                return false;
        }

        return true;
    }

    public function cadastroCompleto($retornar_campos = false)
    {
        $completo = true;
        if (empty($this->CLI_CNPJCPF) and strlen($this->CLI_CNPJCPF) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_CNPJCPF');
        }
        if (empty($this->CLI_INSCR_EST) and strlen($this->CLI_INSCR_EST) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_INSCR_EST');
        }
        if (empty($this->CLI_ENDERECO) and strlen($this->CLI_ENDERECO) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_ENDERECO');
        }
        if (empty($this->CLI_NUMERO) and strlen($this->CLI_NUMERO) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_NUMERO');
        }
        if (empty($this->CLI_CEP) and strlen($this->CLI_CEP) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_CEP');
        }
        if (empty($this->CLI_EMAIL_AREA_CLIENTES) and strlen($this->CLI_EMAIL_AREA_CLIENTES) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_EMAIL_AREA_CLIENTES');
        }
        if (empty($this->CLI_IDFORNECEDOR) and strlen($this->CLI_IDFORNECEDOR) == 0) {
            $completo = false;
            $campos_invalidos[] = $this->getAttributeLabel('CLI_IDFORNECEDOR');
        }
        if (!$completo) {
            if ($retornar_campos) {
                return $campos_invalidos;
            }
            return false;
        }
        return true;
    }

    public function countTitulosPendentes()
    { // Financeiro
        $query = "
            SELECT COUNT(*) as count
            FROM titulos
            WHERE
                TIT_IDCLIENTE = {$this->CLI_IDCLIENTE} AND
                TIT_SITUACAO = 1 AND
                TIT_VENCIMENTO < CURDATE() AND
                NOT (
                    TIT_VENCIMENTO = (CURDATE() - INTERVAL 1 DAY) AND 
                    DAYOFWEEK(TIT_VENCIMENTO) = 1
                )
        ";
        return Yii::app()->db->createCommand($query)->queryScalar();
    }

    public function countTitulosPendentesComercial()
    {
        $query = "
            SELECT COUNT(*) as count
            FROM titulos
            WHERE
                TIT_IDCLIENTE = {$this->CLI_IDCLIENTE} AND
                TIT_SITUACAO = 1 AND
                TIT_VENCIMENTO < CURDATE() AND
                NOT (
                    TIT_VENCIMENTO = (CURDATE() - INTERVAL 5 DAY) AND
                    DAYOFWEEK(TIT_VENCIMENTO) = 1
                )
        ";
        return Yii::app()->db->createCommand($query)->queryScalar();
    }

    public function countTitulosSvPendentes()
    {
        return Yii::app()->db->createCommand("
                            SELECT count(*) as count
                            FROM titulos_svextras
                            WHERE TITSV_IDCLIENTE = {$this->CLI_IDCLIENTE}
                            AND TITSV_TITULOGERADO = 1
                            AND TITSV_VENCIMENTO < CURDATE()
                            AND not (TITSV_VENCIMENTO = (CURDATE() - INTERVAL 1 DAY)
                            AND DAYOFWEEK(TITSV_VENCIMENTO) = 1)")
            ->queryScalar();
    }

    public function searchVincular()
    {
        $criteria = new CDbCriteria;

        $IDS_NOTLIST = array();
        $cliente = $this->findByPk($this->CLI_IDCLIENTE);
        if(!$cliente) {
            $criteria->addCondition('CLI_IDCLIENTE = -1');
            return $criteria;
        }
        $vinculados = ClientesVinculados::model()->findAll('VIN_IDCLIENTE=:atrIDCLIENTE', array(':atrIDCLIENTE' => $cliente->CLI_IDCLIENTE));
        $vinculados = CHtml::listData($vinculados, 'VIN_VINCULO', 'VIN_VINCULO');
        $IDS_NOTLIST = $vinculados;
        $IDS_NOTLIST[] = $cliente->CLI_IDCLIENTE;

        if (!empty($this->CLI_NOME)) $criteria->addCondition("CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME) . "%'");
        if(!empty($IDS_NOTLIST)) {
            $criteria->addCondition('CLI_IDCLIENTE not in (' . implode(',', $IDS_NOTLIST) . ')');
        }

        $criteria->with = array(
            'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'VendedorResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ComoConheceu' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );

        $criteria->group = 't.CLI_IDCLIENTE';
        $sort = new CSort;
        $sort->attributes = array(
            'CLI_CIDADE'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'CLI_IDREVENDA'=>array(
              'asc'=>'RevendaResponsavel.REV_FANTASIA',
              'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            'CLI_IDVENDEDOR'=>array(
              'asc'=>'VendedorResponsavel.FUN_NOME',
              'desc'=>'VendedorResponsavel.FUN_NOME desc'
            ),
            'RevendaResponsavel'=>array(
              'asc'=>'RevendaResponsavel.REV_FANTASIA',
              'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            'VendedorResponsavel'=>array(
              'asc'=>'VendedorResponsavel.FUN_NOME',
              'desc'=>'VendedorResponsavel.FUN_NOME desc'
            ),
            'Cidade'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'ComoConheceu'=>array(
                'asc'=>'ComoConheceu.MOT_DESCRICAO',
                'desc'=>'ComoConheceu.MOT_DESCRICAO desc'
            ),
            '*'
        );

        $sort->defaultOrder = 'CLI_NOME ASC';
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => $sort,
            'pagination' => array(
                'pageSize' => 20,
                )
            ));
    }

    public function search($pageSize=false)
    {

        $relatorio = (isset($_GET['CLI_RELATORIO']) && $_GET['CLI_RELATORIO'] == 1);
        $criteria = new CDbCriteria;
        if (!empty($this->CLI_NOME)) {
            $criteria->addCondition("
                CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or
                CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or
                CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME) . "%' or
                CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME) . "%'
            ");
        }

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

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

        if (!empty($this->CLI_IDREVENDA)) {
            if (is_array($this->CLI_IDREVENDA)) {
                $revendas = implode(",",$this->CLI_IDREVENDA);
            } else {
                $revendas = $this->CLI_IDREVENDA;
            }
            $Regioescidades = Regioescidades::model()->findAll('RCD_IDREVENDA IN ('. $revendas . ')');
            $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
            $criteria->addInCondition('CLI_CIDADE', $data_cidades);
        }

        if (!empty($this->CLI_IDREGIAO)) {
            $Regioescidades = Regioescidades::model()->findAll('RCD_IDREGIAO = ' . $this->CLI_IDREGIAO);
            $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
            $criteria->addInCondition('CLI_CIDADE', $data_cidades);
        }

        if (!empty($this->CLI_UF)) {
            $criteria->compare('Cidade.CID_UF', $this->CLI_UF);
        }
        $criteria->compare('CLI_DEMONSTRACAO', $this->CLI_DEMONSTRACAO, true);
        $criteria->compare('CLI_IDMOTIVO_FN', $this->CLI_IDMOTIVO_FN, true);

        if (!empty($this->CLI_FANTASIA)) $criteria->compare('CLI_FANTASIA', $this->CLI_FANTASIA, true);
        if (!empty($this->CLI_ENDERECO)) $criteria->compare('CLI_ENDERECO', $this->CLI_ENDERECO, true);
        if (!empty($this->CLI_NUMERO)) $criteria->compare('CLI_NUMERO', $this->CLI_NUMERO, true);
        if (!empty($this->CLI_CNPJCPF)) $criteria->compare('CLI_CNPJCPF', Util::unmask($this->CLI_CNPJCPF), true);
        if (!empty($this->CLI_INSCR_EST)) $criteria->compare('CLI_INSCR_EST', $this->CLI_INSCR_EST, true);
        if (!empty($this->CLI_SIMPLES)) $criteria->compare('CLI_SIMPLES', $this->CLI_SIMPLES);
        if (!empty($this->CLI_INSCR_MUN)) $criteria->compare('CLI_INSCR_MUN', $this->CLI_INSCR_MUN, true);
        if (!empty($this->CLI_RG)) $criteria->compare('CLI_RG', $this->CLI_RG, true);
        if (!empty($this->CLI_FONE1)) $criteria->addCondition("CLI_FONE1 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE2 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE3 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FAX like '%" . Util::secureForSelect($this->CLI_FONE1) . "%'");
        if (!empty($this->CLI_FONE2)) $criteria->compare('CLI_FONE2', $this->CLI_FONE2, true);
        if (!empty($this->CLI_FONE3)) $criteria->compare('CLI_FONE3', $this->CLI_FONE3, true);
        if (!empty($this->CLI_FAX)) $criteria->compare('CLI_FAX', $this->CLI_FAX, true);
        if (!empty($this->CLI_EMAIL)) $criteria->compare('CLI_EMAIL', $this->CLI_EMAIL, true);
        if (!empty($this->CLI_EMAIL_AREA_CLIENTES)) $criteria->compare('CLI_EMAIL_AREA_CLIENTES', $this->CLI_EMAIL_AREA_CLIENTES, true);
        if (!empty($this->CLI_HOMEPAGE)) $criteria->compare('CLI_HOMEPAGE', $this->CLI_HOMEPAGE, true);
        if (!empty($this->CLI_CEP)) $criteria->compare('CLI_CEP', $this->CLI_CEP, true);
        if (!empty($this->CLI_CONTATO)) $criteria->compare('CLI_CONTATO', $this->CLI_CONTATO, true);
        if (!empty($this->CLI_BAIRRO)) $criteria->compare('CLI_BAIRRO', utf8_decode($this->CLI_BAIRRO), true);
        if (!empty($this->CLI_IDVERSAO)) $criteria->compare('CLI_IDVERSAO', $this->CLI_IDVERSAO);

        if (!empty($this->CLI_IDFORNECEDOR)) {
            $ListaForncedor = array();
            $Fornecedor = Fornecedores::model()->findAll("(FOR_NOME like '%" . Util::secureForSelect($this->CLI_IDFORNECEDOR, true) . "%' or FOR_NOME like '%" . Util::secureForSelect($this->CLI_IDFORNECEDOR) . "%') and FOR_SITUACAO = 'A'");
            foreach ($Fornecedor as $Fornecedor) {
                $ListaForncedor[] = $Fornecedor->FOR_IDFORNECEDOR;
            }
            if (is_array($ListaForncedor)) {
                $criteria->addInCondition('CLI_IDFORNECEDOR', $ListaForncedor);
            }
        }

        if(!empty($this->CLI_VLRMENSAL)) {
            $criteria->addCondition('CLI_VLRMENSAL >= '. Util::convertDecimal($this->CLI_VLRMENSAL));
        }
        if(!empty($this->CLI_VLRMENSAL_FINAL)) {
            $criteria->addCondition('CLI_VLRMENSAL <= '. Util::convertDecimal($this->CLI_VLRMENSAL_FINAL));
        }

        if (!empty($this->CLI_IDCONTADOR)) {
            $ListaContador = array();
            $Contador = Clientes::model()->findAll("(CLI_NOME like '%" . Util::secureForSelect($this->CLI_IDCONTADOR, true) . "%' or CLI_NOME like '%" . Util::secureForSelect($this->CLI_IDCONTADOR) . "%') and CLI_TIPOPESSOA = 'C'");
            foreach ($Contador as $Contador) {
                $ListaContador[] = $Contador->CLI_IDCLIENTE;
            }
            if (is_array($ListaContador)) {
                $criteria->addInCondition('CLI_IDCONTADOR', $ListaContador);
            }
        }
        if(!empty($this->CLI_IDRAMO)) {
            if (is_array($this->CLI_IDRAMO)) {
                $criteria->addInCondition('CLI_IDRAMO', $this->CLI_IDRAMO);
            } else {
                $criteria->compare('CLI_IDRAMO', $this->CLI_IDRAMO);
            }
        }

        if (!empty($this->CLI_COMPLEMENTO)) $criteria->compare('CLI_COMPLEMENTO', $this->CLI_COMPLEMENTO, true);
        if (!empty($this->CLI_PONTOREFERENCIA)) $criteria->compare('CLI_PONTOREFERENCIA', $this->CLI_PONTOREFERENCIA, true);
        if (!empty($this->CLI_OBS)) $criteria->compare('CLI_OBS', $this->CLI_OBS, true);
        if (!empty($this->CLI_SENHA)) $criteria->compare('CLI_SENHA', $this->CLI_SENHA, true);
        if (!empty($this->CLI_IDEMPRESA)) $criteria->compare('CLI_IDEMPRESA', $this->CLI_IDEMPRESA);
        if (!empty($this->CLI_IMPLANTACAO)) $criteria->compare('CLI_IMPLANTACAO', $this->CLI_IMPLANTACAO);
        if (!empty($this->CLI_SIMPLES)) $criteria->compare('CLI_SIMPLES', $this->CLI_SIMPLES);

        if(isset($_GET['IDS_NOTLIST']) && !empty($_GET['IDS_NOTLIST'])) $criteria->addCondition('CLI_IDCLIENTE not in (' . $_GET['IDS_NOTLIST'] . ')');

        if (isset($_GET['busca']) && $_GET['busca'] == 1) {
            if(!empty($this->CLI_TIPOPESSOA)) {
                if (is_array($this->CLI_TIPOPESSOA)) {
                    $criteria->addInCondition('CLI_TIPOPESSOA', $this->CLI_TIPOPESSOA);
                } else {
                    $criteria->compare('CLI_TIPOPESSOA', $this->CLI_TIPOPESSOA);
                }
            }
            if((is_array($this->CLI_NIVELINTERESSE) && !empty($this->CLI_NIVELINTERESSE)) || (!is_array($this->CLI_NIVELINTERESSE) && strlen($this->CLI_NIVELINTERESSE) > 0)) {
                if (is_array($this->CLI_NIVELINTERESSE)) {
                    $criteria->addInCondition('CLI_NIVELINTERESSE', $this->CLI_NIVELINTERESSE);
                } else {
                    $criteria->compare('CLI_NIVELINTERESSE', $this->CLI_NIVELINTERESSE);
                }
            }
            if(!empty($this->CLI_SITUACAO)) {
                if (is_array($this->CLI_SITUACAO)) {
                    $criteria->addInCondition('CLI_SITUACAO', $this->CLI_SITUACAO);
                } else {
                    $criteria->compare('CLI_SITUACAO', $this->CLI_SITUACAO);
                }
            }
            if(!empty($this->CLI_IDMOTIVO)) {
                if (is_array($this->CLI_IDMOTIVO)) {
                    $criteria->addInCondition('CLI_IDMOTIVO', $this->CLI_IDMOTIVO);
                } else {
                    $criteria->compare('CLI_IDMOTIVO', $this->CLI_IDMOTIVO);
                }
            }

            if (!empty($this->CLI_CIDADE)) {
                if (is_array($this->CLI_CIDADE)) {
                    $criteria->addInCondition('CLI_CIDADE', $this->CLI_CIDADE);
                } else {
                    $criteria->compare('CLI_CIDADE', $this->CLI_CIDADE);
                }
            } else if (User::isRevenda()) {
                $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
            }
            if (!empty($this->CLI_IDVENDEDOR)) $criteria->compare('CLI_IDVENDEDOR', $this->CLI_IDVENDEDOR);

            if(!$relatorio) {
                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA)))
                    $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'" AND CLI_DT_PROXIMA_VISITA_COMERCIAL');

                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA)))
                    $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'"');

                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE)))
                    $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'"');

                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'"');
            }

            if(!empty(Util::formatDataMysql($this->CLI_DTRESCISAO)))
                    $criteria->addCondition('CLI_DTRESCISAO >= "'.Util::formatDataMysql($this->CLI_DTRESCISAO).'"');

            if(!empty(Util::formatDataMysql($this->CLI_DTRESCISAO_FINAL)))
                $criteria->addCondition('CLI_DTRESCISAO <= "'.Util::formatDataMysql($this->CLI_DTRESCISAO_FINAL).'"');

        } elseif (isset($_GET['busca_suporte']) && $_GET['busca_suporte'] == 1) {
            if (!empty($this->CLI_IDVENDEDOR)) $criteria->compare('CLI_IDVENDEDOR', $this->CLI_IDVENDEDOR);
            if (!empty($this->CLI_SITUACAO)) {
                if (is_array($this->CLI_SITUACAO)) {
                    $situacoes = $this->CLI_SITUACAO;
                    if(in_array('A', $situacoes)) {
                        $situacoes[] = 'CV';
                    }
                    $criteria->addInCondition('CLI_SITUACAO', $situacoes);
                } else {
                    $criteria->addInCondition('CLI_SITUACAO', array('C', 'A', 'I', 'FP', 'CV'));
                }
            }
            if (!empty($this->CLI_CIDADE)) {
                $criteria->compare('CLI_CIDADE', $this->CLI_CIDADE);
            } else if (User::isRevenda()) {
                $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
            }

            if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA)))
                $criteria->addCondition('CLI_DT_PROXIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'"');

            if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL)))
                $criteria->addCondition('CLI_DT_PROXIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'"');

            if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA)))
                $criteria->addCondition('CLI_DT_ULTIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'"');

            if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL)))
                $criteria->addCondition('CLI_DT_ULTIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'"');

            if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'"');

            if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'"');

        } elseif (isset($_GET['busca_telefonista']) && $_GET['busca_telefonista'] == 1) {
            if (!empty($this->CLI_IDVENDEDOR)) $criteria->compare('CLI_IDVENDEDOR', $this->CLI_IDVENDEDOR);
            $criteria->addInCondition('CLI_SITUACAO', array('C', 'A', 'I'));
        } else {
            if (!empty($this->CLI_CIDADE)) {
                if (is_array($this->CLI_CIDADE)) {
                    $criteria->addInCondition('CLI_CIDADE', $this->CLI_CIDADE);
                } else {
                    $criteria->compare('CLI_CIDADE', $this->CLI_CIDADE);
                }
            } else if(User::isRevenda()) {
                $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
            }
            if (!empty($this->CLI_IDVENDEDOR)) $criteria->compare('CLI_IDVENDEDOR', $this->CLI_IDVENDEDOR);
            if (!empty($this->CLI_SITUACAO)) $criteria->compare('CLI_SITUACAO', $this->CLI_SITUACAO);
            if (!empty($this->CLI_TIPOPESSOA)) $criteria->compare('CLI_TIPOPESSOA', $this->CLI_TIPOPESSOA);
            if (strlen($this->CLI_NIVELINTERESSE) > 0) $criteria->compare('CLI_NIVELINTERESSE', $this->CLI_NIVELINTERESSE);
            if (!empty($this->CLI_IDMOTIVO)) $criteria->compare('CLI_IDMOTIVO', $this->CLI_IDMOTIVO);
        }

        $INNER = false;
        $conditionAtendimentos = array();

        if (!empty(Util::formatDataMysql($this->CLI_EXCETO)) || !empty(Util::formatDataMysql($this->CLI_EXCETO_FINAL))) {
            $condition_exceto = array();
            $condition_exceto_atd = array();
            $condition_exceto_atd[] = 'atd.ATD_IDCLIENTE = t.CLI_IDCLIENTE';
            if($this->CLI_EXCETO_SETOR == 'C') {
                $Motivos = Motivos::model()->findAll("MOT_TIPO IN (2,3,5,6)");
                $Motivo = CHtml::listData($Motivos, 'MOT_IDMOTIVO', 'MOT_IDMOTIVO');
                $condition_exceto_atd[] = 'atd.ATD_IDMOTIVO in (' . implode(',', $Motivo) . ')';

            } else if ($this->CLI_EXCETO_SETOR == 'S') {
                $Motivos = Motivos::model()->findAll("MOT_TIPO = 1");
                $Motivo = CHtml::listData($Motivos, 'MOT_IDMOTIVO', 'MOT_IDMOTIVO');
                $condition_exceto_atd[] = 'atd.ATD_IDMOTIVO in (' . implode(',', $Motivo) . ')';
            }
            if(!empty(Util::formatDataMysql($this->CLI_EXCETO))) {
                $condition_exceto_atd[] = 'atd.ATD_DTCADASTRO >= "'.Util::formatDataMysql($this->CLI_EXCETO).'"';
                if($this->CLI_EXCETO_SETOR == 'C') {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL <"'.Util::formatDataMysql($this->CLI_EXCETO).'" or t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL is null)';
                } else if ($this->CLI_EXCETO_SETOR == 'S') {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE <"'.Util::formatDataMysql($this->CLI_EXCETO).'" or t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE is null)';
                } else {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL <"'.Util::formatDataMysql($this->CLI_EXCETO).'" or t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL is null) AND (t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE <"'.Util::formatDataMysql($this->CLI_EXCETO).'" or t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE is null)';
                }
            }
            if(!empty(Util::formatDataMysql($this->CLI_EXCETO_FINAL))) {
                $condition_exceto_atd[] = 'atd.ATD_DTCADASTRO <= "'.Util::formatDataMysql($this->CLI_EXCETO_FINAL).'"';
                if($this->CLI_EXCETO_SETOR == 'C') {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL >"'.Util::formatDataMysql($this->CLI_EXCETO_FINAL).'" or t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL is null)';
                } else if ($this->CLI_EXCETO_SETOR == 'S') {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE >"'.Util::formatDataMysql($this->CLI_EXCETO_FINAL).'" or t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE is null)';
                } else {
                    $condition_exceto[] = '(t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL >"'.Util::formatDataMysql($this->CLI_EXCETO_FINAL).'" or t.CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL is null) AND (t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE >"'.Util::formatDataMysql($this->CLI_EXCETO_FINAL).'" or t.CLI_DT_ULTIMA_ATIVIDADE_SUPORTE is null)';
                }
            }
            $criteria->addCondition("not exists (select * from atendimentos atd where ".implode($condition_exceto_atd, ' AND ').")");
            if(!empty($condition_exceto))
                $criteria->addCondition(implode(' OR ', $condition_exceto));
        }
        if($relatorio and !empty($conditionAtendimentos))
            $conditionAtendimentos[] = "Atendimentos.ATD_SITUACAO = 'R'";

        //se for relatorio busca pela data de cadastro do prospetco
        if ($relatorio || (isset($_GET['busca']) && $_GET['busca'] == 1)) {
            if (!empty(Util::formatDataMysql($this->CLI_DTCADASTRO)))
                $criteria->addCondition('CLI_DTCADASTRO >= "'.Util::formatDataMysql($this->CLI_DTCADASTRO).'"');
            if (!empty(Util::formatDataMysql($this->CLI_DTCADASTRO_FINAL)))
                $criteria->addCondition('CLI_DTCADASTRO <= "'.Util::formatDataMysql($this->CLI_DTCADASTRO_FINAL).'"');
        } else {
            if (!$conditionAtendimentos) {
                if (!empty(Util::formatDataMysql($this->CLI_DTCADASTRO)))
                     $conditionAtendimentos[] = 'ATD_DTCADASTRO >= "'.Util::formatDataMysql($this->CLI_DTCADASTRO).'"';
                if (!empty(Util::formatDataMysql($this->CLI_DTCADASTRO_FINAL)))
                     $conditionAtendimentos[] = 'ATD_DTCADASTRO <= "'.Util::formatDataMysql($this->CLI_DTCADASTRO_FINAL).'"';
                if(!empty($this->CLI_IDVENDEDOR))
                     $conditionAtendimentos[] = 'ATD_IDFUNCIONARIO = ' . $this->CLI_IDVENDEDOR;
            }
        }

        if($relatorio) {
            if($this->CLI_DT_PROXIMA_VISITA_SETOR == 'C') {
                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA)))
                $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'"');
            } else if ($this->CLI_DT_PROXIMA_VISITA_SETOR == 'S') {
                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA)))
                $criteria->addCondition('CLI_DT_PROXIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_PROXIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'"');
            } else {
                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA)))
                $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'" or CLI_DT_PROXIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_PROXIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'" or CLI_DT_PROXIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_VISITA_FINAL).'"');
            }

            if($this->CLI_DT_ULTIMA_VISITA_SETOR == 'C') {
                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA)))
                $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'"');
            } else if ($this->CLI_DT_ULTIMA_VISITA_SETOR == 'S') {
                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA)))
                $criteria->addCondition('CLI_DT_ULTIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'"');
            } else {
                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA)))
                $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'" or CLI_DT_ULTIMA_VISITA_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA).'"');

                if (!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_VISITA_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'" or CLI_DT_ULTIMA_VISITA_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_VISITA_FINAL).'"');
            }

            if($this->CLI_DT_ULTIMA_ATIVIDADE_SETOR == 'C') {
                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'"');

                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'"');
            } else if ($this->CLI_DT_ULTIMA_ATIVIDADE_SETOR == 'S') {
                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'"');

                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'"');
            } else {
                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE)))
                $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'" or CLI_DT_ULTIMA_ATIVIDADE_SUPORTE >= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE).'"');

                if(!empty(Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL)))
                    $criteria->addCondition('CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'" or CLI_DT_ULTIMA_ATIVIDADE_SUPORTE <= "'.Util::formatDataMysql($this->CLI_DT_ULTIMA_ATIVIDADE_FINAL).'"');
            }
        }

        if(!empty($this->CLI_PRODUTO)) {
            if (is_array($this->CLI_PRODUTO)) {
                $criteria->addInCondition('CLI_PRODUTO', $this->CLI_PRODUTO);
            } else {
                $criteria->compare('CLI_PRODUTO', $this->CLI_PRODUTO);
            }
        }

        if (is_array($this->CLI_MODULOS_COMPLEMENTARES)) {
            $complementares = implode(',', $this->CLI_MODULOS_COMPLEMENTARES);

            $criteria->addCondition("
                t.CLI_MODULO1 IN ($complementares) or 
                t.CLI_MODULO2 IN ($complementares) or 
                t.CLI_MODULO3 IN ($complementares) or 
                t.CLI_MODULO4 IN ($complementares) or
                t.CLI_MODULO5 IN ($complementares) or
                t.CLI_IDMODULO_MOBILE IN ($complementares)");
        }

        $criteria->with = array(
            'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'VendedorResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ComoConheceu' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ProdutoContratado' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloComplementar1' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloComplementar2' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloComplementar3' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloComplementar4' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloComplementar5' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'ModuloMobile' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );
        if(!empty($conditionAtendimentos)) {
            $criteria->with['Atendimentos'] = array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false);
            $criteria->addCondition(implode(' AND ', $conditionAtendimentos));
        }

        if (is_array($this->CLI_DOCUMENTOS_FISCAIS)) {
            $documentos_fiscais = $this->CLI_DOCUMENTOS_FISCAIS;
            $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->CLI_DOCUMENTOS_FISCAIS);
            }
        }

        $criteria->group = 't.CLI_IDCLIENTE';
        $sort = new CSort;
        $sort->attributes = array(
            'CLI_CIDADE'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'CLI_IDREVENDA'=>array(
              'asc'=>'RevendaResponsavel.REV_FANTASIA',
              'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            'CLI_IDVENDEDOR'=>array(
              'asc'=>'VendedorResponsavel.FUN_NOME',
              'desc'=>'VendedorResponsavel.FUN_NOME desc'
            ),
            'RevendaResponsavel'=>array(
              'asc'=>'RevendaResponsavel.REV_FANTASIA',
              'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            'VendedorResponsavel'=>array(
              'asc'=>'VendedorResponsavel.FUN_NOME',
              'desc'=>'VendedorResponsavel.FUN_NOME desc'
            ),
            'Cidade'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'ComoConheceu'=>array(
                'asc'=>'ComoConheceu.MOT_DESCRICAO',
                'desc'=>'ComoConheceu.MOT_DESCRICAO desc'
            ),
            'CLI_CIDADE'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            '*'
        );


        if (isset($_GET['busca_suporte']) && $_GET['busca_suporte'] == 1) {

            $sort->defaultOrder = 'CLI_IDCLIENTE DESC';

        } else if ($relatorio) {
            $camposData = false;
            if (empty($this->CLI_DTCADASTRO) && empty($this->CLI_DTCADASTRO_FINAL)) {
                $camposData = 'UltimaAtividade';
                $sort->defaultOrder = 'CLI_DTCADASTRO DESC';
            } else {
                $camposData = 'DataCadastro';
                $sort->defaultOrder = ($this->CLI_DT_ULTIMA_ATIVIDADE_SETOR != 'S' ? 'CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL DESC' : 'CLI_DT_ULTIMA_ATIVIDADE_SUPORTE DESC');
            }

            Yii::app()->cache->set($this->TOKEN . '_camposData', $camposData, 3600);

        } else if (empty($this->CLI_DT_PROXIMA_VISITA_COMERCIAL) and empty($this->CLI_DT_PROXIMA_VISITA_FINAL)) {

            $sort->defaultOrder = 'CLI_IDCLIENTE DESC';

        } else {
            $sort->defaultOrder = 'CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL ASC';
        }

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

public function searchPosVendas() {
    $criteria = new CDbCriteria;

    $criteria->addCondition('CLI_SITUACAO = "A"');

    if (!empty($this->CLI_NOME)) $criteria->addCondition("CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME) . "%'");

    if (!empty($this->CLI_CNPJCPF)) $criteria->compare('CLI_CNPJCPF', Util::unmask($this->CLI_CNPJCPF), true);

    if (!empty($this->CLI_FONE1)) $criteria->addCondition("CLI_FONE1 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE2 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE3 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FAX like '%" . Util::secureForSelect($this->CLI_FONE1) . "%'");

    if (!empty($this->CLI_IDREVENDA)) {
        $Regioescidades = Regioescidades::model()->findAll('RCD_IDREVENDA = ' . $this->CLI_IDREVENDA);
        $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
        $criteria->addInCondition('CLI_CIDADE', $data_cidades);
    }

    if (!empty($this->CLI_CIDADE)) {
        if (is_array($this->CLI_CIDADE)) {
            $criteria->addInCondition('CLI_CIDADE', $this->CLI_CIDADE);
        } else {
            $criteria->compare('CLI_CIDADE', $this->CLI_CIDADE);
        }
    }

    if (!empty(Util::formatDataMysql($this->CLI_DT_POSVENDAS)))
        $criteria->addCondition('CLI_DT_POSVENDAS >= "'.Util::formatDataMysql($this->CLI_DT_POSVENDAS).'"');

    if (!empty(Util::formatDataMysql($this->CLI_DT_POSVENDAS_FINAL)))
        $criteria->addCondition('CLI_DT_POSVENDAS <= "'.Util::formatDataMysql($this->CLI_DT_POSVENDAS_FINAL).'"');

    if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMO_POSVENDAS)))
        $criteria->addCondition('CLI_DT_PROXIMO_POSVENDAS >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMO_POSVENDAS).'"');

    if (!empty(Util::formatDataMysql($this->CLI_DT_PROXIMO_POSVENDAS_FINAL))) {
        if($this->CLI_DT_PROXIMO_POSVENDAS_FINAL_EMPTY == true) {
            $criteria->addCondition('CLI_DT_PROXIMO_POSVENDAS <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMO_POSVENDAS_FINAL).'" or CLI_DT_PROXIMO_POSVENDAS is null');
        } else {
            $criteria->addCondition('CLI_DT_PROXIMO_POSVENDAS <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMO_POSVENDAS_FINAL).'"');
        }
    }

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

    if (User::isRevenda()) {
        $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
    }

    $criteria->with = array(
        'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
    );

    $criteria->group = 't.CLI_IDCLIENTE';
    $sort = new CSort;
    $sort->attributes = array(
        'CLI_CIDADE'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        'Cidade'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        '*'
    );

    $sort->defaultOrder = 'CLI_DT_PROXIMO_POSVENDAS is null ASC, CLI_DT_PROXIMO_POSVENDAS ASC';

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

public function searchImplantacao() {
    $criteria = new CDbCriteria;

    $criteria->addCondition('CLI_SITUACAO in ("A", "FP")');
    $criteria->addCondition("CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO IS NOT NULL");

    if (!empty($this->CLI_NOME)) $criteria->addCondition("CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME, true) . "%' or CLI_NOME like '%" . Util::secureForSelect($this->CLI_NOME) . "%' or CLI_FANTASIA like '%" . Util::secureForSelect($this->CLI_NOME) . "%'");

    if (!empty($this->CLI_CNPJCPF)) $criteria->compare('CLI_CNPJCPF', Util::unmaskCpfCnpj($this->CLI_CNPJCPF), true);

    if (!empty($this->CLI_FONE1)) $criteria->addCondition("CLI_FONE1 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE2 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FONE3 like '%" . Util::secureForSelect($this->CLI_FONE1) . "%' or CLI_FAX like '%" . Util::secureForSelect($this->CLI_FONE1) . "%'");

    if (!empty($this->CLI_IDREVENDA)) {
        $Regioescidades = Regioescidades::model()->findAll('RCD_IDREVENDA = ' . $this->CLI_IDREVENDA);
        $data_cidades = CHtml::listData($Regioescidades, 'RCD_IDCIDADE', 'RCD_IDCIDADE');
        $criteria->addInCondition('CLI_CIDADE', $data_cidades);
    }

    if (!empty($this->CLI_CIDADE)) {
        if (is_array($this->CLI_CIDADE)) {
            $criteria->addInCondition('CLI_CIDADE', $this->CLI_CIDADE);
        } else {
            $criteria->compare('CLI_CIDADE', $this->CLI_CIDADE);
        }
    }

    if(!empty(Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO)))
        $criteria->addCondition('CLI_DT_AVALIACAO_IMPLANTACAO >= "'.Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO).'"');

    if(!empty(Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO_FINAL)))
        $criteria->addCondition('CLI_DT_AVALIACAO_IMPLANTACAO <= "'.Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO_FINAL).'"');

     if(!empty(Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO2)))
        $criteria->addCondition('CLI_DT_AVALIACAO_IMPLANTACAO2 >= "'.Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO2).'"');

    if(!empty(Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO_FINAL2)))
        $criteria->addCondition('CLI_DT_AVALIACAO_IMPLANTACAO2 <= "'.Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO_FINAL2).'"');

    if(!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO)))
        $criteria->addCondition('CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO >= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO).'"');

    if(!empty(Util::formatDataMysql($this->CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO_FINAL)))
        $criteria->addCondition('CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO <= "'.Util::formatDataMysql($this->CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO_FINAL).'"');

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

    if (User::isRevenda()) {
        $criteria->addInCondition('CLI_CIDADE', array_keys(User::getCidades()));
    }

    $criteria->with = array(
        'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
    );

    $criteria->group = 't.CLI_IDCLIENTE';
    $sort = new CSort;
    $sort->attributes = array(
        'CLI_CIDADE'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        'Cidade'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        '*'
    );

    $sort->defaultOrder = 'CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO ASC';

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

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

    $conditions = array();

    if (!empty($this->CLI_IDREVENDA)) {
        $cidades = GxHtml::listDataEx(Regioescidades::model()->findAll('RCD_IDREVENDA = ' . $this->CLI_IDREVENDA), 'RCD_IDCIDADE', 'RCD_IDCIDADE');
        if(!empty($cidades)) {
            $conditions[] = 'CLI_CIDADE in ('.implode(',', $cidades).')';
        } else {
            $conditions[] = 'CLI_CIDADE = -1';
        }
    }
    $data_field = '';
    $satisfacao_field = '';
    switch ($this->CLI_IDMOTIVO) {
        case 1: // avaliação sistema
            $data_field = 'CLI_DT_POSVENDAS';
            $satisfacao_field = 'CLI_NOTA_SATISFACAO_SISTEMA';
            break;

        case 2: // avaliação atendimento
            $data_field = 'CLI_DT_POSVENDAS';
            $satisfacao_field = 'CLI_NOTA_SATISFACAO_ATENDIMENTO';
            break;

        case 3: // primeiro pós implantação
            $data_field = 'CLI_DT_AVALIACAO_IMPLANTACAO';
            $satisfacao_field = 'CLI_NOTA_SATISFACAO_IMPLANTACAO';
            break;

        case 4: // segundo pós implantação
            $data_field = 'CLI_DT_AVALIACAO_IMPLANTACAO2';
            $satisfacao_field = 'CLI_NOTA_SATISFACAO_IMPLANTACAO2';
            break;
    }

    if (!empty($this->CLI_DT_POSVENDAS)) {
        $conditions[] = $data_field . " >= '" . Util::formatDataMysql($this->CLI_DT_POSVENDAS) . "'";
    }

    if (!empty($this->CLI_DT_POSVENDAS_FINAL)) {
        $conditions[] = $data_field . " <= '" . Util::formatDataMysql($this->CLI_DT_POSVENDAS_FINAL) . "'";
    }

    if (!empty($this->CLI_DTATIVACAO)) {
        $conditions[] = "CLI_DTATIVACAO >= '" . Util::formatDataMysql($this->CLI_DTATIVACAO) . "'";
    }

    if (!empty($this->CLI_DTATIVACAO_FINAL)) {
        $conditions[] = "CLI_DTATIVACAO <= '" . Util::formatDataMysql($this->CLI_DTATIVACAO_FINAL) . "'";
    }

    if (!empty($this->CLI_DTRESCISAO)) {
        $conditions[] = "CLI_DTRESCISAO >= '" . Util::formatDataMysql($this->CLI_DTRESCISAO) . "'";
    }

    if (!empty($this->CLI_DTRESCISAO_FINAL)) {
        $conditions[] = "CLI_DTRESCISAO <= '" . Util::formatDataMysql($this->CLI_DTRESCISAO_FINAL) . "'";
    }

    if(!empty($this->CLI_NOTA_SATISFACAO)) {
        if(is_array($this->CLI_NOTA_SATISFACAO)) {
            $conditions[] = $satisfacao_field . "  in(" . implode(', ', $this->CLI_NOTA_SATISFACAO) . ")";
        } else {
            $conditions[] = $satisfacao_field . " = '" . (int) $this->CLI_NOTA_SATISFACAO . "'";
        }
    }

    if(!empty($this->CLI_SITUACAO)) {
        if($this->CLI_SITUACAO == "T") {
            $conditions[] = 'CLI_SITUACAO  in("A", "I", "FP")';
        } else if($this->CLI_SITUACAO == "A" && $this->CLI_IDMOTIVO >= 3) {
            $conditions[] = 'CLI_SITUACAO  in("A", "FP")';
        } else {
            $conditions[] = 'CLI_SITUACAO = "'.$this->CLI_SITUACAO.'"';
        }
    }

    if (User::isRevenda()) {
        $conditions[] = 'CLI_CIDADE in('.User::getCidades(true).')';
    }

    if(!empty($conditions)) {
        $conditions = implode(' AND ', $conditions);
    } else {
        $conditions = '1=1';
    }
    $criteria->addCondition($conditions);

    $criteria->with = array(
        'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
    );

    $criteria->group = 't.CLI_IDCLIENTE';
    $sort = new CSort;
    $sort->attributes = array(
        'CLI_CIDADE'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        'Cidade'=>array(
          'asc'=>'Cidade.CID_DESCRICAO',
          'desc'=>'Cidade.CID_DESCRICAO desc'
        ),
        '*'
    );

    $sort->defaultOrder = 'CLI_NOME ASC';

    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
        'sort' => $sort,
        'pagination' => array(
            'pageSize' => $pageSize ? $pageSize : 300,
        )
    ));
}

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

        $conditions = array();

        if (!empty($this->CLI_IDREVENDA)) {
            $cidades = GxHtml::listDataEx(Regioescidades::model()->findAll('RCD_IDREVENDA = ' . $this->CLI_IDREVENDA), 'RCD_IDCIDADE', 'RCD_IDCIDADE');
            $conditions[] = 'CLI_CIDADE in ('.implode(',', $cidades).')';
        }

        if (!empty($this->CLI_CIDADE)) {
            if (is_array($this->CLI_CIDADE)) {
                $conditions[] = 'CLI_CIDADE in ('. implode(',', $this->CLI_CIDADE).')';
            } else {
                $conditions[] = 'CLI_CIDADE = ' . $this->CLI_CIDADE;
            }
        }

        if (User::isRevenda()) {
            $conditions[] = 'CLI_CIDADE in ('.User::getCidades(true).')';
        }

        if (!empty($this->CLI_DTRESCISAO)) {
            $conditions[] = "CLI_DTRESCISAO >= '" . Util::formatDataMysql($this->CLI_DTRESCISAO) . "'";
        }

        if (!empty($this->CLI_DTRESCISAO_FINAL)) {
            $conditions[] = "CLI_DTRESCISAO <= '" . Util::formatDataMysql($this->CLI_DTRESCISAO_FINAL) . "'";
        }

        if(!empty($this->CLI_IDRESCISAO)) {
            if (is_array($this->CLI_IDRESCISAO)) {
                $conditions[] = 'CLI_IDRESCISAO in ('. implode(',', $this->CLI_IDRESCISAO).')';
            } else {
                $conditions[] = 'CLI_IDRESCISAO = ' . $this->CLI_IDRESCISAO;
            }
        }

        if(!empty($this->CLI_PRODUTO)) {
            if (is_array($this->CLI_PRODUTO)) {
                $conditions[] = 'CLI_PRODUTO in ('. implode(',', $this->CLI_PRODUTO).')';
            } else {
                $conditions[] = 'CLI_PRODUTO = ' . $this->CLI_PRODUTO;
            }
        }

        if (is_array($this->CLI_MODULOS_COMPLEMENTARES)) {
            $modulos = implode(',', $this->CLI_MODULOS_COMPLEMENTARES);
            $conditions_complementares = array();
            $conditions_complementares[] = 'CLI_MODULO1 IN ('.$modulos.')';
            $conditions_complementares[] = 'CLI_MODULO2 IN ('.$modulos.')';
            $conditions_complementares[] = 'CLI_MODULO3 IN ('.$modulos.')';
            $conditions_complementares[] = 'CLI_MODULO4 IN ('.$modulos.')';
            $conditions_complementares[] = 'CLI_MODULO5 IN ('.$modulos.')';
            $conditions[] = '(' . implode(' OR ', $conditions_complementares) . ')';
        }

        if(!empty($this->CLI_VLRMENSAL)) {
            $conditions[] = 'CLI_VLRMENSAL >= '. Util::convertdecimal($this->CLI_VLRMENSAL);
        }
        if(!empty($this->CLI_VLRMENSAL_FINAL)) {
            $conditions[] = 'CLI_VLRMENSAL <= '. Util::convertdecimal($this->CLI_VLRMENSAL_FINAL);
        }

        $conditions[] = 'CLI_SITUACAO = "I"';
        $conditions[] = 'CLI_IDRESCISAO <> 110';

        if(empty($this->CLI_DTRESCISAO)) {
            $sql = "SELECT MIN(CLI_DTRESCISAO) as inicio from clientes where ".implode(' AND ', $conditions);
            $command = Yii::app()->db->createCommand($sql);
            $result = $command->queryAll();
            if(isset($result[0]['inicio'])) {
                $data = DateTime::createFromFormat('Y-m-d', $result[0]['inicio']);
                $this->CLI_DTRESCISAO = $data->format('d/m/Y');
                $conditions[] = "CLI_DTRESCISAO >= '" . Util::formatDataMysql($data->format('d/m/Y')) . "'";
            } else{
                $conditions[] = "CLI_DTRESCISAO >= '" . Util::formatDataMysql('01/01/' . date('Y')) . "'";
                $this->CLI_DTRESCISAO = '01/01/' . date('Y');
            }
        }

        if(empty($this->CLI_DTRESCISAO_FINAL)) {
            $sql = "SELECT MAX(CLI_DTRESCISAO) as final from clientes where ".implode(' AND ', $conditions);
            $command = Yii::app()->db->createCommand($sql);
            $result = $command->queryAll();
            if(isset($result[0]['final'])) {
                $data = DateTime::createFromFormat('Y-m-d', $result[0]['final']);
                $conditions[] = "CLI_DTRESCISAO <= '" . Util::formatDataMysql($data->format('d/m/Y')) . "'";
                $this->CLI_DTRESCISAO_FINAL = $data->format('d/m/Y');
            } else{
                $conditions[] = "CLI_DTRESCISAO <= '" . Util::formatDataMysql('31/12/' . date('Y')) . "'";
                $this->CLI_DTRESCISAO_FINAL = '31/12/' . date('Y');
            }
        }

        if(!empty($conditions)) {
            $conditions = implode(' AND ', $conditions);
        } else {
            $conditions = 'CLI_SITUACAO = "I"';
        }
        $criteria->addCondition($conditions);

        $criteria->with = array(
            'Cidade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'RevendaResponsavel' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );

        $criteria->group = 't.CLI_IDCLIENTE';
        $sort = new CSort;
        $sort->attributes = array(
            'CLI_CIDADE'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'Cidade'=>array(
              'asc'=>'Cidade.CID_DESCRICAO',
              'desc'=>'Cidade.CID_DESCRICAO desc'
            ),
            'RevendaResponsavel'=>array(
              'asc'=>'RevendaResponsavel.REV_FANTASIA',
              'desc'=>'RevendaResponsavel.REV_FANTASIA desc'
            ),
            '*'
        );

        $sort->defaultOrder = 'CLI_NOME ASC';
        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
            'sort' => $sort,
            'pagination' => array(
                'pageSize' => $pageSize ? $pageSize : 300,
            )
        ));
    }

    public function getClienteCnpj()
    {
        return Util::formataCNPJCPF($this->CLI_CNPJCPF);
    }

    public function getRazaoFantasia()
    {
        if (empty($this->CLI_FANTASIA)) {
            return $this->CLI_NOME.' ( Cod. '.$this->CLI_IDCLIENTE.' )';
        }

        return $this->CLI_NOME.' ( '.$this->CLI_FANTASIA.' Cod. '.$this->CLI_IDCLIENTE.' )';
    }

    public function getNomecidade()
    {
        return $this->CLI_NOME . ' (' . $this->Cidade . ' - ' . $this->Cidade->CID_UF . ')';
    }

    public function getNomeEmpresa($id = false)
    {
        if (!$id) {
            $id = $this->CLI_IDEMPRESA;
        }
        return ($id == 1) ? "Windel Sistemas Ltda" : "Winsul Serviços de Informática Ltda";
    }

    public function getRevendaResponsavel2()
    {
        if (!$this->CLI_CIDADE) {
            return;
        }

        $RegioesCidades = Regioescidades::model()->find('RCD_IDCIDADE = '.$this->CLI_CIDADE);
        return ($RegioesCidades)?$RegioesCidades->Revenda:NULL;
    }

    public function getSatisfacao($campo, $icon = true)
    {
        return ($icon == true ? FaHtml::grauSatisfacao($this->{$campo}) . ' ': '') . Util::getGrauSatisfacao($this->{$campo});
    }

    public function getMensalidade()
    {
        return Util::formatMoeda($this->CLI_VLRMENSAL);
    }

    public function verMensalidade()
    {
        return Util::verMoeda($this->CLI_VLRMENSAL);
    }

    public function estaEmImplantacao()
    {
        return $this->CLI_IMPLANTACAO == 1;
    }

    public function getComplementares($separador = "\n\r")
    {
        $composicao = array();
        if (!empty($this->ModuloComplementar1)) {
            $composicao[] = (String) $this->ModuloComplementar1;
        }
        if (!empty($this->ModuloComplementar2)) {
            $composicao[] = (String) $this->ModuloComplementar2;
        }
        if (!empty($this->ModuloComplementar3)) {
            $composicao[] = (String) $this->ModuloComplementar3;
        }
        if (!empty($this->ModuloComplementar4)) {
            $composicao[] = (String) $this->ModuloComplementar4;
        }
        if (!empty($this->ModuloComplementar5)) {
            $composicao[] = (String) $this->ModuloComplementar5;
        }
        if (!empty($this->ModuloMobile)) {
            $composicao[] = (String) $this->ModuloMobile;
        }
        return implode($separador, $composicao);
    }

    public function getPrimeiraAvaliacaoImplantacao()
    {
        $conditions = array();
        $conditions[] = 'ATD_IDCLIENTE = ' . $this->CLI_IDCLIENTE;
        $conditions[] = 'ATD_DTCADASTRO = "'. Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO) . '"';
        $conditions[] = 'ATD_IDMOTIVO = 455';
        $conditions[] = 'ATD_NOTA_SATISFACAO_IMPLANTACAO = ' . $this->CLI_NOTA_SATISFACAO_IMPLANTACAO;

        $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));
        return $atendimento;
    }

    public function getSegundaAvaliacaoImplantacao()
    {
        $conditions = array();
        $conditions[] = 'ATD_IDCLIENTE = ' . $this->CLI_IDCLIENTE;
        $conditions[] = 'ATD_DTCADASTRO = "'. Util::formatDataMysql($this->CLI_DT_AVALIACAO_IMPLANTACAO2) . '"';
        $conditions[] = 'ATD_IDMOTIVO = 455';
        $conditions[] = 'ATD_NOTA_SATISFACAO_IMPLANTACAO = ' . $this->CLI_NOTA_SATISFACAO_IMPLANTACAO2;

        $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));
        return $atendimento;
    }

    public function getultimoPosVendas()
    {
        $conditions = array();
        $conditions[] = 'ATD_IDCLIENTE = "'.$this->CLI_IDCLIENTE.'"';
        $conditions[] = 'ATD_DTCADASTRO = "'.Util::formatDataMysql($this->CLI_DT_POSVENDAS).'"';
        $conditions[] = 'ATD_IDMOTIVO = 60';
        $conditions[] = 'ATD_NOTA_SATISFACAO_SISTEMA = "'.$this->CLI_NOTA_SATISFACAO_SISTEMA.'"';
        $conditions[] = 'ATD_NOTA_SATISFACAO_ATENDIMENTO = "'.$this->CLI_NOTA_SATISFACAO_ATENDIMENTO.'"';

        $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));
        return $atendimento;
    }

    public function getLinkContador($action)
    {
        if($this->CLI_TIPOPESSOA == "C")
            return $this->Contador;
        $contador = '';
        if(!empty($this->Contador)) {
            if ($this->Contador->isAllowed(false)) {
                $contador = '<a href="'. Yii::app()->createUrl("clientes/". $action, array("id"=>$this->Contador->CLI_IDCLIENTE)).'" class="blue_link" target="_blank">'.$this->Contador.'</a>';
            } else {
                $contador = $this->Contador->CLI_NOME;
            }
            $contador .= Util::getInfoContador($this->Contador);
        }
        return $contador;
    }

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

    public function getLinkSite()
    {
        if(empty($this->CLI_HOMEPAGE))
            return;
        $pg =  strtolower($this->CLI_HOMEPAGE);
        $link = $pg;
        if(strpos($pg, 'http') === false)
            $link = "http://" . $pg;
        return '<a href="'.$link.'" target="_blank">'.$pg.'</a>';
    }

    public function getLinkFone1() {
        $whatsappFields = $this->loadWhatsappFields();

        $link = $this->getLinkFone('CLI_FONE1');
        if (in_array('CLI_FONE1', $whatsappFields)) {
            $link .= " <i class=\"fa fa-whatsapp\" style=\"color:green\" data-toggle=\"tooltip\"
                                                                data-placement=\"top\"
                                                                title=\"Número de Whatsapp\"></i>";
        }
        return $link;
    }

    public function getLinkFone2() {
        $whatsappFields = $this->loadWhatsappFields();

        $link = $this->getLinkFone('CLI_FONE2');
        if (in_array('CLI_FONE2', $whatsappFields)) {
            $link .= " <i class=\"fa fa-whatsapp\" style=\"color:green\" data-toggle=\"tooltip\"
                                                                data-placement=\"top\"
                                                                title=\"Número de Whatsapp\"></i>";
        }
        return $link;
    }

    public function getLinkFone3() {
        $whatsappFields = $this->loadWhatsappFields();

        $link = $this->getLinkFone('CLI_FONE3');
        if (in_array('CLI_FONE3', $whatsappFields)) {
            $link .= " <i class=\"fa fa-whatsapp\" style=\"color:green\" data-toggle=\"tooltip\"
                                                                data-placement=\"top\"
                                                                title=\"Número de Whatsapp\"></i>";
        }
        return $link;
    }

    public function getLinkFone($field = 'CLI_FONE1')
    {
        if(empty($this->{$field}))
            return;
         return '<a href="tel:+ '.$this->{$field}.'">'.$this->{$field}.'</a>';
    }

    public function getLinkEmail($field = "CLI_EMAIL") {
        if (empty($this->{$field})) {
            return;
        }
        return '<a href="mailto:'.$this->{$field}.'">'.$this->{$field}.'</a>';
    }

    public function getLinkEmailAreaClientes() {
        if(empty($this->CLI_EMAIL_AREA_CLIENTES))
            return;
         return '<a href="mailto:'.$this->CLI_EMAIL_AREA_CLIENTES.'">'.$this->CLI_EMAIL_AREA_CLIENTES.'</a>';
    }

    public function getCpfCnpj()
    {
        if (strlen($this->CLI_CNPJCPF) == 14) {
            $this->CLI_CNPJCPF = substr($this->CLI_CNPJCPF, 0, 2) . '.' . substr($this->CLI_CNPJCPF, 2, 3) . '.' . substr($this->CLI_CNPJCPF, 5, 3) . '/' . substr($this->CLI_CNPJCPF, 8, 4) . '-' . substr($this->CLI_CNPJCPF, 12, 2);
        } elseif (strlen($this->CLI_CNPJCPF) == 11) {
            $this->CLI_CNPJCPF = substr($this->CLI_CNPJCPF, 0, 3) . '.' . substr($this->CLI_CNPJCPF, 3, 3) . '.' . substr($this->CLI_CNPJCPF, 6, 3) . '-' . substr($this->CLI_CNPJCPF, 9, 2);
        }
        return $this->CLI_CNPJCPF;
    }

    private function updateDatasAtendimentos($campo, $where, $order){
        $sql = "
            UPDATE clientes SET {$campo} = 
            (SELECT ATD_DTCADASTRO as data
            
            FROM atendimentos atd
            INNER JOIN
                motivos mot ON mot.MOT_IDMOTIVO = atd.ATD_IDMOTIVO
            WHERE
                {$where}
            ORDER BY atd.ATD_DTCADASTRO {$order} LIMIT 1)
            WHERE CLI_IDCLIENTE = {$this->CLI_IDCLIENTE}
        ";
        
        Yii::app()->db->createCommand($sql)->execute();
    }

    public function updateLastVisitaSuporte()
    {
        $campo = 'CLI_DT_ULTIMA_VISITA_SUPORTE';

        $where = "  mot.MOT_TIPO IN (1,4) AND
                    atd.ATD_IDMOTIVO <> 327 AND
                    atd.ATD_TIPO LIKE '%V%' AND
                    atd.ATD_SITUACAO = 'R' AND
                    atd.ATD_DTCADASTRO <= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE}";

        $order = 'DESC';

        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function updateLastAtividadeSuporte()
    {   
        $campo = 'CLI_DT_ULTIMA_ATIVIDADE_SUPORTE';

        $where = "  mot.MOT_TIPO IN (1,4) AND
                    atd.ATD_IDMOTIVO <> 327 AND
                    atd.ATD_SITUACAO = 'R' AND
                    atd.ATD_DTCADASTRO <= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE}";
        $order = 'DESC';
        
        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function updateNextVisitaSuporte()
    {
        $campo = 'CLI_DT_PROXIMA_VISITA_SUPORTE';

        $where = "  mot.MOT_TIPO IN (1,4) AND
                    atd.ATD_TIPO LIKE '%V%' AND
                    atd.ATD_SITUACAO = 'A' AND
                    atd.ATD_DTCADASTRO >= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE}";

        $order = 'ASC';

        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function updateLastVisitaComercial()
    {   
        $campo = 'CLI_DT_ULTIMA_VISITA_COMERCIAL';

        $where = "  mot.MOT_TIPO IN(2,3,5,6) AND
                    atd.ATD_TIPO LIKE '%V%' AND
                    atd.ATD_SITUACAO = 'R' AND
                    atd.ATD_DTCADASTRO <= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE}";

        $order = 'DESC';

        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function updateLastAtividadeComercial()
    {
        $campo = 'CLI_DT_ULTIMA_ATIVIDADE_COMERCIAL';

        $where = "  mot.MOT_TIPO IN(2,3,5,6) AND
                    atd.ATD_SITUACAO = 'R' AND
                    atd.ATD_DTCADASTRO <= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE} and
                    not (atd.ATD_IDMOTIVO = 70 and atd.ATD_AUTOMATICO = 1)";

        $order = 'DESC';

        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function updateNextVisitaComercial()
    {   
        $campo = 'CLI_DT_PROXIMA_VISITA_COMERCIAL';

        $where = "  mot.MOT_TIPO IN(2,3,5,6) AND
                    atd.ATD_SITUACAO = 'A' AND
                    atd.ATD_TIPO LIKE '%V%' AND
                    atd.ATD_DTCADASTRO >= CURDATE() AND
                    atd.ATD_IDCLIENTE = {$this->CLI_IDCLIENTE}";

        $order = 'ASC';
        
        $this->updateDatasAtendimentos($campo,$where,$order);
    }

    public function expiracaoHorasContratadas()
    {
        $horas = HorasContratadas::model()->findAll('HOC_IDCLIENTE = ' . $this->CLI_IDCLIENTE . " AND HOC_EXPIRACAO is null");
        if(is_array($horas)) {
            foreach($horas as $hora) {
                $hora->HOC_EXPIRACAO = date('d/m/Y', strtotime('+120days'));
                $hora->save();
            }
        }
    }

    private function convertTime($str)
    {
        $horas = intval($str / 60);
        $minutos = intval($str % 60);
        return (strlen($horas) == 1 ? '0' . $horas  : $horas) . ':' . (strlen($minutos) == 1 ? '0' . $minutos : substr($minutos, 0, 2));
    }

    public function getHorasContratadas()
    {
        $sql = "SELECT SUM(HOC_HORAS) as horas from horas_contratadas where HOC_IDCLIENTE=$this->CLI_IDCLIENTE";
        $command = Yii::app()->db->createCommand($sql);
        $result = $command->queryAll();
        if(isset($result[0]['horas'])) {
            return $this->convertTime($result[0]['horas']);
        }
        return 0;
    }

    public function getHorasPendentes()
    {
        $sql = "SELECT SUM(HOC_SALDO) as horas from horas_contratadas where HOC_IDCLIENTE=$this->CLI_IDCLIENTE AND HOC_EXPIRACAO >= NOW() AND HOC_SALDO > 0";
        $command = Yii::app()->db->createCommand($sql);
        $result = $command->queryAll();
        if(isset($result[0]['horas'])) {
            return $this->convertTime($result[0]['horas']);
        }
        return 0;
    }

    public function hasHorasPendentes()
    {
        return $this->getHorasPendentes() != '0';
    }

    public function getHorasPendentesAtivacao()
    {
        $sql = "SELECT SUM(HOC_SALDO) as horas from horas_contratadas where HOC_IDCLIENTE=$this->CLI_IDCLIENTE AND HOC_EXPIRACAO is null";
        $command = Yii::app()->db->createCommand($sql);
        $result = $command->queryAll();
        if(isset($result[0]['horas'])) {
            return $this->convertTime($result[0]['horas']);
        }
        return 0;
    }

    public function hasHorasPendentesAtivacao()
    {
        return $this->getHorasPendentesAtivacao() != '0';
    }

    public function registrarHoras($atendimento)
    {
        $tipos = (strpos($atendimento->ATD_TIPO, ',') !== false) ? explode(',', $atendimento->ATD_TIPO) : array($atendimento->ATD_TIPO);
        $jaRegistrado = HorasUsadas::model()->count('HUS_IDATENDIMENTO='.$atendimento->ATD_IDATENDIMENTO);

        if($atendimento->ATD_SITUACAO != 'R' || !in_array('V', $tipos) || empty($atendimento->ATD_HORASIMPLANTACAO) || $atendimento->ATD_HORASIMPLANTACAO == '00:00' || $atendimento->ATD_HORASIMPLANTACAO == '00:00:00' || $atendimento->ATD_HORASIMPLANTACAO == null || $jaRegistrado)
            return;

        $dt_atendimento = (strpos($atendimento->ATD_DTCADASTRO, '/' !==false)) ? Util::formatDataMysql($atendimento->ATD_DTCADASTRO) : $atendimento->ATD_DTCADASTRO;
        $nao_expiradas = HorasContratadas::model()->findAll('HOC_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND HOC_EXPIRACAO >= "'.$dt_atendimento.'" AND HOC_SALDO > 0 order by HOC_EXPIRACAO ASC');
        $count_nao_expiradas = count($nao_expiradas);

        $total_reduzir = DateTime::createFromFormat("H:i",$atendimento->ATD_HORASIMPLANTACAO);
        if(!$total_reduzir)
            return;
        $total_reduzir = $total_reduzir->format('i') + ($total_reduzir->format('H') * 60);
        if($count_nao_expiradas > 0) {
            foreach($nao_expiradas as $key => $hora) {
                $reduzir = 0;
                if($total_reduzir > 0) {
                    $reduzir = $total_reduzir;
                    if($key + 1 < $count_nao_expiradas) {
                        if($hora->HOC_SALDO >= $total_reduzir) {
                            $this->reduzHora($atendimento, $hora, $reduzir);
                        } else {
                            $reduzir = $hora->HOC_SALDO;
                            $this->reduzHora($atendimento, $hora, $reduzir);
                        }
                    } else {
                        $this->reduzHora($atendimento, $hora, $reduzir);
                    }
                }
                $total_reduzir -= $reduzir;
            }
        } else { // todas horas expiradas ou somente um registro de horas não expirada
            $hora = false;
            if(count($nao_expiradas) == 1) {
                $hora=$nao_expiradas[0];
            } else {
                $hora = HorasContratadas::model()->find('HOC_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND HOC_EXPIRACAO >= "'.$dt_atendimento.'" order by HOC_EXPIRACAO DESC');
                if(!isset($hora->HOC_ID)) {
                    $hora = HorasContratadas::model()->find('HOC_IDCLIENTE = ' . $this->CLI_IDCLIENTE . ' AND HOC_EXPIRACAO < "'.$dt_atendimento.'" order by HOC_EXPIRACAO DESC');
                }
            }
            $this->reduzHora($atendimento, $hora, $total_reduzir);
        }
    }

    public function reduzHora($atendimento, $hora, $reduzir)
    {
        if(isset($hora->HOC_ID)) {
            $hora_usada = new HorasUsadas();
            $hora_usada->HUS_IDATENDIMENTO = $atendimento->ATD_IDATENDIMENTO;
            $hora_usada->HUS_IDCONTRATADA = $hora->HOC_ID;
            $hora_usada->HUS_HORAS = $reduzir;
            $hora_usada->HUS_DATA = Util::formatDataBr($atendimento->ATD_DTCADASTRO);
            $hora_usada->HUS_IDCLIENTE = $this->CLI_IDCLIENTE;
            $hora_usada->save(false);

            $hora->HOC_SALDO -= $reduzir;
            $hora->save(false, array('HOC_SALDO'));
            /*Salvar no atendimento o saldo de horas restantes no cliente*/
            $atendimento = Atendimentos::model()->findByPk($atendimento->ATD_IDATENDIMENTO);
            $atendimento->ATD_HORASDISPONIVEIS = $this->getHorasPendentes() . ':00';
            $atendimento->save(false, array('ATD_HORASDISPONIVEIS'));
        }
    }

    public function implantacaoIniciada()
    {
        $revenda = $this->getRevendaResponsavel2();
        if(isset($revenda->REV_CONTROLE_IMPLANTACAO) && $revenda->REV_CONTROLE_IMPLANTACAO == 1) {
            if ($this->CLI_AVALIACAO_IMPLANTACAO == Clientes::IMPLANTACAO_NAO_INICIADA) {
                $this->CLI_AVALIACAO_IMPLANTACAO = Clientes::IMPLANTACAO_INICIADA_PENDENTE_PRIMEIRA_AVALIACAO;
                $this->save(false, array('CLI_AVALIACAO_IMPLANTACAO'));
            }

            if ($this->CLI_AVALIACAO_IMPLANTACAO == Clientes::IMPLANTACAO_FINALIZADA_PENDENTE_SEGUNDA_AVALIACAO) {
                if (empty($this->CLI_NOTA_SATISFACAO_IMPLANTACAO)) {
                    $this->CLI_AVALIACAO_IMPLANTACAO = Clientes::IMPLANTACAO_INICIADA_PENDENTE_PRIMEIRA_AVALIACAO;
                } else {
                    $this->CLI_AVALIACAO_IMPLANTACAO = Clientes::IMPLANTACAO_INICIADA_FEITA_PRIMEIRA_AVALIACAO;
                }
                $this->save(false, array('CLI_AVALIACAO_IMPLANTACAO'));
            }

            if ($this->CLI_SITUACAO == "FP") {
                $date = DateTime::createFromFormat('Y-m-d', date('Y-m-d'));
                $date->modify('+1 month');
                $this->CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO = $date->format('d/m/Y');
                $this->CLI_AVALIACAO_IMPLANTACAO            = Clientes::IMPLANTACAO_INICIADA_PENDENTE_PRIMEIRA_AVALIACAO;
                $this->save(false, array('CLI_AVALIACAO_IMPLANTACAO', 'CLI_DT_PROXIMA_AVALIACAO_IMPLANTACAO'));
            }
        }
        // cliente em implantação = true
        $this->CLI_IMPLANTACAO = 1;
        $this->save(false, array('CLI_IMPLANTACAO'));
    }

    public function implantacaoFinalizada()
    {
        $revenda = $this->getRevendaResponsavel2();
        if(isset($revenda->REV_CONTROLE_IMPLANTACAO) && $revenda->REV_CONTROLE_IMPLANTACAO == 1) {
            if ($this->CLI_AVALIACAO_IMPLANTACAO == Clientes::IMPLANTACAO_INICIADA_PENDENTE_PRIMEIRA_AVALIACAO || $this->CLI_AVALIACAO_IMPLANTACAO == Clientes::IMPLANTACAO_INICIADA_FEITA_PRIMEIRA_AVALIACAO) {
                $this->CLI_AVALIACAO_IMPLANTACAO = Clientes::IMPLANTACAO_FINALIZADA_PENDENTE_SEGUNDA_AVALIACAO;
                $this->save(false, array('CLI_AVALIACAO_IMPLANTACAO'));
            }
        }

        // cliente em implantação = false
        $this->CLI_IMPLANTACAO = 0;
        $this->save(false, array('CLI_IMPLANTACAO'));
    }

    public function atualizaVersaoSistema($idversao)
    {
        if (!empty($idversao) && $idversao != false && $idversao > 0) {
            $this->CLI_IDVERSAO = $idversao;
            $this->save(false, array('CLI_IDVERSAO'));
        }
    }

    public function atualizaStatusCliente($idmotivo, $atendimento)
    {
        if ($idmotivo == 64) {// Realização de Demonstração
            $this->realizadaDemonstracao();
            return;
        }
        if(in_array($this->CLI_SITUACAO, array('A', 'I', 'PI'))) {
            return;
        }

        $status = false;
        if ($idmotivo == 82) {// Fechamento Positivo
            $this->atualizaStatus('FP', $atendimento);

        } elseif ($idmotivo == 83) {// Fechamento Negativo
            $this->atualizaStatus('FN', $atendimento);

        } elseif ($idmotivo == 84) {// Em Negociação
            $this->atualizaStatus('N', $atendimento);

        } elseif ($idmotivo == 465) {// Negociação postergada
            $this->atualizaStatus('NP', $atendimento);

        } elseif ($idmotivo == 479) {// Prospecto inativo
            $this->atualizaStatus('PI', $atendimento);
        }
    }

    public function getMotivoByStatus($status)
    {
        if(!$status) {
            $status = $this->CLI_SITUACAO;
        }
        if ($status == 'FP') {
            return 82;

        } elseif ($status == 'FN') {
            return 83;

        } elseif ($status == 'N') {
            return 84;

        } elseif ($status == 'NP') {
            return 465;

        } elseif ($status == 'PI') {
            return 479;

        } elseif (in_array($status, ['A', 'I', 'P'])) {
            return 564;

        }
        return false;
    }

    private function getSituacaoInteressadoByStatusCliente($status = false)
    {
        if(!$status) {
            $status = $this->CLI_SITUACAO;
        }

        if ($status == 'FP') {
            return Interessados::FECHAMENTO_POSITIVO;
        } elseif ($status == 'FN') {
            return Interessados::FECHAMENTO_NEGATIVO;
        } elseif ($status == 'N') {
            return Interessados::NEGOCIACAO;
        } elseif ($status == 'NP') {
            return Interessados::NEGOCIACAO_POSTERGADA;
        } elseif ($status == 'PI') {
            return Interessados::FECHADO;
        }
        return false;
    }

    public function atualizaStatus($status, Atendimentos $atendimentoRegistraTroca = null)
    {
        if(!$this->canUpdateStatus())
            return;

        if($atendimentoRegistraTroca && $atendimentoRegistraTroca->ATD_AUTOMATICO != 1) {
            $troca = new ClientesSituacoes;

            $fields = array(
                'CST_IDCLIENTE' => $this->CLI_IDCLIENTE,
                'CST_DATA' => $atendimentoRegistraTroca->ATD_DTLANCAMENTO,
                'CST_IDFUNCIONARIO' => User::getId(),
                'CST_SITUACAO' => $status,
                'CST_IDMOTIVO_FN' => $atendimentoRegistraTroca->ATD_IDMOTIVO_FN,
                'CST_DEMONSTRACAO' => ClientesSituacoes::DEMONSTRACAO_NAO_REALIZADA,
                'CST_DESCRICAO' => $atendimentoRegistraTroca->ATD_OBS,
            );

            $conditions = array();
            foreach ($fields as $field => $value) {
                if ($value != null) {
                   $value = addslashes($value);
                   $conditions[] = "{$field} = '{$value}'";
                } else {
                    $conditions[] = "{$field} IS NULL";
                }
            }
            $conditions = implode(" AND ", $conditions);

            $exists = $troca->exists($conditions);
            if (!$exists) {
                $troca->setAttributes($fields);
                $troca->save(false);
            }
        } else {
            $this->CLI_SITUACAO = $status;
            $this->save(false, array('CLI_SITUACAO'));
        }
        $cli = Clientes::model()->findByPk($this->CLI_IDCLIENTE);
        if($cli->getSituacaoInteressadoByStatusCliente()) {
            $interessado = Interessados::model()->find('INT_IDPROSPECTO = '.$cli->CLI_IDCLIENTE.' order by INT_CODIGO desc');
            if ($interessado) {
                $interessado->trocaSituacao($cli->getSituacaoInteressadoByStatusCliente());
            }
        }
    }

    public function atualizaMotivoFn($idMotivo)
    {
        $this->CLI_IDMOTIVO_FN = $idMotivo;
        $this->save(false, array('CLI_IDMOTIVO_FN'));
    }

    public function atualizaComoConheceu($idMotivo)
    {
        if ($this->CLI_SITUACAO == 'A') {
            return;
        }

        $ComoConheceu =  false;
        if ($idMotivo == 71) {
            $ComoConheceu = '71'; // Duplicação de cliente ativo
        } elseif ($idMotivo == 67) {
            $ComoConheceu = '67'; // Reativação de Cliente Cancelado
        } elseif ($idMotivo == 79) {
            $ComoConheceu = '79'; // Transferência
        } else {
            return;
        }

        if ($ComoConheceu != false) {
            $this->CLI_IDMOTIVO = $ComoConheceu;
            $this->save(false, array('CLI_IDMOTIVO'));
        }
    }

    public function atualizaNivelInteresse($nivel)
    {
        if ($this->CLI_SITUACAO == 'A') {
            return;
        }
        if (strlen($nivel) > 0 && $nivel >= 0 && $nivel <= 3) {
            $this->CLI_NIVELINTERESSE = $nivel;
            $this->save(false, array('CLI_NIVELINTERESSE'));
        }
    }

    public function listDocumentosFiscais($implode = false, $keys = false)
    {
        $documentos = array();
        $DocumentosFiscais = ClientesDocumentosFiscais::model()->findAll("CDF_IDCLIENTE = {$this->CLI_IDCLIENTE}");

        foreach($DocumentosFiscais as $documento) {
            $documentos[$documento->DocumentoFiscal->DFS_IDDOCUMENTO] = $documento->DocumentoFiscal->DFS_DESCRICAO;
        }
        natcasesort($documentos);

        if($keys) {
            $documentos = array_keys($documentos);
        }
        if($implode) {
            return implode(', ', $documentos);
        }
        return $documentos;
    }

    public function atendimentoDocumentosFiscais($de, $para, $autor)
    {
        if($de != $para) {
            $atividade = new Atendimentos;
            $atividade->ATD_AUTOMATICO = 1;
            $atividade->ATD_IDCLIENTE = $this->CLI_IDCLIENTE;
            $atividade->ATD_IDFUNCIONARIO = $autor;
            $atividade->ATD_IDUSUARIO = User::getId();
            $atividade->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
            $atividade->ATD_DTCADASTRO = date('d/m/Y');
            $atividade->ATD_HORAINICIO = date('H:i:s');
            $atividade->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
            $atividade->ATD_TOTALHORAS = '00:01:00';
            $atividade->ATD_TIPO = 'O';
            $atividade->ATD_IDMOTIVO = 340;
            $atividade->ATD_SITUACAO = 'R';
            $atividade->ATD_OBS = "Foram alterados os documentos fiscais vinculados ao cliente:".PHP_EOL;
            $atividade->ATD_OBS .= "De: {$de}." . PHP_EOL;
            $atividade->ATD_OBS .= "Para: {$para}." . PHP_EOL;

            $atividade->save(false, array('ATD_AUTOMATICO', 'ATD_DTLANCAMENTO', 'ATD_TIPO', 'ATD_IDMOTIVO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDUSUARIO', 'ATD_IDFUNCIONARIO', 'ATD_SITUACAO', 'ATD_IDCLIENTE', 'ATD_OBS'));
        }
    }

    public function getCamposEditados($old)
    {
        $campos = array('CLI_IDEMPRESA', 'CLI_IDVENDEDOR', 'CLI_TIPOPESSOA', 'CLI_IDCONTADOR', 'CLI_NIVELINTERESSE', 'CLI_NOME', 'CLI_CONTATO', 'CLI_STATUS_REVISAO', 'CLI_FANTASIA', 'CLI_CNPJCPF', 'CLI_INSCR_EST', 'CLI_SIMPLES', 'CLI_ENDERECO', 'CLI_NUMERO', 'CLI_COMPLEMENTO', 'CLI_BAIRRO', 'CLI_CIDADE', 'CLI_CEP', 'CLI_POSSUIEMAIL', 'CLI_EMAIL', 'CLI_EMAIL_AREA_CLIENTES', 'CLI_HOMEPAGE', 'CLI_FONE1', 'CLI_FONE2', 'CLI_FONE3', 'CLI_FAX', 'CLI_IDMOTIVO', 'CLI_IDRAMO', 'CLI_IDFORNECEDOR', 'CLI_DT_PROXIMA_VISITA_COMERCIAL', 'CLI_OBS', 'CLI_DTRESCISAO', 'CLI_IDRESCISAO', 'CLI_DTATIVACAO', 'CLI_DTCONTRATO');

        $campos_editados = array();
        foreach ($campos as $key => $campo) {
            $valorAtualizado = $this->{$campo};
            $valorAntigo = $old->{$campo};
            if ($campo == 'CLI_CNPJCPF') {
                $valorAtualizado = Util::unmask($this->{$campo});
                $valorAntigo = Util::unmask($old->{$campo});
            }
            if(in_array($campo, ['CLI_FONE1', 'CLI_FONE2', 'CLI_FONE3', 'CLI_FAX'])) {
                $valorAtualizado = Util::unmask($this->{$campo});
                $valorAntigo = Util::unmask($old->{$campo});
                if($valorAntigo != $valorAtualizado) {
                    $valorAtualizado = $this->{$campo};
                    $valorAntigo = $old->{$campo};
                }
            }

            if ($valorAtualizado != $valorAntigo) {
                $campos_editados[$campo]['nome'] = $campo;
                $campos_editados[$campo]['relation'] = $this->getFieldRelation($campo);
                switch ($campo) {
                    case 'CLI_IDEMPRESA':
                        $campos_editados[$campo]['class'] = "Clientes";
                        $campos_editados[$campo]['function'] = "getNomeEmpresa"
                        ;
                        break;
                    case 'CLI_TIPOPESSOA':
                        $campos_editados[$campo]['function'] = "getTipoPessoa"
                        ;
                        break;
                    case 'CLI_NIVELINTERESSE':
                        $campos_editados[$campo]['function'] = "getNivelInteresse"
                        ;
                        break;
                    case 'CLI_CNPJCPF':
                        $campos_editados[$campo]['function'] = "unmask"
                        ;
                        break;
                }
            }
        }

        if (!empty($campos_editados)) {
            return $campos_editados;
        }
        return false;
    }

    public function atendimentoEdicaoCliente($old)
    {
        $atualizacoes = array();

        $campos = $this->getCamposEditados($old);
        if ($campos) {
            foreach ($campos as $key => $campo) {
                $nome_campo = $campo['nome'];
                $valor_atualizado = $this->{$nome_campo};
                $valor_antigo = $old->{$nome_campo};

                if (isset($campo['function'])){
                    $funcao = $campo['function'];
                    if (isset($campo['class']) && $campo['class'] == "Clientes") {
                        $valor_atualizado = $this->{$funcao}($valor_atualizado);
                        $valor_antigo = $this->{$funcao}($valor_antigo);
                    } else {
                        $valor_atualizado = Util::{$funcao}($valor_atualizado);
                        $valor_antigo = Util::{$funcao}($valor_antigo);
                    }
                } elseif ($campo['relation']) {
                    $relation = $campo['relation'];

                    $valor_atualizado = $this->{$relation};
                    $valor_antigo = $old->{$relation};
                }
                $atualizacoes[] = Util::formatUpdatedField($this->getAttributeLabel($nome_campo), $valor_antigo, $valor_atualizado);
            }
        }

        if (!empty($atualizacoes)) {
            $observacao = Util::formatAllUpdates($atualizacoes);

            $atendimento = new Atendimentos;
            $atendimento->validate();
            $atendimento->ATD_IDCLIENTE     = (int) $this->CLI_IDCLIENTE;
            $atendimento->ATD_IDFUNCIONARIO = User::getId();
            $atendimento->ATD_IDUSUARIO     = User::getId();
            $atendimento->ATD_TIPO          = 'O';
            $atendimento->ATD_AUTOMATICO    = 1;
            $atendimento->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
            $atendimento->ATD_DTCADASTRO    = date('d/m/Y');
            $atendimento->ATD_HORAINICIO    = date('H:i').':00';
            $atendimento->ATD_HORAFINAL     = date("H:i:s", mktime(date('H'), date('i')+1, 0, 1, 10, 2012));
            $atendimento->ATD_TOTALHORAS    = '00:01:00';
            $atendimento->ATD_IDMOTIVO      = 70;
            $atendimento->ATD_OBS           = $observacao;
            $atendimento->ATD_SITUACAO      = 'R';
            $atendimento->save(false, array('ATD_DTLANCAMENTO', 'ATD_TIPO', 'ATD_IDMOTIVO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDFUNCIONARIO', 'ATD_SITUACAO', 'ATD_IDCLIENTE', 'ATD_OBS', 'ATD_AUTOMATICO', 'ATD_IDUSUARIO'));

            return $atendimento;
        }
        return false;
    }

    public function getSituacao()
    {
        return Util::getStatusCliente($this->CLI_SITUACAO);
    }

    public function getNivelInteresse()
    {
        return Util::getNivelInteresse($this->CLI_NIVELINTERESSE);
    }

    public function getTelefones($implode = false)
    {
        if(isset($this->CLI_FONE1) && preg_replace("/[^0-9]/", "", $this->CLI_FONE1) != ""){
            $telefones[] = $this->CLI_FONE1;
        }
        if(isset($this->CLI_FONE2) && preg_replace("/[^0-9]/", "", $this->CLI_FONE2) != ""){
            $telefones[] = $this->CLI_FONE2;
        }
        if(isset($this->CLI_FONE3) && preg_replace("/[^0-9]/", "", $this->CLI_FONE3) != ""){
            $telefones[] = $this->CLI_FONE3;
        }

        if(isset($telefones)){
            if($implode){
                return implode($implode, $telefones);
            }
        }
    }

    public function canUpdateStatus()
    {
        if (in_array(User::getPrivilegio(), array(1, 7, 11)) || User::getUser()->FUN_PRM_STATUS) {
            return true;
        }

        if (User::getUser()->FUN_TBL_PROSPECTOS && User::canCreate()) {
            if($this->CLI_SITUACAO == 'A' || $this->CLI_SITUACAO ==  'PI' || $this->CLI_SITUACAO == 'I') {
                return false;
            } else {
                return true;
            }
        }

        return false;
    }

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

    public function realizadaDemonstracao()
    {
        $this->CLI_DEMONSTRACAO = ClientesSituacoes::DEMONSTRACAO_REALIZADA;
        $this->save(false, array('CLI_DEMONSTRACAO'));
        $interessado = Interessados::model()->find('INT_IDPROSPECTO = '.$this->CLI_IDCLIENTE.' order by INT_CODIGO desc');
        if ($interessado) {
            $interessado->realizadaDemonstracao();
        }
    }

    public function canUpdateAllFields()
    {
        if (in_array(User::getPrivilegio(), [1,7]) || (User::getPrivilegio() == 11 and User::canUpdate()) || $this->isNewRecord) {
            return true;
        } elseif ($this->CLI_SITUACAO == "A" || $this->CLI_SITUACAO == "I") {
            return false;
        } else {
            return true;
        }
    }

    public function listModulosComplementares($implode = false, $keys = false)
    {
        $complementares = [];

        foreach (['ModuloComplementar1', 'ModuloComplementar2', 'ModuloComplementar3', 'ModuloComplementar4', 'ModuloComplementar5', 'ModuloMobile'] as $name) {
            if(!empty($this->{$name})) {
                $complementares[$this->{$name}->MOD_IDMODULO] = $this->{$name}->MOD_DESCRICAO;
            }
        }
        natcasesort($complementares);

        if($keys) {
            $complementares = array_keys($complementares);
        }
        if($implode) {
            return implode(', ', $complementares);
        }
        return $complementares;
    }

    public function temAcessoAreaClientes()
    {
        if (in_array($this->CLI_SITUACAO, ["I", "A", "CV"])) {
            return true;
        }

        $tiposDocumentos = [
            Contratos::CONTRATO,
            Contratos::ADENDO,
            Contratos::PEDIDO_IMPLANTACAO,
            Contratos::PEDIDO_REATIVACAO,
            Contratos::TRANSFERENCIA_BANCO_RECEPCAO,
        ];
        $contratos = Contratos::model()->findAll("
            COT_IDCLIENTE = {$this->CLI_IDCLIENTE} and
            COT_SITUACAO IN (" . implode(",", $tiposDocumentos) . ")
        ");
        if ($contratos) {
            return true;
        }
        return false;
    }

    public function registraAtendimentoSolicitacaoSenha($tipo)
    {
        $modelAtendimento = new Atendimentos;

        $descricao = "";
        switch ($tipo) {
            case 'email':
                $descricao = "Enviado e-mail com link de recuperação de senha.";
                break;
            case 'link':
                $descricao = "Solicitado link de recuperação de senha para enviar para o cliente.";
                $descricao .= "\n\nMeio de entrega: " . $_POST['descricao'];
                break;
            case 'manual':
                $descricao = "Realizada alteração de senha manualmente.";
                break;
            default:
                die('erro');
        }

        $modelAtendimento->ATD_IDCLIENTE = $this->CLI_IDCLIENTE;
        $modelAtendimento->ATD_IDFUNCIONARIO = User::getId();
        $modelAtendimento->ATD_TIPO = 'O';
        $modelAtendimento->ATD_AUTOMATICO = 1;
        $modelAtendimento->ATD_DTLANCAMENTO = date('Y-m-d H:i:s');
        $modelAtendimento->ATD_HORAINICIO = date('H:i:s');
        $modelAtendimento->ATD_HORAFINAL = date('H:i:s', strtotime('+1 minute'));
        $modelAtendimento->ATD_TOTALHORAS = '00:01:00';
        $modelAtendimento->ATD_IDMOTIVO = 555;
        $modelAtendimento->ATD_OBS = $descricao;
        $modelAtendimento->ATD_DTCADASTRO = date('d/m/Y');
        $modelAtendimento->ATD_SITUACAO = 'R';
        $modelAtendimento->ATD_IDUSUARIO = User::getId();
        $modelAtendimento->ATD_DTALTERACAO = date('d/m/Y');
        $salvou = $modelAtendimento->save(false, array('ATD_DTLANCAMENTO','ATD_IDCLIENTE', 'ATD_IDFUNCIONARIO', 'ATD_TIPO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDMOTIVO', 'ATD_OBS', 'ATD_DTCADASTRO', 'ATD_SITUACAO', 'ATD_IDUSUARIO', 'ATD_DTALTERACAO', 'ATD_AUTOMATICO'));
        if ($salvou) {
            return true;
        } else {
            return false;
        }
    }

    public function getTipoAssinatura()
    {
        if ($this->CLI_SITUACAO == "A") {
            $contrato = Contratos::model()->find("
                COT_IDCLIENTE = {$this->CLI_IDCLIENTE} AND
                COT_SITUACAO = " . Contratos::CONTRATO . " AND
                COT_STATUS  = 2
            ");
            if ($contrato) {
                return $contrato->getTipoAssinatura();
            } else {
                return false;
            }
        }
        return false;
    }

    public function podeAlterarAtualizacaoAutomatica()
    {
        if (in_array(User::getPrivilegio(), [1, 6, 14, 20])) {
            return true;
        }
        if(User::getId() == 21) { // Adilson
            return true;
        }
        if (User::getPrivilegio() == 9 && in_array($this->CLI_CIDADE, array_keys(User::getCidades()))) {
            return true;
        }

        return false;
    }

    public function geraChave($save = false)
    {
        $documento = Util::mask($this->CLI_CNPJCPF, Mask::DOCUMENTO);
        $data = new \DateTime();
        $produto = $this->CLI_PRODUTO;
        $usuarios = $this->CLI_QTDUSUARIOS;
        $modulo1 = $this->CLI_MODULO1;
        $modulo2 = $this->CLI_MODULO2;
        $modulo3 = $this->CLI_MODULO3;
        $modulo4 = $this->CLI_MODULO4;
        $modulo5 = $this->CLI_MODULO5;

        $gerador = new ChaveAcesso();
        $this->CLI_CHAVEACESSO = $gerador->gerarChaveAcesso($documento, $usuarios, $data, $produto, [$modulo1, $modulo2, $modulo3, $modulo4, $modulo5]);
        $this->CLI_DTCHAVEGERADA = $data->format('Y-m-d');
        if($save) {
            $this->save(false, ['CLI_CHAVEACESSO', 'CLI_DTCHAVEGERADA']);
        }
    }
}
