<?php

class Seguro_Model_VistoriaPreviaNova extends Agro_Db_Table_Abstract {
	protected $_schema = 'seguro';
	protected $_name = 'propostas_vistorias_previas';
	protected $_primary = 'id_vistoria';
	public $_order = array('sub.data_semeadura', 'prod.ds_nome_abreviado', 'e.ds_sigla', 'm.ds_nome_municipio','sub.lmga_total');

	public function getData($where=false){

		//verifica se foi passado filtro safra para utilizá-lo na criação da tabela temporária
		foreach ($where as $clause) {
			if (($clause['field'] == 'saf.id') && ($clause['value'])) {
				$AND = 'AND prod.id_safra = '.$clause['value'].' ';
			}
		}

		//criação tabela temporária
		$this->_db->query("
			CREATE temp TABLE itens_segurados_temp AS (
				SELECT
					id_proposta,
					sum(its.vl_lmga) AS lmga_total,
					CASE
					    WHEN max(itsc.dt_semeadura) is not null THEN max(itsc.dt_semeadura)
					    ELSE '1900-01-01'
					END AS data_semeadura_validacao,
					max(itsc.dt_semeadura) as data_semeadura
				FROM seguro.itens_segurados its
                JOIN seguro.itens_segurados_complemento itsc
                  ON itsc.id_item_segurado=its.id
                JOIN seguro.propostas p
                  ON p.id = its.id_proposta
                JOIN produto.produtos prod
                  ON prod.id = p.id_produto
               WHERE (
                         SELECT id_proposta
                           FROM seguro.propostas_endosso
                          WHERE id_endosso = p.id_endosso
                       ORDER BY dt_criacao limit 1
                     )  = p.id $AND
				GROUP BY
			id_proposta)
		");

        $subselect = $this->select()->setIntegrityCheck(false);
        $subselect->from(array('pe' => 'seguro.propostas_endosso'), array(id_proposta, id_endosso));
        $subselect->where('pe.fl_proposta_vigente = true');

		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('p'=>'seguro.propostas'),array('id', 'id_endosso', 'id_status', 'dt_vigencia_inicio', 'id_usuario_criacao', 'id_produto', 'ds_status_seguradora', 'nr_digito_verificador', 'nr_apolice', 'ds_identificador_seguradora', 'id_versao',  'id_proposta_endossada'));
		$select->join(array('pe' => $subselect),  'pe.id_endosso = p.id_endosso', 'pe.id_proposta as id_proposta_endosso');
		$select->join(array('sub'=>'itens_segurados_temp'),'sub.id_proposta = p.id', array('sub.lmga_total','sub.data_semeadura'));
		$select->join(array('pp'=>'seguro.propostas_propriedades'),'p.id = pp.id_proposta', '');
		$select->join(array('prop'=>'seguro.propostas_proponentes'),'p.id = prop.id_proposta', 'ds_nome_proponente');
		$select->join(array('sst'=>'sistema.status'),'sst.id = p.id_status',null);
		$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', false);
		$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->joinLeft(array('vp'=>'seguro.propostas_vistorias_previas'),'p.id = vp.id_proposta ', array('vp.id as id_proposta_vistoria','vp.id_status'));
		$select->joinLeft(array('vis'=>'sistema.vistorias'),'vp.id_vistoria = vis.id ', false);
		$select->join(array('usu'=>'sistema.usuarios'),'usu.id = p.id_usuario_criacao', 'usu.ds_nome_usuario');
		$select->joinLeft(array('pb'=>'seguro.proposta_boletos'),'p.id = pb.id_proposta and pb.id_versao = p.id_versao and nr_parcela = 1 and pb.fl_ativo = true', false);
		$select->where("sst.ds_chave IN ('AGUARDANDO_ENVIO_SEG','AGUARDANDO_VISTORIA_PREVIA', 'APOLICE_EMITIDA', 'TRANSMITIDA_SEGURADORA', 'AGUARDANDO_EMISSAO')");

		$whereClause = array();
		if (is_array($where)) {
			
			foreach ($where as $clause) {
				if (is_array($clause)) {
					$field    = $clause['field'];
					$operator = $clause['operator'];
					$value    = $clause['value'];
					if($field == 'vp.id_status' || $field == 'pb.fl_pago') {
						$whereClause[] = "$field $operator $value";
					}else if($field == 'vp.id_status' && $value == 'null') {
						$whereClause[] = "$field $operator '$value'";
					}else if($field == 's.ds_chave'){
					    $fl_nao_encaminhada = true;
						$whereClause[] = "$field IN ('AGUARDANDO_ENVIO_SEG','AGUARDANDO_VISTORIA_PREVIA', 'APOLICE_EMITIDA', 'TRANSMITIDA_SEGURADORA', 'AGUARDANDO_EMISSAO')";
						$whereClause[] = "
                                            (
                                                SELECT
                                                    COUNT(*)
                                                FROM
                                                    seguro.propostas pr,
                                                    seguro.propostas_coberturas prc,
                                                    produto.produtos_coberturas pdc
                                                WHERE
                                                    pr.id_produto = pdc.id_produto AND
                                                    pr.id = prc.id_proposta AND
                                                    pdc.id_cobertura = prc.id_cobertura AND
                                                    pdc.fl_vistoria_previa = true AND
                                                    prc.id_proposta = p.id
                                            ) > 0
						";
					} else if ($field == 'fl_filtro_data_plantio') {
                        $fl_filtro_data_plantio = true;
					}elseif($field == 'saf.id' ){
						if($value == 'TODAS') {
							$operator = '>=';
							$value = '15';
						} 
						$whereClause[] = "$field $operator '$value'";
					} else {
						$whereClause[] = "$field $operator '$value'";
					}

				} else {
					$whereClause[] = $clause;
				}
			}
		}

		if(count($whereClause) > 0) {
			$select .= ' and ' . implode(' and ', $whereClause);
		}

		if(!$fl_filtro_data_plantio and $fl_nao_encaminhada){
		    $select .= " and (sub.data_semeadura_validacao + 10) <= now()";
		}

		if(is_array($this->_order)) {
			$select .= " order by " . implode(' , ', $this->_order);
		} else {
			$select .= " order by " . $this->_order;
		}

$select .= ' limit 10';
		return $this->_db->fetchAll($select);
	}

	public function save(array $dados) {
		try{
			//pega o status "Encaminhado"
			$id_status = $this->getIdStatusEncaminhado();
			$ModelVP = new Seguro_Model_VistoriaPreviaEmpresa();
            $i = 0;

			foreach($dados['id_propostas'] as $id_proposta){
				if(!$ModelVP->temLaudoDigitado($id_proposta)){
					$id_vistoria = $this->getIdVistoria($id_proposta);
				}else{
					$id_vistoria = '';
				}

				//dados para tabela sistema.vistorias//
				$ModelVistorias = new Sistema_Model_Vistorias();
				$dados['id'] 		= $id_vistoria;
				$dados['id_tipo']	= 1;
				$dados['dt_inicio']	= null;
				$dados['dt_fim']	= null;

				$id_vistoria = $ModelVistorias->save($dados);
				//-----//

				//salva a empresa
				$ModelVistoriaEmpresas = new Sistema_Model_VistoriasEmpresas();
				$ModelVistoriaEmpresas->delete($id_vistoria);
				$dados['id_vistoria'] = $id_vistoria;

				$ModelVistoriaEmpresas->save($dados);
				//---//

				//deleta o agendamento pois a vistoria foi reencaminhada
				$Agendamento = new Sistema_Model_VistoriasAgendamentos();
				$Agendamento->deleteVistoriaAgendamento($id_vistoria);
				//----//

				//salva a relação proposta/vistoria/status
				$Row = $this->getRow($id_vistoria);
				$ModelStatus = new Sistema_Model_Status();
				$Row->id_proposta = $id_proposta;
				$Row->id_vistoria = $id_vistoria;
				$Row->id_status = $id_status;
                $Row->ds_motivo = $dados['ds_motivo'];
                $Row->id_proposta_solicitacao = $dados['id_propostas_endossos'][$i];

                if ($Row->save()) {

                    //Salva na tabela histórico
                    $ModelVistoriasHistorico = new Seguro_Model_VistoriaPreviaHistorico();
                    $dados['id_proposta_vistoria'] = $Row->id;
                    $dados['id_status'] = $Row->id_status;
                    $dados['id_status_analise'] = $Row->id_status_analise;
                    $dados['id_empresa_historico'] = $ModelVistoriaEmpresas->id;

                    $ModelVistoriasHistorico->save($dados);
                }

                $i++;
			}
			return true;

		} catch (Exception $e){
			die($e->getMessage());
			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 getIdVistoria($id_proposta){
		$select = $this->select()->setIntegrityCheck(false);
		$select->from(array('vp'=>'seguro.propostas_vistorias_previas'),'vp.id_vistoria');
		$select->join(array('vis'=>'sistema.vistorias'),'vis.id = vp.id_vistoria',false);
		$select->where("vp.id_proposta = ?", $id_proposta);

		$id_vistoria =  $this->_db->fetchOne($select);

    	return $id_vistoria;
	}

	public function dispensarVistoria($propostas) {
		try {
			foreach ($propostas as $id_proposta) {
				$this->_db->update(array('id_status' => 219), array('id_proposta' => $id_proposta));
			}
			return true;
		} catch (Exception $e) {
			return $e->getMessage();
		}
	}
}