<?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.
 * 
 * 
 *
 * Fine form
 *
 *
 *
 *
 *
 **/
class FrmFine extends GForm
{
    public $MIOLO;
    public $module;
    public $function;
    public $busFineStatus;
    public $busLoan;


    public function __construct()
    {
        $this->MIOLO         = MIOLO::getInstance();
        $this->module        = MIOLO::getCurrentModule();
        $this->function      = MIOLO::_REQUEST('function');
        $this->busFineStatus = $this->MIOLO->getBusiness($this->module, 'BusFineStatus');
        $this->busLoan       = $this->MIOLO->getBusiness($this->module, 'BusLoan');
        $this->setAllFunctions('Fine', 'fineId', 'fineId', array('loanId', 'fineStatusId', 'reserveId'));
        parent::__construct();
    }


    public function mainFields()
    {
        if ($this->function != 'insert')
        {
            $fields[]       = new MTextField('fineId', $this->fineId->value, _M('Código', $this->module), FIELD_ID_SIZE,null, null, true);
            $validators[]   = new MIntegerValidator('fineId');
            $fields[]       = new MHiddenField('fineId', $this->fineId->value);
        }

        $loanIdLabel = new MLabel(_M('Código do empréstimo', $this->module) . ':');
        $loanId = new GLookupTextField('loanId', '', '', FIELD_LOOKUPFIELD_SIZE);
        $loanId->setContext($this->module, $this->module, 'Loan', 'filler', 'loanId,loanIdDescription', '', true);
        $loanId->baseModule = $this->module;
        $loanIdDescription = new MTextField('loanIdDescription', $this->loanIdDescription, NULL, FIELD_DESCRIPTION_LOOKUP_SIZE);
        $loanIdDescription->setReadOnly(true);
        $validators[]   = new MIntegerValidator('loanId', _M('Código do empréstimo', $this->module));
        $fields[]       = new GContainer('loanIdContainer', array($loanIdLabel, $loanId, $loanIdDescription));
        
        //lookup de reservas
        $controlsReserve[] = new MTextField('reserveIdDescription', null, NULL, FIELD_DESCRIPTION_LOOKUP_SIZE,null,null, true);
        $validators[]   = new MIntegerValidator('reserveId', _M('Código do empréstimo', $this->module));
        $fields[] = new GLookupField('reserveId', null, _M('Código da reserva', $this->module) , 'Reserve', $controlsReserve);

        $beginDate      = new MCalendarField('beginDate', $this->beginDate->value, _M('Data inicial', $this->module), FIELD_DATE_SIZE, null);
        $validators[]   = new MDateDMYValidator('beginDate');
        $validators[]   = new MRequiredValidator('beginDate');
        $fields[]       = $beginDate;

        $lblValue       = new MLabel(_M('Valor', $this->module) . ':');
        $fields[]       = new MFloatField('value', $this->value->value, _M('Valor', $this->module), FIELD_ID_SIZE);
        $validators[]   = new MRequiredValidator('value');

        $fields[]       = new MHiddenField('fineStatusIdCurrent');
        $fineStatusId   = new GSelection('fineStatusId', $this->fineStatusId->value, _M('Estado da multa', $this->module), $this->busFineStatus->listFineStatus());
        $date = GDate::now()->getDate(GDate::MASK_DATE_USER);
        $fineStatusId->addAttribute("onchange", "currentStatus = document.getElementById('fineStatusIdCurrent').value;
                                                 dijit.byId( 'endDate' ).attr( 'displayedValue', '{$date}' );
                                                 gnuteca.setDisplay('observationHistoric', true, this.value != currentStatus ? 'block' : 'none' );"
                                                    );
        $fields[]       = $fineStatusId;
        $validators[]   = new MRequiredValidator('fineStatusId');
        $fields[]       = new MSeparator();

        //gtcFineStatusHistory
        $fields[]= $observationHistoric = new MMultiLIneField ('observationHistoric', NULL, _M('Observação para troca de estado', $this->module), NULL, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);
        //esconde campo com a label
        $this->page->onload("gnuteca.setDisplay('observationHistoric', true, 'none');");

        $endDate      = new GContainer('contEndDate', array(new MLabel(_M('Data final', $this->module)), new MCalendarField('endDate', $this->endDate->value, null, FIELD_DATE_SIZE, null)));
        $validators[] = new MDateDMYValidator('endDate');
        $fields[]     = $endDate;
        $fields[] = new MMultiLineField('observation', null, _M('Observação', $this->module), NULL, FIELD_MULTILINE_ROWS_SIZE, FIELD_MULTILINE_COLS_SIZE);

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

        if ($this->function == 'update')
        {
            $this->_toolBar->addRelation(_M('Histórico'), GUtil::getImageTheme('info-16x16.png'), 'javascript:'.Gutil::getAjax('showDetail'));
        }
    }


    public function loadFields()
    {
        $data = $this->business->getFine( MIOLO::_REQUEST('fineId') );
        $data->fineStatusIdCurrent = $data->fineStatusId;
        if ( strlen($data->beginDate) > 0)
        {
        	$date = new GDate($data->beginDate);
        	$data->beginDate = $date->getDate(GDate::MASK_DATE_USER);
        }
        
        if ( strlen($data->endDate) > 0)
        {
            $date = new GDate($data->endDate);
            $data->endDate = $date->getDate(GDate::MASK_DATE_USER);
        }
        $this->setData($data);
    }


    public function tbBtnSave_click($sender)
    {
        $MIOLO = MIOLO::getInstance();
        $busReserve = $MIOLO->getBusiness($this->module, 'BusReserve');
        if ( strlen($sender->reserveId) > 0 && strlen($sender->loanId) > 0 )
        {
            $errors[] = _M("Não é permitido vincular um empréstimo e uma reserva para a multa.", $this->module);
        }
        else if ( strlen($sender->reserveId) <= 0 && strlen($sender->loanId) <= 0 )
        {
            $errors[] = _M("Você deve informar um empréstimo ou uma reserva.", $this->module);
        }
        else
        {
            if ( strlen($sender->loanId) > 0 && !$this->busLoan->checkAccessLoan($sender->loanId) )
            {
                $errors[] = _M("Você não tem acesso à este empréstimo.", $this->module);
            }
        }

        $data = $this->getData();
    	parent::tbBtnSave_click($sender, $data, $errors);
    }
    
    
    /**
     * Método ajax para setar a data final
     * 
     * @param $args
     */
    public function setEndDate($args)
    {
    	if ( $args->fineStatusId != $this->busFineStatus->getFineStatusOpen() )
    	{
            $date = GDate::now()->getDate(GDate::MASK_DATE_USER);
            $this->page->onload("dijit.byId( 'endDate' ).attr( 'displayedValue', '{$date}' );");
    	}

        $this->setResponse(null, 'limbo');
    }

    public function showDetail()
    {
        $this->MIOLO->uses( "/forms/FrmFineSearch.class.php", 'gnuteca3');
        FrmFineSearch::showDetail();
    }
}
?>
