ProcedimentoAndamentoRN.php 2.79 KB
<?php

require_once dirname(__FILE__) . '/../../../SEI.php';

/**
 * Controla o log de estados da expadição de um procedimento pelo modulo SEI
 *
 * @autor Join Tecnologia
 */
class ProcedimentoAndamentoRN extends InfraRN {

    protected $isSetOpts = false;
    protected $dblIdProcedimento;
    protected $dblIdTramit;
    protected $numTarefa;

    /**
     * Instância do driver de conexão com o banco de dados
     *
     * @var Infra[Driver]
     */
    protected $bancoSEI = null;

    public function __destruct() {

        if(!empty($this->bancoSEI)) {

            $this->bancoSEI->fecharConexao();
        }
    }

    /**
     * Invés de aproveitar o singleton do BancoSEI criamos uma nova instância para
     * não ser afetada pelo transation
     *
     * @return Infra[Driver]
     */
    protected function inicializarObjInfraIBanco() {

        if(empty($this->bancoSEI)) {

            $this->bancoSEI = new BancoSEI();
            $this->bancoSEI->abrirConexao();
        }

        return $this->bancoSEI;
    }


    public function setOpts($dblIdProcedimento = 0, $dblIdTramit = 0, $numTarefa){

        $this->dblIdProcedimento = $dblIdProcedimento;
        $this->dblIdTramit = $dblIdTramit;
        $this->numTarefa = $numTarefa;
        $this->isSetOpts = true;
    }

    /**
     * Adiciona um novo andamento à um procedimento que esta sendo expedido para outra unidade
     *
     * @param string $strMensagem
     * @param string $strSituacao Tipo ENUM(S,N)
     * @return null
     */
    public function cadastrar($strMensagem = 'Não informado', $strSituacao = 'N'){

        if($this->isSetOpts === false) {
            throw new InfraException('Log do cadastro de procedimento não foi configurado');
        }

        $objInfraIBanco = $this->inicializarObjInfraIBanco();

        $objInfraIBanco->abrirTransacao();

        $hash = md5($this->dblIdProcedimento.$strMensagem);

        $objProcedimentoAndamentoDTO = new ProcedimentoAndamentoDTO();
        $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao);
        $objProcedimentoAndamentoDTO->setDthData(date('d/m/Y H:i:s'));
        $objProcedimentoAndamentoDTO->setDblIdProcedimento($this->dblIdProcedimento);
        $objProcedimentoAndamentoDTO->setDblIdTramite($this->dblIdTramit);
        $objProcedimentoAndamentoDTO->setStrSituacao($strSituacao);
        $objProcedimentoAndamentoDTO->setStrMensagem($strMensagem);
        $objProcedimentoAndamentoDTO->setStrHash($hash);
        $objProcedimentoAndamentoDTO->setNumTarefa($this->numTarefa);

        $objProcedimentoAndamentoBD = new ProcedimentoAndamentoBD($objInfraIBanco);
        $objProcedimentoAndamentoBD->cadastrar($objProcedimentoAndamentoDTO);

        $objInfraIBanco->confirmarTransacao();
    }
}