Esempio n. 1
0
 /**
  * método que retorna dados para grid da área de trabalho de arquivo
  * @param \Core_Dto_Abstract $dto
  * @return \Doctrine\ORM\QueryBuilder
  */
 public function listGridAreaTrabalhoArquivo(\Core_Dto_Search $dto)
 {
     $rsm = new \Doctrine\ORM\Query\ResultSetMapping();
     $rsm->addScalarResult('sq_tipo_historico_arquivo', 'sqTipoHistoricoArquivo', 'integer');
     $rsm->addScalarResult('total_record', 'totalRecord', 'integer');
     $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer');
     $rsm->addScalarResult('nu_digital', 'nuDigital', 'string');
     $rsm->addScalarResult('emprestado', 'emprestado', 'boolean');
     $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string');
     $rsm->addScalarResult('co_ambito_processo', 'coAmbitoProcesso', 'string');
     $rsm->addScalarResult('dt_arquivamento', 'dtArquivamento', 'zenddate');
     $rsm->addScalarResult('tx_classificacao', 'txClassificacao', 'string');
     $rsm->addScalarResult('nu_caixa', 'nuCaixa', 'string');
     $rsm->addScalarResult('no_unidade_org_caixa', 'noUnidadeOrgCaixa', 'string');
     $rsm->addScalarResult('tx_movimentacao', 'txMovimentacao', 'string');
     $rsm->addScalarResult('no_tipo_documento', 'noTipoDocumento', 'string');
     $rsm->addScalarResult('dt_cadastro', 'dtCadastro', 'zenddate');
     $rsm->addScalarResult('tx_assunto', 'txAssunto', 'string');
     $sqEmprestado = \Core_Configuration::getSgdoceTipoHistoricoArquivoEmprestado();
     $sqTipoArtefatoProcesso = \Core_Configuration::getSgdoceTipoArtefatoProcesso();
     $sqTipoArtefato = $dto->getTipoArtefato();
     $caseNuDigital = "sgdoce.formata_numero_digital(art.nu_digital)";
     $sql = 'SELECT DISTINCT ON (ch.sq_artefato)
                    COUNT(ch.sq_artefato) OVER() AS total_record,
                    ch.sq_tipo_historico_arquivo,
                    ch.sq_artefato,
                    ' . $caseNuDigital . ' AS nu_digital,
                    (ch.sq_tipo_historico_arquivo = %2$d) AS emprestado,
                    sgdoce.formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) AS nu_artefato,
                    ap.co_ambito_processo,
                    ch.dt_operacao                  AS dt_arquivamento,
                    cl.tx_classificacao,
                    cx.nu_caixa || \'/\' || cx.nu_ano AS nu_caixa,
                    un.no_pessoa                    AS no_Unidade_Org_Caixa,
                    tha.ds_tipo_historico_arquivo   AS tx_movimentacao,
                    tp_doc.no_tipo_documento,
                    art.dt_cadastro,
                    ass.tx_assunto
             FROM sgdoce.caixa_artefato ca
             JOIN sgdoce.caixa cx
               ON ca.sq_caixa = cx.sq_caixa
             JOIN sgdoce.caixa_historico ch
               ON (ch.sq_caixa, ch.sq_artefato) = (ca.sq_caixa, ca.sq_artefato)
             JOIN sgdoce.artefato art
               ON art.sq_artefato = ca.sq_artefato
             JOIN sgdoce.tipo_artefato_assunto tass
               ON tass.sq_tipo_artefato_assunto = art.sq_tipo_artefato_assunto
             JOIN sgdoce.assunto ass
               ON tass.sq_assunto = ass.sq_assunto
        LEFT JOIN sgdoce.artefato_processo ap
               ON ap.sq_artefato = art.sq_artefato AND tass.sq_tipo_artefato = %3$d
        LEFT JOIN sgdoce.tipo_documento tp_doc
               ON tp_doc.sq_tipo_documento = art.sq_tipo_documento
             JOIN sgdoce.tipo_historico_arquivo tha
               ON tha.sq_tipo_historico_arquivo = ch.sq_tipo_historico_arquivo
             LEFT JOIN sgdoce.artefato_classificacao ac
               ON art.sq_artefato = ac.sq_artefato
        LEFT JOIN sgdoce.classificacao cl
               ON ac.sq_classificacao = cl.sq_classificacao
             JOIN corporativo.vw_unidade_org un
               ON cx.sq_unidade_org = un.sq_pessoa
            WHERE tass.sq_tipo_artefato = %4$d
             %1$s';
     $optionalCondition = '';
     $search = mb_strtolower($dto->getSearch(), 'UTF-8');
     //Este order by tmb é obrigatório!!
     $orderBy = 'ORDER BY ch.sq_artefato, ch.dt_operacao DESC';
     if ($search) {
         $queryBuild = $this->_em->createQueryBuilder();
         //            $nuArtefato = $this->_em->createQueryBuilder()->expr()->lower('art.nu_artefato')->__toString();
         $nuArtefato = $this->_em->createQueryBuilder()->expr()->lower("translate(art.nu_artefato::text, './-'::text, ''::text)")->__toString();
         if (is_numeric($search)) {
             $nuCaixa = $this->_em->createQueryBuilder()->expr()->lower('cx.nu_caixa')->__toString();
             $conditions = " AND (\n                                   {$queryBuild->expr()->like($caseNuDigital, $queryBuild->expr()->literal('%' . $search . '%')->__toString())->__toString()}\n                                OR\n                                   {$queryBuild->expr()->like($nuArtefato, $queryBuild->expr()->literal('%' . $search . '%')->__toString())->__toString()}\n                              ) ";
             //Juliano [30-08-2015]
             //ESSA TRETA DO UNION É PARA MELHORAR A PERFORMACE DAS CONSULTAS POR NUMERO ENQUANTO NÃO FIZERMOS UMA REFATORAÇÃO
             //NA QUERY
             $union = 'SELECT DISTINCT ON (ch.sq_artefato)
                             COUNT(ch.sq_artefato) OVER() AS total_record,
                             ch.sq_tipo_historico_arquivo,
                             ch.sq_artefato,
                             ' . $caseNuDigital . ' AS nu_digital,
                             (ch.sq_tipo_historico_arquivo = %1$d) AS emprestado,
                             sgdoce.formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) AS nu_artefato,
                             ap.co_ambito_processo,
                             ch.dt_operacao                  AS dt_arquivamento,
                             cl.tx_classificacao,
                             cx.nu_caixa || \'/\' || cx.nu_ano AS nu_caixa,
                             un.no_pessoa                    AS no_Unidade_Org_Caixa,
                             tha.ds_tipo_historico_arquivo   AS tx_movimentacao,
                             tp_doc.no_tipo_documento,
                             art.dt_cadastro,
                             ass.tx_assunto
                      FROM sgdoce.caixa_artefato ca
                      JOIN sgdoce.caixa cx
                        ON ca.sq_caixa = cx.sq_caixa
                      JOIN sgdoce.caixa_historico ch
                        ON (ch.sq_caixa, ch.sq_artefato) = (ca.sq_caixa, ca.sq_artefato)
                      JOIN sgdoce.artefato art
                        ON art.sq_artefato = ca.sq_artefato
                      JOIN sgdoce.tipo_artefato_assunto tass
                        ON tass.sq_tipo_artefato_assunto = art.sq_tipo_artefato_assunto
                      JOIN sgdoce.assunto ass
                        ON tass.sq_assunto = ass.sq_assunto
                 LEFT JOIN sgdoce.artefato_processo ap
                        ON ap.sq_artefato = art.sq_artefato AND tass.sq_tipo_artefato = %2$d
                 LEFT JOIN sgdoce.tipo_documento tp_doc
                        ON tp_doc.sq_tipo_documento = art.sq_tipo_documento
                      JOIN sgdoce.tipo_historico_arquivo tha
                        ON tha.sq_tipo_historico_arquivo = ch.sq_tipo_historico_arquivo
                      LEFT JOIN sgdoce.artefato_classificacao ac
                        ON art.sq_artefato = ac.sq_artefato
                 LEFT JOIN sgdoce.classificacao cl
                        ON ac.sq_classificacao = cl.sq_classificacao
                      JOIN corporativo.vw_unidade_org un
                        ON cx.sq_unidade_org = un.sq_pessoa
                     WHERE tass.sq_tipo_artefato = %3$d' . PHP_EOL;
             $sqlUnion = ' UNION ' . $union;
             $unionCondition = " AND (\n                                           {$queryBuild->expr()->like($nuCaixa, $queryBuild->expr()->literal('%' . $search . '%')->__toString())->__toString()}\n                                         OR\n                                           {$queryBuild->expr()->like("cx.nu_ano::VARCHAR", $queryBuild->expr()->literal('%' . $search . '%')->__toString())->__toString()}\n                                        )";
             $optionalCondition = $conditions . sprintf($sqlUnion, $sqEmprestado, $sqTipoArtefatoProcesso, $sqTipoArtefato) . $unionCondition;
             $orderBy = 'ORDER BY sq_artefato, dt_arquivamento DESC';
         } else {
             $literalExpr = $queryBuild->expr()->literal($this->removeAccent('%' . $search . '%'))->__toString();
             $txClassificacao = $queryBuild->expr()->lower('cl.tx_classificacao')->__toString();
             $noTipoDocumento = $queryBuild->expr()->lower('tp_doc.no_tipo_documento')->__toString();
             $noPessoaOrigem = $queryBuild->expr()->lower('un.no_pessoa')->__toString();
             $dsTpHistArquivo = $queryBuild->expr()->lower('tha.ds_tipo_historico_arquivo')->__toString();
             $translate = "TRANSLATE(%s, 'áàâãäéèêëíìîĩïóòôõöúùûũüÁÀÂÃÄÉÈÊËÍÌÎĨÏÓÒÔÕÖÚÙÛŨÜçÇ', 'aaaaaeeeeiiiiiooooouuuuuAAAAAEEEEIIIIIOOOOOUUUUUcC')";
             $optionalCondition = ' AND (' . $queryBuild->expr()->like(sprintf($translate, $txClassificacao), $literalExpr)->__toString() . ' OR ' . $queryBuild->expr()->like(sprintf($translate, $noTipoDocumento), $literalExpr)->__toString() . ' OR ' . $queryBuild->expr()->like(sprintf($translate, $noPessoaOrigem), $literalExpr)->__toString() . ' OR ' . $queryBuild->expr()->like(sprintf($translate, $dsTpHistArquivo), $literalExpr)->__toString() . ') ';
         }
     }
     $sql .= " {$orderBy}";
     $strQuery = sprintf($sql, $optionalCondition, $sqEmprestado, $sqTipoArtefatoProcesso, $sqTipoArtefato);
     return $this->_em->createNativeQuery($strQuery, $rsm)->useResultCache(FALSE);
 }
Esempio n. 2
0
 private function _checkCanReturn(\Sgdoce\Model\Entity\Artefato $entityArtefato)
 {
     $sqTipoHistoricoArquivo = $this->_getRepository('app:CaixaHistorico')->getLastHistorico($entityArtefato->getSqArtefato());
     if (!is_null($sqTipoHistoricoArquivo)) {
         if ($sqTipoHistoricoArquivo != \Core_Configuration::getSgdoceTipoHistoricoArquivoEmprestado()) {
             $entityTipoArtefato = $entityArtefato->getSqTipoArtefatoAssunto()->getSqTipoArtefato();
             $noTipoArtefato = $entityTipoArtefato->getNoTipoArtefato();
             if ($entityTipoArtefato->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) {
                 $nuArtefato = $this->getServiceLocator()->getService('Processo')->formataProcessoAmbitoFederal($entityArtefato);
             } else {
                 $nuArtefato = $entityArtefato->getNuDigital()->getNuEtiqueta();
             }
             throw new \Core_Exception_ServiceLayer_Verification("O {$noTipoArtefato} <b>{$nuArtefato}</b> não esta emprestado. Logo, não pode ser devolvido");
         }
     }
     return $this;
 }