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; }