<?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.
 * 
 * 
 * gtcTask business
 *
 *
 *
 *
 *
 **/


class BusinessGnuteca3BusScheduleTaskLog extends GBusiness
{
    public $scheduleTaskId, //integer,
           $log,            //text,
           $date,           //datetime
           $status;         //varchar

    public $columns,
           $table       = 'gtcScheduleTaskLog',
           $pkeys       = 'scheduleTaskId',
           $cols        = 'log, date, status';


    public function __construct()
    {
        $this->columns = "{$this->pkeys}, {$this->cols}";
        parent::__construct($this->table, $this->pkeys, $this->cols);

        $this->MIOLO->getClass($this->module, 'GDate');
    }


    public function insertScheduleTaskLog()
    {
        $this->date = GDate::now()->getDate(GDate::MASK_TIMESTAMP_DB);
        
        return $this->autoInsert();
    }


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


    public function deleteScheduleTaskLog($taskId)
    {
        return $this->autoDelete($taskId);
    }


    public function getScheduleTaskLog( $taskId, $boolean = FALSE )
    {
        if( $boolean )
        {
            $this->clear();
            $result[0] = $this->autoGet( $taskId );
            return is_object($result[0]);
        }
        else
        {
            $this->clear();
            return $this->autoGet( $taskId );
        }
    }

    /**
     * Check se uma tarefa ja foi executada.
     *
     * @param db date $startDate
     * @param db date $endDate
     * @param string $logMsg
     * @return boolean
     */
    public function checkRun($scheduleTaskId, $startDate, $endDate, $logMsg)
    {
        $this->clear();
        $this->setColumns("1");
        $this->setTables($this->table);
        $this->setWhere(" scheduleTaskId = ? AND (date >= ? AND date <= ?) AND log = ?");
        $sql = $this->select(array($scheduleTaskId, $startDate, $endDate, $logMsg));
        $rs  = $this->query($sql);
        return (!$rs) ? false : true;
    }

    public function searchScheduleTaskLog($orderBy='date desc', $limit=null)
    {
    	if ($this->scheduleTaskId)
    	{
            $this->setWhere('scheduletaskid = ?');
            $data[] = $this->scheduleTaskId;
    	}
    	if ( $this->log )
    	{
            $this->setWhere('log = ?');
            $data[] = $this->log;
    	}
    	
        if ( $this->date )
        {
            $this->setWhere('date = ?');
            $data[] = $this->date;
        }
        
        $this->setTables('gtcscheduletasklog');
        
        $this->setColumns("scheduletaskid, 
                           log,
                           date,
                           status,
                           (CASE WHEN status = 'START' THEN 1 ELSE 2 END) as ord");
        $this->setOrderBy($orderBy);
        $sql = $this->select($data);
       
        //FIXME: setLimit não funcionou
        
        if ( $limit )
        {
            $sql .= " LIMIT {$limit}";
        }
        
        $rs  = $this->query($sql);
    	
        return $rs;
    }
    
    /**
     * Método que quantatidade de logs por agendamento
     * @return integer quantidade de registros no log 
     */
    public function countLogForScheduleTask()
    {
        $this->clear();
        
        $data = array();
        if ($this->scheduleTaskId)
    	{
            $this->setWhere('scheduletaskid = ?');
            $data[] = $this->scheduleTaskId;
    	}
        
        $this->setTables('gtcscheduletasklog');
        
        $this->setColumns('count(*)');
        
        $sql = $this->select($data);
        $rs  = $this->query($sql);
        
        
        return $rs[0][0];
    }
    
    public function setData($data)
    {
        $this->scheduleTaskId =
        $this->log = 
        $this->date =
        $this->status = null;
        
        parent::setData($data);
    }
    
    
}
?>