<?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 gnuteca3WebServicesFinesWSDL
{

    private $webService;
    private $MIOLO;

    public function __construct()
    {
        $this->webService = new GWebServices();
        $this->MIOLO = MIOLO::getInstance();
    }

    /**
     * Webservice para listagem de Renovações utilizando parâmetros do histórico de multa
     * @param int $clientId
     * @param string $clientPassword
     * @param int $personId
     * @param int $libraryUnitId
     * @param string $itemNumber
     * @param double $value
     * @param int $fineStatusId
     * @param string $beginFineDate
     * @param string $endFineDate
     * @return bool|string
     */
    public function listFines(
        $clientId,
        $clientPassword,
        $personId,
        $libraryUnitId = null,
        $itemNumber= null,
        $value = null,
        $fineStatusId = null,
        $beginFineDate = null,
        $endFineDate = null
    ) {
        $retorno  = new stdClass();

        // Define acesso ao método e define a classe do Webservice
        $this->webService->__setClient($clientId, $clientPassword);
        $this->webService->setClassName(get_class($this));

        // Verifica se usuário possui acesso ao WebService.
        if (!$this->webService->__checkMethod("listFines", false)) 
        {
            $retorno->message = $this->webService->__getErrorStr();
            return json_encode($retorno);
        }

        $busFine = $this->MIOLO->getBusiness('gnuteca3', 'BusFine');
        $busFine->personId = $personId;
        $busFine->isFormSearch = TRUE;
        
        if ($libraryUnitId)
        {
            $busFine->libraryUnitIdS = $libraryUnitId;
        }
        
        if ($itemNumber) 
        {
            $busFine->itemNumberS = $itemNumber;
        }
        
        if ($value) 
        {
            $busFine->value = $value;
        }
        
        if ($fineStatusId) 
        {
            $busFine->fineStatusIdS = $fineStatusId;
        }
        
        if ($beginFineDate) 
        {
            $busFine->beginBeginDateS = $beginFineDate;
        }
        
        if ($endFineDate) 
        {
            $busFine->endBeginDateS = $endFineDate;
        }
        
        $fines = $busFine->searchFine(TRUE);
        $busRenew = $this->MIOLO->getBusiness('gnuteca3', 'BusRenew');

        foreach ($fines as $fine) 
        {
            $busFine->clear();
            $busFine->setColumns('searchformat, returnforecastdate, renewalamount, renewalwebamount');
            $busFine->setTables('gtcfine 
                                JOIN gtcloan USING (loanid)
                                JOIN gtcexemplarycontrol USING (itemnumber)
                                JOIN gtcmaterialsearchformat USING (controlnumber)');
            $busFine->setWhere("gtcloan.personid = '$fine->personId' AND gtcfine.loanid = $fine->loanId AND gtcmaterialsearchformat.searchformatid = 1");
            $sql = $busFine->select();
            $dadosMulta = $busFine->query($sql) ?: null;

            $quantidadeRenovacoes = $busRenew->getCountRenew($fine->loanId);
            
            $retorno->Multas[] = [
                "Número do exemplar"  => $fine->itemNumber,
                "Dados" => $dadosMulta[0][0],
                "Data prevista da devolução" => $dadosMulta[0][1],  
                "Renovações permitidas na biblioteca" => $dadosMulta[0][2], 
                "Renovações permitidas na Web" => $dadosMulta[0][3], 
                "Quantidade de reservas" => $quantidadeRenovacoes,
                "Unidade de biblioteca" => $fine->LibraryUnitId, 
            ];
        }
        return json_encode($retorno);
    }
}
