<?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.
 * 
 * 
 *
 *
 *
 *
 *
 **/

include("GnutecaWebServices.class.php");

class gnuteca3WebServicesMaterial extends GWebServices
{
    /**
     * Attributes
     */
    public $busSearchFormat;
    public $busMaterial;



    /**
     * Contructor method
     */
    public function __construct()
    {
        parent::__construct();

        $this->busSearchFormat = $this->MIOLO->getBusiness($this->module, 'BusSearchFormat');
        $this->busMaterial = $this->MIOLO->getBusiness($this->module, 'BusMaterial');
    }
    
    /**
     * Obtem uma string formatada com a informacao do material 
     *
     * @param (int) $clientId
     * @param (String) $clientPassword base64 encoded
     * @param (int) $controlNumber
     * @param (int) $searchFormatId
     * @param (String) $returnType
     * @param (String) $returnAsObject Se for para retornar em array com o conteudo do formato de pesquisa e o ano (260.c) em outra posicao do mesmo array
     * 
     * @return (mixed) $content
     */
    public function getMaterialInformation($clientId, $clientPassword, $controlNumber, $searchFormatId = null, $returnType = null, $returnAsObject = false)
    {
        // CHECA ACESSO AO METHODO
        parent::__setClient($clientId, $clientPassword);
        if(!parent::__checkMethod('getMaterialInformation', false))
        {
            return parent::__getErrorStr();
        }
        
        //Busca o formato padrao de retorno, caso nao seja passado
        if (!$searchFormatId && (WEB_SERVICE_MATERIAL_DEFAULT_SEARCH_FORMAT_ID != 'WEB_SERVICE_MATERIAL_DEFAULT_SEARCH_FORMAT_ID'))
        {
            $searchFormatId = (int) WEB_SERVICE_MATERIAL_DEFAULT_SEARCH_FORMAT_ID;
        }

        $content = $this->busSearchFormat->getFormatedString($controlNumber, $searchFormatId, 'search', $returnAsObject);

        return $this->returnType($content, $returnType);
    }
    
    /**
     * Obtém informações da obra a partir do(s) número(s) de controle.
     * 
     * @param string $clientId
     * @param string $clientPassword com base64_encode
     * @param array $controlNumber array simples
     * @return array de array com stdClass dentro
     */
    public function getExemplarFromWork( $clientId, $clientPassword, $controlNumber)
    {
        parent::__setClient($clientId, $clientPassword);
        
        if(!parent::__checkMethod('getMaterialInformation', false))
        {
            return parent::__getErrorStr();
        }

         $busMaterial = $this->MIOLO->getBusiness($this->module, 'BusMaterial');
        

        if ( !is_array($controlNumber ) )
        {
            $controlNumber = array( $controlNumber );
        }
        
        $search = array();
        foreach ( $controlNumber as $line => $number )
        {
            $search[] = intval($number);
        }

        return $busMaterial->getMaterialFromControlNumbers($search);
    }
    
    /**
     * Obtém numeros de controle semelhantes a classificacao do numero de controle
     * passado por parametro.
     * 
     * @param string $clientId
     * @param string $clientPassword com base64_encode
     * @param array $controlNumber array simples
     * @return array de array com stdClass dentro
     */
    public function getSimilarControlnumberFromWork( $clientId, $clientPassword, $controlNumber)
    {
        parent::__setClient($clientId, $clientPassword);
        
        if(!parent::__checkMethod('getMaterialInformation', false))
        {
            return parent::__getErrorStr();
        }

         $busMaterial = $this->MIOLO->getBusiness($this->module, 'BusMaterial');
        

        if ( !is_array($controlNumber ) )
        {
            $controlNumber = array( $controlNumber );
        }
        
        $search = array();
        foreach ( $controlNumber as $line => $number )
        {
            $search[] = intval($number);
        }

        return $busMaterial->getSimilarControlNumber($search);
    }

    public function getMaterialsAndExemplariesInformation($clientId, $clientPassword, $controlNumbers, $personIds=NULL, $beginDate=NULL, $endDate=NULL)
    {
        parent::__setClient($clientId, $clientPassword);
        
        if(!parent::__checkMethod('getMaterialsAndExemplariesInformation', false))
        {
            return parent::__getErrorStr();
        }
        
        $materialInformation = $this->busMaterial->getMaterialInformation($controlNumbers, $personIds, $beginDate, $endDate);
        
        return $materialInformation;
    }
}
?>
