<?php

class Seguro_Model_PropostasPropriedades extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'propostas_propriedades';
	protected $_primary = 'id_proposta';
	protected $_rowClass = 'Seguro_Model_Row_Propriedade';
	public $camposAlterados = array();
	
	public function save(array $data, $proposta) {
		$Row = $this->getRow($proposta);

		// se for alterao o municipio da propriedade, exclui parcelamento para forcar um novo calculo
		if($Row->id_municipio != $data['id_municipio']){
			$ModelPropostasParcelas = new Seguro_Model_PropostasParcelas();
			$ModelPropostasParcelas->deleteProposta($proposta);
		} 
		
		$Row->ds_nome_propriedade = $data['ds_nome_propriedade'];
		$Row->ds_endereco = $data['ds_endereco'];
		$Row->ds_endereco_cep = $data['ds_endereco_cep'];
		$Row->id_municipio = $data['id_municipio'];
		$Row->ds_endereco_bairro = $data['ds_endereco_bairro'];
		$Row->ds_coordenadas = $data['ds_coordenadas'];
		$Row->ds_referencia_localizacao = $data['ds_referencia_localizacao'];
		$Row->ds_endereco_nro = $data['ds_endereco_nro'];
		$Row->ds_endereco_complemento = $data['ds_endereco_complemento'];
		$Row->ds_pessoa_autorizada = $data['ds_pessoa_autorizada'];
		
		$ModelPessoaAutorizada = new Seguro_Model_PessoaAutorizada();
		if($Row->ds_pessoa_autorizada == 'S'){
			$ModelPessoaAutorizada->delete($proposta,'id_proposta');
			foreach($data['ds_dados_pessoa_autorizada'] as $chave => $pessoaAutorizada){
				if(!$ModelPessoaAutorizada->save($data['ds_dados_pessoa_autorizada'][$chave], $proposta)){
				    $this->error = 'Informar todos os dados da Pessoa Autorizada a acompanhar a Vistoria.';
				    return false;
				}
			}
		} else {
            $ModelPessoaAutorizada->delete($proposta,'id_proposta');
		}

		return $Row->save();
	}
	
	public function comparaCampos($data, $Row) {
		if($Row->ds_nome_propriedade != $data['ds_nome_propriedade']) {
			$this->camposAlterados[] = "Nome Propriedade \n- De: {$Row->ds_nome_propriedade} \n- Para: {$data['ds_nome_propriedade']}\n\n";
		}
		if($Row->ds_endereco != $data['ds_endereco_propriedade']) {
			$this->camposAlterados[] = "Endereço Propriedade \n- De: {$Row->ds_endereco} \n- Para: {$data['ds_endereco_propriedade']}\n\n";
		}
		if($Row->ds_endereco_cep != $data['ds_endereco_cep_propriedade']) {
			$this->camposAlterados[] = "Nome Propriedade \n- De: {$Row->ds_endereco_cep} \n- Para: {$data['ds_endereco_cep_propriedade']}\n\n";
		}
		
		
		if($data['id_municipio_propriedade']) {
			if($Row->id_municipio != $data['id_municipio_propriedade']) {
				$Model = new Sistema_Model_Municipios();
				$municipio = '';
				if($Row->id_municipio) {
					$municipio = $Model->fetchRow(" id = {$Row->id_municipio}");
					$municipio = $municipio['ds_nome_municipio'];
				}
				$municipio_novo = $Model->fetchRow(" id = {$data['id_municipio_propriedade']}");
				$municipio_novo = $municipio_novo['ds_nome_municipio'];
				$this->camposAlterados[] = "Municipio Propriedade \n- De: $municipio \n- Para: $municipio_novo\n\n";
			}
		}
		
		if($Row->ds_endereco_bairro != $data['ds_endereco_bairro_propriedade']) {
			$this->camposAlterados[] = "Bairro Propriedade \n- De: {$Row->ds_endereco_bairro} \n- Para: {$data['ds_endereco_bairro_propriedade']}\n\n";
		}
		if($Row->ds_coordenadas != $data['ds_coordenadas']) {
			$this->camposAlterados[] = "Coordenadas Propriedade \n- De: {$Row->ds_coordenadas} \n- Para: {$data['ds_coordenadas']}\n\n";
		}
		if($Row->ds_referencia_localizacao != $data['ds_referencia_localizacao']) {
			$this->camposAlterados[] = "Referencia Propriedade \n- De: {$Row->ds_referencia_localizacao} \n- Para: {$data['ds_referencia_localizacao']}\n\n";
		}
		if($Row->ds_pessoa_autorizada != $data['ds_pessoa_autorizada']) {
			$this->camposAlterados[] = "Outra Pessoa Autorizada \n- De: " .
					($Row->ds_pessoa_autorizada == 'S' ? "Sim" : "Não")  . " \n- Para: " .
					($data['ds_pessoa_autorizada'] == 'S \n\n' ? "Sim" : "Não");
		}
		if($Row->ds_nome_outra_pessoa != $data['ds_nome_outra_pessoa']) {
			$this->camposAlterados[] = "Outra pessoa Autorizada \n- De: {$Row->ds_nome_outra_pessoa} \n- Para: {$data['ds_nome_outra_pessoa']}\n\n";
		}
		if($Row->ds_telefone_outra_pessoa != $data['ds_telefone_outra_pessoa']) {
			$this->camposAlterados[] = "Telefone Outra Pessoa Autorizada \n- De: {$Row->ds_telefone_outra_pessoa} \n- Para: {$data['ds_telefone_outra_pessoa']}\n\n";
		}
	}
	
	public function get($id_proposta) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p' => 'seguro.propostas_propriedades'), array('id_proposta','ds_nome_propriedade','ds_endereco','ds_endereco_cep','id_municipio','ds_endereco_bairro','ds_coordenadas','ds_referencia_localizacao','ds_pessoa_autorizada','ds_nome_outra_pessoa','ds_cpf_outra_pessoa','ds_telefone_outra_pessoa','ds_endereco_nro','ds_endereco_complemento'));
		$Select->join(array('m' => 'sistema.municipios'), 'p.id_municipio = m.id', array('id_estado','ds_nome_municipio','ds_latitude','ds_longitude','vl_altitude','vl_area','ds_ano_instalacao','cd_bacen','nr_ibge','nr_cep'));
		$Select->join(array('e' => 'sistema.estados'), 'm.id_estado = e.id', array('ds_nome_estado','ds_sigla','nr_ibge','id_pais'));
		$Select->join(array('pa' => 'sistema.paises'), 'e.id_pais= pa.id', array('ds_nome_pais'));
		$Select->where('id_proposta = ?', $id_proposta);
		
		return $this->fetchRow($Select);
	}

	/**
	 * Verifica se a sede está dentro de um talhão.
	 */
	public function hasSedeNoTalhao($id_proposta) {
		// implementado assim pq Zend não aceita EXISTS na cláusula WHERE
		// se implementar com INNER o custo será muito maior
		$Select = "select pp.ds_coordenadas
  					 from seguro.propostas_propriedades pp
 					where exists ( select it.id
								     from seguro.itens_segurados it 
								     join seguro.itens_segurados_complemento isc
								       on it.id = isc.id_item_segurado
								    where isc.ds_coordenadas_geograficas = pp.ds_coordenadas
                                      and it.id_proposta = $id_proposta
								) 
   			         and pp.id_proposta = $id_proposta";

		return Zend_Db_Table::getDefaultAdapter()->fetchOne($Select);
	}
}
