<?php

class Sinistro2_AgendamentovistoriaController extends Agro_Controller_Action {

	public function getForm($params = null) {
		return new Sinistro2_Form_AgendamentoVistoria($params);
	}

	private function loadXMLData($agendamento, $funcionarios, $vistorias, $laudo, $id_proposta) {
		$i = 0;
		$dados = array();

/*		$ModelAgendamento = new Sistema_Model_Agendamentos();
		$Ag = $ModelAgendamento->find($agendamento)->current()->toArray();
*/
		//envia vistoria completa para Tagh
		if ($agendamento == 'AGUARDANDO_DATA') {

			$ModelProposta = new Seguro_Model_Propostas();
			//$proposta = $ModelProposta->find($id_proposta)->current();
			$proposta = $ModelProposta->get($id_proposta); 
			$proponente = $proposta->proponente();
			$propriedade = $proposta->propriedade();
			$cultura = $proposta->cultura();
			$produto_geral = $proposta->produto();
			$PessoaAutorizada = new Seguro_Model_PessoaAutorizada();
			$pAutorizada = $PessoaAutorizada->getPessoasAutorizadas($id_proposta);

			//Dados PDF
			$dados['ds_nome_produto'] = $produto_geral['ds_nome_produto_geral'];
			$dados['ds_nome_cultura'] = $cultura['ds_nome_cultura'];

			//Propriedade
			$dados['EstablishmentName'] = $id_proposta . '-' . $propriedade['ds_nome_propriedade'];
			$dados['TownId'] = $propriedade['id_municipio'];
			$dados['DistrictId'] = $propriedade['id_estado'];

			$gps = explode(',', $propriedade['ds_coordenadas']);

			$dados['EstablishmentGPSLatitude'] = trim($gps[0]);
			$dados['EstablishmentGPSLongitude'] = trim($gps[1]);
			$dados['EstablishmentObservations'] = Agro_Util::removeAcentos($propriedade['ds_referencia_localizacao']);

			$dados['ContactMobile'] = $proponente['ds_tel_celular'];
			$dados['ContactName'] = $proponente['ds_nome_proponente'];
			$dados['ContactTelephone'] = $proponente['ds_tel_residencia'];
			$dados['EstablishmentLocation'] = ($propriedade['ds_endereco'] != null ?  $propriedade['ds_endereco'] . ' ' : ' ').
											  ($propriedade['ds_endereco_nro'] != null ? ' nr.: '.$propriedade['ds_endereco_nro'] . ' ' : ' ').
											  ($propriedade['ds_endereco_cep'] != null ? ' cep: '.$propriedade['ds_endereco_cep'] . ' ' : ' ').
											  ($propriedade['ds_endereco_bairro'] != null ? ' bairro: '.$propriedade['ds_endereco_bairro'] . ' ' : ' ').
											  ($propriedade['ds_endereco_complemento'] != null ? ' complemento: '.$propriedade['ds_endereco_complemento'] : '');

			//Imagens
			//Todo
/*			$dados['Imagens'][0]['Description'] = null;
			$dados['Imagens'][0]['Extension'] = null;
			$dados['Imagens'][0]['URL'] = null;
			$dados['Imagens'][0]['Name'] = null;
			$dados['Imagens'][0]['TypeId'] = null;
*/

			//PessoasAutorizadas
			$pa = 0;
			foreach ($pAutorizada as $pessoa) {
				$dados['PessoasAutorizadas'][$pa]['DocumentoPessoa'] = $pessoa['cpf_cnpj'];
				$dados['PessoasAutorizadas'][$pa]['NomePessoa'] = $pessoa['ds_pessoa_autorizada'];
				$dados['PessoasAutorizadas'][$pa]['ParentescoPessoa'] = $pessoa['ds_grau_parentesco'];
				$dados['PessoasAutorizadas'][$pa]['TelefonePessoa'] = $pessoa['ds_telefone'];
				$pa++;
			}

			//Policies
			$vst = 0;
			foreach ($vistorias as $vistoria) {

				$avisos[] = $vistoria['id_aviso'];
				$dados['avisos'] = $avisos;

				if ($vistoria['id_vistoria'] <> $vst ) {
					$VistoriaEmpresas = new Sistema_Model_VistoriasEmpresas();
					$id_empresa = $VistoriaEmpresas->getEmpresaByVistoria($vistoria['id_vistoria']);
					$Empresas = new Sistema_Model_Empresas();
					$nome_empresa = $Empresas->getNomeEmpresaById($id_empresa);

					$dados['Policies'][$i]['InsuredName'] = $proponente['ds_nome_proponente'];
					$dados['Policies'][$i]['InsuredTelephone'] = $proponente['ds_tel_residencia'];
					$dados['Policies'][$i]['InspectionCompanyCode'] = $id_proposta.'-'.$vistoria['id_vistoria'];

					$ModelAviso = new Sinistro2_Model_AvisosSinistro();
					$aviso = $ModelAviso->find($vistoria['id_aviso'])->current()->toArray();

					$dados['Policies'][$i]['PolicyNumber'] = $vistoria['id_vistoria'];
					$dados['Policies'][$i]['EventDate'] = Agro_Util::formatDate($aviso['dt_sinistro'], Zend_Date::W3C);
					$dados['Policies'][$i]['LossClaimDate'] = Agro_Util::formatDate($aviso['dt_criacao'], Zend_Date::W3C);
					$dados['Policies'][$i]['PolicyEffectiveDate'] = Agro_Util::formatDate($proposta['dt_vigencia_fim'], Zend_Date::W3C);

					$ModelAvisoEvento = new Sinistro2_Model_AvisosEventos();
					$evento = $ModelAvisoEvento->getAvisosEventos($vistoria['id_aviso']);
					$evento['dt_evento'] = $dados['Policies'][$i]['EventDate'];
					$dados['eventos'][] = $evento;

     				$dados['Policies'][$i]['Events'][0]['EventId'] = $evento['id_evento'];
					$dados['Policies'][$i]['Events'][0]['PolicyId'] = $vistoria['id_vistoria'];
					//$dados['Policies'][$i]['Events'][0]['otherEventDescr'] = $descricao_evento;

					$dados['Policies'][$i]['PolicyCoverages'][0]['CoverageAffectedArea'] = 'true';
					$dados['Policies'][$i]['PolicyCoverages'][0]['CoverageInsuredArea'] = 'true';
					$dados['Policies'][$i]['PolicyCoverages'][0]['CoveragePercentage'] = 100;
					$dados['Policies'][$i]['PolicyCoverages'][0]['EventId'] = $evento['id_evento'];
					$dados['Policies'][$i]['PolicyCoverages'][0]['CoverageExcess'] = 'true';

	                $vst = $vistoria['id_vistoria'];
                }

				$i++;
			}

			$dados['InspectionObservation'] = implode(',',$avisos);
			$i = 0;

			//RequestedShares
			$ModelVistoriasItensSegurados = new Sistema_Model_VistoriasItensSegurados();
			$itens = $ModelVistoriasItensSegurados->getItensSegurados($vistoria['id_vistoria']);
			foreach ($itens as $item) {
				$dados['RequestedShares'][$i]['ShareArea'] = $item->vl_area;
				$dados['RequestedShares'][$i]['ShareName'] = str_pad($item->nr_item_segurado, 3, '0', STR_PAD_LEFT).'-'.$item->ds_item_segurado. '-' . $item->ds_nome_variedade;
				$dados['RequestedShares'][$i]['CropTypeId'] = ($cultura['id'] * 1000000) + $proposta->id_produto;
				$dados['RequestedShares'][$i]['SharePotentialYield'] = $item->vl_rendimento_tonelada;
				$dados['RequestedShares'][$i]['ShareIdReference'] = $item->id;

				//1 == 2 pra forçar entrada em harvest
				if ($produto_geral['id_tipo_produto'] != 3) {
					$dados['RequestedShares'][$i]['ShareAffectedArea'] = $item->vl_area;
					if (isset($item->dt_semeadura)) {
						$dados['RequestedShares'][$i]['SowedDate'] = Agro_Util::formatDate($item->dt_semeadura, Zend_Date::W3C);
					} elseif (isset($item->dt_plantio)) {
						$dados['RequestedShares'][$i]['SowedDate'] = Agro_Util::formatDate($item->dt_plantio, Zend_Date::W3C);
					} else {
						$dados['RequestedShares'][$i]['SowedDate'] = null;
					}
					$dados['RequestedShares'][$i]['InsuredAmountPerUnitMetric'] = 'P';
					$dados['RequestedShares'][$i]['InsuredAmountPerUnit'] = isset($item->vl_valor_tonelada) ? $item->vl_valor_tonelada : null;
				} else {
					$dados['RequestedShares'][$i]['EstimatedYield'] = $item->vl_rendimento_tonelada;

/*					$dados['RequestedShares'][$i]['HarvestMonthFractionId'] = null;
					$dados['RequestedShares'][$i]['HarvestMonthId'] = null;
					$dados['RequestedShares'][$i]['ShareReducedYield'] = null;
					$dados['RequestedShares'][$i]['SowedMonthFractionId'] = null;
					$dados['RequestedShares'][$i]['SowedMonthId'] = null;
					CAMPOS NÃO UTILIZADOS NO AGRONET
*/
					$dados['RequestedShares'][$i]['ShareInsuredYield'] = $item->vl_producao_garantida;
				}
				$i++;
			}
			$i = 0;

			//Vistoriadores
			foreach ($funcionarios as $func) {
				$ModelFuncionarios = new Sistema_Model_Funcionarios();
				$funcionario = $ModelFuncionarios->find($func['id_funcionario'])->current()->toArray();
				$dados['InspectorsToAssign'][$i]['InspectorId'] = $funcionario['id_tagh'];
				$i++;
			}

			//PDF
			$dados['ds_nome_produto'] = $proposta->ds_nome_produto;
			$dados['ds_nome_cobertura'] = $proposta->ds_nome_cobertura;
			$dados['id_proposta'] = $id_proposta;
			$dados['nro_apolice'] = $proposta->nr_apolice;
			$dados['ds_nome_safra'] = $proposta->ds_nome_safra;
			$dados['id_vistoria'] = $vst;
			$dados['ds_nome_empresa_vistoria'] = htmlspecialchars($nome_empresa);
			$dados['ds_nome_segurado'] = $proponente['ds_nome_proponente'];
			$dados['cpf_cnpj_segurado'] = $proponente['cpf_cnpj'];
			$dados['ds_endereco_propriedade'] = htmlspecialchars($propriedade['ds_endereco'].' Nro:'.$propriedade['ds_endereco_nro'].' '.$propriedade['ds_endereco_complem'].' Bairro: '.$propriedade['ds_endereco_bairro'].' CEP: '.$propriedade['ds_endereco_cep']);
			$dados['ds_nome_municipio'] = $propriedade['ds_nome_municipio'];

			//id_tagh da empresa
			$ModelEmpresa = new Sistema_Model_Empresas();
			$Empresa = $ModelEmpresa->find($funcionario['id_empresa'])->current()->toArray();
			if ($Empresa['id_tagh']) {
				$dados['FirmId'] = $Empresa['id_tagh'];
			} else {
				$dados['FirmId'] = null;
			}

			$tagh = new Agro_Tagh();

			if ($produto_geral['id_tipo_produto'] != 3){
				return $tagh->createNewInspection('lossInspection',$dados);
			} else {
				return $tagh->createNewInspection('harvestInspection',$dados);
			}

		} elseif ($agendamento == 'AGENDADO') {
			//atualiza os vistoriadores.
			$i=0;
			$dados['inspectionCompanyCode'] = $id_proposta.'-'.$vistorias[0]['id_vistoria'];
			$dados['policyNumber'] = $vistorias[0]['id_vistoria'];
			$dados['inspectorId'] = array();
			//Vistoriadores
			foreach ($funcionarios as $func) {
				$ModelFuncionarios = new Sistema_Model_Funcionarios();
				$funcionario = $ModelFuncionarios->find($func['id_funcionario'])->current()->toArray();
				array_push($dados['inspectorId'], array('int' => $funcionario['id_tagh']));
				$i++;
			}

			$tagh = new Agro_Tagh();
			return $tagh->reassignInspector($dados);
		}
		return false;
	}

	public function formAction() {
		$this->getHelper('layout')->disableLayout();

		$Model_Agendamentos = new Sistema_Model_Agendamentos();
		$Model_Avisos       = new Sinistro2_Model_AvisosSinistro();
		$Model_Vistorias    = new Sistema_Model_Vistorias();
		$modelVistoriasEmpresas = new Sistema_Model_VistoriasEmpresas();

		$params = $this->getRequest()->getParams();
		$params['id_empresa'] = $modelVistoriasEmpresas->getEmpresaByVistoria($params['id_vistoria']);
		
		$Form   = $this->getForm($params);

		if ($this->getRequest()->isPost()) {

			Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

			$old_status = $Model_Agendamentos->getStatus($params['id_agendamento']);
			$Form->populate($params);
			
			try {

				if (empty($params['id_funcionario'])) {
					throw new Exception("Vistoriador não informado.");
				}

				if ($Form->isValid($Form->getValues())) {

					/**
					 * Valida se o agendamento não foi anterior ao Sinistro
					 */
					$menor_data_aceitacao_aviso = new Zend_Date();
					$menor_data_aceitacao_aviso->set($Model_Avisos->buscaDataAceitacaoAvisoMaisAntigo($params), Zend_Date::DATES);

					$dt_agendamento = new Zend_Date();
					$dt_agendamento->set($params["dt_agendamento"], Zend_Date::DATES);

					if (($dt_agendamento->get(Zend_Date::W3C) < $menor_data_aceitacao_aviso->get(Zend_Date::W3C)) && !$nova_avaliacao){
						$params['mensagem']   = "A data da vistoria deve ser posterior ou igual a ".$menor_data_aceitacao_aviso->get(Zend_Date::DATES);
						$params['fl_success'] = 0;

						Agro_Db_Table_Abstract::getDefaultAdapter()->rollBack();

					} else {

						/**
						 * Verifica se não há nenhum agendamento realizado nos próximos 4 dias
						 */
						$dtUltimoAgendamentoTmp = $Model_Agendamentos->buscaUltimoAgendamento($params['id_processo'], $dt_agendamento->get(Zend_Date::W3C), $params['id_agendamento'], $params['id_tipo'], $params['id_cobertura']);
						if($dtUltimoAgendamentoTmp){
							$DtUltimoAgendamento = new Zend_Date();
							$DtUltimoAgendamento->set($dtUltimoAgendamentoTmp, Zend_Date::DATES);
							$DtUltimoAgendamento->add(4, Zend_Date::DAY);
						}

						if (!$DtUltimoAgendamento
							||
							($DtUltimoAgendamento && ($DtUltimoAgendamento->get(Zend_Date::W3C) < $dt_agendamento->get(Zend_Date::W3C)))
							||
							Agro_Util::checkPermission('sinistro2:agendamentovistoriafinal:preliminarfinalmesmodia')
						) {

							/**
							 * Salva data de agendamento e altera status para AGENDADO
							 */
							$Agendamento = $Model_Agendamentos->save(array('id' => $params['id_agendamento'], 'ds_turno' => $params['ds_turno'], 'dt_agendamento' => $dt_agendamento->get(Zend_Date::W3C), 'id_status' => $Model_Agendamentos->getIdStatus('AGENDADO')));

							/**
							 * Salva a relação entre vistoria e funcionários
							 */
							$ModelAgendamentosFuncionarios = new Sistema_Model_AgendamentosFuncionarios();
							$ModelAgendamentosFuncionarios->delete($params['id_agendamento']);
							$AgendamentosFuncionarios = array();

							if (is_array($params['id_funcionario'])) {
								foreach ($params['id_funcionario'] as $key => $idFuncionario)
								{
									$data['id_funcionario'] = $idFuncionario;
									$data['id_agendamento'] = $params['id_agendamento'];
	
									$agf = $ModelAgendamentosFuncionarios->save($data);
									array_push($AgendamentosFuncionarios, $agf);
								}
							} else {
								$data['id_funcionario'] = $params['id_funcionario'];
								$data['id_agendamento'] = $params['id_agendamento'];
								$data['fl_principal'] = true;
	
								$agf = $ModelAgendamentosFuncionarios->save($data);
								array_push($AgendamentosFuncionarios, $agf);

								if (!empty($params['id_segundo_vistoriador']) && Sistema_Model_Usuarios::usuarioLogadoFuncionarioAgro()) {
									$data['id_funcionario'] = $params['id_segundo_vistoriador'];
									$data['fl_principal'] = false;
		
									$agf = $ModelAgendamentosFuncionarios->save($data);
									array_push($AgendamentosFuncionarios, $agf);
								}
							}

							/**
							 * Cria Laudo Final ou Preliminar de acordo com o tipo do agendamento, no status 'Pendente de Laudo'
							 */

							//Preliminar
							if($params['id_tipo'] == 2){

								$Model_VA = new Sinistro2_Model_VistoriasAvisos();
								$Model_VA->vinculaVistoriasAvisos($params['id_proposta'], $params['id_vistoria'], $dt_agendamento->get(Zend_Date::W3C), $params['id_cobertura'], 'LP');

								$Model_LP = new Sinistro2_Model_LaudosPreliminares();
								$id_laudo_preliminar = $Model_LP->getIdLaudoPreliminarByVistoria($params['id_vistoria']);
								
								$id_laudo_preliminar = $Model_LP->novoLaudo(array(
										'id_processo'  => $params['id_processo'],
										'id'           => $id_laudo_preliminar,
										'id_cobertura' => $params['id_cobertura'],
										'id_vistoria'  => $params['id_vistoria'],
										'id_proposta'  => $params['id_proposta'],
										'id_status'    => $Model_LP->getIdStatus('PENDENTE_LAUDO_PRELIMINAR', 'LAUDOS_PRELIMINARES'))
								);

								$vistoriasFuncionariosModel = new Sistema_Model_VistoriasFuncionarios();
									
								$vistoriasFuncionariosModel->deleteAuxiliares((int) $params['id_vistoria']);
								
								if (!empty($params['id_auxiliar'])) {								
									foreach ($params['id_auxiliar'] as $idAuxiliar) {
										$vistoriasFuncionariosModel->insert([
											'id_vistoria' => $params['id_vistoria'],
											'id_funcionario' => $idAuxiliar
										]);
									}
								}

								$params['fl_success'] = 1;
								$params['mensagem']   = "Agendamento efetuado com sucesso.";
								Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

							} elseif($params['id_tipo'] == 3){
								//Final
								$Model_VA = new Sinistro2_Model_VistoriasAvisos();
								$vistoriasAvisos = $Model_VA->vinculaVistoriasAvisos($params['id_proposta'], $params['id_vistoria'], $dt_agendamento->get(Zend_Date::W3C), $params['id_cobertura']);

								$Model_LF       = new Sinistro2_Model_LaudosFinais();
								$id_laudo_final = $Model_LF->getIdLaudoFinalByVistoria($params['id_vistoria']);

								$id_laudo_final = $Model_LF->novoLaudo([
									'id_processo' => $params['id_processo'],
									'id' => $id_laudo_final,
									'id_cobertura' => $params['id_cobertura'],
									'id_vistoria' => $params['id_vistoria'],
									'id_proposta' => $params['id_proposta'],
									'id_status' => $Model_LF->getIdStatus('PENDENTE_LAUDO_FINAL')
								]);
								
								if ($id_laudo_final) {
									$params['fl_success'] = 1;
									$params['mensagem']   = "Agendamento efetuado com sucesso.";

									$laudosFinaisFuncionarios = new Sinistro2_Model_LaudosFinaisFuncionarios();
										
									$laudosFinaisFuncionarios->deleteAuxiliares($id_laudo_final);

									if (!empty($params['id_auxiliar'])) {
										foreach ($params['id_auxiliar'] as $idAuxiliar) {
											$laudosFinaisFuncionarios->save([
												'id_laudo_final' => $id_laudo_final,
												'id_funcionario' => $idAuxiliar
											]);
										}
									}

									Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

									/**
									 * @TODO só funcionará em produção quanto tirar o APPLICATION_ENV do IF
									*/
									if (APPLICATION_ENV != 'production' && $params['fl_success'])  {

										//Só chama envio para TAGH se empresa já existe lá.
										$ModelFuncionarios = new Sistema_Model_Funcionarios();
										$ModelVistoria = new Sistema_Model_Vistorias();
										$RowVistoria = $ModelVistoria->fetchRow('id = '.$params['id_vistoria']);

										$ModelProposta = new Seguro_Model_Propostas();
										$Proposta = $ModelProposta->getRow($params['id_proposta']);
										$Produto = $Proposta->produto();

										//verifica via produto x cobertura se precisa ser feita sincronia com a tagh
										$ModelProdutoCoberturas = new Produto_Model_ProdutosCoberturas();
										$Cobertura = $ModelProdutoCoberturas->fetchRow('id_cobertura = '.$params['id_cobertura'].' and id_produto = '.$Produto['id'])->toArray();

										if(($ModelFuncionarios->verificaExistenciaEmpresaTagh($agf['id_funcionario'])) && ($Cobertura['fl_transmitir_tagh'])){
											$entityId = $this->loadXMLData($old_status, $AgendamentosFuncionarios, $vistoriasAvisos, $id_laudo_final, $params['id_proposta']);

											if (!is_null($entityId)) {
												$ModelVistoria->update(array('id_tagh' => $entityId), 'id = '.$params['id_vistoria']);
											}
										}
									}
								} else {
									Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
									$params['mensagem']   = "Não há itens disponíveis para esta avaliação.\n\n";
									$params['fl_success'] = 0;
								}
							}

						} else {
							Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
							$params['mensagem']   = "Um novo agendamento só poderá ser feito 4 dias após o anterior.\n\n A data da vistoria deve ser posterior ou igual a ".$DtUltimoAgendamento->get(Zend_Date::DATES)."\n\n";
							$params['fl_success'] = 0;
						}
					}
				} else {
					Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
					$params['fl_success'] = 1;
					$params['mensagem']   = "'{$this->getAllFormErros(array($Form),$Form->getValues())}'";
				}
			} catch (Exception $e) {
				//Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
				$params['fl_success'] = 0;
				$params['mensagem']   = "'{$e->getMessage()}'";
			}

		} else {
			if($params['id_vistoria']) {
				$dadosAgendamento = $Model_Agendamentos->getAgendamento($params['id_vistoria']);
				$params = array_merge($params, $dadosAgendamento);
			}
		}

		$Form->populate($params);
		$this->view->form = $Form;
	}

	public function cancelamentoAction() {
		//$this->isAjax();
		$this->getHelper('layout')->disableLayout();
		$this->view->id = $this->getRequest()->getParam('id');
		$this->view->id_processo = $this->getRequest()->getParam('id_processo');
		$this->view->id_vistoria = $this->getRequest()->getParam('id_vistoria');
	}

	public function agendamentoAction() {
		$this->getHelper('layout')->disableLayout();
		$this->view->id_proposta = $this->getRequest()->getParam('id_proposta');
		$this->view->id_processo = $this->getRequest()->getParam('id_processo');
		$this->view->id_tipo = $this->getRequest()->getParam('id_tipo');
		$this->view->ds_tipo = $this->getRequest()->getParam('ds_tipo');

		$ModelPropostaCoberturas = new Seguro_Model_PropostasCoberturas();
		$Rs = $ModelPropostaCoberturas->getCoberturasByPropostaProdutoConfiguradoTipo($this->getRequest()->getParam('id_proposta'), $this->getRequest()->getParam('id_tipo'), false);
		$this->view->data = $Rs;
	}

	public function novaavaliacaoAction() {
		$this->isAjax();

		$params = $this->getRequest()->getParams();

		parse_str($params['formParams'], $paramsForm);
		$params['formParams'] = $paramsForm;

		$id_vistoria  = $params['id_vistoria'];
		$id_processo  = $params['id_processo'];
		$id_cobertura = $params['id_cobertura'];
		$id_empresa   = $params['id_empresa'];
		$ds_motivo    = $params['formParams']['ds_motivo'];

		//ABRE AGENDAMENTO PARA A NOVA AVALIAÇÃO
		$ModelAgendamento = new Sistema_Model_Agendamentos();

		$dataAgendamento['ds_tipo']       = 'FINAL';
		$dataAgendamento['id_cobertura']  = $id_cobertura;
		$dataAgendamento['id_processo']   = $id_processo;
		$dataAgendamento['id_empresa']    = $id_empresa;
		$dataAgendamento['id_vistoria']   = $id_vistoria;

		Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

		try {

			if(!count($params['formParams']['id_item_segurado'])){
				$result = array("status" => false, "message" => "Selecione pelo menos um item!");
				$this->getResponse()->setBody(Zend_Json::encode($result));
				return;
			}

			$id_nova_vistoria = $ModelAgendamento->abreAgendamento($dataAgendamento);

			//SALVA NAS OBSERVAÇÕES O MOTIVO PARA A CRIAÇÃO DE UMA NOVA AVALIAÇÃO
			$ModelProcessoObservacoes = new Sinistro2_Model_ProcessosObservacoes();
			$Motivo = $ModelProcessoObservacoes->createRow();
			$Motivo->id_processo = $id_processo;
			$Motivo->ds_observacao = "Nova avaliação solicitada para a Vistoria <b>".$id_vistoria."</b>. <b>Motivo:</b> ".$ds_motivo;
			$Motivo->save();

			//SALVA OS ITENS A SEREM REAVALIADOS
			$ModelVistItensNovaAvaliacao = new Sistema_Model_VistoriasItensSeguradosNovaAvaliacao();

			foreach ($params['formParams']['id_item_segurado'] as $item){
				$ModelVistItensNovaAvaliacao->save($id_nova_vistoria, $item);
			}

			$result = array("status" => true, "message" => "Nova avaliação cadastrada com sucesso!");
			Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

		} catch (Exception $e) {
			$result = array("status" => false, "message" => "Erro ao cadastrar nova avaliação!");
			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();
		}

		$this->getResponse()->setBody(Zend_Json::encode($result));

	}

	public function saveAction() {
		try {
			$this->getHelper('ViewRenderer')->setNoRender();
			$this->getHelper('layout')->disableLayout();

			$params = $this->getRequest()->getParams();

			$ModelAgendamento = new Sistema_Model_Agendamentos();
			$ModelAgendamento->abreAgendamento($params);

			$observacao = 'Disponibilizado agendamento final.';

			if ($params['ds_tipo'] == 'PRELIMINAR') {
				$observacao = 'Disponibilizado agendamento preliminar.';
			}
			
			$this->lancarObservacaoProcesso($params['id_processo'], $observacao);
		} catch (Exception $e) {
			$die($e);
		}

		$this->_redirect('/sinistro2/processo/view/id/'.$this->getRequest()->getParam('id_processo').'#regulacao_laudos');
	}

	private function lancarObservacaoProcesso(int $idProcesso, string $observacao) {
		$modelProcessosObservacoes = new Sinistro2_Model_ProcessosObservacoes();
        $rowProcessosObservacoes = $modelProcessosObservacoes->createRow();
        $rowProcessosObservacoes->id_processo = $idProcesso;
        $rowProcessosObservacoes->ds_observacao = $observacao;
        $rowProcessosObservacoes->save();
	}
}
