<?php
require_once 'comercializacao/controllers/ComercializacaoController.php';

class Comercializacao_Model_Comercializacoes extends Agro_Db_Table_Abstract {
    const TIPO_ESTADO = 'E';
    const TIPO_MUNICIPIO = 'M';
    const TIPO_USUARIO = 'U';
    const TIPO_PROPONENTE = 'P';
    const TIPO_ORCAMENTO = 'O';
	const TIPO_CAR = 'C';

	protected $_schema = 'comercializacao';
	protected $_name = 'comercializacoes';
	protected $_primary = 'id';
	public $_order = 'ds_nome_comercializacao';
	public $tp_comercializacao;
	public $_columnExcel = array(
		'id' => 'Cód',
		'ds_nome_comercializacao' => 'Nome',
		'ds_nome_safra' => 'Safra',
		'ds_nome_produto' => 'Produto',
		'dt_comercializacao_inicio' => 'Início Comercialização',
		'dt_comercializacao_fim' => 'Fim Comercialização',
		'dt_cobertura_inicio' => 'Inicio Vigência',
		'dt_cobertura_fim' => 'Fim Vigência',
	);

	public function save($values){
		$Row = $this->getRow($values['id']);

		if (empty($Row->id_produto) && empty($values['id_produto'])) {
		    throw new Exception('Selecione um produto.');
        }

		$Row->id_produto = $values['id_produto'];
		$Row->ds_nome_comercializacao = $values['ds_nome_comercializacao'];
		$Row->dt_comercializacao_inicio = Agro_Util::formatDate($values['dt_comercializacao_inicio'], Zend_Date::W3C);
		$Row->dt_comercializacao_fim = Agro_Util::formatDate($values['dt_comercializacao_fim'], Zend_Date::W3C);
		$Row->dt_cobertura_inicio = Agro_Util::formatDate($values['dt_cobertura_inicio'], Zend_Date::W3C);
		$Row->dt_cobertura_fim = Agro_Util::formatDate($values['dt_cobertura_fim'], Zend_Date::W3C);
		$Row->tp_comercializacao = !empty($values['tp_comercializacao']) ? $values['tp_comercializacao'] : $this->tp_comercializacao;
		$Row->fl_ativo = ($values['fl_ativo'] ? 1 : 0);

		return $Row->save();
	}

	public function getData($where = null) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('c' => 'comercializacao.comercializacoes'));
		$Select->join(array('p' => 'produto.produtos'), 'c.id_produto = p.id', array('ds_nome_produto'));
		$Select->join(array('s' => 'produto.safras'), 'p.id_safra = s.id', array('ds_nome_safra'));

    	$hasEstado = false;
    	$hasMunicipio = false;
    	$hasCpfCnpj = false;

    	if (is_array($where)) {
        	foreach ($where as $clause) {
            	$field = $clause['field'];

            	if (in_array($field, ['id_estado', 'm.id_estado'])) {
                	$hasEstado = true;
            	}

            	if (in_array($field, ['id_municipio', 'm.id_municipio'])) {
                	$hasMunicipio = true;
            	}

            	if ($field === 'cpf_cnpj') {
                	$Select->joinLeft(['cp' => 'comercializacao.comercializacoes_proponentes'], 'c.id = cp.id_comercializacao', []);
            		$Select->joinLeft(['pr' => 'seguro.proponentes'], 'pr.id = cp.id_proponente', ['cpf_cnpj']);
            	}

            	if ($field === 'id_proposta') {
                	$Select->joinLeft(['o' => 'comercializacao.comercializacoes_orcamentos'], 'c.id = o.id_comercializacao', ['id_proposta']);
            	}
        }

        if ($hasEstado || $hasMunicipio) {
            $Select->joinLeft(['cm' => 'comercializacao.comercializacoes_municipios'], 'c.id = cm.id_comercializacao', []);
            $Select->joinLeft(['m' => 'sistema.municipios'], 'm.id = cm.id_municipio', ['id_estado']);
        }

    }

    $this->getWhere($Select, $where);

    return $Select;
}


	public function getProduto($id){
		$select = $this->select();
		$select->from(array('c'=>'comercializacao.comercializacoes'),'');
		$select->join(array('p'=>'produto.produtos'),'c.id_produto = p.id',array('id','ds_nome_produto'));
		$select->where('c.id = ' . $id);

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

	public function getIdProduto($id) {
		$Comercializacao = parent::find($id)->current();

		if ($Comercializacao) {
			return $Comercializacao->id_produto;
		} else {
			return;
		}
	}

	public function getMunicipios($id, $tipo='') {
		if ($id) {
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from('comercializacao.comercializacoes_municipios');
			$select->where("id_comercializacao=$id");
			if($tipo == 'municipio') {
				$select->where('id_comercializacao NOT IN (select id_comercializacao from comercializacao.comercializacoes_usuarios)');
			}

			$Rs = $this->fetchAll($select);
			$municipios = array();

			if ($Rs) {
				foreach ($Rs as $item) {
					$municipios[] = $item['id_municipio'];
				}
			}

			return $municipios;
		}
	}

	public function getEstadosComercializados($id) {
		if ($id) {
			$select = $this->select()->distinct(true);
			$select->setIntegrityCheck(false);
			$select->from(array('m' => 'sistema.municipios'), array('id_estado'));
			$select->join(array('cm' => 'comercializacao.comercializacoes_municipios'), 'cm.id_municipio = m.id', array());

			$select->where("cm.id_comercializacao=$id");

			$Rs = $this->fetchAll($select);

			$estados = array();

			if ($Rs) {
				foreach ($Rs as $item) {
					$estados[] = $item['id_estado'];
				}
			}

			return $estados;
		}
	}

	public function getEstados($id) {
		if ($id) {
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from('comercializacao.comercializacoes_estados');
			$select->where("id_comercializacao=$id");

			$Rs = $this->fetchAll($select);
			$estados = array();

			if ($Rs) {
				foreach ($Rs as $item) {
					$estados[] = $item['id_estado'];
				}
			}

			return $estados;
		}
	}

	public function getUsuarios($id){
		if ($id) {
			$select = $this->select();
			$select->setIntegrityCheck(false);
			$select->from('comercializacao.comercializacoes_usuarios');
			$select->where("id_comercializacao=$id");

			$Rs = $this->fetchAll($select);
			$usuarios = array();

			if ($Rs) {
				foreach ($Rs as $item) {
					$usuarios[] = $item['id_usuario'];
				}
			}

			return $usuarios;
		}
	}

	public function setMunicipios($municipios, $id) {
		if ($id) {
			$this->_db->query("delete from comercializacao.comercializacoes_municipios where id_comercializacao = $id");

			if (is_array($municipios)) {
				foreach ($municipios as $municipio) {
					$ins = array(
						'id_comercializacao' => $id,
						'id_municipio' => $municipio
					);

					$ComercializacaoMunicipio = new Comercializacao_Model_ComercializacoesMunicipios();
					$ComercializacaoMunicipio->insert($ins);
				}
			}
		}
	}

	public function setEstados($estados, $id) {
		if ($id) {
			$this->_db->query("delete from comercializacao.comercializacoes_estados where id_comercializacao = $id");

			if (is_array($estados)) {
				foreach ($estados as $estado) {
					$ins = array(
						'id_comercializacao' => $id,
						'id_estado' => $estado
					);

					$ComercializacaoEstado = new Comercializacao_Model_ComercializacoesEstados();
					$ComercializacaoEstado->insert($ins);
				}
			}
		}
	}

	public function setUsuarios($usuarios, $id) {
		if ($id) {
			$this->_db->query("delete from comercializacao.comercializacoes_usuarios where id_comercializacao = $id");

			if (is_array($usuarios)) {
				foreach ($usuarios as $usuario) {
					$ins = array(
						'id_comercializacao' => $id,
						'id_usuario' => $usuario
					);

					$ComercializacaoUsuario = new Comercializacao_Model_ComercializacoesUsuarios();
					$ComercializacaoUsuario->insert($ins);
				}
			}
		}
	}

	/**
	 * Gera array de corretores e prepostos
	 * para relação com comercializações
	 *
	 * @return array
	 */
	public function getCheckUsuarios(){
		// Efetua busca de corretores
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('co'=>'sistema.corretores'),array('id','id_usuario','ds_nome_corretor'));
		$select->where('co.fl_ativo = true');
		$select->order('co.ds_nome_corretor');
		$corretores = $this->fetchAll($select);

		// Efetua busca de prepostos
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('pre'=>'sistema.prepostos'),array('id_corretor','id_usuario','ds_nome_preposto'));
		$select->where('pre.fl_ativo = true');
		$select->order('pre.ds_nome_preposto');
		$prepostos = $this->fetchAll($select);

		// Insere corretores no array
		$usuarios = array();
		foreach($corretores as $corretor){
			$usuarios[$corretor['id']]['ds_nome_corretor'] = $corretor['ds_nome_corretor'];
			$usuarios[$corretor['id']]['id_usuario'] = $corretor['id_usuario'];
		}

		//Insere prepostos no array de seus respectivos corretores
		foreach($prepostos as $preposto){
			$index = isset($usuarios[$preposto['id_corretor']]['prepostos']) ? count($usuarios[$preposto['id_corretor']]['prepostos']) : 0;
			$usuarios[$preposto['id_corretor']]['prepostos'][$index]['id_usuario'] = $preposto['id_usuario'];
			$usuarios[$preposto['id_corretor']]['prepostos'][$index]['ds_nome_preposto'] = $preposto['ds_nome_preposto'];
		}

		return $usuarios;
	}

	public function getComercializacao($id) {
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('cc' => 'comercializacao.comercializacoes'), 'cc.id_produto = p.id', false);
		$select->join(array('pc' => 'produto.produtos_coberturas'), 'p.id = pc.id_produto and pc.fl_cobertura_principal = true', false);
		$select->join(array('c' => 'produto.coberturas'), 'pc.id_cobertura = c.id', 'ds_nome_cobertura');
		$select->join(array('e' => 'sistema.empresas'), 'p.id_seguradora= e.id', array('ds_nome_fantasia', 'cpf_cnpj'));
		$select->where('p.id = ?', $id);

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

	public function getComercializacoesEstadoXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('cc' => 'comercializacao.comercializacoes'), 'cc.id_produto = p.id', '*');
		$select->joinLeft(array('ce' => 'comercializacao.comercializacoes_estados'), 'cc.id = ce.id_comercializacao', false);
		$select->joinLeft(array('e' => 'sistema.estados'), 'ce.id_estado = e.id', array('ds_sigla'));

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('ce.id_estado = ?', $dados['id_estado_search']);
		}


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

	public function getIdsComercializacaoParaAjuste(
		string $tipoComercializacao,
		int $idSafra,
		array $idsCultura,
		?array $idsProduto
	) {
		$query = $this
			->select()
			->setIntegrityCheck(false)
			->from(array('c' => 'comercializacao.comercializacoes'), 'id')
			->join(array('p' => 'produto.produtos'), 'p.id = c.id_produto', null)
			->join(array('pg' => 'produto.produtos_geral'), 'pg.id = p.id_produto_geral', null)
			->where('c.tp_comercializacao = ?', $tipoComercializacao)
			->where('c.fl_ativo IS TRUE')
			->where('p.id_safra = ?', $idSafra)
			->where('pg.id_cultura IN ('. implode(',', $idsCultura) .')');
		
		if (!empty($idsProduto)) {
			$query->where('p.id IN ('. implode(',', $idsProduto) .')');
		}
		
		return $this->fetchAll($query);
	}

	public function getComercializacoesMunicipiosXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('cc' => 'comercializacao.comercializacoes'), 'cc.id_produto = p.id', '*');
		$select->join(array('ce' => 'comercializacao.comercializacoes_municipios'), 'cc.id = ce.id_comercializacao', false);
		$select->join(array('m' => 'sistema.municipios'), 'ce.id_municipio = m.id', array('ds_nome_municipio'));
		$select->join(array('e' => 'sistema.estados'), 'm.id_estado = e.id', array('ds_sigla'));

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('e.id = ?', $dados['id_estado_search']);
		}

		if($dados['id_municipio_search']) {
			$select->where('m.id = ?', $dados['id_municipio_search']);
		}

		$select->order(array('ds_nome_produto', 'ds_sigla', 'dt_comercializacao_inicio', 'ds_nome_municipio'));

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

	public function getComercializacoesUsuarioXls($dados) {

		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('cc' => 'comercializacao.comercializacoes'), 'cc.id_produto = p.id', '*');
		$select->join(array('cu' => 'comercializacao.comercializacoes_usuarios'), 'cc.id= cu.id_comercializacao', '*');
		$select->join(array('corr' => 'sistema.corretores'), 'cu.id_usuario = corr.id_usuario', array('ds_nome_fantasia'));
		$select->joinLeft(array('prep' => 'sistema.prepostos'), 'corr.id = prep.id_corretor', array('ds_nome_preposto'));
		$select->joinLeft(array('ce' => 'comercializacao.comercializacoes_municipios'), 'cc.id = ce.id_comercializacao', false);
		$select->joinLeft(array('m' => 'sistema.municipios'), 'ce.id_municipio = m.id', array('ds_nome_municipio'));
		$select->joinLeft(array('e' => 'sistema.estados'), 'm.id_estado = e.id', array('ds_sigla'));

		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}

		if($dados['id_estado_search']) {
			$select->where('e.id = ?', $dados['id_estado_search']);
		}

		if($dados['id_municipio_search']) {
			$select->where('m.id = ?', $dados['id_municipio_search']);
		}

		if($dados['id_preposto_search']) {
			$select->where('prep.id_usuario = ?', $dados['id_preposto_search']);
		} else {
			if($dados['id_corretor_search']) {
				$select->where('cu.id_usuario = ?', $dados['id_corretor_search']);
			}
		}

		$select->order(array('ds_nome_fantasia', 'ds_nome_preposto', 'ds_nome_produto', 'ds_sigla', 'dt_comercializacao_inicio', 'ds_nome_municipio'));

		return $this->fetchAll($select);
	}
	
	public function getComercializacoesProponenteXls($dados) {
	
		$select = $this->select();
		$select->setIntegrityCheck(false);
		$select->from(array('p' => 'produto.produtos'));
		$select->join(array('cc' => 'comercializacao.comercializacoes'), 'cc.id_produto = p.id', '*');
		$select->join(array('cu' => 'comercializacao.comercializacoes_proponentes'), 'cc.id= cu.id_comercializacao', '*');
		$select->join(array('sp' => 'seguro.proponentes'), 'sp.id = cu.id_proponente', array('cpf_cnpj', 'ds_nome_proponente'));
		$select->joinLeft(array('ce' => 'comercializacao.comercializacoes_municipios'), 'cc.id = ce.id_comercializacao', false);
		$select->joinLeft(array('m' => 'sistema.municipios'), 'ce.id_municipio = m.id', array('ds_nome_municipio'));
		$select->joinLeft(array('e' => 'sistema.estados'), 'm.id_estado = e.id', array('ds_sigla'));
	
		if($dados['id_produto_search']) {
			$select->where('p.id = ?', $dados['id_produto_search']);
		}
	
		if($dados['id_estado_search']) {
			$select->where('e.id = ?', $dados['id_estado_search']);
		}
	
		if($dados['id_municipio_search']) {
			$select->where('m.id = ?', $dados['id_municipio_search']);
		}
		
		if($dados['cpf_cnpj']) {
			$select->where('p.cpf_cnpj = ?', $dados['cpf_cnpj']);
		}		
	
		$select->order(array('cpf_cnpj', 'ds_nome_proponente', 'ds_nome_produto', 'ds_sigla', 'dt_comercializacao_inicio', 'ds_nome_municipio'));
	
		return $this->fetchAll($select);
	}	


	/**
	 * Valida se o usuário se encaixa em alguma regra de comercialização cadastrada (Produto > Comercializações > Usuário)
	 *
	 * @param int $idProduto
	 * @param int $idUsuarioProposta
	 * @param int $idMunicipio
	 * @param string|null $cpfCnpj
	 * @return bool
	 */
	private function validarComercializacaoUsuario(int $idProduto, int $idUsuarioProposta, int $idMunicipio, ?string $cpfCnpj = ''): bool
	{
		$subQueryMunicipios = $this->select()->setIntegrityCheck(false);
		$subQueryMunicipios->from(['cp' => 'comercializacao.comercializacoes_municipios'], ['id_comercializacao', 'ARRAY_TO_JSON(ARRAY_AGG(id_municipio)) as municipios']);
		$subQueryMunicipios->group('cp.id_comercializacao');

		$subQueryProponentes = $this->select()->setIntegrityCheck(false);
		$subQueryProponentes->from(['cp' => 'comercializacao.comercializacoes_proponentes'], ['id_comercializacao']);
		$subQueryProponentes->join(['sp' => 'seguro.proponentes'], 'sp.id = cp.id_proponente', ['ARRAY_TO_JSON(ARRAY_AGG(cpf_cnpj)) as proponentes']);
		$subQueryProponentes->group('cp.id_comercializacao');

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(['c' => 'comercializacao.comercializacoes'], ['id as id_comercializacao', 'ds_nome_comercializacao']);
		$select->join(['ccu' => 'comercializacao.comercializacoes_usuarios'], 'ccu.id_comercializacao = c.id', ['id_usuario']);
		$select->joinLeft(['ccm' => $subQueryMunicipios], 'ccm.id_comercializacao = c.id', ['municipios']);
		$select->joinLeft(['ccp' => $subQueryProponentes], 'ccp.id_comercializacao = c.id', ['proponentes']);
		$select->where("ccu.id_usuario = ?", $idUsuarioProposta);
		$select->where("c.id_produto = ?", $idProduto);
		$select->where("c.tp_comercializacao = ?", self::TIPO_USUARIO);
		$select->where("c.fl_ativo = true");
		$select->where("(to_char(now(), 'YYYY-MM-DD') >= to_char(c.dt_comercializacao_inicio, 'YYYY-MM-DD') AND
							to_char(now(), 'YYYY-MM-DD') <= to_char(c.dt_comercializacao_fim, 'YYYY-MM-DD'))");

		$rs = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($select);

		foreach ($rs as $row) {

			$rowMunicipios = json_decode($row['municipios'], true);
			$rowProponentes = json_decode($row['proponentes'], true);

			$municipioValido = true;
			if (!empty($rowMunicipios) && !in_array($idMunicipio, $rowMunicipios)) {
				$municipioValido = false;
			}

			$proponenteValido = true;
			
			if (!empty($rowProponentes) && !in_array($cpfCnpj, $rowProponentes)) {
				$proponenteValido = false;
			}

			if ($municipioValido && $proponenteValido) {
				return true;
			}
		}
		return false;
	}

	/**
	 * Valida se o produto possui comercialização para o município
	 *
	 * @param int $idProduto
	 * @param int $idMunicipio
	 * @return bool
	 */
	private function validarComercializacaoMunicipio(int $idProduto, int $idMunicipio): bool
	{
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(['c' => 'comercializacao.comercializacoes'], 'id');
		$select->join(['m' => 'comercializacao.comercializacoes_municipios'], 'c.id = m.id_comercializacao', false);
		$select->where('c.id_produto = ?', $idProduto);
		$select->where('m.id_municipio = ?', $idMunicipio);
		$select->where('c.tp_comercializacao = ?', self::TIPO_MUNICIPIO);
		$select->where("c.fl_ativo = true");
		$select->where("(to_char(now(), 'YYYY-MM-DD') >= to_char(c.dt_comercializacao_inicio, 'YYYY-MM-DD') AND
					   	 to_char(now(), 'YYYY-MM-DD') <= to_char(c.dt_comercializacao_fim, 'YYYY-MM-DD'))");

		$countMunicipio = $this->fetchAll($select)->count();

		if ($countMunicipio) {
			return true;
		}

		return false;
	}

	/**
	 * Valida se o produto possui comercialização para o estado
	 *
	 * @param int $idProduto
	 * @param int $idEstado
	 * @return bool
	 */
	private function validarComercializacaoEstado(int $idProduto, int $idEstado): bool
	{
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(['c' => 'comercializacao.comercializacoes'], 'id');
		$select->join(['e' => 'comercializacao.comercializacoes_estados'], 'c.id = e.id_comercializacao', false);
		$select->where('c.id_produto = ?', $idProduto);
		$select->where('e.id_estado = ?', $idEstado);
		$select->where('c.tp_comercializacao = ?', self::TIPO_ESTADO);
		$select->where("c.fl_ativo = true");
		$select->where("(to_char(now(), 'YYYY-MM-DD') >= to_char(c.dt_comercializacao_inicio, 'YYYY-MM-DD') AND
					   	 to_char(now(), 'YYYY-MM-DD') <= to_char(c.dt_comercializacao_fim, 'YYYY-MM-DD'))");

		$countEstado = $this->fetchAll($select)->count();
		
		if ($countEstado) {
			return true;
		}
		
		return false;
	}

	/**
	 * Valida se permite a comercialização do produto.
	 * 	- Primeiro verifica se há configuração de comercialização para o usuário que criou a proposta (Produto > Comercializações > Usuário);
	 * 	- Caso não haja, verifica se há comercialização do produto para o município (Produto > Comercializações > Município);
	 * 	- Caso não haja, verifica se há comercialização do produto para o estado (Produto > Comercializações > Estado);
	 *
	 * @param int $idProduto
	 * @param int $idEstado
	 * @param int $idMunicipio
	 * @param string|null $cpfCnpj
	 * @param int|null $idUsuarioProposta
	 * @return bool
	 */
	public function checkComercializacao(int $idProduto, int $idEstado, int $idMunicipio, ?string $cpfCnpj = '', ?int $idUsuarioProposta = null): bool
	{
		$comercializacaoValida = false;
		
		if (!empty($idUsuarioProposta)) {
			$comercializacaoValida = $this->validarComercializacaoUsuario($idProduto, $idUsuarioProposta, $idMunicipio, $cpfCnpj);
		}

		if (!$comercializacaoValida) {
			$comercializacaoValida = $this->validarComercializacaoMunicipio($idProduto, $idMunicipio);
		}

		if (!$comercializacaoValida) {
			$comercializacaoValida = $this->validarComercializacaoEstado($idProduto, $idEstado);
		}

		return $comercializacaoValida;
	}

	public function beforeDelete($id) {
		try {
			$Estados = new Comercializacao_Model_ComercializacoesEstados();
			$Estados->delete($id, 'id_comercializacao');
		} catch (Exception $e) {}

		try {
			$Municipios = new Comercializacao_Model_ComercializacoesMunicipios();
			$Municipios->delete($id, 'id_comercializacao');
		} catch (Exception $e) {}

		try {
			$Usuarios = new Comercializacao_Model_ComercializacoesUsuarios();
			$Usuarios->delete($id, 'id_comercializacao');
		} catch (Exception $e) {}

        try {
            $orcamentos = new Comercializacao_Model_ComercializacoesOrcamentos();
            $orcamentos->delete($id, 'id_comercializacao');
        } catch (Exception $e) {}
	}

    public function grupoProponenteUsuario($parametros)
    {
        if ($parametros['cpf_cnpj'] && $parametros['id_municipio'] && $parametros['id_usuario']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('cp' => 'comercializacao.comercializacoes_proponentes'), 'c.id = cp.id_comercializacao', false);
            $select->join(array('cm' => 'comercializacao.comercializacoes_municipios'), 'c.id = cm.id_comercializacao', false);
            $select->join(array('cu' => 'comercializacao.comercializacoes_usuarios'), 'c.id = cu.id_comercializacao', false);
            $select->join(array('p' => 'seguro.proponentes'), 'cp.id_proponente = p.id', false);
            $select->where("cm.id_municipio = ?", $parametros['id_municipio']);
            $select->where("p.cpf_cnpj = ?", $parametros['cpf_cnpj']);
            $select->where("cu.id_usuario = ?", $parametros['id_usuario']);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_PROPONENTE . "'");
            $select->where("c.fl_ativo = true");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }

    public function grupoProponente($parametros)
    {
        if ($parametros['cpf_cnpj'] && $parametros['id_municipio']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('cp' => 'comercializacao.comercializacoes_proponentes'), 'c.id = cp.id_comercializacao', false);
            $select->join(array('cm' => 'comercializacao.comercializacoes_municipios'), 'c.id = cm.id_comercializacao', false);
            $select->join(array('p' => 'seguro.proponentes'), 'cp.id_proponente = p.id', false);
            $select->where("cm.id_municipio = ?", $parametros['id_municipio']);
            $select->where("p.cpf_cnpj = ?", $parametros['cpf_cnpj']);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_PROPONENTE . "'");
            $select->where("c.fl_ativo = true");
            $select->where("c.id not in (select id_comercializacao from comercializacao.comercializacoes_usuarios)");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }

    public function grupoCorretorPreposto($parametros)
    {
        if ($parametros['id_usuario'] && $parametros['id_municipio']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('cu' => 'comercializacao.comercializacoes_usuarios'), 'c.id = cu.id_comercializacao', false);
            $select->join(array('cm' => 'comercializacao.comercializacoes_municipios'), 'c.id = cm.id_comercializacao', false);
            $select->where("cm.id_municipio = ?", $parametros['id_municipio']);
            $select->where("cu.id_usuario = ?", $parametros['id_usuario']);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_USUARIO . "'");
            $select->where("c.fl_ativo = true");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }

    public function grupoMunicipio($parametros)
    {
        if ($parametros['id_municipio']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('cm' => 'comercializacao.comercializacoes_municipios'), 'c.id = cm.id_comercializacao', false);
            $select->where("cm.id_municipio = ?", $parametros['id_municipio']);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_MUNICIPIO . "'");
            $select->where("c.fl_ativo = true");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }

    public function grupoEstado($parametros)
    {
        if ($parametros['id_estado'] && $parametros['id_produto']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('ce' => 'comercializacao.comercializacoes_estados'), 'c.id = ce.id_comercializacao', false);
            $select->where("ce.id_estado = ?", $parametros['id_estado']);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_ESTADO . "'");
            $select->where("c.fl_ativo = true");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }

    public function grupoOrcamento($parametros)
    {
        if ($parametros['id_proposta'] && $parametros['id_produto']) {
            $select = $this->select()->setIntegrityCheck(false);
            $select->from(array('c' => 'comercializacao.comercializacoes'));
            $select->join(array('co' => 'comercializacao.comercializacoes_orcamentos'), 'co.id_comercializacao = c.id', false);
            $select->where("c.id_produto = ?", $parametros['id_produto']);
            $select->where("co.id_proposta = ?", $parametros['id_proposta']);
            $select->where("c.tp_comercializacao = '" . Comercializacao_Model_Comercializacoes::TIPO_ORCAMENTO . "'");
            $select->where("c.fl_ativo = true");

            return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchRow($select);
        }

        return false;
    }
}
