/** * 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); }
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; }