<?php

/**
 * This is the model base class for the table "pendencias_atividades".
 * 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 "PendenciasAtividades".
 *
 * Columns in table "pendencias_atividades" available as properties of the model,
 * followed by relations of table "pendencias_atividades" available as properties of the model.
 *
 * @property integer $PAT_IDATIVIDADE
 * @property integer $PAT_IDPENDENCIA
 * @property string $PAT_DATACADASTRO
 * @property integer $PAT_IDAUTOR
 * @property integer $PAT_IDLOCAL
 * @property string $PAT_SITUACAO
 * @property string $PAT_DESCRICAO
 * @property integer $PAT_IDPRIORIDADE
 * @property integer $PAT_IDMOTIVO
 * @property integer $PAT_IDDESENVOLVEDOR
 * @property string $PAT_DATAPREVISAO
 * @property integer $PAT_IDPREVISAOVERSAO
 * @property integer $PAT_IDSETOR
 *
 * @property Versoes $PrevisaoVersao
 * @property Pendencias $Pendencia
 * @property Funcionarios $Autor
 * @property Locais $Local
 * @property Prioridades $Prioridade
 * @property Motivos $Motivo
 * @property Funcionarios $Desenvolvedor
 * @property Funcionarios $Setor
 */
class PendenciasAtividades extends GxActiveRecord {

    public $PAT_BASE;
    public $PAT_CAMPO_BASE;
    public $PAT_IDVERSAO_FALHA;
    public $PAT_IDVERSAO;

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

    public function beforeSave() {
        parent::beforeSave();
        if ($this->isNewRecord) {
            $this->PAT_DATACADASTRO = date('Y-m-d H:i:s');
        }
        if(strpos($this->PAT_DATACADASTRO, '/') !== false && !empty($this->PAT_DATACADASTRO)) {
            $this->PAT_DATACADASTRO = Util::formatDataHoraMysql($this->PAT_DATACADASTRO);
        }

        if(strpos($this->PAT_DATAPREVISAO, '/') !== false && !empty($this->PAT_DATAPREVISAO)) {
            $this->PAT_DATAPREVISAO = Util::formatDataMysql($this->PAT_DATAPREVISAO);
        }
        if($this->isNewRecord) {
            $this->PAT_LAYOUT_NOVO = 1;
        }

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

        return true;
    }

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

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

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

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

    public function rules() {
        $pendencia = Pendencias::model()->findByPk($_GET['PEN_IDPENDENCIA']);
        if ($pendencia->isAnalista(true)) { // Catilene ou Jones ou Rosangela
            return array(
                array('PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDSETOR, PAT_IDFORMULARIO', 'required'),
                array('PAT_DESCRICAO', 'descricao'),
                array('PAT_IDPENDENCIA, PAT_IDAUTOR, PAT_IDLOCAL, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDVERSAO_FALHA, PAT_IDVERSAO, PAT_IDDESENVOLVEDOR, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'numerical', 'integerOnly' => true),
                array('PAT_IDDESENVOLVEDOR', 'obrigaDesenvolvedor'),
                array('PAT_SITUACAO', 'length', 'max' => 1),
                array('PAT_IDLOCAL', 'podeMovimentar'),
                array('PAT_DATAPREVISAO, PAT_PERCENTUAL, PAT_IDATENDENTE, PAT_IDFORMULARIO,PAT_LAYOUT_NOVO', 'safe'),
                array('PAT_IDATIVIDADE, PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_DESCRICAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDVERSAO_FALHA, PAT_IDVERSAO, PAT_IDDESENVOLVEDOR, PAT_DATAPREVISAO, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'safe', 'on' => 'search'),
            );
        } elseif ($pendencia->isAnalista(false)) {
            return array(
                array('PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_BASE', 'required'),
                array('PAT_DESCRICAO', 'descricao'),
                array('PAT_IDPENDENCIA, PAT_IDAUTOR, PAT_IDLOCAL, PAT_IDPRIORIDADE, PAT_IDVERSAO_FALHA, PAT_IDVERSAO', 'numerical', 'integerOnly' => true),
                array('PAT_SITUACAO', 'length', 'max' => 1),
                array('PAT_IDLOCAL', 'podeMovimentar'),
                array('PAT_DATAPREVISAO, PAT_PERCENTUAL, PAT_IDFORMULARIO,PAT_LAYOUT_NOVO', 'safe'),
                array('PAT_IDATIVIDADE, PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_DESCRICAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDVERSAO_FALHA, PAT_IDVERSAO, PAT_IDDESENVOLVEDOR, PAT_DATAPREVISAO, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'safe', 'on' => 'search'),
            );
        } elseif ($pendencia->isDesenvolvedor()) {
            return array(
                array('PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDSETOR, PAT_IDFORMULARIO, PAT_BASE', 'required'),
                array('PAT_IDDESENVOLVEDOR', 'obrigaDesenvolvedor'),
                array('PAT_DESCRICAO', 'descricao'),
                array('PAT_IDPENDENCIA, PAT_IDAUTOR, PAT_IDLOCAL, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDVERSAO_FALHA, PAT_IDVERSAO, PAT_IDDESENVOLVEDOR, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'numerical', 'integerOnly' => true),
                array('PAT_SITUACAO', 'length', 'max' => 1),
                array('PAT_IDLOCAL', 'podeMovimentar'),
                array('PAT_DATAPREVISAO, PAT_PERCENTUAL, PAT_IDFORMULARIO,PAT_LAYOUT_NOVO', 'safe'),
                array('PAT_IDATIVIDADE, PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_DESCRICAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDVERSAO_FALHA, PAT_IDVERSAO, PAT_IDDESENVOLVEDOR, PAT_DATAPREVISAO, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'safe', 'on' => 'search'),
            );
        } else {
            return array(
                array('PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO', 'required'),
                array('PAT_IDDESENVOLVEDOR', 'obrigaDesenvolvedor'),
                array('PAT_DESCRICAO', 'descricao'),
                array('PAT_IDPENDENCIA, PAT_IDAUTOR, PAT_IDLOCAL, PAT_IDPRIORIDADE', 'numerical', 'integerOnly' => true),
                array('PAT_SITUACAO', 'length', 'max' => 1),
                array('PAT_IDLOCAL', 'podeMovimentar'),
                array('PAT_DATAPREVISAO, PAT_PERCENTUAL, PAT_IDFORMULARIO,PAT_LAYOUT_NOVO', 'safe'),
                array('PAT_IDATIVIDADE, PAT_IDPENDENCIA, PAT_DATACADASTRO, PAT_IDAUTOR, PAT_IDLOCAL, PAT_SITUACAO, PAT_DESCRICAO, PAT_IDPRIORIDADE, PAT_IDMOTIVO, PAT_IDDESENVOLVEDOR, PAT_DATAPREVISAO, PAT_IDPREVISAOVERSAO, PAT_IDSETOR', 'safe', 'on' => 'search'),
            );
        }
    }

    public function relations() {
        return array(
            'Atendente'         => array(self::BELONGS_TO, 'Funcionarios', 'PAT_IDATENDENTE'),
            'Autor'             => array(self::BELONGS_TO, 'Funcionarios', 'PAT_IDAUTOR'),
            'Desenvolvedor'     => array(self::BELONGS_TO, 'Funcionarios', 'PAT_IDDESENVOLVEDOR'),
            'Local'             => array(self::BELONGS_TO, 'Locais', 'PAT_IDLOCAL'),
            'Motivo'            => array(self::BELONGS_TO, 'Motivos', 'PAT_IDMOTIVO'),
            'Pendencia'         => array(self::BELONGS_TO, 'Pendencias', 'PAT_IDPENDENCIA'),
            'PrevisaoVersao'    => array(self::BELONGS_TO, 'Versoes', 'PAT_IDPREVISAOVERSAO'),
            'Arquivos'          => array(self::HAS_MANY, 'Arquivos', 'ARQ_FOREIGNKEY', 'condition'=>'Arquivos.ARQ_MODEL="PendenciasAtividades"'),
            'Prioridade'        => array(self::BELONGS_TO, 'Prioridades', 'PAT_IDPRIORIDADE'),
            'Setor'             => array(self::BELONGS_TO, 'Setores', 'PAT_IDSETOR'),
            'Formulario'        => array(self::BELONGS_TO, 'Formularios', 'PAT_IDFORMULARIO'),
        );
    }

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

    public function attributeLabels() {
        return array(
            'PAT_IDATIVIDADE'       => 'Código da atividade',
            'PAT_IDPENDENCIA'       => 'Código da pendência',
            'PAT_DATACADASTRO'      => 'Data de cadastro',
            'PAT_IDAUTOR'           => 'Autor',
            'PAT_IDATENDENTE'       => 'Atendente',
            'PAT_IDLOCAL'           => 'Local',
            'PAT_SITUACAO'          => 'Situação',
            'PAT_DESCRICAO'         => 'Descrição',
            'PAT_IDPRIORIDADE'      => 'Prioridade',
            'PAT_IDMOTIVO'          => 'Motivo',
            'PAT_IDDESENVOLVEDOR'   => 'Desenvolvedor',
            'PAT_DATAPREVISAO'      => 'Previsão de Entrega',
            'PAT_IDPREVISAOVERSAO'  => 'Previsão de Versão',
            'PAT_IDSETOR'           => 'Setor',
            'PAT_PERCENTUAL'        => 'Percentual finalizado',
            'PAT_IDFORMULARIO'      => 'Menu',
            'Autor'                 => 'Autor',
            'Atendente'             => 'Atendente',
            'Desenvolvedor'         => 'Desenvolvedor',
            'Local'                 => 'Local',
            'Motivo'                => 'Motivo',
            'Pendencia'             => 'Código da pendência',
            'PrevisaoVersao'        => 'Previsão de Versão',
            'Prioridade'            => 'Prioridade',
            'Setor'                 => 'Setor',
            'Formulario'            => 'Menu',
            'PAT_BASE'              => 'Base',
            'PAT_IDVERSAO_FALHA'    => 'Versão da Falha',
            'PAT_IDVERSAO'          => 'Versão'
        );
    }

    public function obrigaDesenvolvedor($attribute, $params)  {
        if($this->PAT_IDLOCAL == 1) {
            if(empty($this->PAT_IDDESENVOLVEDOR)) {
                    $this->addError($attribute, 'Desenvolvedor é obrigatório.');
            }
            if(empty($this->PAT_IDPREVISAOVERSAO)) {
                    $this->addError('PAT_IDPREVISAOVERSAO', 'Previsão de Versão é obrigatório.');
            }
        }
    }

    public function descricao($attribute, $params) {
        if (!empty($this->PAT_DESCRICAO))
            return true;
        if (in_array(User::getId(), array(3, 17, 97))) {
            if($this->PAT_IDLOCAL != 2) // deve entrar sempre pois senão valida quando não deve
                $this->addError($attribute, 'Descrição é obrigatório e não pode ser vazio.');
        } else if (in_array(User::getId(), array(192, 262)) && $this->Pendencia->PEN_IDMOTIVO == 450) {
            if($this->PAT_IDLOCAL != 2) // deve entrar sempre pois senão valida quando não deve
                $this->addError($attribute, 'Descrição é obrigatório e não pode ser vazio.');
        } else {
            $this->addError($attribute, 'Descrição é obrigatório e não pode ser vazio.');
        }
    }

    public function podeMovimentar($attribute, $params) {
        if($this->PAT_IDLOCAL == -1) {
            $pendencia = Pendencias::model()->findByPk($this->PAT_IDPENDENCIA);
            if(!$pendencia->podeVoltarLocal()) {
                $this->addError($attribute, 'Você não tem permissão de voltar a pendência para o local anterior.');
            }
        }

        if(!LocaisPendencias::podeMovimentar($this->PAT_IDPENDENCIA, $this->PAT_IDLOCAL)) {
            $this->addError($attribute, 'Você não tem permissão de movimentar a pendência para o local selecionado.');
        }
    }

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

        $criteria->compare('PAT_IDATIVIDADE', $this->PAT_IDATIVIDADE);
        $criteria->compare('PAT_IDPENDENCIA', $this->PAT_IDPENDENCIA);
        $criteria->compare('PAT_DATACADASTRO', $this->PAT_DATACADASTRO, true);
        $criteria->compare('PAT_IDAUTOR', $this->PAT_IDAUTOR);
        $criteria->compare('PAT_IDLOCAL', $this->PAT_IDLOCAL);
        $criteria->compare('PAT_SITUACAO', $this->PAT_SITUACAO, true);
        $criteria->compare('PAT_DESCRICAO', $this->PAT_DESCRICAO, true);
        $criteria->compare('PAT_IDPRIORIDADE', $this->PAT_IDPRIORIDADE);
        $criteria->compare('PAT_IDMOTIVO', $this->PAT_IDMOTIVO);
        $criteria->compare('PAT_IDDESENVOLVEDOR', $this->PAT_IDDESENVOLVEDOR);
        $criteria->compare('PAT_DATAPREVISAO', $this->PAT_DATAPREVISAO, true);
        $criteria->compare('PAT_IDPREVISAOVERSAO', $this->PAT_IDPREVISAOVERSAO);
        $criteria->compare('PAT_IDSETOR', $this->PAT_IDSETOR);

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

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

        return true;
    }

    public function afterSave() {
        $pendencia = Pendencias::model()->find('PEN_IDPENDENCIA = '. $this->PAT_IDPENDENCIA);
        $atv = $this->find('PAT_IDATIVIDADE='.$this->PAT_IDATIVIDADE);
        if (in_array($this->PAT_IDLOCAL, array(1, 3, 5))) {
            $body = '<b>Código da pendência:</b> '.$this->PAT_IDPENDENCIA.' <br />';
            $body .= '<b>Título:</b> '.$this->Pendencia->PEN_TITULO.'<br />';
            $body .= '<b>Descrição da atividade:</b> '.$this->PAT_DESCRICAO;
            $body .= Util::createMailButton(Util::createUrl('pendencias/view', array('id' => $this->PAT_IDPENDENCIA)), 'ABRIR PENDÊNCIA');
            $subject = 'Aviso de movimentação de pendência';

            $to = array(
                'marcio@delvale.com.br'
            );
            switch ($this->PAT_IDLOCAL) {
                case 1:
                    $subject = 'Pendência '.$this->PAT_IDPENDENCIA.' movimentada para desenvolvimento';
                    if (!empty($this->PAT_IDDESENVOLVEDOR) && $this->PAT_IDAUTOR != $this->PAT_IDDESENVOLVEDOR) {
                        $to[] = $this->Desenvolvedor->FUN_EMAIL;
                    }
                    break;

                case 3:
                    $subject = 'Pendência '.$this->PAT_IDPENDENCIA.' movimentada para análise e desenvolvimento';
                    break;

                case 5:
                    $subject = 'Pendência '.$this->PAT_IDPENDENCIA.' liberada';
                    break;
            }
            $to = array_unique($to);

            $emails = implode(", ", $to);
            Util::sendEmail($emails, $subject, $body);
        }

        $Locais = Locais::model()->findByPk($this->PAT_IDLOCAL);
        $Atendimentos = new Atendimentos;
        /*$Atendimentos->ATD_IDCLIENTE = null;*/
        $Atendimentos->ATD_IDFUNCIONARIO = User::getId();
        $Atendimentos->ATD_IDUSUARIO     = User::getId();
        $Atendimentos->ATD_DTCADASTRO    = date('d/m/Y');
        $Atendimentos->ATD_DTLANCAMENTO  = date('Y-m-d H:i:s');
        $Atendimentos->ATD_HORAINICIO    = date('H:i:s');
        $Atendimentos->ATD_HORAFINAL     = date('H:i:s', strtotime('+1 minute'));
        $Atendimentos->ATD_TOTALHORAS    = '00:01:00';
        $Atendimentos->ATD_IDMOTIVO      = '453';
        $Atendimentos->ATD_SITUACAO      = 'R';
        $Atendimentos->ATD_TIPO          = 'O';
        $Atendimentos->ATD_AUTOMATICO    = 1;
        $Atendimentos->ATD_OBS           = 'Lançamento em Pendências do CRM
        Pendência: '.$this->PAT_IDPENDENCIA.'
        Local: '.(($this->PAT_IDLOCAL == -1)?'Voltado para local anterior':(isset($Locais->LOC_DESCRICAO)?$Locais->LOC_DESCRICAO:' -- '));

        $atd = Atendimentos::model()->find('ATD_IDFUNCIONARIO ="'.$Atendimentos->ATD_IDFUNCIONARIO.'" and
        ATD_IDUSUARIO      ="'.$Atendimentos->ATD_IDUSUARIO.'" and
        ATD_DTCADASTRO     ="'.Util::formatDataMysql($Atendimentos->ATD_DTCADASTRO).'" and
        ATD_DTLANCAMENTO   ="'.$Atendimentos->ATD_DTLANCAMENTO.'" and
        ATD_HORAINICIO     ="'.$Atendimentos->ATD_HORAINICIO.'" and
        ATD_HORAFINAL      ="'.$Atendimentos->ATD_HORAFINAL.'" and
        ATD_TOTALHORAS     ="'.$Atendimentos->ATD_TOTALHORAS.'" and
        ATD_IDMOTIVO       ="'.$Atendimentos->ATD_IDMOTIVO.'" and
        ATD_SITUACAO       ="'.$Atendimentos->ATD_SITUACAO.'" and
        ATD_TIPO           ="'.$Atendimentos->ATD_TIPO.'" and
        ATD_AUTOMATICO     ="'.$Atendimentos->ATD_AUTOMATICO.'" and
        ATD_OBS LIKE "%Pendência: '.$this->PAT_IDPENDENCIA.'%" and
        ATD_OBS LIKE "%Local: '.(($this->PAT_IDLOCAL == -1)?'Voltado para local anterior':(isset($Locais->LOC_DESCRICAO)?$Locais->LOC_DESCRICAO:' -- ')).'%"');
        if(!$atd) {
            $Atendimentos->save(false, array('ATD_DTLANCAMENTO', 'ATD_IDFUNCIONARIO', 'ATD_DTCADASTRO', 'ATD_HORAINICIO', 'ATD_HORAFINAL', 'ATD_TOTALHORAS', 'ATD_IDMOTIVO', 'ATD_SITUACAO', 'ATD_TIPO', 'ATD_OBS', 'ATD_AUTOMATICO', 'ATD_IDUSUARIO'));
        }
        parent::afterSave();
    }

}
