<?php
require_once 'AgendamentovistoriaController.php';

class Sinistro2_AgendamentovistoriafinalController extends Sinistro2_AgendamentovistoriaController {

	public function excluiragendamentoAction() {
		$this->getHelper('ViewRenderer')->setNoRender();
		$this->getHelper('layout')->disableLayout();
		$result['status'] = false;
		$result['message'] = "";

		$ModelVistoria = new Sistema_Model_VistoriasLaudosFinais();
		$status = $ModelVistoria->getLaudosByVistoria($this->getRequest()->getParam('id_vistoria'));

		if (($status) && ( $status->ds_chave != 'PENDENTE_LAUDO_FINAL')) {
			$result['message'] = "Atenção!\n\nEste agendamento não pode ser Cancelado pois já possui Vistoria realizada.";
			$result['status'] = false;
		} elseif ($status->ds_chave == 'PENDENTE_LAUDO_FINAL') {
			//ATUALIZAR STATUS VISTORIA
			$ModelLaudoFinal = new Sinistro2_Model_LaudosFinais();
			if(!$ModelLaudoFinal->update(array('id_status' => '207'), 'id = ' . $status->id_laudo)) {
				$result['status'] = false;
				$result['message'] = "Atenção!\n\nErro ao efetuar cancelamento.";
			} //CANCELADO
			else {
				//Apaga o relacionamento da vistoria cancelada com os avisos de sinistro
				$Model_VA = new Sinistro2_Model_VistoriasAvisos();
				$Model_VA->delete($this->getRequest()->getParam('id_vistoria'));

				$result['status'] = true;
			}
		} elseif (!$status) {
			$result['status'] = true;
		}

		if ($result['status']){
			$ModelAgendamento = new Sistema_Model_Agendamentos();
			if(!$ModelAgendamento->update(array('id_status' => '203'), 'id = ' . $this->getRequest()->getParam('id'))) {
	            $result['status'] = false;
	            $result['message'] = "Atenção!\n\nErro ao efetuar cancelamento.";
			} //CANCELADO
			else {
				$result['status'] = true;
			}
		}

		if ($result['status']) {
			$ModelProcessoObservacoes = new Sinistro2_Model_ProcessosObservacoes();
			$Motivo = $ModelProcessoObservacoes->createRow();
			$Motivo->id_processo = $this->getRequest()->getParam('id_processo');
			$Motivo->ds_observacao = "Agendamento <b>".$this->getRequest()->getParam('id')."</b> CANCELADO. <b>Motivo:</b> ".$this->getRequest()->getParam('motivo_cancelamento');
			if ($Motivo->save()) {
				$result['message'] = "Cancelamento efetuado com sucesso.";
				$result['status'] = true;
			} else {
				$result['status'] = false;
				$result['message'] = "Atenção!\n\nErro ao efetuar cancelamento.";
			}
		}

		if ($result['status']) { //cancelamento da vistoria na TAGH
			$ModelProcesso = new Sinistro2_Model_Processos();
			$ModelVistorias = new Sistema_Model_Vistorias();

			$Processo = $ModelProcesso->find($this->getRequest()->getParam('id_processo'))->current();

			$Vistoria =  $ModelVistorias->find($this->getRequest()->getParam('id_vistoria'))->current();

			if ($Vistoria->id_tagh) {
				$return = $this->cancelarAgendamentoTAGH($this->getRequest()->getParam('id_vistoria'), $Processo->id_proposta);

				if ($return != 0) {
					$result['message'] .= "\nCancelamento em TAGH mal sucedido.";
					Agro_Util::zf_debug("Saída inesperada: " . $return);
				}
			}
		}

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

	private function cancelarAgendamentoTAGH($idVistoria, $idProposta) {
		$tagh = new Agro_Tagh();

		$dados['inspectionCompanyCode'] = $idProposta.'-'.$idVistoria;
		$dados['policyNumber'] = $idVistoria;

		$status = $tagh->cancelInspection($dados);

		//Escreve no arquivo de LOG se deu erro no cancelamento da TAGH
		if ($status->Id != 0) {
			Agro_Util::zf_debug($status);
		}

		return $status->Id;
	}
}
