Esempio n. 1
0
 /**
  * @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();
     }
 }
Esempio n. 2
0
 /**
  *
  * @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();
 }
Esempio n. 4
0
 /**
  * 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;
     }
 }
Esempio n. 5
0
 /**
  *
  * 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;
 }