<?php

class Seguro_Model_VistoriaPreviaEmpresa extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'propostas_vistorias_previas';
	protected $_primary = 'id';
	public $_order = array('vp.dt_criacao desc', 'prod.ds_nome_abreviado', 'e.ds_sigla', 'm.ds_nome_municipio');
	public $_columnExcel = array(
				'id' => 'Doc.',
				'ds_nome_proponente' => 'Segurado',
				'ds_nome_abreviado' => 'Produto',
				'ds_nome_safra' => 'Safra',
				'ds_sigla' => 'UF',
				'ds_nome_municipio' => 'Município',
				'dt_encaminhamento' => 'Encaminhamento',
				'dt_agendamento' => 'Agendamento',
				'ds_nome_funcionario' => 'Perito',
				'ds_status' => "Status"
			);

	public function saveLaudo($dados) {

		try{

			$ModelStatus = new Sistema_Model_Status();

			//pega o status "AGUARDANDO_VISTORIA"
			$id_status = $ModelStatus->getIdByChaveTipoChave('AGUARDANDO_VISTORIA','VP');

			$Row = $this->getRow($dados['id_proposta_vistoria']);

			$Row->id_proposta = $dados['id_proposta'];
			$Row->id_vistoria = $Row->id_vistoria;
			//se o status já for aguardando vistoria ou digitação finalizada/transmitido, não altera
			if ($Row->id_status != 70 && $Row->id_status != 71) {
                $Row->id_status = $id_status;
            }

			if ($Row->save()) {
                // salvando histórico
                $dd = array();
                $ModelHistorico = new Seguro_Model_VistoriaPreviaHistorico();
                $dd['id_status_analise'] = $Row->id_status_analise;
                $dd['id_proposta_vistoria'] = $Row->id;
                $dd['id_status'] = $id_status;
                $dd['ds_motivo'] = 'Laudo salvo.';
                $ModelHistorico->save($dd);
            }

			return $Row->id;

		}catch (Exception $e){
			die($e);
		}
	}



	public function getData($where=false) {

	    $this->_db->query(
	        "CREATE temp TABLE vistorias_previas_temp AS (
		          SELECT
		              id_endosso, id_vistoria, vp.id, vp.id_status, id_proposta_solicitacao, id_status_analise, vp.dt_criacao, vp.dt_prazo_agendamento, vp.id_status_tablet
		          FROM
		              seguro.propostas p
		          INNER JOIN seguro.propostas_vistorias_previas vp ON vp.id_proposta = p.id
		    )"
		);
		
		$this->_db->query(
			"CREATE INDEX tmp_index_vistorias_previas_1 
				 ON vistorias_previas_temp (id_status)"
		);

		$this->_db->query(
			"CREATE INDEX tmp_index_vistorias_previas_2 
				 ON vistorias_previas_temp (id_status_analise)"
		);

		$subselect = $this->select()->setIntegrityCheck(false);
		$subselect->from(array('pe'=>'seguro.propostas_endosso'), array('id_proposta','id_endosso'));
		$subselect->where('fl_proposta_vigente = true');

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p'=>'seguro.propostas'),array('id','id_proposta_endossada','id_proposta_mae'));
		$select->join(array('pp'=>'seguro.propostas_propriedades'),'p.id = pp.id_proposta', false);
		$select->join(array('pe'=> $subselect), 'pe.id_proposta = p.id', false);
		$select->joinLeft(array('sp'=>'sinistro.processos'), 'sp.id_proposta = pe.id_proposta', 'sp.id as id_processo');
		$select->join(array('prop'=>'seguro.propostas_proponentes'),'p.id = prop.id_proposta', 'ds_nome_proponente');
		$select->join(array('prod'=>'produto.produtos'),'p.id_produto = prod.id', 'prod.ds_nome_abreviado');
		$select->join(array('saf'=>'produto.safras'),'saf.id = prod.id_safra', array('saf.id as id_safra', 'saf.ds_nome_safra'));
		$select->join(array('m'=>'sistema.municipios'),'pp.id_municipio = m.id', 'm.ds_nome_municipio');
		$select->join(array('e'=>'sistema.estados'),'m.id_estado = e.id', 'e.ds_sigla');
		$select->join(array('pc'=>'seguro.propostas_corretores'),'p.id = pc.id_proposta', false);
		$select->join(array('u'=>'sistema.usuarios'),'pc.id_usuario = u.id', 'ds_nome_usuario as ds_nome_corretor');
		$select->joinLeft(array('vp'=>'vistorias_previas_temp'),'vp.id_endosso = p.id_endosso', array('vp.id as id_proposta_vistoria','vp.id_status','vp.id_status_analise','id_proposta_solicitacao', 'seguro.nr_endosso(p.id, vp.id_endosso) as nr_endosso'));
		$select->join(array('s'=>'sistema.status'),'vp.id_status = s.id', array('s.cd_status','s.ds_status'));
		$select->join(array('sa'=>'sistema.status'),'vp.id_status_analise = sa.id', array('sa.id as id_status_analise','sa.ds_status as ds_status_analise'));
		$select->join(array('vis'=>'sistema.vistorias'),'vp.id_vistoria = vis.id ', false);
		$select->join(array('usu_digit' => 'sistema.usuarios'), 'usu_digit.id = p.id_usuario_criacao', 'ds_nome_usuario as digitador');
		$select->joinLeft(array('vemp'=>'sistema.vistorias_empresas'),'vis.id = vemp.id_vistoria ', 'vemp.dt_criacao as dt_encaminhamento');
		$select->joinLeft(array('emp'=>'sistema.empresas'),'vemp.id_empresa = emp.id', array('id as id_empresa','emp.ds_nome_fantasia'));
		$select->joinLeft(array('vist'=>'sistema.vistorias_agendamentos'),'vp.id_vistoria = vist.id_vistoria', false);
		$select->joinLeft(array('ag'=>'sistema.agendamentos'),'vist.id_agendamento = ag.id', array('id as id_agendamento','ag.dt_agendamento'));
		$select->joinLeft(array('svf' => 'sistema.vistorias_funcionarios'), 'vp.id_vistoria = svf.id_vistoria', false);
		$select->joinLeft(array('vist_func'=>'sistema.funcionarios'),'svf.id_funcionario = vist_func.id', 'vist_func.ds_nome_funcionario');
		$select->joinLeft(array('vist_usu'=>'sistema.usuarios'),'vist_func.id_usuario = vist_usu.id', 'vist_usu.ds_nome_usuario');
		$select->joinLeft(array('lvp' => 'regulacao.lvp001'), 'vp.id = lvp.id_proposta_vistoria', 'prioridade_conferencia');
        $select->joinLeft(array('chamados_confirmar_contato' => "(SELECT count(id) as total_chamados, id_proposta FROM atendimento.chamados WHERE id_departamento = 26 AND id_tipo_chamado = 92 GROUP BY id_proposta)"), 'chamados_confirmar_contato.id_proposta = p.id', array('total_chamados'));

		if (is_array($where)) {
			foreach ($where as $clause) {
			    if (is_array($clause)) {
        			$field = $clause['field'];
        			$operator = $clause['operator'];
        			$value = $clause['value'];
        			$select->where("$field $operator ?", $value);

			    } else {
					$select->where($clause, '');
				}
			}
		}

		if ($this->_order) {
			$select->order($this->_order);
		}

		return $select;
	}

	public function getDadosAgendamentoVistoriador($id_proposta_vistoria) {
		//sistema.empresas AS emp ON vemp.id_empresa = emp.id INNER JOIN - testar essa linha com os perfis definidos

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p'=>'seguro.propostas'),'*');
		$select->join(array('pp'=>'seguro.propostas_propriedades'),'p.id = pp.id_proposta', false);
		$select->join(array('prop'=>'seguro.propostas_proponentes'),'p.id = prop.id_proposta', 'ds_nome_proponente');
		$select->join(array('prod'=>'produto.produtos'),'p.id_produto = prod.id', 'prod.ds_nome_abreviado');
		$select->join(array('saf'=>'produto.safras'),'saf.id = prod.id_safra', 'saf.ds_nome_safra');
		$select->join(array('m'=>'sistema.municipios'),'pp.id_municipio = m.id', 'm.ds_nome_municipio');
		$select->joinLeft(array('e'=>'sistema.estados'),'m.id_estado = e.id', 'e.ds_sigla');
		$select->join(array('vp'=>'seguro.propostas_vistorias_previas'),'p.id = vp.id_proposta ', array('vp.id as id_proposta_vistoria','vp.id_status'));
		$select->join(array('s'=>'sistema.status'),'vp.id_status = s.id', array('s.cd_status','s.ds_status'));
		$select->join(array('vis'=>'sistema.vistorias'),'vp.id_vistoria = vis.id ', false);
		$select->join(array('vemp'=>'sistema.vistorias_empresas'),'vis.id = vemp.id_vistoria ', 'vemp.dt_criacao as dt_encaminhamento');
		$select->join(array('emp'=>'sistema.empresas'),'vemp.id_empresa = emp.id', 'emp.ds_nome_fantasia');
		$select->joinLeft(array('f'=>'sistema.funcionarios'),'emp.id = f.id_empresa AND fl_responsavel_empresa = true ', false);
		$select->joinLeft(array('vist'=>'sistema.vistorias_agendamentos'),'vp.id_vistoria = vist.id_vistoria', false);
		$select->joinLeft(array('ag'=>'sistema.agendamentos'),'vist.id_agendamento = ag.id', array("to_char(ag.dt_agendamento, 'dd/MM/yyyy') as dt_agendamento","ds_turno"));
		$select->joinLeft(array('ag_func'=>'sistema.agendamentos_funcionarios'),'ag.id = ag_func.id_agendamento ', 'ag_func.id_agendamento');
		$select->joinLeft(array('vist_func'=>'sistema.funcionarios'),'ag_func.id_funcionario = vist_func.id', array('id as id_vistoriador','vist_func.ds_nome_funcionario'));
		$select->where('vp.id = ?', $id_proposta_vistoria);

		$Rs = $this->getAdapter()->fetchRow($select);
		return $Rs;
	}

/*
	public function fetchAllPaginator($where, $pageNumber=false, $itemCountPerPage = 10, $paginator='') {
		return $this->getData($where);
    }
*/

	public function saveAgendamentoVistoriador($dados) {

		Agro_Db_Table_Abstract::getDefaultAdapter()->beginTransaction();

		try{

			$dados['id_vistoria'] = $this->getIdVistoriaByIdPropostaVistoria($dados['id_proposta_vistoria']);
	        $id_proposta_vistoria = $dados['id_proposta_vistoria'];

			//salva o agendamento
			$ModelAgendamentos = new Sistema_Model_Agendamentos();
			$dados['id'] = $dados['id_agendamento'];
			$dados['id_tipo_vistoria'] = 1; //VISTORIA PRÉVIA
			$dados['id_status'] = 202; //AGENDADO
			$dados['id_agendamento'] = $ModelAgendamentos->save($dados);

			//salva o vistoriador
			$ModelVistoriador = new Sistema_Model_VistoriasFuncionarios();
			$dados['id_funcionario'] = $dados['id_vistoriador'];

			$ModelVistoriador->save($dados);

			//relaciona vistoria com agendamento
			$ModelVistoriaAgendamento = new Sistema_Model_VistoriasAgendamentos();
			$ModelVistoriaAgendamento->save($dados);

			$ModelAgendamentosFuncionarios = new Sistema_Model_AgendamentosFuncionarios();
			$ModelAgendamentosFuncionarios->delete($dados['id_agendamento']);
			//relaciona vistoria com funcionário
			$ModelAgendamentosFuncionarios->save($dados);

			$vpOld = $this->getRow($dados['id_proposta_vistoria']);

			//$this->delete($dados['id_vistoria'],'id_vistoria');
			$Row = $this->getRow($dados['id_proposta_vistoria']);

			$Row->id_vistoria = $dados['id_vistoria'];
			//busca o status "Aguardando Vistoria"
			$ModelStatus = new Sistema_Model_Status();
			$Row->id_status = $ModelStatus->getIdByTipoChaveCodigo('VP', 3);

			$Row->id_proposta = $dados['id_proposta'];

			//mantém o id da vistoria prévia mãe
			$Row->id_vistoria_mae = $vpOld->id_vistoria_mae;
			$Row->fl_necessario_endosso = $vpOld->fl_necessario_endosso ? 1 : 0;
			$Row->fl_nova_vistoria_custo_perito = $vpOld->fl_nova_vistoria_custo_perito ? 1 : 0;
			$Row->dt_prazo_agendamento = $vpOld->dt_prazo_agendamento;

			// salvando histórico
	        if ($Row->save()) {
	            // em função do "delete" da linha 165, é necessário pegar o histório referente ao antigo registro e colocar no novo.
	            $this->_db->query('update seguro.propostas_vistorias_previas_historico set id_proposta_vistoria = '.$Row->id.' where id_proposta_vistoria = '.$id_proposta_vistoria);
	            $ModelHistorico = new Seguro_Model_VistoriaPreviaHistorico();
	            $dados['id_status_analise'] = $Row->id_status_analise;
	            $dados['ds_motivo'] = 'Agendamento para o dia: '.$dados['dt_agendamento'];
	            $dados['id_proposta_vistoria'] = $Row->id;
	            $ModelHistorico->save($dados);

	        }

	        Agro_Db_Table_Abstract::getDefaultAdapter()->commit();

	        return $Row;

		}catch (Exception $e){

			Agro_Db_Table_Abstract::getDefaultAdapter()->rollback();

			die($e->getMessage());
		}


	}

	public function saveStatusAnalise($dados){
		$VistoriaPreviaHistorico = new Seguro_Model_VistoriaPreviaHistorico();
		$dados['ds_motivo'] = $dados['ds_descricao'];
		$dados['id_status_alteracao'] = !empty($dados['id_status_alteracao']) ? (int) $dados['id_status_alteracao'] : null;
        $idVistoriaPreviaHistorico = null;

        $idStatusAlteracaoAguardandoEndosso = (new Sistema_Model_Status())->getIdStatus(
            Seguro_Model_VistoriaPrevia::DS_CHAVE_VP_STATUS_ALTERACAO_AGUARDANDO_ENDOSSO,
            Sistema_Model_Tipostatus::DS_CHAVE_VP_STATUS_ALTERACAO
        );

        $idStatusAlteracaoEndossoEfetivado = (new Sistema_Model_Status())->getIdStatus(
            Seguro_Model_VistoriaPrevia::DS_CHAVE_VP_STATUS_ALTERACAO_ENDOSSO_EFETIVADO,
            Sistema_Model_Tipostatus::DS_CHAVE_VP_STATUS_ALTERACAO
        );

        $statusAnaliseNecessarioEndosso = [
            Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_CONCLUIDA_COM_ALT_SEM_MOV,
            Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_CONCLUIDA_AUMENTO,
            Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_CONCLUIDA_RED,
            Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_CONCLUIDA_CANC,
        ];

		if (!isset($dados['fl_necessario_endosso'])) {
			$dados['fl_necessario_endosso'] = 0;

			//Os status "Com alterações e sem movimento", "aumento", "redução", "cancelamento"
			if(in_array($dados['id_status_analise'], $statusAnaliseNecessarioEndosso)
                && !empty($dados['id_status_alteracao'])
                && $dados['id_status_alteracao'] === $idStatusAlteracaoAguardandoEndosso
            ) {
				$dados['fl_necessario_endosso'] = 1;
			}
		}

        if (!$dados['origemDigitacaoLaudo']) {
            $dados['fl_necessario_endosso'] = 0;
            $dados['id_status_alteracao'] = null;

            if(in_array($dados['id_status_analise'], $statusAnaliseNecessarioEndosso)) {
                $dados['fl_necessario_endosso'] = 1;
                $dados['id_status_alteracao'] = $idStatusAlteracaoAguardandoEndosso;
            }
        }

		if (empty($dados['id_proposta_vistoria'])) {
			throw new Zend_Exception("Informe uma Vistoria Prévia!");
		}

		if(is_array($dados['id_proposta_vistoria'])){

			foreach($dados['id_proposta_vistoria'] as $idPropostaVistoria){

				$id_proposta = $dados['id_proposta'];
				if (is_array($idPropostaVistoria)) {
					$id_proposta = $idPropostaVistoria['id_proposta'];
					$id_proposta_vistoria = $idPropostaVistoria['id_proposta_vistoria'];
					$id_empresa = $idPropostaVistoria['id_empresa'];
				}

				$Row = $this->getRow($id_proposta_vistoria);
				$Row->id_status_analise = $dados['id_status_analise'];
				$Row->fl_necessario_endosso = $dados['fl_necessario_endosso'];
				$Row->id_status_alteracao = $dados['id_status_alteracao'];
                $Row->id_pendencia = $dados['id_pendencia'];

                if($this->canChangeStatus($Row) && $Row->save()) {
                    //salvando histório
                    $data = $dados;
                    $data['id_proposta'] = $id_proposta;
                    $data['id_proposta_vistoria'] = $Row->id;
                    $rowVistoriaPreviaHistorico = $VistoriaPreviaHistorico->save($data);

                    if ($rowVistoriaPreviaHistorico instanceof Zend_Db_Table_Row) {
                        $idVistoriaPreviaHistorico = $rowVistoriaPreviaHistorico->id;
                    }
                }

                if($dados['id_status_analise'] == Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_AGUARDANDO_NOVA_VISTORIA){
					$propostas = array();
					$propostas['id_empresa'] = $id_empresa;
					$propostas['id_propostas'] = array($id_proposta);
					$propostas['id_vistoria_mae'] = $id_proposta_vistoria;

					$ModelVistoriaPrevia = new Seguro_Model_VistoriaPrevia();

					$ModelVistoriaPrevia->save($propostas);
				}
			}
		}else{

			$Row = $this->getRow($dados['id_proposta_vistoria']);
			$Row->id_proposta = $dados['id_proposta'];
			$Row->id_status_analise = $dados['id_status_analise'];
			$Row->fl_necessario_endosso = $dados['fl_necessario_endosso'];
			$Row->id_status_alteracao = $dados['id_status_alteracao'];
            $Row->id_pendencia = $dados['id_pendencia'];

            if($this->canChangeStatus($Row) && $Row->save()) {
                //salvando histórico
                $rowVistoriaPreviaHistorico = $VistoriaPreviaHistorico->save($dados);

                if ($rowVistoriaPreviaHistorico instanceof Zend_Db_Table_Row) {
                    $idVistoriaPreviaHistorico = $rowVistoriaPreviaHistorico->id;
                }
            }

            if($dados['id_status_analise'] == Seguro_Model_VistoriaPrevia::ID_STATUS_VP_ANALISE_AGUARDANDO_NOVA_VISTORIA){
				$propostas = array();
				$propostas['id_empresa'] = $dados['id_empresa'];
				$propostas['id_propostas'] = array( 0 => $dados['id_proposta']);
				$propostas['id_vistoria_mae'] = $dados['id_proposta_vistoria'];
				$propostas['fl_nova_vistoria_custo_perito'] = $dados['fl_nova_vistoria_custo_perito'];

				$ModelVistoriaPrevia = new Seguro_Model_VistoriaPrevia();

				$ModelVistoriaPrevia->save($propostas);
			}
		}

        if ($dados['id_status_alteracao'] === $idStatusAlteracaoEndossoEfetivado) {
            $rowsVistoriasProposta = (new Seguro_Model_VistoriaPrevia())->getVistoriasByProposta((int) $dados['id_proposta']);

            foreach ($rowsVistoriasProposta as $rowVistoriaProposta) {
                if ($rowVistoriaProposta->id === (int) $dados['id_proposta_vistoria']) {
                    continue;
                }

                if ($rowVistoriaProposta->id_status_alteracao !== $idStatusAlteracaoAguardandoEndosso) {
                    continue;
                }

                $rowVistoriaProposta->id_status_alteracao = $idStatusAlteracaoEndossoEfetivado;
                $rowVistoriaProposta->save();
            }
        }

        if (!empty($dados['idPropostaObservacao']) && !empty($idVistoriaPreviaHistorico)) {
            $dadosHistoricoObservacoes = [
                'id_propostas_observacoes' => $dados['idPropostaObservacao'],
                'id_propostas_vistorias_previas_historico' => $idVistoriaPreviaHistorico,
            ];

            if (!(new Seguro_Model_VistoriasPreviasHistoricoObservacoes())->save($dadosHistoricoObservacoes)) {
                throw new Exception('Erro ao vincular a observação com o histórico da vistoria.');
            }
        }

		return true;
	}

	/**
	 * Regra para alteração do Status da análise da Vistoria Prévia
	 * 
	 * @param Row $row 
	 * @throws Zend_Exception Caso não possa alterar dispara uma exception
	 * @return boolean
	 */
	private function canChangeStatus($row) {
		if ($row->id_status_analise == 179) {
			$modelItensLaudo = new Regulacao_Model_Lvp001ItensSegurados;
			$itens = $modelItensLaudo->getItensLaudo(array('id_proposta_vistoria' => $row->id, 'fl_necessario_nova_vistoria' => true));
			
			if (empty($itens)) {
				throw new Exception("É necessário marcar ao menos uma quadra/talhão para retorno!");
			}
		}

		//somente altera o status da análise quando a vistoria prévia for digitação finalizada
        $permissaoStatusAnalise = [
          Sistema_Model_Status::VP_AGUARDANDO_VISTORIA,
          Sistema_Model_Status::VP_CANCELADA,
          Sistema_Model_Status::VP_TRANSMITIDA,
		  Sistema_Model_Status::VP_TRANSMITIDA_SEM_FOTOS
        ];

		if (!in_array($row->id_status, $permissaoStatusAnalise)) {
			throw new Zend_Exception("Uma das Vistorias Prévias selecionadas não tem permissão para alterar o status da análise!");
        }

		return true;
	}

	public function getIdVistoriaByIdPropostaVistoria($id_proposta_vistoria){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),'id_vistoria');
		$select->where('vp.id = ?', $id_proposta_vistoria);

		$Rs = $this->getAdapter()->fetchOne($select);
		return $Rs;
	}


	public function getDadosByIdProposta($id_proposta){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),array('id','id_vistoria'));
		$select->where('vp.id_proposta = ?', $id_proposta);

		$Rs = $this->getAdapter()->fetchRow($select);

		return $Rs;
	}

    public function getDadosDigitacaoFinalizadaByIdProposta($id_proposta, $id_status, $fl_necessario_endosso = false)
    {
        if (is_array($id_status)) {
            $id_status = implode(', ', $id_status);
        }

        $select = $this->select()->setIntegrityCheck(false);
        $select->from(array("vp" => $this->_schema.".".$this->_name),array('id','id_vistoria'));
        $select->join(array("p" => "seguro.propostas"), "vp.id_proposta = p.id",false);
        $select->where('p.id_endosso = (select id_endosso from seguro.propostas where id = ?)', $id_proposta);
        $select->where('vp.id_status in (' . $id_status . ')');
        $select->where('vp.fl_necessario_endosso = ?', $fl_necessario_endosso);
        $select->order('vp.id DESC'); //adicionado para pegar sempre a última caso haja mais de uma

        $Rs = $this->getAdapter()->fetchRow($select);

        return $Rs;
    }

	public function getLaudo($id_proposta_vistoria, $id_proposta) {

		$Safra = new Produto_Model_Safras();

		$ModelSafra = $Safra->getSafraModel($id_proposta,"Lvp001");
		$ModelSafra = new $ModelSafra();

		$laudo = $ModelSafra->getLaudo($id_proposta_vistoria);

		return $laudo;
	}

	public function getPropostaVistoria($id_proposta_vistoria) {
		$sql = "select id_proposta from seguro.propostas_vistorias_previas where id = $id_proposta_vistoria";
		return $this->_db->fetchOne($sql);
	}

	public function getPropostaMaeVistoria($id_proposta_vistoria) {
		$sql = "select id_proposta_mae from seguro.propostas inner join seguro.propostas_vistorias_previas on propostas.id = propostas_vistorias_previas.id_proposta where propostas_vistorias_previas.id = $id_proposta_vistoria";
		return $this->_db->fetchOne($sql);
	}

	public function getNomeSegurado($id_proposta) {
		$sql = "select ds_nome_proponente from seguro.propostas_proponentes where id_proposta = $id_proposta";
		return $this->_db->fetchOne($sql);
	}

	public function getDadosProposta($id_proposta, $id_proposta_vistoria = null){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p' => 'seguro.propostas'),'*');
		$select->join(array('pte' => 'seguro.propostas_proponentes'),'p.id = pte.id_proposta','*');
		$select->join(array('pde' => 'seguro.propostas_propriedades'),'p.id = pde.id_proposta','*');
		$select->join(array('m' => 'sistema.municipios'),'pde.id_municipio = m.id','ds_nome_municipio');
		$select->join(array('e' => 'sistema.estados'),'m.id_estado = e.id','ds_sigla');
		$select->join(array('prod' => 'produto.produtos'),'p.id_produto = prod.id',false);
		$select->join(array('pg' => 'produto.produtos_geral'),'prod.id_produto_geral = pg.id',false);
		$select->join(array('c' => 'produto.culturas'),'pg.id_cultura = c.id','ds_nome_cultura');
		$select->join(array('stp'=>'sistema.status'),'p.id_status = stp.id', array('stp.id as id_status_proposta','stp.ds_status as ds_status_proposta'));
		$select->joinLeft(array('pvp' => 'seguro.propostas_vistorias_previas'), 'pvp.id_proposta = p.id', array('id_vistoria', 'id as id_vistoria_previa', 'fl_transmitido_tablet', 'fl_transmitido'));
		$select->joinLeft(array('stppvp' => 'sistema.status'), 'stppvp.id = pvp.id_status_analise', array('ds_chave as status_analise'));
		$select->joinLeft(array('ve' => 'sistema.vistorias_empresas'), 'pvp.id_vistoria = ve.id_vistoria', false);
		$select->joinLeft(array('emp' => 'sistema.empresas'), 've.id_empresa = emp.id', array('id as id_empresa_vistoriadora', 'ds_razao_social as ds_empresa_vistoriadora'));

		if ($id_proposta_vistoria) {
			$selectProp = $this->select()->setIntegrityCheck(false);
			$selectProp->from(array('p' => 'seguro.propostas'), false);
			$selectProp->join(array('pe' => 'seguro.propostas_endosso'), 'p.id_endosso = pe.id_endosso', 
				"string_agg(pe.id_proposta::text, ',') as propostas");
			$selectProp->where('p.id = ?', $id_proposta);

			$select->where('p.id in ('.$this->fetchRow($selectProp)->propostas.')');
			$select->where('pvp.id = ?', $id_proposta_vistoria);
		} else {
			$select->where('p.id = ?', $id_proposta);			
		}

		$Rs = $this->fetchRow($select);
		if ($Rs) {
			$Rs = $Rs->toArray();
		}

		return $Rs;
	}

	public function getAutorizados($id_proposta){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('pa' => 'seguro.propostas_pessoa_autorizada_vistoria'), array('ds_pessoa_autorizada','cpf_cnpj as cpf_cnpj_autorizada','ds_telefone'));
		$select->where('pa.id_proposta = ?', $id_proposta);

		$Rs = $this->_db->fetchAll($select);

		return $Rs;
	}


	public function finalizaDigitacao($dados) {

	    $User = Zend_Auth::getInstance()->getIdentity();

		$Safra = new Produto_Model_Safras();
		$schema = $Safra->getSafraModel($dados['id_proposta']);

		try{
			$this->getAdapter()->query("UPDATE ".$schema.".lvp001 SET id_usuario_alteracao = ".$User->id.", fl_transmitido = true, dt_transmissao = 'now()' WHERE id_proposta_vistoria = ".$dados['id_proposta_vistoria']);

			$Row = $this->getRow($dados['id_proposta_vistoria']);

			//busca o id do status - DIGITAÇÃO FINALIZADA
			$ModelStatus = new Sistema_Model_Status();
			$Row->id_status = $ModelStatus->getIdByTipoChaveCodigo('VP', 4);
			$Row->id_status_analise = Agro_Util::status('NAO_ANALISADO', 'VP_ANALISE');
			$Row->fl_transmitido = 1;

			if ($Row->save()) {
				$Historico = new Seguro_Model_VistoriaPreviaHistorico();
				$dados['id_status'] = $Row->id_status;
				$dados['id_status_analise'] = $Row->id_status_analise;
				$dados['ds_motivo'] = 'Transmissão laudo.';
				$Historico->save($dados);

                $where[] = [
                    'field' => 'id_proposta',
                    'operator' => '=',
                    'value' => $dados['id_proposta']
                ];

                $modelChamados = new Atendimento_Model_Chamado();
                $rowsChamados = $modelChamados->fetchAll($modelChamados->getDataPrevia($where, false))->toArray();

                $dadosFinalizarChamado = [
                    'id_tipo_chamado' => Atendimento_Model_TipoChamado::TECNICA_CONFIRMAR_CONTATO,
                    'id_proposta' => $dados['id_proposta'],
                    'id_status' => Atendimento_Model_Chamado::ID_STATUS_RESOLVIDO,
                    'respostaAutomatica' => true,
                    'finalizadoViaTransmissaoDigitacao' => true,
                    'ds_descricao' => 'Finalização automática devido a transmissão da vistoria',
                ];

                foreach ($rowsChamados as $chamado) {
                    if ((int)$chamado['id_tipo_chamado'] !== Atendimento_Model_TipoChamado::TECNICA_CONFIRMAR_CONTATO) {
                        continue;
                    }

                    if ((int)$chamado['id_status'] === Atendimento_Model_Chamado::ID_STATUS_RESOLVIDO) {
                        continue;
                    }

                    if (!empty($chamado['id_parent'])) {
                        continue;
                    }

                    $dadosFinalizarChamado['id_prioridade'] = $chamado['id_prioridade'];
                    $dadosFinalizarChamado['id_departamento'] = $chamado['id_departamento'];
                    $dadosFinalizarChamado['id_parent'] = $chamado['id'];
                    $dadosFinalizarChamado['id_usuario_criacao'] = $dadosFinalizarChamado['id_responsavel'] = $chamado['id_responsavel'];

                    $modelChamados->save($dadosFinalizarChamado);
                }
			}

			return true;

		}catch (Exception $e){
			die($e);
		}

	}

	public function enviaEmailResponsavel($dados){
		$Safra = new Produto_Model_Safras();

		$schema = $Safra->getSafraModel($dados['id_proposta']);

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p' => 'seguro.propostas'),'p.id');
		$select->join(array('pte' => 'seguro.propostas_proponentes'), 'p.id = pte.id_proposta', 'pte.ds_nome_proponente');
		$select->join(array('pde' => 'seguro.propostas_propriedades'), 'p.id = pde.id_proposta', 'pde.ds_endereco');
		$select->join(array('pvp' => 'seguro.propostas_vistorias_previas'), 'p.id = pvp.id_proposta', 'pvp.dt_alteracao','pvp.id_usuario_alteracao');
		$select->join(array('lvp001' => $schema.'.lvp001'), 'pvp.id = lvp001.id_proposta_vistoria', false);
		$select->join(array('m' => 'sistema.municipios'), 'pde.id_municipio = m.id', 'm.ds_nome_municipio');
		$select->join(array('e' => 'sistema.estados'), 'm.id_estado = e.id', 'e.ds_sigla');
		$select->join(array('prod' => 'produto.produtos'), 'p.id_produto = prod.id', false);
		$select->join(array('pg' => 'produto.produtos_geral'), 'prod.id_produto_geral = pg.id', false);
		$select->join(array('c' => 'produto.culturas'), 'pg.id_cultura = c.id', 'c.ds_nome_cultura');
		$select->where('p.id = ?', $dados['id_proposta']);
		$select->where('lvp001.id_proposta_vistoria = ?', $dados['id_proposta_vistoria']);

		$Rs = $this->fetchRow($select);
		return $Rs;

	}

	public function deleteLaudo($dados){

		$Safra = new Produto_Model_Safras();
		$schema = $Safra->getSafraModel($dados['id_proposta']);

		$ModelSafra = $Safra->getSafraModel($dados['id_proposta'],"Lvp001");
		$ModelSafra = new $ModelSafra();

		$id_laudo = $ModelSafra->getIdLaudo($dados['id_proposta_vistoria']);

		try{

			$this->getAdapter()->query("DELETE FROM ".$schema.".lvp001_itens_segurados WHERE id_laudo_previa = $id_laudo");
			$this->getAdapter()->query("DELETE FROM ".$schema.".lvp001 WHERE id_proposta_vistoria = ".$dados['id_proposta_vistoria']);

			$ModelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
			$ModelArquivos->delete($dados['id_proposta_vistoria'],'id_proposta_vistoria');

			//busca o id do status - AGUARDANDO VISTORIA
			$ModelStatus = new Sistema_Model_Status();
			$id_status = $ModelStatus->getIdByTipoChaveCodigo('VP', 3);

			$dados = array_merge($this->getDadosByIdProposta($dados['id_proposta']), $dados);

			$Row = $this->getRow($dados['id']);
			$Row->id_status = $id_status;
			$Row->id_proposta = $dados['id_proposta'];
			$Row->id_vistoria = $dados['id_vistoria'];
			$Row->id_status_analise = 169;

			if ($Row->save()) {
				$Historico = new Seguro_Model_VistoriaPreviaHistorico();
				$dados['id_status'] = $Row->id_status;
				$dados['ds_motivo'] = 'Laudo excluído.';
                $dados['id_status_analise'] = $Row->id_status_analise;
				$Historico->save($dados);
			}

			return true;

		}catch (Exception $e){
			return false;
		}
	}

	public function reverteTransmissaoLaudo($dados){

		$Safra = new Produto_Model_Safras();
		$schema = $Safra->getSafraModel($dados['id_proposta']);

		try{
			$this->getAdapter()->query("UPDATE ".$schema.".lvp001 SET fl_transmitido = false WHERE id_proposta_vistoria = ".$dados['id_proposta_vistoria']);

			$Row = $this->getRow($dados['id_proposta_vistoria']);
			$Row->id_proposta = $dados['id_proposta'];

			//busca o id do status - Aguardando Vistoria
			$ModelStatus = new Sistema_Model_Status();
			$Row->id_status = $ModelStatus->getIdByTipoChaveCodigo('VP', 3);
			$Row->id_status_analise = 169; // não analisado
			$Row->fl_transmitido = 0;

			$return = $Row->save();

			if ($return) {
				$Historico = new Seguro_Model_VistoriaPreviaHistorico();
				$dados['id_proposta_vistoria'] = $return;
				$dados['id_status'] = $Row->id_status;
				$dados['id_status_analise'] = $Row->id_status_analise;
				$dados['ds_motivo'] = 'Desfeita transmissão laudo.';
				$Historico->save($dados);
			}

			return $return;
		}catch (Exception $e){
			die($e);
		}
	}

	public function checkLaudos($idProposta){
		if($idProposta){
			$select = $this->select()->setIntegrityCheck(false);
			$select->from(array('pvp' => "seguro.propostas_vistorias_previas"),'id');
			$select->join(array('v' => 'sistema.vistorias'), 'v.id = pvp.id_vistoria', false);
			$select->join(array('vpl' => 'seguro.vistorias_previas_laudos'), 'vpl.id_vistoria = v.id', false);
			$select->where('pvp.id_proposta = ?',$idProposta);

			$idPropostaVistoria = $this->_db->fetchOne($select);
			if($idPropostaVistoria){
				return true;
			}
			return false;
		}else{
			return false;
		}
	}

	public function getIdStatusEncaminhado(){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('s'=>'sistema.status'),'s.id');
		$select->join(array('ts'=>'sistema.tipo_status'),'ts.id = s.id_tipo_status',false);
		$select->where("ts.ds_chave = ?", "VP");
		$select->where("s.cd_status = ?", 1);

		$id_status =  $this->_db->fetchOne($select);

		return $id_status;
	}

	public function temLaudoDigitado($id_proposta, $id_proposta_vistoria = null){

		$Safra = new Produto_Model_Safras();
		$schema = $Safra->getSafraModel($id_proposta);

		$statusTransmitida = Sistema_Model_Status::VP_TRANSMITIDA;
		$statusTransmitidaSemFotos = Sistema_Model_Status::VP_TRANSMITIDA_SEM_FOTOS;
		$statusAguardandoVistoria = Sistema_Model_Status::VP_AGUARDANDO_VISTORIA;

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),'id');
		$select->join(array('lvp001'=> /*$schema.*/'regulacao.lvp001'),'lvp001.id_proposta_vistoria = vp.id',false);
		$select->where('vp.id_proposta = ?', $id_proposta);
		if ($id_proposta_vistoria) {
			$select->where('vp.id = ?', $id_proposta_vistoria);
		}
		$select->where("vp.id_status IN ({$statusTransmitida}, {$statusTransmitidaSemFotos}, {$statusAguardandoVistoria})");

		if($this->getAdapter()->fetchRow($select)){
			return true;
		}
		return false;
	}

	public function countLaudos($id_proposta){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),'id');
		$select->where('vp.id_proposta = ?', $id_proposta);

		$Rs = $this->getAdapter()->fetchRow($select);
		return (count($Rs));
	}

	public function getTotalItens($id_proposta){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('s'=> 'seguro.propostas'), false);
		$select->join(array('iseg'=> 'seguro.itens_segurados'), "iseg.id_proposta = s.id", 'iseg.id');
		$select->where('s.id = ?', $id_proposta);

		$Rs = $this->getAdapter()->fetchAll($select);	
		return (count($Rs));
	}

	public function getTotalItensLaudo($dados){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('s'=> $dados['module'].'.'.$dados['controller']), false);
		$select->join(array('iseg'=> $dados['module'].'.'.$dados['controller'].'_itens_segurados'), "iseg.id_laudo_previa = s.id", 'iseg.id');
		$select->where('s.id = ?', $dados['id_laudo']);

		$Rs = $this->getAdapter()->fetchAll($select);
		return (count($Rs));
	}

	public function getItensLaudo($dados){
		$select = $this->select()->setIntegrityCheck(false);
		
		if (isset($dados['id_laudo']) && !empty($dados['id_laudo'])) {
			$select->from(array('s'=> $dados['module'].'.'.$dados['controller']), array('s.id as id_laudo', 's.id_proposta_vistoria', 's.dt_laudo'));
			$select->join(array('iseg'=> $dados['module'].'.'.$dados['controller'].'_itens_segurados'), "iseg.id_laudo_previa = s.id", array('iseg.nro_item as nr_item_segurado', '*'));
			$select->joinleft(array('sis'=> 'seguro.itens_segurados'), "iseg.id_item_segurado = sis.id", array('sis.id as id_item', 'sis.ds_item_segurado', 'sis.vl_rendimento_tonelada', 'sis.vl_lmga', 'sis.vl_area', 'coalesce(sis.vl_valor_tonelada, 0.00) as is_valor_tonelada'));
			$select->joinleft(array('sisc'=> 'seguro.itens_segurados_complemento'), "sisc.id_item_segurado = sis.id", array('sisc.id_ciclo'));
			$select->joinleft(array('varie' => 'produto.variedades'), 'iseg.id_variedade = varie.id', 'ds_nome_variedade');
			$select->joinleft(array('est_fen' => 'produto.estadios_fenologicos'), 'iseg.estadio_fenologico = est_fen.id', 'ds_nome_estadio_fenologico');
			$select->where('s.id = ?', $dados['id_laudo']);
			if (isset($dados['fl_habilitar_nova_vistoria']) && !empty($dados['fl_habilitar_nova_vistoria'])) {
				$select->where('iseg.fl_habilitar_nova_vistoria = ?', $dados['fl_habilitar_nova_vistoria']);
			}
			$select->order('iseg.nro_item');
		} else {
			$select->from(array('sis'=> 'seguro.itens_segurados'), array('sis.id as id_item', 'sis.nr_item_segurado', 'sis.ds_item_segurado', 'sis.vl_rendimento_tonelada', 'sis.vl_area', 'sis.vl_lmga', 'coalesce(sis.vl_valor_tonelada, 0.00) as is_valor_tonelada'));
			// $select->joinLeft(array('iseg'=> $dados['module'].'.'.$dados['controller'].'_itens_segurados'), "iseg.id_item_segurado = sis.id", array('*', 'COALESCE(iseg.id_item_segurado, sis.id) as id_item_segurado'));
			// $select->joinLeft(array('s'=> $dados['module'].'.'.$dados['controller']), "iseg.id_laudo_previa = s.id", array('s.id as id_laudo', 's.id_proposta_vistoria', 's.dt_laudo'));
			$select->where('sis.id_proposta = ?', $dados['id_proposta']);
			$select->order('sis.nr_item_segurado');
		}

		return $this->getAdapter()->fetchAll($select);
	}

    public function getItensLaudoByProposta($dados){
        $select = $this->select()->setIntegrityCheck(false);

        if (isset($dados['id_proposta']) && !empty($dados['id_proposta'])) {
            $select->from(array('vp' => "seguro.propostas_vistorias_previas"), false);
            $select->join(array("p" => "seguro.propostas"), "vp.id_proposta = p.id",false);
            $select->join(array('v'=> 'sistema.vistorias'), "v.id = vp.id_vistoria", false);
            $select->join(array('s'=> $dados['module'].'.'.$dados['controller']), "s.id_proposta_vistoria = vp.id", array('s.id as id_laudo', 's.id_proposta_vistoria', 's.dt_laudo'));
            $select->join(array('iseg'=> $dados['module'].'.'.$dados['controller'].'_itens_segurados'), "iseg.id_laudo_previa = s.id", array('iseg.nro_item as nr_item_segurado', '*'));
            $select->joinLeft(array('sis'=> 'seguro.itens_segurados'), "iseg.id_item_segurado = sis.id", array('sis.id as id_item', 'sis.ds_item_segurado', 'sis.vl_rendimento_tonelada', 'sis.vl_lmga', 'sis.vl_area', 'coalesce(sis.vl_valor_tonelada, 0.00) as is_valor_tonelada'));
            $select->joinleft(array('sisc'=> 'seguro.itens_segurados_complemento'), "sisc.id_item_segurado = sis.id", array('sisc.id_ciclo'));
            $select->joinleft(array('varie' => 'produto.variedades'), 'iseg.id_variedade = varie.id', 'ds_nome_variedade');
            $select->joinleft(array('est_fen' => 'produto.estadios_fenologicos'), 'iseg.estadio_fenologico = est_fen.id', 'ds_nome_estadio_fenologico');
            $select->where('p.id_endosso = (select id_endosso from seguro.propostas where id = ?)', $dados['id_proposta']);
            if (isset($dados['fl_habilitar_nova_vistoria']) && (!empty($dados['fl_habilitar_nova_vistoria']) || $dados['fl_habilitar_nova_vistoria'] === false)) {
                if ($dados['fl_habilitar_nova_vistoria'] == 'false') {
                    $select->where('(iseg.fl_habilitar_nova_vistoria = ' . $dados['fl_habilitar_nova_vistoria'] . ' OR iseg.fl_habilitar_nova_vistoria IS NULL)');
                } else {
                    $select->where('iseg.fl_habilitar_nova_vistoria = ' . $dados['fl_habilitar_nova_vistoria']);
                }
            }
            $select->order('iseg.nro_item');
        } else {
            return array();
        }

        return $this->getAdapter()->fetchAll($select);
    }

	public function temLaudoNaoTransmitido($id_proposta){

		$Safra = new Produto_Model_Safras();
		$schema = $Safra->getSafraModel($id_proposta);

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),'id');
		$select->join(array('lvp001'=> $schema.'.lvp001'),'lvp001.id_proposta_vistoria = vp.id',false);
		$select->where('vp.id_proposta = ?', $id_proposta);
		$select->where('lvp001.fl_transmitido = ?','false');

		$Rs = $this->getAdapter()->fetchRow($select);
		if(!$Rs){
			return false;
		}

		return true;
	}

	public function analisaLaudo($id_arquivo){

		try{

			$User = Zend_Auth::getInstance()->getIdentity();
			$KarinaSilva = false;
			if($User->ds_nome_usuario == 'karina.silva' ||
				$User->ds_nome_usuario == 'karina.figueiro' ||
				$User->ds_nome_usuario == 'danielle.goncalves' ||
				$User->ds_nome_usuario == 'luana.beck'){
				$KarinaSilva = true;
			}

			$ModelArquivos = new Seguro_Model_Vistoriapreviaempresaarquivos();
			$id_proposta_vistoria = $ModelArquivos->getIdPropostaVistoria($id_arquivo);

			$statusAnalise = $this->getStatusAnalise($id_proposta_vistoria);

			if($statusAnalise == 169 && $KarinaSilva){ //não analisado
				$this->_db->query("UPDATE seguro.propostas_vistorias_previas SET id_status_analise = 170 WHERE id = ".$id_proposta_vistoria);

				$Historico = new Seguro_Model_VistoriaPreviaHistorico();
				$dados['id_proposta_vistoria'] = $id_proposta_vistoria;
				$dados['id_status'] = 170;
				$dados['id_status_analise'] = $statusAnalise;
				$Historico->save($dados);
			}

			return true;

		}catch (Exception $e){
			return false;
		}
	}

	public function getStatusAnalise($id_proposta_vistoria){

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array("vp" => $this->_schema.".".$this->_name),'id_status_analise');
		$select->where('vp.id = ?', $id_proposta_vistoria);

		$Rs = $this->getAdapter()->fetchOne($select);
		if(!$Rs){
			return false;
		}

		return $Rs;
	}

	public function getStatusAnaliseByProposta($id_proposta){

	    $select = $this->select()->setIntegrityCheck(false);
	    $select->from(array("vp" => $this->_schema.".".$this->_name), array("id_vistoria", "dt_criacao","dt_laudo", "id as id_proposta_vistoria", 'fl_nova_vistoria_custo_perito'));
	    $select->join(array("st" => "sistema.status"), "st.id = vp.id_status_analise", "ds_status as ds_status_analise");
	    $select->join(array("st2" => "sistema.status"), "st2.id = vp.id_status", "ds_status as ds_status_digitacao");
	    $select->where('seguro.id_proposta_mae(vp.id_proposta) = seguro.id_proposta_mae('.$id_proposta.')');

	    $Rs = $this->getAdapter()->fetchAll($select);
	    if(!$Rs){
	        return false;
	    }

	    return $Rs;
	}

	public function cancela($id_proposta_vistoria, $motivo = null) {
		$row = $this->getRow($id_proposta_vistoria);

		$statusModel = new Sistema_Model_Status;
		$idStatusTabletCancelada = $statusModel->getId('CANCELADA', 'VP_TABLET');
		$idStatusCancelada = $statusModel->getId('CANCELADA', 'VP');

		$row->id_status_tablet = $idStatusTabletCancelada;
		$row->id_status = $idStatusCancelada;

		if ($row->save()) {
			$dados = array(
				'id_status' => $row->id_status,
				'id_status_analise' => $row->id_status_analise,
				'id_proposta_vistoria' => $id_proposta_vistoria
			);

			if ($motivo) {
				$dados['motivo'] = $motivo;
			}

			$ModelVistoriasHistorico = new Seguro_Model_VistoriaPreviaHistorico;
			$ModelVistoriasHistorico->save($dados);
		}

		return true;
	}


	public function deletePropostaVistoria($dados){
		try{
			$row = $this->getRow($dados['id_proposta_vistoria']);
			$statusModel = new Sistema_Model_Status;

			if ($statusModel->getId('AGUARDANDO_VISTORIA', 'VP') == $row->id_status) {
				$this->cancela($dados['id_proposta_vistoria'], 'Cancelada por exclusão!');
			} else {
				if($dados['id_agendamento']){
					$this->deleteAgendamentos($dados['id_agendamento']);
				}

				$this->delete($dados['id_proposta_vistoria']);
			}

			return true;

		}catch(Exception $e){
			return false;
		}

	}

	public function deleteAgendamentos($id_agendamento){

		try{

			$ModelVistoriasAgendamentos = new Sistema_Model_VistoriasAgendamentos();
			$agendamento = $ModelVistoriasAgendamentos->fetchRow('id_agendamento = '.$id_agendamento);
			$ModelVistoriasAgendamentos->delete('id_vistoria = '.$agendamento['id_vistoria']);

			$ModelVistoriasEmpresas = new Sistema_Model_VistoriasEmpresas();
			$ModelVistoriasEmpresas->delete('id_vistoria = '.$agendamento['id_vistoria']);

			$ModelVistoriasFuncionarios = new Sistema_Model_VistoriasFuncionarios();
			$ModelVistoriasFuncionarios->delete('id_vistoria = '.$agendamento['id_vistoria']);

			$ModelVistorias = new Sistema_Model_VistoriasFuncionarios();
			$ModelVistorias->delete($agendamento['id_vistoria']);

			$ModelAgendamentosFuncionarios = new Sistema_Model_AgendamentosFuncionarios();
			$ModelAgendamentosFuncionarios->delete('id_agendamento = '.$id_agendamento);

			$ModelAgendamentos = new Sistema_Model_Agendamentos();
			$ModelAgendamentos->delete($id_agendamento);

			return true;

		}catch (Exception $e){
			return false;
		}

	}


	public function getIdEmpresaByProposta($id_proposta){

	    $select = $this->select()->setIntegrityCheck(false);
	    $select->from(array("vp" => $this->_schema.".".$this->_name), false);
	    $select->join(array("ve" => "sistema.vistorias_empresas"), "ve.id_vistoria = vp.id_vistoria", "id_empresa");
	    $select->where('vp.id_proposta = ?', $id_proposta);
        $select->order('vp.id desc');

	    $Rs = $this->getAdapter()->fetchOne($select);
	    if(!$Rs){
	        return false;
	    }

	    return $Rs;
	}

	public function getVistoriasMobile($idEmpresa){

		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array('p'=>'seguro.propostas'), array('id as id_proposta'));
		$Select->join(array('pp'=>'seguro.propostas_propriedades'), 'p.id = pp.id_proposta', null);
		$Select->joinleft(array('sp'=>'sinistro.processos'), 'sp.id_proposta = p.id', null);
		$Select->join(array('prop'=>'seguro.propostas_proponentes'), 'p.id = prop.id_proposta', array('ds_nome_proponente'));
		$Select->join(array('prod'=>'produto.produtos'), 'p.id_produto = prod.id', array('id as id_produto'));
		$Select->join(array('saf'=>'produto.safras'), 'saf.id = prod.id_safra', null);
		$Select->join(array('m'=>'sistema.municipios'), 'pp.id_municipio = m.id', array('ds_nome_municipio'));
		$Select->join(array('e'=>'sistema.estados'), 'm.id_estado = e.id', array('ds_sigla as ds_uf'));
		$Select->join(array('vp'=>'seguro.propostas_vistorias_previas'), 'p.id = vp.id_proposta', array('id as id_proposta_vistoria'));
		$Select->join(array('s'=>'sistema.status'), 'vp.id_status = s.id', array('ds_status'));
		$Select->join(array('sa'=>'sistema.status'), 'vp.id_status_analise = sa.id', null);
		$Select->join(array('vis'=>'sistema.vistorias'), 'vp.id_vistoria = vis.id', array('id'));
		$Select->joinleft(array('vemp'=>'sistema.vistorias_empresas'), 'vis.id = vemp.id_vistoria', null);
		$Select->joinleft(array('emp'=>'sistema.empresas'), 'vemp.id_empresa = emp.id', null);
		$Select->joinleft(array('vist'=>'sistema.vistorias_agendamentos'), 'vp.id_vistoria = vist.id_vistoria', null);
		$Select->joinleft(array('ag'=>'sistema.agendamentos'), 'vist.id_agendamento = ag.id', null);
		$Select->joinleft(array('ag_func'=>'sistema.agendamentos_funcionarios'), 'ag.id = ag_func.id_agendamento', null);
		$Select->joinleft(array('vist_func'=>'sistema.funcionarios'), 'ag_func.id_funcionario = vist_func.id', null);
		$Select->join(array('pc'=>'seguro.propostas_corretores'), 'p.id = pc.id_proposta', null);
		$Select->join(array('u'=>'sistema.usuarios'), 'pc.id_usuario = u.id', null);
		$Select->where('saf.id >= 16');
		$Select->where('vp.fl_sincronizado = false');
		$Select->where('s.ds_chave = ?', 'AGUARDANDO_VISTORIA');
		$Select->where('emp.id = ?', $idEmpresa);
		$Select->order(array('prod.ds_nome_abreviado ASC', 'e.ds_sigla ASC'));

		$Rs = $this->fetchAll($Select)->toArray();

		return $Rs;

	}

    /**
     * @param int $idPropostaVistoria
     * @param int $idStatusAlteracao
     * @return void
     * @throws Exception
     */
    public function atualizarStatusAlteracao(int $idPropostaVistoria, int $idStatusAlteracao)
    {
        $idStatusAguardandoEndosso = (new Sistema_Model_Status())->getIdStatus(
            Seguro_Model_VistoriaPrevia::DS_CHAVE_VP_STATUS_ALTERACAO_AGUARDANDO_ENDOSSO,
            Sistema_Model_Tipostatus::DS_CHAVE_VP_STATUS_ALTERACAO
        );

        $idStatusEndossoEfetivado = (new Sistema_Model_Status())->getIdStatus(
            Seguro_Model_VistoriaPrevia::DS_CHAVE_VP_STATUS_ALTERACAO_ENDOSSO_EFETIVADO,
            Sistema_Model_Tipostatus::DS_CHAVE_VP_STATUS_ALTERACAO
        );

        $row = $this->getRow($idPropostaVistoria);
        $row->id_status_alteracao = !empty($idStatusAlteracao) ? $idStatusAlteracao : null;
        $row->fl_necessario_endosso = $idStatusAlteracao === $idStatusAguardandoEndosso ? 't' : 'f';

        if (!$row->save()) {
            throw new Exception('Erro ao atualizar o Status da Alteração - VP.');
        }

        if ($idStatusAlteracao === $idStatusEndossoEfetivado) {
            $propostas = (new Seguro_Model_Propostas())->getTodasPropostas($row->id_proposta)->toArray();

            foreach ($propostas as $proposta) {
                $rowVistorias = $this->fetchAll(["id_proposta = {$proposta['id']}"]);

                foreach ($rowVistorias as $rowVistoria) {
                    if (empty($rowVistoria)) {
                        continue;
                    }

                    if ((int) $rowVistoria['id_vistoria'] === $row->id_vistoria) {
                        continue;
                    }

                    if ((int) $rowVistoria['id_status_analise'] !== $row->id_status_analise) {
                        continue;
                    }

                    if (empty($rowVistoria['id_status_alteracao'])) {
                        continue;
                    }

                    $rowVistoria->id_status_alteracao = $idStatusEndossoEfetivado;
                    $rowVistoria->fl_necessario_endosso = 'f';

                    if (!$rowVistoria->save()) {
                        throw new Exception('Erro ao atualizar o Status da Alteração - VP.');
                    }
                }
            }
        }
    }
}
