/** * @param \Core_Dto_Search $dto */ public function searchArtefato($dto) { $sqTipoArtefato = $dto->getSqTipoArtefato(); $nuArtefato = "sgdoce.formata_numero_digital(art.nu_digital) ILIKE '%{$dto->getQuery()}%'"; if ($sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $value = preg_replace('/[^0-9]/', '', $dto->getQuery()); $withOR = "OR TRANSLATE(art.nu_artefato, './-', '') ILIKE '%{$value}%'"; $nuArtefato = "sgdoce.formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) ILIKE '%{$value}%' {$withOR}"; } $rsm = new \Doctrine\ORM\Query\ResultSetMapping($this->_em); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string'); $rsm->addScalarResult('nu_digital', 'nuDigital', 'string'); $sql = sprintf(' SELECT art.sq_artefato ,formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) AS nu_artefato ,formata_numero_digital(art.nu_digital) as nu_digital FROM artefato art JOIN artefato art_pai ON obter_vinculo_pai(art.sq_artefato) = art_pai.sq_artefato JOIN sgdoce.tramite_artefato uta ON art_pai.sq_artefato = uta.sq_artefato AND uta.st_ultimo_tramite JOIN tipo_artefato_assunto taa ON taa.sq_tipo_artefato_assunto = art.sq_tipo_artefato_assunto LEFT JOIN artefato_processo ap ON art.sq_artefato = ap.sq_artefato LEFT JOIN artefato_vinculo av ON av.sq_artefato_filho = art.sq_artefato and av.sq_tipo_vinculo_artefato NOT IN(%5$d,%6$d,%7$d) LEFT JOIN artefato_arquivo_setorial aas ON art.sq_artefato = aas.sq_artefato and aas.dt_desarquivamento is null WHERE aas.sq_artefato IS NULL AND uta.sq_pessoa_recebimento = %1$s AND uta.sq_status_tramite <> %2$s AND (%3$s) AND taa.sq_tipo_artefato = %4$s', $dto->getSqPessoa(), \Core_Configuration::getSgdoceStatusTramiteTramitado(), $nuArtefato, $dto->getSqTipoArtefato(), \Core_Configuration::getSgdoceTipoVinculoArtefatoReferencia(), \Core_Configuration::getSgdoceTipoVinculoArtefatoApoio(), \Core_Configuration::getSgdoceTipoVinculoArtefatoDespacho()); try { return $this->_em->createNativeQuery($sql, $rsm)->useResultCache(false)->getScalarResult(); } catch (\Exception $ex) { $this->getMessaging()->addErrorMessage(\Core_Registry::getMessage()->translate('MN180'), 'User'); $this->getMessaging()->dispatchPackets(); return array(); } }
/** * * @param \Core_Dto_Search $dto * @return array */ public function searchDocumentsToFirstPiece(\Core_Dto_Search $dto, $isExterno = false, $isLegado = false) { $sqTipoArtefato = $dto->getSqTipoArtefato(); $field = "at.nu_digital"; if ($sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $field = $this->_em->createQueryBuilder()->expr()->lower("translate(at.nu_artefato::text, './-'::text, ''::text)")->__toString(); } $inAbreProcesso = ''; if (!$isExterno) { $inAbreProcesso = ' AND td.in_abre_processo'; } if ($isLegado) { $inAbreProcesso = ''; } $sql = "SELECT at.sq_artefato,\n at.nu_digital,\n at.nu_artefato\n FROM sgdoce.fn_show_area_trabalho(NULL, :sqTipoArtefato, :sqPessoaLogada, :sqUnidadeLogada, :search) at\n JOIN tipo_documento td\n ON td.sq_tipo_documento = at.sq_tipo_documento\n WHERE at.sq_status_tramite > :sqStatusTramite\n\n AND at.has_imagem\n AND NOT at.arquivado\n AND {$field} LIKE '{$dto->getQuery()}%'\n AND NOT at.has_solicitacao_aberta\n {$inAbreProcesso}\n ORDER BY at.nu_digital"; $rsm = new \Doctrine\ORM\Query\ResultSetMapping($this->_em); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('nu_digital', 'nuDigital', 'string'); $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string'); $nq = $this->_em->createNativeQuery($sql, $rsm); $nq->setParameter('sqStatusTramite', \Core_Configuration::getSgdoceStatusTramiteTramitado())->setParameter('sqTipoArtefato', $dto->getSqTipoArtefato())->setParameter('sqUnidadeLogada', \Core_Integration_Sica_User::getUserUnit())->setParameter('sqPessoaLogada', \Core_Integration_Sica_User::getPersonId())->setParameter('search', $dto->getQuery()); $nq->useResultCache(false); return $nq->getArrayResult(); }
public function isTramited() { return $this->getSqStatusTramite()->getSqStatusTramite() == \Core_Configuration::getSgdoceStatusTramiteTramitado(); }
/** * Salva o tramite dos artefatos * * @param array $data */ public function processTramite(array $data) { $this->getEntityManager()->getConnection()->beginTransaction(); try { $sqUnidadeOrigem = \Core_Integration_Sica_User::getUserUnit(); $params = array('sqTipoRastreamento' => $data['sqTipoRastreamento'] ?: NULL, 'txCodigoRastreamento' => $data['txCodigoRastreamento'] ? trim(strip_tags(mb_strtoupper($data['txCodigoRastreamento'], 'UTF-8'))) : NULL, 'dtTramite' => \Zend_Date::now(), 'sqPessoaTramite' => \Core_Integration_Sica_User::getPersonId(), 'sqUnidadeOrgTramite' => \Core_Integration_Sica_User::getUserUnit(), 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteTramitado()); foreach ($data['sqArtefato'] as $sqArtefato) { $dtoSearchArtefato = \Core_Dto::factoryFromData(array('sqArtefato' => $sqArtefato), 'search'); $params['sqArtefato'] = $sqArtefato; $params['nuTramite'] = $this->getNextTramiteNumber($dtoSearchArtefato); if ($data['tipo_tramite'] == 1) { //interno $params['sqPessoaDestino'] = (int) $data['sqUnidadeOrg']; $params['sqPessoaDestinoInterno'] = $data['sqPessoaDestinoInterno'] ? (int) $data['sqPessoaDestinoInterno'] : NULL; $this->_ruleTramiteInterno($sqUnidadeOrigem, $params['sqPessoaDestino']); $params['inImpresso'] = TRUE; $hasVinculoSigiloso = $this->_getRepository('app:ArtefatoVinculo')->hasVinculoSigiloso($sqArtefato); if (!$params['sqPessoaDestinoInterno'] && $hasVinculoSigiloso) { $entityArtefato = $this->_getRepository('app:Artefato')->find($sqArtefato); $helper = new \Sgdoce_View_Helper_NuArtefato(); $nrArtefato = $helper->nuArtefato($entityArtefato); throw new \Core_Exception_ServiceLayer(sprintf(\Core_Registry::getMessage()->translate('MN189'), $nrArtefato)); } } else { //externo // if ($data['stImprimeGuia'] && !$data['sqEndereco']) { // throw new \Core_Exception_ServiceLayer(\Core_Registry::getMessage()->translate('MN172')); // }else{ $params['sqEndereco'] = $data['sqEndereco'] ? $this->getEntityManager()->getPartialReference('app:vwEndereco', $data['sqEndereco']) : NULL; // } // $this->_checkArtefatoSigiloso($dtoSearchArtefato); $params['sqPessoaDestino'] = $data['sqPessoaOrigem']; $params['inImpresso'] = isset($data['inImpresso']) ? $data['inImpresso'] : TRUE; } // verifica se destino foi informado if (!isset($params['sqPessoaDestino']) || empty($params['sqPessoaDestino'])) { throw new \Core_Exception_ServiceLayer(\Core_Registry::getMessage()->translate('MN201')); } $this->_checkHasImage($params); if (!is_null($params['sqTipoRastreamento'])) { $params['sqTipoRastreamento'] = $this->getEntityManager()->getPartialReference('app:TipoRastreamentoCorreio', $data['sqTipoRastreamento']); } else { $params['sqTipoRastreamento'] = NULL; } $entityDto = $this->montaEntidateTramite($params); $this->save($entityDto); } $this->getMessaging()->addSuccessMessage(\Core_Registry::getMessage()->translate('MN155'), 'User'); $this->getMessaging()->dispatchPackets(); $this->finish(); $this->getEntityManager()->getConnection()->commit(); } catch (\Exception $e) { $this->getEntityManager()->getConnection()->rollback(); throw $e; } }
/** * * Tramite documentos desvinculados pelo SGI para sua caixa para que ele dê destino * ao documento que ele desvinculou * * @param \Sgdoce\Model\Entity\Artefato $entityArtefato * @return \Artefato\Service\ArtefatoVinculo */ private function _processTramite(EntityArtefato $entityArtefato, \Core_Dto_Search $dtoDadosTramite = null) { // if (! \Core_Registry::get('isUserSgi')) { // return $this; // } $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'); // Verifica se foi aberto uma solicitação para o artefato para realizar a operação. if ($this->_isTramiteSolicitante && !is_null($dtoDadosTramite)) { $sqPessoaLogada = $dtoDadosTramite->getSqPessoa(); $sqUnidadeLogada = $dtoDadosTramite->getSqUnidadeOrg(); } $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) { $dataTramite = array('sqArtefato' => $sqArtefato, 'sqPessoaDestino' => $sqUnidadeLogada, 'sqPessoaDestinoInterno' => $sqPessoaLogada, 'sqUnidadeOrgTramite' => $sqUnidadeLogada, 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteTramitado(), 'dtTramite' => \Zend_Date::now(), 'sqPessoaTramite' => $sqPessoaLogada, 'inImpresso' => TRUE, 'nuTramite' => $serviceTramite->getNextTramiteNumber($dtoSearchArtefato)); $entityDtoTramite = $serviceTramite->montaEntidateTramite($dataTramite); $entityTramite = $serviceTramite->save($entityDtoTramite); } else { $sqPessoaRecebimento = $entityUltimoTramite->getSqPessoaRecebimento() ? $entityUltimoTramite->getSqPessoaRecebimento()->getSqPessoa() : NULL; $sqPessoaDestino = $entityUltimoTramite->getSqPessoaDestino() ? $entityUltimoTramite->getSqPessoaDestino()->getSqPessoa() : NULL; /** * 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'); $dataTramite = array('sqArtefato' => $sqArtefato, 'sqPessoaDestino' => $sqUnidadeLogada, 'sqPessoaDestinoInterno' => $sqPessoaLogada, 'sqUnidadeOrgTramite' => $sqUnidadeLogada, 'sqStatusTramite' => \Core_Configuration::getSgdoceStatusTramiteTramitado(), 'dtTramite' => \Zend_Date::now(), 'sqPessoaTramite' => $sqPessoaLogada, 'inImpresso' => TRUE, 'nuTramite' => $serviceTramite->getNextTramiteNumber($dtoSearchArtefato)); $entityDtoTramite = $serviceTramite->montaEntidateTramite($dataTramite); $entityTramite = $serviceTramite->save($entityDtoTramite); } } return $this; }