<?php

/**
 * This is the model base class for the table "pendencias".
 * 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 "Pendencias".
 *
 * Columns in table "pendencias" available as properties of the model,
 * followed by relations of table "pendencias" available as properties of the model.
 *
 * @property integer $PEN_IDPENDENCIA
 * @property integer $PEN_IDPRIORIDADE
 * @property integer $PEN_IDPROJETO
 * @property integer $PEN_IDFORMULARIO
 * @property integer $PEN_IDVERSAO
 * @property integer $PEN_IDLOCAL
 * @property integer $PEN_IDMOTIVO
 * @property integer $PEN_IDATENDENTE
 * @property integer $PEN_IDANALISTA
 * @property integer $PEN_IDDESENVOLVEDOR
 * @property string $PEN_DATACADASTRO
 * @property string $PEN_SITUACAO
 * @property string $PEN_DATAPREVISAO
 * @property integer $PEN_IDPREVISAOVERSAO
 * @property string $PEN_DATAENTREGA
 * @property string $PEN_TXTSOLICITACAO
 * @property integer $PEN_IDFUNCIONARIO
 * @property integer $PEN_IDSETOR
 * @property integer $PEN_TITULO
 * @property Projetos $Projeto
 * @property Prioridades $Prioridade
 * @property Formularios $Formulario
 * @property Versoes $Versao
 * @property Locais $Local
 * @property Motivos $Motivo
 * @property Funcionarios $Atendente
 * @property Funcionarios $Desenvolvedor
 * @property Funcionarios $Autor
 * @property Funcionarios $Analista
 * @property PendenciasAtividades[] $Atividades
 * @property Setores $Setor
 */
class Pendencias extends GxActiveRecord {

    public $PEN_FIM_DATACADASTRO;
    public $PEN_FIM_DATAPREVISAO;
    public $PEN_FIM_DATAENTREGA;
    public $PEN_DATAATIVIDADE;
    public $PEN_FIM_DATAATIVIDADE;
    public $BUSCAR_TEXTO;
    public $CAMPOS_TEXTO;
    public $PEN_CAMPO_BASE;
    public $TOKEN;
    public $SINTETICO;
    public $PEN_IDREVENDA;

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

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

    public static function label($n = 1) {
        return Yii::t('app', 'Pendência CRM|Pendências CRM', $n);
    }

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

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

    public function rules() {
        $id_motivo = (isset($_POST['Pendencias']['PEN_IDMOTIVO'])) ? $_POST['Pendencias']['PEN_IDMOTIVO'] : '';
        return array(
            array('PEN_IDPRIORIDADE, PEN_IDPROJETO, PEN_IDVERSAO, PEN_IDLOCAL, PEN_IDMOTIVO, PEN_DATACADASTRO, PEN_SITUACAO, PEN_TXTSOLICITACAO, PEN_IDFUNCIONARIO, PEN_TITULO', 'required'),

            array('PEN_IDPRIORIDADE, PEN_IDPROJETO, PEN_IDFORMULARIO, PEN_IDVERSAO, PEN_IDVERSAO_FALHA, PEN_IDLOCAL, PEN_IDMOTIVO, PEN_IDATENDENTE, PEN_IDANALISTA, PEN_IDDESENVOLVEDOR, PEN_IDPREVISAOVERSAO, PEN_IDFUNCIONARIO, PEN_IDSETOR, PEN_IDLOCAL', 'numerical', 'integerOnly' => true),
            array('PEN_SITUACAO', 'length', 'max' => 1),
            array('PEN_TITULO', 'length', 'max' => 100),
            array('PEN_DATACADASTRO, PEN_DATAPREVISAO, PEN_DATAENTREGA, PEN_TXTSOLICITACAO, PEN_TXTPROCEDIMENTO, PEN_IDATENDENTE,TOKEN,SINTETICO', 'safe'),
            array('PEN_IDPRIORIDADE, PEN_IDFORMULARIO, PEN_IDVERSAO, PEN_IDVERSAO_FALHA, PEN_IDLOCAL, PEN_IDMOTIVO, PEN_IDATENDENTE, PEN_IDANALISTA, PEN_IDDESENVOLVEDOR, PEN_DATACADASTRO, PEN_SITUACAO, PEN_DATAPREVISAO, PEN_DATAENTREGA, PEN_TXTSOLICITACAO, PEN_TXTPROCEDIMENTO, PEN_IDFUNCIONARIO, PEN_IDSETOR', 'default', 'setOnEmpty' => true, 'value' => null),
            array('PEN_BASE', 'default', 'setOnEmpty' => true, 'value' => 1),
            array('PEN_IDPENDENCIA, PEN_IDPRIORIDADE, PEN_IDPROJETO, PEN_IDFORMULARIO, PEN_IDVERSAO, PEN_IDVERSAO_FALHA, PEN_IDLOCAL, PEN_IDMOTIVO, PEN_IDATENDENTE, PEN_IDANALISTA, PEN_IDDESENVOLVEDOR, PEN_DATACADASTRO, PEN_SITUACAO, PEN_DATAPREVISAO, PEN_IDPREVISAOVERSAO, PEN_DATAENTREGA, PEN_TXTSOLICITACAO, PEN_TXTPROCEDIMENTO, PEN_IDFUNCIONARIO, PEN_FIM_DATACADASTRO, PEN_FIM_DATAPREVISAO, PEN_FIM_DATAENTREGA, PEN_IDSETOR, PEN_TITULO, PEN_DATAATIVIDADE, PEN_FIM_DATAATIVIDADE, BUSCAR_TEXTO, CAMPOS_TEXTO, PEN_IDREVENDA, PEN_BASE', 'safe', 'on' => 'search'),
            array('PEN_IDMOTIVO', 'VerificaMotivo', 'PEN_IDMOTIVO' => $id_motivo),
            array('PEN_TXTPROCEDIMENTO', 'VerificaProcedimento'),
            array('PEN_GRAUDIFICULDADE, PEN_ESTIMATIVATEMPO, PEN_ESTIMATIVAUNIDADE, PEN_IDDESENVOLVEDOR', 'required', 'on' => 'analise'),
            array('PEN_IDSETOR', 'verificaSetor'),
            array('PEN_IDFORMULARIO', 'verificaFormulario'),
        );
    }

    public function relations() {
        return array(
            'Analista'          => array(self::BELONGS_TO, 'Funcionarios', 'PEN_IDANALISTA'),
            'Arquivos'          => array(self::HAS_MANY, 'Arquivos', 'ARQ_FOREIGNKEY', 'condition'=>'Arquivos.ARQ_MODEL="Pendencias"'),
            'Atendente'         => array(self::BELONGS_TO, 'Funcionarios', 'PEN_IDATENDENTE'),
            'Atividades'        => array(self::HAS_MANY, 'PendenciasAtividades', 'PAT_IDPENDENCIA'),
            'Autor'             => array(self::BELONGS_TO, 'Funcionarios', 'PEN_IDFUNCIONARIO'),
            'Commits'           => array(self::HAS_MANY, 'Commits', 'CMT_IDPENDENCIA', 'condition' => 'Commits.CMT_MODEL="Pendencias"'),
            'Desenvolvedor'     => array(self::BELONGS_TO, 'Funcionarios', 'PEN_IDDESENVOLVEDOR'),
            'Formulario'        => array(self::BELONGS_TO, 'Formularios', 'PEN_IDFORMULARIO'),
            'Local'             => array(self::BELONGS_TO, 'Locais', 'PEN_IDLOCAL'),
            'Motivo'            => array(self::BELONGS_TO, 'Motivos', 'PEN_IDMOTIVO'),
            'PrevisaoVersao'    => array(self::BELONGS_TO, 'Versoes', 'PEN_IDPREVISAOVERSAO'),
            'Prioridade'        => array(self::BELONGS_TO, 'Prioridades', 'PEN_IDPRIORIDADE'),
            'Projeto'           => array(self::BELONGS_TO, 'Projetos', 'PEN_IDPROJETO'),
            'Setor'             => array(self::BELONGS_TO, 'Setores', 'PEN_IDSETOR'),
            'Versao'            => array(self::BELONGS_TO, 'Versoes', 'PEN_IDVERSAO'),
            'VersaoFalha'       => array(self::BELONGS_TO, 'Versoes', 'PEN_IDVERSAO_FALHA'),
        );
    }

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

    public function attributeLabels() {
        return array(
            'PEN_IDPENDENCIA'           => 'Código',
            'PEN_IDPRIORIDADE'          => 'Prioridade',
            'PEN_IDPROJETO'             => 'Projeto',
            'PEN_IDFORMULARIO'          => 'Menu',
            'PEN_IDVERSAO'              => 'Versão',
            'PEN_IDVERSAO_FALHA'        => 'Versão da Falha',
            'PEN_IDLOCAL'               => 'Local',
            'PEN_IDMOTIVO'              => 'Motivo',
            'PEN_IDATENDENTE'           => 'Atendente',
            'PEN_IDANALISTA'            => 'Analista',
            'PEN_IDDESENVOLVEDOR'       => 'Desenvolvedor',
            'PEN_DATACADASTRO'          => 'Data de Cadastro',
            'PEN_SITUACAO'              => 'Situação',
            'PEN_DATAPREVISAO'          => 'Previsão de Entrega',
            'PEN_IDPREVISAOVERSAO'      => 'Previsão de Versão',
            'PEN_DATAENTREGA'           => 'Data de Entrega',
            'PEN_TXTSOLICITACAO'        => 'Descrição da Solicitação',
            'PEN_TXTPROCEDIMENTO'       => 'Procedimentos para Simulação do Problema',
            'PEN_IDFUNCIONARIO'         => 'Autor',
            'PEN_IDSETOR'               => 'Setor',
            'PEN_DATAATIVIDADE'         => 'Data Atividade',
            'Projeto'                   => 'Projeto',
            'Prioridade'                => 'Prioridade',
            'Formulario'                => 'Menu',
            'Versao'                    => 'Versão',
            'Local'                     => 'Local',
            'Motivo'                    => 'Motivo',
            'Atendente'                 => 'Atendente',
            'Desenvolvedor'             => 'Desenvolvedor',
            'PrevisaoVersao'            => 'Previsão Versão',
            'Autor'                     => 'Autor',
            'Analista'                  => 'Analista',
            'Atividades'                => 'Atividades',
            'Setor'                     => 'Setor',
            'PEN_TITULO'                => 'Título',
            'PEN_PERCENTUAL'            => 'Percentual finalizado',
            'PEN_GRAUDIFICULDADE'       => 'Grau de Dificuldade',
            'PEN_ESTIMATIVATEMPO'       => 'Estimativa de tempo de trabalho',
            'PEN_ESTIMATIVAUNIDADE'     => 'Unidade da estimativa',
            'CAMPOS_TEXTO'              => 'Buscar texto em:',
            'BUSCAR_TEXTO'              => 'Busca textual',
            'SINTETICO'                 => 'Exportar somente relatório sintético',
            'PEN_IDREVENDA'             => 'Unidade de Negócios',
            'PEN_BASE'                  => 'Base'
        );
    }

    public function beforeSave() {
        parent::beforeSave();
        if ($this->isNewRecord) {
            $this->PEN_DATACADASTRO = date('Y-m-d H:i:s');
        }
        if(strpos($this->PEN_DATAENTREGA, '/') !== false && !empty($this->PEN_DATAENTREGA)) {
            $this->PEN_DATAENTREGA = Util::formatDataMysql($this->PEN_DATAENTREGA);
        }
        if(strpos($this->PEN_DATACADASTRO, '/') !== false && !empty($this->PEN_DATACADASTRO)) {
            $this->PEN_DATACADASTRO = Util::formatDataHoraMysql($this->PEN_DATACADASTRO);
        }
        if(strpos($this->PEN_DATAPREVISAO, '/') !== false && !empty($this->PEN_DATAPREVISAO)) {
            $this->PEN_DATAPREVISAO = Util::formatDataMysql($this->PEN_DATAPREVISAO);
        }
        if(in_array($this->PEN_IDLOCAL, array(5,6,9,22))) { // liberada, entregue, entregue por pré análise, não realizada
            $this->PEN_PERCENTUAL = 100;
            $this->PEN_SITUACAO = 'F';
        } elseif ($this->PEN_IDLOCAL != 21) { // observação
            $this->PEN_SITUACAO = 'A';
        }
        if(in_array($this->PEN_IDLOCAL, array(6,9,22))) { // entregue, entregue por pré análise, não realizada
            $data = date('Y-m-d');
            if(!empty($this->PEN_IDPENDENCIA)) {
                $entrega = PendenciasAtividades::model()->find('PAT_IDLOCAL in(6, 9, 22) and PAT_IDPENDENCIA = '.$this->PEN_IDPENDENCIA.' order by PAT_DATACADASTRO DESC');
                if($entrega) {
                    $data = Util::formatDataHoraMysql($entrega->PAT_DATACADASTRO);
                }
            }
            $this->PEN_DATAENTREGA = $data;
        } else {
            $this->PEN_DATAENTREGA = null;
        }

        if ($this->isNewRecord) {
            if($this->PEN_IDMOTIVO == 450){
                $this->PEN_IDFORMULARIO = 405;
            }

            if($this->PEN_IDFORMULARIO == 405){
                $this->PEN_IDSETOR = 5;
            }
        }

        $this->PEN_TXTSOLICITACAO = str_replace(["\n", "\r"], "", $this->PEN_TXTSOLICITACAO);
        $this->PEN_TXTPROCEDIMENTO = str_replace(["\n", "\r"], "", $this->PEN_TXTPROCEDIMENTO);

        return true;
    }

    public function beforeValidate() {
        if(in_array($this->PEN_IDLOCAL, array(5,6,9,22))) { // liberada, entregue, entregue por pré análise, não realizada
            $this->PEN_PERCENTUAL = 100;
            $this->PEN_SITUACAO = 'F';
        } elseif ($this->PEN_IDLOCAL != 21) { // observação
            $this->PEN_SITUACAO = 'A';
        }
        if(in_array($this->PEN_IDLOCAL, array(6,9,22))) { // entregue, entregue por pré análise, não realizada
            if(empty($this->PEN_DATAENTREGA)) {
                $this->PEN_DATAENTREGA = date('d/m/Y');
            }
        } else {
            $this->PEN_DATAENTREGA = null;
        }
        return parent::beforeValidate();
    }

    public function VerificaMotivo($attribute, $params) {
        if (isset($_POST['Pendencias']['PEN_IDMOTIVO']) && $_POST['Pendencias']['PEN_IDMOTIVO'] == 151 && $this->scenario != 'analise') { // Falha do Sistema
            if (!isset($_POST['Pendencias']['PEN_TXTPROCEDIMENTO']) || empty($_POST['Pendencias']['PEN_TXTPROCEDIMENTO'])) {
                $this->addError('PEN_TXTPROCEDIMENTO', 'Procedimento para simulação do problema não pode ser vazio.');
            }
        }
    }

    public function VerificaProcedimento($attribute, $params) {
        if (($this->PEN_IDMOTIVO == 151) && empty($this->PEN_TXTPROCEDIMENTO)) {
            $this->addError($attribute, $this->getAttributeLabel($attribute) . ' não pode ser vazio.');
            return false;
        }

        if ($this->PEN_TXTSOLICITACAO == $this->PEN_TXTPROCEDIMENTO && !empty($this->PEN_TXTPROCEDIMENTO)) {
            $this->addError($attribute, 'Procedimento para simulação do problema: Este campo não pode ser igual ao campo Descrição da Solicitação. O mesmo é obrigatório apenas para o motivo Falha do Sistema, e nele devemos descrever detalhadamente como simular o erro ocorrido e o erro em si.

            Então digite exatamente o passo a passo que o analista deve usar para simular o erro ou chegar à tela onde deve ser feito o ajuste, por exemplo:

            Se na descrição da solicitação você disse que: “O status do prospecto não está sendo atualizado automaticamente conforme as atividades lançadas.

            Aqui no procedimento para simulação do problema você deve descrever:

            1. Acesse a tela PROSPECTO/CLIENTES;

            2. Filtre o prospecto 1 chamado WINDEL SISTEMAS LTDA EPP;

            3. Veja que na tela de pesquisa seu status consta = EM NEGOCIAÇÃO;

            4. Clique em exibir o prospecto, veja que na tela de visualização do prospecto o status também consta = EM NEGOCIAÇÃO;

            5. Clique em ATIVIDADES, e veja que o vendedor Fulano de Tal lançou uma atividade dia 27/05 as 08:40 hs, usando o motivo FECHAMENTO NEGATIVO. Isto deveria alterar o status para FECHAMENTO NEGATIVO mas não alterou. Este é o erro que deve ser corrigido, o status geral do prospecto deve se atualizar conforme as atividades lançadas como ocorria antes.

            Note que qualquer usuário consegue chegar ao erro seguindo este passo a passo, já se não fosse informada a tela correta, ou o número do prospecto onde ocorreu o erro, não seria possível a simulação acarretando na devolução da pendência.');
        }
    }

    public function verificaSetor($attribute, $params){
        if($this->PEN_IDMOTIVO != 450 && $this->PEN_IDFORMULARIO != 405){
            if(empty($this->{$attribute})){
                $this->addError($attribute, $this->getAttributeLabel($attribute) . ' não pode ser vazio.');
                return false;
            }
        }
    }

    public function verificaFormulario($attribute, $params){
        if($this->PEN_IDMOTIVO != 450){
            if(empty($this->{$attribute})){
                $this->addError($attribute, $this->getAttributeLabel($attribute) . ' não pode ser vazio.');
                return false;
            }
        }
    }

    public function search($pagesize = false) {
        $criteria = new CDbCriteria;
        $criteria->compare('PEN_IDPENDENCIA', $this->PEN_IDPENDENCIA);
        $criteria->compare('PEN_IDPRIORIDADE', $this->PEN_IDPRIORIDADE);
        $criteria->compare('PEN_IDPROJETO', $this->PEN_IDPROJETO);
        $criteria->compare('PEN_IDFORMULARIO', $this->PEN_IDFORMULARIO);
        $criteria->compare('PEN_IDVERSAO', $this->PEN_IDVERSAO);
        $criteria->compare('PEN_IDVERSAO_FALHA', $this->PEN_IDVERSAO_FALHA);
        $criteria->compare('PEN_BASE', $this->PEN_BASE);
        $criteria->compare('PEN_IDATENDENTE', $this->PEN_IDATENDENTE);
        $criteria->compare('PEN_IDANALISTA', $this->PEN_IDANALISTA);
        $criteria->compare('PEN_IDDESENVOLVEDOR', $this->PEN_IDDESENVOLVEDOR);
        $criteria->compare('PEN_SITUACAO', $this->PEN_SITUACAO, true);
        $criteria->compare('PEN_IDPREVISAOVERSAO', $this->PEN_IDPREVISAOVERSAO);
        $criteria->compare('PEN_IDFUNCIONARIO', $this->PEN_IDFUNCIONARIO);
        $criteria->compare('PEN_IDSETOR', $this->PEN_IDSETOR);
        $criteria->compare('PEN_SITUACAO', $this->PEN_SITUACAO, true);
        $criteria->compare('PEN_IDLOCAL', $this->PEN_IDLOCAL);
        $criteria->compare('Autor.FUN_IDREVENDA', $this->PEN_IDREVENDA);

        if(!empty($this->BUSCAR_TEXTO) && !empty($this->CAMPOS_TEXTO) && is_array($this->CAMPOS_TEXTO)) {
            $texto = Util::secureForSelect($this->BUSCAR_TEXTO);
            $texto_decoded = Util::secureForSelect($this->BUSCAR_TEXTO,true);

            $condition = array();

            // Título da Pendência
            if(in_array(6, $this->CAMPOS_TEXTO))
                $condition[] = "PEN_TITULO like '%" . $texto . "%' or PEN_TITULO like '%" . $texto_decoded . "%'";

            // Descrição da Solicitação
            if(in_array(1, $this->CAMPOS_TEXTO))
                $condition[] = "PEN_TXTSOLICITACAO like '%" . $texto . "%' or PEN_TXTSOLICITACAO like '%" . $texto_decoded . "%'";

            // Procedimento para simulação do problema
            if(in_array(2, $this->CAMPOS_TEXTO))
                $condition[] = "PEN_TXTPROCEDIMENTO like '%" . $texto . "%' or PEN_TXTPROCEDIMENTO like '%" . $texto_decoded . "%'";

            $ids = array();
            // Descrição dos arquivos da solicitação
            if(in_array(3, $this->CAMPOS_TEXTO)) {
                $Arquivos = Arquivos::model()->findAll("ARQ_MODEL='Pendencias' AND (ARQ_DESCRICAO like '%" . $texto . "%' or  ARQ_DESCRICAO like '%" . $texto_decoded . "%')");
                foreach($Arquivos as $arquivo)
                    $ids[] = $arquivo->ARQ_FOREIGNKEY;
            }

            $conditionsAtividades = '';
            // Atividade
            if(in_array(4, $this->CAMPOS_TEXTO))
                $conditionAtividades[] = "PAT_DESCRICAO like '%" . $texto . "%' or PAT_DESCRICAO like '%" . $texto_decoded . "%'";

            // Descrição dos arquivos da Atividade
            if(in_array(5, $this->CAMPOS_TEXTO))
                $conditionAtividades[] = "Arquivos.ARQ_DESCRICAO like '%" . $texto . "%' or Arquivos.ARQ_DESCRICAO  like '%" . $texto_decoded . "%'";

            if(!empty($conditionAtividades)) {
                $Atividades = PendenciasAtividades::model()->with('Arquivos')->findAll(implode(' or ', $conditionAtividades));
                foreach($Atividades as $atividade)
                    $ids[] = $atividade->PAT_IDPENDENCIA;
            }

            if(!empty($ids))
                $condition[] = "PEN_IDPENDENCIA in (".implode(',', $ids).")";

            if(!empty($condition))
                $criteria->addCondition(implode(' or ', $condition));
            else
                $criteria->addCondition('PEN_IDPENDENCIA =  -1');
        }

        if (!isset($_GET['busca']) && !isset($_GET['filtro'])) {
            $criteria->compare('PEN_SITUACAO', 'A');

            if (User::getId() == 3 or User::getId() == 17 or User::getId() == 21) {// Catilene, Jones e Rosangela
                $criteria->addInCondition('PEN_IDLOCAL', array(13, 4, 2));
            } elseif (in_array(User::getId(), [368, 461])) {
                $criteria->addInCondition('PEN_IDLOCAL', array(1, 3));
            } elseif (in_array(User::getId(), [545, 566])) {
                $criteria->compare('PEN_IDLOCAL', 1);
                $criteria->compare('PEN_IDDESENVOLVEDOR', User::getId());
            } elseif (User::getId() == 192 || User::getId() == 262) {// Debora, Daiane
                $criteria->addCondition('PEN_IDMOTIVO = 450 or (PEN_IDSETOR = 5 and PEN_IDMOTIVO = 452) or (PEN_IDLOCAL in(4,15) AND PEN_IDFUNCIONARIO = '.User::getId().') or PEN_IDATENDENTE = '.User::getId());
            } else {// outros visualização padrão todas em aberto
                //$criteria->addInCondition('PEN_IDLOCAL', array(4, 15));
            }
        }

        if (is_array($this->PEN_IDLOCAL)) {
            $criteria->addInCondition('PEN_IDLOCAL', $this->PEN_IDLOCAL);
        }

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

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

        if(!empty(Util::formatDataMysql($this->PEN_DATAATIVIDADE)))
            $criteria->addCondition('date(Atividades.PAT_DATACADASTRO) >= "'.Util::formatDataMysql($this->PEN_DATAATIVIDADE).'"');
        if(!empty(Util::formatDataMysql($this->PEN_FIM_DATAATIVIDADE)))
            $criteria->addCondition('date(Atividades.PAT_DATACADASTRO) <= "'.Util::formatDataMysql($this->PEN_FIM_DATAATIVIDADE).'"');

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

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

       $criteria->with = array(
            'Projeto' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Prioridade' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Formulario' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Versao' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Local' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Motivo' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Atendente' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Desenvolvedor' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'PrevisaoVersao' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Autor' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Analista' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Atividades' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
            'Setor' => array('joinType' => 'LEFT JOIN', 'together' => true, 'select' => false),
        );
        $criteria->group = 't.PEN_IDPENDENCIA';

        $sort = new CSort;
        $sort->defaultOrder = 'PEN_IDPENDENCIA DESC';
        $sort->attributes = array(
            'PEN_IDFUNCIONARIO'=>array(
              'asc'=>'Autor.FUN_NOME',
              'desc'=>'Autor.FUN_NOME desc',
            ),
            'PEN_IDPRIORIDADE' => array(
                'asc'=>'Prioridade.PRI_DESCRICAO',
                'desc'=>'Prioridade.PRI_DESCRICAO desc',
            ),
            'PEN_IDMOTIVO' => array(
                'asc'=>'Motivo.MOT_DESCRICAO',
                'desc'=>'Motivo.MOT_DESCRICAO desc',
            ),
            'PEN_IDFORMULARIO' => array(
                'asc'=>'Formulario.FRM_CODFORM',
                'desc'=>'Formulario.FRM_CODFORM desc',
            ),
            'PEN_IDLOCAL' => array(
                'asc'=>'Local.LOC_DESCRICAO',
                'desc'=>'Local.LOC_DESCRICAO desc',
            ),
            'PEN_IDANALISTA' => array(
                'asc'=>'Analista.FUN_NOME',
                'desc'=>'Analista.FUN_NOME desc',
            ),
            'PEN_IDPREVISAOVERSAO' => array(
                'asc'=>'PrevisaoVersao.VER_DESCRICAO',
                'desc'=>'PrevisaoVersao.VER_DESCRICAO desc',
            ),
            '*'
        );

        $dataProvider = new CActiveDataProvider($this, array(
                'criteria'  => $criteria,
                'sort' => $sort,
                'pagination' => array(
                    'pageSize' => $pagesize ? $pagesize : 100
                    )
                )
            );
        // if (isset($_GET['relatorio'])) {
        //     CacheUtil::setDataProvider($this->TOKEN, $dataProvider);
        // }

        return $dataProvider;
    }

     public function podeVoltarLocal() {
        $ultimo = PendenciasAtividades::model()->find(
            array(
                'condition' => 'PAT_IDPENDENCIA = '.$this->PEN_IDPENDENCIA . ' AND PAT_IDLOCAL <> 21',
                'order' => 'PAT_IDATIVIDADE DESC',
                'limit' => 1
            )
        );
        if (!isset($ultimo->PAT_IDLOCAL) || $ultimo->PAT_IDLOCAL == -1 || $ultimo->PAT_IDAUTOR != User::getId())
            return false;

        $penultimo = PendenciasAtividades::model()->find(
            array(
                'condition' => 'PAT_IDPENDENCIA = '.$this->PEN_IDPENDENCIA . ' AND PAT_IDLOCAL <> 21',
                'order' => 'PAT_IDATIVIDADE DESC',
                'limit' => 1,
                'offset' => 1,
            )
        );
        if (!isset($penultimo->PAT_IDLOCAL) || $penultimo->PAT_IDLOCAL == -1)
            return false;

        return true;
    }

    public function getLocalAnterior() {
        if(!$this->podeVoltarLocal())
            return;

        $voltar = PendenciasAtividades::model()->find(
            array(
                'condition' => 'PAT_IDPENDENCIA = '.$this->PEN_IDPENDENCIA . ' AND PAT_IDLOCAL <> 21',
                'order' => 'PAT_IDATIVIDADE DESC',
                'limit' => 1,
                'offset' => 1,
            )
        );
        return $voltar->PAT_IDLOCAL;
    }

    public function printLocalAnterior() {
        if(!$this->podeVoltarLocal())
            return;

        $voltar = PendenciasAtividades::model()->find(
            array(
                'condition' => 'PAT_IDPENDENCIA = '.$this->PEN_IDPENDENCIA . ' AND PAT_IDLOCAL <> 21',
                'order' => 'PAT_IDATIVIDADE DESC',
                'limit' => 1,
                'offset' => 1,
            )
        );
        return $voltar->Local->LOC_DESCRICAO;
    }

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

        return true;
    }

    public function isAnalista($incluir_atendente = false){
        $jones = User::getId() == 3;
        $catilene = User::getId() == 17;
        $rosangela = User::getId() == 21;
        if($incluir_atendente) {
            $atendente = User::getId() == $this->PEN_IDATENDENTE;
            return ($jones || $catilene || $rosangela || $atendente || $this->isTrabalhoAdministrativo());
        } else {
            return ($jones || $catilene || $rosangela || $this->isTrabalhoAdministrativo());
        }
    }

    public function isDesenvolvedor() {
        return in_array(User::getId(), [368, 461, 545, 566]) || (isset($this->PEN_IDLOCAL) && User::getId() == $this->PEN_IDDESENVOLVEDOR);
    }

    public function isTrabalhoAdministrativo() {
        $administrativo = (User::getId() == 192 || User::getId() == 262);
        if(!$administrativo) {
            return false;
        }
        return $this->PEN_IDMOTIVO == 450 || ($this->PEN_IDMOTIVO == 452 && $this->PEN_IDSETOR = 5);
    }
}
