<?php

class Corretor_Model_Avisos extends Agro_Db_Table_Abstract {
	protected $_schema = 'sinistro';
	protected $_name = 'processos';
	protected $_primary = 'id';

	public function getAvisosSinistro($where) {
		$User = Zend_Auth::getInstance()->getIdentity();
		
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('v'=>'sinistro.v_envio_avisos'), '*');
		$Select->where('id_corretor = ?', $User->id);
		$this->getWhere($Select, $where);
		$Select->order('id asc');
		
		return $this->fetchAll($Select);
	}

	public function getIniciosColheita() {
	}

	public function getEncerramentosColheita() {
	}
	
	public function getEventos($idProposta) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('pc'=>'seguro.propostas_coberturas'), null);
		$Select->join(array('ce'=>'produto.coberturas_eventos'), 'ce.id_cobertura = pc.id_cobertura', false);
		$Select->join(array('e'=>'produto.eventos'), 'e.id = ce.id_evento', array('id','ds_nome_evento','ds_chave_evento'));
		$Select->where('pc.id_proposta = ?', $idProposta);
		$Select->group(array('e.id', 'e.ds_nome_evento', 'e.ds_chave_evento'));
		
		return $this->fetchAll($Select);
	}
	
	public function saveAvisoSinistro($values) {
		$this->getAdapter()->beginTransaction();
		
		$AvisoEvento = new Sinistro_Model_AvisosEventos();
		$Avisos = new Sinistro_Model_AvisosSinistro();
		$Propostas = new Seguro_Model_Propostas();
		
		try {
			$Proposta = $Propostas->find($values['id_proposta'])->current();
			$Row = $Avisos->createRow();
			
			$Row->id_proposta = $values['id_proposta'];
			$Row->dt_sinistro = Agro_Util::formatDate("{$values['data_sinistro']} {$values['hora_sinistro']}:00", Zend_Date::W3C);
			$Row->ds_pessoa_contato = $values['pessoa_contato'];
			$Row->ds_telefone_contato = $values['telefone_contato'];
			$Row->ds_observacoes = $values['observacao'];
			$Row->fl_ocorrencia_queda_parreiral = $values['fl_ocorrencia_queda_parreiral'] ? 1 : 0;
			$Row->fl_ocorrencia_replantio = $values['fl_ocorrencia_replantio'] ? 1 : 0;
			
			if ($Row->save()) {
				$data = array();
				
				foreach ($values['eventos'] as $evento) {
					$AvisoEvento->insert(array('id_aviso' => $Row->id, 'id_evento' => $evento));
				}
				
				$this->sendMailAviso($Row->id);
				
				$this->getAdapter()->commit();
				return true;
			} else {
				return false;
			}
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			return false;
		}
	}
	
	public function sendMailAviso($idAviso){

		$AvisoSinistro = new Sinistro_Model_AvisosSinistro();
		$aviso = $AvisoSinistro->getDadosEmailAviso($idAviso);

		if ($idAviso) {
			$To = 'tiago.zschornack@agrobrasilseguros.com.br';

			$assunto = "AVISO SINISTRO - {$aviso['ds_nome_proponente']} - Proposta: {$aviso['id_proposta']} - {$aviso['ds_nome_produto']}";
			$content = "\nAVISO DE SINISTRO Nro: {$aviso['id']} \n";
			$content .= "Em: {$aviso['dt_criacao']} \n\n";

			$content .= "Proposta Nro: {$aviso['id_proposta']} \n";
			$content .= "Apólice Nro: {$aviso['nr_apolice']} \n";
			$content .= "Nome do Segurado: {$aviso['ds_nome_proponente']} \n";
			$content .= "Produto: {$aviso['ds_nome_produto']} \n\n\n";

			$content .= "ATENÇÃO: esta é uma mensagem automática. Por favor, não responda.\n\n";

			$content .= "Se desejar entrar em contato, escreva para ".EMAIL_SINISTRO."\n\n";

			$content .= "\nAgrobrasil Operadora de Seguro Agrícola";

    		try {

				$Mail = new Agro_Mail();
				$Mail->addTo($To);
				$Mail->setTipoUsuario('Usuário');
				$Mail->setBody($content);
				$Mail->setSubject($assunto);
				$Mail->send();

				return true;
			} catch (Exception $e) {
				return false;
			}
		} else {
			return false;
		}
	}	
	
	
	public function saveAvisoInicio($values) {
		$this->getAdapter()->beginTransaction();
		
		$AvisoItemSegurado = new Sinistro_Model_AvisosInicioItensSegurados();
		$AvisosInicios = new Sinistro_Model_AvisosInicio();
		$Processos = new Sinistro_Model_Processos();
		
		try {
			$Processo = $Processos->find($values['id'])->current();
			$AvisoInicio = $AvisosInicios->createRow();
			
			$AvisoInicio->id_proposta = $Processo->id_proposta;
			$AvisoInicio->dt_inicio_colheita = Agro_Util::formatDate($values['data_inicio_colheita'], 'yyyy-MM-dd');
			
			if ($AvisoInicio->save()) {
				if (is_array($values['itens_segurados'])) {
					foreach ($values['itens_segurados'] as $item) {
						$Row = $AvisoItemSegurado->createRow();
						
						$Row->id_aviso_inicio = $AvisoInicio->id;
						$Row->id_item_segurado = $item;
						
						$Row->save();
					}
				} else {
					return false;
				}
			} else {
				return false;
			}
			
			$this->getAdapter()->commit();
			return true;
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			return false;
		}
	}
	
	public function saveAvisoEncerramento($values) {
		$this->getAdapter()->beginTransaction();
		
		$AvisoItemSegurado = new Sinistro_Model_AvisosEncerramentoItensSegurados();
		$AvisosEncerramentos = new Sinistro_Model_AvisosEncerramento();
		$Processos = new Sinistro_Model_Processos();
		
		try {
			$Processo = $Processos->find($values['id'])->current();
			$AvisoEncerramento = $AvisosEncerramentos->createRow();
			
			$AvisoEncerramento->dt_encerramento_colheita = Agro_Util::formatDate($values['data_encerramento_colheita'], 'yyyy-MM-dd');
			$AvisoEncerramento->id_proposta = $Processo->id_proposta;
			
			if ($AvisoEncerramento->save()) {
				if (is_array($values['itens_segurados'])) {
					foreach ($values['itens_segurados'] as $item) {
						$Row = $AvisoItemSegurado->createRow();
						
						$Row->id_aviso_encerramento = $AvisoEncerramento->id;
						$Row->id_item_segurado = $item;
						
						$Row->save();
					}

                    $serviceAvisoEncerramentoColheita = new Sinistro2_Service_AvisoEncerramentoColheita();
                    $maiorData = $serviceAvisoEncerramentoColheita->buscarMaiorDataParaDataBase($AvisoEncerramento->id);
                    $serviceAvisoEncerramentoColheita->salvarDataBase((int)$AvisoEncerramento->id, $maiorData);

					
				} else {
					return false;
				}

				if (Sistema_Model_Usuarios::isUsuarioLogadoCorretorPreposto()) {
					$modelConfirmacaoTermoAvisosEncerramento = new Sinistro2_Model_ConfirmacaoTermoAvisosEncerramento();
					$modelConfirmacaoTermoAvisosEncerramento->save(['id_aviso_encerramento' => $AvisoEncerramento->id]);
				}

				$serviceAvisoEncerramentoColheita->criaCronometroRegulacao($Processo->id_proposta, $AvisoEncerramento->id);
				
			} else {
				return false;
			}
			
			$this->getAdapter()->commit();
			return true;
		} catch (Exception $e) {
			$this->getAdapter()->rollBack();
			return false;
		}
	}
	
	public function getItensSeguradosInicioColheita($idProposta) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('ai'=>'sinistro.avisos_inicio'));
		$Select->join(array('i'=>'sinistro.avisos_inicio_itens_segurados'), 'ai.id = i.id_aviso_inicio');
		$Select->join(array('it'=>'seguro.itens_segurados'), 'it.id = i.id_item_segurado');
		$Select->where('ai.id_proposta = ?', $idProposta);
		$Select->where('it.vl_lmga > 0');
		$Rs = $this->fetchAll($Select);
		
		
		$return = array();
		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$return[] = $Row->id_item_segurado;
			}
		}
		
		return $return;
	}
	
	public function getItensSeguradosEncerramentoColheita($idProposta) {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('ai'=>'sinistro.avisos_encerramento'));
		$Select->join(array('i'=>'sinistro.avisos_encerramento_itens_segurados'), 'ai.id = i.id_aviso_encerramento');
		$Select->join(array('it'=>'seguro.itens_segurados'), 'it.id = i.id_item_segurado');
		$Select->where('ai.id_proposta = ?', $idProposta);
		$Select->where('it.vl_lmga > 0');

		$Rs = $this->fetchAll($Select);
		
		$return = array();
		if ($Rs->count()) {
			foreach ($Rs as $Row) {
				$return[] = $Row->id_item_segurado;
			}
		}
		
		return $return;
	}
}