<?php

class Nobre_LiquidacaoController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Liquidação de Processos ';
	}

    public function getModel() {
        return new Nobre_Model_Liquidacoes();
    }

	public function getForm() {
		return new Nobre_Form_DadosPagamento();
	}

	public function indexAction(){
		$this->view->back = 'javascript:history.back()';

		$dados 				= array();
		$dados['PARAMS'] 	= array();
		$dados['QUADRAS'] 	= array();

		$ModelLaudosFinais = new Sinistro_Model_LaudosFinais();

		$dados['PARAMS'] = $this->getRequest()->getParams();

		$dados['QUADRAS'] = $ModelLaudosFinais->getItens($dados['PARAMS']['id_proposta'], $dados['PARAMS']['id_processo'], $dados['PARAMS']['avulsa'], $dados['PARAMS']['id_cobertura']);

		$this->view->dados = $dados;
	}

	public function liquidadosAction(){
		$ModelLiquidacao = new Sinistro_Model_Liquidacoes();
		$this->view->title .= '» Liquidados';
		$dados = array();

		$params = $this->getRequest()->getParams();
		$dados = $ModelLiquidacao->getLiquidacao($params['id_liquidacao']);

		$this->view->back = '/sinistro/processo/view/id/'.$dados['id_processo'];

		$this->view->dados = $dados;
	}

	public function liquidadosviewAction(){
		$this->getHelper('layout')->setLayout('popup');

        $ModelLiquidacao = new Sinistro_Model_Liquidacoes();
        $ModelProposta = new Seguro_Model_Propostas();

        $this->view->title .= '» Liquidados';
        $dados = array();

        $params = $this->getRequest()->getParams();

        $dados = $ModelLiquidacao->getLiquidacao($params['id_liquidacao']);

        $Proposta = $ModelProposta->find($dados["id_proposta"])->current();
		$dados["liq_pg"] = $Proposta->isPg();

		$ModelProcesso = new Sinistro_Model_Processos();

		$this->view->processo = $ModelProcesso->find($dados['id_processo'])->current();
		$this->view->proposta = $this->view->processo->proposta();
		$this->view->proponente = $this->view->proposta->proponente();

		//Busca os beneficiários
		$Beneficiarios = new Seguro_Model_PropostasBeneficiarios();
		$this->view->beneficiarios = $Beneficiarios->getBeneficiarios($dados['id_proposta']);

		//Busca as datas de encerramento
		$ModelEncerramento = new Sinistro_Model_AvisosEncerramento();
		$dataEncerramento = $ModelEncerramento->getDataEncerramentoItensSegurados($dados['id_proposta']);
		$this->view->dataEncerramento = $dataEncerramento;

		// Busca avisos pelo id da proposta
		$Aviso = new Sinistro_Model_AvisosSinistro();
		$this->view->avisos = $Aviso->getAvisosByProposta($dados['id_proposta'], 'ACEITO');

		$TipoLiquidacao = new Sinistro_Model_TipoLiquidacao();
		if($dados['id_tipo_liquidacao']){
			$dados['ds_nome_liquidacao_avulsa'] = $TipoLiquidacao->getNomeLiquidacaoAvulsa($dados['id_tipo_liquidacao']);
		}

        $this->view->dados = $dados;
	}

    public function printAction(){
        $this->getHelper('layout')->setLayout('popup');

        $ModelLiquidacao = new Sinistro_Model_Liquidacoes();
        $this->view->title .= '» Liquidados';
        $dados = array();

        $params = $this->getRequest()->getParams();
        $dados = $ModelLiquidacao->getLiquidacao($params['id_liquidacao']);

        $this->view->dados = $dados;
    }

	public function liquidadosreloadAction(){
		$this->isAjax(true);

		$ModelLiquidacao = new Sinistro_Model_Liquidacoes();
		$dados = array();

		$params = $this->getRequest()->getParams();
		$dados = $ModelLiquidacao->getLiquidacao($params['id_liquidacao']);

		$this->view->back = '/sinistro/processo/view/id/'.$dados['id_processo'];

		$this->view->dados = $dados;
	}

	public function liquidarAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		$ModelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
		$ModelLaudosFinais = new Sinistro_Model_LaudosFinais();
		$ModelProposta = new Seguro_Model_Propostas();
		$ModelSafras = new Produto_Model_Safras();
		$ModelProduto = new Produto_Model_Produtos();

		$return = array();

		$params = $this->getRequest()->getParams();

		$Proposta = $ModelProposta->find($params['id_proposta'])->current();

		//Recupera ds_chave_produto do produto
		$params['ds_chave_produto'] = $ModelProduto->getChaveProdutoById($Proposta->id_produto);

		if($params['id_item_segurado']){

			$valid = true;

			if ($params["manual"]){
				$message = array();

				foreach ($params['id_item_segurado'] as $item_segurado){
					if (!$params["vl_prejuizo_total-$item_segurado"]){
						$message[] = "- Item Segurado $item_segurado prencher Prejuízo.";
					}

					if (!$params["vl_indenizacao-$item_segurado"]){
						$message[] = "- Item Segurado $item_segurado prencher Indenização.";
					}
				}

				if (array_count_values($message)){
					$valid = false;
					$return['status'] = false;
					$return['message'] = "É nessário preencher os seguintes valores: \n".implode("\n", $message);

				}

			}

			if ($valid){

		        if ($params['avulsa']) {
	                $TipoLiquidacao = $ModelProdutoCobertura->getTipoLiquidacao($Proposta->id_produto, $params['id_cobertura']);
	            } else {
	                $TipoLiquidacao = $ModelProdutoCobertura->getTipoLiquidacao($Proposta->id_produto, $Proposta->coberturaPrincipal());
	            }

			    $Liquidacoes = new Sinistro_Model_Liquidacoes();
			    $params['id_liquidacao'] = $Liquidacoes->save(array('id_liquidacao' => $params['id_liquidacao'],'id_processo'=>$params['id_processo'],'tp_liquidacao'=>'P'));

	            $model = $ModelSafras->getSafraModel($params['id_proposta'], $TipoLiquidacao['ds_chave']);
	            $Liquidacao = new $model();

				foreach ($params['id_item_segurado'] as $item_segurado){

					$newParams = $params;
					$newParams['id_item_segurado'] = $item_segurado;

					if (!$params["manual"]){
						$newParams['laudos'] = array();
						$newParams['laudos'] = $ModelLaudosFinais->getLaudos($params['id_processo'], $params['id_proposta'], $item_segurado, $params['avulsa']);

					}

					$return = $Liquidacao->liquidar($newParams);

					$return['id_liquidacao'] = $params['id_liquidacao'];
					$return['id_proposta'] = $params['id_proposta'];
					$return['id_processo'] = $params['id_processo'];
				}
			}

		} else {
			$return['status'] = false;
			$return['message'] = "Selecione ao menos uma quadra para liquidar";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function deleteliquidacaoAction(){
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();

		if ($this->getRequest()->getParam('id_proposta') && $this->getRequest()->getParam('id_processo')) {
			if (is_array($this->getRequest()->getParam('liquidacoes'))) {
				$ModelLiquidacao = new Sinistro_Model_Liquidacoes();

				try {
					foreach ($this->getRequest()->getParam('liquidacoes') as $idLiquidacao) {
						$ModelLiquidacao->delete($idLiquidacao);
					}

					$return = array('status' => true, 'message' => MSG_SUCCESS);
				} catch (Exception $e) {
					$return = array('status' => false, 'message' => $e->getMessage());
				}
			} else {
				$return = array('status' => false, 'message' => 'Selecione ao menos uma quadra para liquidar');
			}
		} else {
			$return = array('status' => false, 'message' => 'Informe os dados ...');
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function atualizastatusliquidacaoAction(){
		$this->isAjax();
		if($this->getRequest()->getParam('id') && $this->getRequest()->getParam('id_status')){
			try {
				$Model = $this->getModel();
				if($Model->atualizaStatusLiquidacao($this->getRequest()->getParam('id'), $this->getRequest()->getParam('id_status'))){
					if($this->getRequest()->getParam('id_status') == 112){
						$return = array('status' => 'liberar', 'message' => MSG_SUCCESS);
					}else if($this->getRequest()->getParam('id_status') == 111){
						$return = array('status' => 'desfazer', 'message' => MSG_SUCCESS);
					}
				}
			} catch (Exception $e) {
				$return = array('status' => false, 'message' => $e->getMessage());
			}

			$this->getResponse()->setBody(Zend_Json::encode($return));
		}

	}

	public function listaliquidacoesAction(){
		$this->isAjax(true);
		$Model = $this->getModel();
		$dados = array();

		if($this->getRequest()->getParam('id_proposta') && $this->getRequest()->getParam('id_processo')){
			$dados = $Model->getListaLiquidacoes($this->getRequest()->getParam('id_proposta'), $this->getRequest()->getParam('id_processo'));
		}
		$dados;
		$this->view->dados = $dados;
	}

	public function populateformAction() {
		$this->isAjax();
		$this->view->form = new Sinistro_Form_DadosPagamento();
		$Model = new Nobre_Model_LiquidacoesPrevisaoPagamento();

		$return = $Model->getList($this->getRequest()->getParam('id_liquidacao'));
		
		if (is_array($return)) {
			$return['id'] = $return['id'] ? $return['id'] : '';
			$return['dt_pagamento'] = $return['dt_pagamento'] ? Agro_Util::formatDate($return['dt_pagamento'], Zend_Date::DATES) : '';
			$return['vl_pagamento'] = $return['vl_pagamento'] ? $return['vl_pagamento'] : '';
			$return['dt_confirmacao_pagamento'] = $return['dt_confirmacao_pagamento'] ? Agro_Util::formatDate($return['dt_confirmacao_pagamento'], Zend_Date::DATES) : '';
			$return['comprovante'] = $return['comprovante'] ? $return['comprovante'] : '';
			$return['id_comprovante'] = $return['id_comprovante'] ? $return['id_comprovante'] : '';

			$this->nome_comprovante = $return['comprovante'] ? $return['comprovante'] : '';

			$this->getResponse()->setBody(Zend_Json::encode($return));
		}
	}

	//novo sinistro
	public function populateformpagamentosAction() {
		$this->isAjax();
		$this->view->form = new Sinistro_Form_DadosPagamento();
		$Model = new Nobre_Model_LiquidacoesPrevisaoPagamento();
	
		$return = $Model->getListPagamentos($this->getRequest()->getParam('id_pagamento'));
	
		if (is_array($return)) {
			$return['id'] = $return['id'] ? $return['id'] : '';
			$return['dt_pagamento'] = $return['dt_pagamento'] ? Agro_Util::formatDate($return['dt_pagamento'], Zend_Date::DATES) : '';
			$return['vl_pagamento'] = $return['vl_pagamento'] ? $return['vl_pagamento'] : '';
			$return['dt_confirmacao_pagamento'] = $return['dt_confirmacao_pagamento'] ? Agro_Util::formatDate($return['dt_confirmacao_pagamento'], Zend_Date::DATES) : '';
			$return['comprovante'] = $return['comprovante'] ? $return['comprovante'] : '';
			$return['id_comprovante'] = $return['id_comprovante'] ? $return['id_comprovante'] : '';
			$return['id_liquidacao'] = $return['id_liquidacao'] ? $return['id_liquidacao'] : '';
	
			$this->nome_comprovante = $return['comprovante'] ? $return['comprovante'] : '';

			$this->getResponse()->setBody(Zend_Json::encode($return));
		}
	}	
	////////////
	
	public function deleteitemseguradocoberturaAction(){
		$this->isAjax();
		$Model = $this->getModel();
		if($this->getRequest()->getParam('id_liquidacao') && $this->getRequest()->getParam('id_item_segurado')){
			if($Model->deleteItemSeguradoCobertura($this->getRequest()->getParam('id_liquidacao'),$this->getRequest()->getParam('id_item_segurado'))){
				$return['status'] = true;
				$return['id_proposta'] = $this->getRequest()->getParam('id_proposta');
				$return['id_processo'] = $this->getRequest()->getParam('id_processo');
				$return['id_liquidacao'] = $this->getRequest()->getParam('id_liquidacao');
				$return['id_cobertura'] = $this->getRequest()->getParam('id_cobertura');
				$return['avulso'] = 0;
				//$this->_forward("index", "liquidacao", "sinistro", array("id_proposta" => $this->getRequest()->getParam('id_proposta'),"id_processo" => $this->getRequest()->getParam('id_processo'), "id_cobertura" => $this->getRequest()->getParam('id_cobertura'), "avulsa" => 0));
			}
		}else{
			$return['message'] = 'Erro ao excluir a quadra.';
		}
		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function dadospagamentoAction(){
		$this->isAjax(true);

		$Model = $this->getModel();
		$ModelLiquidacao = new Sinistro2_Model_Liquidacoes();

		$this->view->form = $this->getForm();

		$params = $this->getRequest()->getParams();

		$this->view->liquidacao = $ModelLiquidacao->getLiquidacao($params['id_liquidacao']);
		$this->view->form->populate($params);
		
		$pagamentos = $ModelLiquidacao->getPagamentosByProcesso($this->view->liquidacao['id_processo'], $params['id_liquidacao'])[0];
		
		$this->view->list = $pagamentos;
		$this->view->isView = ($this->getRequest()->getParam("view") ? 1 : 0);

		$this->view->nome_comprovante = $pagamentos['ds_nome_arquivo'];
		$this->view->id_comprovante = $pagamentos['id_arquivo'];
	}
	
	//novo sinistro
	public function pagamentoliquidacaoAction(){

		$this->isAjax(true);
		$params = $this->getRequest()->getParams();

		$ModelLiquidacao = new Sinistro2_Model_Liquidacoes();
		
		$this->view->liquidacoes = $ModelLiquidacao->getListaLiquidacoes($params['id_proposta'], $params['id_processo']);
		
		if($params['id_pagamento'] > 0){
			
			$ids_liquidacoes = $ModelLiquidacao->getListaLiquidacoesPorPagamento($params['id_proposta'], $params['id_processo'], $params['id_pagamento']);
			
			foreach ($ids_liquidacoes as $key => $idLiq){
				$ids[$key] = $idLiq['id'];
				
			}
			
			$this->view->ids_liquidacoes = $ids;
		}
		
		$this->view->id_processo = $params['id_processo'];
		$this->view->form = new Nobre_Form_DadosPagamento();

	}
	//////////////////
	
	//novo sinistro
	public function savepagamentoliquidacaoAction(){
		$this->isAjax();

		$return = array("status"=>true, "message"=>"Previsão de pagamento salva com sucesso");
	
		$params = $this->getRequest()->getParams();

		$Model = $this->getModel();
		$Status = new Sistema_Model_Status();
		$ModelLiqPrevPag = new Nobre_Model_LiquidacoesPrevisaoPagamento();
		$ModelLiqPag = new Sinistro2_Model_LiquidacoesPagamentos();

		try {

			$ProcessosArquivos = new Sinistro_Model_ProcessosArquivos();

			if(is_array($params['id_liquidacao'])){
				foreach($params['id_liquidacao'] as $key => $id_liquidacao){
					if($key > 0){
						$idLiqConcatenado .= "_".$id_liquidacao;
					}else{
						$idLiqConcatenado .= $id_liquidacao;
					} 
				}
			}
			
			$arquivo = $this->anexarComprovante($idLiqConcatenado);

			if ($arquivo <> '') {
				$RowArquivos = $ProcessosArquivos->save($arquivo , $params['id_processo'], 'COMPROVANTE_TED_DOC');
			} elseif ($params['id_comprovante'] ){
				$arq = $ProcessosArquivos->getArquivo($params['id_comprovante']);
				$RowArquivos = $ProcessosArquivos->save($arq[0]['ds_nome_arquivo'], $params['id_processo'], 'COMPROVANTE_TED_DOC');
			}			

			$params['id_arquivo_processo'] = $RowArquivos;
			$params['id_liquidacao_previsao_pagamento'] = $ModelLiqPrevPag->saveSinistro2($params);			

			foreach($params['id_liquidacao'] as $key => $id_liquidacao){

				$params['id_liquidacao'] = $id_liquidacao;

				$ModelLiqPag->save($params);

				if($params['dt_confirmacao_pagamento']){
					//atualiza o status para INDENIZAÇÃO PAGA
					$Model->atualizaStatusLiquidacao($id_liquidacao, $Status->getIdStatus("INDENIZACAO_PAGA", "LIQUIDACOES"));
				}

				if ($RowArquivos) {
					$Liquidacoes = $Model->getLiquidacao($id_liquidacao);
					$this->sendMailComprovante($Liquidacoes['id_proposta'], $id_liquidacao);
				}				
			}

			$return['status'] = true;

		} catch (Exception $e) {
			die($e);
			$return["status"]	=	false;
			$return["message"]	="Não foi possível realizar a operação";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}
	///////////////////////

	public function savepagamentoAction(){
		$this->isAjax();
		$params = $this->getRequest()->getParams();
		
		$return = array("status"=>true, "message"=>"Previsão de pagamento salva com sucesso");

		$Model = $this->getModel();
		$Status = new Sistema_Model_Status();
		$ModelLiqPrevPag = new Nobre_Model_LiquidacoesPrevisaoPagamento();

		try {

			$ProcessosArquivos = new Sinistro_Model_ProcessosArquivos();
			$arquivo = $this->anexarComprovante($this->getRequest()->getParam('id_liquidacao'));
			$lqd = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne('select id_processo from sinistro.liquidacoes where id = '.$this->getRequest()->getParam('id_liquidacao'));
			
			if ($arquivo <> '') {
				$RowArquivos = $ProcessosArquivos->save($arquivo , $lqd, 'COMPROVANTE_TED_DOC');
			} elseif ( $this->getRequest()->getParam('id_comprovante') ){
				$arq = $ProcessosArquivos->getArquivo($this->getRequest()->getParam('id_comprovante'));
				$RowArquivos = $ProcessosArquivos->save( $arq[0]['ds_nome_arquivo'], $lqd, 'COMPROVANTE_TED_DOC');
			}

			$this->getRequest()->setParam('id_arquivo_processo', $RowArquivos);

			$ModelLiqPrevPag->save($this->getRequest()->getParams());
			
			if($this->getRequest()->getParam('dt_confirmacao_pagamento')){
				//atualiza o status para INDENIZAÇÃO PAGA
				$Model->atualizaStatusLiquidacao($this->getRequest()->getParam('id_liquidacao'), $Status->getIdStatus("INDENIZACAO_PAGA", "LIQUIDACOES"));
			}
			
			$return["id_liquidacao"] = $this->getRequest()->getParam('id_liquidacao');

			if ($RowArquivos) {
				$Liquidacoes = $Model->getLiquidacao($this->getRequest()->getParam('id_liquidacao'));
				$this->sendMailComprovante($Liquidacoes['id_proposta'], $return["id_liquidacao"]);
			}

		} catch (Exception $e) {
			$return["status"]=false;
			$return["message"]="Não foi possível realizar a operação";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	private function sendMailComprovante($proposta,$liquidacao) {

		if (($proposta) && ($liquidacao)) {

			$ModelPropostas = new Seguro_Model_Propostas();
			$Propostas = $ModelPropostas->get($proposta);

			if (APPLICATION_ENV == 'production') {
				$To = $Propostas->ds_email_corretor;
				$Cc = 'tiago.zschornack@agrobrasilseguros.com.br';
			} else {
				$To = 'tonismar.bernardo@agrobrasilseguros.com.br';
				$Cc = 'tonismar@gmail.com.br';
			}

			$assunto = "RECIBO/COMPROVANTE DE PAGAMENTO PROPOSTA {$Propostas->proposta_mae()} - SEGURADO {$Propostas->ds_nome_proponente} -  LIQUIDAÇÃO: {$liquidacao}";

			$content .= "\n\nInformamos que a seguradora disponibilizou para consulta e impressão via AgroNet® o respectivo recibo/comprovante de pagamento referente à proposta/liquidação indicados.\n";

			$content .= "\nObs.:  Alertamos que, em casos de pagamento em cheque, o mesmo já encontra-se remetido via correio e o respectivo recibo constante do AgroNet® deve ser encaminhado ";
			$content .= "assinado pelo segurado para a Essor Seguros, no endereço: Rua Visconde de Inhaúma, 83 – Sala 1501, centro – Rio de Janeiro/RJ – CEP  20091-007.\n\n";


			$content .= "\nAtenciosamente,\n";
			$content .= "\nAgroBrasil Operadora de Seguro Agrícola.\n";

			try {

				$Mail = new Agro_Mail();
				$Mail->addTo($To);
				$Mail->addCc($Cc);
				$Mail->setTipoUsuario('Usuário');
				$Mail->setBody($content);
				$Mail->setSubject($assunto);
				$Mail->send();

				return true;

			} catch (Exception $e) {
				return false;
			}
		} else {
			return false;
		}
	}

	/* Faz upload do arquivo de comprovante de pagamento de liquidação */
	public function anexarComprovante($idLiquidacao){
		try {
			$Adapter = new Zend_File_Transfer_Adapter_Http();
			$Adapter->setDestination(APPLICATION_PATH.'/upload_files/sinistro_processo/');
			$files = $Adapter->getFileInfo();

			if (!empty($files) && is_array($files)) {
				foreach ($files as $file) {
					$newFile = $idLiquidacao . '_comprovante.' . Agro_Util::getExtension($file['name']);
					$Adapter->addFilter('Rename', array('target' => APPLICATION_PATH.'/upload_files/sinistro_processo/' . $newFile, 'overwrite' => true));
					if ($Adapter->receive($file['name'])) {
						// não tem problema esse return dentro fo foreach porque sempre será apenas um arquivo.
						return $newFile;
					}
				}
			} else {
				return null;
			}

		} catch (Exception $e) {
			return $e->getMessage();
		}
	}

	public function deletepagamentoAction(){
		$this->isAjax();

		$ModelLiqPrevPag = new Nobre_Model_LiquidacoesPrevisaoPagamento();

		$return = array("status"=>true, "message"=>"Previsão de pagamento salva com sucesso");

		try {
			$ModelLiqPrevPag->delete($this->getRequest()->getParam("id"));
			$return["execute"] = "$('#tr_{$this->getRequest()->getParam("id")}').remove();";

		} catch (Exception $e) {
			$return["status"]=false;
			$return["status"]="Não foi possível realizar a operação";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}
}







