/** * * @param \Core_Dto_Search $dto * @return \Doctrine\DBAL\Query\QueryBuilder */ public function listGrid(\Core_Dto_Search $dto) { $rsm = new \Doctrine\ORM\Query\ResultSetMapping(); $rsm->addScalarResult('total_record', 'totalRecord', 'integer'); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('digital_numero', 'digitalNumero', 'string'); $rsm->addScalarResult('dt_arquivamento', 'dtArquivamento', 'zenddate'); $rsm->addScalarResult('no_pessoa_arquivamento', 'noPessoaArquivamento', 'string'); $rsm->addScalarResult('tx_assunto', 'txAssunto', 'string'); $rsm->addScalarResult('no_tipo_documento', 'noTipoDocumento', 'string'); $rsm->addScalarResult('no_pessoa_origem', 'noPessoaOrigem', 'string'); $caseNuDigital = "sgdoce.formata_numero_digital(a.nu_digital)"; $sql = "\n SELECT DISTINCT\n COUNT(a.sq_artefato) OVER() AS total_record\n ,a.sq_artefato\n ,COALESCE({$caseNuDigital}, formata_numero_artefato(a.nu_artefato,ap.co_ambito_processo)) AS digital_numero\n ,dt_arquivamento\n ,p.no_pessoa as no_pessoa_arquivamento\n ,ass.tx_assunto\n ,td.no_tipo_documento\n ,ps.no_pessoa AS no_pessoa_origem\n FROM artefato_arquivo_setorial aas\n JOIN vw_pessoa p ON aas.sq_pessoa_arquivamento = p.sq_pessoa\n JOIN artefato a USING(sq_artefato)\n JOIN sgdoce.tipo_artefato_assunto taa USING(sq_tipo_artefato_assunto)\n JOIN sgdoce.assunto ass ON ass.sq_assunto = taa.sq_assunto\n JOIN sgdoce.pessoa_artefato pa ON pa.sq_artefato = a.sq_artefato and pa.sq_pessoa_funcao = %1\$d\n JOIN sgdoce.pessoa_sgdoce ps ON ps.sq_pessoa_sgdoce = pa.sq_pessoa_sgdoce\n LEFT JOIN artefato_processo ap ON a.sq_artefato = ap.sq_artefato\n LEFT JOIN tipo_documento td USING(sq_tipo_documento)\n WHERE dt_desarquivamento IS NULL\n AND sq_unidade_arquivamento = %2\$d\n AND sq_tipo_artefato = %3\$d\n %4\$s\n ORDER BY dt_arquivamento DESC"; $optionalCondition = ''; $search = mb_strtolower($dto->getSearch(), 'UTF-8'); if ($search) { $queryBuild = $this->_em->createQueryBuilder(); if ($dto->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $nuArtefato = $this->_em->createQueryBuilder()->expr()->lower("TRANSLATE(a.nu_artefato, './-', '')")->__toString(); $optionalCondition = " AND (" . $queryBuild->expr()->eq('a.nu_artefato', $queryBuild->expr()->literal($search))->__toString() . " OR " . $queryBuild->expr()->eq($nuArtefato, $queryBuild->expr()->literal(str_replace(array('.', '/', '-'), '', $search)))->__toString() . ")"; } else { $optionalCondition = " AND " . $queryBuild->expr()->eq('a.nu_digital', $search)->__toString(); } } $strSql = sprintf($sql, \Core_Configuration::getSgdocePessoaFuncaoOrigem(), \Core_Integration_Sica_User::getUserUnit(), $dto->getSqTipoArtefato(), $optionalCondition); return $this->_em->createNativeQuery($strSql, $rsm)->useResultCache(false); }
/** * Listagem de artefatos de migração inconsistentes. * * @param \Core_Dto_Abstract $dto * @return \Doctrine\ORM\QueryBuilder */ public function listGridArtefatosInconsistentes(\Core_Dto_Search $dto) { $rsm = new \Doctrine\ORM\Query\ResultSetMapping(); $rsm->addScalarResult('total_record', 'totalRecord', 'integer'); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('nu_digital', 'nuDigital', 'string'); $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string'); $rsm->addScalarResult('dt_cadastro', 'dtCadastro', 'zenddate'); $not = "NOT"; $proc = "LEFT"; if ($dto->sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $not = ""; $proc = ""; } $sql = 'SELECT COUNT(sq_artefato) OVER() AS total_record, * FROM ( SELECT a.sq_artefato, LPAD(CAST(a.nu_digital AS VARCHAR), 7, \'0\') AS nu_digital, a.dt_cadastro, sgdoce.formata_numero_artefato(a.nu_artefato, ap.co_ambito_processo ) as nu_artefato FROM sgdoce.artefato a LEFT JOIN sgdoce.tramite_artefato ta using(sq_artefato) ' . $proc . ' JOIN sgdoce.artefato_processo ap ON a.sq_artefato = ap.sq_artefato WHERE a.st_migracao AND a.nu_digital IS ' . $not . ' NULL AND a.ar_inconsistencia IS NOT NULL AND FALSE = ANY(a.ar_inconsistencia) AND ta.st_ultimo_tramite AND ta.sq_pessoa_destino IS NULL %1$s ) AS totalizador ORDER BY nu_digital, nu_artefato NULLS LAST'; $optionalCondition = ''; $search = mb_strtolower($dto->getSearch(), 'UTF-8'); if ($search) { $queryBuild = $this->_em->createQueryBuilder(); if ($dto->sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $nuArtefato = $this->_em->createQueryBuilder()->expr()->lower("TRANSLATE(a.nu_artefato, './-', '')")->__toString(); $optionalCondition = " AND (" . $queryBuild->expr()->eq('a.nu_artefato', $queryBuild->expr()->literal($search))->__toString() . " OR " . $queryBuild->expr()->eq($nuArtefato, $queryBuild->expr()->literal(str_replace(array('.', '/', '-'), '', $search)))->__toString() . ")"; } else { $optionalCondition = " AND " . $queryBuild->expr()->eq('a.nu_digital', $search)->__toString(); } } $query = $this->_em->createNativeQuery(sprintf($sql, $optionalCondition), $rsm); $query->setParameter('sqUnidadeOrg', \Core_Integration_Sica_User::getUserUnit())->useResultCache(false); return $query; }
/** * método que retorna dados para grid da área de trabalho * @param \Core_Dto_Abstract $dto * @return \Doctrine\ORM\QueryBuilder */ public function listGridAreaTrabalho(\Core_Dto_Search $dto) { $search = mb_strtolower($dto->getSearch(), 'UTF-8'); /* * se $search is numeric "is_numeric($search)" // procura nas colunas numericas (nuDigital, nuArtefato) * * caso contrario procura em todas as colunas com "OR" * */ $subQuery = $this->_em->createQueryBuilder()->select('max(hh.sqHistoricoArtefato)')->from('app:HistoricoArtefato', 'hh')->where('hh.sqArtefato = hia.sqArtefato'); $queryBuilder = $this->_em->createQueryBuilder(); $query = $queryBuilder->select('a.sqArtefato', 'IDENTITY(a.nuDigital) as nuDigital', 'a.nuArtefato', 'a.dtArtefato', 'td.noTipoDocumento as tipo', 'td.inAbreProcesso', 'ass.txAssunto as assunto', 'ps.noPessoa as origem')->distinct('a.sqArtefato')->from('app:Artefato', 'a')->innerJoin('a.sqHistoricoArtefato', 'hia')->leftJoin('a.sqTipoDocumento', 'td')->innerJoin('a.sqTipoArtefatoAssunto', 'tas')->innerJoin('tas.sqAssunto', 'ass')->innerJoin('a.sqPessoaArtefato', 'pa', 'WITH', 'pa.sqPessoaFuncao = :sqPessoaFuncao')->innerJoin('pa.sqPessoaSgdoce', 'ps', 'WITH')->andWhere('tas.sqTipoArtefato = :sqTipoArtefato')->andWhere('hia.sqPessoa = :sqPessoa')->andWhere('hia.sqHistoricoArtefato = (' . $subQuery->getDQL() . ')')->setParameter('sqPessoa', $dto->sqPessoa)->setParameter('sqTipoArtefato', $dto->sqTipoArtefato)->setParameter('sqPessoaFuncao', \Core_Configuration::getSgdocePessoaFuncaoOrigem())->orderBy('a.sqArtefato'); // if($search){ // $nuArtefato = $queryBuilder->expr() // ->lower($queryBuilder->expr()->trim('a.nuArtefato')); // // if (is_numeric($search)) { // $query->orWhere('a.nuDigital = :search'); // // // $query->orWhere($queryBuilder->expr()->like( // 'clear_accentuation(' . $nuArtefato .')', // $queryBuilder->expr() // ->literal($this->removeAccent('%' . $search . '%')) // ) // ); // }else{ // // } // $query->setParameter('search', $search); // } return $query; }