<?php

class Atendimento_PropostaajaxController extends Agro_Controller_Proposta {

    /**
     * Executa todas as vezes que a classe e chamada
     *
     * @author Renato - 06/08/2010
     */
    public function init() {
        $this->getHelper('layout')->disableLayout();
        require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
    }

    public function tableunidadesAction() {
        $this->isAjax();

        if ($this->getRequest()->getParam('id_proposta')) {
            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();

            $this->view->montaUnidades($Proposta, false, false, true, true);
        }
    }

    /**
     * Envia um email para o corretor com os dados passados por parametro
     *
     * @param Agro_Db_Table_Abstract $Proposta
     * @param string $subject
     * @param string $body
     */
    public function notificarCorretor($Proposta, $subject, $body, array $opt = null, bool $copiarAtendimento = true) {
        try {
            if (isset($opt['obj_email']) && is_object($opt['obj_email'])) {
                $Mail = $opt['obj_email'];
            } else {
                $Mail = new Agro_Mail();
            }
            $Mail->addTo($Proposta->ds_email_corretor, $Proposta->ds_nome_corretor);
            if (is_array($Proposta->ds_email_preposto)) {
                $Mail->addCc($Proposta->ds_email_preposto, $Proposta->ds_nome_preposto);
            }

            if ($copiarAtendimento) {
                $Mail->addCc("atendimento@agrobrasilseguros.com.br", "Atendimento");
            }

            $Mail->addBcc('luana.beck@agrobrasilseguros.com.br', 'Luana Beck');
            $Mail->addBcc('karina.silva@agrobrasilseguros.com.br', 'Karina Silva');
            $Mail->setTipoUsuario("Corretor");
            $Mail->setSubject($subject);
 
            //DEBUG - INICIO
		        if (APPLICATION_ENV != 'production') {
                
			        $body .= "<br><br><hr><b>DEBUG</b>";
			        $body .= "<br>Destinatários";
			        foreach ($Mail->getRecipients() as $recipient) {
				        $body .= "<br> - {$recipient}";
			        }
		        }
		    //DEBUG - FIM

            if (isset($opt['html']) && $opt['html']) {
                $Mail->setBodyHtml($body);
            } else {              
                $Mail->setBody($body);
            }
            $Mail->send();
        } catch (Exception $e) {
            return true;
        }


        return true;
    }

    /**
     * Salva os dados do proponente
     *
     * @author Renato - 06/08/2010
     */
    public function salvaproponenteAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Proponentes = new Atendimento_Model_Proposta_Proponentes();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Proponentes->save($this->getRequest()->getParams())) {
                	$result['execute'] = "window.opener.$('#frmFilter').submit();";
                	$result['message'] = MSG_SUCCESS;
                	$result['status'] = true;
                	/*
                    if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                        $result['execute'] = "window.opener.$('#frmFilter').submit();";
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
                    } else {
                        $result['message'] = MSG_ERROR;
                    }
                    */
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva os dados do propriedade
     *
     * @author Renato - 06/08/2010
     */
    public function salvapropriedadeAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Propriedades = new Atendimento_Model_Proposta_Propriedades();
                $Propostas = new Atendimento_Model_Proposta();

                $ModelPropostas = new Seguro_Model_Propostas();
                $RowProposta = $ModelPropostas->find($this->getRequest()->getParam('id_proposta'))->current();
                $RowPropriedade = $RowProposta->propriedade();

                //SE NÃO FOR UM ORÇAMENTO, SOLICITA CONSULTA AO CADIN NOVAMENTE POR CAUSA DOS DADOS CHAVES ALTERADOS
                if ($RowProposta->id_status <> '2' && $RowProposta->id_status <> '59') {
                    if (
                        $RowPropriedade['ds_endereco_cep'] != $this->getRequest()->getParam('ds_endereco_cep') ||
                        $RowPropriedade['id_municipio'] != $this->getRequest()->getParam('id_municipio')
                    ) {
                        $Propostas->gravaConsultaCadin($this->getRequest()->getParam('id_proposta'), true);

                        // SE O STATUS FOR TRANSMITIDA_SEGURADORA, MUDA O STATUS PARA AGUARDANDO_ENVIO_SEG
                        // PARA QUE A CONSULTA AO CADIN SEJA REFEITA CASO HAJA SUBVENÇÃO
                        if ($RowProposta->id_status == 63) {
                            $Propostas->changeStatus(array('id_proposta' => $this->getRequest()->getParam('id_proposta')), 'AGUARDANDO_ENVIO_SEG');
                        }
                    }
                }

                if ($Propriedades->save($this->getRequest()->getParams())) {
                	$result['execute'] = "window.opener.$('#frmFilter').submit();";
                	$result['message'] = MSG_SUCCESS;
                	$result['status'] = true;
                	/*
                    if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                        $result['execute'] = "window.opener.$('#frmFilter').submit();";
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
                    } else {
                        $result['message'] = MSG_ERROR;
                    }
                    */
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva os dados do questionario
     *
     * @author Renato - 06/08/2010
     */
    public function salvaquestionarioAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Questionarios = new Atendimento_Model_Proposta_Questionarios();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Questionarios->save($this->getRequest()->getParams())) {
                	$result['execute'] = "window.opener.$('#frmFilter').submit();";
                	$result['message'] = MSG_SUCCESS;
                	$result['status'] = true;
                	/*
                    if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                        $result['execute'] = "window.opener.$('#frmFilter').submit();";
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
                    } else {
                        $result['message'] = MSG_ERROR;
                    }
                    */
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva os dados do questionario
     *
     * @author Renato - 06/08/2010
     */
    public function salvaquestionarioatendimentoAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Questionarios = new Atendimento_Model_Proposta_Questionarios();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Questionarios->save($this->getRequest()->getParams(), true)) {
                    //$result['execute'] = "window.opener.$('#frmFilter').submit();";
                    $result['message'] = MSG_SUCCESS;
                    $result['status'] = true;
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva observacoes
     *
     * @author Renato - 06/08/2010
     */
    public function salvaobservacoesAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Observacoes = new Atendimento_Model_Proposta_Observacoes();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Observacoes->save($this->getRequest()->getParams())) {
                    if ($this->getRequest()->getParam('fl_principal') == false) {
                        $result['execute'] = "window.opener.$('#frmFilter').submit();";
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
                    } else {
                    	/*
                        if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                            $result['execute'] = "window.opener.$('#frmFilter').submit();";
                            $result['message'] = MSG_SUCCESS;
                            $result['status'] = true;
                        } else {
                            $result['message'] = MSG_ERROR;
                        }
                        */
                    }
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva os beneficiarios
     *
     * @author Renato - 06/08/2010
     */
    public function salvabeneficiariosAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        $result = array('status' => false);

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Beneficiarios = new Atendimento_Model_Proposta_Beneficiarios();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Beneficiarios->save($this->getRequest()->getParams())) {
                	$result['execute'] = "window.opener.$('#frmFilter').submit();";
                	$result['message'] = MSG_SUCCESS;
                	$result['status'] = true;
                	/*
                    if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                       //$result['execute'] = "window.opener.$('#frmFilter').submit();";
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
                    } else {
                        $result['message'] = MSG_ERROR;
                    }
                    */
                } else {
                    $result['message'] = MSG_ERROR;
                }

                if ($result['status']) {
                    $ModelBeneficiario = new Seguro_Model_Beneficiarios();
                    foreach ($this->getRequest()->getParam('beneficiario') as $benef) {
                        if ($benef['ds_nome_beneficiarios']) {
                            $data = array('tp_pessoa' => $benef['tp_pessoa'],
                                          'ds_beneficiario' => $benef['ds_nome_beneficiarios'],
                                          'cpf_cnpj' => $benef['nr_cpf_cnpj'],
                                          'id_banco' => $benef['id_banco'],
                                          'ds_agencia' => $benef['ds_agencia'],
                                          'dt_nascimento' => $benef['dt_nascimento_beneficiario']
                                );
                            if (!$ModelBeneficiario->save($data)) {
                                $result['message'] = MSG_ERROR;
                                $result['status'] = false;
                            }
                        }
                    }
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Carrega as unidades seguradas da proposta para o retorno em ajax
     *
     * @author Renato - 09/08/2010
     */
    public function loadunidadesAction() {
        if ($this->getRequest()->getParam('id_proposta')) {
            $Propostas = new Seguro_Model_Propostas();
            $this->view->proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
        }
    }

    /**
     * Salva as unidades seguradas
     *
     * @author Renato - 06/08/2010
     */
    public function salvaunidadesseguradasAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $post = $this->getRequest()->getParams();
        $result = array('status' => true);

        $ItensSegurados = new Seguro_Model_ItensSegurados();
        $Propostas = new Seguro_Model_Propostas();

        $ItensSegurados->getAdapter()->beginTransaction();
        try {
            if ($post['id_proposta']) {
                // Deleta as unidades da proposta
                //$ItensSegurados->deleteProposta($post['id_proposta']);
                // Carrega a Proposta
                $Proposta = $Propostas->get($post['id_proposta']);

                // Busca as propriedades da proposta
                $propriedades = $Proposta->atributos('PROPRIEDADE');

                // Regras da Proposta
                $Regras = new Agro_Regras();

                // Verifica se foi passado unidades
                if (is_array($post['unidade'])) {

                    $validarLimiteIS = Agro_Regras::validarLimiteIS($Proposta->id_proposta_mae, $post['unidade']);

                    // Percorre as unidades
                    foreach ($this->getRequest()->getParam('unidade') as $nro => $unidade) {
                        // Atribui o numero do item
                        $unidade['nr_item_segurado'] = $nro;

                        // Verifica producao garantida
                        if ($Proposta->respostas('QUEST_PRODUTIVIDADE_DECLARADA') == 2) {
                            // Aplica Regra RN_IS_04
                            $Regras->RN_IS_04($unidade);
                            if ($Regras->error) {
                                $result = array('status' => false, 'message' => "Item $nro: " . $Regras->message);
                                $this->getResponse()->setBody(Zend_Json::encode($result));
                                return false;
                            }
                        }

                        // Valida limite de IS
                        if (!empty($validarLimiteIS['unidades'][$nro])) {
                            $result = array('status' => false, 'message' => "Item $nro: " . $validarLimiteIS['unidades'][$nro]['message']);
                            $this->getResponse()->setBody(Zend_Json::encode($result));
                            return false;
                        }
                            
                        // Aplica Regra RN_IS_02
                        $Regras->RN_IS_02($unidade, $Proposta, $propriedades);
                        if ($item->error) {
                            $result = array('status' => false, 'message' => "Item $nro: " . $Regras->message);
                            $this->getResponse()->setBody(Zend_Json::encode($result));
                            return false;
                        }

                        // Aplica Regra RN_IS_05
                        $Regras->RN_IS_05($unidade, $Proposta);
                        if ($Regras->error) {
                            $result = array('status' => false, 'message' => "Item $nro: " . $Regras->message);
                            $this->getResponse()->setBody(Zend_Json::encode($result));
                            return false;
                        }

                        if (!$Regras->error) {
                            $ItensSegurados->save($nro, $unidade, $Proposta->id);
                        }
                    }

                    // VALIDA O LIMITE DE LMGA POR PROPOSTA
                    $ValidacoesLimiteCapacidades = $Proposta->getValidacaoLimiteCapacidade();
                    if (is_array($ValidacoesLimiteCapacidades) && count($ValidacoesLimiteCapacidades)) {
                        foreach ($ValidacoesLimiteCapacidades as $idValidacao => $Validacao) {
                            if ($Proposta->verificaCoberturas($Validacao['coberturas']) and count($Validacao['municipios']) == 0) {
                                $Utilizado = $Proposta->getValorUsadoLimiteCapacidade($idValidacao, $Validacao['coberturas'], false, false, false, $Proposta->id);
                                if (($Utilizado + $Proposta->lmga()) > $Validacao['vl_limite_capacidade']) {
                                    $ItensSegurados->getAdapter()->rollBack();
                                    $result = array('status' => false, 'message' => "Limite da Capacidade atingido. Validação Id = '{$Validacao['id']}'");
                                    $this->getResponse()->setBody(Zend_Json::encode($result));
                                    return false;
                                }
                            }

                            if ($Proposta->verificaMunicipio($Validacao['municipios'])) {
                                if (($Validacao['fl_limite_corretor'] && $Proposta->verificaCorretor($Validacao['corretores'])) || !$Validacao['fl_limite_corretor']) {
                                    $Utilizado = $Proposta->getValorUsadoLimiteCapacidade($idValidacao, false, true, $Validacao['fl_agrupar_municipios'], $Validacao['fl_limite_corretor'], $Proposta->id);
                                    if (($Utilizado + $Proposta->lmga()) > $Validacao['vl_limite_capacidade']) {
                                        $ItensSegurados->getAdapter()->rollBack();
                                        $result = array('status' => false, 'message' => "bLimite da Capacidade atingido. Validação Id = '{$Validacao['id']}'");
                                        $this->getResponse()->setBody(Zend_Json::encode($result));
                                        return false;
                                    }
                                }
                            }
                        }
                    }

                    $ItensSegurados->reOrdena($Proposta->id);
                }
            }

            if (!$Regras->error) {
                //$Propostas->gera_versao($Proposta->id);
                $ItensSegurados->getAdapter()->commit();
                $Proposta->recalcula(false, true);

                $data = $this->reloadresumoparcelamento();
                $result = array('execute' => "$.loadUnidades('{$data}');");
            } else {
                $ItensSegurados->getAdapter()->rollBack();
            }
        } catch (Exception $e) {
            $result = array('status' => false, 'message' => $e->getMessage());
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
        return false;
    }

    /**
     * Carrega as parcelas da proposta para o retorno em ajax
     *
     * @author Renato - 09/08/2010
     */
    public function loadparcelasAction() {
        if ($this->getRequest()->getParam('id_proposta')) {
            $Propostas = new Seguro_Model_Propostas();
            $this->view->parcelamento = $Propostas->get($this->getRequest()->getParam('id_proposta'));
        }
    }

    /**
     * Salva o resumo
     *
     * @author Renato - 06/08/2010
     */
    public function salvacoberturasAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva o parcelamento
     *
     * @author Renato - 06/08/2010
     */
    public function salvaparcelamentoAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array('status' => false);

        $this->getHelper('ViewRenderer')->setNoRender();
        $result = array();
        $soma = 0;

        try {
            $dados = $this->getRequest()->getParams();

            $Model = new Seguro_Model_Propostas();
            $Proposta = $Model->get($dados['id_proposta']);
            $premio_pagar = $Proposta->premio_liquido() + $Proposta->vl_custo_apolice;
            $arSafra = $Proposta->safra();

            if (is_array($dados['parcela']) && $dados['parcelamento']['qtd_parcelas'] >= 1) {
                foreach ($dados['parcela'] as $parcela) {
                    $soma_segurado += Agro_Util::formatCurrencyDb($parcela['segurado']);
                    $soma_federal += Agro_Util::formatCurrencyDb($parcela['federal']);
                    $soma_estadual += Agro_Util::formatCurrencyDb($parcela['estadual']);
                }
                $soma = $soma_segurado + $soma_federal + $soma_estadual;

                if (trim($soma) != trim($premio_pagar)) {
                    $result['message'] = "ATENÇÃO\n\nO valor calculado(" . $soma . ") é diferente do Prêmio à Pagar (" . $premio_pagar . ")";
                    $result['status'] = false;
                } else {

                    //Recalcula subvenção federal e estadual proporcional a parcela do segurado
                    foreach ($dados['parcela'] as $nro => $parcela) {
                        if ($nro == 1) {
                            $percentParcela = ((Agro_Util::formatCurrencyDb($parcela['segurado']) - $Proposta->vl_custo_apolice) * 100 ) / ($soma_segurado - $Proposta->vl_custo_apolice);
                        } else {
                            $percentParcela = (Agro_Util::formatCurrencyDb($parcela['segurado']) * 100) / ($soma_segurado - $Proposta->vl_custo_apolice);
                        }
                        if ($soma_federal > 0) {
                            $dados['parcela'][$nro]['federal'] = Agro_Util::round((($soma_federal * $percentParcela) / 100), 2);
                            $soma_tmp_federal += $dados['parcela'][$nro]['federal'];
                        }
                        if ($soma_estadual > 0) {
                            $dados['parcela'][$nro]['estadual'] = Agro_Util::round((($soma_estadual * $percentParcela) / 100), 2);
                            $soma_tmp_estadual += $dados['parcela'][$nro]['estadual'];
                        }
                    }

                    $dif_federal = $soma_federal - $soma_tmp_federal;
                    $dados['parcela'][$nro]['federal'] = $dados['parcela'][$nro]['federal'] + $dif_federal;

                    $dif_estadual = $soma_estadual - $soma_tmp_estadual;
                    $dados['parcela'][$nro]['estadual'] = $dados['parcela'][$nro]['estadual'] + $dif_estadual;

                    //Salva o parcelamento da proposta
                    $PropostasParcelas = new Seguro_Model_PropostasParcelas();
                    $PropostasParcelas->deleteProposta($dados['id_proposta'], $Proposta->id_endosso);
                    foreach ($dados['parcela'] as $nro => $parcela) {
                        $parcela['id_endosso'] = $Proposta->id_endosso;
                        if (!$PropostasParcelas->save($parcela, $nro, $dados['id_proposta'])) {
                            $this->getAdapter()->rollBack();
                            return false;
                        }
                    }

                    if ($arSafra['id'] > 15) {
                        $subvencaoConcedida = $Model->subvencaoConcedida($dados['id_proposta']);

                        if ($soma_federal > 0) {
                            if ($subvencaoConcedida['vl_subvencao_federal'] != $soma_federal) {
                                $fl_solicita_consulta_cadin = true;
                            }
                        }

                        if ($soma_estadual > 0) {
                            if ($subvencaoConcedida['vl_subvencao_estadual'] != $soma_estadual) {
                                $fl_solicita_consulta_cadin = true;
                            }
                        }

                        if ($fl_solicita_consulta_cadin) {
                            $Model->gravaConsultaCadin($dados['id_proposta'], true);

                            // SE O STATUS FOR TRANSMITIDA_SEGURADORA, MUDA O STATUS PARA AGUARDANDO_ENVIO_SEG
                            // PARA QUE A CONSULTA AO CADIN SEJA REFEITA CASO HAJA SUBVENÇÃO
                            if ($Proposta->id_status == 63) {
                                $Model->changeStatus(array('id_proposta' => $this->getRequest()->getParam('id_proposta')), 'AGUARDANDO_ENVIO_SEG');
                            }
                        }
                    }

                    //$Model->gera_versao($dados['id_proposta']);

                    $result['parcelamento'] = $Proposta->parcelamento();
                    $result['message'] = MSG_SUCCESS;
                    $result['status'] = true;
                }
            } else {
                $result['message'] = 'Nenhum parcelamento definido';
                $result['status'] = false;
            }
        } catch (Exception $e) {
            $result['message'] = $e->getMessage();
            $result['status'] = false;
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Salva o parcelamento
     *
     * @author Marcelo - 20/10/2016
     */
    public function salvareparcelamentoAction() {
    	$this->getHelper('ViewRenderer')->setNoRender();
    	$result = array('status' => false);
    	$soma = 0;

    	try {
    		$dados = $this->getRequest()->getParams();

    		$Model = new Seguro_Model_Propostas();
    		$Proposta = $Model->get($dados['id_proposta']);
    		$premio_pagar = $Proposta->premio_liquido() + $Proposta->vl_custo_apolice;
    		$arSafra = $Proposta->safra();

    		if (is_array($dados['parcela'])) {
    			foreach ($dados['parcela'] as $parcela) {
    				$soma_segurado += Agro_Util::formatCurrencyDb($parcela['segurado']);
    				$soma_federal += Agro_Util::formatCurrencyDb($parcela['federal']);
    				$soma_estadual += Agro_Util::formatCurrencyDb($parcela['estadual']);
    			}
    			$soma = $soma_segurado + $soma_federal + $soma_estadual;

    			if (trim($soma) != trim($premio_pagar) && !$dados['fl_endosso']) {
    				$result['message'] = "ATENÇÃO\n\nO valor calculado(" . $soma . ") é diferente do Prêmio à Pagar (" . $premio_pagar . ")";
    				$result['status'] = false;
    			} else {
    				//Salva o parcelamento da proposta
    				$PropostasParcelas = new Seguro_Model_PropostasParcelas();
    				$PropostasParcelas->deleteProposta($dados['id_proposta'], $Proposta->id_endosso);

    				foreach ($dados['parcela'] as $nro => $parcela) {
    					$parcela['id_endosso'] = $Proposta->id_endosso;
    					if (!$PropostasParcelas->save($parcela, $nro, $dados['id_proposta'])) {
    						$this->getAdapter()->rollBack();
    						return false;
    					}
    				}

	   				$result['message'] = MSG_SUCCESS;
    				$result['status'] = true;
    			}
    		} else {
    			$result['message'] = 'Nenhum parcelamento definido';
    			$result['status'] = false;
    		}
    	} catch (Exception $e) {
    		$result['message'] = $e->getMessage();
    		$result['status'] = false;
    	}

    	$this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Lista as informacoes da proposta
     *
     * @author Renato - 06/08/2010
     */
    public function listinformacoesadicionaisAction() {
        $this->getHelper('ViewRenderer')->setNoRender();

        $Observacoes = new Seguro_Model_PropostasObservacoes();
        $Rs = $Observacoes->getInformacoesAdicionais($this->getRequest()->getParam('id_proposta'));

        if ($Rs->count()) {
            foreach ($Rs as $Row) {
                ?>
                <tr>
                    <td><?= $Row->ds_observacao ?></td>
                    <td nowrap="nowrap"><?= $Row->ds_nome_usuario ?></td>
                    <td nowrap="nowrap" align="center">
                        <a href="/atendimento/propostaajax/deleteinformacao/id/<?= $Row->id ?>" class="icon_delete_informacao_adicional">
                            <img src="/resources/imagens/mini/delete.png" border="0" />
                        </a>
                    </td>
                </tr>
                <?
            }
        }
    }

    /**
     * Deleta informacoes da proposta
     *
     * @author Renato - 06/08/2010
     */
    public function deleteinformacaoAction() {
        Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

        $this->isAjax();

        try {
            if ($this->getRequest()->getParam('id')) {
                $Observacoes = new Atendimento_Model_Proposta_Observacoes();
                $propostas = new Seguro_Model_Propostas();

                $Row = $Observacoes->fetchRow('id = ' . $this->getRequest()->getParam('id'));

                if ($Row) {
                    //Se foi encontrado no histórico da prévia, remove de lá também
                    $Historico = new Seguro_Model_VistoriasPreviasHistoricoObservacoes();
                    $RowHistorico = $Historico->fetchRow('id_propostas_observacoes = ' . $this->getRequest()->getParam('id'));                    
                    if ($RowHistorico) {
                        $Historico->delete($RowHistorico->id);
                    }

                    // Deleta a informacao
                    $Observacoes->delete($Row->id);
                    // vide solicitação 01628
                    // $Propostas->gera_versao($Row->id_proposta);

                    // Lista as informacoes da proposta
                    $proposta = $propostas->get($this->getRequest()->getParam('id_proposta'));
                    $return = $proposta->observacoes_arquivos_geral();
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            die($e);
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Altera o status da proposta
     *
     * @author Renato - 09/08/2010
     */
    public function alterastatusAction() {
        $post = $this->getRequest()->getParams();
        $result = array('status' => false);
        $this->isAjax();

        Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

        if ($post['id_proposta']) {
            $Propostas = new Seguro_Model_Propostas();

            $Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
            $Produto = $Proposta->produto();
            $cdStatusAnterior = $Proposta->status();
            $dsDescricao = '';

            if ($post['id_status']) {
                if ($Propostas->changeStatusId($post['id_proposta'], $post['id_status'], $post['ds_observacao_status'])) {

                    $Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
                    $cdStatus = $Proposta->status();

                    if ($cdStatus == 'PROPOSTA_CANCELADA') {
                        $parcelas = $Proposta->parcelas();
                        $possuiParcelasPagas = false;
                        
                        foreach ($parcelas as $parcela) {
                            if ($parcela['fl_pago']) {
                                $possuiParcelasPagas = true;
                                break;
                            }
                        }

                        if ($possuiParcelasPagas) {
                            try {
                                $modelPropostasDevolucoes = new Seguro_Model_PropostasDevolucoes();
                                $modelPropostasDevolucoes->primeiraInclusao($this->getRequest()->getParam('id_proposta'));
                            } catch (\Throwable $th) {
                                Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                                $return = array('message' => $th->getMessage());
                                $this->getResponse()->setBody(Zend_Json::encode($return));
                                return false;
                            }
                        }
                    }

                    if ($cdStatus == 'PROPOSTA_CANCELADA' or $cdStatus == 'APOLICE_CANCELADA') {
                        $ModelCancelamento = new Atendimento_Model_TipoCancelamento();
                        $dsMotivoSeguradora = '';
                        foreach ($post['id_motivo'] as $id_motivo) {
                            $Rs = $ModelCancelamento->fetchAll($ModelCancelamento->getData('id = ' . $id_motivo));
                            $descricaoMotivo = $Rs[0]['ds_tipo_cancelamento'];

                            if ($id_motivo == Atendimento_Model_TipoCancelamento::CANC_PROP_CORRETOR_OUTRO &&
                                !empty($post['ds_descricao'])
                            ){
                                $dsDescricao = $post['ds_descricao'];
                                $descricaoMotivo .= ": {$dsDescricao}";
                            }

                            $descricaoMotivo .= "\n";
                            $dsMotivoSeguradora .= $descricaoMotivo;
                        }
                    }

                    //QUANDO UMA APOLICE FOR COLOCADA NO STATUS ENDOSSO INCOMPLETO, SERA REATIVADA A APOLICE ANTERIOR
                    if ($cdStatus == 'ENDOSSO_INCOMPLETO') {
                    	$id_proposta_reativacao = $Proposta->id_proposta_reativacao();

                        $Proposta->setEndossoVigente($id_proposta_reativacao);

                        //Transfere processo de sinistro para a proposta a ser reativada
                        $PropostaEndosso = new Endosso_Model_Propostas();
                        $Sinistro        = $PropostaEndosso->find($post['id_proposta'])->current();

                        if($Sinistro->id){
                        	if (!$PropostaEndosso->endossarSinistro($Sinistro->id, $id_proposta_reativacao)) {
                        		Zend_Db_Table_Abstract::getDefaultAdapter()->rollBack();
                        		$return = array('message' => 'Não foi possível realizar o endosso.');
                        		$this->getResponse()->setBody(Zend_Json::encode($return));
                        		return false;
                        	}
                        }
                    }

                    if ($cdStatus == 'PROPOSTA_CANCELADA' or $cdStatus == 'APOLICE_CANCELADA') {

//                        $Subject = "Alteração de Status da Proposta {$Proposta->doc()}: {$Proposta->status()}";
//                        $Body = "O Status da proposta {$Proposta->doc()} em nome de {$Proposta->ds_nome_proponente}, foi alterado para {$Proposta->status()}.\n\n";
//                        $Body .= "Observação: {$dsMotivoSeguradora}";
                        //imagem da assinatura
                        $Mail = new Agro_Mail();
                        $Mail->clearFrom();
                        $Mail->setFrom('atendimento@agrobrasilseguros.com.br', 'AgroBrasil - Agronet 2.0');
                        $filename = RESOURCES . "/imagens/assinatura_email.png";
                        $at = $Mail->createAttachment(file_get_contents($filename));
                        $at->type = Agro_Util::getMimeType($filename);
                        $at->disposition = Zend_Mime::DISPOSITION_INLINE;
                        $at->encoding = Zend_Mime::ENCODING_BASE64;
                        $at->id = 'cid_' . md5_file($filename);

                        //Notifica Corretor sobre o cancelamento
                        $Subject = "Alerta de CANCELAMENTO: Proposta {$Proposta->doc()} / {$Proposta->ds_nome_proponente}";//"Alteração de Status da Proposta {$PropostaRow->doc()}: {$PropostaRow->status()}";

                        $Body = "
<p style=\"margin-bottom: 15px\">Prezado Corretor, </p>

<p style=\"margin-bottom: 15px\">
Informamos O CANCELAMENTO da proposta <b>{$Proposta->doc()}</b> em nome de <b>{$Proposta->ds_nome_proponente}</b>, conforme motivo abaixo:
</p>

<p style=\"margin-bottom: 15px\">
Motivo: <b>{$dsMotivoSeguradora}</b>
</p>

<p style=\"margin-bottom: 15px; font-weight: bold\">
Alertamos que este cancelamento deverá ser informado de imediato, para evitar qualquer prejuízo ao Segurado.
</p>

<p style=\"margin-bottom: 15px\">
Informamos que, em caso de pagamentos realizados, a <b>ESSOR</b> efetuará a devolução do prêmio mediante crédito na conta corrente de titularidade do <b>SEGURADO</b>, cujos dados solicitamos que sejam enviados.
</p>

<p style=\"margin-bottom: 15px\">
O <b>SEGURADO</b> deverá, no prazo de 03 (três) dias contados desta solicitação, informar, por escrito, os dados da conta corrente, ou, se for o caso, que não é titular de conta corrente, sob pena de, decorrido este prazo, ficar constituído em mora.
</p>

<p style=\"margin-bottom: 15px\">
Caso o <b>SEGURADO</b> informe que não é titular de conta corrente, a <b>SEGURADORA</b> efetuará o pagamento através de ordem de pagamento. <br />
A ordem de pagamento é uma transferência de valor que fica disponível para o beneficiário retirar em Banco a ser informado.<br />
<b>Somente as pessoas que <u>não são</u> titulares de conta corrente podem receber uma ordem de pagamento.</b><br />
</p>

<p style=\"margin-bottom: 15px\">
Acesse o sistema Agronet 2.0 através do endereço: <a href=\"http://agronet.agrobrasilseguros.com.br/\">http://agronet.agrobrasilseguros.com.br/</a>
</p>

<img src=\"cid:".$at->id."\" height=\"102\" width=\"480\" />
<br />
<span style=\"color: grey; margin: 0!important;  font-family: Verdana; font-size: .5em; text-align: left; display: block;\">
<font face='webdings' style=\"color: darkgreen\">i</font> 
<span style=\"color: darkblue\"> Este e-mail, inclusive anexos, podem conter informações confidenciais de propriedade exclusiva da AgroBrasil Seguros,
<br />não devendo ser utilizado, copiado ou revelado sem prévia autorização.</span> This e-mail, including attachments, is intended<br /> for
the person(s) or company named and may contain confidential and/or legally privileged information. Unauthorized<br /> disclosure,
copying or use of this information may be unlawful and is prohibited. If you are not the intended recipient,<br /> please delete this
message and notify the sender.
</span>
<br />
<span style=\"color: grey; margin: 0!important; font-family: Verdana; font-size: .5em; text-align: left; display: block\">
<font face='webdings'  style=\"color: darkgreen\">P</font> <span style=\"font-weight: bold\">Antes de imprimir, pense em seu compromisso com o Meio Ambiente.</span> Before printing, think about your<br /> commitment
to the environment.
</div>
";
                        $this->notificarCorretor($Proposta, $Subject, $Body, array('html' => true, 'obj_email' => $Mail), false);

                        if ($cdStatus == 'PROPOSTA_CANCELADA' && $cdStatusAnterior != 'NAO_ENVIADA' && APPLICATION_ENV == 'production')  {
                            //Envia notificação do cancelamento para Essor
                            if (APPLICATION_ENV != 'production') {
                                $client = new nusoap_client(WSDL_DEV, true, false, false, false, false, 3600, 3600);
                            } else {
                                $client = new nusoap_client(WSDL_PROD, true, false, false, false, false, 3600, 3600);
                            }

                            $xml = ": <i4proerp><recusa_proposta id_endosso='" . $Proposta->ds_identificador_seguradora . "' nm_obs_endosso='" . $dsMotivoSeguradora . "'></recusa_proposta></i4proerp>";
                            $mysoapmsg = $client->serializeEnvelope($xml);

                            $params = array('Servico' => 'RecusarProposta', 'conteudoXML' => $mysoapmsg);

                            $dtEnvio = date('Y-m-d H:i:s');
                            $result = $client->call('Executar', array($params));
                            $dtRetorno = date('Y-m-d H:i:s');

                            if ($client->getError()) {

                                Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();

                                $Propostas->gravaLogTransmissao(
                                    array(
                                        'id_proposta' => $this->getRequest()->getParam('id_proposta'),
                                        'ds_retorno' => utf8_encode($client->getError()),
                                        'fl_sucesso' => 'f',
                                        'ds_tipo_transmissao' => 'RecusarProposta',
                                        'ds_xml_transmissao' => $mysoapmsg,
                                        'dt_envio'           => $dtEnvio,
							            'dt_retorno'         => $dtRetorno
                                    )
                                );

                                $return = array('status' => false, 'message' => 'Erro: Transmissão Seguradora. (conexão)');
                            } else {

                                $result_xml = simplexml_load_string(utf8_encode($result['ExecutarResult']), 'SimpleXMLElement', LIBXML_NOCDATA);
                                if ($result_xml->erro->attributes()->cd_retorno > 0) {
                                    Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                                    $Propostas->gravaLogTransmissao(
                                        array(
                                            'id_proposta' => $this->getRequest()->getParam('id_proposta'),
                                            'ds_retorno' => $result_xml->erro->attributes()->nm_retorno,
                                            'fl_sucesso' => 'f',
                                            'ds_tipo_transmissao' => 'RecusarProposta',
                                            'ds_xml_transmissao' => $mysoapmsg,
                                            'dt_envio'           => $dtEnvio,
							                'dt_retorno'         => $dtRetorno
                                        )
                                    );

                                    $return = array('status' => false, 'message' => 'Erro: Transmissão Seguradora. (1)');
                                } else {

                                    $Propostas->gravaLogTransmissao(
                                        array(
                                            'id_proposta' => $this->getRequest()->getParam('id_proposta'),
                                            'ds_retorno' => 'Cancelada com sucesso.',
                                            'fl_sucesso' => 't',
                                            'ds_tipo_transmissao' => 'RecusarProposta',
                                            'ds_xml_transmissao' => $mysoapmsg,
                                            'dt_envio'           => $dtEnvio,
                                            'dt_retorno'         => $dtRetorno 
                                        )
                                    );
                                    $this->gravaMotivoCancelamento($post['id_proposta'], $post['id_motivo'], $dsDescricao);
                                    $this->cancelarVistoriaPrevia($this->getRequest()->getParam('id_proposta'));

                                    $mensagem = MSG_SUCCESS;

                                    if ($Produto["ds_nome_cultura"] == "Pastagem") {
                                        try {
                                            $AgriTaskCotacao = new Agro_AgritaskCotacao();
                                            $AgriTaskCotacao->atualizarStatus($post['id_proposta'], Agro_AgritaskCotacao::STATUS_PROPOSTA_CANCELADA);
                                        } catch (\Throwable $th) {
                                            $mensagem = "Alteração realizada com sucesso, porém não foi possível atualizar o status na Agritask.";
                                            $Propostas->gravaLogTransmissao(
                                                array(
                                                        'id_proposta' => $post['id_proposta'],
                                                        'ds_retorno' => $th->getMessage(),
                                                        'fl_sucesso' => 'f',
                                                        'ds_tipo_transmissao' => 'AGRITASK_ATUALIZAR_STATUS',
                                                        'dt_envio'           => $dtEnvio,
                                                        'dt_retorno'         => $dtRetorno                                            
                                                )
                                            );
                                        }
                                    }

                                    Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                                    $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => $mensagem);
                                }
                            }
                        } else {
                            $this->gravaMotivoCancelamento($post['id_proposta'], $post['id_motivo'], $dsDescricao);
                            $this->cancelarVistoriaPrevia($this->getRequest()->getParam('id_proposta'));
                            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                            $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => MSG_SUCCESS);
                        }
                    } else {
                        $this->cancelarVistoriaPrevia($this->getRequest()->getParam('id_proposta'));
                        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
                        $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => MSG_SUCCESS);
                    }
                } else {
                    Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
                    $return = array('status' => false, 'message' => MSG_ERROR);
                }
            }
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Criado para validar se deve ou não mostrar o bloco de alteração de status na aba Gerenciamento da Proposta
     */
    public function alterastatuscompermissaoAction() {
        $this->alterastatusAction();
    }


    /**
     * Salva os motivos selecionados para cancelamento apolice/proposta
     *
     * @param int $idProposta
     * @param array $arMotivo
     * @param string|null $dsDescricao
     */
    private function gravaMotivoCancelamento(int $idProposta, array $arMotivo, string $dsDescricao = '')
    {
        $modelPropostasCancelamento = new Seguro_Model_PropostasCancelamento();

        foreach ($arMotivo as $idMotivo) {

            $dadosMotivo['id_proposta'] = $idProposta;
            $dadosMotivo['id_motivo_cancelamento'] = $idMotivo;
            $dadosMotivo['ds_descricao'] = '';

            if ($idMotivo == Atendimento_Model_TipoCancelamento::CANC_PROP_CORRETOR_OUTRO) {
                $dadosMotivo['ds_descricao'] = $dsDescricao;
            }

            $retorno = $modelPropostasCancelamento->save($dadosMotivo);
        }

        return $retorno;
    }

    /**
     * Altera o corretor da proposta
     *
     * @author Renato - 09/08/2010
     */
    public function alterarcorretorAction() {
        $result = array('status' => false);
        $this->isAjax();

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {

                $Corretores = new Atendimento_Model_Proposta_Corretores();
                $Propostas = new Atendimento_Model_Proposta();

                if ($Corretores->save($this->getRequest()->getParam('id_proposta'), $this->getRequest()->getParam('id_corretor'), $this->getRequest()->getParam('vl_comissao'), $this->getRequest()->getParam('id_preposto'))) {
//                    REMOVIDO EM FUNÇÃO DA SOLICITAÇÃO 01628
//                    if ($Propostas->gera_versao($this->getRequest()->getParam('id_proposta'))) {
                        $result['execute'] = 'history.go(0)';
                        $result['message'] = MSG_SUCCESS;
                        $result['status'] = true;
//                    } else {
//                        $result['message'] = MSG_ERROR;
//                    }

                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }


    /**
     * Libera o corretor para renovacao
     *
     * @author Renato - 12/07/2011
     */
    public function alterarcorretorrenovacaoAction() {
        $result = array('status' => false);
        $this->isAjax();

        try {
            Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

            if ($this->getRequest()->isPost()) {
                $Corretores = new Atendimento_Model_Proposta_Corretores();
                if ($Corretores->libera_renovacao($this->getRequest()->getParams())) {
                    $result['message'] = MSG_SUCCESS;
                    $result['status'] = true;
                } else {
                    $result['message'] = MSG_ERROR;
                }
            }

            Agro_Db_Table_Abstract::getDefaultAdapter()->commit();
        } catch (Exception $e) {
            Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
            $result['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($result));
    }

    /**
     * Retorna o Resumo e o Parcelamento da Proposta
     */
    public function reloadresumoparcelamento() {
        $return = array();

        if ($this->getRequest()->getParam('id_proposta')) {
            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();
            $propriedades = $Proposta->atributos('PROPRIEDADE');

            $return['id_proposta'] = $this->getRequest()->getParam('id_proposta');
            $return['lmga'] = Agro_Util::formatDbCurrency($Proposta->lmga());
            $return['area'] = $Proposta->area();
            $return['unidades'] = $Proposta->unidades();
            $return['coberturas'] = $Proposta->coberturas();
            $return['premio_liquido'] = $Proposta->premio_liquido();
            $return['premio_pagar'] = $return['premio_liquido'] + $propriedades['PROD_CUSTO_APOLICE'];
            $return['parcelamento'] = $Proposta->parcelamento();
        }

        return Zend_Json::encode($return);
    }

    /**
     * Calcula o premio de uma cobertura
     *
     * @author Renato - 11/08/2010
     */
    public function calculapremioAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $dados = $this->getRequest()->getParams();
        $return = array();

        if ($dados['id_proposta']) {
            $Propostas = new Seguro_Model_Propostas();
            $Regras = new Agro_Regras();

            $Proposta = $Propostas->get($dados['id_proposta']);
            $propriedades = $Proposta->atributos('PROPRIEDADE');

            $dados['comissao']['vl_comissao_original'] = $Proposta->comissao();
            $dados['comissao']['vl_nova_comissao'] = $Proposta->comissao();

            $calculo = $Regras->RN_CALC_03(Agro_Util::formatCurrencyDb($dados['lmga']), $dados['taxa'], $dados['comissao'], $dados['id_proposta']);

            $PropostaCoberturas = new Seguro_Model_PropostasCoberturas();
            $PropostaCoberturas->atualizaPremio($dados, Agro_Util::formatCurrencyDb($calculo['premio']));
            $recalcula = $Proposta->recalcula();

            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();
            $propriedades = $Proposta->atributos('PROPRIEDADE');

            if ($dados['vl_lmi']) {
                $PropostaCoberturas->atualizaLmi($dados['id_cobertura'], $dados['id_proposta'], $dados['vl_lmi']);
            }

            $return['premio_liquido'] = $Proposta->premio_liquido();
            $return['premio_pagar'] = $return['premio_liquido'] + $propriedades['PROD_CUSTO_APOLICE'];
            $return['coberturas'] = $Proposta->coberturas_contratadas();
            $return['parcelamento'] = $Proposta->parcelamento();

            //$Propostas->gera_versao($Proposta->id);
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Calcula o premio de uma cobertura
     *
     * @author Renato - 11/08/2010
     */
    public function atualizalmiAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $dados = $this->getRequest()->getParams();
        $return = array();

        if ($dados['id_proposta']) {
            $Propostas = new Seguro_Model_Propostas();
            $PropostaCoberturas = new Seguro_Model_PropostasCoberturas();
            $PropostaCoberturas->atualizaLmi($dados['id_cobertura'], $dados['id_proposta'], $dados['vl_lmi']);
        }

        $return['status'] = true;

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Deleta uma cobertura da proposta
     *
     * @author Renato - 11/08/2010
     */
    public function deletacoberturaAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $dados = $this->getRequest()->getParams();

        if ($dados['id']) {
            $PropostaCoberturas = new Seguro_Model_PropostasCoberturas();
            $Propostas = new Seguro_Model_Propostas();

            $PropostaCoberturas->delete($dados['id'], $dados['id_proposta']);
            $Proposta = $Propostas->get($dados['id_proposta']);
            $propriedades = $Proposta->atributos('PROPRIEDADE');
            $Proposta->recalcula();

            $return = array();
            $return['premio_liquido'] = $Proposta->premio_liquido();
            $return['premio_pagar'] = $return['premio_liquido'] + $propriedades['PROD_CUSTO_APOLICE'];
            $return['parcelamento'] = $Proposta->parcelamento();
            $return['coberturas'] = $Proposta->coberturas();
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Recalcula as parcelas conforme o numero de parcelas passado por parametro
     *
     * @author Renato - 13/08/2010
     */
    public function calculaparcelasAction() {

        $this->getHelper('ViewRenderer')->setNoRender();
        $dados = $this->getRequest()->getParams();

        $Propostas = new Seguro_Model_Propostas();
        $Proposta = $Propostas->get($dados['id_proposta']);
        $calculo = $Proposta->recalcula($dados['parcelamento'], false, true);

        if ($calculo['msg']) {
            $this->getResponse()->setBody(Zend_Json::encode(array('status' => false, 'message' => $calculo['msg'])));
        } else {
            $this->getResponse()->setBody(Zend_Json::encode(array('status' => true, 'parcelamento' => $Proposta->parcelamento())));
        }
    }

    /**
     * Calcula o valor percentual da parcela
     *
     * @author Renato - 13/08/2010
     */
    public function calculapercentualAction() {
        $total = $this->getRequest()->getParam('premio_segurado_total');
        $this->getHelper('ViewRenderer')->setNoRender();
        $return = array();

        if (is_array($this->getRequest()->getParam('parcela'))) {
            foreach ($this->getRequest()->getParam('parcela') as $nro => $parcela) {
                if ($parcela['percenteual'] && $total) {
                    $valor = ($total * $parcela['percenteual']) / 100;

                    $return[] = array(
                        'valor' => Agro_Util::formatDbCurrency($valor),
                        'parcela' => $nro,
                    );
                }
            }
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Aceita a proposta
     *
     * @author Renato - 13/08/2010
     */
    public function aceitarpropostaAction() {
        $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => 'Proposta Encaminhada.');
        $this->getHelper('ViewRenderer')->setNoRender();

        try {
        	Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

        	$ProdutosCoberturas = new Produto_Model_ProdutosCoberturas();
	        $Conferencia = new Atendimento_Model_Proposta_Conferencia();
	        $Propostas = new Seguro_Model_Propostas();
	        $Proponente = new Seguro_Model_Proponentes();
	        $Beneficiarios = new Seguro_Model_Beneficiarios();

	        $Beneficiarios->setValidadoByProposta($this->getRequest()->getParam('id_proposta'));

	        $Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
	        $Produto = $Proposta->produto();

	        /*
	         * SE FOR PROPOSTA DA ESSOR SEGURADORA, VERIFICA SE TEM SUBVENCAO E CASO POSITIVO INSERE REGISTRO
	         * SOLICITANDO CONSULTA AO CADIN
	         */
	        if ($Produto['ds_nome_fantasia'] == 'ESSOR SEGUROS') {
	            if ($Proposta->subvencao_federal() > 0 || $Proposta->subvencao_estadual() > 0) {
	                $Propostas->changeStatus(array('id_proposta' => $Proposta['id']), 'AGUARDANDO_ENVIO_SEG');
	                $Propostas->gravaConsultaCadin($this->getRequest()->getParam('id_proposta'));
	            } else {
	                $Propostas->changeStatus(array('id_proposta' => $Proposta['id']), 'AGUARDANDO_ENVIO_SEG');
	            }
	        }
	        /*
	         * FIM CONTROLE CONSULTA AO CADIN - ESSOR
	         */ else {
	            if ($ProdutosCoberturas->getCoberturasPrevia($Proposta['id_produto'], $this->getRequest()->getParam('id_proposta'))) {
	                $Propostas->changeStatus(array('id_proposta' => $Proposta['id']), 'AGUARDANDO_VISTORIA_PREVIA');
	            } else {
	                $Propostas->changeStatus(array('id_proposta' => $Proposta['id']), 'AGUARDANDO_ENVIO_SEG');
	            }
	        }

	        if ($this->getRequest()->getParam('notificar_corretor')) {
	            if ($this->getRequest()->getParam('ds_observacao')) {
	                $body = "Alguns campos foram alterados em sua proposta.\n\n";
	                $body .= $this->getRequest()->getParam('ds_observacao');
	            } else {
	                $body = "Proposta {$Proposta['id']} Transmitida com Sucesso.";
	            }

	            $this->notificarCorretor($Proposta, "Proposta {$Proposta['id']} Transmitida com Sucesso.", $body);
	        }

	        $Proponente->setReceitaValidado($Proposta->cpf_cnpj_proponente);

	        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

        } catch (Exception $e) {
        	Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();
        	$return['message'] = $e->getMessage();
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Aceita a proposta
     *
     * @author Renato - 13/08/2010
     */
    public function enviarobservacaoAction() {
        $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => 'Proposta Encaminhada.');
        $this->getHelper('ViewRenderer')->setNoRender();

        $Propostas = new Seguro_Model_Propostas();
        $Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));

        if ($this->getRequest()->getParam('ds_observacao')) {
            $body = "Alguns campos foram alterados em sua proposta.\n\n";
            $body .= $this->getRequest()->getParam('ds_observacao');
            $this->notificarCorretor($Proposta, "Proposta {$Proposta['id']} alterada.", $body);
            $return = array('status' => true, 'message' => 'Observação enviada com sucesso.');
        } else {
            $return = array('status' => false, 'message' => 'O campo observação deve ser preenchido.');
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Devolve uma proposta
     *
     * @author Renato - 13/08/2010
     */
    public function devolverpropostaAction() {
        $this->getHelper('ViewRenderer')->setNoRender();

        try {
            $Conferencia = new Atendimento_Model_Proposta_Conferencia();
            $Pendencias = new Atendimento_Model_Pendencia();
            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->get($this->getRequest()->getParam('id_proposta'));
            $PropostaBoletos = new Atendimento_Model_Proposta();

            $Subject = "Alteração de Status da Proposta " . $this->getRequest()->getParam('id_proposta') . ": Proposta Devolvida";
            $body = "A Proposta número (" . $this->getRequest()->getParam('id_proposta') . ") foi devolvida pelos seguintes motivos:\n";

            $valido = true;
            if ($this->getRequest()->getParam('ds_observacao_pendencia') == '') {
                if (!$this->getRequest()->getParam('id_pendencia')) {
                    $valido = false;
                }
            }

            if ($valido) {
                $ModelStatus = new Sistema_Model_Status();

                $dsObservacao = $this->getRequest()->getParam('ds_observacao_pendencia') . "<br>";

                if ($this->getRequest()->getParam('id_pendencia')) {
                    $RsPendencias = $Pendencias->getPendencias($this->getRequest()->getParam('id_pendencia'));
                    if ($RsPendencias->count()) {
                        foreach ($RsPendencias as $Pendencia) {
                            $body .= " - " . $Pendencia->ds_nome_pendencia . "\n";
                            $dsObservacao .= $Pendencia->ds_nome_pendencia . "<br>";
                        }
                    }
                }

                $Propostas->changeStatusId($this->getRequest()->getParam('id_proposta'), $ModelStatus->getId('DEVOLVIDA'), $dsObservacao);

                $body .= "\nObservação: " . $this->getRequest()->getParam('ds_observacao_pendencia') . "\n";
                $this->notificarCorretor($Proposta, $Subject, $body);
                $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();window.close();", 'message' => 'Proposta Devolvida.');

                //fecha os boletos
                $PropostaBoletos->desativaBoletos($this->getRequest()->getParam('id_proposta'));
            } else {
                $return = array('status' => false, 'message' => 'Para devolução da proposta é necessário marcar uma pendência ou preencher a observação.');
            }
        } catch (Exception $e) {
            die($e);
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    /**
     * Salva as pendencias da proposta
     *
     * @author Renato - 13/08/2010
     */
    public function salvarpendenciasAction()
    {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        $return = array('status' => true, 'execute' => "window.opener.$('#frmFilter').submit();", 'message'=>"Processo concluido com sucesso.");
        $body = "Pendências na proposta pelos seguintes motivos:\n\n";

        $pendencias = new Atendimento_Model_Proposta_Pendencias();
        $propostas = new Seguro_Model_Propostas();
        $proposta = $propostas->get($this->getRequest()->getParam('id_proposta'));

        try {
            if (!Agro_Util::filterVariable($this->getRequest()->getParam('id_proposta'))) {
                throw new ValueError('Proposta inválida.');
            }

            $idProposta = (int)$this->getRequest()->getParam('id_proposta');

            // Troca o status da proposta
            $idStatus = $propostas->changeStatus(
                array(
                    'id_proposta' => $idProposta,
                    'ds_observacao' => $this->getRequest()->getParam('ds_observacao_pendencia')
                ),
                'CONF_PENDENCIAS'
            );

            // Seta as novas pendencias no novo status
            if ($this->getRequest()->getParam('id_pendencia')) {
                foreach ($this->getRequest()->getParam('id_pendencia') as $idPendencia) {
                    $data = array(
                        'id_pendencia' => $idPendencia,
                        'id_proposta_status' => $idStatus,
                        'dt_prazo' => $this->getRequest()->getParam('dt_prazo'),
                        'hr_prazo' => $this->getRequest()->getParam('hr_prazo')
                    );

                    if (!$pendencias->save($data)) {
                        $return = array('status' => false, 'message' => 'Erro ao salvar as pendências');
                        $this->getResponse()->setBody(Zend_Json::encode($return));
                        return false;
                    }
                }

                // Busca os pendencias com os nomes para colocar no chamado
                $rs = $pendencias->getPendencias($idProposta);
                if (is_array($rs['ds_nome_pendencia'])) {
                    $motivo = "";
                    foreach ($rs['ds_nome_pendencia'] as $Pendencia) {
                        $motivo .= $Pendencia . "; ";
                        $body .= $Pendencia . "\n";
                    }
                }

                // Se foi digitado uma observacao, coloca junto no corpo do chamado
                if ($this->getRequest()->getParam('ds_observacao_pendencia')) {
                    $body .= $this->getRequest()->getParam('ds_observacao_pendencia');
                }

                $body .= "\nPrazo: " . $this->getRequest()->getParam('dt_prazo');
                $body .= " Hora: " . $this->getRequest()->getParam('hr_prazo') . "\n\n";
                $body .= "Para evitar prejuízos ao Segurado, é imprescindível regularizar a proposta dentro do prazo.";
                $body .= "\n\n";

                $this->criaChamadoProposta($this->getRequest()->getParam('id_proposta'), $body);

                //imagem da assinatura
                $mail = new Agro_Mail();
                $mail->clearFrom();
                $mail->setFrom('atendimento@agrobrasilseguros.com.br', 'AgroBrasil - Agronet 2.0');
                $filename = RESOURCES . "/imagens/assinatura_email.png";
                $at = $mail->createAttachment(file_get_contents($filename));
                $at->type = Agro_Util::getMimeType($filename);
                $at->disposition = Zend_Mime::DISPOSITION_INLINE;
                $at->encoding = Zend_Mime::ENCODING_BASE64;
                $at->id = 'cid_' . md5_file($filename);

                $subject = "Alerta de Pendência de Conferência: Proposta {$proposta->doc()}";
                $subject .= " / {$proposta->ds_nome_proponente}";

                $body = "<p style=\"margin-bottom: 15px\">Prezado Corretor, </p>

<p style=\"margin - bottom: 15px\">
Informamos que a proposta <b>{$proposta->doc()}</b> em nome de <b>{$proposta->ds_nome_proponente}</b> possui uma ou mais pendências, conforme motivo abaixo:
</p>

<p style=\"margin-bottom: 15px\">
Motivo: <b>{$motivo}</b><br />
Detalhamento: <b>{$this->getRequest()->getParam('ds_observacao_pendencia')}</b><br />
Prazo: <b>{$this->getRequest()->getParam('dt_prazo')}</b> Hora: <b>{$this->getRequest()->getParam('hr_prazo')}</b>
</p>

<p style=\"margin-bottom: 15px; font-weight: bold;\">
Para evitar prejuízos ao Segurado, é imprescindível regularizar a proposta dentro do prazo.
Para tanto, acesse o módulo de chamados no sistema.
</p>

<p style=\"margin-bottom: 15px\">
Acesse o sistema Agronet 2.0 através do endereço: <a href=\"http://agronet.agrobrasilseguros.com.br/\">http://agronet.agrobrasilseguros.com.br/</a>
</p>

<img src=\"cid:" . $at->id . "\" height=\"102\" width=\"480\" />
<br />
<span style=\"color: grey; margin: 0!important;  font-family: Verdana; font-size: .5em; text-align: left; display: block;\">
<font face='webdings' style=\"color: darkgreen\">i</font> 
<span style=\"color: darkblue\"> Este e-mail, inclusive anexos, podem conter informações confidenciais de propriedade exclusiva da AgroBrasil Seguros,
<br />não devendo ser utilizado, copiado ou revelado sem prévia autorização.</span> This e-mail, including attachments, is intended<br /> for
the person(s) or company named and may contain confidential and/or legally privileged information. Unauthorized<br /> disclosure,
copying or use of this information may be unlawful and is prohibited. If you are not the intended recipient,<br /> please delete this
message and notify the sender.
</span>
<br />
<span style=\"color: grey; margin: 0!important; font-family: Verdana; font-size: .5em; text-align: left; display: block\">
<font face='webdings'  style=\"color: darkgreen\">P</font> <span style=\"font-weight: bold\">Antes de imprimir, pense em seu compromisso com o Meio Ambiente.</span> Before printing, think about your<br /> commitment
to the environment.
</div>
";

                $this->notificarCorretor($proposta, $subject, $body, array('html' => true, 'obj_email' => $mail),false);
            }
        } catch (Throwable $e) {
            $return = array('status' => false, 'message' => $e->getMessage());
        }

        // Retorna o array de JSON
        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

    public function salvarinformacoesgeraisversionAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        try {
            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();

            $Proposta->dt_vigencia_inicio = Agro_Util::formatDate($this->getRequest()->getParam('dt_vigencia_inicio'), Zend_Date::W3C);
            $Proposta->dt_vigencia_fim = Agro_Util::formatDate($this->getRequest()->getParam('dt_vigencia_fim'), Zend_Date::W3C);
            $Proposta->vl_custo_apolice = $this->getRequest()->getParam('vl_custo_apolice');
            $Proposta->id_produto = $this->getRequest()->getParam('id_produto');
            $Proposta->id_secao = ($this->getRequest()->getParam('id_secao') ? $this->getRequest()->getParam('id_secao') : null);

            if ($Proposta->save()) {
                //$Propostas->gera_versao($Proposta->id);
            }

            $this->getResponse()->setBody(Zend_Json::encode(array('status' => true, 'message' => MSG_SUCCESS)));
        } catch (Exception $e) {
            $this->getResponse()->setBody(Zend_Json::encode(array('status' => false, 'message' => MSG_ERROR)));
        }
    }

    public function alterarpendenciatransmissaoAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        $ids = implode(',', $this->getRequest()->getParam('id_analise'));

        try {
            $Analise_Transmissao = new Seguro_Model_PropostasAnaliseTransmissao();
            $Analise_Transmissao->removeAnaliseTransmissao($this->getRequest()->getParam('id_proposta'), $ids);

            if ($ids == '') {
                $Propostas = new Seguro_Model_Propostas();
                $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();
                $Proposta->fl_analise_transmissao = '2';
                $Proposta->save();
            }

            $this->getResponse()->setBody(Zend_Json::encode(array('status' => true, 'message' => MSG_SUCCESS)));
        } catch (Exception $e) {
            $this->getResponse()->setBody(Zend_Json::encode(array('status' => false, 'message' => MSG_ERROR)));
        }
    }

    public function salvarinformacoesgeraisAction() {
        $this->getHelper('ViewRenderer')->setNoRender();
        $this->getHelper('layout')->disableLayout();

        try {
            $Propostas = new Seguro_Model_Propostas();
            $Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();

            $idPropostaRenovada = !empty($this->getRequest()->getParam('id_proposta_renovada')) ? $this->getRequest()->getParam('id_proposta_renovada') : null;
            $Proposta->id_proposta_renovada = $idPropostaRenovada;
            $Proposta->id_secao = $this->getRequest()->getParam('id_secao');
            $Proposta->ds_identificador_seguradora = $this->getRequest()->getParam('ds_identificador_seguradora');
            $Proposta->save();

            $Corretores = new Seguro_Model_PropostasCorretores();
            $Corretor = $Corretores->fetchRow("id_proposta = " . $this->getRequest()->getParam('id_proposta'));
            $Corretor->vl_comissao = $this->getRequest()->getParam('vl_comissao');
            $Corretor->save();

            //$Propostas->gera_versao($this->getRequest()->getParam('id_proposta'));

            $this->getResponse()->setBody(Zend_Json::encode(array('status' => true, 'message' => MSG_SUCCESS)));
        } catch (Exception $e) {
            $this->getResponse()->setBody(Zend_Json::encode(array('status' => false, 'message' => MSG_ERROR)));
        }
    }

    /**
     * Cria um chamado novo
     *
     * @param integer $id_proposta
     * @param string $body
     *
     * @author Renato - 13/08/2010
     */
    public function criaChamadoProposta($id_proposta, $body) {
        $TipoChamado  = new Atendimento_Model_TipoChamado();
        $Departamento = new Sistema_Model_Departamentos();
        $Prioridade   = new Atendimento_Model_Prioridade();
        $Chamado      = new Atendimento_Model_Chamado();
        $User         = Zend_Auth::getInstance()->getIdentity();

        $id_departamento = $Departamento->getDepartamentoEmpresa("03.486.745/0001-09", "ATENDIMENTO");
        $id_tipo_chamado = $TipoChamado->getIdTipoChamado('PENDENCIA', $id_departamento);

        return $Chamado->insertChamado(array(
                'id_tipo_chamado' => $id_tipo_chamado,
                'id_prioridade' => $Prioridade->getIdPrioridade('NORMAL'),
                'id_departamento' => $id_departamento,
                'id_proposta' => $id_proposta,
                'fl_pendencia_agrobrasil' => (($User->tp_usuario == 'F' && $User->id_empresa == 20) ? '0' : '1'),
                'id_responsavel' => $TipoChamado->getIdResponsavel($id_tipo_chamado),
                'ds_descricao' => $body
        ));
    }

    public function transmitirseguradoraAction() {


        $this->getHelper('ViewRenderer')->setNoRender();
        $return['status'] = true;

        if (APPLICATION_ENV != 'production') {
            $client = new nusoap_client(WSDL_DEV, true, false, false, false, false, 3600, 3600);
        } else {
            $client = new nusoap_client(WSDL_PROD, true, false, false, false, false, 3600, 3600);
        }

        $Transmissao = new Seguro_Model_TransmissaoEssor();
        $Propostas = new Seguro_Model_Propostas();
        $Proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();

        /*
         * VALIDACOES DE TRANSMISSAO
         */

        //1 - VERIFICA SE O PREMIO LIQUIDO É IGUAL A SOMA DAS PARCELAS
        $premio = $Proposta->premio_liquido() + $Proposta->vl_custo_apolice;
        $parcelas = $Proposta->premio_total_parcelamento();

        if ($parcelas != $premio) {
            $return['status'] = false;
            $return['message'] = "Erro de Transmissão: Prêmio Líquido difere do Parcelamento";

            $Propostas->gravaLogTransmissao(
                array(
                    'id_proposta' => $this->getRequest()->getParam('id'),
                    'ds_retorno' => "Erro de Transmissão: Prêmio Líquido difere do Parcelamento",
                    'fl_sucesso' => 'f',
                    'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
                    'ds_xml_transmissao' => $mysoapmsg
                )
            );
        }


        /*
         * FIM VALIDCOES DE TRANSMISSAO
         */

        if ($return['status'] == true) {

            $xml = $Transmissao->montaXMLTransmissaoEssor($this->getRequest()->getParam('id'));
            $mysoapmsg = $client->serializeEnvelope($xml);

            $params = array('Servico' => 'EMITIR_PROPOSTA', 'conteudoXML' => $mysoapmsg);
            $result = $client->call('ExecutarRow', array($params));

            if ($client->getError()) {
                $return['status'] = false;
                $return['message'] = "Erro: Transmissão Seguradora. (conexão)";

                $Propostas->gravaLogTransmissao(
                    array(
                        'id_proposta' => $this->getRequest()->getParam('id'),
                        'ds_retorno' => utf8_encode($client->getError()),
                        'fl_sucesso' => 'f',
                        'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
                        'ds_xml_transmissao' => $mysoapmsg
                    )
                );
            } else {
                $result_xml = simplexml_load_string(utf8_encode($result['ExecutarRowResult']), 'SimpleXMLElement', LIBXML_NOCDATA);
                if ($result_xml->erro) {
                    $return['status'] = false;
                    $return['message'] = "Erro: Transmissão Seguradora.";

                    $Propostas->gravaLogTransmissao(
                        array(
                            'id_proposta' => $this->getRequest()->getParam('id'),
                            'ds_retorno' => $result_xml->erro->attributes()->nm_retorno,
                            'fl_sucesso' => 'f',
                            'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
                            'ds_xml_transmissao' => $mysoapmsg,
                        )
                    );
                } else {
                    if ($result_xml->id_endosso) {
                        $Propostas->update(array('id_usuario_alteracao' => Zend_Auth::getInstance()->getIdentity()->id, 'dt_alteracao' => 'now()', "ds_identificador_seguradora" => $result_xml->id_endosso), "id = " . $this->getRequest()->getParam('id'));
                        $Propostas->gravaLogTransmissao(
                            array(
                                'id_proposta' => $this->getRequest()->getParam('id'),
                                'ds_retorno' => $result_xml->id_endosso,
                                'fl_sucesso' => 't',
                                'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
                                'ds_xml_transmissao' => $mysoapmsg,
                            )
                        );

                        $statusAtual = $Propostas->getLastStatus($this->getRequest()->getParam('id'));

                        //SE A PROPOSTA ESTIVER NO STATUS AGUARDANDO_ENVIO_SEG OU AGUARDANDO_VISTORIA_PREVIA
                        // E NÃO POSSUIR SUBVENÇÃO, ELA DEVE SER COLOCADA NO STATUS TRANSMITIDA_SEGURADORA
                        if (($Proposta->id_status == 61 || $Proposta->id_status == 62) && ($Proposta->subvencao_federal() <= 0 && $Proposta->subvencao_estadual() <= 0)) {
                            $Propostas->changeStatus(array('id_proposta' => $this->getRequest()->getParam('id')), 'AGUARDANDO_ENVIO_SEG');
                        }

                        $Propostas->atualiza_versao($Proposta->id_versao, $result_xml->id_endosso);

                        $return['message'] = 'Proposta transmitida com sucesso.';
                        $return['status'] = true;
                    } else {
                        $return['status'] = false;
                        $return['message'] = 'Erro: Falha de recepção na Seguradora.';

                        $Propostas->gravaLogTransmissao(
                            array(
                                'id_proposta' => $this->getRequest()->getParam('id'),
                                'ds_retorno' => $result_xml->sucesso->attributes()->nm_retorno,
                                'fl_sucesso' => 'f',
                                'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
                                'ds_xml_transmissao' => $mysoapmsg,
                            )
                        );
                    }
                }
            }
        }

        $this->getResponse()->setBody(Zend_Json::encode($return));
    }

}
