<?php
/**
 * Copyright 2005-2017 de Solis Soluções Livres Ltda.
 *
 * Este arquivo é parte do programa Gnuteca.
 *
 * O Gnuteca é um software de propriedade da SOLIS, sendo desenvolvido
 * e mantido exclusivamente por esta empresa.
 *
 * A licença de uso está disponível mediante aquisição exclusiva junto à
 * SOLIS. A licença é concedida sem caráter de exclusividade ao licenciado.
 * Os direitos de uso são perpétuos.
 *
 * Embora os códigos fontes sejam fornecidos, o software é de propriedade
 * da SOLIS, não sendo permitido ao adquirente da licença a sua revenda,
 * empréstimo ou cessão (onerosa ou não) à terceiros. Também não é permitido,
 * a qualquer título e tempo, promover no software qualquer tipo de alienação,
 * reprodução, distribuição, divulgação, registro, licenciamento, transferência
 * ou qualquer outro ato que prejudique ou comprometa os direitos de propriedade
 * de software, o nome e a imagem da sua proprietária e do próprio software,
 * além de configurar concorrência à SOLIS.
 *
 * O licenciado, com o acesso ao código fonte do software, terá o direito de
 * promover mudanças no respectivo código. No entanto, nas situações em que ele
 * contar com o suporte oficial prestado pela SOLIS, não poderá promover mudanças
 * no código fonte, sob pena de perda do referido suporte.
 *
 * Para conhecer em detalhes o Termo de Licenciamento do Software Gnuteca
 * leia o arquivo “LICENCA.txt” disponível junto ao código deste software.
 * 
 * 
 * Business da verificação de inventário
 *
 *
 *
 *
 *
 **/

class BusinessGnuteca3BusMapSearch extends GBusiness
{
    public $genero,
           $familia,
           $libraryUnitId,
           $uf,
           $municipio,
           $ordem,
           $mapa,
           $especie,
           $coletor,
           $inicioColeta,
           $fimColeta;
    
    public function searchMaterialLocation($controlNumbers = array())
    {
        $controlNumbers = implode(',', $controlNumbers);
        
        $this->clear();
        $this->setTables( "gtcmaterialcontrol controle
                    LEFT JOIN gtcexemplarycontrol exemplar ON (controle.controlnumber = exemplar.controlnumber)
                    LEFT JOIN gtcmaterial genero ON (controle.controlnumber = genero.controlnumber AND genero.fieldid = '900' AND genero.subfieldid = '8')
                    LEFT JOIN gtcmaterial familia_value ON (controle.controlnumber = familia_value.controlnumber AND familia_value.fieldid = '900' AND familia_value.subfieldid = '6')
                    LEFT JOIN gtcmarctaglistingoption familia ON (familia.marctaglistingid = '900.6' AND familia.option = familia_value.content   )
                    LEFT JOIN gtcmaterial ordem_value ON (controle.controlnumber = ordem_value.controlnumber AND ordem_value.fieldid = '900' AND ordem_value.subfieldid = '5')
                    LEFT JOIN gtcmarctaglistingoption ordem ON (ordem.marctaglistingid = '900.5' AND ordem.option = ordem_value.content   )
                    LEFT JOIN gtcmaterial mapa ON (controle.controlnumber = mapa.controlnumber AND mapa.fieldid = '999' AND mapa.subfieldid = 'a')
                    LEFT JOIN gtcmaterial estado ON (controle.controlnumber = estado.controlnumber AND estado.fieldid = '900' AND estado.subfieldid = 'j')
                    LEFT JOIN gtcmaterial municipio ON (controle.controlnumber = municipio.controlnumber AND municipio.fieldid = '900' AND municipio.subfieldid = 'k')
                    LEFT JOIN gtcmaterial especie ON (controle.controlnumber = especie.controlnumber AND especie.fieldid = '900' AND especie.subfieldid = 'b')
                    LEFT JOIN gtcmaterial coletor ON (controle.controlnumber = coletor.controlnumber AND coletor.fieldid = '900' AND coletor.subfieldid = '7')
                    LEFT JOIN gtcmaterial data_coleta ON (controle.controlnumber = data_coleta.controlnumber AND data_coleta.fieldid = '900' AND data_coleta.subfieldid = 'u')
               ");
        $this->setColumns('controle.controlnumber, 
                           exemplar.itemnumber, 
                           genero.content as genero, 
                           familia.description familia, 
                           mapa.content as mapa, 
                           ordem.description as ordem, 
                           especie.content as especie, 
                           coletor.content as coletor, 
                           data_coleta.content::date as data_coleta,
                           municipio.content as municipio,
                           estado.content as estado');

        $data = array();
        if ( !empty($this->libraryUnitId) )
        {
            $this->setWhere('exemplar.libraryUnitid = ?');
            $data[] = $this->libraryUnitId;
        }
        
        if ( !empty($this->uf) )
        {
            $this->setWhere('estado.content ILIKE ?');
            $data[] = '%' . $this->uf . '%';
        }
        
        if ( !empty($this->municipio) )
        {
            $this->setWhere('municipio.content ILIKE ?');
            $data[] = '%' . $this->municipio . '%';
        }
        
        if ( !empty($this->genero) )
        {
            $this->setWhere('genero.content ILIKE ?');
            $data[] = '%' . $this->genero . '%';
        }
        
        if ( !empty($this->familia) )
        {
            $this->setWhere('familia_value.content = ?');
            $data[] = $this->familia;
        }
        
        if ( !empty($this->ordem) )
        {
            $this->setWhere('ordem_value.content = ?');
            $data[] = $this->ordem;
        }
        
        if ( !empty($this->especie) )
        {
            $this->setWhere('especie.content ILIKE ?');
            $data[] = '%' . $this->especie . '%';
        }
        
        if ( !empty($this->coletor) )
        {
            $this->setWhere('coletor.content ILIKE ?');
            $data[] = '%' . $this->coletor . '%';
        }
        if ( !empty($this->inicioColeta) && !empty($this->fimColeta) )
        {
            $this->setWhere('data_coleta.content::date BETWEEN ? AND ?');
            $data[] = $this->inicioColeta;
            $data[] = $this->fimColeta;
        }
        
        $this->setOrderBy('ordem.description, familia.description, genero.content');
        
        $sql = $this->select($data);

        return $this->query($sql);
    }
    
    public function getDistinctList($tag)
    {
        $tag = explode('.', $tag);
        
        $this->clear();
        $this->setTables("gtcmaterial");
        $this->setColumns('DISTINCT content, content');
        
        $this->setWhere('fieldid = ? AND subfieldid = ?');
        $data = array($tag[0], $tag[1]);
        
        $sql = $this->select($data);

        return $this->query($sql);
    }

}
?>
