<?php

class Sinistro2_Model_AvisosInicio extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Sinistro2_Model_Row_AvisoInicio';
	protected $_schema = 'sinistro';
	protected $_name = 'avisos_inicio';
	protected $_view = 'v_avisos_inicio_colheita';
	protected $_primary = 'id';
	public $_order = 'pr.id_proposta';

	
	public function delete($idAvisoInicio) {
		$this->_db->query("update sinistro.avisos_inicio set fl_del=true where id = $idAvisoInicio");
	}
	

	public function getData($where) { 
		$Select = $this->select()->setIntegrityCheck(false);
		$Select->from(array("p"=>"seguro.propostas"), array("p.id_proposta_mae", "p.id as id_proposta"));
		$Select->joinLeft(array("pr"=>"sinistro.processos"), 'pr.id_proposta = p.id', 'pr.id as id_processo');
		$Select->joinInner(array("pe"=>"seguro.propostas_endosso"), "pe.id_proposta = p.id AND pe.fl_proposta_vigente = true", false);
		$Select->joinInner(array("pp"=>"seguro.propostas_proponentes"), "pp.id_proposta = p.id", array("pp.ds_nome_proponente"));
		$Select->joinInner(array("pc"=>"seguro.propostas_corretores"), "pc.id_proposta = p.id", array("pc.id_usuario"));
		$Select->joinInner(array("pd"=>"produto.produtos"), "pd.id = p.id_produto", false);
		$Select->joinInner(array("pg"=>"produto.produtos_geral"), "pg.id = pd.id_produto_geral", false);
		$Select->joinInner(array("c"=>"produto.culturas"), "c.id = pg.id_cultura", false);


		$Select->where("p.id_status=".Agro_Util::status("APOLICE_EMITIDA", "PR"));
	
		if ($this->_order) {
			$Select->order($this->_order);
		}
	
		$this->getWhere($Select, $where);

		return $Select;
	}	
	
	public function getItensSeguradosAvisosInicio($idProcesso, $idProposta){
		$data = array();
		if ($idProposta) {
			$select = "
				select
					p.id as id_processo,
					it.id_proposta,
					it.id,
					it.nr_item_segurado,
					it.ds_item_segurado,
					it.vl_area,
					it.vl_lmga,
					v.ds_nome_variedade
				from
					seguro.itens_segurados it
					inner join produto.variedades v  on
						v.id = it.id_variedade
					left join sinistro.processos p on
						p.id_proposta = it.id_proposta
				where
					it.id_proposta = $idProposta and
					it.id not in (
							select
								aiis.id_item_segurado
							from
								sinistro.avisos_inicio ai
							inner join sinistro.avisos_inicio_itens_segurados aiis on
								aiis.id_aviso_inicio = ai.id
							where
								ai.id_proposta = $idProposta and ai.fl_del=false
					)
					and (p.id_status != 168 or p.id_status is null) and it.vl_lmga > 0
					
				group by
					p.id,
					it.id_proposta,
					it.id,
					it.nr_item_segurado,
					it.ds_item_segurado,
					it.vl_area,
					it.vl_lmga,
					v.ds_nome_variedade
				order by
					it.id
			";

			$data = $this->_db->fetchAll($select);
		}
		
		return $data;
	}

    public function getAvisosInicioByProposta($idProposta, bool $buscarRegistrosDeletados = false) {
	    $camposAviso = [
        	"ai.id",
        	"to_char(ai.dt_inicio_colheita, 'DD/MM/YYYY') AS dt_inicio_colheita",
        	"to_char(ai.dt_criacao,'DD/MM/YYYY HH24:MI') AS dt_envio",
        	"ai.id_usuario_criacao",
        	"ai.id_status",
			"ai.fl_del",
        ];

	    $campoUsuario = "usu.ds_nome_usuario AS ds_nome_usuario_envio";

        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(['prop' => 'seguro.propostas'], []);
        $select->join(['prop2' => 'seguro.propostas'], 'prop2.id_proposta_mae = prop.id_proposta_mae', []);
        $select->join(['ai' => $this->_schema.'.'.$this->_name], 'ai.id_proposta = prop2.id', $camposAviso);
        $select->join(['usu' => 'sistema.usuarios'], 'usu.id = ai.id_usuario_criacao', $campoUsuario);
        $select->where('prop.id = ?', $idProposta);
        
		if (!$buscarRegistrosDeletados) {
			$select->where("ai.fl_del = ?", 'false');
		}

        return $this->fetchAll($select)->toArray();
    }

    public function getDataViewAvisoInicio($idAvisoInicio, bool $buscarRegistrosDeletados = false) {

        $data = array();

		$campos = [
			'ae.id',
			"to_char(ae.dt_inicio_colheita, 'DD/MM/YYYY') as dt_inicio_colheita",
			"to_char(ae.dt_criacao,'DD/MM/YYYY HH24:MI') as dt_envio",
			'id_proposta',
			'ae.fl_del',
		];
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('ae'=>$this->_schema.'.'.$this->_name), $campos);
        $select->where("ae.id = ?", $idAvisoInicio);

		if (!$buscarRegistrosDeletados) {
			$select->where("ae.fl_del = ?", 'false');
		}

        $data = $this->fetchRow($select)->toArray();

        $selectProcesso = "
        SELECT proc.id AS id_processo
          FROM (SELECT id_proposta_mae
                  FROM {$this->_schema}.{$this->_name} AS ai
                       INNER JOIN seguro.propostas ON seguro.propostas.id = ai.id_proposta
                 WHERE ai.id = {$idAvisoInicio}) AS proposta_mae
               INNER JOIN seguro.propostas prop ON prop.id_proposta_mae = proposta_mae.id_proposta_mae
               INNER JOIN sinistro.processos AS proc ON proc.id_proposta = prop.id";

        $data = array_merge($data, $this->_db->fetchAll($selectProcesso)[0]);
        
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('aeis'=>'sinistro.avisos_inicio_itens_segurados'), null);
        $select->join(array('it'=>'seguro.itens_segurados'), 'it.id = aeis.id_item_segurado', array('nr_item_segurado', 'ds_item_segurado', 'vl_area'));
        $select->join(array('v'=>'produto.variedades'), 'v.id = it.id_variedade', 'ds_nome_variedade');
        $select->where("aeis.id_aviso_inicio = ?", $idAvisoInicio);
        
		if (!$buscarRegistrosDeletados) {
			$select->where("aeis.fl_del = ?", 'false');
		}
        
		$select->order("it.nr_item_segurado");
        
        $data['arItensSegurados'] = $this->fetchAll($select)->toArray();

        return $data;
    }
    
    public function getAvisosInicioByItem($idProposta, $idItemSegurado) {
        $select = $this->select();
        $select->setIntegrityCheck(false);
        $select->from(array('ai'=>'sinistro.avisos_inicio'), array("to_char(ai.dt_inicio_colheita, 'DD/MM/YYYY') as dt_inicio_colheita"));
        $select->join(array('aeis'=>'sinistro.avisos_inicio_itens_segurados'), 'ai.id = aeis.id_aviso_inicio', null);
        $select->where("aeis.id_item_segurado = ?", $idItemSegurado);
        $select->where("aeis.fl_del = ?", 'false');
        $select->where("ai.id_proposta = ?", $idProposta);
                
        return $this->getAdapter()->fetchOne($select);
    }
}