/**
  * Operacao Vincular documentos a documentos
  * @return Output
  * @param string $pai
  * @param string $filho
  * @param integer $vinculacao
  */
 public function vincularDocumento($pai, $filho, $vinculacao)
 {
     try {
         /* Validar se os documentos pai e filho ainda estao na area de trabalho do usuario */
         /* Inicar transacao */
         Controlador::getInstance()->getConnection()->connection->beginTransaction();
         $dt_ativacao = date('Y-m-d');
         //$operacao = ($vinculacao == 1) ? 'anexado' : 'apensado';
         switch ($vinculacao) {
             case 1:
                 $operacao = 'anexado';
                 break;
             case 2:
                 $operacao = 'apensado';
                 break;
             case 3:
                 $operacao = 'associado';
                 break;
             default:
                 $operacao = 'erro';
                 break;
         }
         if ($operacao != 'erro') {
             $informacoes = array('USUARIO' => Zend_Auth::getInstance()->getIdentity()->ID, 'NOME_USUARIO' => Zend_Auth::getInstance()->getIdentity()->NOME, 'ID_UNIDADE_HISTORICO' => Zend_Auth::getInstance()->getIdentity()->ID_UNIDADE, 'DIRETORIA' => current(CFModelUnidade::factory()->find(Zend_Auth::getInstance()->getIdentity()->ID_UNIDADE))->NOME, 'ID_DOCUMENTO' => 0, 'TIPO_DOCUMENTO' => '', 'ID_PAI' => 0, 'OPERACAO' => $operacao, 'ACAO' => '');
             //var_dump($informacoes,1);
             $acao0 = "Este documento foi {$operacao} ao documento {$pai}";
             $acao1 = "O documento {$filho} foi {$operacao}.";
             $acao2 = "Este documento foi {$operacao} ao documento {$pai}.";
             /* Historico - Documento Pai */
             $informacoes['ID_DOCUMENTO'] = $pai;
             $informacoes['ACAO'] = $acao1;
             $this->historicoDocumento($informacoes);
             /* Limpa o aray informacao para o próximo registro com id_pai */
             $informacoes['ID_PAI'] = Controlador::getInstance()->getConnection()->connection->lastInsertId('TB_HISTORICO_TRAMITE_DOCUMENTOS_ID_SEQ');
             $informacoes['ID_DOCUMENTO'] = $filho;
             $informacoes['ACAO'] = $acao0;
             $this->historicoDocumento($informacoes);
             /**/
             $id_filho = Controlador::getInstance()->getConnection()->connection->lastInsertId('TB_HISTORICO_TRAMITE_DOCUMENTOS_ID_SEQ');
             /* Ultimo tramite - Documento Filho */
             $stmt = Controlador::getInstance()->getConnection()->connection->prepare("UPDATE TB_DOCUMENTOS_CADASTRO SET ULTIMO_TRAMITE = ? WHERE DIGITAL = ?");
             $stmt->bindParam(1, $acao2, PDO::PARAM_STR);
             $stmt->bindParam(2, $filho, PDO::PARAM_STR);
             $stmt->execute();
             $id_unidade = Controlador::getInstance()->usuario->ID_UNIDADE;
             /* Vincular */
             $sttm = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_DOCUMENTOS_VINCULACAO (ID_DOCUMENTO_PAI,ID_DOCUMENTO_FILHO,ID_USUARIO,ID_HISTORICO_TRAMITE_PAI,ID_HISTORICO_TRAMITE_FILHO,ID_VINCULACAO,DT_ATIVACAO,ID_UNIDADE) VALUES (?,?,?,?,?,?,?,?)");
             $sttm->bindParam(1, DaoDocumento::getDocumento($pai, 'id'), PDO::PARAM_INT);
             $sttm->bindParam(2, DaoDocumento::getDocumento($filho, 'id'), PDO::PARAM_INT);
             $sttm->bindParam(3, $informacoes['USUARIO'], PDO::PARAM_INT);
             $sttm->bindParam(4, $informacoes['ID_PAI'], PDO::PARAM_INT);
             $sttm->bindParam(5, $id_filho, PDO::PARAM_INT);
             $sttm->bindParam(6, $vinculacao, PDO::PARAM_INT);
             $sttm->bindParam(7, $dt_ativacao, PDO::PARAM_INT);
             $sttm->bindParam(8, $id_unidade, PDO::PARAM_INT);
             $sttm->execute();
             /* Comitar */
             Controlador::getInstance()->getConnection()->connection->commit();
             return new Output(array('success' => 'true', 'message' => "Documento {$operacao} com sucesso!"));
         } else {
             throw new PDOException();
         }
     } catch (PDOException $e) {
         Controlador::getInstance()->getConnection()->connection->rollback();
         return new Output(array('success' => 'false', 'error' => $e->getMessage()));
     }
 }
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
 *
 */
$controller = Controlador::getInstance();
$auth = Zend_Auth::getInstance()->getStorage()->read();
if (isset($_POST['DIRETORIA'])) {
    if ($auth->ID_UNIDADE != $_POST['DIRETORIA']) {
        // Diretoria selecionada é diferente da original do usuário, houve troca
        $auth->ID_UNIDADE_ORIGINAL = $auth->ID_UNIDADE;
        $auth->TROCOU = true;
    } else {
        $auth->ID_UNIDADE_ORIGINAL = $auth->ID_UNIDADE;
        unset($auth->TROCOU);
    }
    $auth->ID_UNIDADE = $_POST['DIRETORIA'];
    $auth->DIRETORIA = current(CFModelUnidade::factory()->find($_POST['DIRETORIA']))->NOME;
    Zend_Auth::getInstance()->getStorage()->write($auth);
    $controller->cache->remove('acl_' . $auth->ID);
    $controller->cache->clean('matchingAnyTag', array('acl_usuario_' . $auth->ID));
    header('Location: sistemas.php');
} else {
    include "function/auto_load_statics.php";
    ?>

    <!--Dialogo com a listagem de unidades do ICMBio-->
    <html>
        <head>
            <script type="text/javascript">
                $(document).ready(function() {
                    /*Listeners*/
                    /*Bind Dialog Close*/
<?php

/*
 * Copyright 2008 ICMBio
 * Este arquivo é parte do programa SISICMBio
 * O SISICMBio é um software livre; você pode redistribuíção e/ou modifição dentro dos termos
 * da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão
 * 2 da Licença.
 *
 * Este programa é distribuíção na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem
 * uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU/GPL em português para maiores detalhes.
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt",
 * junto com este programa, se não, acesse o Portal do Software Público Brasileiro no endereço
 * www.softwarepublico.gov.br ou escreva para a Fundação do Software Livre(FSF)
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301, USA
 * */
$retrive = CFModelUnidade::factory()->retriveUnidadeOrgaoPrincipal();
$out[] = array('0' => 'Selecione');
foreach ($retrive as $key => $value) {
    $out[] = array($value['ID'] => Util::fixErrorString("{$value['NOME']} - {$value['SIGLA']}"));
}
print json_encode($out);
 /**
  * @return string 
  * 'legenda dos status' => 
  *      1 -> disponivel, 
  *      2 -> processando, 
  *      3 -> indisponivel, 
  *      4 -> sincronizacao concluida, 
  *      5 -> falha na sincronizacao'
  */
 public function startRemoteSync()
 {
     if ($this->_readStatusInFile() != 1) {
         return $this->status();
     }
     $countChanged = 0;
     $countAdd = 0;
     $countInactivated = 0;
     $countPending = 0;
     $error = '';
     $model = CFModelUnidade::factory();
     try {
         //sincronizacao iniciada...
         $this->_writeStatusInFile(2);
         $externals = $this->_sync->load();
         $model->beginTransaction();
         foreach ($externals as $external) {
             if (!Unit::factory()->isValid($external)) {
                 $error .= "A unidade [{$external->ID}][{$external->SIGLA}][{$external->NOME}] nao e uma unidade valida!<br>";
                 $countPending++;
                 continue;
             }
             $local = $model->find($external->ID);
             //verificar se a unidade externa jah esta cadastrada na base local...
             if (empty($local)) {
                 $model->insert((array) $external, false);
                 $countAdd++;
                 continue;
             }
             $inactive = false;
             //verificar se a registro externo deve ser desativado...
             if ($external->ST_ATIVO == 0) {
                 //verificar se existe algum processo ou documento associado a unidade...
                 if ($this->_existsProcessesOrDocumentsInUnitById($external->ID)) {
                     $error .= "A unidade {$external->NOME} ainda possui documento(s) e/ou processo(s) associado(s) \r\n";
                     $countPending++;
                     continue;
                 }
                 $inactive = true;
             }
             //atualizar unidade externa com a base local...
             if ($model->update((array) $external) == 1) {
                 $countChanged++;
                 if ($inactive) {
                     $countInactivated++;
                 }
             }
         }
         //sincronizacao finalizada...
         $status = 1;
         $model->commit();
         $this->_writeStatusInFile(1);
     } catch (Exception $e) {
         $this->_writeStatusInFile(5);
         $this->_writeLogInFile($e->getMessage());
         $model->rollback();
     }
     $response = array('status' => $status == 1 ? 4 : $status, 'message' => $status == 1 ? sprintf($this->_messages[4], $countAdd, $countChanged, $countInactivated, $countPending) : $this->_messages[$status], 'error' => $error);
     return json_encode($response);
 }
 /**
  * 
  */
 public function salvarAutuacao()
 {
     $unidade = current(CFModelUnidade::factory()->find($this->_usuario->id_unidade));
     //verificar se a unidade autuadora é uma unidade protocolizadora...
     if (!$unidade->UP || !$unidade->CODIGO) {
         throw new Exception('Este processo não pode ser autuado porque você não está em uma unidade protocolizadora válida!');
     }
     if (!Documento::validarDocumentoPecaProcesso($this->digital)) {
         if (Documento::validarDocumentoAreaDeTrabalho($this->digital)) {
             if (Documento::getQuantidadeImagemDocumento($this->digital) > 0) {
                 try {
                     Controlador::getInstance()->getConnection()->connection->beginTransaction();
                     $id_unidade_usuario = (int) Controlador::getInstance()->usuario->ID_UNIDADE;
                     $numero_processo = $this->gerarNumeroProcesso();
                     /* Adicionar o novo Processo */
                     $stmt = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_PROCESSOS_CADASTRO(\n                            NUMERO_PROCESSO,ORIGEM,ASSUNTO,ASSUNTO_COMPLEMENTAR,DT_AUTUACAO,DT_PRAZO,\n                            DT_CADASTRO,USUARIO,INTERESSADO,ID_UNID_AREA_TRABALHO,ULTIMO_TRAMITE,PROCEDENCIA,ID_UNIDADE_USUARIO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
                     $stmt->bindParam(1, $numero_processo, PDO::PARAM_STR);
                     $stmt->bindParam(2, $this->origem, PDO::PARAM_INT);
                     $stmt->bindParam(3, $this->assunto, PDO::PARAM_INT);
                     $stmt->bindParam(4, $this->assunto_complementar, PDO::PARAM_STR);
                     $stmt->bindParam(5, $this->dt_autuacao, PDO::PARAM_STR);
                     $stmt->bindParam(6, $this->dt_prazo, PDO::PARAM_STR);
                     $stmt->bindParam(7, $this->dt_autuacao, PDO::PARAM_STR);
                     $stmt->bindParam(8, $this->_usuario->id, PDO::PARAM_INT);
                     $stmt->bindParam(9, $this->interessado, PDO::PARAM_INT);
                     $stmt->bindParam(10, $this->area_trabalho, PDO::PARAM_INT);
                     $stmt->bindParam(11, $this->ultimo_tramite, PDO::PARAM_STR);
                     $stmt->bindParam(12, $this->procedencia, PDO::PARAM_STR);
                     $stmt->bindParam(13, $id_unidade_usuario, PDO::PARAM_STR);
                     $stmt->execute();
                     /* Armazenar o id do processo */
                     $id_processo = Controlador::getInstance()->getConnection()->connection->lastInsertId('TB_PROCESSOS_CADASTRO_ID_SEQ');
                     /* Registrar o primeiro volume do processo */
                     $volume = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_PROCESSOS_VOLUME (ID_PROCESSO_CADASTRO, NU_VOLUME, FL_INICIAL, DT_ABERTURA,ID_USUARIO,ID_UNIDADE) VALUES (?, 1, 1,?,?,?)");
                     $volume->bindParam(1, $id_processo, PDO::PARAM_INT);
                     //id do processo
                     $volume->bindParam(2, $this->dt_autuacao, PDO::PARAM_STR);
                     //usar a data da autuacao para informar a data de inicio do primeiro volume.
                     $volume->bindParam(3, $this->_usuario->id, PDO::PARAM_INT);
                     $volume->bindParam(4, $id_unidade_usuario, PDO::PARAM_INT);
                     $volume->execute();
                     /* Adicionar a documento no processo */
                     $peca = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_PROCESSOS_DOCUMENTOS(ID_PROCESSOS_CADASTRO,ID_DOCUMENTOS_CADASTRO,ID_USUARIOS,ID_UNIDADE_USUARIO)VALUES(?,?,?,?)");
                     $peca->bindParam(1, $id_processo, PDO::PARAM_INT);
                     //id_processo
                     $peca->bindParam(2, DaoDocumento::getDocumento($this->digital, 'id'), PDO::PARAM_INT);
                     //id_documento
                     $peca->bindParam(3, $this->_usuario->id, PDO::PARAM_INT);
                     $peca->bindParam(4, $id_unidade_usuario, PDO::PARAM_INT);
                     $peca->execute();
                     /* Inserir o historico de tramite do processo */
                     /* Complemento do Historico do Processo */
                     $acao = "Processo Autuado a partir do documento {$this->digital}";
                     $destino = "XXXXX";
                     $id_usuario = $this->_usuario->id;
                     $nome_usuario = $this->_usuario->nome;
                     $id_unidade = Zend_Auth::getInstance()->getIdentity()->ID_UNIDADE;
                     $objOrigem = DaoUnidade::getUnidade($id_unidade);
                     $diretoria = $objOrigem['nome'];
                     $tx_origem = $objOrigem['nome'] . ' - ' . $objOrigem['sigla'];
                     $historico_processo = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_HISTORICO_TRAMITE_PROCESSOS" . " (NUMERO_PROCESSO,ID_USUARIO,USUARIO,ID_UNIDADE,DIRETORIA,ACAO,ORIGEM,DESTINO,DT_TRAMITE)" . " VALUES(?,?,?,?,?,?,?,?,CLOCK_TIMESTAMP())");
                     $historico_processo->bindParam(1, $this->numero_processo, PDO::PARAM_STR);
                     $historico_processo->bindParam(2, $id_usuario, PDO::PARAM_INT);
                     $historico_processo->bindParam(3, $nome_usuario, PDO::PARAM_STR);
                     $historico_processo->bindParam(4, $id_unidade, PDO::PARAM_INT);
                     $historico_processo->bindParam(5, $diretoria, PDO::PARAM_STR);
                     $historico_processo->bindParam(6, $acao, PDO::PARAM_STR);
                     $historico_processo->bindParam(7, $tx_origem, PDO::PARAM_STR);
                     $historico_processo->bindParam(8, $destino, PDO::PARAM_STR);
                     $historico_processo->execute();
                     /* Complemento do Historico do Documento */
                     $acao = "O processo {$this->numero_processo} foi autuado a partir deste documento.";
                     $destino = "XXXXX";
                     $historico_documento = Controlador::getInstance()->getConnection()->connection->prepare("INSERT INTO TB_HISTORICO_TRAMITE_DOCUMENTOS" . " (DIGITAL,ID_USUARIO,USUARIO,ID_UNIDADE,DIRETORIA,ACAO,ORIGEM,DESTINO,DT_TRAMITE)" . " VALUES (?,?,?,?,?,?,?,?,CLOCK_TIMESTAMP())");
                     $historico_documento->bindParam(1, $this->digital, PDO::PARAM_STR);
                     $historico_documento->bindParam(2, $id_usuario, PDO::PARAM_INT);
                     $historico_documento->bindParam(3, $nome_usuario, PDO::PARAM_STR);
                     $historico_documento->bindParam(4, $id_unidade, PDO::PARAM_INT);
                     $historico_documento->bindParam(5, $diretoria, PDO::PARAM_STR);
                     $historico_documento->bindParam(6, $acao, PDO::PARAM_STR);
                     $historico_documento->bindParam(7, $tx_origem, PDO::PARAM_STR);
                     $historico_documento->bindParam(8, $destino, PDO::PARAM_STR);
                     $historico_documento->execute();
                     DaoDocumento::updateGenerico($this->digital, array('ultimo_tramite' => $acao));
                     Controlador::getInstance()->getConnection()->connection->commit();
                     $this->out = array('success' => 'true', 'numero_processo' => $this->numero_processo);
                     return true;
                 } catch (PDOException $e) {
                     Controlador::getInstance()->getConnection()->connection->rollback();
                     echo $e->getMessage();
                     return false;
                     throw new Exception($e);
                 }
             } else {
                 $this->out = array('success' => 'false', 'error' => 'Este documento não possui imagem!');
             }
         } else {
             $this->out = array('success' => 'false', 'error' => 'Este documento não está na Área de Trabalho!');
         }
     } else {
         $this->out = array('success' => 'false', 'error' => 'Este documento já é peça de outro processo!');
     }
 }