<?php

class Endosso_AjaxController extends Agro_Controller_Action {

	/**
	 * Inicia a classe
	 */
	public function init() {
		$this->getHelper('layout')->disableLayout();
		require_once(APPLICATION_PATH . "/../library/Agro/nusoap/nusoap.php");
	}

	/**
	 * Mostra ou salva os dados do proponente
	 */
	public function proponenteAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Proponentes = new Endosso_Model_Proposta_Proponentes();
			$values = $this->getRequest()->getParams();
			$status = true;

			if ($Proponentes->save($values)) {
				$message = "Dados do proponente atualizados.";
			} else {
				$message = "Ocorreu um erro ao atualizar o proponente.";
				$status = false;
			}

			$this->getResponse()->setBody(Zend_Json::encode(
				array(
					'message' => $message,
					'status' => $status
				)
			));
		} else {
			$Proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
			$this->getResponse()->setBody($this->view->proponente($Proposta, true, true, $this->getRequest()->has('origemSolicitacaoEndosso')));
		}
	}

	/**
	 * Mostra ou salva os dados da propriedade
	 */
	public function propriedadeAction() {
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Propriedades = new Endosso_Model_Proposta_Propriedades();
			$this->getHelper('ViewRenderer')->setNoRender();
			$values = $this->getRequest()->getParams();
			$status = true;

			if ($Propriedades->save($values)) {
				$message = "Dados da propriedades atualizados.";
			} else {
				$message = "Ocorreu um erro ao atualizar a propriedades.";
				$status = false;
			}

			$this->getResponse()->setBody(Zend_Json::encode(
				array(
					'message' => $message,
					'status' => $status
				)
			));
		} else {
		    $importarItensLaudo = (bool)$this->getRequest()->getParam('importar_itens_laudo');
			$Proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
			$dadosPropriedade = $Proposta->propriedade();

            $modelVP = new Seguro_Model_VistoriaPreviaEmpresa;
            // "Digitação Finalizada/Transmitido" id_status = 71
            $dadosVistoria = $modelVP->getDadosDigitacaoFinalizadaByIdProposta($Proposta->id_proposta_endossada, 71, true);
            $this->view->dadosLaudo = array(
                'troca_estado_municipio' => false
            );

            if (!empty($dadosVistoria)) {
            	$status_analise = $modelVP->getStatusAnalise($dadosVistoria['id']);
            }

            //caso exista vistoria
            //e status de análise diferente de 10
            if (!empty($dadosVistoria) && $importarItensLaudo && ($status_analise != 176)) { 
                $dadosLaudo = $modelVP->getLaudo($dadosVistoria['id'], $Proposta->id_proposta_endossada);
                if (!empty($dadosLaudo)) {
                    $this->view->dadosLaudo = array(
                        'troca_estado_municipio' => $dadosLaudo['troca_estado_municipio'],
                        'id_municipio' => $dadosLaudo['id_municipio'],
                        'id_estado' => $dadosLaudo['id_estado'],
                        'ds_nome_municipio' => $dadosLaudo['ds_nome_municipio'],
                        'ds_sigla' => $dadosLaudo['ds_sigla'],
                    );

                    if ($dadosLaudo['troca_estado_municipio']) {
                        unset($dadosPropriedade['ds_endereco_cep']);
                        unset($dadosPropriedade['ds_nome_municipio']);
                        unset($dadosPropriedade['ds_sigla']);
                        unset($dadosPropriedade['id_estado']);
                        unset($dadosPropriedade['id_municipio']);
                    }
                }
            }

			$this->view->form = new Endosso_Form_Propriedade();
			$this->view->form->populate($dadosPropriedade);
			$this->view->pessoa_autorizada = $Proposta->pessoa_autorizada();
			$this->view->id_proposta_renovada = $Proposta->id_proposta_renovada;
		}
	}

	/**
	 * Mostra ou salva os dados do questionario
	 */
	public function questionarioAction() {
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Questionarios = new Endosso_Model_Proposta_Questionarios();
			$this->getHelper('ViewRenderer')->setNoRender();
			$values = $this->getRequest()->getParams();
			$status = true;

			if ($Questionarios->save($values)) {
				$message = "Dados do questionário atualizados.";
			} else {
				$message = "Ocorreu um erro ao atualizar o questionário.";
				$status = false;
			}

			$this->getResponse()->setBody(Zend_Json::encode(array('status' => $status, 'message' => $message)));
		} else {
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
		}
	}

	/**
	 * Mostra ou salva a observacao
	 */
	public function observacoesAction() {
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Observacoes = new Endosso_Model_Proposta_Observacoes();
			$this->getHelper('ViewRenderer')->setNoRender();
			$values = $this->getRequest()->getParams();
			$status = true;

			if ($Observacoes->save($values)) {
				$message = "Observação atualizada.";
			} else {
				$message = "Ocorreu um erro ao atualizar a observação.";
				$status = false;
			}

			$this->getResponse()->setBody(Zend_Json::encode(array('status' => $status, 'message' => $message)));
		} else {
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
		}
	}

	/**
	 * Salva a observacao chamada vi lote
	 */
	public function observacoesloteAction() {
		$Propostas = new Endosso_Model_Propostas();
		$Observacoes = new Endosso_Model_Proposta_Observacoes();
		$Observacao = $Observacoes->fetchRow("id_proposta = {$this->getRequest()->getParam('id_proposta')} and fl_principal is true");
		$obs_atual = $Observacao->ds_observacao;
		$this->getRequest()->setParam('ds_observacao', $obs_atual ." \n\r ".$this->getRequest()->getParam('ds_observacao'));
		$this->getHelper('ViewRenderer')->setNoRender();
		$values = $this->getRequest()->getParams();

		if ($Observacoes->save($values)) {
			$return = array('status' => true, 'message' => 'Observação atualizada.');
		} else {
			$return = array('status' => false, 'message' => 'Erro ao atualizar a observação.');
		}

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

	/**
	 * Mostra ou salva os beneficiarios
	 */
	public function beneficiariosAction() {
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Beneficiarios = new Endosso_Model_Proposta_Beneficiarios();
			$this->getHelper('ViewRenderer')->setNoRender();
			$values = $this->getRequest()->getParams();
			$status = true;

			if ($Beneficiarios->persistir($values)) {
				$message = 'Beneficiários atualizados.';
			} else {
				$message = $Beneficiarios->getMessages();
				$status = false;
			}
			$this->getResponse()->setBody(Zend_Json::encode(['status' => $status, 'message' => $message]));
		} else {
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();

			$Bancos = new Endosso_Model_Bancos();
			$this->view->bancos = $Bancos->getCombo();
		}
	}

	/**
	 * Mostra ou salva as unidades seguradas
	 */
	public function unidadesAction()
    {
        $this->getHelper('ViewRenderer')->setNoRender();
        $propostas = new Endosso_Model_Propostas();

        if ($this->getRequest()->isPost()) {
            $quadras = new Endosso_Model_Proposta_Quadras();
            $values = $this->getRequest()->getParams();

            if ($quadras->save($values)) {
                $this->getResponse()->setBody('alert("Unidades seguradas atualizadas.");');
            } else {
                $this->getResponse()->setBody('alert("Ocorreu um erro ao atualizar as unidades seguradas");');
            }
        } else {
            $proposta = $propostas->find($this->getRequest()->getParam('id'))->current();
            $delete = false;

            if (
                $this->getRequest()->has('importar_itens_laudo')
                && $this->getRequest()->getParam('importar_itens_laudo') === '1'
            ) {
                $delete = true;
            }

            $this->getResponse()->setBody($this->view->unidades($proposta, array('delete' => $delete)));
        }
    }

	/**
	 * Mostra ou salva os croquis
	 */
	public function croquisAction() {
		$this->getHelper('ViewRenderer')->setNoRender();

		$parametros = $this->getRequest()->getParams();

		$Propostas = new Endosso_Model_Propostas();
		$Proposta = $Propostas->find($parametros['id'])->current();

		$options = ['files' => false];

		if (isset($parametros['hidedelete']) && $parametros['hidedelete'] === 'true') {
            $options['hidedelete'] = true;
        }

        if (isset($parametros['origemSolicitacaoEndosso']) && $parametros['origemSolicitacaoEndosso'] === 'true') {
            $options['origemSolicitacaoEndosso'] = true;
        }

		$this->getResponse()->setBody($this->view->croquis($Proposta, $options));
	}

	/**
	 * Mostra ou salva o resumo das coberturas
	 */
	public function coberturasAction() {
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Coberturas = new Endosso_Model_Proposta_Coberturas();
			$this->getHelper('ViewRenderer')->setNoRender();
			$status = true;

			if ($Coberturas->save($this->getRequest()->getParams())) {
				$message = 'Resumo das coberturas atualizados.';
			} else {
				$message = $Coberturas->getMessages();
				$status = false;
			}

			$this->getResponse()->setBody(Zend_Json::encode(['status' => $status, 'message' => $message]));
		} else {
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
		}
	}

	/**
	 * Salva o resumo das coberturas no lote
	 */
	public function coberturasloteAction()
	{
		$Propostas = new Endosso_Model_Propostas();

		$Coberturas = new Endosso_Model_Proposta_Coberturas();
		$this->getHelper('ViewRenderer')->setNoRender();

		if ($Coberturas->save($this->getRequest()->getParams())) {
			$return = array('status' => true, 'message' => 'Resumo das coberturas atualizados');
		} else {
			$return = array('status' => false, 'message' => $Coberturas->getMessages());
		}

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

	/**
	 * Mostra ou salva o resumo das coberturas
	 */
	public function calculataxaAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$params = $this->getRequest()->getParams();
		$return = array();

		try {
			$lmga = Agro_Util::formatCurrencyDb($params['vl_lmga']);

			if ($params['id_proposta']) {
				if (is_array($params['coberturas']) && count($params['coberturas'])) {
					foreach ($params['coberturas'] as $cobertura) {
						$premio = Agro_Util::formatCurrencyDb($cobertura['vl_premio']);

						if (($lmga > 0)) {
							$taxa = ($premio / $lmga) * 100;
							$params['coberturas'][$cobertura['id_cobertura']]['vl_taxa'] = $taxa;

							$return['vl_premio_liquido'] = $return['vl_premio_liquido'] + $premio;
							$return['taxas'][$cobertura['id_cobertura']] = Agro_Util::formatDbCurrency($taxa, 5, '.', '');
						}
					}

					$return['vl_premio_pagar']   = Agro_Util::formatDbCurrency($return['vl_premio_liquido'] + $params['vl_custo_apolice']);
					$return['vl_premio_liquido'] = Agro_Util::formatDbCurrency($return['vl_premio_liquido']);
				}
			}

			$Coberturas = new Endosso_Model_Proposta_Coberturas();
			$Coberturas->save($params);

			$this->getResponse()->setBody(Zend_Json::encode($return));
		} catch (Exception $e) {
			die($e);
		}
	}

	/**
	 * Mostra ou salva o parcelamento
	 */
	public function parcelamentoAction() {
		$id_proposta = $this->getRequest()->getParam('id') ? $this->getRequest()->getParam('id') : $this->getRequest()->getParam('id_proposta');
		$Propostas   = new Endosso_Model_Propostas();
		$Parcelas    = new Endosso_Model_Proposta_Parcelas();

		$Proposta    = $Propostas->find($id_proposta)->current();
		$Original    = $Propostas->find($Proposta->id_proposta_endossada)->current();

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

			$this->getHelper('ViewRenderer')->setNoRender();

			$parcela   = $Proposta->premio_liquido() - $Original->premio_liquido();
			$informado = $this->getRequest()->getParam('parcela');

			if(!$this->getRequest()->getParam('tipo_endosso')){//aqui
				$this->getResponse()->setBody(Zend_Json::encode(
					array(
						'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nSelecione o tipo de Endosso para prosseguir com a operação.",
						'status' => false
					)
				));
				
				return false;
			}

			/*
			 * VALIDACAO: SE A OPCAO PARA COBRAR SUBVENCAO DO SEGURADO FOR MARCADA, O MOTIVO DEVE SER INFORMADO
			 */
			if($this->getRequest()->getParam('cobrar_subvencao_federal')){
				if(!$this->getRequest()->getParam('id_motivo_cobrar_subvencao_federal')){
					$this->getResponse()->setBody(Zend_Json::encode(
						array(
							'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nInforme o motivo para a cobrança da Subvenção Federal.",
							'status' => false
						)
					));

					return false;
				}
			}
			if($this->getRequest()->getParam('cobrar_subvencao_estadual')){
				if(!$this->getRequest()->getParam('id_motivo_cobrar_subvencao_estadual')){
					$this->getResponse()->setBody(Zend_Json::encode(
						array(
							'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nInforme o motivo para a cobrança da Subvenção Estadual.",
							'status' => false
						)
					));

					return false;
				}
			}

			/*
			 * VALIDACAO: SE JA TIVER SUBVENCAO FEDERAL CONCECIDA NA APOLICE ORIGINAL, NAO PERMITE ENDOSSO DE COBRANCA COM SUBVENCAO FEDERAL POSITIVA
			 */
			if($this->getRequest()->getParam('tipo_endosso') == 1 && $informado['federal'] > 0.0){
				$id_proposta_mae = $Propostas->getPropostaMae($id_proposta);
				$PropostaMae     = $Propostas->find($id_proposta_mae)->current();

				if($PropostaMae->verifica_subvencao_concedida()){
					$this->getResponse()->setBody(Zend_Json::encode(
						array(
							'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nEsta apólice já possui subvenção concedida.",
							'status' => false
						)
					));

					return false;
				}
			}

			/*
			 * VALIDACAO: SE O ENDOSSO FOR DE RESTITUICAO, NAO PERMITE PARCELA POSITIVA
			 */
			if($this->getRequest()->getParam('tipo_endosso') == 2 && ($informado['federal'] > 0 || $informado['segurado'] > 0 || $informado['estadual'] > 0)){
				$this->getResponse()->setBody(Zend_Json::encode(
					array(
						'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nO valor da parcela deve ser negativo para Endosso de Restituição.",
						'status' => false
					)
				));

				return false;
			}

			if (($informado['segurado'] > 0) && ($parcela < 0) && $this->getRequest()->getParam('tipo_endosso') != '1' ) {
				$this->getResponse()->setBody(Zend_Json::encode(
					array(
						'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nO valor do prêmio segurado deve ser negativo.",
						'status' => false
					)
				));

				return false;
			}

			/*
			 * VALIDACAO: SE O ENDOSSO FOR DE COBRANCA, NAO PERMITE PARCELA NEGATIVA
			 */
			if (($informado['segurado'] < 0) && ($parcela > 0)) {
				$this->getResponse()->setBody(Zend_Json::encode(
					array(
						'message' => "ATENÇÃO: Este parcelamento não pode ser salvo.\n\nO valor do prêmio segurado deve ser positivo.",
						'status' => false
					)
				));

				return false;
			}

			$status = true;

			if ($Parcelas->save($this->getRequest()->getParams())) {
				$message = "Parcelas atualizadas.";
			} else {
				$status = false;
				$message = "Não foi possível realizar o procedimento.";
			}

			$this->getResponse()->setBody(Zend_Json::encode(
				array(
					'message' => $message,
					'status' => $status
				)
			));
		} else {
			$this->view->proposta = $Proposta;
			$this->view->parcelas = $Proposta->parcelas();
            $this->view->temParcelasSalvas = !empty($this->view->parcelas) ? 'true' : 'false';
				
			foreach($this->view->parcelas as $parcela){
				if($parcela['vl_subvencao_federal'] < 0 && $parcela['id_motivo_cobranca_subvencao_segurado']){
					$this->view->id_motivo_cobranca_subvencao_federal = $parcela['id_motivo_cobranca_subvencao_segurado'];
				}
				if($parcela['vl_subvencao_estadual'] < 0 && $parcela['id_motivo_cobranca_subvencao_segurado']){
					$this->view->id_motivo_cobranca_subvencao_estadual = $parcela['id_motivo_cobranca_subvencao_segurado'];
				}
			}
				
			$this->view->tipo_endosso = $this->getRequest()->getParam('tipo_endosso');
		}
	}

	/**
	 * Recalcula o parcelamento
	 */
	public function recalculaparcelamentoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();

		$Coberturas  = new Endosso_Model_Proposta_Coberturas();

		$parcelas = $Coberturas->gera_parcela_unica($this->getRequest()->getParam('id_proposta'), $this->getRequest()->getParams());

		foreach($parcelas as $key => $parcela){
			$parcelas[$key]['dt_vencimento'] = Agro_Util::formatDate($parcela['dt_vencimento']);
		}

		if (is_array($parcelas)) {
			$this->getResponse()->setBody(Zend_Json::encode($parcelas));
		} else {
			$this->getResponse()->setBody($Coberturas->getMessages());
		}
	}

	/**
	 * Calcula parcela de subvencao Federal no endosso lote
	 */
	public function cobrasubvencaoseguradoloteAction()
    {
		$this->getHelper('ViewRenderer')->setNoRender();
		
		$vl_subvencao = $this->getRequest()->getParam('vl_subvencao_federal')
            ? $this->getRequest()->getParam('vl_subvencao_federal')
            : $this->getRequest()->getParam('vl_subvencao_estadual');

		$nr_parcela = 1;
		$parcelas = $this->getRequest()->getParam('parcelas');
        $aumentoPercentualSubvencao = !empty($this->getRequest()->getParam('aumentoPercentualSubvencao'));

        if (!$aumentoPercentualSubvencao) {
            while (count($parcelas) >= $nr_parcela) {

                $parcela[$nr_parcela]['nr_parcela'] = $nr_parcela;
                $parcela[$nr_parcela]['vl_subvencao_federal'] = 0;
                $parcela[$nr_parcela]['vl_subvencao_estadual'] = 0;
                $parcela[$nr_parcela]['vl_segurado'] = number_format($parcelas[$nr_parcela - 1]['valor'], 2, '.', '');
                $parcela[$nr_parcela]['vl_total'] = number_format($parcelas[$nr_parcela - 1]['valor'], 2, '.', '');
                $parcela[$nr_parcela]['dt_vencimento'] = Agro_Util::formatDate($parcelas[$nr_parcela - 1]['vencimento'], Zend_Date::W3C);

                $nr_parcela++;
            }
        }

		$parcela[$nr_parcela]['nr_parcela'] = $nr_parcela;
		$parcela[$nr_parcela]['vl_subvencao_federal'] = number_format(
			($this->getRequest()->getParam('vl_subvencao_federal') ? $this->getRequest()->getParam('vl_subvencao_federal') : 0), 2, '.', '');
		$parcela[$nr_parcela]['vl_subvencao_estadual'] = number_format(
			($this->getRequest()->getParam('vl_subvencao_estadual') ? $this->getRequest()->getParam('vl_subvencao_estadual') : 0), 2, '.', '');;
		$parcela[$nr_parcela]['vl_segurado'] = 0;
		$parcela[$nr_parcela]['vl_total'] = number_format($vl_subvencao, 2, '.', '');

        $numeroParcelaDataVencimento = !$aumentoPercentualSubvencao ? $nr_parcela-2 : 0;
		$parcela[$nr_parcela]['dt_vencimento'] = Agro_Util::formatDate($parcelas[$numeroParcelaDataVencimento]['vencimento'], Zend_Date::W3C);

		$this->getResponse()->setBody(Zend_Json::encode(array('status' => true, 'message' => $parcela)));
	}

	/**
	 * Metodo de parcelamento utilizado para chamada de endosso em lote
	 */
	public function parcelamentoloteAction() {
		$this->getHelper('ViewRenderer')->setNoRender();	
		$Parcelas = new Endosso_Model_Proposta_Parcelas();

		if ($this->getRequest()->isPost()) {
			if ($Parcelas->save($this->getRequest()->getParams())) {
				$return = array('status' => true, 'message' => 'Parcelas atualizadas.');
			} else {
				$return = array('status' => false, 'message' => 'Não foi possivel salvar parcelas.');
			}
		} else { 
			$pls = $Parcelas->fetchAll("id_proposta = {$this->getRequest()->getParam('id_proposta')}")->toArray(); 
			$return = array('status' => true, 'message' => $pls);
		}

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

	/**
	 * Calcula parcela de subvencao Federal/Estadual devida pelo segurado
	 */
	public function cobrasubvencaoseguradoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();

		//$this->getRequest()->getParam('parcelas_endosso')
		
		$Propostas   = new Endosso_Model_Propostas();
		$Proposta    = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();

		if($this->getRequest()->getParam('cobrar_subvencao_federal')){
			$vl_total = $subvencao_federal = $Proposta->subvencao_federal_endossos() * -1;
		}

		if($this->getRequest()->getParam('cobrar_subvencao_estadual')){
			$vl_total = $subvencao_estadual = $Proposta->subvencao_estadual_endossos() * -1;
		}

		if($this->getRequest()->getParam('id_motivo_cobrar_subvencao_estadual') == '4'){
			$propriedades = $Proposta->atributos_rn('PROPRIEDADE');
			$dt_vencimento = mktime (0, 0, 0, date("m"), date("d") + $propriedades['PROD_DIAS_VENCIMENTO_PARCELA'], date("Y"));
		} else {
			$dt_vencimento = mktime (0, 0, 0, date("m"), date("d") + 7, date("Y"));
		}
		
		$vl_segurado = round(($vl_total * -1) / $this->getRequest()->getParam('parcelas_endosso'), 2);
		
		$nr_parcela = 1;
		
		while ($this->getRequest()->getParam('parcelas_endosso') >= $nr_parcela) {
			
			if($nr_parcela == 1){
				$parcela[$nr_parcela]['nr_parcela']            = $nr_parcela;
				$parcela[$nr_parcela]['vl_subvencao_federal']  = 0;
				$parcela[$nr_parcela]['vl_subvencao_estadual'] = 0;
				$parcela[$nr_parcela]['vl_segurado']           = number_format($vl_segurado, 2, '.', '');
				$parcela[$nr_parcela]['vl_total']              = number_format($vl_segurado, 2, '.', '');
				$parcela[$nr_parcela]['dt_vencimento']         = date('d/m/Y', $dt_vencimento);
				
				$vl_segurado_total += $vl_segurado;
			} else {
				$dt_vencimento = mktime (0, 0, 0, date("m"), date("d") + (30 * ($nr_parcela - 1)), date("Y"));
				
				$vl_segurado_total += $vl_segurado;
				
				if($nr_parcela == $this->getRequest()->getParam('parcelas_endosso')){
					$diff = $vl_segurado_total - ($vl_total * -1);
					
					if($diff > 0){
						$vl_segurado = $vl_segurado - $diff;
					}
					
					if($diff < 0){
						$vl_segurado = $vl_segurado + $diff;
					}
				}
				
				$parcela[$nr_parcela]['nr_parcela']            = $nr_parcela;
				$parcela[$nr_parcela]['vl_subvencao_federal']  = 0;
				$parcela[$nr_parcela]['vl_subvencao_estadual'] = 0;
				$parcela[$nr_parcela]['vl_segurado']           = number_format($vl_segurado, 2, '.', '');
				$parcela[$nr_parcela]['vl_total']              = number_format($vl_segurado, 2, '.', '');
				$parcela[$nr_parcela]['dt_vencimento']         = date('d/m/Y', $dt_vencimento);
				
			}
			$nr_parcela++;
		}
		
		$parcela[$nr_parcela]['nr_parcela']            = $nr_parcela;
		$parcela[$nr_parcela]['vl_subvencao_federal']  = number_format($subvencao_federal, 2, ',', '');
		$parcela[$nr_parcela]['vl_subvencao_estadual'] = number_format($subvencao_estadual, 2, ',', '');
		$parcela[$nr_parcela]['vl_segurado']           = 0;
		$parcela[$nr_parcela]['vl_total']              = number_format($vl_total, 2, '.', '');;
		$parcela[$nr_parcela]['dt_vencimento']         = date('d/m/Y', $dt_vencimento);
		
		$this->getResponse()->setBody(Zend_Json::encode($parcela));
	}

	/**
	 * Mostra ou salva o parcelamento
	 */
	public function informacoesAction() {
		$this->view->load = $this->getRequest()->getParam('load') or false;
		$Propostas = new Endosso_Model_Propostas();

		if ($this->getRequest()->isPost()) {
			$Observacoes = new Endosso_Model_Proposta_Observacoes();
			$this->getHelper('ViewRenderer')->setNoRender();

			if ($Observacoes->save_informacoes($this->getRequest()->getParams())) {
				$this->getResponse()->setBody(Zend_Json::encode(array('status' => 1)));
			} else {
				$this->getResponse()->setBody(Zend_Json::encode(array('status' => 0)));
			}
		} else {
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
		}
	}

	/**
	 * Mostra ou salva o gerenciamento
	 */
	public function gerenciamentoAction() {
		$Propostas = new Endosso_Model_Propostas();
		$params = $this->getRequest()->getParams();

		if ($this->getRequest()->isPost()) {
			$Proposta = $Propostas->find($this->getRequest()->getParam('id_proposta'))->current();
			$Original = $Propostas->find($Proposta->id_proposta_mae)->current();
			$Gerenciamento = new Endosso_Model_Proposta_Gerenciamento();
			
			$this->getHelper('ViewRenderer')->setNoRender();
			
			$inicio = strtotime(Agro_Util::formatDate($params['dt_vigencia_inicio'], Zend_Date::W3C));
			$inicio_original = strtotime($Original->dt_vigencia_inicio);
			$fim = strtotime(Agro_Util::formatDate($params['dt_vigencia_fim'], Zend_Date::W3C));
			$status = false;

			if ($inicio > $fim) {
				$message = "ATENÇÃO\n\nA data inicial não pode ser maior que a data final.";
			} elseif ($inicio < $inicio_original) {
				$message = "ATENÇÃO\n\nA data inicial não pode ser menor que a data de vigência original.";
			} elseif (!$params['id_produto']) {
				$message = "ATENÇÃO\n\nSelecione um produto.";
			} elseif (!$params['dt_vigencia_inicio']) {
				$message = "ATENÇÃO\n\nInforme e data de inicio de vigência.";
			} elseif (!$params['dt_vigencia_fim']) {
				$message = "ATENÇÃO\n\nInforme a data de final de vigência.";
			} elseif (!$params['vl_custo_apolice']) {
				$message = "ATENÇÃO\n\nInforme o custo da apólice.";
			} else {
				if ($Gerenciamento->save($this->getRequest()->getParams())) {
					$message = "Dados atualizados.";
					$status = true;
				} else {
					$message = "ATENÇÃO\n\nOcorreu um erro na solicitação.";
				}
			}

			$this->getResponse()->setBody(Zend_Json::encode(array('status' => $status, 'message' => $message)));
		} else {
            $importarItensLaudo = $this->getRequest()->getParam('importar_itens_laudo');
			$this->view->proposta = $Propostas->find($this->getRequest()->getParam('id'))->current();
			$this->view->dadosLaudo = null;
			if ($importarItensLaudo) {
                $modelVP = new Seguro_Model_VistoriaPreviaEmpresa;
                $dadosVistoria = $modelVP->getDadosDigitacaoFinalizadaByIdProposta($this->view->proposta->id_proposta_endossada, 71, true);

                if (!empty($dadosVistoria)) {
                    $this->view->dadosLaudo = $modelVP->getLaudo($dadosVistoria['id'], $this->view->proposta->id_proposta_endossada);
                }
            }
		}
	}

	/**
	 * Finaliza o endosso
	 */
	public function finalizaAction() {

		$params = $this->getRequest()->getParams();
		$return = ['message' => '', 'status' => true, 'break' => false];
		$this->isAjax();

		Zend_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();
		
		try {
			$isEmissaoEndossoCobrancaOk = false;

			if ($params['status'] && $params['id_proposta']) {
                $ds_observacao = false;
				$Propostas = new Endosso_Model_Propostas();
				$PropostaFisico = new Atendimento_Model_PropostaDocumentoFisico();
				$PropostaDigitalizado = new Seguro_Model_PropostaStatusDocumentoDigitalizado();

				if ((new Log_Model_PropostasTransmissao())->isEmited($params['id_proposta'])) {
					$return['status'] = false;
					$return['message'] = 'Está proposta já foi transmitida. Por favor, verifique o log de transmissão.';
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;
				}

				$Proposta = $Propostas->find($params['id_proposta'])->current();
					
				if (in_array($Proposta->status(), ['ORCAMENTO_ENDOSSO', 'ENDOSSO_INCOMPLETO'])) {
                    $rowPropostasObservacoes = (new Endosso_Model_Proposta_Observacoes())->fetchAll(["id_proposta = {$params['id_proposta']}"])->current();

                    if (empty($rowPropostasObservacoes)) {
                        $return['status'] = false;
                        $return['message'] = 'É necessário preencher as Observações.';
                        $return['break'] = true;
                        $this->getResponse()->setBody(Zend_Json::encode($return));
                        return false;
                    }

                    if (!empty($rowPropostasObservacoes) && empty($rowPropostasObservacoes['ds_observacao'])) {
                        $return['status'] = false;
                        $return['message'] = 'É necessário preencher as Observações.';
                        $return['break'] = true;
                        $this->getResponse()->setBody(Zend_Json::encode($return));
                        return false;
                    }

                    $ds_observacao = $rowPropostasObservacoes['ds_observacao'];
                }

				$id_endossada = $Propostas->getPropostaVigente($params['id_proposta']);
				$id_ultimo_endosso_cobranca = $Propostas->getUltimoEndossoCobranca($params['id_proposta']);

				$TipoEndosso = new Endosso_Model_TiposEndossos();
				$Select      = $TipoEndosso->getData("id = ".$params['tp_endosso']);
				$tpEndosso   = $TipoEndosso->fetchAll($Select);

				if($tpEndosso[0]->ds_tipo == 'REDUCAO' && !empty($id_ultimo_endosso_cobranca)){
					$Original = $Propostas->find($id_ultimo_endosso_cobranca)->current();
				} else {
					$Original = $Propostas->find($params['id_proposta'])->current();
				}
			
				/*
				 * VALIDACAO DE PREMIO
				 * 1 - Com movimento de cobrança: obrigatório ter valor a cobrar
				 * 2 - Com movimento de Restituição: obrigatório ter valor a devolver
				 * 3 - Sem movimento: não pode movimentar prêmio, ou seja, não pode ter valor a cobrar ou devolver
				 */
				$novo_premio       = $Proposta->premio_liquido() - $Original->premio_liquido();
				$novo_parcelamento = $Proposta->cobranca();

				if($tpEndosso[0]->ds_tipo == 'COBRANCA' && $novo_parcelamento['parcelamento'][1]['vl_total'] <= 0){
                    $return['status'] = false;
                    $return['message'] = 'Endosso de Cobrança deve ter Prêmio a Pagar';
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;
				}

				if($tpEndosso[0]->ds_tipo == 'REDUCAO' && $novo_parcelamento['parcelamento'][1]['vl_total'] >= 0){
                    $return['status'] = false;
                    $return['message'] = 'Endosso de Restituição deve ter Prêmio a Restituir.';
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;
				}

				if($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' && ($novo_premio < 0 || $novo_premio > 0)){
                    $return['status'] = false;
                    $return['message'] = 'Endosso Sem Movimento não pode ter Prêmio a Pagar ou a Restituir.';
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;

				}

				if($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' && ($novo_parcelamento['parcelamento'][1]['vl_total'] > 0 || $novo_parcelamento['parcelamento'][1]['vl_total'] < 0)){
                    $return['status'] = false;
                    $return['message'] = 'Endosso Sem Movimento não pode ter Prêmio a Pagar ou a Restituir.';
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;

				}

				// VALIDAÇÃO CAR
				$configuracaoCarAtiva = (new Produto_Model_Atributogrupos())
					->isAtributoLiberadoParaProduto((int) $Proposta['id_produto'], 'IS_CAR');

				if ($configuracaoCarAtiva && Seguro_Service_Car::isCarObrigatorio((int) $Proposta['id'])) {
					$possuiItemSemIdentificacaoCar = false;

					$possuiItemSemIdentificacaoCar = (new Seguro_Model_ItensSegurados())->possuiItemSemIdentificacaoCar((int) $Proposta['id']);
					
					$mensagemCar = '';
					if ($possuiItemSemIdentificacaoCar) {
						$mensagemCar = 'Falta identificação de CAR em ao menos um dos itens declarados. Será necessário seleção para efetivação.';
					}

					if (!empty($mensagemCar)) {
						$return['status'] = false;
						$return['message'] = $mensagemCar;
						$this->getResponse()->setBody(Zend_Json::encode($return));
						return false;
					}
				}
				
				/*
				 * FIM VALIDACAO DE PREMIO
				 */

				if ($Proposta->coberturas_atualizadas() || $this->getRequest()->getParams('fl_lote') || ($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' || $tpEndosso[0]->ds_tipo == 'CANCELAMENTO')) {

					if ($params['status'] == 'AGUARDANDO_ENVIO_SEG') {
                        /**
                         * Validações de capacidade
                         */
                        $modelSeguroPropostas = new Seguro_Model_Propostas();
                        $rowSeguroProposta = $modelSeguroPropostas->find($params['id_proposta'])->current();
                        $rowPropostaAnterior = $modelSeguroPropostas->find($rowSeguroProposta->recupera_id_proposta_vigente($params['id_proposta']))->current();
                        $diferencaLmga = $rowSeguroProposta->lmga() - $rowPropostaAnterior->lmga();

                        if ($diferencaLmga > 0) {
                            $coberturasValidacao = $rowSeguroProposta->proposta_coberturas_validacao_capacidade();
                            $propostaPreposto = $rowSeguroProposta->preposto();
                            $propostaPropriedade = $rowSeguroProposta->propriedade();

                            if ($propostaPreposto['id_usuario']) {
                                $id_usuario = $propostaPreposto['id_usuario'];
                            } else {
                                $PropostaCorretor = $rowSeguroProposta->corretor();
                                $id_usuario = $PropostaCorretor['id_usuario'];
                            }

                            $validacoesLimiteCapacidades = $rowSeguroProposta->getValidacaoLimiteCapacidade();
                            $flValidacaoNaoEncontrada = true;

                            foreach ($coberturasValidacao as $cobertura) {
                                foreach ($validacoesLimiteCapacidades as $validacao) {
                                    if (
                                        (
                                            in_array($propostaPropriedade['id_estado'], $validacao['uf']) &&
                                            in_array($id_usuario, $validacao['corretores']) &&
                                            in_array($cobertura['id_cobertura'], $validacao['coberturas'])
                                        )
                                        ||
                                        (
                                            $validacao['fl_agrupar_municipios'] == true &&
                                            in_array($propostaPropriedade['id_municipio'], $validacao['municipios']) &&
                                            in_array($id_usuario, $validacao['corretores']) &&
                                            in_array($cobertura['id_cobertura'], $validacao['coberturas'])
                                        )
                                    ) {
                                        $flValidacaoNaoEncontrada = false;
                                    }
                                }
                            }

                            if ($flValidacaoNaoEncontrada) {
                                $return['status'] = false;
                                $return['message'] = "Não há Validação de Capacidade configurada para este Produto/Cobertura (" . $cobertura['id_cobertura'] . ").\nFavor entrar em contato com a AgroBrasil.";
                                $this->getResponse()->setBody(Zend_Json::encode($return));
                                return false;
                            } else {
                                foreach ($coberturasValidacao as $cobertura) {
                                    foreach ($validacoesLimiteCapacidades as $idValidacao => $validacao) {
                                        if (
                                            (
                                                in_array($propostaPropriedade['id_estado'], $validacao['uf']) &&
                                                in_array($id_usuario, $validacao['corretores']) &&
                                                in_array($cobertura['id_cobertura'], $validacao['coberturas'])
                                            )
                                            ||
                                            (
                                                in_array($propostaPropriedade['id_municipio'], $validacao['municipios']) &&
                                                in_array($id_usuario, $validacao['corretores']) &&
                                                in_array($cobertura['id_cobertura'], $validacao['coberturas'])
                                            )
                                        ) {
                                            $limiteCapacidade = $validacao['vl_limite_capacidade'];

                                            if (!empty($validacao['vl_reserva_tecnica'])) {
                                                $limiteCapacidade -= $validacao['vl_reserva_tecnica'];
                                            }

                                            if (in_array($cobertura['id_cobertura'], $validacao['coberturas']) and $rowSeguroProposta->verificaCorretor($validacao['corretores']) and count($validacao['municipios']) == 0) {
                                                $Utilizado = $rowSeguroProposta->getValorUsadoLimiteCapacidade($idValidacao, $validacao['coberturas'], false, false, $validacao['fl_limite_corretor']);
                                                $Utilizado = $Utilizado ?? 0;

                                                if (($Utilizado + $diferencaLmga) > $limiteCapacidade) {
                                                    $return['status'] = false;
                                                    $return['message'] = "Limite da Capacidade atingido (2). Validação Id = '{$validacao['id']}'";
                                                    $this->getResponse()->setBody(Zend_Json::encode($return));
                                                    return false;
                                                }
                                            }

                                            if ($rowSeguroProposta->verificaCorretor($validacao['corretores']) && $rowSeguroProposta->verificaMunicipio($validacao['municipios']) && in_array($cobertura['id_cobertura'], $validacao['coberturas'])) {
                                                $Utilizado = $rowSeguroProposta->getValorUsadoLimiteCapacidade($idValidacao, $validacao['coberturas'], true, $validacao['fl_agrupar_municipios'], $validacao['fl_limite_corretor']);
                                                $Utilizado = $Utilizado ?? 0;

                                                if (($Utilizado + $diferencaLmga) > $limiteCapacidade) {
                                                    $return['status'] = false;
                                                    $return['message'] = "Limite da Capacidade atingido (3). Validação Id = '{$validacao['id']}'";
                                                    $this->getResponse()->setBody(Zend_Json::encode($return));
                                                    return false;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        if ((int)$Proposta['id'] !== (int)$Proposta['id_proposta_mae'] && empty($Proposta['nr_apolice'])) {
                            $propostaMae = $Propostas->find($Proposta['id_proposta_mae'])->current();

                            if (!empty($propostaMae)) {
                                $Proposta->nr_apolice = $propostaMae->nr_apolice;
                                $Proposta->save();
                            }
                        }

						$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();
						$ModelPropostas = new Seguro_Model_Propostas();

						if($params['fl_apolice_original']){
							$id_proposta_mae = $Propostas->getPropostaMae($params['id_proposta']);
							$PropostaMae     = $Propostas->find($id_proposta_mae)->current();
							$Original->ds_identificador_seguradora = $PropostaMae->ds_identificador_seguradora;
						}
						$xml       = $Transmissao->montaXMLTransmissaoEssor($params['id_proposta'], $tpEndosso[0]->ds_tipo, $Original->ds_identificador_seguradora, $ds_observacao, $this->getRequest()->getParams('fl_lote'));
						$mysoapmsg = $client->serializeEnvelope($xml);

						$paramsws   = array('Servico' => 'EMITIR_PROPOSTA', 'conteudoXML' => $mysoapmsg);

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

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

							$ModelPropostas->gravaLogTransmissao(
									array(
											'id_proposta'        => $params['id_proposta'],
											'ds_retorno'         => 'Erro de conexão: '.$client->getError(),
											'fl_sucesso'         => 'f',
											'ds_tipo_transmissao' => 'EMITIR_PROPOSTA (Endosso)',
											'ds_xml_transmissao' => $mysoapmsg,
											'dt_envio'           => $dtEnvio,
											'dt_retorno'         => $dtRetorno,
									)
								);
						} else {
							$result_xml = simplexml_load_string(utf8_encode($result['ExecutarRowResult']), 'SimpleXMLElement', LIBXML_NOCDATA);
							$nm_retorno = empty($result_xml->erro->attributes()->nm_retorno) ? $result_xml->nm_retorno->__toString() : $result_xml->erro->attributes()->nm_retorno;

							if($result_xml->erro || ($result_xml->cd_retorno > 0)){
								$return['status'] = false;
								$return['message'] = "Erro: Transmissão Seguradora.";

								$ModelPropostas->gravaLogTransmissao(
										array(
												'id_proposta'        => $params['id_proposta'],
												'ds_retorno'         => $nm_retorno,
												'fl_sucesso'         => 'f',
												'ds_tipo_transmissao' => 'EMITIR_PROPOSTA (Endosso)',
												'ds_xml_transmissao' => $mysoapmsg,
												'dt_envio'           => $dtEnvio,
												'dt_retorno'         => $dtRetorno,
										)
									);

							} else {
                                $observacao = '';

								if($result_xml->id_endosso){
									$ModelPropostas->update(array('id_usuario_alteracao' => Zend_Auth::getInstance()->getIdentity()->id, 'dt_alteracao' => 'now()', 'ds_identificador_seguradora' => $result_xml->id_endosso), "id = ".$params['id_proposta']);
									$ModelPropostas->gravaLogTransmissao(
											array(
													'id_proposta'        => $params['id_proposta'],
													'ds_retorno'         => $result_xml->id_endosso,
													'fl_sucesso'         => 't',
													'ds_tipo_transmissao' => 'EMITIR_PROPOSTA (Endosso)',
													'ds_xml_transmissao' => $mysoapmsg,
													'dt_envio'           => $dtEnvio,
													'dt_retorno'         => $dtRetorno,
											)
										);

									if($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' || $tpEndosso[0]->ds_tipo == 'REDUCAO'){
										if (!$Propostas->endossarSinistro($id_endossada, $Proposta->id)) {
											Zend_Db_Table_Abstract::getDefaultAdapter()->rollBack();
                                            $return['status'] = false;
                                            $return['message'] = 'Não foi possível realizar o endosso.';
											$this->getResponse()->setBody(Zend_Json::encode($return));
											return false;
										}

                                        $dtTransmissaoData = date('d/m/Y');
                                        $dtTransmissaoHora = date('H:i');

                                        $observacao .= "PROTOCOLO DE RECEBIMENTO PELA ESSOR DA SEGUINTE PROPOSTA DE SEGUROS:<br>";
                                        $observacao .= "- Nome do proponente: {$Proposta->proponente('ds_nome_proponente')}<br>";
                                        $observacao .= "- Número da proposta: {$Proposta->doc()} ({$Proposta->id})<br>";
                                        $observacao .= "- Data do recebimento: {$dtTransmissaoData}<br>";
                                        $observacao .= "- Hora do recebimento: {$dtTransmissaoHora}";

                                        $dadosPropostaStatus = [
                                          'id_proposta' => $params['id_proposta'],
                                            'ds_observacao' => $observacao
                                        ];

										$Proposta->setEndossoVigente();
										$Propostas->changeStatus($dadosPropostaStatus, 'APOLICE_EMITIDA');
										$PropostaFisico->changeStatus(array('id_proposta' => $params['id_proposta']), 'DOC_PENDENTE_ENVIO');
										$PropostaDigitalizado->atualizarStatus($params['id_proposta'], Seguro_Model_PropostaStatusDocumentoDigitalizado::STATUS['DOC_PENDENTE_ENVIO']);

										$this->adicionarEndossoFilaDocusign($Proposta->id);

										if ($tpEndosso[0]->ds_tipo == 'REDUCAO' && $novo_parcelamento['parcelamento'][1]['vl_segurado'] < 0)  {
											$modelPropostasDevolucoes = new Seguro_Model_PropostasDevolucoes();
											$modelPropostasDevolucoes->primeiraInclusao($params['id_proposta']);
										}

										$fl_endosso_transmitido = true;
									} else {
										$Propostas->changeStatus(array('id_proposta' => $params['id_proposta']), 'AGUARDANDO_ENVIO_SEG');
										$PropostaFisico->changeStatus(array('id_proposta' => $params['id_proposta']), 'DOC_PENDENTE_ENVIO');
										$PropostaDigitalizado->atualizarStatus($params['id_proposta'], Seguro_Model_PropostaStatusDocumentoDigitalizado::STATUS['DOC_PENDENTE_ENVIO']);

										if($Proposta->subvencao_federal() > 0 || $Proposta->subvencao_estadual() > 0){
											$ModelPropostas->gravaConsultaCadin($params['id_proposta']);
										}

										/*
										 * ENDOSSO DE COBRANCA NAO É EMITIDO DIRETAMENTE NA ESSOR
										 * PARA ISSO DEVE SER CHAMADO O METODO "GerarEndosso" APOS A TRANSMISSAO DA PROPOSTA DE ENDOSSO
										 */
										$mysoapmsg = "<i4proerp><gera_endosso id_endosso='".$result_xml->id_endosso."'></gera_endosso></i4proerp>";
										$params    = array('Servico' => 'GerarEndosso', 'conteudoXML' => $mysoapmsg);
										$ds_metodo = 'GerarEndosso';

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

										$result_xml = simplexml_load_string(utf8_encode($result['ExecutarResult']), 'SimpleXMLElement', LIBXML_NOCDATA);
										$nm_retorno = empty($result_xml->erro->attributes()->nm_retorno) ? $result_xml->nm_retorno->__toString() : $result_xml->erro->attributes()->nm_retorno;

										if($result_xml->erro || ($result_xml->cd_retorno > 0)){

											$ModelPropostas->gravaLogTransmissao(
													array(
															'id_proposta'         => $Proposta->id,
															'ds_retorno'          => $nm_retorno,
															'fl_sucesso'          => 'f',
															'ds_tipo_transmissao' => 'GerarApolice',
															'ds_xml_transmissao'  => $mysoapmsg,
															'dt_envio'           => $dtEnvio,
															'dt_retorno'         => $dtRetorno,
													)
												);

										} else {
											//SE O RETORNO DA CONSULTA FOR OK, LIBERA A PROPOSTA PARA SER EMITIDA
											if($result_xml->cd_apolice){
												$isEmissaoEndossoCobrancaOk = true;

												$Row = $ModelPropostas->getRow($Proposta->id);
												$Row->nr_apolice = $result_xml->cd_apolice;
												$Row->dt_transmissao = date('Y-m-d H:i:s');
												$Row->save();

												$PropostasEndossos = new Endosso_Model_Propostas();
												$Sinistro = $PropostasEndossos->find($PropostasEndossos->getPropostaVigente($Proposta->id))->current();

												if (!$PropostasEndossos->endossarSinistro($Sinistro->id, $Proposta->id)) {
													$ModelPropostas->gravaLogTransmissao(
															array(
																	'id_proposta'         => $Proposta->id,
																	'ds_retorno'          => "ERRO AO ENDOSSAR SINISTRO",
																	'fl_sucesso'          => 'f',
																	'ds_tipo_transmissao' => 'ENDOSSAR_SINISTRO',
																	'ds_xml_transmissao'  => '',
																	'dt_envio'           => $dtEnvio,
																	'dt_retorno'         => $dtRetorno,
															)
														);
												}

												$Proposta->setEndossoVigente();

												$ModelPropostas->gravaLogTransmissao(
														array(
																'id_proposta'         => $Proposta->id,
																'ds_retorno'          => $result_xml->nm_retorno,
																'fl_sucesso'          => 't',
																'ds_tipo_transmissao' => $ds_metodo,
																'ds_xml_transmissao'  => $mysoapmsg,
																'dt_envio'           => $dtEnvio,
																'dt_retorno'         => $dtRetorno,
														)
													);

												$Propostas->changeStatus(array('id_proposta' => $Proposta->id), 'APOLICE_EMITIDA');
												$PropostaFisico->changeStatus(array('id_proposta' => $Proposta->id), 'DOC_PENDENTE_ENVIO');
												
												$this->adicionarEndossoFilaDocusign($Proposta->id);

											} else {
												$ModelPropostas->gravaLogTransmissao(
														array(
																'id_proposta'         => $Proposta->id,
																'ds_retorno'          => 'Retorno inválido da Seguradora.',
																'fl_sucesso'          => 'f',
																'ds_tipo_transmissao' => $ds_metodo,
																'ds_xml_transmissao'  => $mysoapmsg,
																'dt_envio'           => $dtEnvio,
																'dt_retorno'         => $dtRetorno,
														)
													);
											}
										}
									}

									//Notifica Corretor sobre o boleto de cobrança do endosso
									if($tpEndosso[0]->ds_tipo == 'COBRANCA' || $tpEndosso[0]->ds_tipo == 'REDUCAO'){
										$PropostaModel = new Seguro_Model_Propostas();
										$PropostaRow   = $PropostaModel->get($this->getRequest()->getParam('id_proposta'));

										$ParcelaEndosso      = $PropostaRow->parcelamento();
										$ObservacoesEndosso  = $PropostaRow->observacoes();

										if (is_array($ObservacoesEndosso)) {
											foreach ($ObservacoesEndosso as $ObservacaoEndosso) {
												if ($ObservacaoEndosso['fl_principal']) {
													$Motivo = $ObservacaoEndosso['ds_observacao'];
												}
											}
										}

										if($ParcelaEndosso[0]['vl_segurado'] > 0){
                                            //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 Endosso de COBRANÇA: Proposta {$PropostaRow->doc()}";

											$Body  = "<p style=\"margin-bottom: 15px\">Prezado Corretor, </p>";
                                            $Body .= "<p style=\"margin - bottom: 15px\">
Informamos que foi emitido ENDOSSO DE COBRANÇA para a proposta <b>{$PropostaRow->doc()}</b>, conforme motivo abaixo:
</p>";
                                            $Body .= "<p style=\"margin - bottom: 15px\">Motivo: <b>{$Motivo}</b></p>";

                                            $Body .= "<p style=\"margin - bottom: 15px\">Dados da Cobrança:<br />";
                                            foreach ($ParcelaEndosso as $idx => $parcela) {
                                            	if ($parcela['vl_segurado'] > 0) {
                                                	$Body .= "Parcela ".($idx+1)." - Valor: <b>R$ ".number_format($parcela['vl_segurado'], 2, ',', '.')."</b>, Vencimento: <b>".Agro_Util::formatDate($parcela['dt_vencimento'], Zend_Date::DATES).".</b> <br />";
                                                }
                                            }
                                            $Body .= "</p>";
                                            $Body .= "<p style=\"margin-bottom: 15px; font-weight: bold;\">
Para evitar prejuízos ao Segurado, é imprescindível o pagamento das parcelas do endosso no(s) prazo(s) informado(s).
</p>

<p style=\"margin-bottom: 15px\">
O endosso e seu(s) boleto(s) estão disponíveis no Agronet. Solicitamos a impressão do endosso, coleta de assinaturas e o envio do físico para a AgroBrasil.
</p>

<p style=\"margin-bottom:15px\">
Conforme a Circular Susep nº 445, de 2 de julho de 2012, para devoluções acima de R$ 10.000,00, solicitamos que sejam enviados no sistema Agronet 2.0 os seguintes documentos do segurado: Pessoa Física - RG, CPF e comprovante de residência (conta de água, luz ou telefone fixo com vencimento de no máximo 3 meses). Pessoa Jurídica - Estatuto Social e Eleição Atual da Diretoria ou nomeação de Administradores ou Contrato Social e última alteração, CNPJ, Balanço Patrimonial ou Balancete (que não pode ser anterior a seis meses), Comprovante de Endereço (conta de água, luz ou telefone fixo com vencimento de no máximo 3 meses) e Conta de Telefone Fixo. Independente se os valores já foram ressarcidos e/ou serão devolvidos ao beneficiário, devem ser anexados os documentos solicitados.
</p>
";
                                            $Body .= $this->getHtmlAtendimentoAssintaturaEmail($at);

                                            $emailsAdicionais = [
                                                ['e-mail' => 'karina.silva@agrobrasilseguros.com.br','nome'   => 'Karina Silva'],
                                                ['e-mail' => 'danielle.goncalves@agrobrasilseguros.com.br', 'nome'   => 'Danielle Gonçalves']
                                            ];
											$Mail->notificarCorretor($PropostaRow, $Subject, $Body, array('html' => true, 'emailsAdicionais' => $emailsAdicionais), false);
										}

										if($ParcelaEndosso[0]['vl_segurado'] < 0){
                                            $Subject = "Alerta de Endosso de RESTITUIÇÃO: Proposta {$PropostaRow->doc()}";

                                            //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);

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

<p style=\"margin-bottom: 15px\">
Informamos que foi emitido ENDOSSO DE RESTITUIÇÃO para a proposta <b>{$PropostaRow->doc()}</b>, conforme motivo abaixo:
</p>

<p style=\"margin-bottom: 15px\">
Motivo: <b>{$Motivo}</b><br />
Valor da Restitui&ccedil;&atilde;o: <b>R$ ".number_format(($ParcelaEndosso[0]['vl_segurado'] * -1), 2, ',', '.').".</b>
</p>

<p style=\"margin-bottom: 15px\">
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 foram informados no momento da contratação do seguro.
</p>

<p style=\"margin-bottom: 15px\">
O endosso está disponível no Agronet, onde também é possível acompanhar o andamento da restituição. Solicitamos a coleta de assinaturas e o envio do documento pelo sistema Agronet 2.0 através do endereço: http://agronet.agrobrasilseguros.com.br/ . 
</p>

<p style=\"margin-bottom:15px\">
Conforme a Circular Susep nº 445, de 2 de julho de 2012, para devoluções acima de R$ 10.000,00, solicitamos que sejam enviados no sistema Agronet 2.0 os seguintes documentos do segurado: Pessoa Física - RG, CPF e comprovante de residência (conta de água, luz ou telefone fixo com vencimento de no máximo 3 meses). Pessoa Jurídica - Estatuto Social e Eleição Atual da Diretoria ou nomeação de Administradores ou Contrato Social e última alteração, CNPJ, Balanço Patrimonial ou Balancete (que não pode ser anterior a seis meses), Comprovante de Endereço (conta de água, luz ou telefone fixo com vencimento de no máximo 3 meses) e Conta de Telefone Fixo. Independente se os valores já foram ressarcidos e/ou serão devolvidos ao beneficiário, devem ser anexados os documentos solicitados.
</p>

";
                                            $Body .= $this->getHtmlAtendimentoAssintaturaEmail($at);

                                            $emailsAdicionais =[
                                                ['e-mail' => 'karina.silva@agrobrasilseguros.com.br','nome'   => 'Karina Silva'],
                                                ['e-mail' => 'danielle.goncalves@agrobrasilseguros.com.br', 'nome'   => 'Danielle Gonçalves']
                                            ];
										    $Mail->notificarCorretor($PropostaRow, $Subject, $Body, array('html' => true, 'emailsAdicionais' => $emailsAdicionais), false);
										}
									}
									//Fim Notifica Corretor


									//ATUALIZA DATA PRAZO DE AGENDAMENTO DE VISTORIA
                                    $modelVP = new Seguro_Model_VistoriaPrevia;
                                    $modelVP->updateDataPrazoAgendamento($Proposta->id, $Proposta->id_proposta_mae);

                                    //ATUALIZA ID_PROPOSTA DE VISTORIA
                                    $modelVP->updateIdPropostaEndossada($Proposta->id, $Proposta->id_proposta_endossada);

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

                                    if($result_xml->cd_apolice || $fl_endosso_transmitido == true) {
                                        $return['message'] = "Endosso transmitido e emitido com sucesso.";

                                        if (!empty($observacao)) {
                                            $observacao = str_replace("<br>", "\n", $observacao);
                                            $return['message'] .= "\n\n{$observacao}";
                                        }
                                    } else {
                                        $return['message'] = "ATENÇÃO: Endosso transmitido com sucesso, mas APÓLICE não emitida.\n";
                                        $return['message'] .= 'Favor verificar na lista de pendências de emissão.';
                                    }

									$modelBeneficiarios = new Seguro_Model_Beneficiarios();
									$rowsPropostasBeneficiarios = (new Seguro_Model_PropostasBeneficiarios())->fetchAll(["id_proposta = {$Proposta->id}", "ds_tipo_conta = 'n'"]);

									foreach ($rowsPropostasBeneficiarios as $row) {
                                        $modelBeneficiarios->save([
                                          'tp_pessoa' => $row['tp_pessoa'],
                                          'ds_beneficiario' => $row['ds_nome_beneficiarios'],
                                          'cpf_cnpj' => $row['nr_cpf_cnpj'],
                                          'id_banco' => $row['id_banco'],
                                          'ds_agencia' => $row['ds_agencia'],
                                          'dt_nascimento' => $row['dt_nascimento'],
                                          'id_tipo_beneficiario' => $row['id_tipo_beneficiario']
                                        ]);
                                    }

									$this->atualizarStatusSubvencao($Proposta, $id_endossada);

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

								} else {
                  $nm_retorno = empty($result_xml->error->attributes()->nm_retorno) ? $result_xml->nm_retorno->__toString() : $result_xml->erro->attributes()->nm_retorno;
									$return['status'] = false;
									$return['message'] = 'Erro: Falha de recepção na Seguradora.';

									$ModelPropostas->gravaLogTransmissao(
											array(
													'id_proposta'        => $params['id_proposta'],
													'ds_retorno'         => $nm_retorno,
													'fl_sucesso'         => 'f',
													'ds_tipo_transmissao' => 'EMITIR_PROPOSTA',
													'ds_xml_transmissao' => $mysoapmsg,
													'dt_envio'           => $dtEnvio,
													'dt_retorno'         => $dtRetorno,
											)
										);
								}
							}
						}

						if($return['status'] == true){
							                                 
							$this->enviarEmailVistoriaPrevia((int) $Proposta->id);

                            $execute = '$("#transmitir_orcamento").hide();';
                            $return = array('message' => $return['message'], 'execute' => $execute);

                            if (!empty($params['solicitacaoEndosso'])) {
                                $return['execute'] = "$('#transmitir_orcamento').attr('disabled', 'disabled').addClass('ui-button ui-widget ui-state-default ui-corner-all ui-button-disabled ui-state-disabled ui-button-text-only');";
                                $return['sucesso'] = true;
                            }
						}
					} else {
						$Propostas->changeStatus($params, $params['status']);

						$Propostas->getAdapter()->delete('seguro.propostas_endosso_opcoes', "id_proposta = {$params['id_proposta']}");
						$Propostas->getAdapter()->insert('seguro.propostas_endosso_opcoes', array(
								'id_proposta' => $params['id_proposta'],
								'id_endosso_opcao' => $params['tp_endosso'],
								'id_usuario_criacao' => $Proposta->getUsuarioLogado('id')
						));

                        $return['execute'] = '$("#transmitir_orcamento").show();';
                        $return['message'] = 'Proposta endossada.';
					}

				} else {
                    $return['message'] = 'Atualize as coberturas para prosseguir com o processo de endosso.';
				}
			}

			if (
				(isset($fl_endosso_transmitido) && $fl_endosso_transmitido)
				|| $isEmissaoEndossoCobrancaOk
			) {
				$this->encaminharPropostaFilaFormularioEcmPlugEssor($Proposta->id);
			}

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

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

	private function encaminharPropostaFilaFormularioEcmPlugEssor(int $idProposta)
	{
		$serviceApolice = new Seguro_Service_Apolice($idProposta);
		$serviceGerarPdfProposta = new Seguro_Service_GerarPdfProposta();

		// Gera PDFs
		$pdfProposta = $serviceGerarPdfProposta->executar($idProposta, true);
		list($pdfApolice) = $serviceApolice->gerarPdf();

		$serviceEnvioFila = new Seguro_Service_EnviarFormularioFilaEcmPlugEssor();
		$dtoProposta = new Seguro_Dto_FormularioFilaEcmPlugEssor(
			$idProposta,
			Seguro_Service_EnviarFormularioEcmPlugEssor::PDF_PROPOSTA,
			base64_encode($pdfProposta)
		);
		$dtoApolice = new Seguro_Dto_FormularioFilaEcmPlugEssor(
			$idProposta,
			Seguro_Service_EnviarFormularioEcmPlugEssor::PDF_APOLICE,
			base64_encode($pdfApolice)
		);

		$serviceEnvioFila->executar([$dtoProposta, $dtoApolice]);
	}
	
	/**
	 * Verifica se deve atualizar o status da subvenção estadual/federal
	 * @param Endosso_Model_Row_Proposta $endossoNovo
	 * @param int $idEndossoAnterior
	 */
	private function atualizarStatusSubvencao(Endosso_Model_Row_Proposta $endossoNovo, int $idEndossoAnterior): void
	{
		$modelPropotasSubvencao = new Seguro_Model_PropostasSubvencao();
		$propostaSubvencao = $modelPropotasSubvencao->getPropostaSubvencao($endossoNovo->id_proposta_mae);

		if (!empty($propostaSubvencao)) {
			$propostaSubvencao = $propostaSubvencao->toArray();

			$statusSubEstadual = $statusSubFederal = null;

			$modelPropostasQuestionarios = new Seguro_Model_PropostasQuestionarios();
			$questionarioAtual = $modelPropostasQuestionarios->getRespostas($endossoNovo->id);
			$questionarioAnterior = $modelPropostasQuestionarios->getRespostas($idEndossoAnterior);

			if (!empty($questionarioAtual[Seguro_Model_PropostasQuestionarios::DS_CHAVE_QUEST_SUBVENCAO_ESTADUAL]) &&
				empty($questionarioAnterior[Seguro_Model_PropostasQuestionarios::DS_CHAVE_QUEST_SUBVENCAO_ESTADUAL])
			) {
				$statusSubEstadual = Seguro_Model_PropostasSubvencao::ID_STATUS_EM_FILA_ENVIO;
			}

			if (!empty($questionarioAtual[Seguro_Model_PropostasQuestionarios::DS_CHAVE_QUEST_SUBVENCAO_FEDERAL]) &&
				empty($questionarioAnterior[Seguro_Model_PropostasQuestionarios::DS_CHAVE_QUEST_SUBVENCAO_FEDERAL])
			) {
				$statusSubFederal = Seguro_Model_PropostasSubvencao::ID_STATUS_EM_FILA_ENVIO;
			}

			$ultimaParcela = (new Seguro_Model_PropostasParcelas())->getUltimaParcelaByProposta($endossoNovo->id);
			if (!empty($ultimaParcela) && !empty($ultimaParcela['id_motivo_cobranca_subvencao_segurado'])) {

				if ($ultimaParcela['vl_subvencao_estadual'] < 0) {
						$statusSubEstadual = Seguro_Model_PropostasSubvencao::ID_STATUS_NAO_CONCEDIDA;
					}
					
				if ($ultimaParcela['vl_subvencao_federal'] < 0) {
					$statusSubFederal = Seguro_Model_PropostasSubvencao::ID_STATUS_NAO_CONCEDIDA;
				}
			}
			
			if (!empty($statusSubEstadual) || !empty($statusSubFederal)) {

				$propostaSubvencao['id_status_subvencao_estadual'] = !empty($statusSubEstadual) ? $statusSubEstadual : $propostaSubvencao['id_status_subvencao_estadual'];
				$propostaSubvencao['id_status_subvencao_federal'] = !empty($statusSubFederal) ? $statusSubFederal : $propostaSubvencao['id_status_subvencao_federal'];
				$modelPropotasSubvencao->save($propostaSubvencao, true);
			}
		}
	}

	private function adicionarEndossoFilaDocusign($idProposta) {
		//Ativa os emails da proposta
		$emailAssinaturaDocumento = new Seguro_Model_PropostasEmailAssinaturaDocumento();
		$emailAssinaturaDocumento->ativarProposta($idProposta);

		//Adiciona para lista de envio para a docusign
		$propostasTipoAssinaturaDocumento = new Seguro_Model_PropostasTipoAssinaturaDocumento();
		$tipoAssinaturaDocumento = $propostasTipoAssinaturaDocumento->getByProposta($idProposta);
		$tiposValidos = [Seguro_Model_PropostasTipoAssinaturaDocumento::ELETRONICA_EMAIL, Seguro_Model_PropostasTipoAssinaturaDocumento::ELETRONICA_SMS];
		if (count($tipoAssinaturaDocumento) > 0 && in_array($tipoAssinaturaDocumento[0]['tipo_assinatura'], $tiposValidos)) {

			$PropostasDocusign = new Seguro_Model_PropostasDocusign();
			$PropostasDocusign->adicionarFila($idProposta, Seguro_Model_PropostasDocusign::TIPO_PROPOSTA);
		}
	}

	private function getHtmlAtendimentoAssintaturaEmail($at) {
        return "<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=\"61\" width=\"467\" />
<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>";
    }

	/**
	 * Finaliza o endosso
	 */
	public function finalizaTempAction() {

		$params = $this->getRequest()->getParams();
		$return = array();
		$this->isAjax();

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

		try {
			if ($params['status'] && $params['id_proposta']) {
				$Propostas = new Endosso_Model_Propostas();
				$PropostaFisico = new Atendimento_Model_PropostaDocumentoFisico();
				$PropostaDigitalizado = new Seguro_Model_PropostaStatusDocumentoDigitalizado();
				$Proposta = $Propostas->find($params['id_proposta'])->current();

				//$id_endossada = $Propostas->getPropostaVigente($params['id_proposta']);
				$Sinistro = $Propostas->find($Propostas->getPropostaVigente($params['id_proposta']))->current();
				$Original = $Propostas->find($Proposta->id_proposta_endossada)->current();

				$TipoEndosso = new Endosso_Model_TiposEndossos();
				$Select      = $TipoEndosso->getData("id = ".$params['tp_endosso']);
				$tpEndosso   = $TipoEndosso->fetchAll($Select);

				/*
				 * VALIDACAO DE PREMIO
				 * 1 - Com movimento de cobrança: obrigatório ter valor a cobrar
				 * 2 - Com movimento de Restituição: obrigatório ter valor a devolver
				 * 3 - Sem movimento: não pode movimentar prêmio, ou seja, não pode ter valor a cobrar ou devolver
				 */
				$novo_premio       = $Proposta->premio_liquido() - $Original->premio_liquido();
				$novo_parcelamento = $Proposta->cobranca();

				if($tpEndosso[0]->ds_tipo == 'COBRANCA' && $novo_parcelamento['parcelamento'][1]['vl_total'] <= 0){
					$return = array('message' => 'Endosso de Cobrança deve ter Prêmio a Pagar');
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;
				}

				if($tpEndosso[0]->ds_tipo == 'REDUCAO' && $novo_parcelamento['parcelamento'][1]['vl_total'] >= 0){
					$return = array('message' => 'Endosso de Restituição deve ter Prêmio a Restituir.');
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;
				}

				if($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' && ($novo_premio < 0 || $novo_premio > 0)){
					$return = array('message' => 'Endosso Sem Movimento não pode ter Prêmio a Pagar ou a Restituir.');
					$this->getResponse()->setBody(Zend_Json::encode($return));
					return false;

				}
				/*
				 * FIM VALIDACAO DE PREMIO
				 */

				if ($Proposta->coberturas_atualizadas() || ($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' || $tpEndosso[0]->ds_tipo == 'CANCELAMENTO')) {

				    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();
				    $ModelPropostas = new Seguro_Model_Propostas();
				    
				    if($params['fl_apolice_original']){
				        $id_proposta_mae = $Propostas->getPropostaMae($params['id_proposta']);
				        $PropostaMae     = $Propostas->find($id_proposta_mae)->current();
				        $Original->ds_identificador_seguradora = $PropostaMae->ds_identificador_seguradora;
				    }
				    
				    $xml       = $Transmissao->montaXMLTransmissaoEssor($params['id_proposta'], $tpEndosso[0]->ds_tipo, $Original->ds_identificador_seguradora, false, $this->getRequest()->getParams('fl_lote'));
				    $mysoapmsg = $client->serializeEnvelope($xml);
			    
				    $ModelPropostas->gravaLogTransmissao(
				            array(
				                'id_proposta'        => $params['id_proposta'],
				                'ds_retorno'         => 'Teste Endosso',
				                'fl_sucesso'         => 't',
				                'ds_tipo_transmissao' => 'EMITIR_PROPOSTA (Endosso)',
				                'ds_xml_transmissao' => $mysoapmsg,
								'dt_envio'           => $dtEnvio,
								'dt_retorno'         => $dtRetorno,
				            )
				    );
				    
					if ($params['status'] == 'AGUARDANDO_ENVIO_SEG') {

						$return['status'] = true;
						// BLOCO TEMPORARIO

						if($tpEndosso[0]->ds_tipo == 'SEM_MOVIMENTO' || $tpEndosso[0]->ds_tipo == 'REDUCAO'){
							$Proposta->setEndossoVigente();
							$Propostas->changeStatus(array('id_proposta' => $params['id_proposta']), 'APOLICE_EMITIDA');
							$PropostaFisico->changeStatus(array('id_proposta' => $params['id_proposta']), 'DOC_PENDENTE_ENVIO');
							$PropostaDigitalizado->atualizarStatus($params['id_proposta'], Seguro_Model_PropostaStatusDocumentoDigitalizado::STATUS['DOC_PENDENTE_ENVIO']);

						} else {
							if($Proposta->subvencao_federal() > 0 || $Proposta->subvencao_estadual() > 0){
								$Propostas->changeStatus(array('id_proposta' => $params['id_proposta']), 'AGUARDANDO_ENVIO_SEG');
								$PropostaFisico->changeStatus(array('id_proposta' => $params['id_proposta']), 'DOC_PENDENTE_ENVIO');
								$PropostaDigitalizado->atualizarStatus($params['id_proposta'], Seguro_Model_PropostaStatusDocumentoDigitalizado::STATUS['DOC_PENDENTE_ENVIO']);
								$Propostas->gravaConsultaCadin($params['id_proposta']);
							} else {
								$Propostas->changeStatus(array('id_proposta' => $params['id_proposta']), 'AGUARDANDO_ENVIO_SEG', false, true);
								$PropostaFisico->changeStatus(array('id_proposta' => $params['id_proposta']), 'DOC_PENDENTE_ENVIO');
								$PropostaDigitalizado->atualizarStatus($params['id_proposta'], Seguro_Model_PropostaStatusDocumentoDigitalizado::STATUS['DOC_PENDENTE_ENVIO']);
							}
						}

						//Notifica Corretor sobre o boleto de cobrança do endosso
						if($tpEndosso[0]->ds_tipo == 'COBRANCA'){
							$PropostaModel = new Seguro_Model_Propostas();
							$PropostaRow   = $PropostaModel->get($this->getRequest()->getParam('id_proposta'));

							$ParcelaEndosso      = $PropostaRow->parcelamento();
							$ObservacoesEndosso  = $PropostaRow->observacoes();

							if (is_array($ObservacoesEndosso)) {
								foreach ($ObservacoesEndosso as $ObservacaoEndosso) {
									if ($ObservacaoEndosso['fl_principal']) {
										$Motivo = $ObservacaoEndosso['ds_observacao'];
									}
								}
							}

							if($ParcelaEndosso[0]['vl_segurado'] > 0){
								$Subject = "Alerta de endosso de cobrança: Proposta {$PropostaRow->doc()} / {$PropostaRow->ds_nome_proponente}";

								$Body    = "Informamos que foi emitido endosso de cobrança para a Proposta {$PropostaRow->doc()} em nome de {$PropostaRow->ds_nome_proponente}. O motivo do endosso e data de vencimento do boleto, estão informados abaixo: \n\n";
								$Body   .= "Motivo: ".$Motivo."\n";
								$Body   .= "Data de vencimento do boleto: ".Agro_Util::formatDate($ParcelaEndosso[0]['dt_vencimento'], Zend_Date::DATES)."\n\n";
								$Body   .= "O endosso e seu boleto estão disponíveis no Agronet 2.0";

								$Mail = new Agro_Mail();
								//$Mail->notificarCorretor($PropostaRow, $Subject, $Body);
							}
						}
						//Fim Notifica Corretor

						$Proposta->setEndossoVigente();
						$Propostas->atualiza_versao($Proposta->id_versao);
						$return['message'] = 'Proposta transmitida com sucesso.';
						$this->getResponse()->setBody(Zend_Json::encode($return));

						// FIM BLOCO TEMPORARIO


						if($return['status'] == true){
							$return = array('message' => 'Proposta de Endosso encaminhada para fluxo de Emissão.', 'execute' => '$("#transmitir_orcamento").hide();');
						} else {
							$return = array('message' => $return['message']);
						}
					} else {
						$Propostas->changeStatus($params, $params['status']);

						$Propostas->getAdapter()->delete('seguro.propostas_endosso_opcoes', "id_proposta = {$params['id_proposta']}");
						$Propostas->getAdapter()->insert('seguro.propostas_endosso_opcoes', array(
								'id_proposta' => $params['id_proposta'],
								'id_endosso_opcao' => $params['tp_endosso'],
								'id_usuario_criacao' => $Proposta->getUsuarioLogado('id')
						));

						$return = array('message' => 'Proposta endossada.', 'execute' => '$("#transmitir_orcamento").show();');
					}
				}
			}

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

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

	public function locaisentregaAction() {
		$PropostaCooperativas = new Seguro_Model_PropostasCooperativas();
		$this->view->id_proposta = $this->getRequest()->getParam('id');
		$this->view->locaisentrega = $PropostaCooperativas->getByIdProposta($this->getRequest()->getParam('id'));
	}

	public function tipoassinaturadocumentoAction()
	{
		$idProposta = $this->getRequest()->getParam('id');
		$Propostas = new Endosso_Model_Propostas();
		$this->view->proposta = $Propostas->find($idProposta)->current();

		$TipoAssinaturaDocumento = new Seguro_Model_PropostasTipoAssinaturaDocumento();
		$tipoAssinaturaDocumento = $TipoAssinaturaDocumento->getByProposta($idProposta);

		$this->view->tipoAssinatura = Seguro_Model_PropostasTipoAssinaturaDocumento::NAO_INFORMADA;

		if (count($tipoAssinaturaDocumento) > 0) {
			$this->view->tipoAssinatura = $tipoAssinaturaDocumento[0]['tipo_assinatura'];
		}

		$PropostasEmailAssinaturaDocumento = new Seguro_Model_PropostasEmailAssinaturaDocumento();
		$emails = $PropostasEmailAssinaturaDocumento->getByProposta($idProposta, true);
		
		if (empty($emails)) {
			$emails = $PropostasEmailAssinaturaDocumento->getByProposta($idProposta);
		}

		$this->view->ds_email_segurado = '';
		$this->view->proponente = ['nr_justificativa' => '', 'ds_justificativa' => ''];
		
		if (!empty($emails['ds_email_segurado'])) {
			$this->view->ds_email_segurado = $emails['ds_email_segurado'];

			$PropostasEmailJustificativa = new Seguro_Model_PropostasEmailJustificativa();
			$propostaEmailJustificativa = $PropostasEmailJustificativa->getByProposta($idProposta, $emails['id']);
			$this->view->proponente['nr_justificativa'] = $propostaEmailJustificativa['nr_justificativa'];
			$this->view->proponente['ds_justificativa'] = $propostaEmailJustificativa['ds_justificativa'];
		}
	}

	/**
	 * Valida se houve alteração em um dos blocos ('btnProponente', 'btnPropriedade', 'btnUnidadesSeguradas', 'btnCroqui', 'btnResumosCoberturas')
	 * e se a proposta possui vistoria prévia com status 66(VP_ENC) ou 70 (VP_AGUARDANDO_VISTORIA) e envia e-mail para a empresa de vistoria.
	 * 
	 * @param int $idProposta
	 */
	private function enviarEmailVistoriaPrevia(int $idProposta): void
	{
		$modelSolicitacao = new Endosso_Model_Solicitacao();
		$nomesBlocos = ['btnProponente', 'btnPropriedade', 'btnUnidadesSeguradas', 'btnCroqui', 'btnResumosCoberturas'];
		$possuiAlteracaoBlocos = $modelSolicitacao->possuiAlteracaoNosBlocos($idProposta, $nomesBlocos);
		
		if (!$possuiAlteracaoBlocos) {
			return;
		}
		
		$modelVistoriaPrevia = new Seguro_Model_VistoriaPrevia();
		$vistorias = $modelVistoriaPrevia->getByPropostaStatus($idProposta, [Sistema_Model_Status::VP_ENC, Sistema_Model_Status::VP_AGUARDANDO_VISTORIA]);
		
		if (empty($vistorias)) {
			return;
		}

		$agroMail = new Agro_Mail();
		$agroMail->clearFrom();
		$agroMail->setFrom('vp@agrobrasilseguros.com.br', 'AgroBrasil - Agronet 2.0');
		$agroMail->addTo($vistorias[0]['ds_email_responsavel'], $vistorias[0]['ds_nome_responsavel']);
		$agroMail->addBcc('vp@agrobrasilseguros.com.br', 'AgroBrasil - Agronet 2.0');

		$pinFilename = APPLICATION .'/resources/imagens/icon/pin.png';

		$anexoPin = $agroMail->createAttachment(file_get_contents($pinFilename ));
        $anexoPin->type = Agro_Util::getMimeType($pinFilename );
        $anexoPin->disposition = Zend_Mime::DISPOSITION_INLINE;
        $anexoPin->encoding = Zend_Mime::ENCODING_BASE64;
        $anexoPin->id = 'cid' . md5_file($pinFilename );

		if ($vistorias[0]['id_status'] == Sistema_Model_Status::VP_AGUARDANDO_VISTORIA) {

			$modelVistoriaFuncionarios = new Sistema_Model_VistoriasFuncionarios();
			$vistoriadores = $modelVistoriaFuncionarios->getVistoriadoresByVistoria($vistorias[0]['id_vistoria']);

			foreach ($vistoriadores as $vistoriador) {
				$agroMail->addTo($vistoriador['ds_email'], $vistoriador['ds_nome_funcionario']);
			}

			$titulo = "Alerta Emissão de endosso com Vistoria de Inspeção AGENDADA - {$vistorias[0]['nr_proposta']}";

			$corpo = "Informamos que ocorreu alterações na proposta <b>{$vistorias[0]['nr_proposta']}</b>, para a qual a vistoria de inspeção já está agendada para o dia {$vistorias[0]['dt_agendamento']}.";
			$corpo .= "<br><br>Favor verificar atentamente as alterações antes da realização da vistoria, a fim de garantir a correção dos dados.";
			$corpo .= "<br><br><img src=\"cid:{$anexoPin->id}\" /><b> Este é um e-mail automático. Por favor, não responda.</b>";
			
		} else {
			$titulo = "Alerta Emissão de endosso com Vistoria de Inspeção na Proposta {$vistorias[0]['nr_proposta']}";

			$corpo = "Informamos que ocorreu alterações na proposta <b>{$vistorias[0]['nr_proposta']}</b>, cuja vistoria de inspeção está aguardando agendamento.";
			$corpo .= "<br>Favor atentar as alterações.";
			$corpo .= "<br><br><img src=\"cid:{$anexoPin->id}\" /><b> Este é um e-mail automático. Por favor, não responda.</b>";
		}
		
		//DEBUG - INICIO
		if (APPLICATION_ENV != 'production') {
			$corpo .= "<br><br><hr><b>DEBUG</b>";
			$corpo .= "<br>Destinatários";
			foreach ($agroMail->getRecipients() as $recipient) {
				$corpo .= "<br> - {$recipient}";
			}
		}
		//DEBUG - FIM

		$anexo = Agro_Mail::getAssinatura($agroMail, 1);
		$corpo .= "<br><br>";
        $corpo .= "<img src=\"cid:{$anexo->id}\" height=\"102\" width=\"480\" />";
		$corpo .= Agro_Mail::textoPadraoEmailHtml();

		$agroMail->setSubject($titulo);
		$agroMail->setBody($corpo, 'html');
		$agroMail->send();
	}
}
