Beispiel #1
0
 public function desarquivar(\Core_Dto_Search $dto)
 {
     try {
         $serviceHA = $this->getServiceLocator()->getService('HistoricoArtefato');
         foreach ($dto->getSqArtefato()->getApi() as $method) {
             $entityArtefato = $this->_getRepository('app:Artefato')->find($dto->getSqArtefato()->{$method}());
             $this->_checkArtefatoEmprestado($entityArtefato);
             $entityCaixaArtefato = $this->_getRepository()->findOneBy(array('sqArtefato' => $entityArtefato->getSqArtefato()));
             if (NULL === $entityCaixaArtefato) {
                 throw new \Core_Exception_ServiceLayer_Verification('Artefato não localizado no arquivo. Já deve ter sido desarquivado');
             }
             //remove 1 segundo para garantir que o historico a ser salvo em seguida seja a ultima movimentação
             $date = \Zend_Date::now()->subSecond(1);
             $sqTipoHistorico = \Core_Configuration::getSgdoceTipoHistoricoArquivoDesarquivado();
             # persiste o historico do arquivo
             $this->_doInsertHistorico($entityCaixaArtefato, $date, $sqTipoHistorico);
             # persiste um tramite para quem faz o desarquivamento
             $dtoSearchArtefato = \Core_Dto::factoryFromData(array('sqArtefato' => $entityArtefato->getSqArtefato()), 'search');
             $tramiteArtefatoService = $this->getServiceLocator()->getService('TramiteArtefato');
             $entityTramiteArtefato = $this->_newEntity('app:TramiteArtefato');
             $entityTramiteArtefato->setDtTramite($date)->setDtRecebimento($date)->setSqArtefato($entityArtefato)->setSqPessoaTramite($this->_getUserOperation())->setSqUnidadeOrgTramite($this->_getUnitOperation())->setNuTramite($tramiteArtefatoService->getNextTramiteNumber($dtoSearchArtefato))->setSqPessoaDestinoInterno($this->_getUserOperation())->setInImpresso(true)->setSqPessoaRecebimento($this->_getUserOperation())->setSqStatusTramite($this->getEntityManager()->getPartialReference('app:StatusTramite', \Core_Configuration::getSgdoceStatusTramiteRecebido()))->setSqPessoaDestino($this->getEntityManager()->getPartialReference('app:VwPessoa', $this->_getUnitOperation()->getSqUnidadeOrg()));
             $this->getEntityManager()->persist($entityTramiteArtefato);
             # persiste o historico no artefato
             $sqOcorrencia = \Core_Configuration::getSgdoceSqOcorrenciaDesarquivar();
             $pessoaOperacao = $this->_getUserOperation()->getNoPessoa();
             $strMessage = $serviceHA->getMessage('MH020', \Zend_Date::now()->toString('dd/MM/YYYY HH:mm:ss'), $pessoaOperacao);
             $serviceHA->registrar($entityArtefato->getSqArtefato(), $sqOcorrencia, $strMessage);
             /**
              * remove registro da caixa de artefato
              *
              * a remoção do artefato da caixa deve ser feita no final devido ao relacionamento reverso
              * de sqCaixaArtefato existem em Artefato
              */
             $this->getEntityManager()->remove($entityCaixaArtefato);
             $this->getEntityManager()->flush();
         }
     } catch (\Exception $e) {
         throw $e;
     }
 }
 /**
  *
  * @param \Sgdoce\Model\Entity\Artefato $entityArtefato
  * @return \Arquivo\Service\ArquivamentoSetorial
  */
 private function _processTramite(\Sgdoce\Model\Entity\Artefato $entityArtefato)
 {
     $sqArtefato = $entityArtefato->getSqArtefato();
     $entityUltimoTramite = $this->_getRepository('app:VwUltimoTramiteArtefato')->find($sqArtefato);
     $sqPessoaLogada = (int) \Core_Integration_Sica_User::getPersonId();
     $sqUnidadeLogada = (int) \Core_Integration_Sica_User::getUserUnit();
     $serviceTramite = $this->getServiceLocator()->getService('TramiteArtefato');
     $dtoSearchArtefato = \Core_Dto::factoryFromData(array('sqArtefato' => $sqArtefato), 'search');
     /**
      * Se não tem ultimo Tramite é porque o artefato ainda não foi corrigido.
      * Verificar, mesmo assim, se tem tramite pois a view de ultimo tramite faz join
      * que pode não retornar registro caso documento não tenha sido corrido
      */
     if (!$entityUltimoTramite) {
         $objZendDate = \Zend_Date::now();
         $dataTramite = array('sqArtefato' => $sqArtefato, 'sqPessoaDestino' => $sqUnidadeLogada, 'sqPessoaDestinoInterno' => $sqPessoaLogada, 'sqUnidadeOrgTramite' => $sqUnidadeLogada, 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteRecebido(), 'dtTramite' => $objZendDate, 'sqPessoaTramite' => $sqPessoaLogada, 'inImpresso' => TRUE, 'nuTramite' => $serviceTramite->getNextTramiteNumber($dtoSearchArtefato));
         $entityDtoTramite = $serviceTramite->montaEntidateTramite($dataTramite);
         $entityPessoaRecebimento = $this->getEntityManager()->getPartialReference('app:VwPessoa', $sqPessoaLogada);
         $entityDtoTramite->getEntity()->setSqPessoaRecebimento($entityPessoaRecebimento);
         $objZendDateRecebimento = clone $objZendDate;
         $entityDtoTramite->getEntity()->setDtRecebimento($objZendDateRecebimento->addSecond(1));
         $entityTramite = $serviceTramite->save($entityDtoTramite);
     } else {
         $sqPessoaRecebimento = $entityUltimoTramite->getSqPessoaRecebimento()->getSqPessoa();
         $sqPessoaDestino = $entityUltimoTramite->getSqPessoaDestino()->getSqPessoa();
         /**
          * caso o ultimo tramite do artefato não for da pessoa logada
          * deve-se registrar um tramite para pessoa logada (SGI) para que este
          * possa encaminhar para quem solicitou a desanexação
          */
         if ($sqPessoaRecebimento != $sqPessoaLogada || $sqPessoaDestino != $sqUnidadeLogada) {
             $dtoSearchArtefato = \Core_Dto::factoryFromData(array('sqArtefato' => $sqArtefato), 'search');
             $objZendDate = \Zend_Date::now();
             $dataTramite = array('sqArtefato' => $sqArtefato, 'sqPessoaDestino' => $sqUnidadeLogada, 'sqPessoaDestinoInterno' => $sqPessoaLogada, 'sqUnidadeOrgTramite' => $sqUnidadeLogada, 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteRecebido(), 'dtTramite' => $objZendDate, 'sqPessoaTramite' => $sqPessoaLogada, 'inImpresso' => TRUE, 'nuTramite' => $serviceTramite->getNextTramiteNumber($dtoSearchArtefato));
             $entityDtoTramite = $serviceTramite->montaEntidateTramite($dataTramite);
             $entityPessoaRecebimento = $this->getEntityManager()->getPartialReference('app:VwPessoa', $sqPessoaLogada);
             $entityDtoTramite->getEntity()->setSqPessoaRecebimento($entityPessoaRecebimento);
             $objZendDateRecebimento = clone $objZendDate;
             $entityDtoTramite->getEntity()->setDtRecebimento($objZendDateRecebimento->addSecond(1));
             $entityTramite = $serviceTramite->save($entityDtoTramite);
         }
     }
     return $this;
 }
 public function isReceived()
 {
     return $this->getSqStatusTramite()->getSqStatusTramite() == \Core_Configuration::getSgdoceStatusTramiteRecebido();
 }
 /**
  * @param type $dto
  * @return type
  */
 protected function _inserirTramite($dto)
 {
     $this->getEntityManager()->getConnection()->beginTransaction();
     try {
         $objUltTramiteArtefato = $this->getServiceLocator()->getService('TramiteArtefato')->findBy(array('sqArtefato' => $dto->getSqArtefato()));
         $objUltTramiteArtefato = current($objUltTramiteArtefato);
         $entArtefato = $this->getEntityManager()->getPartialReference('app:Artefato', $dto->getSqArtefato());
         if ($objUltTramiteArtefato instanceof \Sgdoce\Model\Entity\TramiteArtefato) {
             // RECEBE ARTEFATO.
             $entStatusTramite = $this->getEntityManager()->getPartialReference('app:StatusTramite', \Core_Configuration::getSgdoceStatusTramiteRecebido());
             $entPessoa = $this->getEntityManager()->getPartialReference('app:VwPessoa', \Core_Integration_Sica_User::getPersonId());
             $entPessoaDestino = $this->getEntityManager()->getPartialReference('app:VwPessoa', \Core_Integration_Sica_User::getUserUnit());
             $entUnidadeOrg = $this->getEntityManager()->getPartialReference('app:VwUnidadeOrg', \Core_Integration_Sica_User::getUserUnit());
             $newTramiteArtefato = $this->_newEntity('app:TramiteArtefato');
             $artefatoDto = \Core_Dto::factoryFromData(array('sqArtefato' => $dto->getSqArtefato()), 'search');
             $nextNuTramite = $this->getServiceLocator()->getService('TramiteArtefato')->getNextTramiteNumber($artefatoDto);
             $newTramiteArtefato->setSqArtefato($entArtefato);
             $newTramiteArtefato->setSqPessoaTramite($entPessoa);
             $newTramiteArtefato->setSqUnidadeOrgTramite($entUnidadeOrg);
             $newTramiteArtefato->setSqPessoaDestino($entPessoaDestino);
             $newTramiteArtefato->setSqPessoaDestinoInterno($entPessoa);
             $newTramiteArtefato->setSqPessoaRecebimento($entPessoa);
             $newTramiteArtefato->setSqStatusTramite($entStatusTramite);
             $newTramiteArtefato->setNuTramite($nextNuTramite);
             $newTramiteArtefato->setDtTramite(\Zend_Date::now());
             $newTramiteArtefato->setDtRecebimento(\Zend_Date::now()->addSecond(1));
             $newTramiteArtefato->setInImpresso(true);
             $this->getEntityManager()->persist($newTramiteArtefato);
             $this->getEntityManager()->flush($newTramiteArtefato);
         } else {
             $newTramiteArtefato = $this->getServiceLocator()->getService('TramiteArtefato')->insertFirstTramite($dto->getSqArtefato());
         }
         $this->getEntityManager()->getConnection()->commit();
     } catch (\Exception $e) {
         $this->getEntityManager()->getConnection()->rollback();
         throw $e;
     }
     return $newTramiteArtefato;
 }
 /**
  * @param integer $sqArtefato
  * @return mixed
  */
 public function receive($sqArtefato)
 {
     $objUltTramiteArtefato = $this->getLastTramite($sqArtefato);
     if (!$objUltTramiteArtefato instanceof \Sgdoce\Model\Entity\VwUltimoTramiteArtefato) {
         throw new Exception("Artefato não encontrado.");
     }
     $objArtefato = $this->_getRepository('app:Artefato')->find($objUltTramiteArtefato->getSqArtefato());
     // VERIFICA SE O ARTEFATO JÁ FOI RECEBIDO
     $isReceived = false;
     /* INIT recupera informações para usar em caso de exception */
     $sqTipoArtefato = $objArtefato->getSqTipoArtefatoAssunto()->getSqTipoArtefato();
     $noTipoArtefato = $sqTipoArtefato->getNoTipoArtefato();
     if ($sqTipoArtefato->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) {
         $artefatoErro = $this->_formatProcessNumber($objArtefato);
     } else {
         $artefatoErro = $objArtefato->getNuDigital()->getNuEtiqueta();
         $artefatoErro = strlen($artefatoErro) < 7 ? str_pad($artefatoErro, 7, '0', STR_PAD_LEFT) : $artefatoErro;
     }
     /* END */
     if ($objUltTramiteArtefato->getSqStatusTramite()->getSqStatusTramite() == \Core_Configuration::getSgdoceStatusTramiteCancelado()) {
         throw new \Exception(sprintf(\Core_Registry::getMessage()->translate('MN175'), $noTipoArtefato, $artefatoErro));
     }
     if ($objUltTramiteArtefato->getSqStatusTramite()->getSqStatusTramite() != \Core_Configuration::getSgdoceStatusTramiteTramitado()) {
         $isReceived = true;
     }
     if ($objUltTramiteArtefato->getSqPessoaRecebimento() != '' || $objUltTramiteArtefato->getDtRecebimento() != '') {
         $isReceived = true;
     }
     if ($isReceived) {
         throw new \Exception(sprintf(\Core_Registry::getMessage()->translate('MN165'), $noTipoArtefato, $artefatoErro));
     }
     // VERIFICA SE ARTEFATO PODE SER RECEBIDO PELO USUÁRIO LOGADO.
     $canReceive = true;
     if ($objUltTramiteArtefato->getSqPessoaDestino()->getSqPessoa() != \Core_Integration_Sica_User::getUserUnit()) {
         $canReceive = false;
     }
     if ($objUltTramiteArtefato->getSqPessoaDestinoInterno() != '' && $objUltTramiteArtefato->getSqPessoaDestinoInterno()->getSqPessoa() != \Core_Integration_Sica_User::getPersonId()) {
         $canReceive = false;
     }
     if (!$canReceive) {
         throw new \Exception(sprintf(\Core_Registry::getMessage()->translate('MN166'), $noTipoArtefato, $artefatoErro));
     }
     // RECEBE ARTEFATO.
     $entStatusTramite = $this->_getRepository('app:StatusTramite')->find(\Core_Configuration::getSgdoceStatusTramiteRecebido());
     $entPessoa = $this->_getRepository('app:VwPessoa')->find(\Core_Integration_Sica_User::getPersonId());
     $objTramiteArtefato = $this->_getRepository('app:TramiteArtefato')->find($objUltTramiteArtefato->getSqTramiteArtefato());
     $objTramiteArtefato->setDtRecebimento(\Zend_Date::now());
     $objTramiteArtefato->setSqPessoaRecebimento($entPessoa);
     $objTramiteArtefato->setSqStatusTramite($entStatusTramite);
     $this->getEntityManager()->persist($objTramiteArtefato);
     $this->getEntityManager()->flush($objTramiteArtefato);
     return $objTramiteArtefato;
 }