public function vinculoListGrid(\Core_Dto_Abstract $dto) { if ($this->hasNoOrderVinculo($dto->getSqArtefatoParent())) { $this->setOrderIn($dto->getSqArtefatoParent()); } $rsm = new \Doctrine\ORM\Query\ResultSetMapping($this->_em); $rsm->addScalarResult('total_record', 'totalRecord', 'integer'); $rsm->addScalarResult('nu_ordem', 'nuOrdem', 'integer'); $rsm->addScalarResult('sq_artefato_vinculo', 'sqArtefatoVinculo', 'integer'); $rsm->addScalarResult('sq_artefato', 'sqArtefato', 'integer'); $rsm->addScalarResult('sq_artefato_pai', 'sqArtefatoPai', 'integer'); $rsm->addScalarResult('sq_tipo_artefato', 'sqTipoArtefato', 'integer'); $rsm->addScalarResult('sq_tipo_vinculo_artefato', 'sqTipoVinculoArtefato', 'integer'); $rsm->addScalarResult('nu_fvalue', 'nuFvalue', 'integer'); $rsm->addScalarResult('nu_lvalue', 'nuLvalue', 'integer'); $rsm->addScalarResult('nu_digital', 'nuDigital', 'string'); $rsm->addScalarResult('nu_artefato', 'nuArtefato', 'string'); $rsm->addScalarResult('dt_tramite', 'dtTramite', 'string'); $rsm->addScalarResult('no_tipo_documento', 'noTipoDocumento', 'string'); $rsm->addScalarResult('tx_assunto', 'txAssunto', 'string'); $rsm->addScalarResult('tx_movimentacao', 'txMovimentacao', 'string'); $rsm->addScalarResult('is_vinculo', 'isVinculo', 'boolean'); $rsm->addScalarResult('is_disponivel', 'isDisponivel', 'boolean'); $rsm->addScalarResult('is_anexado', 'isAnexado', 'boolean'); $rsm->addScalarResult('is_apensado', 'isApensado', 'boolean'); $rsm->addScalarResult('is_primeira_peca', 'isPrimeiraPeca', 'boolean'); $strQuery = sprintf(' WITH configs AS ( SELECT %5$s, %6$s, %7$s, %8$s, %9$s, %12$s, %13$s, %14$s, %15$s, %16$s FROM sicae.lista_constantes( \'%5$s\', \'%6$s\', \'%7$s\', \'%8$s\', \'%9$s\', \'%12$s\', \'%13$s\', \'%14$s\', \'%15$s\', \'%16$s\' ) as c( %5$s integer, %6$s integer, %7$s integer, %8$s integer, %9$s integer, %12$s integer, %13$s integer, %14$s integer, %15$s integer, %16$s integer ) ) SELECT COUNT(sq_artefato) OVER() as total_record, * FROM ( (SELECT vin.sq_artefato_vinculo , art.sq_artefato , art_art_ass.sq_tipo_artefato , vin.sq_artefato_pai , vin.sq_tipo_vinculo_artefato , formata_numero_digital(art.nu_digital) as nu_digital , sgdoce.formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) as nu_artefato , tip_doc.no_tipo_documento , ass.tx_assunto , sgdoce.ultima_movimentacao_artefato(art.sq_artefato) as tx_movimentacao , TRUE AS is_vinculo , (configs.%5$s = vin.sq_tipo_vinculo_artefato)::BOOLEAN AS is_anexado , (vin.sq_tipo_vinculo_artefato IN (configs.%6$s, configs.%9$s)) AS is_apensado , FALSE AS is_disponivel , (configs.%15$s = vin.sq_tipo_vinculo_artefato) as is_primeira_peca , vin.nu_ordem AS nu_ordem , (first_value(vin.nu_ordem) OVER(PARTITION BY vin.sq_artefato_pai ORDER BY vin.nu_ordem ASC)::INTEGER)::INTEGER AS nu_fvalue , (last_value(vin.nu_ordem) OVER(PARTITION BY vin.sq_artefato_pai)::INTEGER)::INTEGER AS nu_lvalue FROM sgdoce.artefato_vinculo AS vin INNER JOIN configs ON TRUE INNER JOIN sgdoce.artefato AS art ON (vin.sq_artefato_filho = art.sq_artefato) INNER JOIN sgdoce.tipo_artefato_assunto AS art_art_ass ON (art.sq_tipo_artefato_assunto = art_art_ass.sq_tipo_artefato_assunto) INNER JOIN sgdoce.assunto AS ass USING (sq_assunto) LEFT JOIN sgdoce.tipo_documento AS tip_doc USING (sq_tipo_documento) LEFT JOIN sgdoce.artefato_processo AS ap ON (art.sq_artefato = ap.sq_artefato) WHERE vin.sq_artefato_pai = %2$d AND vin.sq_tipo_vinculo_artefato NOT IN (configs.%12$s,configs.%13$s,configs.%14$s) AND ((art_art_ass.sq_tipo_artefato = %11$s) OR (%11$s IS NULL)) ) UNION (SELECT null as sq_artefato_vinculo ,art.sq_artefato ,art_art_ass.sq_tipo_artefato ,NULL AS sq_artefato_pai ,NULL AS sq_tipo_vinculo_artefato ,formata_numero_digital(art.nu_digital) as nu_digital ,sgdoce.formata_numero_artefato(art.nu_artefato, ap.co_ambito_processo) as nu_artefato ,tip_doc.no_tipo_documento ,ass.tx_assunto ,sgdoce.ultima_movimentacao_artefato(art.sq_artefato) as tx_movimentacao ,FALSE AS is_vinculo ,FALSE AS is_anexado ,FALSE AS is_apensado ,TRUE AS is_disponivel ,FALSE AS is_primeira_peca ,NULL AS nu_ordem ,0 AS nu_fvalue ,0 AS nu_lvalue FROM sgdoce.artefato AS art INNER JOIN configs ON TRUE INNER JOIN sgdoce.tramite_artefato uta ON uta.sq_artefato = art.sq_artefato AND uta.st_ultimo_tramite INNER JOIN sgdoce.tipo_artefato_assunto AS art_art_ass USING (sq_tipo_artefato_assunto) INNER JOIN sgdoce.assunto AS ass USING (sq_assunto) LEFT JOIN sgdoce.artefato_imagem uia ON art.sq_artefato = uia.sq_artefato AND uia.st_ativo JOIN configs const ON TRUE LEFT JOIN sgdoce.artefato_vinculo atv ON sq_tipo_vinculo_artefato = const.SGDOCE_TIPO_VINCULO_ARTEFATO_AUTUACAO AND art.sq_artefato = atv.sq_artefato_pai LEFT JOIN sgdoce.artefato_imagem uiaf ON uiaf.sq_artefato = atv.sq_artefato_filho LEFT JOIN sgdoce.tipo_documento AS tip_doc ON (tip_doc.sq_tipo_documento = art.sq_tipo_documento) LEFT JOIN sgdoce.caixa_artefato AS arq ON (arq.sq_artefato = art.sq_artefato) LEFT JOIN sgdoce.artefato_processo AS ap ON (art.sq_artefato = ap.sq_artefato) LEFT JOIN sgdoce.artefato_vinculo av ON (art.sq_artefato = av.sq_artefato_filho AND av.sq_tipo_vinculo_artefato NOT IN (configs.%12$s,configs.%13$s,configs.%14$s)) LEFT JOIN sgdoce.artefato_arquivo_setorial aas ON art.sq_artefato = aas.sq_artefato AND aas.dt_desarquivamento IS NULL LEFT JOIN ( SELECT s.sq_artefato, COUNT(CASE WHEN uss.sq_tipo_status_solicitacao = configs_1.%16$s THEN NULL::INTEGER ELSE 1 END) AS qtd_solicitacao_aberta FROM sgdoce.solicitacao s JOIN configs configs_1 ON true JOIN sgdoce.vw_ultimo_status_solicitacao uss USING (sq_solicitacao) WHERE s.sq_artefato IS NOT NULL GROUP BY s.sq_artefato ) sol ON sol.sq_artefato = art.sq_artefato WHERE av.sq_artefato_vinculo IS NULL AND (sol.qtd_solicitacao_aberta = 0 OR sol.qtd_solicitacao_aberta IS NULL) AND (sgdoce.formata_numero_digital(art.nu_digital) LIKE \'%4$s%%\' OR LOWER(translate(art.nu_artefato, \'./-\', \'\')) LIKE \'%4$s%%\' ) AND EXISTS ( SELECT * FROM sgdoce.artefato pai INNER JOIN sgdoce.tipo_artefato_assunto tp_art_pai ON tp_art_pai.sq_tipo_artefato_assunto = pai.sq_tipo_artefato_assunto INNER JOIN sgdoce.tipo_artefato tp_pai ON tp_art_pai.sq_tipo_artefato = tp_pai.sq_tipo_artefato WHERE pai.sq_artefato = %2$d AND (art_art_ass.sq_tipo_artefato IN (configs.SGDOCE_TIPO_ARTEFATO_PROCESSO, configs.SGDOCE_TIPO_ARTEFATO_DOCUMENTO) AND tp_pai.sq_tipo_artefato = configs.SGDOCE_TIPO_ARTEFATO_PROCESSO) OR (art_art_ass.sq_tipo_artefato = (configs.SGDOCE_TIPO_ARTEFATO_DOCUMENTO) AND tp_pai.sq_tipo_artefato = configs.SGDOCE_TIPO_ARTEFATO_DOCUMENTO)) AND art.sq_artefato != %2$d AND ((uta.sq_status_tramite > %19$d AND uta.sq_pessoa_recebimento = %1$d AND (uta.sq_unidade_org_tramite = %3$d OR uta.sq_pessoa_destino = %3$d))) AND arq.sq_artefato IS NULL -- artefatos arquivados não podem ser vinculados AND aas.sq_artefato IS NULL -- artefatps arqiovados no setor não podem ser vinculados AND art_art_ass.sq_tipo_artefato in (%10$s) AND (uia.sq_artefato_imagem IS NOT NULL OR (art_art_ass.sq_tipo_artefato = %18$d AND uiaf.sq_artefato_imagem IS NOT NULL)) AND ((art_art_ass.sq_tipo_artefato = %11$s) OR (%11$s IS NULL)) ) ) sub1', $dto->getSqPessoa(), $dto->getSqArtefatoParent(), $dto->getSqUnidadeOrg(), $dto->getNuArtefato(), self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_ANEXACAO, self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_APENSACAO, self::T_SGDOCE_TIPO_ARTEFATO_PROCESSO, self::T_SGDOCE_TIPO_ARTEFATO_DOCUMENTO, self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_INSERCAO, implode(',', (array) $dto->getTipoArtefatoAceito()), $dto->getSqArtefatoTipo() ? (int) $dto->getSqArtefatoTipo() : 'NULL', self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_REFERENCIA, self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_APOIO, self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_DESPACHO, self::T_SGDOCE_TIPO_VINCULO_ARTEFATO_AUTUACAO, self::T_SGDOCE_TIPO_STATUS_SOLICITACAO_FINALIZADA, \Core_Configuration::getSgdoceStatusTramiteCancelado(), \Core_Configuration::getSgdoceTipoArtefatoProcesso(), \Core_Configuration::getSgdoceStatusTramiteTramitado()); return $this->_em->createNativeQuery($strQuery, $rsm)->useResultCache(false); }