<?

class Comercializacao_Model_ComercializacoesEstados extends Agro_Db_Table_Abstract {
    protected $_schema = 'comercializacao';
    protected $_name = 'comercializacoes_estados';
    protected $_primary = 'id_comercializacao';
    public $tp_comercializacao = Comercializacao_Model_Comercializacoes::TIPO_ESTADO;
    public $_columnExcel = array(
      'id' => 'Cód',
      'ds_nome_comercializacao' => 'Nome',
      'ds_nome_safra' => 'Safra',
      'ds_nome_produto' => 'Produto',
      'dt_comercializacao_inicio' => 'Início Comercialização',
      'dt_comercializacao_fim' => 'Fim Comercialização',
      'dt_cobertura_inicio' => 'Inicio Vigência',
      'dt_cobertura_fim' => 'Fim Vigência',
      'ufs' => 'UF',
    );

	public function getCheckEstados($idComercializacao, $idProduto) {
		$sql ="
			select	e.id,e.ds_nome_estado,'' as checked,
				(
				select	cast('disabled' as text) as t
				from comercializacao.comercializacoes c inner join comercializacao.comercializacoes_estados ce on c.id = ce.id_comercializacao
				where ce.id_estado = e.id and ce.id_comercializacao != $idComercializacao and
				c.id_produto = $idProduto and ce.fl_ativo = true and c.fl_ativo = true limit 1
				) as disabled
			from sistema.estados e
			where id not in (
							select id_estado
							from comercializacao.comercializacoes c inner join
							comercializacao.comercializacoes_estados ce on c.id = ce.id_comercializacao
							where id_produto = $idProduto and c.id = $idComercializacao
							) and e.fl_ativo = true
			union select e.id,e.ds_nome_estado,	'checked' as checked,'' as disabled
			from comercializacao.comercializacoes c inner join
			comercializacao.comercializacoes_estados ce on c.id = ce.id_comercializacao inner join
			sistema.estados e on e.id = ce.id_estado
			where c.id = $idComercializacao
		";		

		return $this->_db->fetchAll($sql);
	}

    public function getData($where=null) {
        $Select = $this->select()->setIntegrityCheck(false);
        $Select->from(array('c' => 'comercializacao.comercializacoes'));
        $Select->join(array('p' => 'produto.produtos'), 'c.id_produto = p.id', array('ds_nome_produto'));
        $Select->join(array('s' => 'produto.safras'), 'p.id_safra = s.id', array('ds_nome_safra'));

        if (is_array($where)) {
            foreach ($where as $clause) {
                if ($clause['field'] == 'tp_comercializacao' && $clause['value'] === Comercializacao_Model_Comercializacoes::TIPO_ESTADO) {
                    $Select->joinLeft(array('ce' => 'comercializacao.comercializacoes_estados'), 'ce.id_comercializacao = c.id', false);
                    $Select->joinLeft(array('est' => 'sistema.estados'), 'est.id = ce.id_estado', ["string_agg(ds_sigla, ', ') as ufs"]);
                    $Select->group(['c.id_usuario_criacao', 'c.id_usuario_alteracao', 'c.dt_criacao', 'c.dt_alteracao', 'c.fl_ativo', 'c.fl_del', 'c.id', 'p.ds_nome_produto', 's.ds_nome_safra']);
                }
            }
        }

        $this->getWhere($Select, $where);

        return $Select;
    }

    public function getEstadosByComercializacao(int $idComercializacao)
    {
        $select = $this->select()->setIntegrityCheck(false);
        $select->from(['ce' => "{$this->_schema}.{$this->_name}"], false);
        $select->join(['e' => 'sistema.estados'], 'e.id = ce.id_estado', ['ds_nome_estado']);
        $select->where("ce.id_comercializacao = ?", $idComercializacao);
        $select->order('e.ds_nome_estado');

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