<?php
class Atendimento_Model_PropostaDocumentoFisico extends Agro_Db_Table_Propostas {

	//protected $_rowClass = 'Atendimento_Model_Row_Proposta';
	public $_order = 'id_proposta_mae';

	/**
	 * Monta o SQL que sera usado na listagem de propostas
	 *
	 * @param array $where
	 */
	public function getData(array $where) {
		$subselect = $this->select()->setIntegrityCheck(false);
		$subselect->from('seguro.propostas', "id as id_proposta, to_char(dt_transmissao, 'yyyy-mm-dd') as dt_transmissao");
	
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('spe' => 'seguro.propostas_endosso'), 'spe.fl_proposta_vigente');
		$Select->join(array('spr' => 'seguro.propostas'), 'spr.id = spe.id_proposta', array('id', 'id_endosso'
				, 'id_status'
				, 'spr.dt_vigencia_inicio'
				, 'id_usuario_criacao'
				, 'id_produto'
				, 'ds_status_seguradora'
				, 'nr_digito_verificador'
				, 'nr_apolice'
				, 'ds_identificador_seguradora'
				, 'id_versao'
				, 'seguro.nr_endosso(spr.id, spr.id_endosso) as nr_endosso'
				, 'id_proposta_mae'
				, 'id_proposta_endossada'
				, 'seguro.id_proposta_mae_completo(spr.id) as id_proposta_mae_completo'));
		$Select->joinLeft(array('sps' => 'seguro.propostas_status'), 'sps.id_status = spr.id_status and sps.id_proposta = spr.id and sps.fl_ativo = true', false);
		$Select->join(array('spt' => 'seguro.propostas_proponentes'), 'spr.id = spt.id_proposta', array('ds_nome_proponente', 'cpf_cnpj'));
		$Select->join(array('spc' => 'seguro.propostas_corretores'), 'spr.id = spc.id_proposta', false);
		$Select->join(array('ppr' => 'produto.produtos'), 'ppr.id = spr.id_produto', array('ds_nome_abreviado', 'ds_nome_produto'));
		$Select->join(array('sf' =>  'produto.safras'), 'sf.id = ppr.id_safra', array('ds_nome_safra'));
		$Select->join(array('spd' => 'seguro.propostas_propriedades'), 'spr.id = spd.id_proposta', array('id_municipio'));
		$Select->join(array('smu' => 'sistema.municipios'), 'smu.id = spd.id_municipio', 'ds_nome_municipio');
		$Select->join(array('suf' => 'sistema.estados'), 'suf.id = smu.id_estado', 'ds_sigla');
		$Select->join(array('scr' => 'sistema.corretores'), 'spc.id_usuario = scr.id_usuario', array('ds_nome_fantasia'));
		$Select->join(array('sst' => 'sistema.status'), 'sst.id = spr.id_status', array('ds_cor', 'ds_chave', 'ds_status', 'cd_status'));
		$Select->join(array('std' => 'seguro.propostas_status_doc_fisico'), 'std.id_proposta = spr.id and std.fl_ativo=true', false);
		$Select->join(array('sst2' => 'sistema.status'), 'sst2.id = std.id_status', array('ds_status as ds_status_doc_fisico', 'cd_status as cd_status_doc_fisico', 'ds_cor as ds_cor_doc_fisico',));
		$Select->join(array('sus' => 'sistema.usuarios'), 'sus.id = spr.id_usuario_criacao', 'ds_nome_usuario');
		$Select->join(array('lpt' => $subselect), 'lpt.id_proposta = spr.id_proposta_mae', 'dt_transmissao');
		$Select->joinLeft(array('spb' => 'seguro.proposta_boletos'), 'spr.id = spb.id_proposta AND spb.nr_parcela=1 and spb.fl_ativo = true and spb.id_versao = spr.id_versao', array('ds_identificador'));
		$Select->joinLeft(array('spv' => 'seguro.propostas_versoes'), 'spr.id_versao = spv.id', array('fl_pendente_transmissao', 'ds_nome_arquivo as digitalizacao'));
		$Select->joinLeft(array('speo' => 'seguro.propostas_endosso_opcoes'), 'speo.id_proposta = spr.id',false);
		$Select->joinLeft(array('ste' => 'seguro.tipo_endosso'), 'speo.id_endosso_opcao = ste.id', array('ds_tipo_endosso','ds_tipo'));
		$Select->where('sst.ds_chave <> ?', 'PROPOSTA_INCOMPLETA');
		$Select->where('sst.ds_chave <> ?', 'ENDOSSO_INCOMPLETO');
		$Select->where('sst.ds_chave <> ?', Seguro_Model_Propostas::DS_CHAVE_SOLICITACAO_CANCELADA);
		//$Select->where('sst.ds_chave <> ?', 'ORCAMENTO_ENDOSSO');
	
		if(Zend_Auth::getInstance()->getIdentity()->ds_chave == 'SEGURADORA_ESSOR'){
			$Select->where('ppr.id_safra >= 16');
		}
		if(Zend_Auth::getInstance()->getIdentity()->ds_chave == 'SEGURADORA'){
			$Select->where('ppr.id_safra < 16');
		}
	
		$this->getWhere($Select, $where);
	
		if ($this->_order) {
			$Select->order($this->_order);
		} else {
			$Select->order('spr.id');
		}
	
		return $Select;
	}
	
	/**
	 * Altera o status do doc fisico da proposta
	 * @param unknown_type $data
	 * @param unknown_type $chave
	 */
	public function changeStatus($data, $chave) {
		try {
			$this->_db->update('seguro.propostas_status_doc_fisico', array('fl_ativo' => 0, 'id_usuario_alteracao' => $this->_user->id), "id_proposta = {$data['id_proposta']}");
			$this->_db->insert('seguro.propostas_status_doc_fisico', array(
					'id_status' => $this->getIdStatus($chave),
					'id_proposta' => $data['id_proposta'],
					'ds_observacao' => $data['ds_documento_fisico_baixado'],
					'id_usuario_criacao' => $this->_user->id
			));
			
			return $this->getIdStatus($chave);
			
		} catch (Exception $e) {
			echo  $e->getMessage();
			return $e->getMessage();
		}
	}
	
	public function getStatusDocFisico($id_proposta, $flVigente=true) {
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'seguro.propostas'), null);
		$select->join(array('pf' => 'seguro.propostas_status_doc_fisico'), 'pf.id_proposta = p.id', array('id_status', 'ds_observacao'));
		$select->join(array('st' => 'sistema.status'), 'st.id = pf.id_status', array('ds_status'));
		$select->where("p.id = $id_proposta");
		if($flVigente == true){
			$select->where("pf.fl_ativo = true");
		}
		
		$Rs = $this->_db->fetchAll($select);
		
		return $Rs;
	}
	
	public function getHistoricoStatus($id_proposta) {

		$sql = "SELECT
					ps.*, s.ds_status, u.ds_nome_usuario
				FROM
					seguro.propostas_status_doc_fisico AS ps 
					INNER JOIN sistema.status AS s ON  ps.id_status = s.id
					INNER JOIN sistema.usuarios AS u ON  ps.id_usuario_criacao = u.id
				WHERE
					(ps.id_proposta = $id_proposta) 
					".$where."
				ORDER BY 
					ps.dt_criacao desc, ps.id asc";
	
		$Rs = $this->_db->fetchAll($sql);
		$ret = array();
		$i = 0;
		foreach($Rs as $status) {
			$ret[$i]['dt_criacao']      = $status['dt_criacao'];
			$ret[$i]['ds_status']       = $status['ds_status'];
			$ret[$i]['ds_observacao']   = $status['ds_observacao'];
			$ret[$i]['ds_nome_usuario'] = $status['ds_nome_usuario'];
	
			$sql = "SELECT
						p.*, a.ds_nome_pendencia
					FROM
						seguro.propostas_pendencias_documento_fisico AS p 
						INNER JOIN atendimento.pendencias AS a ON p.id_pendencia = a.id
					WHERE
						p.id_proposta_status_doc_fisico = {$status['id']}";
			$Pendencias = $this->_db->fetchAll($sql);
			$arr = array();
			foreach($Pendencias as $pend) {
				$arr[] = $pend['ds_nome_pendencia'];
			}
			$ret[$i]['pendencias'] = $arr;
			
			$i++;
		}
		return $ret;
	}

}
