<?php

class Sistema_Model_VistoriadoresAuxiliares extends Sistema_Model_Funcionarios
{
    public $_columnExcel = array(
		'id' => 'Cod.',
		'ds_nome_fantasia' => 'Empresa',
		'ds_nome_departamento' => 'Departamento',
		'ds_nome_funcionario' => 'Funcionário',
		'id_usuario' => 'Usuário ID',
		'fl_liberado_tablet_previa' => 'Liberado Tablet?',
		'fl_ativo' => 'Ativo?',
		'ds_crea' => 'CREA/CFTA',
		'cnpj_empresa' => 'CNPJ',
		'cpf' => 'CPF'
	);

    public function getData($where = false)
    {
        $selectVistoriadorStatus = $this->select()->setIntegrityCheck(false);
        $selectVistoriadorStatus->from(['svs' => 'sistema.vistoriadores_status'], ['MAX(id) as id_vistoriadores_status', 'id_funcionario']);
        $selectVistoriadorStatus->group('svs.id_funcionario');

        $subQueryHasConferido = "(SELECT EXISTS(
                                    SELECT 1
                                      FROM sistema.vistoriadores_status svconf
                                     WHERE svconf.id_funcionario = f.id
                                      AND svconf.id_status = ". Sistema_Model_VistoriadoresStatus::ID_STATUS_CONFERIDO ."
                                     LIMIT 1
                                )) AS has_status_conferido";

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('f' => 'sistema.funcionarios'), array('ds_nome_funcionario', 'id_usuario', 'fl_ativo', 'id', 'fl_treinado', 'ds_crea, (select exists(select distinct 1 from sistema.treinamento_vistorias where id_funcionario = f.id and fl_ministrante is false)) as fl_possui_treinamento', 'cpf_cnpj as cpf'));
        $select->join(array('e' => 'sistema.empresas'), 'e.id = f.id_empresa', array('ds_nome_fantasia', 'id as id_empresa', 'cpf_cnpj as cnpj_empresa'));
        $select->join(array('d' => 'sistema.departamentos'), 'd.id = f.id_departamento', array('ds_nome_departamento'));
        $select->joinLeft(array('m' => 'sistema.municipios'), 'm.id = f.id_municipio', array('ds_nome_municipio'));
        $select->joinLeft(array('es' => 'sistema.estados'), 'es.id = m.id_estado', array('ds_sigla'));
        $select->join(array('us' => 'sistema.usuarios'), 'us.id = id_usuario', array('fl_liberado_tablet_previa', 'tp_usuario', 'deviceid', 'deviceid_sinistro', 'fl_liberado_tablet_sinistro'));
        $select->joinLeft(['svs_max' => new Zend_Db_Expr("($selectVistoriadorStatus)")], 'svs_max.id_funcionario = f.id', ['id_vistoriadores_status']);
        $select->joinLeft(['svs' => 'sistema.vistoriadores_status'], 'svs.id = svs_max.id_vistoriadores_status', ['id_status', 'fl_cadastro_inicial', new Zend_Db_Expr("{$subQueryHasConferido}")]);
        $this->getWhere($select, $where);

        if ($this->_order) {
            $select->order($this->_order);
        }

        //retira da lista os administradores caso o usuário logado não seja administrador
        if (Zend_Auth::getInstance()->getIdentity()->ds_chave != 'ADMIN') {
            $select->join(array('r' => 'sistema.roles'), 'us.id_role = r.id', false);
            $select->where('r.ds_chave != ?', 'ADMIN');
        }

        return $select;
    }

    /**
     * Busca se os vistoriadores informados por parâmetro estão ou não treinados para utilizar o tablet
     * @param array $idsFuncionarios
     */
    public function getVistoriadoresTreinamento(array $idsFuncionarios)
    {
        $idsFuncionarios = implode(", ", $idsFuncionarios);
        $sql = "
            SELECT f.id, 
                   f.id_usuario, 
                   (SELECT EXISTS (
                        SELECT DISTINCT 1 
                          FROM sistema.treinamento_vistorias tv 
                          JOIN sistema.treinamentos_tipos_vistoria tpv ON tpv.id_treinamento = tv.id_treinamento 
                         WHERE tv.id_funcionario = f.id 
                           AND tv.fl_ministrante IS false 
                           AND tpv.id_tipo_vistoria = ".Sistema_Model_TipoVistoria::PREVIA."
                    )) as fl_possui_treinamento
              FROM sistema.funcionarios f 
              JOIN sistema.usuarios u ON f.id_usuario = u.id
             WHERE f.id in ({$idsFuncionarios})
        ";
        
        return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($sql);
    }
}
