<?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.
 * 
 * 
 *
 * Library Unit search form
 *
 *
 *
 *
 *
 **/

class FrmReserveSearch extends GForm
{
    public $MIOLO;
    public $module;
    public $busRS;
    public $busReserveComposition;
    public $busRT;
    public $busLU;


    public function __construct()
    {
        $this->MIOLO        = MIOLO::getInstance();
        $this->module       = MIOLO::getCurrentModule();
        $this->busRS        = $this->MIOLO->getBusiness($this->module, 'BusReserveStatus');
        $this->busReserveComposition = $this->MIOLO->getBusiness($this->module, 'BusReserveComposition');
        $this->busRT        = $this->MIOLO->getBusiness($this->module, 'BusReserveType');
        $this->busLU        = $this->MIOLO->getBusiness($this->module, 'BusLibraryUnit');
        $this->setAllFunctions('Reserve', array('libraryUnitIdS'), array('reserveId'));

        parent::__construct();
    }


    public function mainFields()
    {
        $fields[] = new MIntegerField('reserveIdS', null, _M('Código', $this->module), FIELD_ID_SIZE);
        $fields[] = new GPersonLookup('personIdS', _M('Pessoa', $this->modules), 'person');

        $fields[] = new MHiddenField('requestedDateS');
        $beginRequestedDateS = new MTimestampField('beginRequestedDateS', null, 'Data/Hora da solicitação');
        $endRequestedDateS = new MTimestampField('endRequestedDateS', null);
        $fields[] = new GContainer('hctRequestedDate', array($beginRequestedDateS, $endRequestedDateS));
        $validators[] = new MDateDMYValidator('requestedDateS_DATE', _M('Data da solicitação', $this->module) . ' (' . _M('Data', $this->module) . ')');
        $fields[] = new MTextField('itemNumberS', null, _M('Número do exemplar', $this->module), FIELD_ID_SIZE);

        $this->busLU->filterOperator = TRUE;
        $this->busLU->labelAllLibrary = TRUE;
        $fields[] = new GSelection('libraryUnitIdS',   $this->libraryUnitId->value, _M('Unidade de biblioteca', $this->module), $this->busLU->listLibraryUnit(), null, null, null, TRUE);

        $lblDate             = new MLabel(_M('Data limite', $this->module) . ':');
        $lblDate->setWidth(FIELD_LABEL_SIZE);
        $beginLimitDateS     = new MCalendarField('beginLimitDateS', $this->beginLimitDateS->value, null, FIELD_DATE_SIZE);
        $endLimitDateS       = new MCalendarField('endLimitDateS', $this->endLimitDateS->value, null, FIELD_DATE_SIZE);
        $fields[] = new GContainer('hctDates', array($lblDate, $beginLimitDateS, $endLimitDateS));
        $validators[] = new MDateDMYValidator('beginLimitDateS');

        $fields[] = new GSelection('reserveStatusIdS', null, _M('Estado da reserva', $this->module), $this->busRS->listReserveStatus());
        $fields[] = new GSelection('reserveTypeIdS', null, _M('Tipo de reserva', $this->module), $this->busRT->listReserveType());

        $this->setFields( $fields );
        $this->setValidators( $validators );
    }


    /**
     * Mostra o histórico da reserva
     */
    public function showDetail()
    {
        $MIOLO = MIOLO::getInstance();
        $module = MIOLO::getCurrentModule();

        $busReserveHistory = $MIOLO->getBusiness($module, 'BusReserveStatusHistory');
        $busReserveHistory->reserveId = MIOLO::_REQUEST('reserveId');

        $search = $busReserveHistory->searchReserveStatusHistory();

        $tbColumns = array(
                _M('Estado', $this->module),
                _M('Data', $this->module),
                _M('Operador', $this->module)
        );
        
        $tb = new MTableRaw('', $search, $tbColumns);
        $tb->zebra = TRUE;

        $this->injectContent( $tb, true, _M('Histórico', $this->module) . ' '. _M('Código da reserva', $this->module) . ': '. MIOLO::_REQUEST('reserveId') );
    }

    /**
     * Mostra a composição da reserva, ação chamada pela grid
     */
    public function showReserveComposition()
    {
    	$reserveId = MIOLO::_REQUEST('reserveId');

    	//Search data...
    	$this->busReserveComposition->reserveIdS = $reserveId;
    	$data = $this->busReserveComposition->searchReserveComposition(TRUE);

    	if ($data)
    	{
            $cols = array(
               _M('Número do exemplar', $this->module),
               _M('Está confirmado', $this->module)
            );

            $tbData = array();

            foreach ($data as $v)
            {
            	$tbData[] = array( $v->itemNumber, GUtil::getYesNo($v->isConfirmed));
            }
            
            $tb = new MTableRaw(null, $tbData, $cols);
            $tb->setAlternate(true);
    	}
        else
        {
            $tb = new MLabel(_M('Nenhuma composição para o código de reserva: @1', $this->module, $reserveId));
        }

        $this->injectContent($tb, true, _M('Composição da reserva ', $this->module) . $reserveId );
    }
    
    
    /**
     * Mostra mensagem de verificacao se o usuario realmente quer desatender a
     * reserva.
     */
    public function btnNeglectReserve()
    {
        $reserveId = MIOLO::_REQUEST('reserveId');
        $msg = _M('Você deseja mesmo desatender a reserva @1?','gnuteca3',$reserveId);    

        
        $this->question($msg, GUtil::getAjax('neglectReserve', array('reserveId'=>$reserveId)));
    }
    
    /**
     * Desatende a reserva e mostra a mensagem de finalizaçao.
     */
    public function neglectReserve()
    {
        $reserveId = MIOLO::_REQUEST('reserveId');
        $busReserve = $this->MIOLO->getBusiness($this->module, 'BusReserve');
        $busReserve->neglectReserve($reserveId);
        $js = 'javascript:'. GUtil::getCloseAction() . "; dojo.byId('reserveStatusIdS').value='" . ID_RESERVESTATUS_REQUESTED . "' ; " . GUtil::getAjax('searchFunction',array('reserveIdS'=>$reserveId));

        GForm::information(_M('Reserva @1 desatendida com sucesso!',$this->module,$reserveId), $js);
    }
}
?>