<?php

class Safra13_Model_Laudoprevia extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'vistorias_previas_laudos';
	protected $_primary = 'id';
	public $_order = 'id';
	
	public function save(array $dados) {
		
		$dados['id'] = $this->_db->fetchOne("select id_vistoria_previa_laudo from seguro.vistorias_previas_laudos_folhas where id = {$dados['id_folha']}");
		
		$Row = $this->getRow($dados['id']);
/*
		$Row->ds_nome_propriedade = $dados['ds_nome_propriedade'];
		$Row->ds_endereco = $dados['ds_endereco'];
		$Row->ds_endereco_cep = $dados['ds_endereco_cep'];
		$Row->id_municipio = $dados['id_municipio'];
		$Row->ds_endereco_bairro = $dados['ds_endereco_bairro'];
		$Row->ds_coordenadas = $dados['ds_coordenadas'];
		$Row->ds_referencia_localizacao = $dados['ds_referencia_localizacao'];
*/
		
		return $Row->save();
	}
	
	
	public function criaLaudoFolha($dados) {

		$Select = $this->select()->setIntegrityCheck(false);
    	$Select->from(array('pvp' => 'seguro.propostas_vistorias_previas'), 'id_vistoria');
		$Select->where('pvp.id = ?', $dados['id_proposta_vistoria']);

		$id_vistoria = $this->_db->fetchOne($Select);

		$Row = $this->createRow();
		$Row->id_vistoria = $id_vistoria;
		
		if($Row->save()) {
			//ja cria a primeira folha
			$Model = new Safra12_Model_LaudoPreviaFolha();
			$arr['id_vistoria_previa_laudo'] = $Row['id'];

			return $Model->save($arr);
		}
	}
	
	public function getAtributos($dados) {
		if(!$dados['id_folha']) {
			return false;
		}
		//busca os grupos de atributos do modelo
		$sql = "
		SELECT
			prod.id as id_produto,
			grupo.ds_nome_grupo,
			grupo_attr.id as id_grupo_atributo,
			grupo_attr.fl_pertence_folha,
			attr.*,
			tp.ds_chave_tipo_atributo,
			f.cd_numero_folha,
			f.id as id_folha
		FROM
			seguro.vistorias_previas_laudos_folhas AS f INNER JOIN
			seguro.vistorias_previas_laudos AS laudo ON f.id_vistoria_previa_laudo = laudo.id INNER JOIN
			seguro.propostas_vistorias_previas AS pvp ON laudo.id_vistoria = pvp.id_vistoria INNER JOIN
			seguro.propostas AS p ON pvp.id_proposta = p.id INNER JOIN
			produto.produtos AS prod on p.id_produto = prod.id INNER JOIN
			produto.produto_config on produto_config.id_produto = prod.id and produto_config.fl_ativo IS TRUE INNER JOIN
			seguro.modelos_laudos_previas AS mlp ON produto_config.id_modelo_vistoria_previa = mlp.id INNER JOIN
			seguro.modelos_laudos_previas_grupos AS grupo ON mlp.id = grupo.id_modelos_laudos_previas left JOIN
			seguro.modelos_laudos_previas_grupos_atributos AS grupo_attr ON grupo.id = grupo_attr.id_modelos_laudos_previas_grupos left join
			produto.atributos_rn AS attr ON grupo_attr.id_atributo_rn = attr.id left join
			produto.tipo_atributo AS tp ON attr.id_tipo_atributo = tp.id
		WHERE
			f.id = {$dados['id_folha']}
		ORDER BY
			grupo.ds_ordem, grupo_attr.ds_ordem
		";
		$Rs = $this->_db->fetchAll($sql);
		$ret = array();
		foreach($Rs as $linha) {
			if(!$linha['id']) {
				continue;
			}
			//pega as respostas da folha
			$sql = "
				select
					*
				from
					seguro.vistorias_previas_laudos_folhas_respostas
				where
					id_vistoria_previa_laudo_folha = {$dados['id_folha']} and
					id_atributo_rn = {$linha['id']}
				order by id asc";
			$arr = $this->_db->fetchAll($sql);
			$arrRespostas = false;
			if($arr) {
				$arrRespostas = array();
				$i = 0;
				foreach($arr as $respostas) {
					$arrRespostas[$i] = $respostas;
					$i++;
				}
			}
			$aux = $linha;
			$aux['respostas'] = $arrRespostas;
			$ret[] = $aux;
			
		}
		return $ret;
	}
	
	public function getQtdLaudosFolhas($id_folha) {
		$sql = "select
					count(id)
				from
					seguro.vistorias_previas_laudos_folhas
				where
					id_vistoria_previa_laudo in (select id_vistoria_previa_laudo  from seguro.vistorias_previas_laudos_folhas where id = $id_folha)";
		$arr['qtd'] = $this->_db->fetchOne($sql);
		$arr['folha_atual'] = $this->_db->fetchOne("select cd_numero_folha from seguro.vistorias_previas_laudos_folhas where id = $id_folha");
		return $arr;
	}
	
	public function getDadosProposta($id_folha='', $id_laudo='') {
		if($id_folha != '') {
			$sql = "select
						p.id,
						prop_prop.ds_nome_proponente,
						prop.ds_endereco,
						m.ds_nome_municipio,
						e.ds_sigla,
						c.ds_nome_cultura,
						laudo.dt_criacao,
						laudo.dt_alteracao,
						laudo.id_usuario_criacao,
						laudo.id_usuario_alteracao
					from
						seguro.vistorias_previas_laudos_folhas AS f INNER JOIN
						seguro.vistorias_previas_laudos AS laudo ON f.id_vistoria_previa_laudo = laudo.id INNER JOIN
						seguro.propostas_vistorias_previas AS pvp ON laudo.id_vistoria = pvp.id_vistoria INNER JOIN
						seguro.propostas AS p ON pvp.id_proposta = p.id INNER JOIN
						seguro.propostas_proponentes AS prop_prop ON p.id = prop_prop.id_proposta INNER JOIN
						seguro.propostas_propriedades AS prop on p.id = prop.id_proposta INNER JOIN
						sistema.municipios AS m ON prop.id_municipio = m.id INNER JOIN
						sistema.estados AS e ON m.id_estado = e.id INNER JOIN
						produto.produtos AS prod on p.id_produto = prod.id INNER JOIN
						produto.produtos_geral AS pg on prod.id_produto_geral = pg.id INNER JOIN
						produto.culturas AS c on pg.id_cultura = c.id
					where
						f.id = $id_folha ";
		} else {
			$sql = "select
						p.id,
						prop_prop.ds_nome_proponente,
						prop.ds_endereco,
						m.ds_nome_municipio,
						e.ds_sigla,
						c.ds_nome_cultura,
						laudo.dt_criacao,
						laudo.dt_alteracao,
						laudo.id_usuario_criacao,
						laudo.id_usuario_alteracao
					from
						seguro.vistorias_previas_laudos AS laudo INNER JOIN
						seguro.propostas_vistorias_previas AS pvp ON laudo.id_vistoria = pvp.id_vistoria INNER JOIN
						seguro.propostas AS p ON pvp.id_proposta = p.id INNER JOIN
						seguro.propostas_proponentes AS prop_prop ON p.id = prop_prop.id_proposta INNER JOIN
						seguro.propostas_propriedades AS prop on p.id = prop.id_proposta INNER JOIN
						sistema.municipios AS m ON prop.id_municipio = m.id INNER JOIN
						sistema.estados AS e ON m.id_estado = e.id INNER JOIN
						produto.produtos AS prod on p.id_produto = prod.id INNER JOIN
						produto.produtos_geral AS pg on prod.id_produto_geral = pg.id INNER JOIN
						produto.culturas AS c on pg.id_cultura = c.id
					where
						laudo.id = $id_laudo ";
		}
		
		return $this->_db->fetchRow($sql);
	}
	
	public function getFolha($id) {
		$sql = "
			select
				id
			from
				seguro.vistorias_previas_laudos_folhas
			where
				id_vistoria_previa_laudo = $id
			group by
				id
			having
				min(cd_numero_folha)  = 1";
		$id_folha = $this->_db->fetchOne($sql);
		return $id_folha;
	}
	
	public function getEstado($id_estado) {
		$sql = "
			select
				ds_nome_estado
			from
				sistema.estados
			where
				id = $id_estado";
		$nome_estado = $this->_db->fetchOne($sql);
		return $nome_estado;
	}

	public function getMunicipio($id_municipio) {
		$sql = "
			select
				ds_nome_municipio
			from
				sistema.municipios
			where
				id = $id_municipio";
		$nome_municipio = $this->_db->fetchOne($sql);
		return $nome_municipio;
	}
		
	public function getIdFolhaPagina($dados) {
		$sql = "
			select
				f.id
			from
				seguro.vistorias_previas_laudos_folhas as f,
				(select * from seguro.vistorias_previas_laudos_folhas where id = {$dados['id_folha']}) as aux
			where
				f.id_vistoria_previa_laudo = aux.id_vistoria_previa_laudo and
				f.cd_numero_folha = {$dados['cd_numero_folha']}
		";
		return $this->_db->fetchOne($sql);
	}
	
	public function getEndereco($id, $id_folha='', $id_laudo='') {
		if($id_laudo == '') {
			$id_laudo = $this->_db->fetchOne("select id_vistoria_previa_laudo from seguro.vistorias_previas_laudos_folhas where id = $id_folha");
		}
		/*
		$Rs = $this->_db->fetchRow("
			select
				l.*,m.id_estado as id_estado
			from
				seguro.vistorias_previas_laudos  AS l LEFT JOIN
				sistema.municipios m ON l.id_municipio = m.id
			where
				l.id = $id_laudo");
		//se ja tem os dados do endereco no laudo, retorna eles
		if($Rs) {
			if($Rs['ds_nome_propriedade'] != '') {
				return $Rs;
			}
		}
		*/
		
		//se nao tem, busca da proposta
		$select = "
			select
				p.*,
				m.id_estado AS id_estado
			from
				seguro.propostas_propriedades AS p LEFT JOIN
				sistema.municipios AS m ON p.id_municipio = m.id
			where
				id_proposta = $id";
		return $this->_db->fetchRow($select);
	}

	
	public function getLaudoFromProposta($dados)  {
		$sql = "select
					pvl.id
				from
					seguro.propostas_vistorias_previas pvp INNER JOIN
					seguro.vistorias_previas_laudos pvl ON pvp.id_vistoria = pvl.id_vistoria
				where
					pvp.id_proposta = {$dados['id']}";
		return $this->_db->fetchOne($sql);
	}
	
	public function getRespostas($id) {
		$sql = "
		select
			resp.ds_resposta,
			attr.ds_chave_rn
		from
			seguro.propostas_vistorias_previas pvp INNER JOIN
			seguro.vistorias_previas_laudos AS pvl ON pvp.id_vistoria = pvl.id_vistoria inner join
			seguro.vistorias_previas_laudos_folhas AS folha ON pvl.id = folha.id_vistoria_previa_laudo INNER JOIN
			seguro.vistorias_previas_laudos_folhas_respostas AS resp ON folha.id = resp.id_vistoria_previa_laudo_folha INNER JOIN
			seguro.propostas AS props ON pvp.id_proposta = props.id INNER JOIN
			produto.produtos AS prod ON props.id_produto = prod.id INNER JOIN
			produto.produto_config on produto_config.id_produto = prod.id and produto_config.fl_ativo IS TRUE INNER JOIN
			seguro.modelos_laudos_previas_grupos AS modelo_grupo ON produto_config.id_modelo_vistoria_previa = modelo_grupo.id_modelos_laudos_previas INNER JOIN
			seguro.modelos_laudos_previas_grupos_atributos AS grupo_attr ON modelo_grupo.id = grupo_attr.id_modelos_laudos_previas_grupos INNER JOIN
			produto.atributos_rn attr on grupo_attr.id_atributo_rn_proposta = attr.id
		where
			pvp.id_proposta = $id and
			ds_resposta != '' and
			grupo_attr.id_atributo_rn = resp.id_atributo_rn
		
		order by
			resp.id
		";
		return $this->_db->fetchAll($sql);
	}
	
	public function getIdVistoria($id_vistoria_laudo) {

		$sql = "
			SELECT
				MAX(id_vistoria)
			FROM
				seguro.vistorias_previas_laudos AS vpl, seguro.vistorias_previas_laudos_folhas as f
			WHERE
				vpl.id = f.id_vistoria_previa_laudo AND
				f.id = {$id_vistoria_laudo}
		";
		
		$id_vistoria = $this->_db->fetchOne($sql);

		return $id_vistoria;
	}
}
