<?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.
*
*
*
* This file handles the connection and actions for gtcLibraryUnit table
*
*
*
*
*
**/
class BusinessGnuteca3BusWorkflowStatus extends GBusiness
{
    public $MIOLO;
    public $module;

    public $workflowStatusId;
    public $workflowId;
    public $__name;
    public $initial;
    public $__transaction;

    public $name;
    public $transaction;

    public $workflowStatusIdS;
    public $workflowIdS;
    public $__nameS;
    public $initialS;
    public $__transactionS;
    
    public $busOperatorGroup;

    
    function __construct()
    {
        parent::__construct();
        $this->MIOLO = MIOLO::getInstance();
        $this->module = MIOLO::getCurrentModule();
        $this->busOperatorGroup = $this->MIOLO->getBusiness( $this->module, 'BusOperatorGroup');
        $this->tables = 'gtcWorkflowStatus';
        $this->id = 'workflowStatusId';
        $this->columnsNoId = 'workflowId,name,initial,transaction';
        $this->columns = $this->id .','.$this->columnsNoId;
    }

    public function insertWorkflowStatus()
    {
        return $this->autoInsert();
    }

    public function updateWorkflowStatus()
    {
        return $this->autoUpdate();
    }

    public function deleteWorkflowStatus($workflowStatusId)
    {
        return $this->autoDelete($workflowStatusId);
    }

    public function searchWorkflowStatus($toObject = false)
    {
        $this->clear();
        
        $this->name = $this->__nameS; //o function tem underline em função de function ser uma variável do form
        $this->transaction = $this->__transactionS; //o function tem underline em função de function ser uma variável do form

        $filters = array ('workflowStatusId' => 'equals',
                          'workflowId' => 'equals',
                          'name' => 'ilike',
                          'initial' => 'equals',
                          'transaction' => 'equals');
        
        $workflowStatus =  $this->autoSearch($filters,$toObject);
        
        $transactions = BusinessGnuteca3BusOperatorGroup::listTransactions();
        
        // Percorre o resultado para adicionar a descrição da transação.
        if ( is_array($workflowStatus) )
        {
            foreach ( $workflowStatus as $i => $status )
            {
                if ( !$toObject )
                {
                    if ( strlen($workflowStatus[$i][4]) )
                    {
                        $workflowStatus[$i][5] = $transactions[$workflowStatus[$i][4]];
                    }
                }
                else
                {
                    if ( strlen($workflowStatus[$i]->transaction) )
                    {
                        $workflowStatus[$i]->transactionDescription = $transactions[$workflowStatus[$i]->transaction];
                    }
                }
            }
        }
        
        return $workflowStatus;
    }

    public function listWorkflowStatus( $workflowId )
    {
        $this->columns = 'workflowstatusid,name';
        $this->workflowIdS = $workflowId;
        
        return $this->searchWorkflowStatus( false );
    }

    public function getWorkflowStatus ($workflowStatusId)
    {
        return $this->autoGet($workflowStatusId);
    }

    /**
     * Retorna o estado inicial para um código de workfloe
     * @param integer $workflowId
     * @return stdClass
     */
    public function getInitialStatus( $workflowId )
    {
        $this->workflowIdS = $workflowId;
        $this->initialS = DB_TRUE;
        $status = $this->searchWorkflowStatus(true);

        if ( count( $status ) > 1 )
        {
            throw new Exception( _M( 'Existe mais de um estado inicial para o workflow @1.','gnuteca3' , $workflowId) );
        }

        return $status[0];
    }

    
}
?>