<?php

class Corretor_AvisosController extends Agro_Controller_Action {

	public function init() {
		$this->getHelper('layout')->setLayout('popup');
	}

	public function sinistroAction() {
		$this->view->title = "Corretor » Avisos de Sinistro » Enviar Aviso";
		$Avisos = new Corretor_Model_Avisos();
		$where = array();

		// Busca a proposta
		$Propostas = new Seguro_Model_Propostas();
		$Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();

		if ($this->getRequest()->isPost()) {
			$this->view->post = $this->getRequest()->getParams();
			$tmp = array();

			// Valida se foi marcado eventos
			if (!count($this->getRequest()->getParam('eventos'))) {
				$tmp[] = 'Não foi encontrado nenhum evento marcado.';
			}

			$data = Agro_Util::formatDate($this->getRequest()->getParam('data_sinistro'), 'y-MM-dd');
			if (!$Proposta->vigencia($data)) {
				$tmp[] = 'A data do sinistro está fora do período de vigência da proposta.';
			}

			// valida se a data do sinistro eh maior que hoje
			if (strtotime($data) > strtotime(date('Y-m-d'))) {
				$tmp[] = 'A data do aviso de sinistro não pode ser maior que hoje.';
			}

			// valida se foi informado uma data
			if (!$this->getRequest()->getParam('data_sinistro')) {
				$tmp[] = 'A data informada esta incorreta.';
			}

			if (count($tmp)) {
				$message  = "Foram encontrados erros no formulário";
				$message .= "<ul><li>";
				$message .= implode("</li><li>", $tmp);
				$message .= "</li></ul>";

				$this->view->showMessage($message, 'alert');
			} else {
				if ($Avisos->saveAvisoSinistro($this->getRequest()->getParams())) {
					$this->view->showMessage('Aviso de Sinistro enviado com sucesso.', 'success');
					$this->view->post = '';
				} else {
					$this->view->showMessage('Não foi possível salvar o aviso.', 'error');
				}
			}

		}

		if ($this->getRequest()->getParam('id_proposta')) {
			$this->view->eventos = $Avisos->getEventos($Proposta->id);
			$this->view->proposta = $Proposta;
		}

		$this->view->records = $Avisos->getAvisosSinistro($where);
	}

	public function iniciosAction() {
		$this->view->title = "Corretor » Avisos de Início de Colheita";

		$Processos = new Sinistro_Model_Processos();
		$Avisos = new Corretor_Model_Avisos();

		if ($this->getRequest()->isPost()) {
			$this->view->post = $this->getRequest()->getParams();
			$tmp = array();

			// Valida se foi marcado eventos
			if (!count($this->getRequest()->getParam('itens_segurados'))) {
				$tmp[] = 'Não foi encontrado nenhum item marcado.';
			}

			// valida se foi informado uma data
			if (!$this->getRequest()->getParam('data_inicio_colheita')) {
				$tmp[] = 'Não foi informada uma data para o início da colheita.';
			}

			if (count($tmp)) {
				$message  = "Foram encontrados erros no formulário";
				$message .= "<ul><li>";
				$message .= implode("</li><li>", $tmp);
				$message .= "</li></ul>";

				$this->view->showMessage($message, 'alert');
			} else {
				if ($Avisos->saveAvisoInicio($this->getRequest()->getParams())) {
					$this->view->showMessage('Aviso de início de colheita enviado com sucesso.', 'success');
					$this->view->post = '';
				} else {
					$this->view->showMessage('Não foi possível salvar o aviso de início de colheita.', 'error');
				}
			}
		}

		$this->view->processo = $Processos->find($this->getRequest()->getParam('id'))->current();
		$this->view->proposta = $this->view->processo->proposta();
		$this->view->unidades = $this->view->proposta->unidades(false,true);
		$this->view->inicio = $Avisos->getItensSeguradosInicioColheita($this->view->proposta->id);
	}

	public function finalreplantioAction() {
		$this->view->title 		= "Corretor » Avisos de Final de Replantio";
		$AvisosFinalReplantio 	= new Sinistro2_Model_AvisosFinalReplantio();
		$Processos 				= new Sinistro2_Model_Processos();
		$ModelBeneficiarios		= new Seguro_Model_PropostasBeneficiarios();
		$this->view->processo 	= $Processos->find($this->getRequest()->getParam('id'))->current();
		$id_proposta = $Processos->getPropostaByProcesso($this->view->processo->id);
		
		$this->view->unidades 	= $AvisosFinalReplantio->getItensSeguradosAvisosFinalReplantio(
			$this->getRequest()->getParam('id'), 
			$this->getRequest()->getParam('id_proposta')
		);

		$this->view->possuiBeneficiario = (!empty($ModelBeneficiarios->getBeneficiarios($id_proposta))) ? '1' : '0';

		if ($this->getRequest()->isPost()) { 
			$params = $this->getRequest()->getParams();
			$errorMsg = $this->verificaData($params);
			if ($errorMsg) {
				$this->view->showMessage($errorMsg, 'error');
			} else {
				
				$this->saveReplantio($params);
			}
		}

	}

	private function saveReplantio(array $post) {
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();

		try {
			$AvisosFinalReplantio = new Sinistro2_Model_AvisosFinalReplantio();
			$data['id_proposta'] = $post['id_proposta'];
			$ds_beneficiario_alteracao = !empty($post['pagamento_beneficiario']) ? $post['pagamento_beneficiario'] : '';
            //$data['ds_beneficiario_original'] = $data['ds_beneficiario_alteracao'];
			$data['dt_final_replantio'] = Agro_Util::formatDate($post['dt_final_replantio'], 'yyyy-MM-dd');
		
			$idAvisoFinalReplantio = $AvisosFinalReplantio->insert($data);

			if ($post['itens_segurados']) {
				$AvisoItemSegurado = new Sinistro2_Model_AvisosFinalReplantioItensSegurados();

				foreach ($post['itens_segurados'] as $value) {
					$idItem = $value;
					$item = array();
					$item['id_aviso_final_replantio'] = $idAvisoFinalReplantio;
					$item['id_item_segurado'] = $idItem;
					$AvisoItemSegurado->delete($idItem, 'id_item_segurado');
					$AvisoItemSegurado->insert($item);
				}
			}

			if (Sistema_Model_Usuarios::isUsuarioLogadoCorretorPreposto()) {
				$modelConfirmacaoTermoAvisosFinalReplantio = new Sinistro2_Model_ConfirmacaoTermoAvisosFinalReplantio();
				$modelConfirmacaoTermoAvisosFinalReplantio->save(['id_aviso_final_replantio' => $idAvisoFinalReplantio]);
			}
			$AvisosFinalReplantio->configuraDestinatarioPagamento($this->getRequest()->getParam('id'), $idAvisoFinalReplantio, $ds_beneficiario_alteracao);

			$Db->commit();
			$this->view->unidades = $AvisosFinalReplantio->getItensSeguradosAvisosFinalReplantio(
				$this->getRequest()->getParam('id'), 
				$this->getRequest()->getParam('id_proposta')
			);			$this->view->showMessage(MSG_SUCCESS, 'success');
		} catch (Exception $e) {
			$Db->rollback();
			$this->view->showMessage(MSG_ERROR, 'error');
		}
	}

	private function verificaData($post) {
		$dt1 = explode('/', date('d/m/Y'));
		$dt2 = explode('/', $post['dt_final_replantio']);
		
		$dtAtual = $dt1[2] . $dt1[1] . $dt1[0];
		$dtReplantio = $dt2[2] . $dt2[1] . $dt2[0];

		$msg = '';
		if ($dtReplantio > $dtAtual) {
			$msg = 'A data final de replantio não pode ser maior que a data atual.';
		}

		return $msg;
	}

	public function encerramentosAction() {
		$this->view->title = "Corretor » Avisos de Encerramento de Colheita";

		$Processos = new Sinistro_Model_Processos();
		$Avisos = new Corretor_Model_Avisos();
		$Infos = new Seguro_Model_InformacoesBancarias();

		$this->view->processo = $Processos->find($this->getRequest()->getParam('id'))->current();
		$Proposta = $this->view->processo->proposta();

		if ($this->getRequest()->isPost()) {
			$this->view->post = $this->getRequest()->getParams();
			$tmp = array();

			// Valida se foi marcado eventos
			if (!count($this->getRequest()->getParam('itens_segurados'))) {
				$tmp[] = 'Não foi encontrado nenhum item marcado.';
			}

			$data = Agro_Util::formatDate($this->getRequest()->getParam('data_encerramento_colheita'), 'y-MM-dd');

			if (!$Proposta->vigencia($data)) {
				$tmp[] = 'A data do encerramento está fora do período de vigência da proposta.';
			}

			if (strtotime($data) > strtotime(date('Y-m-d'))) {
				$tmp[] = 'A data do encerramento não pode ser maior que hoje.';
			}

			// valida se foi informado uma data
			if (!$this->getRequest()->getParam('data_encerramento_colheita')) {
				$tmp[] = 'Não foi informada uma data para o encerramento da colheita.';
			}

			if (count($tmp)) {
				$message  = "Foram encontrados erros no formulário";
				$message .= "<ul><li>";
				$message .= implode("</li><li>", $tmp);
				$message .= "</li></ul>";

				$this->view->showMessage($message, 'alert');
			} else {
				if ($Avisos->saveAvisoEncerramento($this->getRequest()->getParams())) {
					$this->view->showMessage('Aviso de encerramento de colheita enviado com sucesso.', 'success');
					$this->view->post = '';
				} else {
					$this->view->showMessage('Não foi possível salvar o aviso de encerramento de colheita.', 'error');
				}
			}

		    // comentado solicitação #2814
			// for($i=0; $i<$this->getRequest()->getParam('num_linhas'); $i++){
			// 	if ($this->getRequest()->getParam('id_'.$i) > 0) {
			// 		$dado = $Infos->find($this->getRequest()->getParam('id_'.$i))->current();
			// 	} else {
			// 		$dado = $Infos->createRow();
			// 	}

			// 	$dado->cpf_cnpj = $this->getRequest()->getParam('cpf_cnpj_'.$i);
			// 	$dado->id_proposta = $this->getRequest()->getParam('id_proposta_'.$i);
			// 	$dado->id_banco = $this->getRequest()->getParam('banco_'.$i) ? $this->getRequest()->getParam('banco_'.$i) : null;
			// 	$dado->nu_conta_corrente = $this->getRequest()->getParam('conta_corrente_'.$i);
			// 	$dado->nu_digito_conta_corrente = $this->getRequest()->getParam('digito_conta_corrente_'.$i);
			// 	$dado->nu_agencia = $this->getRequest()->getParam('agencia_'.$i);
			// 	$dado->nu_digito_agencia = $this->getRequest()->getParam('digito_agencia_'.$i);
			// 	$dado->id_forma_pagamento = $this->getRequest()->getParam('f_pagamento_'.$i);
			// 	$dado->save();
			// }

		}

		$this->view->unidades = $Proposta->unidades(false, true);
		$this->view->encerramento = $Avisos->getItensSeguradosEncerramentoColheita($Proposta->id);
		$this->view->inicio = $Avisos->getItensSeguradosInicioColheita($Proposta->id);
		$this->view->informacoes_bancarias = $Infos->getInformacoesBancarias($Proposta->id);
	}

}
