<?php
use Mpdf\Mpdf;

class Sinistro2_LiquidacaoController extends Agro_Controller_Action {

	public function init() {
		$this->view->title = 'Liquidação de Processos ';
	}

	public function getModel() {
		return new Sinistro2_Model_Liquidacoes();
	}

	public function indexAction()
    {
        $this->view->back = "/sinistro2/processo/view/id/{$this->getRequest()->getParam('id_processo')}#liquidacoes";

        $dados = array();
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $this->view->form = new Sinistro2_Form_Liquidacao();

        $dados['PARAMS'] = $this->getRequest()->getParams();
        $idCobertura = !isset($dados['PARAMS']['id_cobertura'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_cobertura'])
            ? 0
            : (int)$dados['PARAMS']['id_cobertura'];

        $idProcesso = !isset($dados['PARAMS']['id_processo'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_processo'])
            ? 0
            : (int)$dados['PARAMS']['id_processo'];

        $idProposta = !isset($dados['PARAMS']['id_proposta'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_proposta'])
            ? 0
            : (int)$dados['PARAMS']['id_proposta'];

        if ($this->getRequest()->getParam("id_liquidacao")) {
            $liquidacao = $this->getModel()->find($this->getRequest()->getParam("id_liquidacao"))->current();

            $dados['PARAMS']['ds_observacao'] = $liquidacao->ds_observacao;
        }

        if ($dados['PARAMS']['id_produto'] && $idCobertura) {
            $modelProdutoCobertura = new Produto_Model_ProdutosCoberturas;
            $dados['PARAMS']['tipo_liquidacao'] = $modelProdutoCobertura->getTipoLiquidacao(
                $dados['PARAMS']['id_produto'],
                $idCobertura
            );
        }

        $dados['QUADRAS'] = $modelLaudosFinais->getItens(
            $idProposta,
            $idProcesso,
            $dados['PARAMS']['avulsa'],
            $idCobertura,
            $dados['PARAMS']['id_produto']
        );

        $this->view->dados = $dados;
    }

	public function liquidacaoreplantioAction() {
		$this->indexAction();
	}

	public function liquidacaomultiriscoAction()
    {
        $this->view->back = "/sinistro2/processo/view/id/{$this->getRequest()->getParam('id_processo')}#liquidacoes";

        $dados = array();
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $this->view->form = new Sinistro2_Form_Liquidacao();

        $dados['PARAMS'] = $this->getRequest()->getParams();
        $idCobertura = !isset($dados['PARAMS']['id_cobertura'])
       || !Agro_Util::filterVariable($dados['PARAMS']['id_cobertura'])
            ? 0
            : (int)$dados['PARAMS']['id_cobertura'];

        $idProcesso = !isset($dados['PARAMS']['id_processo'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_processo'])
            ? 0
            : (int)$dados['PARAMS']['id_processo'];

        $idProposta = !isset($dados['PARAMS']['id_proposta'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_proposta'])
            ? 0
            : (int)$dados['PARAMS']['id_proposta'];

        if ($this->getRequest()->getParam("id_liquidacao")) {
            $liquidacao = $this->getModel()->find($this->getRequest()->getParam("id_liquidacao"))->current();

            $dados['PARAMS']['ds_observacao'] = $liquidacao->ds_observacao;
        }

        $dados['QUADRAS'] = $modelLaudosFinais->getItens(
            $idProposta,
            $idProcesso,
            $dados['PARAMS']['avulsa'],
            $idCobertura,
            $dados['PARAMS']['id_produto']
        );

        $this->view->dados = $dados;
    }

	public function loadAction(){
		$this->isAjax(true);

		$usuario = Zend_Auth::getInstance()->getIdentity();

		$idProposta = $this->getRequest()->getParam('id_proposta');
		$idProcesso = $this->getRequest()->getParam('id_processo');

		$Proposta          = new Seguro_Model_Propostas();
		$TipoLiquidacao    = new Sinistro2_Model_TipoLiquidacao();

		$AvisoEncerramento = new Sinistro2_Model_AvisosEncerramento();
		$LaudosFinais      = new Sinistro2_Model_LaudosFinais();
		$ProdutoCobertura  = new Produto_Model_ProdutosCoberturas();
		$Processo          = new Sinistro2_Model_Processos();
		$Liquidacoes       = new Sinistro2_Model_Liquidacoes();
		$processosCoberturasPendenciasModel = new Sinistro2_Model_ProcessosCoberturasPendencias();

		$RowProposta = $Proposta->getRow($idProposta);

		$Rs = $ProdutoCobertura->getTipoLiquidacaoByProduto($RowProposta->id_produto, $idProposta);

		$data = array();
		$data['id_produto'] = $RowProposta->id_produto;
		$data['idProposta'] = $idProposta;
		$data['idProcesso'] = $idProcesso;
		$data['dsStatusProcesso'] = $Processo->getChaveStatus($idProcesso);
		
		try {
			if (count($Rs) > 0) {
				foreach ($Rs as $key => $item) {
					if(($AvisoEncerramento->existeAvisoParaProposta($idProposta) /*&& $LaudosFinais->existeLaudoFinalEnviado($idProcesso)*/	) || ($item['ds_chave'] == 'LIQ05') || ($item['ds_chave'] == 'LIQ16') || ($item['ds_chave'] == 'LIQ18')){
						$RowTipoLiquidacao = $TipoLiquidacao->getRow($item['id_tipo_liquidacao']);

						$data['tipo'][$key]['ds_chave']                = $RowTipoLiquidacao->ds_chave;
						$data['tipo'][$key]['id_cobertura']            = $item['id_cobertura'];
						$data['tipo'][$key]['coberturas']              = $item['coberturas'];
						$data['tipo'][$key]['ds_nome_tipo_liquidacao'] = $RowTipoLiquidacao->ds_nome_tipo_liquidacao;
					}
				}
			}

			$data['liquidacoes'] = $Liquidacoes->getLiquidacoesByProcessoLiquidacaoTipo($idProcesso);
			
			if (count($data['liquidacoes']) > 0) {
                foreach ($data['liquidacoes'] as $liqKey => $liquidacao) {
                    if ($liquidacao['ds_chave'] == 'LIQ17') {
                        $data['liquidacoes'][$liqKey]['vl_indenizacao'] = (new Sinistro2_Model_Liquidacoes())->getValorIndenizacaoLiq17((int) $liquidacao['id_liquidacao']);
                        break;
                    } else {
                        break;
                    }
                }

				foreach ($data['liquidacoes'] as &$liq) {
					$liq['fl_carta_sem_indenizacao'] = false;
					
					if (
						in_array(
							$usuario->tp_usuario,
							[Sistema_Model_Usuarios::TIPO_USUARIO_FUNCIONARIO, Sistema_Model_Usuarios::TIPO_USUARIO_CORRETOR]
						) 
						&& $liq['id_status'] == Sinistro2_Model_Liquidacoes::ID_STATUS_SEM_INDENIZACAO
					) {
						if (file_exists(APPLICATION_PATH . "/upload_files/liquidacao_sem_indenizacao/carta_sem_indenizacao_{$idProposta}_{$liq['id_liquidacao']}.pdf")) {
							$liq['fl_carta_sem_indenizacao'] = true;
						}
					}
				}
			}
			
			$data['pagamentos']  = $Liquidacoes->getPagamentosByProcesso($idProcesso);
			$data['pendenciasCoberturas'] = $processosCoberturasPendenciasModel->getByProcesso($idProcesso);
			$this->view->data = $data;
			
		} catch (Exception $e) {
			print_r($e->getMessage());
			die;
		}

	}

	public function escolherliquidacaoAction() {
		$this->getHelper('layout')->disableLayout();
		$this->view->id_proposta = $this->getRequest()->getParam('id_proposta');
		$this->view->id_processo = $this->getRequest()->getParam('id_processo');

		$modelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
		$Rs = $modelProdutoCobertura->getTipoLiquidacaoByProduto($this->getRequest()->getParam('id_produto'));

		//$Rs = $modelPropostaCoberturas->getCoberturasByPropostaProdutoConfiguradoTipo($this->getRequest()->getParam('id_proposta'));

		$this->view->data = $Rs;
	}

	public function manualAction()
    {
        $this->view->back = "/sinistro2/processo/view/id/{$this->getRequest()->getParam('id_processo')}#liquidacoes";

        $model = $this->getModel();

        $dados = array();
        $dados['PARAMS'] = $this->getRequest()->getParams();

        if ($this->getRequest()->getParam("id_liquidacao")) {
            $liquidacao = $model->find($this->getRequest()->getParam("id_liquidacao")) - current();
            $dados['PARAMS']['ds_observacao'] = $liquidacao->ds_observacao;
        }

        $idProposta = !isset($dados['PARAMS']['id_proposta'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_proposta'])
            ? 0
            : (int)$dados['PARAMS']['id_proposta'];

        $idProcesso = !isset($dados['PARAMS']['id_processo'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_processo'])
            ? 0
            : (int)$dados['PARAMS']['id_processo'];

        $idCobertura = !isset($dados['PARAMS']['id_cobertura'])
        || !Agro_Util::filterVariable($dados['PARAMS']['id_cobertura'])
            ? 0
            : (int)$dados['PARAMS']['id_cobertura'];

        $dados['QUADRAS'] = $model->getItensLiquidacaoManual($idProposta, $idProcesso, $idCobertura);

        $this->view->form = new Sinistro2_Form_Liquidacao();
        $this->view->dados = $dados;
    }

	public function pendenciasprocessocoberturaAction()
	{
		$this->isAjax(true);
		$this->view->idProposta = $this->getRequest()->getParam("id_proposta");
		$this->view->idProcesso = $this->getRequest()->getParam("id_processo");
		$this->view->idProduto = $this->getRequest()->getParam("id_produto");
		$this->view->idCobertura = $this->getRequest()->getParam("id_cobertura");

		$pendenciasModel = new Atendimento_Model_Pendencia();
		$rs = $pendenciasModel->fetchAll(
            $pendenciasModel->getData(
                [
                    [
                        'field' => 'tp.ds_chave',
                        'operator' => '=',
                        'value' => 'PENDENCIA_PROCESSOS_COBERTURAS',
                    ],
                    [
                        'field' => 'fl_ativo',
                        'operator' => '=',
                        'value' => 't',
                    ]
                ]
            )
        )->toArray();
		$this->view->pendencias = [];

        foreach ($rs as $registro) {
            $this->view->pendencias[$registro['id']] = $registro['ds_nome_pendencia'];
        }

        asort($this->view->pendencias);
	}

	public function savependenciasprocessocoberturaAction()
	{
		$this->isAjax();
		
		$return = [
			'message' => 'Pendência salva com sucesso.',
			'error' => false
		];

		try {
			Zend_Db_Table::getDefaultAdapter()->beginTransaction();
			$processosCoberturasPendenciasModel = new Sinistro2_Model_ProcessosCoberturasPendencias();

			$observacao = '';
			foreach($this->getRequest()->getParam('pendencias_cobertura') as $pendencia){
				$observacao .= $pendencia."\n";
			}
			$observacao .= $this->getRequest()->getParam('ds_observacao_cobertura');

			if (empty($this->getRequest()->getParam('id_processo'))) {
				throw new Exception("Id do processo não informado.");
			}

			if (empty($this->getRequest()->getParam('id_cobertura'))) {
				throw new Exception("Id da cobertura não informado.");
			}

			if (empty($this->getRequest()->getParam('id_produto'))) {
				throw new Exception("Id do produto não informado.");
			}

			if (empty($observacao)) {
				throw new Exception("Observação não informada.");
			}

			$dados = [];
			$dados['id_processo'] = $this->getRequest()->getParam('id_processo');
			$dados['id_cobertura'] = $this->getRequest()->getParam('id_cobertura');
			$dados['id_produto'] = $this->getRequest()->getParam('id_produto');
			$dados['ds_observacao'] = $observacao;

			if (!$processosCoberturasPendenciasModel->save($dados)) {
				throw new Exception("Erro ao salvar a pendência.");
			}

			Zend_Db_Table::getDefaultAdapter()->commit();
		} catch (Exception $e) {
			$return['message'] = $e->getMessage();
			$return['error'] = true;
			Zend_Db_Table::getDefaultAdapter()->rollBack();
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));	
	}

	public function liquidadosAction() {
		$modelLiquidacao = new Sinistro2_Model_Liquidacoes();
		$modelProposta = new Seguro_Model_Propostas();
		$modelStatus = new Sistema_Model_Status();
		$modelPagamentoAdicional = new Sinistro2_Model_LiquidacaoPagamentoAdicional();
		$Motivos = new Sinistro2_Model_MotivosLiquidacaoSemIndenizacao();

		$this->view->title .= '» Liquidados';

		$usuario = Zend_Auth::getInstance()->getIdentity();

		$this->view->comboStatusPagamentoAdicional = (new Sistema_Model_Status())->getCombo('LIQUIDACAO_PAGAMENTO_ADICIONAL');

		$params = $this->getRequest()->getParams();
		$dados = $modelLiquidacao->getLiquidacao($params['id_liquidacao']);
		
		$this->view->pagamentoAdicional = $modelPagamentoAdicional
			->getPagamentoAdicional($params['id_liquidacao']);

		$idStatusIndenizacaoPaga = $modelStatus
			->getId('INDENIZACAO_PAGA', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');
		$idStatusAguardandoRevisao = $modelStatus
			->getId('AGUARDANDO_REVISAO', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');
		$idStatusAguardandoPagamento = $modelStatus
			->getId('AGUARDANDO_PAGAMENTO', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');

		$this->view->permissaoIncluir = $usuario->id_empresa == Sistema_Model_Empresas::AGROBRASIL;

		$idUsuarioResponsavelCriacao = $modelPagamentoAdicional
			->getIdUsuarioResponsavelCriacao($params['id_liquidacao']);

		$historicoPagamentoAdicional = $modelPagamentoAdicional->getHistorico($params['id_liquidacao']);
		$this->view->displayBotaoHistorico = $historicoPagamentoAdicional->count() ? 'display:inline-block' : 'display:none';
		
		$this->view->permissaoEditarExcluir = $usuario->ds_chave === 'ADMIN'
			|| in_array(
				$usuario->ds_nome_usuario,
				Sinistro2_Service_SalvarLiquidacaoPagamentoAdicional::USUARIOS_PERMISSAO_EDICAO
			) || (
				$usuario->id == $idUsuarioResponsavelCriacao
				&& !in_array(
					$this->view->pagamentoAdicional->id_status,
					[
						$idStatusIndenizacaoPaga,
						$idStatusAguardandoRevisao,
						$idStatusAguardandoPagamento
					]
				)
			);
		
		$Proposta = $modelProposta->find($dados["id_proposta"])->current();

		$dados["liq_pg"] = $Proposta->isPg();

		$this->view->back = '/sinistro2/processo/view/id/' . $dados['id_processo'].'#liquidacoes';

		//Busca os beneficiÃ¡rios
		$Beneficiarios = new Seguro_Model_PropostasBeneficiarios();
		$this->view->beneficiarios = $Beneficiarios->getBeneficiarios($dados['id_proposta']);

		//Busca as datas de encerramento
		$modelEncerramento = new Sinistro2_Model_AvisosEncerramento();
		$dataEncerramento = $modelEncerramento->getDataEncerramentoItensSegurados($dados['id_proposta']);
		$this->view->dataEncerramento = $dataEncerramento;

		$replantioAviso = ($dados['tipo_liquidacao'] == 'LIQ18' ? true : null);
		// Busca avisos pelo id da proposta
		$Aviso = new Sinistro2_Model_AvisosSinistro();
		$this->view->avisos = $Aviso->getAvisosByProposta($dados['id_proposta'], 'ACEITO', $replantioAviso);

		// Busca os status de revisÃ£o
		$FormRevisao = new Sinistro2_Form_LiquidacaoRevisao();
		$FormRevisao->populate($dados);

		// Busca os motivos para indenização não paga
		$this->view->motivos = $Motivos->getByLiquidacao($params['id_liquidacao']);

		$this->view->form = $FormRevisao;
		$this->view->proponente = $Proposta->proponente();
		$this->view->dados = $dados;

		$idProcesso = $dados['id_processo'];

		$this->view->formUpload = new Sinistro2_Form_UploadArquivoProcesso();
        $this->view->formUpload->id_processo->setValue($idProcesso);
	}

	public function liquidadosviewAction() {
		$this->getHelper('layout')->setLayout('popup');

		$modelLiquidacao = new Sinistro2_Model_Liquidacoes();
		$modelProposta = new Seguro_Model_Propostas();

		$this->view->title .= '» Liquidados';
		$dados = array();

		$params = $this->getRequest()->getParams();
		$dados = $modelLiquidacao->getLiquidacao($params['id_liquidacao']);

		$this->view->back = '/sinistro2/processo/view/id/' . $dados['id_processo'].'#liquidacoes';

		$this->view->dados = $dados;
	}

	public function printAction() {

		if ($this->getRequest()->getParam('pdf')) {
			$this->isAjax();
		} else {
			$this->getHelper('layout')->setLayout('popup');
		}

		$modelLiquidacao = new Sinistro2_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 Sinistro2_Model_Processos();
		$idProcesso = $params['id_processo'];
		$this->view->processo = $modelProcesso->find($idProcesso)->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 Sinistro2_Model_AvisosEncerramento();
		$dataEncerramento = $modelEncerramento->getDataEncerramentoItensSegurados($dados['id_proposta']);
		$this->view->dataEncerramento = $dataEncerramento;

		$replantioAviso = ($dados['tipo_liquidacao'] == 'LIQ18' ? true : null);
		// Busca avisos pelo id da proposta
		$Aviso = new Sinistro2_Model_AvisosSinistro();
		$this->view->avisos = $Aviso->getAvisosByProposta($dados['id_proposta'], 'ACEITO', $replantioAviso);

		$TipoLiquidacao = new Sinistro2_Model_TipoLiquidacao();
		if ($dados['id_tipo_liquidacao']) {
			$dados['ds_nome_liquidacao_avulsa'] = $TipoLiquidacao->getNomeLiquidacaoAvulsa($dados['id_tipo_liquidacao']);
		}

		$this->view->dados = $dados;

		if ($this->getRequest()->getParam('pdf')) {
			$result = $this->geraPDF($this->view, $dados);
			$this->getResponse()->setBody(Zend_Json::encode($result));
		}
	}

	//Gerar arquivo pdf baseado no render da view
	private function geraPDF($view, $dados) {
		$result = array();
		$Db = Agro_Db_Table_Abstract::getDefaultAdapter();
		$Db->beginTransaction();
		$dados['id_tipo_arquivo'] = 18;

		try {
			// Gera o nome do novo arquivo
			$TipoArquivoProcesso = new Sistema_Model_TipoArquivoProcesso();
			$TipoArquivo = $TipoArquivoProcesso->fetchRow($TipoArquivoProcesso->getAdapter()->quoteInto('id = ?', $dados['id_tipo_arquivo']))->toArray();

			$ProcessoArquivo = new Sinistro2_Model_ProcessosArquivos();
			$id = $ProcessoArquivo->nextSequenceId();

			$Processo = new Sinistro2_Model_Processos();
			$RowProcesso = $Processo->find($dados['id_processo']);

			$nomeArquivo = $RowProcesso[0]['id_proposta']."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$dados['id_liquidacao'].".pdf";
			$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;

			$Row = $ProcessoArquivo->fetchRow("ds_nome_arquivo = '".$nomeArquivo."'");

			// Caso não encontrei com o id_proposta, verificamos com o novo padrão de nomenclatura que é id_proposta_mae
			if (!$Row->id) {
				$idPropostaMae = $Processo->getPropostaMaeByProcesso($dados['id_processo']);
				if (!empty($idPropostaMae)) {
					$nomeArquivo = $idPropostaMae."_".$TipoArquivo['ds_chave_tipo_arquivo']."_".$dados['id_liquidacao'].".pdf";
					$target = APPLICATION_PATH.'/upload_files/sinistro_processo/'.$nomeArquivo;
					$Row = $ProcessoArquivo->fetchRow("ds_nome_arquivo = '".$nomeArquivo."'");
				}
			}

			if (!$Row->id) {
				// Salva registro na tabela processos_arquivos
				$data = array();
				$data['id'] = $id;
				$data['id_processo'] = $dados['id_processo'];
				$data['id_tipo_arquivo'] = $dados['id_tipo_arquivo'];
				$data['ds_nome_arquivo'] = $nomeArquivo;

				$ProcessoArquivo->insert($data);
			} else {
				$ProcessoArquivo->update(array('fl_ativo' => true),"id = $Row->id");
			}

			if(
				$TipoArquivo['ds_chave_tipo_arquivo'] != 'LIQUIDACAO'
				&& $TipoArquivo['ds_chave_tipo_arquivo'] != 'DIFERENCA_LIQUIDACAO'
			){
				$RowProcesso = $Processo->getRow($dados['id_processo']);
				$RowProcesso->id_status_arquivos = $Processo->getIdStatus('NAO_ANALISADO', 'ARQUIVOS_PROCESSO_SINISTRO');
				$RowProcesso->save();
			}

			$Db->commit();

	 		$Pdf = new Agro_Pdf();
	 		$Pdf->setContent($view->render('liquidacao/print.phtml'));
	 		$Pdf->setFilename($target);
	 		$Pdf->generate();

			$transmitido = $this->transmitirArquivoEssor($dados['id_processo'], (empty($Row->id) ? $id : $Row->id), $dados['id_tipo_arquivo'], $nomeArquivo, $target);
			if ($transmitido['status'] == false) {
				throw new Exception("ATENÇÃO: Erro ao enviar arquivo para seguradora.");
			}

	 		$result['status'] = true;
	 		$result['message'] = 'Arquivo '.$nomeArquivo.' gerado com sucesso!';
		} catch (Exception $e) {
	 		$result['status'] = false;
	 		$result['message'] = $e->getMessage();
	 	}

	 	return $result;
	}

	public function liquidadosreloadAction() {
		$this->isAjax(true);

		$modelLiquidacao = new Sinistro2_Model_Liquidacoes();
		$dados = array();

		$params = $this->getRequest()->getParams();
		$dados = $modelLiquidacao->getLiquidacao($params['id_liquidacao']);

		$this->view->back = '/sinistro2/processo/view/id/' . $dados['id_processo'];

		$this->view->dados = $dados;
	}

	public function liquidarAction()
    {
        $this->isAjax();

        $modelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $modelProposta = new Seguro_Model_Propostas();
        $modelSafras = new Produto_Model_Safras();
        $modelProduto = new Produto_Model_Produtos();
        $modelLiquidacaoStatus = new Sinistro2_Model_LiquidacoesStatus();
        $modelInformacoesBancarias = new Seguro_Model_InformacoesBancarias();
        $return = array();

        $params = $this->getRequest()->getParams();
        $idProposta = !Agro_Util::filterVariable($params['id_proposta']) ? 0 : (int)$params['id_proposta'];
        $idProcesso = !Agro_Util::filterVariable($params['id_processo']) ? 0 : (int)$params['id_processo'];
        $idCobertura = !Agro_Util::filterVariable($params['id_cobertura']) ? 0 : (int)$params['id_cobertura'];

        try {
            $proposta = $modelProposta->find($idProposta)->current();
            $return = [];
            $params['ds_chave_produto'] = $modelProduto->getChaveProdutoById($proposta->id_produto);

            if (!$params['id_item_segurado']) {
                $return['status'] = false;
                $return['message'] = 'Nenhum item selecionado.';
            } elseif (!$params['tp_liquidacao']) {
                $return['status'] = false;
                $return['message'] = "Selecione o tipo da liquidação!";
            }

            if (array_key_exists('status', $return)) {
                $this->getResponse()->setBody(Zend_Json::encode($return));
                return;
            }

            // Vincula dados bancários do beneficiário a proposta
            $rsInformacoesBancariasBeneficiarios = (new Seguro_Model_InformacoesBancariasBeneficiarios())
                ->getInformacoesBancariasBeneficiariosByProposta((int)$proposta['id']);

            foreach ($rsInformacoesBancariasBeneficiarios as $info) {
                /**
                 * Análise deve estar concluída e dados bancários dos beneficiários não podem estar vinculados a
                 * proposta
                 */
                if (
                    $info['id_status_arquivos'] != Seguro_Model_Beneficiarios::ID_STATUS_ARQUIVOS_ANALISE_CONCLUIDA
                    || !empty($info['id_seguro_informacoes_bancarias'])
                ) {
                    continue;
                }

                $informacoesBancariasBeneficiario = [
                    'cpf_cnpj' => $info['nr_cpf_cnpj'],
                    'id_proposta' => $proposta['id'],
                    'id_banco' => $info['id_banco'],
                    'nu_conta_corrente' => $info['ds_conta'],
                    'nu_digito_conta_corrente' => $info['nu_digito_conta'],
                    'nu_agencia' => $info['ds_agencia'],
                    'nu_digito_agencia' => $info['nu_digito_agencia'],
                    'id_forma_pagamento' => $info['id_forma_pagamento']
                ];

                if (!$modelInformacoesBancarias->save($informacoesBancariasBeneficiario)) {
                    throw new Exception('Erro ao salvar as informações bancárias referentes ao beneficiário.');
                }
            }

            if ($idCobertura) {
                $tipoLiquidacao = $modelProdutoCobertura->getTipoLiquidacao(
                    $proposta->id_produto,
                    $idCobertura
                );


            } else {
                $tipoLiquidacao = $modelProdutoCobertura->getTipoLiquidacao(
                    $proposta->id_produto,
                    $proposta->coberturaPrincipal()
                );
            }

            $liquidacoes = new Sinistro2_Model_Liquidacoes();

            $params['id_liquidacao'] = $liquidacoes->save(
                array(
                    'id_liquidacao' => $params['id_liquidacao'],
                    'id_processo' => $idProcesso,
                    'tp_liquidacao' => $params['tp_liquidacao'],
                    'ds_observacao' => $params['ds_observacao'],
                    'id_tipo_liquidacao' => $tipoLiquidacao['id_tipo_liquidacao']
                )
            );

            if (!$params['id_liquidacao']) {
                throw new Exception('Erro ao salvar a liquidação.');
            }

            $model = $modelSafras->getSafraModel($idProposta, $tipoLiquidacao['ds_chave']);

            $liquidacao = new $model();

            foreach ($params['id_item_segurado'] as $item_segurado) {
                $newParams = $params;
                $itemSegurado = !Agro_Util::filterVariable($item_segurado) ? 0 : (int)$item_segurado;
                $newParams['id_item_segurado'] = $itemSegurado;

                $newParams['laudos'] = $modelLaudosFinais->getLaudos(
                    $idProcesso,
                    $idProposta,
                    $itemSegurado,
                    $params['avulsa'],
                    false,
                    $idCobertura,
                    ($tipoLiquidacao['ds_chave'] == 'LIQ10'),
                    $tipoLiquidacao['ds_chave']
                );

                /*
                 * Se tiver laudo final digitado ou
                 * For cobertura Proteção Fitossanitaria (16)
                 *
                 * Executa a liquidação normal, senão, liquida zerado
                 */
                if (count($newParams['laudos']) || $idCobertura == 16) {
                    $return = $liquidacao->liquidar($newParams);
                } else {
                    $return = $liquidacoes->liquidarZerado($newParams);
                }

                $return['id_liquidacao'] = $params['id_liquidacao'];
                $return['id_proposta'] = $idProposta;
                $return['id_processo'] = $idProcesso;
            }

            if (!$return['status']) {
                $modelLiquidacaoStatus->delete($params['id_liquidacao'], "id_liquidacao");
                $liquidacoes->delete($params['id_liquidacao']);

                foreach ($rsInformacoesBancariasBeneficiarios as $info) {
                    $modelInformacoesBancarias->deleteByPropostaCpfCnpj(
                        (int)$info['id_proposta'],
                        $info['cpf_cnpj']
                    );
                }
            }
        } catch (Exception $e) {
            $return['status'] = false;
            $return['message'] = "Não foi possível liquidar. \nErro: {$e->getMessage()}";
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

	public function liquidarmultiriscoAction()
    {
        $this->isAjax();
        $return = array();

        $modelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
        $modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
        $modelProposta = new Seguro_Model_Propostas();
        $modelProduto = new Produto_Model_Produtos();
        $modelSafras = new Produto_Model_Safras();
        $modelItemSegurado = new Seguro_Model_ItensSegurados();

        $params = $this->getRequest()->getParams();
        $idProposta = !Agro_Util::filterVariable($params['id_proposta']) ? 0 : (int)$params['id_proposta'];
        $idProcesso = !Agro_Util::filterVariable($params['id_processo']) ? 0 : (int)$params['id_processo'];
        $idCobertura = !Agro_Util::filterVariable($params['id_cobertura']) ? 0 : (int)$params['id_cobertura'];

        try {
            $params['tp_liquidacao'] = 'T';

            $proposta = $modelProposta->find($idProposta)->current();

            $params['ds_chave_produto'] = $modelProduto->getChaveProdutoById($proposta->id_produto);

            if ($idCobertura) {
                $tipoLiquidacao = $modelProdutoCobertura->getTipoLiquidacao($proposta->id_produto, $idCobertura);
            } else {
                $tipoLiquidacao = $modelProdutoCobertura->getTipoLiquidacao(
                    $proposta->id_produto,
                    $proposta->coberturaPrincipal()
                );
            }

            $liquidacoes = new Sinistro2_Model_Liquidacoes();

            $params['id_liquidacao'] = $liquidacoes->save(
                array(
                    'id_liquidacao' => $params['id_liquidacao'],
                    'id_processo' => $idProcesso,
                    'tp_liquidacao' => $params['tp_liquidacao'],
                    'ds_observacao' => $params['ds_observacao'],
                    'id_tipo_liquidacao' => $tipoLiquidacao['id_tipo_liquidacao']
                )
            );

            $model = $modelSafras->getSafraModel($idProposta, $tipoLiquidacao['ds_chave']);
            $liquidacao = new $model();
            $newParams = $params;

            foreach ($params['id_item_segurado'] as $item_segurado) {
                $newParams['itens'][$item_segurado] = array();
                $itemSegurado = $modelItemSegurado->find($item_segurado)->current();
                $itemSeguradoComplemento = $itemSegurado->complemento();

                $laudos = $modelLaudosFinais->getLaudos(
                    $idProcesso,
                    $idProposta,
                    (int)$item_segurado,
                    $params['avulsa'],
                    false,
                    $idCobertura,
                    true
                );

                if (count($laudos) > 1) {
                    $mensagem = 'Esta liquidação não permite mais de um laudo. Para tal, utilize a liquidação manual';
                    throw new Exception($mensagem, 1);
                }

                $newParams['itens'][$item_segurado] = array_merge($newParams['itens'][$item_segurado], $laudos[0]);

                if (count($laudos)) {

                    //calculo da produtividade obtida média da quadra POMQ
                    if ($newParams['itens'][$item_segurado]['vl_percent_colhido'] < 100) {
                        $newParams['itens'][$item_segurado]['pomq'] = round(((($newParams['itens'][$item_segurado]['vl_percent_colhido'] / 100) * $itemSegurado->vl_area * $itemSegurado->vl_rendimento_tonelada) + ((1 - ($newParams['itens'][$item_segurado]['vl_percent_colhido'] / 100)) * ($itemSegurado->vl_area * $newParams['itens'][$item_segurado]['vl_rendimento_final_lavoura']))) / $itemSegurado->vl_area, 3);
                    } else {
                        $newParams['itens'][$item_segurado]['pomq'] = $itemSegurado['vl_rendimento_tonelada'];
                    }

                    $newParams['itens'][$item_segurado]['mpa'] = $newParams['itens'][$item_segurado]['pomq'] * $itemSegurado->vl_area;
                    $newParams['itens'][$item_segurado]['percent_indenizacao'] = (($itemSeguradoComplemento['vl_producao_garantida'] - $newParams['itens'][$item_segurado]['pomq']) / $itemSeguradoComplemento['vl_producao_garantida']) * 100;
                    $newParams['itens'][$item_segurado]['vl_producao_garantida'] = $itemSeguradoComplemento['vl_producao_garantida'];

                    $sum_mpa += $newParams['itens'][$item_segurado]['mpa'];
                    $sum_area += $itemSegurado->vl_area;
                    $sum_lmga += $itemSegurado->vl_lmga;
                    $sum_area_pg += $itemSegurado->vl_area * $itemSeguradoComplemento['vl_producao_garantida'];
                }
            }

            $newParams['lmga_total'] = $sum_lmga;
            $newParams['produtividade_garantida_media'] = $sum_area_pg / $sum_area;
            $newParams['produtividade_obtida_media'] = $sum_mpa / $sum_area;
            $newParams['percentual_indenizacao'] = round((($newParams['produtividade_garantida_media'] - $newParams['produtividade_obtida_media']) / $newParams['produtividade_garantida_media']), 4);
            $newParams['percentual_indenizacao'] = round($newParams['percentual_indenizacao'] * 100, 2);
            $return = $liquidacao->liquidar($newParams);

            $return['id_liquidacao'] = $params['id_liquidacao'];
            $return['id_proposta'] = $idProposta;
            $return['id_processo'] = $idProcesso;

        } catch (Exception $e) {
            $return['status'] = false;
            $return['message'] = "Não foi possível liquidar. \nErro: {$e->getMessage()}";
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

	public function liquidarmanualAction() {
		$this->isAjax();
 
		$modelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
		$modelLaudosFinais = new Sinistro2_Model_LaudosFinais();
		$modelProposta = new Seguro_Model_Propostas();
		$modelSafras = new Produto_Model_Safras();
		$modelProduto = new Produto_Model_Produtos();
		$modelCoberturas = new Produto_Model_Coberturas();

		$return = array();

		$params = $this->getRequest()->getParams();

		$Proposta = $modelProposta->find($params['id_proposta'])->current();

		$params['ds_chave_produto'] = $modelProduto->getChaveProdutoById($Proposta->id_produto);

		if ($params['id_item_segurado']) {

			if($params['tp_liquidacao']){

				$valid = true;
				$message = array();

				foreach ($params['id_item_segurado'] as $item_segurado) {

					foreach ($params["coberturas-$item_segurado"] as $cobertura) {
						if (!$params["vl_prejuizo_total-$item_segurado-$cobertura"]) {
							$message[] = "- Item Segurado $item_segurado cobertura {$modelCoberturas->getNameById($cobertura)}, prencher Prejuízo.";
						}

						if (!$params["vl_indenizacao-$item_segurado-$cobertura"]) {
							$message[] = "- Item Segurado $item_segurado cobertura {$modelCoberturas->getNameById($cobertura)}, prencher Indenização.";
						}
					}
				}

				if (array_count_values($message)) {
					$valid = false;
					$return['status'] = false;
					$return['message'] = "É necessá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 Sinistro2_Model_Liquidacoes();

					$params['id_liquidacao'] = $Liquidacoes->save(
							array(
								'id_liquidacao' => $params['id_liquidacao'],
								'id_processo' => $params['id_processo'],
								'tp_liquidacao' => $params['tp_liquidacao'],
								'ds_observacao' => $params['ds_observacao'],
								'id_tipo_liquidacao' => 5
							)
					);

					$model = $modelSafras->getSafraModel($params['id_proposta'], "LIQ05");

					$liquidacao = new $model();

					foreach ($params['id_item_segurado'] as $item_segurado) {

						$newParams = $params;
						$newParams['id_item_segurado'] = $item_segurado;

						$return = $liquidacao->liquidar($newParams);

						$return['id_liquidacao'] = $params['id_liquidacao'];
						$return['id_proposta'] = $params['id_proposta'];
						$return['id_processo'] = $params['id_processo'];
					}

					if (!$return['status']) {
						//$Liquidacoes->delete($params['id_liquidacao']);
					}
				}
			}else{
				$return['status'] = false;
				$return['message'] = "Selecione o tipo da liquidação!";
			}
		} else {
			$return['status'] = false;
			$return['message'] = "Selecione ao menos uma quadra para liquidar!";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function deleteliquidacaoAction() {
		$this->isAjax();

		if ($this->getRequest()->getParam('id_proposta') && $this->getRequest()->getParam('id_processo')) {
			if (is_array($this->getRequest()->getParam('liquidacoes'))) {
				$modelLiquidacao = new Sinistro2_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();
				$LiqCob        = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturas();
				$modelProposta = new Seguro_Model_Propostas();

				/*
				 * Distribui o valor TOTAL DA INDENIZAÃ‡ÃƒO entre os Beneficiaros da Proposta e Segurado
				* Esses valores separados serÃ£o utilizados posteriormente pela Seguradora, para efetuar os pagamentos
				*/
				$idProposta      = $model->getPropostaByLiquidacao($this->getRequest()->getParam('id'));
				$idCobertura     = $this->getRequest()->getParam('id_cobertura');
				$Proposta        = $modelProposta->find($idProposta)->current();
				$vlIndenizacao   = $LiqCob->getTotalIndenizacao($this->getRequest()->getParam('id'));
				$Beneficiarios   = $Proposta->beneficiarios();
				$Proponente      = $Proposta->proponente();
				$modelLiqPrevPag = new Nobre_Model_LiquidacoesPagamentoBeneficiarios();

				$count = 1;

				if(is_array($Beneficiarios) && ($idCobertura <> '16' && $idCobertura <> '5' && $idCobertura <> '11')){
					foreach($Beneficiarios as $benef){
						$somaBenef += $benef['vl_limite_beneficio'];
					}

					foreach($Beneficiarios as $benef){
						if($benef['ds_tipo_conta'] == 's'){
							$ds_nome_beneficiario = $benef['ds_nome_banco'];
						} else {
							$ds_nome_beneficiario = $benef['ds_nome_beneficiarios'];
						}

						if($count == 1){
							$percentBenef = round(($benef['vl_limite_beneficio'] / $somaBenef),4);
						} else {
							$percentBenef = 1 - $percentBenef;
						}

						$vlBenef = round(min($benef['vl_limite_beneficio'], ($vlIndenizacao * $percentBenef)),2);

						if($arBenef[$idProposta][$benef['nr_cpf_cnpj']] + $vlBenef > $benef['vl_limite_beneficio']){
							$vlBenef = $benef['vl_limite_beneficio'] - $arBenef[$idProposta][$benef['nr_cpf_cnpj']];
						}

						$totalBenef += ($vlBenef > 0 ? $vlBenef : '0.0');

						$arr[$count]['ds_nome_beneficiario']     = $ds_nome_beneficiario;
						$arr[$count]['ds_cpf_cnpj_beneficiario'] = $benef['nr_cpf_cnpj'];
						$arr[$count]['ds_valor_beneficiario']    = ($vlBenef > 0 ? $vlBenef : '0.0');

						$arBenef[$idProposta][$benef['nr_cpf_cnpj']] += $vlBenef;

						$count++;
					}

					$difBenef = $vlIndenizacao - $totalBenef;
					if($difBenef > 0.01 ){
						$arr[$count]['ds_nome_beneficiario']     = $Proponente['ds_nome_proponente'];
						$arr[$count]['ds_cpf_cnpj_beneficiario'] = $Proponente['cpf_cnpj'];
						$arr[$count]['ds_valor_beneficiario']    = $difBenef;
					}

				} else {
					$arr[$count]['ds_nome_beneficiario']     = $Proponente['ds_nome_proponente'];
					$arr[$count]['ds_cpf_cnpj_beneficiario'] = $Proponente['cpf_cnpj'];
					$arr[$count]['ds_valor_beneficiario']    = $vlIndenizacao['vl_indenizacao'];
				}

				$modelLiqPrevPag->deleteInformacoesPagamento($this->getRequest()->getParam('id'));
				foreach($arr as $chave => $pagamento){
					$dados['id_liquidacao']            = $this->getRequest()->getParam('id');
					$dados['cpf_cnpj']                 = $pagamento['ds_cpf_cnpj_beneficiario'];
					$dados['ds_nome_beneficiario']     = $pagamento['ds_nome_beneficiario'];
					$dados['cd_liquidacao_seguradora'] = '99999';
					$dados['vl_estimado_pagamento']    = $pagamento['ds_valor_beneficiario'];
					$modelLiqPrevPag->save($dados);
				}

				if ($model->atualizaStatusLiquidacao($this->getRequest()->getParam('id'), $this->getRequest()->getParam('id_status'))) {

					if ($this->getRequest()->getParam('id_status') == Agro_Util::getIdStatus("ENVIADA_SEGURADORA")) {
						$return = array('status' => 'liberar', 'message' => MSG_SUCCESS);

						$modelLiquidacao = new Sinistro2_Model_Liquidacoes();
						$liquidacao      = $modelLiquidacao->find($this->getRequest()->getParam('id'))->current();
						$rs = $modelLiquidacao->getLiquidacao($this->getRequest()->getParam('id'));

					} elseif ($this->getRequest()->getParam('id_status') == Agro_Util::getIdStatus("AGUARDANDO_ENVIO_SEGURADORA")) {
						$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'))->toArray();
			$dados[0]['status'] = $model->getStatusLiquidacao($dados[0]['id']);
		}

		$this->view->dados = $dados;
	}

	public function listaliquidacaopagtoAction() {
		$this->isAjax(true);
		$model = $this->getModel();
		$dados = array();

		if ($this->getRequest()->getParam('id_liquidacao')) {
			$dados = $model->getPagtoLiquidacao($this->getRequest()->getParam('id_liquidacao'))->toArray();
			if (count($dados)) {
				$dados[0]['status'] = $model->getStatusLiquidacao($dados[0]['id']);
			}
		}
		$dados[0]['arquivo'] = $model->getArquivoLiquidacao($dados[0]['id']);

		$this->view->dados = $dados;
	}

	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 savefileliquidacaoAction() {
		$this->isAjax();
		$adapter = new Zend_File_Transfer_Adapter_Http();

		$Processo = new Sinistro2_Model_Processos();
		$RowProcesso = $Processo->find($this->getRequest()->getParam('id_processo'));

		if ($_FILES) {
			$extensao = strtolower(end(explode('.', $_FILES['arquivoLiquidacao']['name'])));
			$tempFile = $_FILES['arquivoLiquidacao']['tmp_name'];
			$idPropostaMae = $Processo->getPropostaMaeByProcesso($this->getRequest()->getParam('id_processo'));
			$idProposta = !empty($idPropostaMae) ? $idPropostaMae : $RowProcesso[0]['id_proposta'];
			$nomeArquivo = $this->getRequest()->getParam('id_liquidacao') . "_" . $idProposta . "_LIQUIDACAO." . $extensao;
			$target = PATH_LIQUIDACAO . "/" . $nomeArquivo;

			$adapter->addFilter('Rename', array(
				'source' => $tempFile,
				'target' => $target,
				'overwrite' => true)
			);

			if ($adapter->receive()) {
				$liquidacaoArquivos = new Sinistro2_Model_Liquidacoes();
				if ($liquidacaoArquivos->saveArquivoLiquidacao($nomeArquivo, $this->getRequest()->getParam('id_liquidacao'))) {

					$target = APPLICATION_PATH . '/upload_files/Sinistro2_processo/' . $nomeArquivo;

					// Faz o upload do arquivo
					$adapter->addFilter('Rename', array(
						'source' => $tempFile,
						'target' => $target,
						'overwrite' => true)
					);
					$adapter->receive();

					// Salva registro na tabela processos_arquivos
					$ProcessoArquivo = new Sinistro2_Model_ProcessosArquivos();
					$id = $ProcessoArquivo->nextSequenceId();

					$data = array();
					$data['id'] = $id;
					$data['id_processo'] = $this->getRequest()->getParam('id_processo');
					$data['id_tipo_arquivo'] = 18; //LIQUIDACAO
					$data['ds_nome_arquivo'] = $nomeArquivo;

					$ProcessoArquivo->insert($data);

					//$this->_redirect('/sinistro2/processo/view/id/' . $this->getRequest()->getParam('id_processo'));
				}
			} else {
				die('Não foi possível salvar o arquivo.');
			}
		}
	}

	public function listahistoricostatusAction() {
		$this->isAjax(true);
		$model = new Sinistro2_Model_LiquidacoesStatus();
		$dados = $model->listaHistoricoStatus($this->getRequest()->getParam('id_liquidacao'));
		$this->view->dados = $dados;
	}

	public function getarquivosliquidacaoAction() {
		$this->isAjax(true);
		$model = new Sinistro2_Model_Liquidacoes();
		$dados = $model->getArquivoLiquidacao($this->getRequest()->getParam('id_liquidacao'));

		$this->view->dados = $dados;
	}

	public function deletearquivoliquidacaoAction() {
		$this->isAjax();

		$path = APPLICATION_PATH . "/upload_files/" . $this->getRequest()->getParam('path') . "/" . $this->getRequest()->getParam('nome');
		$extension = pathinfo($path, PATHINFO_EXTENSION);

		if ($extension != 'pdf') {
			throw new Exception('Erro ao excluir arquivo. Arquivo deve ser do tipo PDF.');
		}

		$sanitizedPath = realpath($path); // Resolves any relative paths and removes unnecessary elements

		if (file_exists($sanitizedPath) && unlink($sanitizedPath)) {
			$Model = $this->getModel();
			$Model->deleteArquivoLiquidacao($this->getRequest()->getParam('id'));
			$return['message'] = 'Arquivo excluído com sucesso!';
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}


	public function confirmaexclusaoAction() {
		$this->isAjax(true);

		$this->view->form = new Sinistro2_Form_LiquidacaoExclusao();
		$this->view->dados = $this->getRequest()->getParams();

	}

	public function excluirAction() {
		$this->isAjax();

		$model = $this->getModel();
		$dados = $this->getRequest()->getParams();

		Zend_Db_Table::getDefaultAdapter()->beginTransaction();

		try {

			$adapter = new Zend_File_Transfer_Adapter_Http();

			if ($_FILES) {
				$extensao = strtolower(end(explode('.', $_FILES['ds_arquivo']['name'])));
				$tempFile = $_FILES['ds_arquivo']['tmp_name'];
				$dados['ds_nome_arquivo'] = $dados['id_proposta'] . "_". $dados['id_liquidacao'] .".". $extensao;
				$target = APPLICATION_PATH."/upload_files/Sinistro2_processo/" . $dados['ds_nome_arquivo'];

				$adapter->addFilter('Rename', array(
					'source' => $tempFile,
					'target' => $target,
					'overwrite' => true)
				);

				if (!$adapter->receive()) {
					die('Não foi possível salvar o arquivo.');
				}
			}

			if ($model->beforeDelete($dados)) {
				$return['message'] = "Liquidação excluída com sucesso!";
				Zend_Db_Table::getDefaultAdapter()->commit();

			} else {
				$return['message'] = "Erro ao excluir liquidação!\nErro: {$model->getMessage()}";
				Zend_Db_Table::getDefaultAdapter()->rollBack();
			}
		} catch (Exception $e) {
			$return['message'] = "Erro ao excluir liquidação!\nErro: {$e->getMessage()}";
			Zend_Db_Table::getDefaultAdapter()->rollBack();
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	public function observacaostatusAction(){
		$this->isAjax(true);
		$this->view->dados = $this->getRequest()->getParams();
	}

	public function savestatusliquidacaoAction(){
		$this->isAjax();
		$dados = $this->getRequest()->getParams();

		$idStatusPendentePagamento = (new Sistema_Model_Status())->getId('ENVIADA_SEGURADORA', 'LIQUIDACOES');
		$model = $this->getModel();
		$modelLiquidacoesItensSegurados = new Sinistro2_Model_LiquidacoesItensSeguradosCoberturas();

		$itensSegurados = $modelLiquidacoesItensSegurados->fetchAll("id_liquidacao = " . $dados["id_liquidacao"]);

		$LiquidacoesMotivosSemIndenizacao = new Sinistro2_Model_LiquidacoesMotivosLiquidacaoSemIndenizacao();
		
		try {
			if (!filter_var($dados['id_liquidacao'], FILTER_VALIDATE_INT)) {
				throw new Exception('ID liquidação deve ser um inteiro');
			}

			$adapter = Agro_Db_Table_Abstract::getDefaultAdapter();
			$adapter->beginTransaction();

			$dadosMotivos['id_liquidacao'] = $dados['id_liquidacao'];
			$LiquidacoesMotivosSemIndenizacao->deleteByLiquidacao($dadosMotivos['id_liquidacao']);

			foreach($this->getRequest()->getParam('id_motivo') as $id_motivo) {
				$dadosMotivos['id_motivos_liquidacao_sem_indenizacao'] = $id_motivo;
				$LiquidacoesMotivosSemIndenizacao->save($dadosMotivos);
			}
			
			$liquidacao = $model->find($dados['id_liquidacao'])->current();
		
			$idStatusAguardandoPagamento = (new Sistema_Model_Status())->getId('AGUARDANDO_PAGAMENTO', 'LIQUIDACOES');

			if (
				$liquidacao->id_status == $idStatusAguardandoPagamento
				&& in_array($dados['id_status'], [
						Sinistro2_Model_Liquidacoes::ID_STATUS_ENVIADA_SEGURADORA,
						Sinistro2_Model_Liquidacoes::ID_STATUS_DEVOLVIDA_CORRECAO
					]
				)
			) {
				$model->update([
					'dt_pagamento' => null
				], "id = {$dados['id_liquidacao']}");
			}
			//if($model->isReplantio($dados['id_liquidacao']) && $dados['id_status'] == $idStatusPendentePagamento){
				
			//}
			if(!in_array($liquidacao['id_tipo_liquidacao'],[15, 17]) && $dados['id_status'] == $idStatusPendentePagamento){
				$idProposta = (new Seguro_Model_Propostas())->getIdPropostaByIdProcesso($liquidacao['id_processo']);
				
				$modelCronometro = new Sinistro2_Model_CronometroRegulacao();
				$modelAvisosEncerramentoItensSegurados = new Sinistro2_Model_AvisosEncerramentoItensSegurados();
				
				foreach($itensSegurados as $item){
					//essa linha vai trazer os avisos onde os itens segurados daquela liquidação estão, via tabela avisos_encerramento_itens_segurados
					$avisosOndeOItemEsta = $modelAvisosEncerramentoItensSegurados->fetchAll("id_item_segurado = " . $item["id_item_segurado"], ['id_aviso_encerramento']);

					foreach($avisosOndeOItemEsta as $aviso){
						$cronometro = $modelCronometro->getByProposta($idProposta, $aviso['id_aviso_encerramento']);
						if(!empty($cronometro)){
							$modelCronometro->finalizar($cronometro[0]['id'], ' Regulação finalizada. ');
							//"Finalizar" = alterar: dt_inicio, dt_fim, id_status, nr_dias_regulado
						}
					}
				}

			}

			if($dados['id_status']== Sinistro2_Model_Liquidacoes::ID_STATUS_SEM_INDENIZACAO){
				$idProposta = (new Seguro_Model_Propostas())->getIdPropostaByIdProcesso($liquidacao['id_processo']);
				
				$modelCronometro = new Sinistro2_Model_CronometroRegulacao();
				$modelAvisosEncerramentoItensSegurados = new Sinistro2_Model_AvisosEncerramentoItensSegurados();
				
				foreach($itensSegurados as $item){
					//essa linha vai trazer os avisos onde os itens segurados daquela liquidação estão, via tabela avisos_encerramento_itens_segurados
					$avisosOndeOItemEsta = $modelAvisosEncerramentoItensSegurados->fetchAll("id_item_segurado = " . $item["id_item_segurado"], ['id_aviso_encerramento']);

					foreach($avisosOndeOItemEsta as $aviso){
						$cronometro = $modelCronometro->getByProposta($idProposta, $aviso['id_aviso_encerramento']);
						if(!empty($cronometro)){
							$modelCronometro->finalizar($cronometro[0]['id'],' Regulação finalizada, sem indenização a receber.');
							//"Finalizar" = alterar: dt_inicio, dt_fim, id_status, nr_dias_regulado
						}
					}
				}
			}

			if ($model->save($dados)) {
			    if ((int) $dados['id_status'] === Sinistro2_Model_Liquidacoes::ID_STATUS_ENVIADA_SEGURADORA) {
			        $this->salvarArquivosFilaTransmissao($dados['id_liquidacao']);
                }

				$this->geraPDFCartaSemIndenizacao(
					(int) $dados['id_liquidacao'],
					(int) $dados['id_status']
				);

				$return['message'] = "Status alterado com sucesso!";
			} else {
				$return['message'] = "Erro ao alterar status!\nErro: {$model->getMessage()}";
			}

	
			$adapter->commit();

		} catch (Exception $e) {
			$adapter->rollback();
			$return['message'] = "Erro ao alterar status!\nErro: {$e->getMessage()}";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	private function geraPDFCartaSemIndenizacao(
		int $idLiquidacao,
		int $idStatus
	): void {
		if ($idStatus !== Sinistro2_Model_Liquidacoes::ID_STATUS_SEM_INDENIZACAO) {
			return;
		}

		$modelLiquidacao = new Sinistro2_Model_Liquidacoes();

		$liquidacao = $modelLiquidacao->find($idLiquidacao)->current();
		$idProcesso = $liquidacao['id_processo'];

		$idProposta = (new Seguro_Model_Propostas())->getIdPropostaByIdProcesso($idProcesso);
		$proposta = (new Seguro_Model_Propostas())->find($idProposta)->current();

		$coberturas = $modelLiquidacao->getIdsCoberturas($idLiquidacao);
		
		$temCoberturaPrincipal = false;
		
		foreach ($coberturas as $cobertura) {
			if ($cobertura['fl_cobertura_principal'] == 1)  {
				$temCoberturaPrincipal = true;
			}
		}

		$idsAvisosQuedaParreiralReplantio = (new Sinistro2_Model_AvisosSinistro())->getIdsAvisosQuedaParreiralReplantio(
			(int) $proposta['id'],
			(int) $liquidacao['id']
		);

		/**
		 * Se for aviso de queda de parreiral e evento de granizo, aviso deve aparecer na carta
		 */
		$avisosQuedaEventoGranizo = null;
		$idsAvisosQuedaEventoGranizo = '';
		if (!empty($idsAvisosQuedaParreiralReplantio)) {
			$avisosQuedaEventoGranizo = (new Sinistro2_Model_AvisosEventos())
				->getAvisosEventosQueda($idsAvisosQuedaParreiralReplantio);
			$idsAvisosQuedaEventoGranizo =  $avisosQuedaEventoGranizo['ids_avisos'] ?? '';
		}
		
		$ignoraQuedaParreiralReplantio = !empty($idsAvisosQuedaParreiralReplantio) && $temCoberturaPrincipal;
		
		$informacaoLiquidacao = $modelLiquidacao->loadInformacaoCartaSemIndinizacao(
			$idLiquidacao,
			$idsAvisosQuedaParreiralReplantio,
			$ignoraQuedaParreiralReplantio,
			$idsAvisosQuedaEventoGranizo
		);
		
		if (empty($informacaoLiquidacao['id_aviso']) && !empty($avisosQuedaEventoGranizo)) {
			$informacaoLiquidacao['id_aviso'] = $avisosQuedaEventoGranizo['ids_avisos'];
		}

		// Crie um objeto DateTime a partir da data
		$dt = new DateTime($informacaoLiquidacao['dt_criacao']);
		$mes = $dt->format('m');
		$descricaoMes = Agro_Util::MAP_DESCRICAO_MES[$mes];
		
		// Formate a data no estilo "14 de maio de 2024"
		$this->view->data = strftime("%d de {$descricaoMes} de %Y", $dt->getTimestamp());
		$this->view->corretor = $informacaoLiquidacao['corretor'];
		$this->view->segurado = $informacaoLiquidacao['ds_nome_proponente'];

		if (!empty($informacaoLiquidacao['id_aviso'])) {
			$this->view->motivo = $informacaoLiquidacao['motivos_sem_indenizacao'];
			$this->view->aviso = $informacaoLiquidacao['id_aviso'];
			$this->view->propostaApolice = "{$informacaoLiquidacao['id_proposta']} / {$informacaoLiquidacao['nr_apolice']}";
			$this->view->evento =  "{$informacaoLiquidacao['ds_nome_evento']}";
		} else {
			$this->view->motivo = '-';
			$this->view->aviso = '-';
			$this->view->propostaApolice = '-';
			$this->view->evento = '-';

			$idsMotivos = explode(', ', $informacaoLiquidacao['ids_motivos_sem_indenizacao']);

			if (
				in_array(Sinistro2_Model_MotivosLiquidacaoSemIndenizacao::MOTIVO_UNICO_AVISO_REPLANTIO, $idsMotivos)
				|| in_array(Sinistro2_Model_MotivosLiquidacaoSemIndenizacao::MOTIVO_UNICO_AVISO_QUEDA_PARREIRAL, $idsMotivos)
			) {
				$this->view->motivo = $informacaoLiquidacao['motivos_sem_indenizacao'];
			}
		}

		$this->view->enderecoCorretorParte1 = "{$informacaoLiquidacao['ds_endereco_rua']}, {$informacaoLiquidacao['ds_endereco_nro']}";
		if (!empty($informacaoLiquidacao['ds_endereco_complemento'])) {
			$this->view->enderecoCorretorParte1 .= ", {$informacaoLiquidacao['ds_endereco_rua']}";
		}
		$this->view->enderecoCorretorParte1 .= " - {$informacaoLiquidacao['ds_endereco_bairro']}";

		$municipio = ucfirst(mb_strtolower($informacaoLiquidacao['ds_nome_municipio'], 'UTF-8'));
		
		$this->view->enderecoCorretorParte2 = "{$municipio} - {$informacaoLiquidacao['ds_sigla']}";
		$this->view->enderecoCorretorParte2 .= " - CEP: {$informacaoLiquidacao['ds_endereco_cep']}";

		$aux = strtolower($this->view->enderecoCorretorParte1);
		$arr = explode(' ', $aux);
		
		$this->view->enderecoCorretorParte1 = implode(' ', array_map('ucfirst', $arr));

		$layoutPath = APPLICATION_PATH . '/layouts/carta_sem_indenizacao.pdf';
		$filePath = APPLICATION_PATH . "/upload_files/liquidacao_sem_indenizacao/carta_sem_indenizacao_{$idProposta}_{$idLiquidacao}.pdf";
		$folderPath = APPLICATION_PATH . "/upload_files/liquidacao_sem_indenizacao";

		if (file_exists($filePath)) {
			unlink($filePath);
		}

		if (!file_exists($folderPath)) {
			mkdir($folderPath, 0777, true);
		}

		$mpdf = new Mpdf(['tempDir' => APPLICATION_PATH . '/upload_files/temp']);

		$mpdf->SetHTMLHeader($header);

		$pagecount = $mpdf->SetSourceFile($layoutPath);
		
		$tplIdx = $mpdf->ImportPage($pagecount);
		$mpdf->UseTemplate($tplIdx);
		
		$html = '
			<iframe class="hide" width="0" frameborder="0" marginwidth="0" height="0" marginheight="0" id="hiddenFrame" name="hiddenFrame"></iframe>
			<div id="divAjaxDialog"></div>
			<div class="container">
				<div class="content">
					'.$this->view->render('liquidacao/cartasemindenizacao.phtml').'
				</div>
			</div>';
		$html = str_replace("/resources/", $_SERVER['DOCUMENT_ROOT']."/resources/", $html);

		$mpdf->WriteHTML($html);
		$mpdf->Output($filePath, \Mpdf\Output\Destination::FILE);
	}

	//Atualiza a observaÃ§Ã£o da liquidação
	public function updateobservacaoAction() {
		$this->isAjax();
		$model = $this->getModel();
		$LiquidacoesMotivosSemIndenizacao = new Sinistro2_Model_LiquidacoesMotivosLiquidacaoSemIndenizacao();

		try {
			$Row = $model->find($this->getRequest()->getParam('id_liquidacao'))->current();
			$Row->ds_observacao = $this->getRequest()->getParam('ds_observacao');
			$Row->id_status = $this->getRequest()->getParam('id_status');

			$dados['id_liquidacao'] = $this->getRequest()->getParam('id_liquidacao');
			$LiquidacoesMotivosSemIndenizacao->deleteByLiquidacao($dados['id_liquidacao']);
			foreach($this->getRequest()->getParam('id_motivo') as $id_motivo) {
				$dados['id_motivos_liquidacao_sem_indenizacao'] = $id_motivo;
				$LiquidacoesMotivosSemIndenizacao->save($dados);
			}

			$Row->save();
			$return['message'] = "Dados alterados com sucesso!";
		} catch (Exception $e) {
			$return['message'] = "Erro ao alterar dados!\nErro: {$e->getMessage()}";
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	//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;

			$modelLiquidacaoPagamento = new Sinistro2_Model_LiquidacoesPrevisaoPagamento();
			$this->view->dadosPagto = $modelLiquidacaoPagamento->getRow($params['id_pagamento']);
		}

		$this->view->id_processo = $params['id_processo'];
		$this->view->form = new Nobre_Form_DadosPagamento();

	}

	//novo sinistro
	public function populateformpagamentosAction() {
		$this->isAjax();
		$this->view->form = new Sinistro2_Form_DadosPagamento();
		$model = new Sinistro2_Model_LiquidacoesPrevisaoPagamento();

		$return = $model->getRow($this->getRequest()->getParam('id_pagamento'))->toArray();

		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));
		}
	}

	// documento com explicações deduções, cartas, etc.. 
	public function documentoliquidacaoAction() {
		$this->isAjax(true);
		$this->view->form = new Sinistro2_Form_Liquidacao();
		$this->view->id_processo = $this->getRequest()->getParam('id_processo');
		$this->view->id_pagamento = $this->getRequest()->getParam('id_pagamento');
		$this->view->id_documento = $this->getRequest()->getParam('id_documento'); 
	}

	public function savedocumentoAction() {
		$this->isAjax();
		$return['status'] = false;
		$return['message'] = 'Erro ao inserir documento.';

		if ($this->getRequest()->getParam('id_pagamento') && $this->getRequest()->getParam('id_processo')) {
			$LiquidacoesPrevisaoPagamento = (new Sinistro2_Model_LiquidacoesPrevisaoPagamento())->fetchRow('id = ' . $this->getRequest()->getParam('id_pagamento'));
			
			if ($LiquidacoesPrevisaoPagamento->id_liquidacao) {
				$nome_arquivo = $this->anexarDocumento($LiquidacoesPrevisaoPagamento->id_liquidacao);

				if ($nome_arquivo <> '') {
					$ProcessosArquivos = new Sinistro2_Model_ProcessosArquivos();

					if ($this->getRequest()->getParam('id_documento')) {
						$ProcessosArquivos->delete($this->getRequest()->getParam('id_documento'));
					}

					$id_arquivo = $ProcessosArquivos->save($nome_arquivo, $this->getRequest()->getParam('id_processo'), 'COMPROVANTE_TED_DOC');

					if ($id_arquivo) {
						$LiquidacoesPrevisaoPagamento->id_documento_liquidacao = $id_arquivo;

						if ($LiquidacoesPrevisaoPagamento->save()) {
							$return['status'] = true;
							$return['message'] = 'Documento inserido com sucesso.';
						}
					}
				}
			}
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	//novo sinistro
	public function savepagamentoAction(){
		$this->isAjax();

		$params = $this->getRequest()->getParams();

		$model           = $this->getModel();
		$Status          = new Sistema_Model_Status();
		$modelLiqPrevPag = new Sinistro2_Model_LiquidacoesPrevisaoPagamento();

		try {

			$ProcessosArquivos = new Sinistro2_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');
				$params['id_arquivo_processo'] = $RowArquivos;
				$params['id_documento_liquidacao'] = $RowArquivos;
			}

			foreach($params['id_liquidacao'] as $key => $id_liquidacao){
				$params['id_liquidacao'] = $id_liquidacao;
				$params['id_liquidacao_previsao_pagamento'] = $modelLiqPrevPag->save($params);
				
				$liquidacao = $model->find($id_liquidacao)->current();

				//Se o status atual da Liquidacao for SEM INDENIZACAO, nao efetua alteracao de status
				if($Status->getChave($liquidacao->id_status) != 'SEM_INDENIZACAO'){
					$model->atualizaStatusLiquidacao($id_liquidacao, $Status->getIdStatus("INDENIZACAO_PAGA", "LIQUIDACOES"));
				}

				if ($RowArquivos) {
					$Liquidacoes = $model->getLiquidacao($id_liquidacao);
					$this->sendMailComprovante($Liquidacoes['id_proposta'], $id_liquidacao);
				}
			}

			$return = array("status" => true, "message" => "Previsão de pagamento salva com sucesso");

		} 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));
	}

	/**
	*	busca o recibo de pagamento via webservice
	 */
	public function gerarreciboAction() {
		$this->isAjax();
		$wsdl = (APPLICATION_ENV != 'production') ? WSDL_DEV : WSDL_PROD;
		$params = $this->getRequest()->getParams();
		$client = new SoapClient($wsdl);

		$args = array(
			'Executar' => array(
				'Servico' => 'ObterRelatorioPDF', 
				'conteudoXML' => '<i4proerp><obter_relatorio_pdf id_relatorio="665" id_lancamento="'.$params['id_lancamento'].'" id_pagamento="'.$params['id_pagamento'].'" /></i4proerp>'
			)
		);

		try {
			$result = $client->__soapCall('Executar', $args, array('location' => explode('?', $wsdl)[0]));

			if ($result->ExecutarResult) { //não é necessário guardar mais o comprovante localmente, será sempre buscado na ESSOR
				//$ProcessosArquivos = new Sinistro2_Model_ProcessosArquivos();
				//$LiquidacoesPrevisaoPagamento = new Sinistro2_Model_LiquidacoesPrevisaoPagamento();
				//$previsao = $LiquidacoesPrevisaoPagamento->fetchRow('id_liquidacao = '.$params['id_liquidacao']);
				//$processo = (new Sinistro2_Model_Liquidacoes())->find($params['id_liquidacao'])->current()['id_processo'];
				$nomeArquivo = $params['id_liquidacao'] . '_comprovante.pdf';
				//$arquivo = $ProcessosArquivos->save($nomeArquivo, $processo, 'COMPROVANTE_TED_DOC');
				//$previsao->id_arquivo_processo = $arquivo;
				//$previsao->save();

				$return = array(
					'status' => true,
					'name' => $nomeArquivo,
					'file' => base64_encode(base64_decode($result->ExecutarResult))
				);
			} else {
				throw new Exception('Erro ao recuperar comprovante');
			}
		} catch (SoapFault $fault) {
			$return = array(
				'erro' => 'Erro ao recuperar comprovante: '.$fault->getMessage(),
				'status' => false
			);
		} catch (Exception $e) {
			$return = array(
				'erro' => 'Erro ao recuperar comprovante: '.$e->getMessage(),
				'status' => false
			);
		}

		$this->getResponse()->setBody(Zend_Json::encode($return));
	}

	// faz upload de arquivo com informações, documentos, etc... 
	public function anexarDocumento($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 . '_documento.' . 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();
		}
	}

	/* 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 sendcomprovanteAction() {
		$this->isAjax();
		$return['status'] = $this->sendMailComprovante(
			$this->getRequest()->getParam('id_proposta'),
			$this->getRequest()->getParam('id_liquidacao')
		);

		if ($return['status']) {
			$return['message'] = 'E-mail enviado.';
		} else {
			$return['message'] = 'Erro ao enviar e-mail.';
		}

		$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';
				//Solicitada remoção pela quantidade de e-mails recebidos, mantive caso optem por reativar no futuro
			} else {
				$To = 'tonismar.bernardo@agrobrasilseguros.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);
				//Solicitada remoção pela quantidade de e-mails recebidos, mantive caso optem por reativar no futuro
				$Mail->setTipoUsuario('Usuário');
				$Mail->setBody($content);
				$Mail->setSubject($assunto);
				$Mail->send();

				return true;

			} catch (Exception $e) {
				return false;
			}
		} else {
			return false;
		}
	}

	public function excluirpagamentoAction()
    {
        $this->isAjax();

        $parametros = $this->getRequest()->getParams();
        $adapter = Agro_Db_Table_Abstract::getDefaultAdapter();
        $retorno = ['erro' => false, 'mensagem' => 'Pagamento excluído com sucesso.'];

        $adapter->beginTransaction();

        try {
            $modelLiquidacoesPagamento = new Sinistro2_Model_LiquidacoesPrevisaoPagamento();
            $rowLiquidacaoPagamento = $modelLiquidacoesPagamento->find($parametros['idLiquidacaoPagamento'])->current();
            $idPagamento = $rowLiquidacaoPagamento['id'];

            if (!empty($rowLiquidacaoPagamento)) {
                $modelProcessosArquivos = new Sinistro2_Model_ProcessosArquivos();

                if (!empty($rowLiquidacaoPagamento['id_arquivo_processo'])) {
                    $modelProcessosArquivos->delete($rowLiquidacaoPagamento['id_arquivo_processo']);
                }

                if (!empty($rowLiquidacaoPagamento['id_documento_liquidacao'])) {
                    $modelProcessosArquivos->delete($rowLiquidacaoPagamento['id_documento_liquidacao']);
                }
            }

            $modelLiquidacoesPagamento->delete($idPagamento);

            $modelLiquidacoesStatus = new Sinistro2_Model_LiquidacoesStatus();
            $rowLiquidacoesStatus = $modelLiquidacoesStatus->fetchAll([
              "id_liquidacao = {$parametros['idLiquidacao']}",
              "id_status = " . Sinistro2_Model_Liquidacoes::ID_STATUS_INDENIZACAO_PAGA,
            ])->current();

            if (!empty($rowLiquidacoesStatus)) {
                $modelLiquidacoesStatus->delete($rowLiquidacoesStatus['id']);
            }

            $rowLiquidacoesStatusAnterior = $modelLiquidacoesStatus->fetchAll([
              "id_liquidacao = {$parametros['idLiquidacao']}",
            ], 'id desc')->current();

            if (!empty($rowLiquidacoesStatusAnterior)) {
                $rowLiquidacoesStatusAnterior['fl_ativo'] = true;
                $rowLiquidacoesStatusAnterior->save();
            }


            $modelProcessoObservacoes = new Sinistro2_Model_ProcessosObservacoes();
            $processoObservacoes = $modelProcessoObservacoes->createRow();
            $processoObservacoes->id_processo = $parametros['idProcesso'];
            $processoObservacoes->ds_observacao = "Pagamento {$idPagamento} excluído.";
            $processoObservacoes->save();

            $this->getModel()->atualizaStatusLiquidacao(
              $parametros['idLiquidacao'], Sinistro2_Model_Liquidacoes::ID_STATUS_ENVIADA_SEGURADORA, false
            );

            $adapter->commit();
        } catch (Exception $erro) {
            $adapter->rollback();

            $retorno = ['erro' => true, 'mensagem' => 'Erro ao excluir o pagamento.'];
        }

        $this->getResponse()->setBody(Zend_Json::encode($retorno));
    }
	public function transmitirArquivoEssor(int $idProcesso, int $idArquivo, int $idTipoArquivo, string $filename, string $fullFilename) : array {
		$wsdl = (APPLICATION_ENV != 'production') ? WSDL_DEV : WSDL_PROD;
		$params = $this->getRequest()->getParams();
		$client = new SoapClient($wsdl);

		$modelProcesso = new Sinistro2_Model_Processos();
		$TipoArquivoProcessos = (new Sistema_Model_TipoArquivoProcesso())->find($idTipoArquivo)->current();
		$nm_chave_valores = $modelProcesso->getIdentificadorSeguradora($modelProcesso->getPropostaByProcesso($idProcesso));
		$base64file = base64_encode(file_get_contents($fullFilename));

		$args = array(
			'Executar' => array(
				'Servico' => 'InserirDocumentoECM',
				'conteudoXML' => '<i4proerp>
									<inserirecmws
										id_tp_documento="'.$TipoArquivoProcessos->id_tipo_documento_seguradora.'"
										id_dominio="4"
										nm_chave_valores="'.$nm_chave_valores.'"
										img_documento_arquivo="'.$filename.'"
										cd_usuario="AgroBrasil WS"
										cd_empresa="230"
										img_documento_content_type="'.mime_content_type($fullFilename).'"
										nm_observacao="'.$TipoArquivoProcessos->ds_tipo_arquivo.'"
										nr_ref="'.$nm_chave_valores.'"
										img_documento="'.$base64file.'"
									/>
								</i4proerp>'
			)
		);

		$result = $client->__soapCall('Executar', $args, array('location' => explode('?', $wsdl)[0]));

		if ($result->ExecutarResult) {
			$result_xml  = simplexml_load_string(utf8_encode($result->ExecutarResult), 'SimpleXMLElement', LIBXML_NOCDATA);
			if ($result_xml->sucesso->attributes()->cd_retorno > 0) {
				$return = array('status' => false, 'message' => $result_xml->sucesso->attributes()->nm_retorno);
				return $return;
			} else {
				$LogSinistroArquivosTransmissao = new Log_Model_LogSinistroArquivosTransmissao();
				$dados['id_processo'] = $idProcesso;
				$dados['id_arquivo'] = $idArquivo;
				$dados['id_documento_seguradora'] = $result_xml->sucesso->attributes()->id_documento;
				$dados['ds_mensagem'] = $result_xml->sucesso->attributes()->nm_retorno;

				if ($LogSinistroArquivosTransmissao->save($dados)) {
					$return = array('status' => true, 'message' => 'Transmissão do arquivo para ESSOR efetuada com sucesso.');
					return $return;
				}
			}
		}

		$return = array('status' => false, 'message' => 'Erro na transmissão do arquivo para ESSOR.');
		return $return;
	}

	private function salvarArquivosFilaTransmissao(int $idLiquidacao)
    {
        $rowsArquivosBeneficiario = $this->getModel()->getArquivosBeneficiario($idLiquidacao);

        if (empty($rowsArquivosBeneficiario)) {
            return false;
        }

        foreach ($rowsArquivosBeneficiario as $dadosArquivosBeneficiarios) {
            $modelBeneficiariosArquivosEnvio = new Seguro_Model_BeneficiariosArquivosEnvio();

            $dados = [
              'id_arquivo' => $dadosArquivosBeneficiarios['id'],
              'id_beneficiario' => $dadosArquivosBeneficiarios['id_beneficiario'],
            ];
            if (!$modelBeneficiariosArquivosEnvio->save($dados)) {
                throw new Exception('Erro ao salvar o arquivo de beneficiário na fila de transmissão.');
            }
        }

        return true;
    }

    public function transmitirarquivosessorAction()
    {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        $parametros = $this->getRequest()->getParams();
        $safras = !empty($parametros['safras']) && is_array($parametros['safras']) ? $parametros['safras'] : [];
        $idTipoArquivo = !empty($parametros['idTipoArquivo']) ? (int)$parametros['idTipoArquivo'] : null;
        $somenteNaoTransmitidos = !empty($parametros['somenteNaoTransmitidos']);

        $registros = (new Sinistro2_Model_ProcessosArquivos())->getArquivosBySafra(
            $safras,
            $idTipoArquivo,
            $somenteNaoTransmitidos
        )->toArray();

        foreach ($registros as $registro) {
            $teste = preg_match("/({$registro['id_liquidacao']})/", $registro['ds_nome_arquivo']);

            if (!$teste) {
                continue;
            }

            if (
                !empty($parametros['statusLiquidacaoIgnorar'])
                && in_array((int)$registro['id_status_liquidacao'], $parametros['statusLiquidacaoIgnorar'])
            ) {
                continue;
            }

            $this->transmitirArquivoEssor(
                $registro['id_processo'],
                $registro['id_arquivo'],
                $registro['id_tipo_arquivo'],
                $registro['ds_nome_arquivo'],
                APPLICATION_PATH . '/upload_files/sinistro_processo/' . $registro['ds_nome_arquivo']
            );
        }

        return $this->getResponse()->setBody(Zend_Json::encode([]));
    }

	public function salvarpagamentoadicionalAction(): void
	{
		$this->isAjax();

		$params = $this->getRequest()->getParams();
		$usuario = Zend_Auth::getInstance()->getIdentity();
		
		try {
			Zend_Db_Table::getDefaultAdapter()->beginTransaction();

			$modelStatus = new Sistema_Model_Status();
			$pagamentoAdicionalAtual = (new Sinistro2_Model_LiquidacaoPagamentoAdicional())->getPagamentoAdicional($params['idLiquidacao']);

			$mensagem = 'Pagamento adicional incluído com sucesso.';
			if (!empty($pagamentoAdicionalAtual)) {
				$mensagem = 'Pagamento adicional atualizado com sucesso.';
			}

			$novoPagamentoAdicional = (new Sinistro2_Service_SalvarLiquidacaoPagamentoAdicional())->executar($params);

			Zend_Db_Table::getDefaultAdapter()->commit();

			$idStatusAguardandoRevisao = $modelStatus
				->getId('AGUARDANDO_REVISAO', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');
			$chaveIndenizacaoPaga = $modelStatus->getChave($novoPagamentoAdicional->id_status);

			$idUsuarioResponsavelCriacao = (new Sinistro2_Model_LiquidacaoPagamentoAdicional())
				->getIdUsuarioResponsavelCriacao($novoPagamentoAdicional->id_liquidacao);

			$hasPermissaoEditarExcluir = in_array(
				$usuario->ds_nome_usuario,
				Sinistro2_Model_LiquidacaoPagamentoAdicional::USUARIOS_PERMISSAO_EDICAO_EXCLUSAO
			) || (
				!in_array($chaveIndenizacaoPaga, ['INDENIZACAO_PAGA', 'AGUARDANDO_PAGAMENTO'])
				&& $usuario->id == $idUsuarioResponsavelCriacao
				&& $novoPagamentoAdicional->id_status != $idStatusAguardandoRevisao
			) || $usuario->ds_chave === 'ADMIN';

			$retorno = [
				'mensagem' => $mensagem,
				'pagamentoAdicional' => $novoPagamentoAdicional->toArray(),
				'hasPermissaoEditarExcluir' => $hasPermissaoEditarExcluir,
				'dataPagamentoAdicional' => Agro_Util::formatDate($novoPagamentoAdicional->dt_criacao, Zend_Date::DATE_FULL),
				'erro' => false
			];
		} catch (Exception $e) {
			Zend_Db_Table::getDefaultAdapter()->rollback();

			$retorno = [
				'mensagem' => $e->getMessage(),
				'erro' => true
			];
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($retorno));
	}

	public function excluirpagamentoadicionalAction(): void
	{
		$this->isAjax();

		$idLiquidacao = $this->getRequest()->getParam('idLiquidacao');
		$usuario = Zend_Auth::getInstance()->getIdentity();

		try {
			Zend_Db_Table::getDefaultAdapter()->beginTransaction();

			if (empty($idLiquidacao) || !filter_var($idLiquidacao, FILTER_VALIDATE_INT)) {
				throw new Exception('ID liquidação inválido.');
			}
			
			$modelPagamentoAdicional = new Sinistro2_Model_LiquidacaoPagamentoAdicional();

			$pagamentoAdicional = $modelPagamentoAdicional->getPagamentoAdicional($idLiquidacao);

			if (empty($pagamentoAdicional)) {
				throw new Exception('Liquidação sem pagamento adicional cadastrado.');
			}

			$idStatusIndenizacaoPaga = (new Sistema_Model_Status())
				->getId('INDENIZACAO_PAGA', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');

			$idStatusAguardandoPagamento = (new Sistema_Model_Status())
				->getId('AGUARDANDO_PAGAMENTO', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');

			$idStatusAguardandoRevisao = (new Sistema_Model_Status())
				->getId('AGUARDANDO_REVISAO', 'LIQUIDACAO_PAGAMENTO_ADICIONAL');

			$idUsuarioResponsavelCriacao = (new Sinistro2_Model_LiquidacaoPagamentoAdicional())
				->getIdUsuarioResponsavelCriacao($idLiquidacao);

			if (
				$usuario->ds_chave != 'ADMIN'
				&& (
					!in_array(
						$usuario->ds_nome_usuario,
						Sinistro2_Model_LiquidacaoPagamentoAdicional::USUARIOS_PERMISSAO_EDICAO_EXCLUSAO
					) && $usuario->id != $idUsuarioResponsavelCriacao
					|| (
						$usuario->id == $idUsuarioResponsavelCriacao
						&& in_array(
							$pagamentoAdicional->id_status,
							[
								$idStatusIndenizacaoPaga, $idStatusAguardandoPagamento, $idStatusAguardandoRevisao
							]
						)
					)
				)
			) {
				throw new Exception('Usuário sem permissão para excluir.');
			}
			
			
			$modelPagamentoAdicional->deletar($idLiquidacao);
			$liquidacao = (new Sinistro2_Model_Liquidacoes)->find($idLiquidacao)->current();

			(new Sinistro2_Model_ProcessosArquivos())->deletar(
				$liquidacao->id_processo,
				$pagamentoAdicional->ds_nome_arquivo,
				'DIFERENCA_INDENIZACAO'
			);

			(new Sinistro2_Model_ProcessosObservacoes())->deletarObservacaoDiferencaIndenizacao($liquidacao->id_processo);

			unlink(APPLICATION_PATH . "/upload_files/sinistro_processo/{$pagamentoAdicional->ds_nome_arquivo}");
			
			$retorno = [
				'mensagem' => 'Pagamento adicional excluído com sucesso.',
				'erro' => false
			];

			Zend_Db_Table::getDefaultAdapter()->commit();

		} catch (Exception $e) {
			Zend_Db_Table::getDefaultAdapter()->rollback();

			$retorno = [
				'mensagem' => $e->getMessage(),
				'erro' => true
			];
		}

		$this->getResponse()->setBody(Zend_Json::encode($retorno));
	}

	public function historicopagamentoadicionalAction(): void
	{
		$this->getHelper('layout')->disableLayout();
		
		$idLiquidacao = $this->getRequest()->getParam('idLiquidacao');

		if (empty($idLiquidacao) || !filter_var($idLiquidacao, FILTER_VALIDATE_INT)) {
			throw new Exception('ID liquidação inválido.');
		}

		$this->view->registros = (new Sinistro2_Model_LiquidacaoPagamentoAdicional())
			->getHistorico((int) $idLiquidacao);
	}

	public function pagamentoadicionalpendenteAction()
	{
		$this->getHelper('layout')->disableLayout();
		$this->getHelper('ViewRenderer')->setNoRender();

		try {
			$retorno = ['erro' => false, 'mensagem' => ''];
			$propostas = (new Sinistro2_Model_LiquidacaoPagamentoAdicional())
				->getIdsPropostasPagamentoPendente();

			if (!empty($propostas)) {
				$idsPropostas = array_map(function ($row) {
					return $row['id_proposta_mae'];
				}, $propostas);

				$mail = new Agro_Mail();

				$content = "Será necessário realizar pagamentos adicionais para as propostas:\n";
				$content .= implode("\n", $idsPropostas);

				$mail->addTo('tatiana.tondim@agrobrasil.com.br');
				$mail->addTo('tamara.ramos@agrobrasil.com.br');
				$mail->addTo('grace.nascimento@essor.com.br');
				$mail->addCc('rafael.silva@agrobrasilseguros.com.br');
				$mail->addTo('tais.silveira@agrobrasilseguros.com.br');
				$mail->addTo('luana.beck@agrobrasilseguros.com.br');
				$mail->clearFrom();
				$mail->setFrom('ti@agrobrasilseguros.com.br', 'AgroBrasil - Agronet 2.0');
				
				$mail->setBody($content);
				$mail->setSubject('Diferença Indenização');

				$mail->send();
			}
		} catch (Exception $e) {
			$retorno['erro'] = true;
            $retorno['mensagem'] = 'Erro ao enviar o e-mail.';
		}

		return $this->getResponse()->setBody(Zend_Json::encode($retorno));
	}
	
	public function enviarrelatoriospagamentosrealizadosAction()
	{
		$this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

		$params = $this->getRequest()->getParams();

		try {
			$dataInicio = $params['dataInicio'] ?? '';
			$dataFim = $params['dataFim'] ?? '';

			(new Sinistro2_Service_EnviarRelatoriosPagamentosRealizados())->executar($dataInicio, $dataFim);
			
			$retorno = [
				'erro' => false,
				'mensagem' => 'Sucesso!'
			];

		} catch (Exception $e) {
			$retorno = [
				'erro' => true,
				'mensagem' => $e->getMessage()
			];
		}

		return $this->getResponse()->setBody(Zend_Json::encode($retorno));
	}

	public function salvarsolicitacaoantecipacaopagamentoAction()
	{
		try{
			$this->getHelper('ViewRenderer')->setNoRender();
        	$this->getHelper('layout')->disableLayout();

			$serviceAntecipacaoPagamento 	= new Sinistro2_Service_AntecipacaoPagamento();
			$modelLiquidacao 				= new Sinistro2_Model_Liquidacoes();

			$params 						= $this->getRequest()->getParams();
			$liquidacao 					= $modelLiquidacao->getLiquidacao($params['id_liquidacao']);
			
    		if (!$liquidacao) {
        		throw new Exception('Liquidação não encontrada.');
   			}
			
			if ($liquidacao['ds_chave'] != 'ENVIADA_SEGURADORA') {
				throw new Exception('Só pode solicitar antecipação se a liquidação estiver no status "Pendente de pagamento".');
			}

			$params['dt_base_pagamento'] 	= $liquidacao['dt_base_pagamento'];
			$serviceAntecipacaoPagamento->novaSolicitacao($params);

			$retorno = ['erro'=>false, 'mensagem'=>'Solicitação salva com sucesso!'];

		}catch(Exception $e){
    		$retorno = ['erro' => true, 'mensagem' => $e->getMessage()];
		}

		return $this->getResponse()->setBody(Zend_Json::encode($retorno));
	}

	public function buscahistoricoantecipacoespagamentoAction(){
		$objRelatorioImportacaoIndenizacao = new Sinistro2_Model_RelatorioImportacaoIndenizacao();
		$objSolicitacaoAntecipacaoPagamento = new Sinistro2_Model_AntecipacaoPagamento();
		$this->getHelper('layout')->setLayout('popup');
    	$requestUri = $this->getRequest()->getRequestUri();
		$idRelatorio = explode("=",$requestUri);
		$idRelatorio = $idRelatorio[1];
		
		$relatorio = $objRelatorioImportacaoIndenizacao->find($idRelatorio)->current()->toArray();
		$ids = $relatorio['ds_ids_liquidacoes_antecipacoes'];
		
		$solicitacoesAntecipacoes = $objSolicitacaoAntecipacaoPagamento->buscarPorIdsAntecipacoes($ids)->toArray();
		
		$this->view->title = '';
		$this->view->antecipacoes = $solicitacoesAntecipacoes;
	}

	public function getchavestatusliquidacaoAction()
	{
		$this->isAjax();
		
		try {
			$idLiquidacao = $this->getRequest()->getParam('idLiquidacao');

			if (empty($idLiquidacao) || !filter_var($idLiquidacao, FILTER_VALIDATE_INT)) {
				throw new Exception('ID liquidação inválido', 1);
			}

			$liquidacao = (new Sinistro2_Model_Liquidacoes())->find($idLiquidacao)->current();

			if ($liquidacao == null) {
				throw new Exception('Liquidação não encontrada.', 1);
			}

			$retorno = [
				'erro' => false,
				'chaveStatus' => (new Sistema_Model_Status())->getChave($liquidacao->id_status)
			];
		} catch (Exception $e) {
			$retorno = [
				'erro' => true,
				'mensagem' => $e->getCode() == 1 ? $e->getMessage() : 'Erro ao consultar status da liquidação.'
			];
		}
		
		$this->getResponse()->setBody(Zend_Json::encode($retorno));
	}
}
