<?php

class Nobre_Model_Processos extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Nobre_Model_Row_Processo';
	public $_order = 'dt_aceitacao desc';
	protected $_schema = 'sinistro';
	protected $_name = 'processos';
	protected $_primary = 'id';
	
	public $_columnExcel = array(
			'id' => 'Processo',
			'id_proposta' => 'Proposta',
			'nr_apolice' => 'Apólice',
			'ds_nome_proponente' => 'Segurado',
			'ds_empresa_vistoriadora' => 'Empresa Vistoriadora',
			'ds_nome_produto' => 'Produto'
	);	

	public function getData($where=false) {
		$User = Zend_Auth::getInstance()->getIdentity();
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from("sinistro.v_processos",array(
                'id', 
                'id_processo_seguradora',
                'id_status', 
                'ds_status', 
                'id_proposta', 
                'nr_apolice', 
        		'nr_endosso',
        		'id_proposta_mae',
                'ds_nome_proponente', 
                'dt_criacao', 
                'ds_nome_produto', 
                'id_safra', 
                'id_empresa', 
                'ds_empresa_vistoriadora', 
                'fl_ativo', 
                'fl_del', 
                'id_corretor', 
                'id_cultura',
                new Zend_Db_Expr("(select
                    sa.dt_aceitacao
                 from
                    sinistro.avisos sa,
                    sistema.status st
                 where
                    sa.id_proposta = v_processos.id_proposta and
                    st.id = sa.id_status and
                    (st.ds_chave = 'ACEITO' or
                     st.ds_chave = 'FECHADO')
                 order by
                    sa.dt_aceitacao desc
                 limit 1) as dt_aceitacao")
            ));    
            
            $select->order($this->_order);
        
        /*
         * Agrupa pelos campos retornados, exceto pela id do aviso, para que os processos não se repitam na lista (1 processo pode ter n avisos)
         */
        
        $select->group(array(
            'id', 
            'id_processo_seguradora',
            'id_status', 
            'ds_status', 
            'id_proposta', 
            'nr_apolice',
        	'nr_endosso', 
        	'id_proposta_mae', 
            'ds_nome_proponente', 
            'dt_criacao', 
            'ds_nome_produto', 
            'id_safra', 
            'id_empresa', 
            'ds_empresa_vistoriadora', 
            'fl_ativo', 
            'fl_del', 
            'id_corretor', 
            'id_usuario_criacao', 
            'id_cultura'
        ));
        
        if ($this->_order) {
            $select->order($this->_order);
        }
        
        if ($User->tp_usuario != 'F') {
        	$select->where('id_usuario_proposta_corretor = ?', $User->id);
        }
        
        if(Zend_Auth::getInstance()->getIdentity()->ds_nome_usuario == 'scor.resseguros'){
            $select->where('id_proposta in (117758, 105046, 107563)');
        } else {        
            if (is_array($where)) {
                foreach ($where as $clause) {
                    if (is_array($clause)) {
                        $field = $clause['field'];
                        $operator = $clause['operator'];
                        $value = $clause['value'];
                        
                        if (is_numeric($value)) {
                            $select->where("$field $operator ?", $value);                       
                        } else {
                            $select->where("normalize($field) $operator normalize(?)", $value);
                        }
                        
                        
                    } else {
                        $select->where($clause, '');
                    }
                }
            } elseif ($where != '') {
                $select->where($where);
            }
        }
        
        //SE ESTIVER SENDO ACESSADO POR USUARIO DA NOBRE SEGURADORA, FIXA PARA SAFRA ANTERIOR A 16
        if($User->id_empresa == 6){
        	$select->where('id_safra <= 15');
        }
        //SE ESTIVER SENDO ACESSADO POR USUARIO DA ESSOR SEGURADORA, FIXA PARA SAFRA IGUAL OU SUPERIOR A 16
        if($User->id_empresa == 181){
        	$select->where('id_safra > 15');
        }
        
        return $select;
    }
}