<?php

class Sinistro_Model_Processos extends Agro_Db_Table_Abstract {
    const ID_STATUS_ABERTO_REGULACAO = 31;
    const ID_STATUS_ABERTO_LIQUIDACAO = 32;
    const ID_STATUS_ABERTO_SEM_EMPRESA = 200;

	protected $_rowClass = 'Sinistro_Model_Row_Processo';
	protected $_schema = 'sinistro';
	protected $_name = 'processos';
	protected $_view = 'v_processo_sinistro';
	protected $_primary = 'id';
	public $_order = array('dt_alteracao_processo desc', 'dt_criacao_processo desc');


	public function getCoberturasProcessoByProposta($idProposta) {
		$data = array();
		if ($idProposta) {
			$select = "
				select
					c.id,
					c.ds_nome_cobertura,
					pdc.fl_vistoria_preliminar,
					pdc.fl_vistoria_final,
					pdc.fl_exibir_regulacao_perdas,
					pdc.id_tipo_liquidacao,
					tl.fl_liquidacao_avulsa,
					tl.fl_liquidacao_manual,
					pe.id_empresa as id_empresa_processo,
					av.fl_dispensa_preliminar

				from
					/*tabela que tem o id_proposta*/
					sinistro.avisos as av inner join

					/*busca a empresa do processo*/
					sinistro.processos as pro on pro.id_proposta = av.id_proposta inner join
					sinistro.processos_empresas as pe on pe.id_processo = pro.id and pe.fl_ativo = true inner join

					/*busca as coberturas da proposta*/
					seguro.propostas_coberturas as pc on pc.id_proposta = av.id_proposta inner join
					produto.coberturas as c on c.id = pc.id_cobertura left join

					/*filtra pelos eventos das coberturas*/
					sinistro.avisos_eventos as ae on ae.id_aviso = av.id left join
					produto.coberturas_eventos as ce on ce.id_evento = ae.id_evento and ce.id_cobertura = c.id inner join

					/*filtra por produto*/
					seguro.propostas pr on pr.id = av.id_proposta inner join
					produto.produtos pd on pd.id = pr.id_produto inner join
					produto.produtos_coberturas pdc on pdc.id_cobertura = c.id and pdc.id_produto = pr.id_produto left outer join
					sinistro.tipo_liquidacao tl on tl.id = pdc.id_tipo_liquidacao

				where
					av.id_proposta = $idProposta and
					pdc.fl_cobertura_dependente = false and
					c.fl_ativo = true
				group by
					c.id,
					c.ds_nome_cobertura,
					pdc.fl_vistoria_preliminar,
					pdc.fl_vistoria_final,
					pdc.fl_exibir_regulacao_perdas,
					pdc.id_tipo_liquidacao,
					tl.fl_liquidacao_avulsa,
					tl.fl_liquidacao_manual,
					pe.id_empresa,
					av.fl_dispensa_preliminar
				order by
					c.id
			";
			$data = $this->_db->fetchAll($select);
		}
		return $data;
	}

	public function getDadosVistoriasPreliminares($idProposta, $idCobertura, $idEmpresa = null) {

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('pc'=>'sinistro.processos'), null);
		$select->join(array('vpc'=>'sinistro.vistorias_processos'), 'vpc.id_processo = pc.id', 'id_vistoria');
		$select->join(array('vc'=>'sistema.vistorias_coberturas'), 'vc.id_vistoria = vpc.id_vistoria and vc.id_cobertura = '.$idCobertura, 'id_cobertura');
		$select->join(array('v'=>'sistema.vistorias'), 'v.id = vpc.id_vistoria', "to_char(v.dt_inicio, 'DD/MM/YYYY') as dt_inicio_vistoria");
		$select->join(array('vag'=>'sistema.vistorias_agendamentos'), 'vag.id_vistoria = vpc.id_vistoria', null);
		$select->join(array('ag'=>'sistema.agendamentos'), 'ag.id = vag.id_agendamento', array(
			"to_char(ag.dt_agendamento, 'DD/MM/YYYY') as dt_agendamento",
			new Zend_Db_Expr("
	            case
	                when ag.ds_turno = 'M' then 'Manhã'
	                when ag.ds_turno = 'T' then 'Tarde'
	                when ag.ds_turno = 'N' then 'Noite'
	            end as ds_turno_agendamento
			")
		));
		$select->join(array('tv'=>'sistema.tipos_vistoria'), "tv.id = v.id_tipo and tv.ds_chave_tipos_vistoria = 'PRELIMINAR'", null);
		$select->joinLeft(array('vlp'=>'sistema.vistorias_laudos_preliminares'), 'vlp.id_vistoria = vpc.id_vistoria', 'id_laudo_preliminar');
		$select->joinLeft(array('lp'=>'sinistro.laudos_preliminares'), 'lp.id = vlp.id_laudo_preliminar', 'lp.id_status');


		$select->join(array('ve'=>'sistema.vistorias_empresas'), 've.id_vistoria = vpc.id_vistoria', null);
		$select->join(array('e'=>'sistema.empresas'), 'e.id = ve.id_empresa', 'e.ds_nome_fantasia');

		$select->group('e.ds_nome_fantasia');

		$select->where('pc.id_proposta = ?', $idProposta);

		$select->group(array(
			'vpc.id_vistoria',
			'vlp.id_laudo_preliminar',
            'lp.id_status',
            'vc.id_vistoria',
            'vc.id_cobertura',
            'ag.id',
            'ag.dt_agendamento',
            'ag.ds_turno',
            'lp.id',
            'v.dt_inicio'
		));

		$select->order('v.dt_inicio');

		return $this->getAdapter()->fetchAll($select);
	}

	public function getDadosVistoriasFinais($idProposta, $idCobertura, $idEmpresa = null) {

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('pc'=>'sinistro.processos'), null);
		$select->join(array('vpc'=>'sinistro.vistorias_processos'), 'vpc.id_processo = pc.id', 'id_vistoria');
		$select->join(array('vc'=>'sistema.vistorias_coberturas'), 'vc.id_vistoria = vpc.id_vistoria and vc.id_cobertura = '.$idCobertura, 'id_cobertura');
		$select->join(array('v'=>'sistema.vistorias'), 'v.id = vpc.id_vistoria', "to_char(v.dt_inicio, 'DD/MM/YYYY') as dt_inicio_vistoria");
		$select->join(array('vag'=>'sistema.vistorias_agendamentos'), 'vag.id_vistoria = vpc.id_vistoria', null);
		$select->join(array('ag'=>'sistema.agendamentos'), 'ag.id = vag.id_agendamento', array(
			"to_char(ag.dt_agendamento, 'DD/MM/YYYY') as dt_agendamento",
			new Zend_Db_Expr("
	            case
	                when ag.ds_turno = 'M' then 'Manhã'
	                when ag.ds_turno = 'T' then 'Tarde'
	                when ag.ds_turno = 'N' then 'Noite'
	            end as ds_turno_agendamento
			")
		));
		$select->join(array('tv'=>'sistema.tipos_vistoria'), "tv.id = v.id_tipo and tv.ds_chave_tipos_vistoria = 'FINAL'", null);
		$select->joinLeft(array('vlf'=>'sistema.vistorias_laudos_finais'), 'vlf.id_vistoria = vpc.id_vistoria', 'id_laudo_final');
		$select->joinLeft(array('lf'=>'sinistro.laudos_finais'), 'lf.id = vlf.id_laudo_final', 'lf.id_status');


		$select->join(array('ve'=>'sistema.vistorias_empresas'), 've.id_vistoria = vpc.id_vistoria', null);
		$select->join(array('e'=>'sistema.empresas'), 'e.id = ve.id_empresa', 'e.ds_nome_fantasia');

		$select->group('e.ds_nome_fantasia');

		$select->where('pc.id_proposta = ?', $idProposta);

		$select->group(array(
			'vpc.id_vistoria',
			'vlf.id_laudo_final',
            'lf.id_status',
            'vc.id_vistoria',
            'vc.id_cobertura',
            'ag.id',
            'ag.dt_agendamento',
            'ag.ds_turno',
            'lf.id',
            'v.dt_inicio'
		));

		$select->order('v.dt_inicio');

		return $this->getAdapter()->fetchAll($select);

    }

    public function getEmpresaVistoriadora($idProcesso) {
    	$select = $this->select()->setIntegrityCheck(false);
    	$select->from(array('pe'=>'sinistro.processos_empresas'), false);
    	$select->join(array('e'=>'sistema.empresas'),'e.id = pe.id_empresa', array('id','ds_nome_fantasia'));
    	$select->where('pe.id_processo = ?', $idProcesso);
    	$select->where('pe.fl_ativo = ?', true);

    	return $this->_db->fetchRow($select);
    }

    public function getEmpresaProcesso($idProposta){
    	$select = $this->select()->setIntegrityCheck(false);

    	$select->from(array('p'=>'sinistro.processos'), false);
    	$select->join(array('pe'=>'sinistro.processos_empresas'), 'pe.id_processo = p.id', false);
    	$select->join(array('e'=>'sistema.empresas'),'e.id = pe.id_empresa', array('id','ds_nome_fantasia'));
    	$select->where('p.id_proposta = ?', $idProposta);
    	$select->where('e.fl_ativo = ?', true);
    	$select->where('pe.fl_ativo = ?', true);

    	return $this->_db->fetchRow($select);
    }

    public function getProponenteProcesso($idProcesso){
    	$select = $this->select()->setIntegrityCheck(false);

    	$select->from(array('p'=>'sinistro.processos'), false);
    	$select->join(array('pr'=>'seguro.propostas'), 'pr.id = p.id_proposta', false);
    	$select->join(array('pp'=>'seguro.propostas_proponentes'),'pp.id_proposta = pr.id', array('cpf_cnpj'));
    	$select->where('p.id = ?', $idProcesso);

    	return $this->_db->fetchRow($select);
    }

    public function getProcessosCpfCnpj($idProcesso) {
        $Proponente = $this->getProponenteProcesso($idProcesso);
        //$idSafra = $this->getSafraProcesso($idProcesso);

        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('p'=>'sinistro.processos'), '*');
        $select->join(array('pp'=>'seguro.propostas_proponentes'),'pp.id_proposta = p.id_proposta',false);
        $select->join(array('pr'=>'seguro.propostas'),'pp.id_proposta = pr.id',false);
        $select->join(array('pd'=>'produto.produtos'),'pd.id = pr.id_produto',false);
        $select->where('pp.cpf_cnpj = ?', $Proponente['cpf_cnpj']);
        //$select->where('pd.id_safra = ?', $idSafra);

        return $this->fetchAll($select)->toArray();
    }

    public function getAvisosProcesso($idProposta) {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('a'=>'sinistro.avisos'), array('id as id_aviso',"to_char(a.dt_sinistro, 'DD/MM/YYYY') as dt_sinistro","to_char(a.dt_aceitacao, 'DD/MM/YYYY') as dt_aceitacao"));
        $select->join(array('st' => 'sistema.status'), "st.id = a.id_status and (st.ds_chave = 'ACEITO' or st.ds_chave = 'FECHADO')",false);
        $select->where('a.id_proposta = ?', $idProposta);
        $select->where('a.fl_ativo = ?', true);
        $select->order('a.dt_criacao desc');

        return $this->_db->fetchAll($select);
    }

    public function getIdProcessoSeguradora($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('p'=>'sinistro.processos'), 'id_processo_seguradora');
        $select->where('p.id = ?', $idProcesso);

        return $this->_db->fetchOne($select);
    }

	public function getIdProcessoByProposta($idProposta){
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('a'=>'sinistro.processos'), 'id');
        $select->where('a.id_proposta = ?', $idProposta);

        return $this->_db->fetchOne($select);
	}

    public function getProcessoByAviso($idAviso) {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('sp'=>'sinistro.processos'), array('id as id_processo'));
		$select->join(array('pr' => 'seguro.propostas'), "pr.id = sp.id_proposta", false);
        $select->join(array('av' => 'sinistro.avisos'), "av.id_proposta = pr.id", false);
        $select->where('av.id = ?', $idAviso);

        return $this->_db->fetchOne($select);
    }

    public function getChaveStatus($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('sp'=>'sinistro.processos'), null);
        $select->join(array('st' => 'sistema.status'), "st.id = sp.id_status", 'st.ds_chave');
        $select->where('sp.id = ?', $idProcesso);

        return $this->_db->fetchOne($select);
    }

    public function getSafraProcesso($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('sp'=>'sinistro.processos'), null);
        $select->join(array('pr' => 'seguro.propostas'), "pr.id = sp.id_proposta", null);
        $select->join(array('pd' => 'produto.produtos'), "pd.id = pr.id_produto", "id_safra");
        $select->where('sp.id = ?', $idProcesso);

        return $this->_db->fetchOne($select);
    }

    public function getDataRevisaoArquivos($idProcesso) {
        $select = $this->select()->setIntegrityCheck(false);

        $select->from(array('sp'=>'sinistro.processos'), 'dt_revisao_arquivos');
        $select->where('sp.id = ?', $idProcesso);

        return $this->_db->fetchOne($select);
    }

    public function getProcessoAtivoProposta($idProposta) {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array('p'=>'sinistro.processos'), 'count(id) as count');
        $select->where('p.id_proposta = ?', $idProposta);
        $select->where('p.id_status in (31,32)');

        return $this->_db->fetchOne($select);
    }


}
