<?php

class Corretor_Model_Row_Processo extends Sinistro2_Model_Row_Processo {

	public function getArquivosStatus() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from('sistema.status', 'ds_chave');
		$Select->where('id = ?', $this->id_status_arquivos);

		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne($Select);
	}

	public function getArquivosStatusNome() {
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from('sistema.status', 'ds_status');
		$Select->where('id = ?', $this->id_status_arquivos);

		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchOne($Select);
	}

	/**
	 * Libera cadastro de encerramento de colheita de acordo com as seguintes regras:
	 * - Se a cobertura principal tiver laudo preliminar só é liberado após o cadastro deste.
	 * - Não havendo laudo preliminar o cadastro de encerramento é liberado
	 */
	public function permitirEncerramentoColheita(){
		$permitir = true;

		$ModelProposta = new Seguro_Model_Propostas();
		$ModelProdutoCobertura = new Produto_Model_ProdutosCoberturas();
		$ModelAvisoInicio = new Sinistro_Model_AvisosInicio();

		$Proposta = $ModelProposta->find($this->id_proposta)->current();

		$CoberturaPrincipal = $ModelProdutoCobertura->getCoberturaPrincipal($Proposta->id_produto);

		if ($CoberturaPrincipal->fl_vistoria_preliminar){

			$Avisos = $ModelAvisoInicio->getAvisosInicioByProposta($Proposta->id);

			if (count($Avisos) <= 0){
				$permitir = false;
			}

		}

		return $permitir;
	}

	public function possuiVistoriaPreliminar(){
		$permitir = false;

		$ModelProposta = new Seguro_Model_Propostas();
		$ModelProdutoCobertura = new Produto_Model_ProdutosCoberturas();

		$Proposta = $ModelProposta->find($this->id_proposta)->current();

		$CoberturaPrincipal = $ModelProdutoCobertura->getCoberturaPrincipal($Proposta->id_produto);

		if ($CoberturaPrincipal->fl_vistoria_preliminar){

			$permitir = true;

		}

		return $permitir;
	}

	public function vistoriasPreliminares($idCobertura, $idEmpresa=null) {
		$Select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$Select->from(array('a' => 'sinistro.avisos'), null);
		$Select->join(array('va' => 'sinistro.vistorias_avisos'), 'va.id_aviso = a.id', null);
		$Select->join(array('v' => 'sistema.vistorias'), 'v.id = va.id_vistoria and v.fl_ativo = true and v.fl_del = false', array('id as id_vistoria', 'dt_inicio as dt_inicio_vistoria'));
		$Select->join(array('vc' => 'sistema.vistorias_coberturas'), 'vc.id_vistoria = v.id', 'id_cobertura');
		$Select->join(array('tv' => 'sistema.tipos_vistoria'), 'tv.id = v.id_tipo', null);
		$Select->join(array('vag' => 'sistema.vistorias_agendamentos'), 'vag.id_vistoria = v.id', null);
		$Select->join(array('ag' => 'sistema.agendamentos'), 'ag.id = vag.id_agendamento', array('id as id_agendamento', 'dt_agendamento', 'ds_turno'));
		$Select->join(array('ve' => 'sistema.vistorias_empresas'), 've.id_vistoria = v.id', null);
		$Select->joinLeft(array('e' => 'sistema.empresas'), 've.id_empresa = e.id', 'ds_nome_fantasia');
		$Select->joinLeft(array('vlp' => 'sistema.vistorias_laudos_preliminares'), 'vlp.id_vistoria = v.id', null);
		$Select->joinLeft(array('lp' => 'sinistro.laudos_preliminares'), 'lp.id = vlp.id_laudo_preliminar', 'id as id_laudo_preliminar');
		$Select->joinLeft(array('s' => 'sistema.status'), 'lp.id_status = s.id', array('ds_chave as status'));
		$Select->where("tv.ds_chave_tipos_vistoria = 'PRELIMINAR'");
		$Select->where("a.id_proposta = ?", $this->id_proposta);
		$Select->where("vc.id_cobertura = ?", $idCobertura);

		if ($idEmpresa) {
			$Select->where("e.id = ?", $idEmpresa);
		}

		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
	}

	public function vistoriasFinais($idCobertura, $idEmpresa=null) {
		$Select = $this->select()->setIntegrityCheck(false)->distinct(true);
		$Select->from(array('a' => 'sinistro.avisos'), null);
		$Select->join(array('va' => 'sinistro.vistorias_avisos'), 'va.id_aviso = a.id', null);
		$Select->join(array('v' => 'sistema.vistorias'), 'v.id = va.id_vistoria', array('dt_inicio as dt_inicio_vistoria'));
		$Select->joinLeft(array('vlf' => 'sistema.vistorias_laudos_finais'), 'vlf.id_vistoria = v.id', null);
		$Select->joinLeft(array('lf' => 'sinistro.laudos_finais'), 'lf.id = vlf.id_laudo_final', array('id as id_laudo_final'));
		$Select->joinLeft(array('s' => 'sistema.status'), 'lf.id_status = s.id', array('ds_chave as status'));
		$Select->join(array('vc' => 'sistema.vistorias_coberturas'), 'vc.id_vistoria = v.id', array('id_vistoria'));
		$Select->join(array('tv' => 'sistema.tipos_vistoria'), 'tv.id = v.id_tipo', null);
		$Select->join(array('c' => 'produto.coberturas'), 'c.id = vc.id_cobertura', array('id as id_cobertura'));
		$Select->join(array('vag' => 'sistema.vistorias_agendamentos'), 'vag.id_vistoria = v.id', null);
		$Select->join(array('ag' => 'sistema.agendamentos'), 'ag.id = vag.id_agendamento', array('id as id_agendamento', 'dt_agendamento', 'ds_turno'));
		$Select->join(array('ve' => 'sistema.vistorias_empresas'), 've.id_vistoria = v.id', null);
		$Select->join(array('e' => 'sistema.empresas'), 've.id_empresa = e.id', array('ds_nome_fantasia'));
		$Select->where('tv.ds_chave_tipos_vistoria = ?', 'FINAL');
		$Select->where('a.id_proposta = ?', $this->id_proposta);
		$Select->where('vc.id_cobertura = ?', $idCobertura);
		$Select->group(array('c.id', 'vc.id_vistoria', 'ag.id', 'ag.dt_agendamento', 'ag.ds_turno', 'lf.id', 'v.dt_inicio', 'e.ds_nome_fantasia', 's.ds_chave'));

		if ($idEmpresa) {
			$Select->where("e.id = ?", $idEmpresa);
		}

		return Agro_Db_Table_Abstract::getDefaultAdapter()->fetchAll($Select);
	}

}
