<?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.
 *
 *
 * Classe para Cadastro de Equipamento SIP
 *
 *
 *
 *
 * 
 **/

class FrmSipEquipament extends GForm
{
    public $busLibraryUnit;
    public $busLocationForMaterialMovement;
        
    public function __construct()
    {
        $MIOLO = MIOLO::getInstance();
        $module = MIOLO::getCurrentModule();
        
        //Instancia os atributos com o objeto Bus$Parametro respectivamente
        $this->busLibraryUnit = $MIOLO->getBusiness($module, 'BusLibraryUnit');
        $this->busLocationForMaterialMovement = $MIOLO->getBusiness($module, 'BusLocationForMaterialMovement');
        
        $this->setAllFunctions('SipEquipament', array('sipEquipamentId'), array('sipEquipamentId'), array('sipEquipamentId'));
        
        parent::__construct();
    }

    /*
     * Criado por Tcharles Silva
     * Em: 13/11/2013
     * Ultima atualização: 18/11/2013
     * Motivo:
     *      Implementar as opções de Bin.
     */
    public function mainFields()
    {
        // Descrição.
        $fields[] = new MTextField('description', $this->description->value, _M('Descrição',$this->module), FIELD_DESCRIPTION_SIZE);        

        //Campo de Usuario
        $fields[] = $fieldId = new MTextField('sipEquipamentId', $this->sipEquipamentId->value, _M('Usuário',$this->module));
        
        if ( $this->function == 'update' )
        {
            $fieldId->setReadOnly(true);
        }
        
        //Campo de senha
        $fields[] = new MPasswordField('password', $this->password->value, _M('Senha',$this->module));
        
        
        //Unidades de Biblioteca
        $this->busLibraryUnit->filterOperator = TRUE;
        $this->busLibraryUnit->labelAllLibrary = TRUE;
        $fields[] = $libraryUnitId  = new GSelection('libraryUnitId',
                                                     $this->busLibraryUnit->value, 
                                                     _M('Unidade de biblioteca', 
                                                     $this->module), 
                                                     $this->busLibraryUnit->listLibraryUnit(), 
                                                     null, null, null, true);
        
        /*
         * Inicio dos Radio Buttons
         * Abaixo adicionamos o componente, logo após,
         * setamos o campo GRadioButtonGroup como requerido.
         */
        //Campo se permite Realizar Empréstimo
        $fields[] = $radio = new GRadioButtonGroup('makeLoan', _M('Realiza empréstimo', $this->module), GUtil::listYesNo(1), DB_FALSE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Campo se permite Realizar Devolução
        $fields[] = $radio = new GRadioButtonGroup('makeReturn', _M('Realiza devolução', $this->module) , GUtil::listYesNo(1), DB_FALSE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Campo se permite Realizar Renovação
        $fields[] = $radio = new GRadioButtonGroup('makeRenew', _M('Realiza renovação', $this->module) , GUtil::listYesNo(1), DB_FALSE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Campo se permite negar o cartão do usuário
        $fields[] = $radio = new GRadioButtonGroup('denyUserCard', _M('Bloqueia cartão de usuário', $this->module) , GUtil::listYesNo(1), DB_FALSE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Campo se permite trabalhar em modo offline
        $fields[] = $radio = new GRadioButtonGroup('offlineMode', _M('Trabalha em modo off-line', $this->module) , GUtil::listYesNo(1), DB_FALSE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Campo se permite equipamento logar sem senha
        $fields[] = $radio = new GRadioButtonGroup('requiredpassword', _M('Autentica usuário apenas com senha', $this->module) , GUtil::listYesNo(1), DB_TRUE );
        $controls = $radio->getControls();
        $controls[0]->setClass('mCaptionRequired');
        
        //Fim dos Radio Buttons
        
        //Campo de Periodo de tempo
        $fields[] = new MIntegerField('timeOutPeriod', $this->timeOutPeriod->value, _M('Tempo de tentativa de conexão',$this->module));
        
        //Campo de Permitir tentativas
        $fields[] = new MIntegerField('retriesAllow', NULL, _M('Numero de tentativas',$this->module));
        
        //Local da circulação de material
        $fields[] = new GSelection('locationformaterialmovementid',
                                                     $this->busLocationForMaterialMovement->value,
                                                     _M('Local da circulação de material',
                                                     $this->module),
                                                     $this->busLocationForMaterialMovement->listLocationForMaterialMovement(),
                                                     null, null, null, true);
        
        //Campo de Bin
        $fields[] = new MIntegerField('binDefault', $this->sipEquipamentId->value, _M('Bin Padrão',$this->module));
        
        //Campo para Mensagem da tela
        $fields[] = new MMultiLineField('screenMessage', $this->screenMensage->value, _M('Mensagem em tela',$this->module), 20, 5, 40);
        
        //Campo para Mensagem impressa
        $fields[] = new MMultiLineField('printMessage', $this->printMessage->value, _M('Mensagem impressa',$this->module), 20, 5, 40);
        
        // Campo SQL para definição de bins.
        $fields[] = new MMultiLineField('sqlBinRule', NULL, _M('Regras para Bin (regra em SQL)',$this->module), 20, 5, 40, _M("É necessário adicionar uma expressão SQL que retorne o número do bin. Parâmetro padrão <b>\$itemNumber<b>.", 'gnuteca3') );
        
        
        /* Campos para validação do patronInfo
         * Utilizado para restringir acessos aos terminais, mediante cadastrado por aqui
         * 
         * Por padrão, os campos estão desabilitados, ou seja, sempre irá verificar.
         */
        
        $campos[] = $radio = new GRadioButtonGroup('psLoanlimit', _M('Exceder limite de empréstimos', $this->module),
                                                   GUtil::listYesNo(1), DB_FALSE );
        
        $campos[] = $radio = new GRadioButtonGroup('psOverduelimit', _M('Exceder limite de atrasos', $this->module),
                                                   GUtil::listYesNo(1), DB_FALSE );
        
        $campos[] = $radio = new GRadioButtonGroup('psPenaltylimit', _M('Exceder limite de penalidades', $this->module),
                                                   GUtil::listYesNo(1), DB_FALSE );
        
        $campos[] = $radio = new GRadioButtonGroup('psFinelimit', _M('Exceder limite de multas', $this->module),
                                                   GUtil::listYesNo(1), DB_FALSE );
        
        $fields[] = new MBaseGroup('patroninfo', 'Permitir acesso ao terminal se:', $campos);
        
        //<----- Fim dos campos ------->
        
        //Inicio dos validatores
        $validators[] = new MRequiredValidator('sipEquipamentId');//, _M('Usuário', $this->module), 'required');
        $validators[] = new MRequiredValidator('description');
        $validators[] = new MRequiredValidator('makeLoan');
        $validators[] = new MRequiredValidator('makeReturn');
        $validators[] = new MRequiredValidator('makeRenew');
        $validators[] = new MRequiredValidator('denyUserCard');
        $validators[] = new MRequiredValidator('offlineMode');
        $validators[] = new MRequiredValidator('timeOutPeriod');
        $validators[] = new MRequiredValidator('retriesAllow');
        $validators[] = new MRequiredValidator('locationformaterialmovementid');
        $validators[] = new MRequiredValidator('binDefault');
        //Fim dos validatores

        $this->setFields($fields);
        $this->setValidators($validators);
    }
    
    /**
     * Method chamado quando o botão save é clicado.
     *
     * @param null $sender
     * @param object $data
     * @param array $errors
     * @param miolo business object $business
     * @param nusiness method $method
     * @return booleans
     */
    public function tbBtnSave_click($sender = NULL, $data = NULL, array $errors = NULL, $business = null, $method = null)
    {
        $data = $data = !is_null($data) ? $data : $this->getData();

        if ( !$this->business->verifySql($data->sqlBinRule) )
        {
            throw new Exception( _M('O SQL de definição de bin não é uma consulta válida.','gnuteca3') );
            return;
        }
        else
        {
            parent::tbBtnSave_click();
        }
    }
}
?>