<?php

abstract class Agro_Db_Table_Propostas extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Agro_Db_Table_Row_Proposta';
	protected $_schema = 'seguro';
	protected $_name = 'propostas';
	protected $_primary = 'id';

	/**
	 * Monta o SQL que sera usado na listagem de propostas
	 *
	 * @param array $where
	 */
	public function getData(array $where) {
		$Select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$Select->from(array('spe' => 'seguro.propostas_endosso'), false);
		$Select->join(array('spr' => 'seguro.propostas'), 'spr.id = spe.id_proposta', array('id', 'id_endosso', 'id_status', 'dt_vigencia_inicio', 'id_usuario_criacao', 'id_produto', 'ds_status_seguradora', 'nr_digito_verificador', 'nr_apolice', 'ds_identificador_seguradora', 'id_versao'));
		$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'));
		$Select->join(array('sem' => 'sistema.empresas'), 'sem.id = ppr.id_seguradora', false);
		$Select->join(array('ppc' => 'produto.produtos_coberturas'), 'ppr.id = ppc.id_produto', false);
		$Select->join(array('pcb' => 'produto.coberturas'), 'pcb.id = ppc.id_cobertura', false);
		$Select->join(array('ppg' => 'produto.produtos_geral'), 'ppg.id = ppr.id_produto_geral', false);
		$Select->join(array('prs' => 'produto.ramos'), 'prs.id = ppg.id_ramo', false);
		$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('sus' => 'sistema.usuarios'), 'sus.id = spr.id_usuario_criacao', 'ds_nome_usuario');
		$Select->joinLeft(array('spb' => 'seguro.proposta_boletos'), 'spr.id = spb.id_proposta AND spb.nr_parcela=1 and spb.id_versao = spr.id_versao and spb.fl_ativo = true', array('ds_identificador'));
		$Select->joinLeft(array('spv' => 'seguro.propostas_versoes'), 'spr.id_versao = spv.id', array('ds_nome_arquivo as digitalizacao'));
		$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('ppc.fl_cobertura_principal = true');
		$this->getWhere($Select, $where);

		if ($this->_order) {
			$Select->order($this->_order);
		}

		return $Select;
	}

	/**
	 * Gera uma versao da proposta
	 *
	 * @param integer $idProposta
	 * @return boolean
	 */
	public function gera_versao($idProposta) {
		
		// Insere a Versão
		$this->getDefaultAdapter()->insert('seguro.propostas_versoes', array('id_usuario_criacao' => Zend_Auth::getInstance()->getIdentity()->id, 'dt_criacao' => 'now()', 'id_proposta' => $idProposta));

		// Busca a ultima versao
		$versao = $this->getDefaultAdapter()->fetchOne("select max(id) from seguro.propostas_versoes where id_proposta = $idProposta");

		// Atualiza a proposta
		if ($versao) {
			$this->getDefaultAdapter()->update('seguro.propostas', array('id_usuario_alteracao' => $this->_user->id, 'dt_alteracao' => 'now()', 'id_versao' => $versao), "id = $idProposta");
			return $versao;
		}

		return false;
	}

	/**
	 * Verifica o limite da LMGA
	 *
	 * @param integer $idProposta
	 * @param float $value
	 * @return boolean
	 */
	public function _limiteLmga($idProposta, $value) {
		$total = $this->getDefaultAdapter()->fetchOne("select sum(vl_limite_beneficio) from seguro.propostas_beneficiarios where id_proposta = $idProposta");
		$lmga = $this->getDefaultAdapter()->fetchOne("select vl_lmga from sumario.itens_segurados where id_proposta = $idProposta");

		if ($lmga >= ($total+$value)) {
			return true;
		} else {
			return false;
		}
	}
}