/** * * @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); }
/** * método para salvar vinculo entre artefatos * @param \Core_Dto_Search $dto */ public function addDocumentoEletronico(\Core_Dto_Search $dto) { $entity = NULL; if ($dto->getSqTipoArtefato() == 2) { //Processo $artefato = $this->_getRepository('app:Artefato')->findBy(array('nuArtefato' => $dto->getNuArtefatoVinculacao())); } else { //Dossie Referencia e vinculo entre documentos $artefato = $this->_getRepository('app:Artefato')->findBy(array('nuDigital' => $dto->getNuDigital())); } if ($artefato) { $sqArtefatoPai = $this->_getRepository('app:Artefato')->find($dto->getSqArtefato()); $sqArtefatoFilho = $this->_getRepository()->find($artefato[0]->getSqArtefato()); $sqTipoVinculo = $this->_getRepository('app:TipoVinculoArtefato')->find($dto->getTipoVinculo()); $entity = new \Sgdoce\Model\Entity\ArtefatoVinculo(); $entity->setSqArtefatoPai($sqArtefatoPai); $entity->setSqArtefatoFilho($sqArtefatoFilho); $entity->setSqTipoVinculoArtefato($sqTipoVinculo); $entity->setDtVinculo(\Zend_Date::now()); if ($dto->getInOriginal()) { $entity->setInOriginal($dto->getInOriginal()); } else { $entity->setInOriginal(FALSE); } $this->getEntityManager()->persist($entity); $this->getEntityManager()->flush($entity); } return $entity; }
/** * * @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(); }
/** * @param \Core_Dto_Search $dto * @return array */ public function comboArtefato($dto) { $sqTipoArtefato = $dto->getSqTipoArtefato(); $field = "nuDigital"; if ($sqTipoArtefato == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $field = "nuArtefato"; } $list = $this->_getRepository()->searchArtefato($dto); if (!isset($list['__NO_CLICK__'])) { $out = array(); foreach ($list as $item) { $out[$item['sqArtefato']] = "{$item[$field]}"; } return $out; } return $list; }
/** * @return */ public function listGridHistorico(\Core_Dto_Search $dto) { $listCondition = array('getSqTipoAssuntoSolicitacao' => array("=" => array("AND" => 'tas.sq_tipo_assunto_solicitacao'))); $operationTypeArtefato = 'IS NULL'; if (in_array($dto->getSqTipoArtefato(), array(1, 2))) { $operationTypeArtefato = '='; } $listCondition['getSqTipoArtefato'] = array($operationTypeArtefato => array("AND" => 'taa.sq_tipo_artefato')); if ($dto->getNuArtefato() != '' && $dto->getSqTipoArtefato()) { if ($dto->getSqTipoArtefato() == \Core_Configuration::getSgdoceTipoArtefatoProcesso()) { $listCondition['getNuArtefato'] = array("ilike" => array("OR" => array("formata_numero_artefato(at.nu_artefato, ap.co_ambito_processo)", 'at.nu_artefato'))); } else { $listCondition['getNuArtefato'] = array("ilike" => array("AND" => "formata_numero_digital(at.nu_digital)")); } } $where = $this->getEntityManager()->getRepository('app:Artefato')->getCriteriaText($listCondition, $dto); if ($dto->getDtSolicitacao() != "") { $dateInicial = new \Zend_Date($dto->getDtSolicitacao()); $dateFinal = new \Zend_Date($dto->getDtSolicitacao()); $dateInicial->setHour(00)->setMinute(00)->setSecond(00); $dateFinal->setHour(23)->setMinute(59)->setSecond(59); $where .= $where ? ' AND ' : ' '; $where .= "s.dt_solicitacao between '{$dateInicial->get(\Zend_Date::ISO_8601)}' and '{$dateFinal->get(\Zend_Date::ISO_8601)}'"; } $rsm = new \Doctrine\ORM\Query\ResultSetMapping($this->_em); $rsm->addScalarResult('total_record', 'totalRecord', 'integer'); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('sq_solicitacao', 'sqSolicitacao', 'integer'); $rsm->addScalarResult('dt_solicitacao', 'dtSolicitacao', 'string'); $rsm->addScalarResult('no_tipo_status_solicitacao', 'noTipoStatusSolicitacao', 'string'); $rsm->addScalarResult('no_pessoa_abertura', 'noPessoaAbertura', 'string'); $rsm->addScalarResult('no_unidade_abertura', 'noUnidadeAbertura', 'string'); $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string'); $rsm->addScalarResult('no_tipo_assunto_solicitacao', 'noTipoAssuntoSolicitacao', 'string'); $rsm->addScalarResult('ds_solicitacao', 'dsSolicitacao', 'string'); $rsm->addScalarResult('has_image', 'hasImage', 'boolean'); $sql = "SELECT COUNT(s.sq_solicitacao) OVER() AS total_record,\n s.sq_artefato,\n s.sq_solicitacao,\n s.dt_solicitacao,\n uss.no_tipo_status_solicitacao,\n s.sq_pessoa as sq_pessoa_abertura,\n und_abertura.sg_unidade_org as no_unidade_abertura,\n pes_abertura.no_pessoa || (COALESCE('<br>(' || tel.nu_ddd || ') ' || tel.nu_telefone, '')) as no_pessoa_abertura,\n\n CASE\n WHEN at.nu_digital IS NOT NULL THEN\n sgdoce.formata_numero_digital(at.nu_digital)\n ELSE\n sgdoce.formata_numero_artefato(at.nu_artefato, ap.co_ambito_processo)\n END AS nu_artefato,\n tas.no_tipo_assunto_solicitacao,\n s.ds_solicitacao\n FROM sgdoce.solicitacao s\n JOIN sgdoce.tipo_assunto_solicitacao AS tas USING(sq_tipo_assunto_solicitacao)\n LEFT JOIN (\n sgdoce.artefato AS at\n INNER JOIN sgdoce.tipo_artefato_assunto AS taa ON at.sq_tipo_artefato_assunto = taa.sq_tipo_artefato_assunto\n LEFT JOIN sgdoce.artefato_processo AS ap ON at.sq_artefato = ap.sq_artefato\n ) ON s.sq_artefato = at.sq_artefato\n\n JOIN corporativo.vw_pessoa AS pes_abertura ON s.sq_pessoa = pes_abertura.sq_pessoa\n JOIN corporativo.vw_unidade_org AS und_abertura ON s.sq_unidade_org = und_abertura.sq_pessoa\n JOIN sgdoce.vw_ultimo_status_solicitacao AS uss ON s.sq_solicitacao = uss.sq_solicitacao\n LEFT JOIN corporativo.vw_telefone AS tel ON (tel.sq_pessoa = pes_abertura.sq_pessoa AND tel.sq_tipo_telefone = " . \Core_Configuration::getCorpTipoTelefoneInstitucional() . ")\n %s\n ORDER BY s.dt_solicitacao DESC"; if ($where != "") { $sql = sprintf($sql, "WHERE {$where}"); } else { $sql = sprintf($sql, ""); } return $this->_em->createNativeQuery($sql, $rsm)->useResultCache(false); }