<?php
class Sinistro2_Model_AvisosEncerramento extends Agro_Db_Table_Abstract {
	protected $_rowClass = 'Sinistro2_Model_Row_AvisoEncerramento';
	protected $_schema = 'sinistro';
	protected $_name = 'avisos_encerramento';
	protected $_view = 'v_processos';
	protected $_primary = 'id';
	public $_order = 'id_proposta';
	
	public function delete($idAvisoInicio) {
		$this->_db->query("update sinistro.avisos_encerramento set fl_del=true where id = $idAvisoInicio");
		$this->_db->query("update sinistro.avisos_encerramento_itens_segurados set fl_del=true where id_aviso_encerramento = $idAvisoInicio");
	}

	public function getData($where) {
		$Select = $this->select ()->setIntegrityCheck ( false );
		$Select->from ( array (
				"pr" => "sinistro.processos" 
		) );
		$Select->joinInner ( array (
				"p" => "seguro.propostas" 
		), "p.id = pr.id_proposta", array (
				"p.id_proposta_mae" 
		) );
		$Select->joinInner ( array (
				"pe" => "seguro.propostas_endosso" 
		), "pe.id_proposta = pr.id_proposta 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 as id_corretor" 
		) );
		$Select->where ( "p.id_status in (".Agro_Util::status ( "APOLICE_EMITIDA", "PR" ).", ".Agro_Util::status ( "APOLICE_CANCELADA", "PR" ). ")" );
		$Select->where ( "pr.id_status<>" . Agro_Util::getIdStatus ( "CANCELADO" ) );
		
		if ($this->_order) {
			$Select->order ( $this->_order );
		}
		
		$this->getWhere ( $Select, $where );

		return $Select;
	}
	
	public function getItensSeguradosAvisosEncerramento($idProcesso, $idProposta) {

		$data = array ();
		if ($idProcesso && $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
					inner join sinistro.processos p on
						p.id_proposta = it.id_proposta
				where
					p.id = $idProcesso and
					it.id not in (
							select
								aeis.id_item_segurado
							from
								sinistro.avisos_encerramento ae
								inner join sinistro.avisos_encerramento_itens_segurados aeis on	aeis.id_aviso_encerramento = ae.id
							where
								ae.id_proposta = $idProposta
								and ae.fl_del = false
					)
					and p.id_status != 168 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 existeAvisoParaProposta($idProposta) {
		$Rs = $this->fetchRow ( "id_proposta = $idProposta" );
		return ($Rs ? 1 : 0);
	}

    public function getDataViewAvisoEncerramento($idAvisoEncerramento)
    {
        $data = array();

        $camposAviso = [
          'ae.id',
          "to_char(ae.dt_encerramento_colheita, 'DD/MM/YYYY') as dt_encerramento_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(['ae' => $this->_schema . '.' . $this->_name], $camposAviso);
        $select->where("ae.id = ?", $idAvisoEncerramento);

        $data = $this->fetchRow($select)->toArray();

        $selectProcesso = "
        SELECT proc.id AS id_processo
          FROM (SELECT id_proposta_mae
                  FROM {$this->_schema}.{$this->_name} AS ae
                       INNER JOIN seguro.propostas ON seguro.propostas.id = ae.id_proposta
                 WHERE ae.id = {$idAvisoEncerramento}) 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(['aeis' => 'sinistro.avisos_encerramento_itens_segurados'], "id");
        $select->join(['it' => 'seguro.itens_segurados'], 'it.id = aeis.id_item_segurado', array(
          "it.id as id_item_segurado",
          'nr_item_segurado',
          'ds_item_segurado',
          'vl_area'
        ));
        $select->join(['v' => 'produto.variedades'], 'v.id = it.id_variedade', 'ds_nome_variedade');
        $select->where("aeis.id_aviso_encerramento = ?", $idAvisoEncerramento);
        $select->order("it.nr_item_segurado");

        $data ['arItensSegurados'] = $this->fetchAll($select)->toArray();

        return $data;
    }
	
	public function getAvisosEncerramentoByProposta($idProposta, bool $buscarRegistrosDeletados = false) {
        $camposAviso = [
          "ae.id",
          "to_char(ae.dt_encerramento_colheita, 'DD/MM/YYYY') as dt_encerramento_colheita",
          "to_char(ae.dt_criacao,'DD/MM/YYYY HH24:MI') as dt_envio",
          "id_status",
		  "ae.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(['ae' => $this->_schema.'.'.$this->_name], 'ae.id_proposta = prop2.id', $camposAviso);
        $select->join(['usu' => 'sistema.usuarios'], 'usu.id = ae.id_usuario_criacao', $campoUsuario);
        $select->where('prop.id = ?', $idProposta);

		if (!$buscarRegistrosDeletados) {
			$select->where('ae.fl_del is false');
		}
		
		return $this->fetchAll($select)->toArray ();
	}
	
	public function getDataEncerramentoItensSegurados($idProposta) {
		$select = $this->select ();
		$select->setIntegrityCheck ( false );
		$select->from ( array ('ae' => 'sinistro.avisos_encerramento'), 'dt_encerramento_colheita' );
		$select->join ( array ('aeit' => 'sinistro.avisos_encerramento_itens_segurados'), 'ae.id = aeit.id_aviso_encerramento' );
		$select->where ( "ae.id_proposta = ?", $idProposta );
		
		return $this->fetchRow ( $select );
	}
	
	public function existemQuadrasParaEncerrar($id_proposta) {
		$select = "
			select
			    count(aeis.id_aviso_encerramento) as count_itens_encerrados
			from
				sinistro.avisos_encerramento ae
				inner join sinistro.avisos_encerramento_itens_segurados aeis on ae.id = aeis.id_aviso_encerramento
			where
			    ae.id_proposta in (".$id_proposta.")
			    and ae.fl_del = false
		";
		$dataAvisos = $this->_db->fetchRow ($select);
		
		$select = "select count(id) as count_itens from seguro.itens_segurados where id_proposta in (".$id_proposta.") and vl_lmga > 0";
		$dataItens = $this->_db->fetchRow ($select);		

		return ($dataAvisos['count_itens_encerrados'] != $dataItens['count_itens'] ? true : false);
	}
}
